@xsolla/payment-client-core 0.3.4 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/core/payment/actions/analytics/analytics-payload-creator.map.mjs +3 -0
- package/esm2022/lib/core/payment/actions/analytics/analytics-payload-creator.type.mjs +2 -0
- package/esm2022/lib/core/payment/actions/analytics/status-updated-analytics-payload-creator.mjs +13 -0
- package/esm2022/lib/core/payment/actions/next-action.service.mjs +7 -2
- package/esm2022/lib/core/payment/status/listen-status/listen-status.service.mjs +12 -2
- package/esm2022/lib/core/payment/status/status.service.mjs +7 -2
- package/esm2022/lib/core/payment/status/websocket-status/websocket-status.service.mjs +4 -1
- package/esm2022/lib/core/payment/three-ds/dfp-collect/dfp-collect.service.mjs +8 -12
- package/esm2022/lib/core/web-socket/centrifugo-web-socket.service.mjs +4 -1
- package/esm2022/lib/core/web-socket/nchan-web-socket.service.mjs +7 -1
- package/esm2022/lib/core/web-socket/web-socket.interface.mjs +1 -1
- package/fesm2022/xsolla-payment-client-core.mjs +56 -14
- package/fesm2022/xsolla-payment-client-core.mjs.map +1 -1
- package/lib/core/payment/actions/analytics/analytics-payload-creator.map.d.ts +2 -0
- package/lib/core/payment/actions/analytics/analytics-payload-creator.type.d.ts +3 -0
- package/lib/core/payment/actions/analytics/status-updated-analytics-payload-creator.d.ts +2 -0
- package/lib/core/payment/status/listen-status/listen-status.service.d.ts +3 -0
- package/lib/core/payment/status/status.service.d.ts +1 -0
- package/lib/core/payment/status/websocket-status/websocket-status.service.d.ts +1 -0
- package/lib/core/web-socket/centrifugo-web-socket.service.d.ts +1 -0
- package/lib/core/web-socket/nchan-web-socket.service.d.ts +1 -0
- package/lib/core/web-socket/web-socket.interface.d.ts +1 -0
- package/package.json +1 -1
- package/xsolla-payment-client-core-0.3.6.tgz +0 -0
- package/xsolla-payment-client-core-0.3.4.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xsolla-payment-client-core.mjs","sources":["../../src/lib/shared/translate/translate.helper.ts","../../src/lib/core/exceptions-handling/errors/app-error.class.ts","../../src/lib/core/settings/empty-utils-response.error.ts","../../src/lib/core/window.token.ts","../../src/lib/core/http/secure-api/api-url.const.ts","../../src/lib/core/http/secure-api/secure-api.service.ts","../../src/lib/core/settings/settings.service.ts","../../src/lib/core/exceptions-handling/errors/elk-error-types.enum.ts","../../src/lib/core/exceptions-handling/errors/tagged-error.class.ts","../../src/lib/core/user-agent/browsers.ts","../../src/lib/core/user-agent/device.enum.ts","../../src/lib/core/user-agent/os.ts","../../src/lib/core/user-agent/user-agent.service.ts","../../src/lib/core/exceptions-handling/common-log-attributes/common-log-attributes.service.ts","../../src/lib/core/exceptions-handling/elk/elk-logger.service.ts","../../src/lib/core/exceptions-handling/logger/logger.service.ts","../../src/lib/core/country/country.service.ts","../../src/lib/core/exceptions-handling/errors/response-error.class.ts","../../src/lib/core/boolean-number.enum.ts","../../src/lib/core/payment-methods/payment-methods-response.class.ts","../../src/lib/core/payment-methods/payment-methods-response.token.ts","../../src/lib/core/payment-methods/payment-methods.service.ts","../../src/lib/core/saved-methods/saved-methods-response.class.ts","../../src/lib/core/saved-methods/saved-methods-response.token.ts","../../src/lib/core/saved-methods/saved-methods.service.ts","../../src/lib/core/user-balance/user-balance-response.class.ts","../../src/lib/core/user-balance/user-balance-response.token.ts","../../src/lib/core/user-balance/user-balance.service.ts","../../src/lib/core/payment/credit-card-payment-methods-id.variable.ts","../../src/lib/core/payment/payment-configurations/types/is-credit-card-settings.guard.ts","../../src/lib/core/settings/refer.const.ts","../../src/lib/core/url/url.service.ts","../../src/lib/core/payment/config/config.service.ts","../../src/lib/core/payment/xps-comand.enum.ts","../../src/lib/core/payment/field-names.enum.ts","../../src/lib/core/payment/requests/submit/response/submit-response.class.ts","../../src/lib/core/payment/requests/initialize/response/initialize-response.class.ts","../../src/lib/core/user-behaviour-analytics/user-behaviour-event-name.enum.ts","../../src/lib/core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types.ts","../../src/lib/core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-categories.ts","../../src/lib/core/payment/requests/submit/is-submit-response.function.ts","../../src/lib/core/payment/form/input-event.enum.ts","../../src/lib/core/payment/form/overrided-fields/fields-allowed-to-override.ts","../../src/lib/core/type-guards/is-xps-boolean.function.ts","../../src/lib/core/payment/form/overrided-fields/empty-validator.function.ts","../../src/lib/core/payment/form/overrided-fields/override-field-config.ts","../../src/lib/core/payment/update-submit-response/update-after-error-rules.const.ts","../../src/lib/core/payment/external-change-fields.const.ts","../../src/lib/core/sdk-payment-systems/sdk-payment-methods.const.ts","../../src/lib/core/payment/payment-configurations/types/is-google-pay-settings.guard.ts","../../src/lib/core/payment/requests/initialize/response/initialize-response.token.ts","../../src/lib/core/exceptions-handling/errors/http-error.class.ts","../../src/lib/core/payment/xps-api/xps-api.service.ts","../../src/lib/core/payment/actions/redirect/ps4-pages/pages-payment-methods-id.const.ts","../../src/lib/core/payment/actions/redirect/ps4-pages/pages-routes.const.ts","../../src/lib/core/payment/actions/redirect/pay-station4-url.const.ts","../../src/lib/core/payment/actions/redirect/acquirers-with-redirect-in-new-window.const.ts","../../src/lib/core/payment/actions/redirect/redirect.action.class.ts","../../src/lib/core/payment/actions/show-fields/show-fields.action.class.ts","../../src/lib/core/payment/actions/check-status/check-status.action.class.ts","../../src/lib/core/payment/actions/show-errors/show-errors.action.class.ts","../../src/lib/core/capabilities/capability.const.ts","../../src/lib/core/capabilities/capabilities.service.ts","../../src/lib/core/payment/actions/show-init-form/show-init-form.action.class.ts","../../src/lib/core/exceptions-handling/errors/terminal-error.class.ts","../../src/lib/core/payment/status/status-groups.ts","../../src/lib/core/payment/status/status.enum.ts","../../src/lib/core/payment/status/status-request/response/status-response.class.ts","../../src/lib/core/payment/actions/status-updated/status-updated.action.class.ts","../../src/lib/core/payment/actions/three-ds/three-ds.action.class.ts","../../src/lib/core/payment/actions/special-button/special-button.action.class.ts","../../src/lib/core/payment/actions/show-qr-code/show-qr-code.action.class.ts","../../src/lib/shared/payment-methods-id.variable.ts","../../src/lib/core/payment/actions/show-mobile-payment-screen/show-mobile-payment-screen.action.class.ts","../../src/lib/core/payment/actions/show-xsolla-number/show-xsolla-number.action.class.ts","../../src/lib/core/payment/actions/show-cash-payment-instruction/show-cash-payment-instruction.action.class.ts","../../src/lib/core/payment/actions/redirect/google-three-ds-redirect.action.class.ts","../../src/lib/core/payment/actions/three-ds-redirect/three-ds-redirect.action.class.ts","../../src/lib/core/payment/actions/server-error/server-error.action.class.ts","../../src/lib/core/payment/actions/next-actions.ts","../../src/lib/core/user-behaviour-analytics/one-time-analytics-events.const.ts","../../src/lib/core/user-behaviour-analytics/event-builder/event-parameter-types.ts","../../src/lib/core/user-behaviour-analytics/event-builder/event-builder.service.ts","../../src/lib/core/user-behaviour-analytics/user-behaviour-analytics.service.ts","../../src/lib/core/payment/actions/next-action.service.ts","../../src/lib/core/errors-mapping/card-number-sanction-error-codes.const.ts","../../src/lib/core/errors-mapping/field-special-errors-map.const.ts","../../src/lib/shared/pipes/unescape-html/unescape-html.pipe.ts","../../src/lib/core/errors-mapping/xps-response-errors-mapping.service.ts","../../src/lib/core/exceptions-handling/errors/encrypt-card-error.ts","../../src/lib/core/credit-card/four-block-mask.const.ts","../../src/lib/core/credit-card/credit-card-types.enum.ts","../../src/lib/core/credit-card/types/visa.ts","../../src/lib/core/credit-card/types/mastercard.ts","../../src/lib/core/credit-card/default-mask.const.ts","../../src/lib/core/credit-card/types/maestro.ts","../../src/lib/core/credit-card/types/american-express.ts","../../src/lib/core/credit-card/types/diners-clubs.ts","../../src/lib/core/credit-card/types/discover.ts","../../src/lib/core/credit-card/types/jcb.ts","../../src/lib/core/credit-card/types/dankort.ts","../../src/lib/core/credit-card/types/hipercard.ts","../../src/lib/core/credit-card/types/elo.ts","../../src/lib/core/credit-card/types/aura.ts","../../src/lib/core/credit-card/types/naranja.ts","../../src/lib/core/credit-card/types/mir.ts","../../src/lib/core/credit-card/types/china-union-pay.ts","../../src/lib/core/credit-card/types/default-card.ts","../../src/lib/core/credit-card/types/postepay.ts","../../src/lib/core/credit-card/ordered-cards-settings.const.ts","../../src/lib/core/credit-card/credit-cards-map.const.ts","../../src/lib/core/credit-card/credit-card.service.ts","../../src/lib/core/encrypt-credit-card/encrypt-credit-card.service.ts","../../src/lib/core/payment/payment-settings/payment-settings.service.ts","../../src/lib/core/type-guards/is-null.function.ts","../../src/lib/core/type-guards/is-undefined.function.ts","../../src/lib/core/session/session.service.ts","../../src/lib/core/payment/requests/initialize/initialize.service.ts","../../src/lib/core/payment/xps-api/xps-api-part-request.abstract.ts","../../src/lib/core/exceptions-handling/errors/token-error.class.ts","../../src/lib/core/payment/requests/submit/request/submit-request.class.ts","../../src/lib/core/payment/requests/submit/request/submit-request.token.ts","../../src/lib/core/payment/requests/submit/response/submit-response.token.ts","../../src/lib/core/device-finger-print/device-finger-print.service.ts","../../src/lib/core/payment/requests/submit/submit.service.ts","../../src/lib/core/payment/emit-data.service.abstract.ts","../../src/lib/core/payment/requests/sync/request/sync-request.class.ts","../../src/lib/core/payment/requests/sync/request/sync-request.token.ts","../../src/lib/core/payment/requests/sync/response/sync-response.class.ts","../../src/lib/core/payment/requests/sync/response/sync-response.token.ts","../../src/lib/core/payment/requests/sync/sync.service.ts","../../src/lib/core/type-guards/is-object.function.ts","../../src/lib/core/payment/form/validators/convert.function.ts","../../src/lib/core/payment/form/validators/email/email-validator.ts","../../src/lib/core/payment/form/validators/required/required.validator.ts","../../src/lib/core/payment/form/converters/converter.abstract.ts","../../src/lib/core/payment/form/controls/control-config.ts","../../src/lib/core/payment/form/converters/email/email-control.config.ts","../../src/lib/core/payment/form/converters/email/email.converter.ts","../../src/lib/core/payment/form/controls/text-control.config.ts","../../src/lib/core/payment/form/validators/restricted-value/restricted-value.validator.ts","../../src/lib/core/payment/form/converters/zip/zip.converter.ts","../../src/lib/core/payment/form/validators/is-empty-input-value.function.ts","../../src/lib/core/type-guards/is-string.function.ts","../../src/lib/core/payment/form/validators/luhn-formula-validator/luhn-formula.validator.ts","../../src/lib/core/payment/form/controls/card-number/card-number-control.config.ts","../../src/lib/core/payment/form/validators/credit-card-length/credit-card-max-length.validator.ts","../../src/lib/core/payment/form/validators/credit-card-length/credit-card-min-length.validator.ts","../../src/lib/core/payment/form/converters/card-number/card-number.converter.ts","../../src/lib/core/payment/form/validators/card-month/card-month.validator.ts","../../src/lib/core/payment/form/converters/card-month/card-month.converter.ts","../../src/lib/core/payment/form/converters/cvv/cvv.converter.ts","../../src/lib/core/payment/form/validators/birth-date/birth-date.validator.ts","../../src/lib/core/payment/form/converters/birth-date/birth-date.converter.ts","../../src/lib/core/payment/form/converters/cardholder-name/cardholder-name.converter.ts","../../src/lib/core/payment/form/converters/cpf-name/cpf-name-regex.variable.ts","../../src/lib/core/payment/form/converters/cpf-name/cpf-name.converter.ts","../../src/lib/core/payment/form/validators/cpf-formula-validator/cpf-formula.validator.ts","../../src/lib/core/payment/form/converters/cpf-number/cpf-number.converter.ts","../../src/lib/core/payment/form/converters/street-number/street-number.converter.ts","../../src/lib/core/payment/form/converters/text/text.converter.ts","../../src/lib/core/payment/form/controls/checkbox/checkbox-control.config.ts","../../src/lib/core/payment/form/converters/checkbox/checkbox.converter.ts","../../src/lib/core/payment/form/controls/search-select/select-control.config.ts","../../src/lib/core/payment/form/converters/select/select.converter.ts","../../src/lib/core/payment/form/converters/pin/pin.converter.ts","../../src/lib/core/payment/form/controls/radio-control/radio-control.config.ts","../../src/lib/core/payment/form/converters/radio-group/radio-group.converter.ts","../../src/lib/core/payment/form/converters/pricepoint/pricepoint.converter.ts","../../src/lib/core/payment/form/controls/coupon/coupon-control.config.ts","../../src/lib/core/payment/form/validators/coupon/coupon-validator.ts","../../src/lib/core/payment/form/converters/coupon/coupon.converter.ts","../../src/lib/core/payment/form/validators/card-year/card-year.validator.ts","../../src/lib/core/payment/form/converters/card-year/card-year.converter.ts","../../src/lib/core/payment/form/validators/phone-validator.ts","../../src/lib/core/payment/form/validators/min-length-validator.ts","../../src/lib/core/payment/form/validators/max-length-validator.ts","../../src/lib/core/payment/form/controls/phone-control.config.ts","../../src/lib/core/payment/form/converters/phone/phone.converter.ts","../../src/lib/core/payment/form/validators/card-expiration-date-validator/card-expiration-date.validator.ts","../../src/lib/core/payment/form/converters/card-expiration/card-expiration.converter.ts","../../src/lib/core/payment/form/converters/converters-map.ts","../../src/lib/core/payment/form/controls/control-config.service.ts","../../src/lib/core/payment/form/form.service.ts","../../src/lib/core/payment/status/status-request/status-search-param.enum.ts","../../src/lib/core/payment/status/status-request/required-status-search-params.const.ts","../../src/lib/core/payment/status/status-request/status-search-params.map.ts","../../src/lib/core/payment/xps-api/xps-api-part.abstract.ts","../../src/lib/core/payment/status/status-request/request/status-request.class.ts","../../src/lib/core/payment/status/status-request/request/status-request.token.ts","../../src/lib/core/payment/status/status-request/response/status-response.token.ts","../../src/lib/core/payment/status/status-request/status-request.service.ts","../../src/lib/core/payment/finance-details/price.helpers.ts","../../src/lib/core/payment/finance-details/summary/default-image-patterns.const.ts","../../src/lib/core/payment/finance-details/vat-details-key.enum.ts","../../src/lib/core/payment/finance-details/summary/sales-tax-details-key.enum.ts","../../src/lib/core/payment/finance-details/summary/summary-finance-details-adapter.service.ts","../../src/lib/core/payment/finance-details/status/fields-with-currency.ts","../../src/lib/core/country/country-iso-code.enum.ts","../../src/lib/core/payment/finance-details/status/status-finance-details-adapter.service.ts","../../src/lib/core/payment/finance-details/finance-details.service.ts","../../src/lib/core/payment/status/check-status/request/check-status-request.class.ts","../../src/lib/core/payment/status/check-status/request/check-status-request.token.ts","../../src/lib/core/payment/status/check-status/response/check-status-response.class.ts","../../src/lib/core/payment/status/check-status/response/check-status-response.token.ts","../../src/lib/core/payment/status/check-status/check-status.service.ts","../../src/lib/core/payment/status/websocket-status/websocket-status.enum.ts","../../src/lib/core/web-socket/web-socket-client-type.enum.ts","../../src/lib/core/exceptions-handling/messages/message-tags.enum.ts","../../src/lib/core/exceptions-handling/messages/tagged-message.class.ts","../../src/lib/core/web-socket/nchan-web-socket.service.ts","../../src/lib/core/exceptions-handling/errors/ws-error.class.ts","../../src/lib/core/web-socket/centrifugo-web-socket.service.ts","../../src/lib/core/web-socket/web-socket.factory.ts","../../src/lib/core/payment/status/websocket-status/websocket-status.service.ts","../../src/lib/core/payment/status/listen-status/listen-status.service.ts","../../src/lib/core/payment/status/title-class.enum.ts","../../src/lib/core/payment/status/save-payment-method-status/save-payment-method-status.enum.ts","../../src/lib/core/payment/xps-response.error.ts","../../src/lib/core/payment/status/save-payment-method-status/api/saved-payment-account-changes.service.ts","../../src/lib/core/payment/status/save-payment-method-status/save-payment-method-status.service.ts","../../src/lib/core/payment/status/status.service.ts","../../src/lib/core/payment/credit-card-state/credit-card-state.service.ts","../../src/lib/core/payment/initialize-actions/special-button/special-button.action.class.ts","../../src/lib/core/payment/initialize-actions/initialize-next-actions.ts","../../src/lib/core/payment/initialize-actions/initialize-next-action.service.ts","../../src/lib/core/payment/three-ds/three-ds-status-websocket-types.enum.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/status-types.enum.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/request/status-three-ds-request.class.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/request/status-three-ds-request.token.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/response/status-three-ds-response.class.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/response/status-three-ds-response.token.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/status-three-ds.service.ts","../../src/lib/core/payment/three-ds/api/notify-dfp-status/request/notify-dfp-status-request.class.ts","../../src/lib/core/payment/three-ds/api/notify-dfp-status/request/notify-dfp-status-request.token.ts","../../src/lib/core/payment/three-ds/api/notify-dfp-status/notify-dfp-status.service.ts","../../src/lib/core/payment/three-ds/dfp-collect/dfp-collect.service.ts","../../src/lib/core/payment/three-ds/reinsurance-check/reinsurance-check.service.ts","../../src/lib/core/payment/three-ds/three-ds-20/three-ds20.service.ts","../../src/lib/core/payment/three-ds/three-ds.service.ts","../../src/lib/core/payment/form-messages/form-messages.service.ts","../../src/lib/core/xsolla-number/api/print-instruction/request/print-instruction-request.class.ts","../../src/lib/core/xsolla-number/api/print-instruction/request/print-instruction-request.token.ts","../../src/lib/core/xsolla-number/api/print-instruction/print-instruction.service.ts","../../src/lib/core/payment/payment-behaviour/strategies/behaviour-strategy.abstract.ts","../../src/lib/core/payment/requests/initialize/is-initialize-response.function.ts","../../src/lib/core/payment/payment-behaviour/strategies/apple-pay-with-shipping-address/apple-pay-with-shipping-address.strategy.ts","../../src/lib/core/payment/payment-behaviour/strategies/google-pay-instant-flow/google-pay-instant-flow.strategy.ts","../../src/lib/core/payment/payment-behaviour/strategies/google-pay-regular-flow/google-pay-regular-flow.strategy.ts","../../src/lib/core/payment/payment-behaviour/behaviour-strategies.ts","../../src/lib/core/payment/payment-behaviour/payment-behaviour.service.ts","../../src/lib/core/payment/payment.service.ts","../../src/lib/core/country/eu-countries.const.ts","../../src/lib/core/legal/get-sctl-link.function.ts","../../src/lib/core/legal/refund-policy.service.ts","../../src/lib/core/legal/disclaimer.service.ts","../../src/lib/core/legal/legal.service.ts","../../src/lib/core/edit-saved-methods/edit-saved-methods.service.ts","../../src/lib/core/performance/xhr-action.service.ts","../../src/lib/core/performance/performance.service.ts","../../src/lib/core/combined-payment-methods/combined-payment-methods.service.ts","../../src/lib/core/countries-api/countries-api.service.ts","../../src/lib/core/xsolla-number/api/send-instruction/request/send-instruction-request.class.ts","../../src/lib/core/xsolla-number/api/send-instruction/request/send-instruction-request.token.ts","../../src/lib/core/xsolla-number/shipping-methods.enum.ts","../../src/lib/core/xsolla-number/api/send-instruction/response/send-status.enum.ts","../../src/lib/core/xsolla-number/api/send-instruction/response/send-instruction-response.class.ts","../../src/lib/core/xsolla-number/api/send-instruction/response/send-instruction-response.token.ts","../../src/lib/core/xsolla-number/api/send-instruction/send-instruction-api-routes.enum.ts","../../src/lib/core/xsolla-number/api/send-instruction/send-instruction.service.ts","../../src/lib/core/script-tracker/script-tracker.service.ts","../../src/lib/core-library.service.ts","../../src/lib/core/exceptions-handling/http-interceptor/http-exceptions.interceptor.ts","../../src/lib/core/payment/form/validators/validators.module.ts","../../src/lib/core/payment/form/form.module.ts","../../src/lib/shared/pipes/pipes.module.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay.const.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay.errors.enum.ts","../../src/lib/core/sdk-payment-systems/apple-pay/session-handlers/session-handler.abstract.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay-cart/apple-pay-cart.service.ts","../../src/lib/core/sdk-payment-systems/apple-pay/session-handlers/braintree.handler.ts","../../src/lib/core/sdk-payment-systems/apple-pay/session-handlers/checkout.handler.ts","../../src/lib/core/payment/payment-behaviour/payment-behaviour.module.ts","../../src/lib/core-library.module.ts","../../src/lib/core/sdk-payment-systems/payment-systems/payment-system-processing.service.ts","../../src/lib/core/sdk-payment-systems/google-pay/payment/google-pay-checkout-payment.service.ts","../../src/lib/core/sdk-payment-systems/google-pay/payment/google-pay-instant-payment.service.ts","../../src/lib/core/sdk-payment-systems/google-pay/google-pay.service.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay-integration.type.ts","../../src/lib/core/sdk-payment-systems/apple-pay/map-shipping-address-to-contact.function.ts","../../src/lib/core/agreements-group.const.ts","../../src/lib/core/sdk-payment-systems/apple-pay/params-builder/apple-pay-params-builder.service.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay-sdk.service.ts","../../src/lib/core/web-socket/socket-bridge/socket-bridge.service.ts","../../src/lib/core/sdk-payment-systems/apple-pay/external-window-communication/external-window-communication.service.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay.service.ts","../../src/public-api.ts","../../src/xsolla-payment-client-core.ts"],"sourcesContent":["// translate.helper.ts\nimport { InterpolationParameters, TranslateService } from '@ngx-translate/core';\n\nexport class TranslateHelper {\n private static service: TranslateService;\n\n public static init(service: TranslateService): void {\n this.service = service;\n }\n\n public static t(\n key: string,\n defaultValue: string,\n interpolateParams?: InterpolationParameters,\n ): string {\n return (\n (this.service.instant(key, interpolateParams) as string | null) ??\n defaultValue\n );\n }\n\n public static getLocale(locale: string): string {\n if (locale.toLowerCase() === 'tw') {\n return 'zh_HANT';\n }\n\n if (locale.toLowerCase() === 'cn') {\n return 'zh_HANS';\n }\n\n if (locale.toLowerCase() === 'ph') {\n return 'fil';\n }\n\n return locale.toLowerCase();\n }\n}\n","export class AppError extends Error {\n public constructor(message: string) {\n super(message);\n }\n}\n","import { AppError } from '../exceptions-handling/errors/app-error.class';\n\nexport class EmptyUtilsResponseError extends AppError {\n public constructor() {\n super('Utils response is empty or not requested. Check your token.');\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ExtendedWindow } from './extended-window.interface';\n\nexport const windowToken: InjectionToken<ExtendedWindow> = new InjectionToken(\n 'window',\n);\n","export const defaultApiUrl = 'https://secure.xsolla.com/paystation2/api/';\nexport const sandboxApiUrl =\n 'https://sandbox-secure.xsolla.com/paystation2/api/';\n","import { Observable } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { windowToken } from '../../window.token';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { RequestOptions } from './options.interface';\nimport { defaultApiUrl, sandboxApiUrl } from './api-url.const';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SecureApiClient {\n private isSandboxMode = false;\n\n public constructor(\n private readonly httpClient: HttpClient,\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {}\n\n public setSandboxMode(isSandboxMode: boolean): void {\n this.isSandboxMode = isSandboxMode;\n }\n\n public get<T>(url: string, options?: RequestOptions): Observable<T> {\n return this.httpClient.get<T>(`${this.baseUrl}${url}`, options);\n }\n\n public post<T, P = URLSearchParams>(\n url: string,\n body: P | URLSearchParams | { [key: string]: string },\n options?: RequestOptions,\n ): Observable<T> {\n return this.httpClient.post<T>(`${this.baseUrl}${url}`, body, options);\n }\n\n public patch<T>(\n url: string,\n body: unknown | null,\n options?: RequestOptions,\n ): Observable<T> {\n return this.httpClient.patch<T>(`${this.baseUrl}${url}`, body, options);\n }\n\n public put<T>(\n url: string,\n body: unknown | null,\n options?: RequestOptions,\n ): Observable<T> {\n return this.httpClient.put<T>(`${this.baseUrl}${url}`, body, options);\n }\n\n public delete<T>(url: string, options?: RequestOptions): Observable<T> {\n return this.httpClient.delete<T>(`${this.baseUrl}${url}`, options);\n }\n\n public get baseUrl(): string {\n let predefinedBaseUrl: string | null = null;\n\n try {\n predefinedBaseUrl = this.window.localStorage.getItem('devApiUrl');\n } catch (e: unknown) {\n console.warn('localStorage is not available');\n }\n\n if (predefinedBaseUrl) {\n return predefinedBaseUrl;\n }\n\n return this.isSandboxMode ? sandboxApiUrl : defaultApiUrl;\n }\n}\n","import { firstValueFrom } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { HttpParams } from '@angular/common/http';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\nimport { DeepReadonly } from '../deep-readonly.type';\nimport { InitConfiguration } from './configuration.interface';\nimport { EmptyUtilsResponseError } from './empty-utils-response.error';\nimport { User } from './user.interface';\nimport { Settings } from './settings.interface';\nimport { Purchase } from './purchase.interface';\nimport { Project } from './project.interface';\nimport { UtilsResponse } from './utils-response.interface';\nimport { Refer } from './refer.const';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SettingsService {\n public get project(): DeepReadonly<Project> {\n if (!this.response) {\n throw new EmptyUtilsResponseError();\n }\n\n return this.response.project;\n }\n\n public get purchase(): DeepReadonly<Purchase> {\n if (!this.response) {\n throw new EmptyUtilsResponseError();\n }\n\n return this.response.purchase;\n }\n\n public get settings(): DeepReadonly<Settings> {\n if (!this.response) {\n throw new EmptyUtilsResponseError();\n }\n\n if (this.response?.purchase_external_id) {\n return {\n ...this.response.settings,\n purchase_external_id: this.response.purchase_external_id,\n };\n }\n\n return this.response?.settings;\n }\n\n public get user(): DeepReadonly<User> {\n if (!this.response) {\n throw new EmptyUtilsResponseError();\n }\n\n return this.response.user;\n }\n\n public get utilsResponse(): DeepReadonly<UtilsResponse> {\n if (!this.response) {\n throw new EmptyUtilsResponseError();\n }\n\n return this.response;\n }\n\n public get unsafeUtilsResponse(): DeepReadonly<UtilsResponse | null> {\n return this.response ?? null;\n }\n\n public get unsafeUser(): DeepReadonly<User | null> {\n return this.response?.user ?? null;\n }\n\n public get unsafeProject(): DeepReadonly<Project | null> {\n return this.response?.project ?? null;\n }\n\n public get unsafeSettings(): DeepReadonly<Settings | null> {\n return this.response?.settings ?? null;\n }\n\n public get isEmpty(): boolean {\n return !this.response;\n }\n\n public get token(): string {\n return this._token;\n }\n\n public get hasResponse(): boolean {\n return !!this.response;\n }\n\n public isInitialized = false;\n\n private response!: DeepReadonly<UtilsResponse> | undefined;\n\n private _token = '';\n\n private _topLevelDomain?: string;\n private _isApplePayInstantFlowEnabled = false;\n private _isGooglePayInstantFlowEnabled: boolean | null = null;\n private sandboxMode = false;\n private _refer!: Refer;\n\n public constructor(private readonly secureApi: SecureApiClient) {}\n\n public async init(configuration: InitConfiguration): Promise<void> {\n if (!configuration.token) {\n return Promise.reject('token is missing');\n }\n\n this._token = configuration.token;\n this.sandboxMode = !!configuration.sandbox;\n this._refer = configuration.refer;\n this._topLevelDomain = configuration.topLevelDomain;\n this._isApplePayInstantFlowEnabled =\n !!configuration.isApplePayInstantFlowEnabled;\n this._isGooglePayInstantFlowEnabled =\n configuration.isGooglePayInstantFlowEnabled ?? null;\n\n this.setDevApiUrl(configuration.apiUrl);\n\n await this.sendRequest(this.token);\n\n this.isInitialized = true;\n }\n\n public isSandboxMode(): boolean {\n return this.sandboxMode;\n }\n\n private setDevApiUrl(apiUrl: string | undefined): void {\n if (!apiUrl) {\n return;\n }\n\n try {\n window.localStorage.setItem('devApiUrl', apiUrl);\n } catch {\n console.warn('Could not set devApiUrl in localStorage');\n }\n }\n\n public get topLevelDomain(): string | undefined {\n return this._topLevelDomain;\n }\n\n public get isApplePayInstantFlowEnabled(): boolean {\n return this._isApplePayInstantFlowEnabled;\n }\n\n public get isGooglePayInstantFlowEnabled(): boolean | null {\n return this._isGooglePayInstantFlowEnabled;\n }\n\n public get refer(): Refer {\n return this._refer;\n }\n\n public set refer(refer: Refer) {\n this._refer = refer;\n }\n\n private async sendRequest(token: string): Promise<void> {\n const params = new HttpParams().set('access_token', token);\n\n this.secureApi.setSandboxMode(this.isSandboxMode());\n\n this.response = await firstValueFrom(\n this.secureApi.get<UtilsResponse>('utils', { params }),\n );\n }\n}\n","export enum ErrorTags {\n APP = 'appError',\n HTTP = 'httpError',\n JS = 'jsError',\n WS = 'webSocket',\n ENCRYPT = 'encrypt',\n APPLEPAY = 'applepay',\n HEADLESS_UI = 'headlessUi',\n GOOGLEPAY = 'googlepay',\n PAYTM = 'paytm',\n}\n","import { ErrorTags } from './elk-error-types.enum';\nimport { AdditionalInfo } from '../elk/additional-info.interface';\n\nexport class TaggedError extends Error {\n public childTag!: ErrorTags;\n public trace!: string;\n public tags: ErrorTags[] = [];\n public additionalInfo!: AdditionalInfo;\n public extra: object;\n\n private readonly parentTag: ErrorTags = ErrorTags.HEADLESS_UI;\n\n public constructor(message: string, tags?: ErrorTags[], extra?: object) {\n super(message);\n\n this.tags = this.childTag\n ? [this.parentTag, this.childTag]\n : [this.parentTag];\n\n if (tags) {\n const newTags = tags.filter(\n (t, i, arr) => !this.tags.includes(t) && arr.indexOf(t) == i,\n );\n this.tags = [...this.tags, ...newTags];\n }\n\n this.extra = extra || {};\n }\n}\n","export const unknownValue = 'unknown' as const;\n\nexport type BrowserName =\n | (typeof browsers)[number]['sentName']\n | typeof unknownValue\n | null;\n\nexport type BrowserApp =\n | (typeof browsers)[number]['shortName']\n | typeof unknownValue\n | null;\n\nexport interface BrowserInterface {\n sentName:\n | 'Mozilla Firefox'\n | 'Samsung Internet'\n | 'Opera'\n | 'Microsoft Edge (Legacy)'\n | 'Microsoft Edge (Chromium)'\n | 'Google Chrome or Chromium'\n | 'Apple Safari';\n shortName:\n | 'Firefox'\n | 'SamsungBrowser'\n | 'Opera'\n | 'MSEdge-legacy'\n | 'MSEdge'\n | 'Chrome'\n | 'Safari';\n regexpBrowserNameWithVersion: string;\n}\n\nexport const browsers: BrowserInterface[] = [\n {\n sentName: 'Mozilla Firefox',\n shortName: 'Firefox',\n regexpBrowserNameWithVersion: '(Firefox)\\\\/(.+)',\n },\n {\n sentName: 'Samsung Internet',\n shortName: 'SamsungBrowser',\n regexpBrowserNameWithVersion: '(SamsungBrowser)\\\\/(.+)\\\\s',\n },\n {\n sentName: 'Opera',\n shortName: 'Opera',\n regexpBrowserNameWithVersion: '(Opera)\\\\/(.+)',\n },\n {\n sentName: 'Opera',\n shortName: 'Opera',\n regexpBrowserNameWithVersion: '(OPR)\\\\/(.+)',\n },\n {\n sentName: 'Microsoft Edge (Legacy)',\n shortName: 'MSEdge-legacy',\n regexpBrowserNameWithVersion: '(Edge)\\\\/(.+)',\n },\n {\n sentName: 'Microsoft Edge (Chromium)',\n shortName: 'MSEdge',\n regexpBrowserNameWithVersion: '(Edg)\\\\/(.+)',\n },\n {\n sentName: 'Google Chrome or Chromium',\n shortName: 'Chrome',\n regexpBrowserNameWithVersion: '(Chrome)\\\\/(.+)\\\\s',\n },\n {\n sentName: 'Apple Safari',\n shortName: 'Safari',\n regexpBrowserNameWithVersion: '(Safari)\\\\/(.+)',\n },\n];\n","export enum Device {\n mobile = 'mobile',\n desktop = 'desktop',\n}\n","// eslint-disable-next-line @typescript-eslint/naming-convention\ninterface OS {\n name: string;\n regExp: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ntype OSList = OS[];\n\nexport const osList: OSList = [\n {\n name: 'Windows XP',\n regExp: 'Windows XP',\n },\n {\n name: 'Windows XP',\n regExp: 'Windows NT 5.1|Windows NT5.1',\n },\n {\n name: 'Windows Vista',\n regExp: 'Windows NT 6.0',\n },\n {\n name: 'Windows 7',\n regExp: 'Windows NT 6.1',\n },\n {\n name: 'Windows 8',\n regExp: 'Windows NT 6.2',\n },\n {\n name: 'Windows 8.1',\n regExp: 'Windows NT 6.3',\n },\n {\n name: 'Windows 10',\n regExp: 'Windows NT 10.0',\n },\n {\n name: 'Windows CE',\n regExp: 'Windows CE',\n },\n {\n name: 'iPhone',\n regExp: 'iphone',\n },\n {\n name: 'iPod',\n regExp: 'ipod',\n },\n {\n name: 'iPad',\n regExp: 'ipad',\n },\n {\n name: 'Android',\n regExp: 'Android ([0-9]{1,2}.[0-9]{1,2}.?[0-9]{0,3})',\n },\n {\n name: 'Android',\n regExp: 'Android',\n },\n {\n name: 'Android',\n regExp: 'android',\n },\n {\n name: 'BlackBerry',\n regExp: 'blackberry',\n },\n {\n name: 'Mobile',\n regExp: 'webos',\n },\n {\n name: 'Nintendo WiiU',\n regExp: 'Nintendo WiiU',\n },\n {\n name: 'Xbox One S',\n regExp: 'XBOX_ONE_ED',\n },\n {\n name: 'Xbox One',\n regExp: 'Xbox; Xbox One',\n },\n {\n name: 'PlayStation',\n regExp: 'PlayStation',\n },\n {\n name: 'Windows',\n regExp: '(win)([0-9]{1,2}\\\\.[0-9x]{1,2})',\n },\n {\n name: 'Windows',\n regExp: '(windows)([0-9x]{2})',\n },\n {\n name: 'Windows',\n regExp: '(windows)([0-9]{1,2}\\\\.[0-9]{1,2})',\n },\n {\n name: 'Windows',\n regExp: 'win32',\n },\n {\n name: 'Java',\n regExp: '(java)([0-9]{1,2}\\\\.[0-9]{1,2}\\\\.[0-9]{1,2})',\n },\n {\n name: 'Solaris',\n regExp: '(Solaris)([0-9]{1,2}\\\\.[0-9x]{1,2}){0,1}',\n },\n {\n name: 'Unix',\n regExp: 'unix',\n },\n {\n name: 'Mac OS X',\n regExp: 'Mac OS X',\n },\n {\n name: 'Mac OS',\n regExp: '(mac|Macintosh)',\n },\n {\n name: 'SunOS',\n regExp: '(sunos)([0-9]{1,2}\\\\.[0-9]{1,2}){0,1}',\n },\n {\n name: 'BeOS',\n regExp: '(beos)([0-9]{1,2}\\\\.[0-9]{1,2}){0,1}',\n },\n {\n name: 'RISC OS',\n regExp: '(risc os)([0-9]{1,2}\\\\.[0-9]{1,2})',\n },\n {\n name: 'FreeBSD',\n regExp: 'freebsd',\n },\n {\n name: 'OpenBSD',\n regExp: 'openbsd',\n },\n {\n name: 'NetBSD',\n regExp: 'netbsd',\n },\n {\n name: 'IRIX',\n regExp: 'irix',\n },\n {\n name: 'Plan9',\n regExp: 'plan9',\n },\n {\n name: 'OSF',\n regExp: 'osf',\n },\n {\n name: 'AIX',\n regExp: 'aix',\n },\n {\n name: 'GNU Hurd',\n regExp: 'GNU Hurd',\n },\n {\n name: 'Linux - Fedora',\n regExp: '(fedora)',\n },\n {\n name: 'Linux - Kubuntu',\n regExp: '(kubuntu)',\n },\n {\n name: 'Linux - Ubuntu',\n regExp: '(ubuntu)',\n },\n {\n name: 'Linux - Debian',\n regExp: '(debian)',\n },\n {\n name: 'Linux - CentOS',\n regExp: '(CentOS)',\n },\n {\n name: 'Linux - Mandriva',\n regExp: '(Mandriva).([0-9]{1,3}(\\\\.[0-9]{1,3})?(\\\\.[0-9]{1,3})?)',\n },\n {\n name: 'Linux - SUSE',\n regExp: '(SUSE).([0-9]{1,3}(\\\\.[0-9]{1,3})?(\\\\.[0-9]{1,3})?)',\n },\n {\n name: 'Linux - Slackware (Dropline GNOME)',\n regExp: '(Dropline)',\n },\n {\n name: 'Linux - ASPLinux',\n regExp: '(ASPLinux)',\n },\n {\n name: 'Linux - Red Hat',\n regExp: '(Red Hat)',\n },\n {\n name: 'Linux',\n regExp: '(linux)',\n },\n {\n name: 'AmigaOS',\n regExp: '(amigaos)([0-9]{1,2}\\\\.[0-9]{1,2})',\n },\n {\n name: 'AmigaOS',\n regExp: 'amiga-aweb',\n },\n {\n name: 'Amiga',\n regExp: 'amiga',\n },\n {\n name: 'PalmOS',\n regExp: 'AvantGo',\n },\n {\n name: 'WebTV',\n regExp: '(webtv)/([0-9]{1,2}\\\\.[0-9]{1,2})',\n },\n {\n name: 'Dreamcast OS',\n regExp: 'Dreamcast',\n },\n {\n name: 'Windows',\n regExp: 'wget',\n },\n {\n name: 'Unknown',\n regExp: 'Java',\n },\n {\n name: 'Windows',\n regExp: '(msie)([0-9]{1,2}.[0-9]{1,2})',\n },\n {\n name: 'Unix',\n regExp: 'libwww-perl',\n },\n {\n name: 'Windows CE',\n regExp: 'UP.Browser',\n },\n {\n name: 'Windows',\n regExp: 'NetAnts',\n },\n];\n","import { Inject, Injectable } from '@angular/core';\nimport { browsers, BrowserName, BrowserApp, unknownValue } from './browsers';\nimport { Device } from './device.enum';\nimport { windowToken } from '../window.token';\nimport { ExtendedWindow } from '../extended-window.interface';\nimport { BrowserInfo } from './browserInfo.interface';\nimport { osList } from './os';\nimport { UserAgentData } from './user-agent-data.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserAgentService {\n private _browserName: BrowserName = null;\n private _browserVersion: string | null = null;\n private _browserApp: BrowserApp = null;\n private _platform: string | null = null;\n private _os: string | null = null;\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {\n this.getUserPlatform();\n this.getBrowserInformation();\n this.getOsInformation();\n }\n\n public get browserVersion(): string | null {\n return this._browserVersion;\n }\n\n public get browserApp(): BrowserApp {\n return this._browserApp;\n }\n\n public get platform(): string | null {\n if (this._platform === unknownValue) {\n return this.osType;\n }\n\n return this._platform;\n }\n\n public get userAgent(): string {\n return this.window.navigator.userAgent;\n }\n\n public get browserDescription():\n | (typeof browsers)[number]['sentName']\n | string {\n if (this.browserName === unknownValue || this.browserName === null) {\n return this.userAgent;\n }\n\n return this.browserName;\n }\n\n public get isSafari(): boolean {\n return this._browserName === 'Apple Safari';\n }\n\n public get safariVersion(): null | number {\n if (!this.isSafari) {\n return null;\n }\n\n const versionRegExp = new RegExp('(Version)\\\\/(.+)\\\\s');\n const version = versionRegExp.exec(this.userAgent);\n if (!version) {\n return null;\n }\n\n return Number(version[2].split('.')[0]);\n }\n\n public get iOsVersion(): string | null {\n if (this.osType !== 'ios') {\n return null;\n }\n\n const version = /OS (\\d+)_(\\d+)_?(\\d+)?/.exec(\n this.window.navigator.appVersion,\n );\n\n return version ? `${version[1]}.${version[2]}.${version[3] ?? 0}` : null;\n }\n\n public get browserInfo(): BrowserInfo {\n const browserInfo: BrowserInfo = {\n name: this.browserDescription,\n [this.browserApp?.toLowerCase() ?? unknownValue]: true,\n version: this.browserVersion,\n [this.browserEngine.toLowerCase()]: true,\n ui_version: this.isMobileDevice ? Device.mobile : Device.desktop,\n os: this.os,\n };\n\n if (this.isMobileDevice) {\n browserInfo.mobile = true;\n }\n\n if (this.osType) {\n // @ts-expect-error index is string\n browserInfo[this.osType.toLowerCase()] = true;\n }\n\n if (this.window.navigator.platform?.includes('iPhone')) {\n browserInfo.iphone = true;\n }\n\n if (this.window.navigator.platform?.includes('iPod')) {\n browserInfo.ipod = true;\n }\n\n if (this.window.navigator.platform?.includes('iPad')) {\n browserInfo.ipad = true;\n browserInfo.tablet = true;\n }\n\n if (this.isAndroid) {\n browserInfo.android = true;\n }\n\n return browserInfo;\n }\n\n public get isMobileDevice(): boolean {\n const deviceAgents = [\n 'Android',\n 'webOS',\n 'iPhone',\n 'iPad',\n 'iPod',\n 'BlackBerry',\n 'IEMobile',\n 'Opera Mini',\n 'Mobile',\n 'Tablet',\n 'Kindle',\n 'Playbook',\n 'Silk',\n 'Puffin',\n 'CriOS',\n ];\n return new RegExp(deviceAgents.join('|'), 'i').test(this.userAgent);\n }\n\n public get isIosAndNotIpad(): boolean {\n return ['iPhone', 'iPod'].includes(this.window.navigator.platform);\n }\n\n private getUserPlatform(): void {\n const experimentalPlatformApi = (\n this.window.navigator as unknown as {\n userAgentData: UserAgentData | undefined;\n }\n )?.userAgentData;\n\n const platform =\n experimentalPlatformApi?.platform ??\n this.window?.navigator?.platform ??\n unknownValue;\n\n this._platform = platform.toLowerCase();\n }\n\n private getBrowserInformation(): void {\n for (const browser of browsers) {\n const browserRegExp = new RegExp(browser.regexpBrowserNameWithVersion);\n const browserNameWithVersion = browserRegExp.exec(this.userAgent);\n\n if (browserNameWithVersion !== null) {\n this._browserName = browser.sentName;\n this._browserApp = browser.shortName;\n this._browserVersion = browserNameWithVersion[2];\n break;\n }\n\n this._browserName = unknownValue;\n this._browserApp = unknownValue;\n this._browserVersion = unknownValue;\n }\n }\n\n private getOsInformation(): void {\n for (const os of osList) {\n const osRegExp = new RegExp(os.regExp);\n const osName = osRegExp.exec(this.userAgent);\n\n if (osName !== null) {\n this._os = os.name;\n break;\n }\n\n this._os = unknownValue;\n }\n }\n\n private get browserName(): BrowserName {\n return this._browserName;\n }\n\n private get isAndroid(): boolean {\n return /Android\\s+([\\d.]+)/.test(this.userAgent);\n }\n\n private get isXbox(): boolean {\n return /xbox/i.test(this.userAgent);\n }\n\n private get isLinux(): boolean {\n return /linux/i.test(this.userAgent);\n }\n\n private get isWindows(): boolean {\n return /windows/i.test(this.userAgent);\n }\n\n private get browserEngine(): string {\n const engines = new Map<BrowserApp, string>([\n ['Firefox', 'Gecko'],\n ['Safari', 'Webkit'],\n ['MSEdge-legacy', 'EdgeHTML'],\n ['Chrome', 'Blink'],\n ['Opera', 'Blink'],\n ['MSEdge', 'Blink'],\n ['SamsungBrowser', 'Blink'],\n ]);\n\n return engines.get(this.browserApp) ?? unknownValue;\n }\n\n private get os(): string | null {\n return this._os;\n }\n\n private get osType(): string | null {\n if (['iPhone', 'iPod', 'iPad'].includes(this.window.navigator.platform)) {\n return 'ios';\n }\n\n if (this.window.navigator.platform?.includes('MacIntel')) {\n return 'mac';\n }\n\n if (this.isXbox) {\n return 'xbox';\n }\n if (this.isWindows) {\n return 'windows';\n }\n\n if (this.isAndroid) {\n return 'android';\n }\n\n if (this.isLinux) {\n return 'linux';\n }\n\n return null;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { SettingsService } from '../../settings/settings.service';\nimport { UserAgentService } from '../../user-agent/user-agent.service';\nimport { windowToken } from '../../window.token';\nimport { CommonLogAttributes } from './common-log-attributes.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CommonLogAttributesService {\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly settingsService: SettingsService,\n private readonly userAgentService: UserAgentService,\n ) {}\n\n public getAttributes(): CommonLogAttributes {\n const user = this.settingsService.unsafeUser;\n const project = this.settingsService.unsafeProject;\n const settings = this.settingsService.unsafeSettings;\n\n return {\n token: this.settingsService.token,\n userId: user?.uuid,\n userEmail: user?.email?.value,\n projectId: project?.id,\n merchantId: project?.merchantId,\n locationUrl: this.window.location.href,\n userAgent: this.userAgentService.userAgent,\n referrerUrl: this.window.document.referrer,\n viewportWidth: this.window.document.documentElement.clientWidth,\n viewportHeight: this.window.document.documentElement.clientHeight,\n cdnAddress: settings?.cdnUrl\n ? this.extractUrlHost(settings.cdnUrl)\n : 'none',\n country: user?.country?.value,\n local: user?.country?.localized_name,\n browserInfo: this.userAgentService.browserInfo,\n };\n }\n\n private extractUrlHost(url: string): string {\n return url.replace(/^https?:\\/\\/([^/?#]+).*$/i, '$1');\n }\n}\n","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport type StackTrace from 'stacktrace-js';\nimport { firstValueFrom } from 'rxjs';\nimport { ErrorHandler, Injectable, isDevMode, NgZone } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { TaggedError } from '../errors/tagged-error.class';\nimport { ErrorTags } from '../errors/elk-error-types.enum';\nimport { MessageTags } from '../messages/message-tags.enum';\nimport { AdditionalInfo } from './additional-info.interface';\nimport { ErrorWithoutMetaFields } from './error-without-meta-fields.interface';\nimport { LogMessage } from './log-message.interface';\nimport { CommonLogAttributesService } from '../common-log-attributes/common-log-attributes.service';\n\ntype LogTags = ErrorTags | MessageTags;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ElkLoggerService implements ErrorHandler {\n private readonly stackTrace: Promise<typeof StackTrace>;\n private readonly vendors: RegExp = new RegExp(\n 'node_modules\\\\/(@angular|zone).*.js$',\n );\n\n public constructor(\n private readonly commonLogAttributesService: CommonLogAttributesService,\n private readonly http: HttpClient,\n private readonly ngZone: NgZone,\n ) {\n this.stackTrace = this.loadStackTrace();\n }\n\n public handleError(error: Error): void {\n this.ngZone.runOutsideAngular(() => {\n if (isDevMode()) {\n console.error(error);\n return;\n }\n\n this.parseError(error).catch(console.log);\n });\n }\n\n public log(message: string, tags: LogTags[], extra?: object): void {\n const logTags: LogTags[] = [ErrorTags.HEADLESS_UI, ...tags];\n\n if (isDevMode()) {\n console.log(message, tags);\n return;\n }\n\n const logMessage: LogMessage = {\n additionalInfo: this.getAdditionalInfo(),\n extra,\n message,\n };\n\n this.sendLog(logMessage, logTags);\n }\n\n private async parseError(error: Error): Promise<TaggedError> {\n const errorObj =\n error instanceof TaggedError\n ? error\n : new TaggedError(error.message || error.toString());\n\n errorObj.trace = await this.getErrorTrace(errorObj);\n errorObj.additionalInfo = this.getAdditionalInfo();\n\n const { tags } = errorObj;\n\n const cleanError = this.removeErrorMetaFields(errorObj);\n\n this.sendLog(cleanError, tags);\n return errorObj;\n }\n\n private async loadStackTrace(): Promise<typeof StackTrace> {\n const library = await import('stacktrace-js');\n return library.default;\n }\n\n private async getErrorTrace(error: Error): Promise<string> {\n const stackTrace = await this.stackTrace;\n\n const stackFramesArr = await stackTrace.fromError(error);\n\n const filteredFramesArr = stackFramesArr.filter(\n ({ fileName }) => fileName && !this.vendors.test(fileName),\n );\n\n return filteredFramesArr\n .map((stackFrame) => stackFrame.toString())\n .join('\\n');\n }\n\n private getAdditionalInfo(): AdditionalInfo {\n const commonLogAttributes = this.commonLogAttributesService.getAttributes();\n\n return {\n token: commonLogAttributes.token,\n location: {\n url: commonLogAttributes.locationUrl ?? '',\n },\n project: {\n id: commonLogAttributes.projectId ?? null,\n },\n referrer: {\n url: commonLogAttributes.referrerUrl ?? '',\n },\n viewport: {\n width: commonLogAttributes.viewportWidth,\n height: commonLogAttributes.viewportHeight,\n },\n cdn_address: commonLogAttributes.cdnAddress,\n country: commonLogAttributes.country ?? '',\n local: commonLogAttributes.local ?? '',\n };\n }\n\n private removeErrorMetaFields(error: TaggedError): ErrorWithoutMetaFields {\n const metaPropList = [\n 'parentTag',\n 'childTag',\n 'RESTRICTED_KEYS_REGEXP',\n 'tags',\n ];\n\n Object.keys(error).forEach((key) => {\n if (metaPropList.includes(key)) delete error[key as keyof TaggedError];\n });\n\n // implementing own 'message' property from prototype\n return { ...error, message: error.message };\n }\n\n private sendLog(\n message: ErrorWithoutMetaFields | LogMessage,\n tags: LogTags[],\n ): void {\n const url = `https://logs-01.xsolla.com/tag/${tags.join(',')}`;\n\n firstValueFrom(\n this.http.post(url, message, {\n headers: new HttpHeaders().set('Content-Type', 'text/plain'),\n responseType: 'text',\n }),\n ).catch((err) => console.error('Elk Logger: request error', err));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ElkLoggerService } from '../elk/elk-logger.service';\nimport { TaggedError } from '../errors';\nimport { TaggedMessage } from '../messages';\nimport { LogHandler } from './log-handler.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggerService {\n private readonly handlers: LogHandler[] = [];\n\n public constructor(private readonly elkLoggerService: ElkLoggerService) {}\n\n public register(handler: LogHandler): void {\n this.handlers.push(handler);\n }\n\n public error(error: Error | TaggedError): void {\n this.elkLoggerService.handleError(error);\n this.handlers.forEach((handler) => handler.handleError(error));\n }\n\n public info(info: TaggedMessage): void {\n this.elkLoggerService.log(info.message, info.tags, info.extra);\n this.handlers.forEach((handler) => handler.handleInfo?.(info));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SettingsService } from '../settings/settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CountryService {\n public get userIpCountry(): string {\n const user = this.settingsService.user;\n return user?.ip_country ?? user?.country.value ?? '';\n }\n\n private userDefinedCountry: string | null = null;\n\n public constructor(private readonly settingsService: SettingsService) {}\n\n public setCountry(country: string): void {\n this.userDefinedCountry = country;\n }\n\n public getCountry(): string {\n return this.userDefinedCountry ?? this.getTokenCountry();\n }\n\n private getTokenCountry(): string {\n return this.settingsService.user.country.value;\n }\n}\n","import { AppError } from './app-error.class';\n\nexport class ResponseError extends AppError {\n public constructor(message?: string) {\n super('Response failed' + (message ? `: \"${message}\".` : '.'));\n }\n}\n","export enum BooleanNumber {\n false = 0,\n true = 1,\n}\n","import { BooleanNumber } from '../boolean-number.enum';\nimport { PaymentMethodApi } from './payment-method-api.interface';\nimport { PaymentMethod } from './payment-method.interface';\nimport { PaymentMethodsApi } from './payment-methods-api.interface';\n\nexport class PaymentMethodsResponse {\n public readonly top: PaymentMethod[];\n public readonly especial: PaymentMethod[];\n public readonly remained: PaymentMethod[];\n public readonly remainedCount: { total: number; visible: number };\n\n public constructor(paymentMethods: PaymentMethodsApi) {\n this.especial = paymentMethods.especial.map((method) =>\n this.mapPaymentMethod(method),\n );\n this.top = paymentMethods.top.map((method) =>\n this.mapPaymentMethod(method),\n );\n this.remained = paymentMethods.remained.map((method) =>\n this.mapPaymentMethod(method),\n );\n this.remainedCount = {\n total: paymentMethods.remained_count.total,\n visible: paymentMethods.remained_count.visible,\n };\n }\n\n private mapPaymentMethod(method: PaymentMethodApi): PaymentMethod {\n return {\n id: method.id,\n rank: method.rank,\n name: method.name,\n aliases: method.aliases,\n categories: method.cat,\n recommended: method.recommended === BooleanNumber.true,\n enabledSaveAccount: method.enabled_save_account,\n iconName: method.switch_icon_name,\n };\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { PaymentMethodsResponse } from './payment-methods-response.class';\n\ntype ResponseParameters = ConstructorParameters<typeof PaymentMethodsResponse>;\n\nexport type PaymentMethodsResponseFactory = (\n ...args: ResponseParameters\n) => PaymentMethodsResponse;\n\nexport const paymentMethodsResponseFactoryToken: InjectionToken<PaymentMethodsResponseFactory> =\n new InjectionToken<PaymentMethodsResponseFactory>('PaymentMethodsResponse');\n\nexport const paymentMethodsResponseFactoryProvider: ValueProvider = {\n provide: paymentMethodsResponseFactoryToken,\n useValue: (...args: ResponseParameters) =>\n new PaymentMethodsResponse(...args),\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { lastValueFrom, map } from 'rxjs';\nimport { CountryService } from '../country/country.service';\nimport { ResponseError } from '../exceptions-handling/errors/response-error.class';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\nimport { SettingsService } from '../settings/settings.service';\nimport { PaymentMethod } from './payment-method.interface';\nimport { PaymentMethodsRequestParams } from './payment-methods-request-params.interface';\nimport { PaymentMethodsResponse } from './payment-methods-response.class';\nimport { PaymentMethodsResponseApi } from './payment-methods-response.interface';\nimport {\n PaymentMethodsResponseFactory,\n paymentMethodsResponseFactoryToken,\n} from './payment-methods-response.token';\nimport { XpsBoolean } from '../xps-boolean.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentMethodsService {\n private readonly apiRoute = 'remained_payment_methods';\n\n private readonly cache = new Map<string, Promise<PaymentMethodsResponse>>();\n\n public constructor(\n @Inject(paymentMethodsResponseFactoryToken)\n private readonly responseFactory: PaymentMethodsResponseFactory,\n private readonly settingsService: SettingsService,\n private readonly countryService: CountryService,\n private readonly secureApi: SecureApiClient,\n ) {}\n\n public async getAllMethods(): Promise<PaymentMethodsResponse> {\n return this.request();\n }\n\n public async getList(isSaveMethodMode?: boolean): Promise<PaymentMethod[]> {\n const response = await this.request(isSaveMethodMode);\n\n if (this.isFixedPaymentMethod) {\n return this.filterMethodsByFixedPaymentMethod(response.remained);\n }\n\n return response.remained;\n }\n\n public async getQuickMethods(): Promise<PaymentMethod[]> {\n const response = await this.request();\n return response.especial;\n }\n\n private async request(\n isSaveMethodMode?: boolean,\n ): Promise<PaymentMethodsResponse> {\n const requestParams: PaymentMethodsRequestParams = {\n access_token: this.settingsService.token,\n country: this.countryService.getCountry(),\n save_payment_account_only: isSaveMethodMode\n ? XpsBoolean.true\n : XpsBoolean.false,\n refer: this.settingsService.refer,\n };\n const cacheKey = JSON.stringify(requestParams);\n\n if (!this.cache.has(cacheKey)) {\n this.cache.set(\n cacheKey,\n lastValueFrom(\n this.secureApi\n .post<PaymentMethodsResponseApi>(\n this.apiRoute,\n new URLSearchParams({\n ...requestParams,\n refer: String(requestParams.refer),\n }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(\n map((response) => this.responseFactory(response.payment_methods)),\n ),\n ).catch((error: Error) => {\n throw new ResponseError(error.message);\n }),\n );\n }\n\n // @ts-expect-error the map already has the cache with key\n return this.cache.get(cacheKey);\n }\n\n private filterMethodsByFixedPaymentMethod(\n methods: PaymentMethod[],\n ): PaymentMethod[] {\n const fixedPid = this.settingsService.purchase?.payment_system?.id;\n const paymentMethod = methods.find((method) => method.id === fixedPid);\n\n return paymentMethod ? [paymentMethod] : [];\n }\n\n private get isFixedPaymentMethod(): boolean {\n return !!this.settingsService.purchase?.payment_system?.id;\n }\n}\n","import { SavedMethodsResponseApi } from './saved-methods-response.interface';\nimport { SavedMethodApi } from './saved-method-api.interface';\nimport { SavedMethod } from './saved-method.interface';\n\nexport class SavedMethodsResponse {\n public readonly list: SavedMethod[];\n\n public constructor(savedMethods: SavedMethodsResponseApi) {\n this.list = savedMethods.list.map((method) => this.mapSavedMethod(method));\n }\n\n private mapSavedMethod(method: SavedMethodApi): SavedMethod {\n return {\n currency: method.currency,\n form: method.form,\n id: method.id,\n isSelected: method.isSelected,\n isBabkaPay: method.is_babka_pay,\n name: method.name,\n pid: method.pid,\n psName: method.psName,\n recurrentType: method.recurrent_type,\n replaced: method.replaced,\n type: method.type,\n cardExpiryDate: method.card_expiry_date,\n dateCreate: method.date_create,\n dateLastCharge: method.date_last_charge,\n iconName: method.switch_icon_name,\n userEmail: method.user_email,\n partner: method.partner,\n };\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SavedMethodsResponse } from './saved-methods-response.class';\n\ntype ResponseParameters = ConstructorParameters<typeof SavedMethodsResponse>;\n\nexport type SavedMethodsResponseFactory = (\n ...args: ResponseParameters\n) => SavedMethodsResponse;\n\nexport const savedMethodsResponseFactoryToken: InjectionToken<SavedMethodsResponseFactory> =\n new InjectionToken<SavedMethodsResponseFactory>('SavedMethodsResponse');\n\nexport const savedMethodsResponseFactoryProvider: ValueProvider = {\n provide: savedMethodsResponseFactoryToken,\n useValue: (...args: ResponseParameters) => new SavedMethodsResponse(...args),\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { lastValueFrom, map } from 'rxjs';\nimport { ResponseError } from '../exceptions-handling/errors/response-error.class';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\nimport { SettingsService } from '../settings/settings.service';\nimport { SavedMethodsRequestParams } from './saved-methods-request-params.interface';\nimport { SavedMethodsResponseApi } from './saved-methods-response.interface';\nimport {\n SavedMethodsResponseFactory,\n savedMethodsResponseFactoryToken,\n} from './saved-methods-response.token';\nimport { SavedMethodsResponse } from './saved-methods-response.class';\nimport { SavedMethod } from './saved-method.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SavedMethodsService {\n private readonly apiRoute = 'savedmethods';\n\n private readonly cache = new Map<string, Promise<SavedMethodsResponse>>();\n\n public constructor(\n @Inject(savedMethodsResponseFactoryToken)\n private readonly responseFactory: SavedMethodsResponseFactory,\n private readonly settingsService: SettingsService,\n private readonly secureApi: SecureApiClient,\n ) {}\n\n public async getList(needResetCache = false): Promise<SavedMethod[]> {\n if (needResetCache) {\n this.cache.clear();\n }\n\n const response = await this.request();\n return response.list;\n }\n\n private async request(): Promise<SavedMethodsResponse> {\n const requestParams: SavedMethodsRequestParams = {\n access_token: this.settingsService.token,\n };\n const cacheKey = JSON.stringify(requestParams);\n\n if (!this.cache.has(cacheKey)) {\n this.cache.set(\n cacheKey,\n lastValueFrom(\n this.secureApi\n .post<SavedMethodsResponseApi>(\n this.apiRoute,\n new URLSearchParams({ ...requestParams }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(map((response) => this.responseFactory(response))),\n ).catch((error: Error) => {\n throw new ResponseError(error.message);\n }),\n );\n }\n\n // @ts-expect-error the map already has the cache with key\n return this.cache.get(cacheKey);\n }\n}\n","import { UserBalanceApi } from './user-balance-api.interface';\n\nexport class UserBalanceResponse {\n public readonly isEnoughUserBalance: boolean;\n public readonly isEnoughUserRecurrentBalance: boolean;\n\n public constructor(userBalance: UserBalanceApi) {\n this.isEnoughUserBalance = userBalance.is_enough_user_balance ?? false;\n this.isEnoughUserRecurrentBalance =\n userBalance.is_enough_user_recurrent_balance ?? false;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { UserBalanceResponse } from './user-balance-response.class';\n\ntype ResponseParameters = ConstructorParameters<typeof UserBalanceResponse>;\n\nexport type UserBalanceResponseFactory = (\n ...args: ResponseParameters\n) => UserBalanceResponse;\n\nexport const userBalanceResponseFactoryToken: InjectionToken<UserBalanceResponseFactory> =\n new InjectionToken<UserBalanceResponseFactory>('UserBalanceResponse');\n\nexport const userBalanceResponseFactoryProvider: ValueProvider = {\n provide: userBalanceResponseFactoryToken,\n useValue: (...args: ResponseParameters) => new UserBalanceResponse(...args),\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { lastValueFrom, map } from 'rxjs';\nimport { ResponseError } from '../exceptions-handling/errors/response-error.class';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\nimport { SettingsService } from '../settings/settings.service';\nimport {\n UserBalanceResponseFactory,\n userBalanceResponseFactoryToken,\n} from './user-balance-response.token';\nimport { UserBalanceResponse } from './user-balance-response.class';\nimport { UserBalanceRequestParams } from './user-balance-request-params.interface';\nimport { UserBalanceApi } from './user-balance-api.interface';\nimport { Balance } from '../settings/balance.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserBalanceService {\n private readonly apiRoute = 'balance/sufficiency';\n\n private readonly cache = new Map<string, Promise<UserBalanceResponse>>();\n\n public constructor(\n @Inject(userBalanceResponseFactoryToken)\n private readonly responseFactory: UserBalanceResponseFactory,\n private readonly settingsService: SettingsService,\n private readonly secureApi: SecureApiClient,\n ) {}\n\n public async getUserBalance(): Promise<UserBalanceResponse> {\n return this.request();\n }\n\n public getUserBalanceValue(): Balance | null {\n return this.settingsService.user.user_balance;\n }\n\n private async request(): Promise<UserBalanceResponse> {\n const requestParams: UserBalanceRequestParams = {\n access_token: this.settingsService.token,\n };\n const cacheKey = JSON.stringify(requestParams);\n\n if (!this.cache.has(cacheKey)) {\n this.cache.set(\n cacheKey,\n lastValueFrom(\n this.secureApi\n .post<UserBalanceApi>(\n this.apiRoute,\n new URLSearchParams({ ...requestParams }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(map((response) => this.responseFactory(response))),\n ).catch((error: Error) => {\n throw new ResponseError(error.message);\n }),\n );\n }\n\n // @ts-expect-error the map already has the cache with key\n return this.cache.get(cacheKey);\n }\n}\n","export const masterCardAndVisaPaymentMethodId = 26;\nexport const maestroPaymentMethodId = 490;\n// eslint-disable-next-line @typescript-eslint/no-magic-numbers\nexport const creditCardPaymentMethodId = 1380 as const;\nexport const americanExpressMethodId = 714;\n\nexport const specialCards: number[] = [\n maestroPaymentMethodId,\n masterCardAndVisaPaymentMethodId,\n americanExpressMethodId,\n];\n\nexport const cardsWith3ds = new Set<number>([\n masterCardAndVisaPaymentMethodId,\n maestroPaymentMethodId,\n creditCardPaymentMethodId,\n]);\n","import { PaymentConfigurationCreditCardSettings } from './credit-card-form-configuration.interface';\nimport { PaymentConfiguration } from '../../payment-configuration.interface';\nimport { creditCardPaymentMethodId } from '../../credit-card-payment-methods-id.variable';\n\nexport const isCreditCardSettingsGuard = (\n settings: PaymentConfiguration,\n): settings is PaymentConfigurationCreditCardSettings => {\n return settings.paymentMethodId === creditCardPaymentMethodId;\n};\n","export const defaultRefer = 23;\n\nexport const externalVaultRefer = 69;\n\nexport type Refer = typeof defaultRefer | typeof externalVaultRefer;\n","import { Injectable } from '@angular/core';\nimport { SearchParams } from './search-params.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UrlService {\n public addSearchParams(url: string, params: SearchParams = {}): string {\n if (!url) {\n return '';\n }\n\n const urlObject = new URL(url);\n for (const [key, value] of Object.entries(params)) {\n urlObject.searchParams.set(key, value);\n }\n\n return urlObject.toString();\n }\n\n public getSearchParams(url: string): SearchParams {\n if (!url) {\n return {};\n }\n\n const urlObject = new URL(url);\n const searchParams: SearchParams = {};\n\n for (const [key, value] of urlObject.searchParams) {\n searchParams[key] = value;\n }\n\n return searchParams;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SettingsService } from '../../settings/settings.service';\nimport { UrlService } from '../../url/url.service';\nimport { PaymentConfiguration } from '../payment-configuration.interface';\nimport { XpsBoolean } from '../../xps-boolean.enum';\nimport { isCreditCardSettingsGuard } from '../payment-configurations/types/is-credit-card-settings.guard';\nimport { externalVaultRefer } from '../../settings/refer.const';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentConfigService {\n private _activeConfig: PaymentConfiguration | null = null;\n\n public constructor(\n private readonly urlService: UrlService,\n private readonly settingsService: SettingsService,\n ) {}\n\n public get activeConfig(): PaymentConfiguration | null {\n return this._activeConfig;\n }\n\n public setActiveConfig(config: PaymentConfiguration | null): void {\n this._activeConfig = config;\n }\n\n public enrich(config: PaymentConfiguration): PaymentConfiguration {\n if (!config.returnUrl) {\n throw new Error('URL is not provided in payment config');\n }\n\n return {\n ...config,\n returnUrl: this.enrichReturnUrl(\n config.returnUrl,\n !!config.savePaymentMethod,\n ),\n };\n }\n\n public updateReferByPaymentConfiguration(config: PaymentConfiguration): void {\n if (\n isCreditCardSettingsGuard(config) &&\n config.paymentMethodSettings?.useExternalVault\n ) {\n this.settingsService.refer = externalVaultRefer;\n }\n }\n\n private enrichReturnUrl(\n returnUrl: string,\n savePaymentMethod: boolean,\n ): string {\n const enrichedUrl = this.urlService.addSearchParams(returnUrl, {\n token: this.settingsService.token,\n isSavePaymentAccount: savePaymentMethod\n ? XpsBoolean.true\n : XpsBoolean.false,\n });\n return enrichedUrl;\n }\n}\n","export enum XpsCommand {\n form = 'form',\n check = 'check',\n status = 'status',\n checkout = 'checkout',\n account = 'account',\n create = 'create',\n}\n","export enum FieldNames {\n address1 = 'address1',\n address2 = 'address2',\n address = 'address',\n allowRecurrentSubscription = 'allowRecurrentSubscription',\n allowSubscription = 'allowSubscription',\n apt = 'apt',\n availableCardTypes = 'available_card_types',\n babka_pay_phone = 'babka_pay_phone',\n babka_pay_jwt = 'babka_pay_jwt',\n babkaPayLoyaltyParticipation = 'babka_pay_loyalty_participation',\n bank = 'bank',\n birthDate = 'birth_date',\n cardMonth = 'card_month',\n cardYear = 'card_year',\n cardExpire = 'card_expire',\n cardNumber = 'card_number',\n cardholdername = 'cardholdername',\n city = 'city',\n couponCode = 'couponCode',\n document = 'document',\n cpfName = 'cpf_name',\n cpfNumber = 'cpf_number',\n cvv = 'cvv',\n description = 'description',\n collectedEmailConsent = 'collectedEmailConsent',\n email = 'email',\n psEmail = 'psEmail',\n bazitemail = 'bazitemail',\n euCheck = 'eu_check',\n extraCvv = 'extra_cvv',\n extraCardNumber = 'extra_card_number',\n extraCardType = 'extra_card_type',\n fName = 'f_name',\n installments = 'installments',\n lName = 'l_name',\n needInstallments = 'needInstallments',\n payer = 'payer',\n personId = 'person_id',\n personIdAr = 'person_id_ar',\n personIdCo = 'person_id_co',\n phone = 'phone',\n purchaseDescription = 'purchaseDescription',\n recurrentType = 'recurrent_type',\n rockstarTaxes = 'rockstar_taxes',\n state = 'state',\n street = 'street',\n streetNumber = 'street_number',\n take2Taxes = 'take2_taxes',\n termsAndConditions = 'termsAndConditions',\n termsAndConditionsAtariPp = 'termsAndConditionsAtariPP',\n termsAndConditionsAtariTc = 'termsAndConditionsAtariTC',\n termsAndConditionsHtcEula = 'termsAndConditionsHtcEula',\n termsAndConditionsRobloxEula = 'termsAndConditionsRobloxEula',\n termsAndConditionsRolandEula = 'termsAndConditionsRolandEula',\n termsAndConditionsDeusLoVultEula = 'termsAndConditionsDeusLoVultEula',\n termsAndConditionsOnzenga = 'termsAndConditionsOnzenga',\n licenseDisclaimer = 'licenseDisclaimer',\n xsollaTipsAmount = 'xsollaTipsAmount',\n zip = 'zip',\n psAccountCountry = 'psAccountCountry',\n allowSave = 'allowSave',\n koreaLimitsInstruction = 'korea_limits_instruction',\n koreaCashReceiptInstruction = 'korea_cash_receipt_instruction',\n tokenApplePay = 'token_applepay',\n fixInvoice = 'fix_invoice',\n fixPid = 'fix_pid',\n signature = 'signature',\n qr = 'qr',\n qrCode = 'qr_code',\n qrTtl = 'qr_ttl',\n sum = 'sum',\n out = 'out',\n tinkoffDisclaimer = 'ps.tinkoff.disclaimer',\n ppEmail = 'pp_email',\n redeemPoints = 'redeemPoints',\n redeemLoyaltyPoints = 'redeemLoyaltyPoints',\n omnibusDirective = 'omnibus_directive',\n labelApplePay = 'label_applePay',\n countryCode = 'countryCode',\n merchantCapabilities = 'merchantCapabilities',\n requiredBillingContactFields = 'requiredBillingContactFields',\n requiredShippingContactFields = 'requiredShippingContactFields',\n supportedNetworks = 'supportedNetworks',\n acquirer = 'acquirer',\n isSandbox = 'isSandbox',\n payInstanceAccountId = 'payInstanceAccountId',\n getApplePaySessionUrl = 'getApplePaySessionUrl',\n payViaCheckoutUrl = 'payViaCheckoutUrl',\n paymentInstruction = 'payment_instruction',\n paymentWithSavedMethod = 'paymentWithSavedMethod',\n xsollaOrbsPartialPayment = 'xsolla_currency_wallet_partial',\n xsollaGoldOrbsPartial = 'xsolla-gold-orbs-partial',\n xsollaOrbsFullPayment = 'xsolla_currency_wallet_full',\n xsollaCurrencyDescription = 'xsolla_currency_description',\n fixCommand = 'fix_command',\n jwtToken = 'jwt_token',\n userId = 'user_id',\n userPass = 'user_pass',\n pinCard = 'pin_card',\n payType = 'payType',\n fullName = 'user_name',\n name = 'name',\n epin = 'epin',\n zipCode = 'zip_code',\n googlePay3dsRedirect = 'googlePay3DSRedirect',\n googlePayInitData = 'googlePayInitData',\n googlePayPaymentData = 'googlePayPaymentData',\n externalCardIssuerCountry = 'externalCardIssuerCountry',\n pmId = 'pm_id',\n}\n","import { XpsResponse } from '../../../xps-response.interface';\nimport { Field } from '../../../field.interface';\nimport { Invoice } from '../../../invoice.interface';\nimport { XpsCommand } from '../../../xps-comand.enum';\nimport { FieldNames } from '../../../field-names.enum';\nimport { XsollaNumber } from './xsolla-number.interface';\n\nexport class SubmitResponse {\n public readonly parameters: XpsResponse;\n public readonly fields: Field[];\n public onlineBanking?: {\n url: string;\n };\n public readonly data?: unknown;\n public isNeedRedirect: boolean;\n\n public buyData: XpsResponse['buyData'];\n\n public signature?: string;\n public fixInvoice?: string;\n public hasFatalErrors?: boolean;\n public userSession?: Invoice;\n public pid: XpsResponse['pid'];\n public errors: XpsResponse['errors'];\n public summary: XpsResponse['summary'];\n public title: string;\n public currentCommand: XpsCommand | null;\n public messages: XpsResponse['messages'];\n public xsollaNumber: XsollaNumber;\n\n public constructor(\n parameters: XpsResponse,\n public readonly responseNumber: number = 0,\n ) {\n /* Todo split into properties */\n this.parameters = parameters;\n this.fields = Object.keys(parameters.form).map(\n (key: string): Field => parameters.form[key],\n );\n\n if (parameters.onlineBanking) {\n this.onlineBanking = {\n url: parameters.onlineBanking.value,\n };\n }\n\n this.isNeedRedirect =\n parameters.currentCommand === XpsCommand.account ||\n (parameters.currentCommand === XpsCommand.checkout &&\n Boolean(parameters.checkout));\n\n this.buyData = parameters.buyData;\n\n this.fixInvoice = this.getFieldValue(FieldNames.fixInvoice);\n this.signature = this.getFieldValue(FieldNames.signature);\n\n this.hasFatalErrors = parameters.textAll?.fatal;\n\n this.userSession = parameters.userSession;\n this.pid = parameters.pid;\n this.errors = parameters.errors;\n this.summary = parameters.summary;\n this.title = parameters.title;\n this.currentCommand = parameters.currentCommand;\n this.messages = parameters.messages;\n\n this.xsollaNumber = {\n accountXsolla: parameters.accountXsolla,\n isMap: parameters.isMap,\n };\n }\n\n public setFieldValue(fieldName: FieldNames, value: string): void {\n if (!this.parameters.form[fieldName]) return;\n\n this.parameters.form[fieldName].value = value;\n\n const fieldToUpdate = this.fields.find((field) => field.name === fieldName);\n if (!fieldToUpdate) return;\n\n fieldToUpdate.value = value;\n }\n\n public getFieldValue(fieldName: string): string | undefined {\n return this.parameters.form[fieldName]?.value;\n }\n}\n","import { Field } from '../../../field.interface';\nimport { PaymentForm } from '../../../payment-form.interface';\nimport { XpsResponse, XpsStatus } from '../../../xps-response.interface';\n\nexport class InitializeResponse {\n public readonly paymentForm: PaymentForm | null = null;\n\n public constructor(response: XpsResponse) {\n this.paymentForm = this.extractPaymentForm(response);\n }\n\n private extractPaymentForm(response: XpsResponse): PaymentForm | null {\n if (!response) {\n return null;\n }\n\n return {\n totalAmount: response.buyData.sum,\n currency: response.buyData.currency,\n fields: Object.keys(response.form).map(\n (key: string): Field => (response as XpsResponse).form[key],\n ),\n taxDisclaimer: response.taxDisclaimer,\n number: response.number,\n barcode: response.barcode,\n instruction: response.instruction,\n offers: response.offers,\n error: response.error,\n errors: response.errors,\n restrictions: response.restrictions,\n info: response.info,\n buyData: response.buyData,\n pid: response.pid,\n messages: response.messages ?? [],\n title: response.title,\n summary: response.summary,\n skipForm: response.skipForm,\n isSavedMethodPayment: !!response.form?.saved_method_id,\n couponCode: response.form?.couponCode?.value || '',\n publicId: response.public_id,\n skipCheckout: response.skipCheckout,\n koreaNotification: response.form.korea_limits_instruction,\n isCheckout: response.isCheckout,\n categories: response.categories,\n hasFatalErrors: response.textAll?.fatal,\n userSession: response.userSession,\n statusText: (response.status as XpsStatus)?.statusData?.stateText ?? null,\n country: response.country ? response.country.iso : null,\n };\n }\n}\n","export enum UserBehaviourEventName {\n openPaystation = 'open-paystation',\n showErrorMessage = 'show-error-message',\n openStatusError = 'open-status-error',\n changeStatus = 'change-status',\n checkStatusUpdate = 'check-status-update',\n sysTrackedScripts = 'sys-tracked_scripts',\n showShoppingCart = 'show-shopping_cart',\n attemptBuyNow = 'attempt-buy_now',\n attemptContinue = 'attempt-continue',\n clickBtnPay = 'click-btn-pay',\n initializeNextAction = 'initialize-next-action',\n nextAction = 'next-action',\n createForm = 'create-form',\n applicablePaymentStrategies = 'applicable-payment-strategies',\n initializeRequest = 'initialize-request',\n submitRequest = 'submit-request',\n syncRequest = 'sync-request',\n threeDs2complete = '3DS-2.0-complete',\n threeDs2challenge = '3DS-2.0-challenge',\n threeDs2checkout = '3DS-2.0-checkout',\n threeDs2collectDfp = '3DS-2.0-collect-dfp',\n\n // Apple Pay\n applePayRecalculateCartTaxes = 'apple-pay-recalculate-cart-taxes',\n applePayRecalculateCartError = 'apple-pay-recalculate-cart-error',\n applePayOpenWebSocketConnection = 'apple-pay-open-web-socket-connection',\n applePaySendMessageToAnotherWindow = 'apple-pay-send-message-to-another-window',\n applePayBraintreeStartSession = 'apple-pay-braintree-start-session',\n applePayBraintreeSelectShipping = 'apple-pay-braintree-select-shipping',\n applePayBraintreeCartSuccessfulRecalculated = 'apple-pay-braintree-cart-successful-recalculated',\n applePayBraintreeCartErrorRecalculated = 'apple-pay-braintree-cart-error-recalculated',\n applePayBraintreeValidateMerchant = 'apple-pay-braintree-validate-merchant',\n applePayBraintreeValidateMerchantError = 'apple-pay-braintree-validate-merchant-error',\n applePayBraintreePaymentAuthorized = 'apple-pay-braintree-payment-authorized',\n applePayBraintreePaymentTokenizationError = 'apple-pay-braintree-payment-tokenization-error',\n applePayBraintreePaymentCancel = 'apple-pay-braintree-payment-cancel',\n applePayCheckoutSelectShipping = 'apple-pay-checkout-select-shipping',\n applePayCheckoutCartSuccessfulRecalculated = 'apple-pay-checkout-cart-successful-recalculated',\n applePayCheckoutCartErrorRecalculated = 'apple-pay-checkout-cart-error-recalculated',\n applePayCheckoutValidateMerchant = 'apple-pay-checkout-validate-merchant',\n applePayCheckoutValidateMerchantError = 'apple-pay-checkout-validate-merchant-error',\n applePayCheckoutPaymentAuthorized = 'apple-pay-checkout-payment-authorized',\n applePayCheckoutPaymentCancel = 'apple-pay-checkout-payment-cancel',\n applePayAcquirer = 'apple-pay-acquirer',\n\n // Google Pay\n googlePayHandleFailedPayment = 'google-pay-handle-failed-payment',\n googlePayHandleSuccessfulPayment = 'google-pay-handle-successful-payment',\n}\n","export const userBehaviourEventTypes = {\n open: 'open',\n show: 'show',\n click: 'click',\n manual: 'manual',\n store: 'store',\n} as const;\n","export const eventCategories = {\n withoutInvoice: 'withoutInvoice',\n withInvoice: 'withInvoice',\n} as const;\n","import { SubmitResponse } from './response/submit-response.class';\n\nexport const isSubmitResponse = (value: unknown): value is SubmitResponse => {\n return value instanceof SubmitResponse;\n};\n","export enum InputEventName {\n blur = 'blur',\n focus = 'focus',\n}\n","import { FieldNames } from '../../field-names.enum';\n\nexport const fieldsAllowedToOverride = new Set<FieldNames>([\n FieldNames.allowSubscription,\n FieldNames.allowSave,\n FieldNames.email,\n FieldNames.zip,\n]);\n","import { XpsBoolean } from '../xps-boolean.enum';\n\nexport function isXpsBoolean(value: unknown): value is XpsBoolean {\n return value === XpsBoolean.true || value === XpsBoolean.false;\n}\n","export const emptyValidator = (): boolean => true;\n","import { isXpsBoolean } from '../../../type-guards/is-xps-boolean.function';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\nimport { FieldNames } from '../../field-names.enum';\nimport { emptyValidator } from './empty-validator.function';\n\ntype AllowedFieldValidator = (val: unknown) => boolean;\n\ninterface OverrideFieldConfig {\n validator: AllowedFieldValidator;\n defaultValue: XpsBoolean | string;\n}\n\n/**\n * Configuration for fields that can be overridden by partner.\n * We can extend this configuration with additional fields in the future.\n */\nexport const overrideFieldConfigs: { [key: string]: OverrideFieldConfig } = {\n [FieldNames.allowSubscription]: {\n validator: isXpsBoolean,\n defaultValue: XpsBoolean.false,\n },\n [FieldNames.allowSave]: {\n validator: isXpsBoolean,\n defaultValue: XpsBoolean.false,\n },\n [FieldNames.email]: {\n validator: emptyValidator,\n defaultValue: '',\n },\n [FieldNames.zip]: {\n validator: emptyValidator,\n defaultValue: '',\n },\n};\n","import { FieldNames } from '../field-names.enum';\nimport { SubmitResponse } from '../requests/submit/response/submit-response.class';\n\ninterface UpdateAfterErrorRule {\n description: string;\n apply(\n submitResponse: SubmitResponse,\n fieldValueMap: Map<string, string>,\n ): void;\n}\n\nconst getRestoreAllowSaveRule = (\n fieldName: FieldNames,\n): UpdateAfterErrorRule => ({\n description: `Restore ${fieldName} field value entered by user before submit`,\n apply: (\n submitResponse: SubmitResponse,\n fieldValueMap: Map<string, string>,\n ): void => {\n const value = fieldValueMap.get(fieldName);\n if (!fieldValueMap.has(fieldName) || value === undefined) return;\n\n submitResponse.setFieldValue(fieldName, value);\n },\n});\n\nexport const updateAfterErrorRules: UpdateAfterErrorRule[] = [\n getRestoreAllowSaveRule(FieldNames.allowSave),\n getRestoreAllowSaveRule(FieldNames.allowSubscription),\n getRestoreAllowSaveRule(FieldNames.allowRecurrentSubscription),\n {\n description:\n 'Restore zip field value entered by user before submit if no zip value in response',\n apply: (\n submitResponse: SubmitResponse,\n fieldValueMap: Map<string, string>,\n ): void => {\n const valueInResponse = submitResponse.getFieldValue(FieldNames.zip);\n if (valueInResponse) return;\n\n const value = fieldValueMap.get(FieldNames.zip);\n if (!fieldValueMap.has(FieldNames.zip) || value === undefined) return;\n\n submitResponse.setFieldValue(FieldNames.zip, value);\n },\n },\n {\n description:\n 'Reset card_expire field value that sent by paycore for some reason',\n apply: (submitResponse: SubmitResponse): void => {\n submitResponse.setFieldValue(FieldNames.cardExpire, '');\n },\n },\n];\n","import { FieldNames } from './field-names.enum';\n\nexport const fieldsAllowedToExternalChange = new Set<FieldNames>([\n FieldNames.email,\n FieldNames.externalCardIssuerCountry,\n FieldNames.pmId,\n]);\n","export const googlePayPid = 3431;\n","import { PaymentConfiguration } from '../../payment-configuration.interface';\nimport { googlePayPid } from '../../../sdk-payment-systems/sdk-payment-methods.const';\nimport { PaymentConfigurationGooglePaySettings } from './google-pay-form-configuration.interface';\n\nexport const isGooglePaySettingsGuard = (\n settings: PaymentConfiguration,\n): settings is PaymentConfigurationGooglePaySettings => {\n return settings.paymentMethodId === googlePayPid;\n};\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { InitializeResponse } from './initialize-response.class';\n\nexport type ResponseParameters = ConstructorParameters<\n typeof InitializeResponse\n>;\n\nexport type InitializeResponseFactory = (\n ...args: ResponseParameters\n) => InitializeResponse;\n\nexport const initializeResponseFactoryToken: InjectionToken<InitializeResponseFactory> =\n new InjectionToken<InitializeResponseFactory>('InitializeResponse');\n\nexport const initializeResponseFactoryProvider: ValueProvider = {\n provide: initializeResponseFactoryToken,\n useValue: (...args: ResponseParameters) => new InitializeResponse(...args),\n};\n","import { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { AppError } from './app-error.class';\nimport { HttpErrorData } from '../http-interceptor/http-error-data.interface';\nimport { HttpErrorResponseData } from '../http-interceptor/http-error-response-data.interface';\n\nexport class HttpError extends AppError {\n private readonly RESTRICTED_KEYS_REGEXP = new RegExp(\n '.*(card_number|number|cvv|cvn|month|year|cardholdername|client_data|dfp|password).*',\n 'i',\n );\n private readonly httpErrorData!: HttpErrorData;\n\n public constructor(error: HttpErrorResponse, req: HttpRequest<unknown>) {\n super(error.message);\n\n this.httpErrorData = {\n request: {\n url: req.url,\n method: req.method,\n headers: req.headers,\n },\n response: {\n status: error.status,\n headers: error.headers,\n },\n };\n\n if (req.body) {\n this.httpErrorData.request.data = this.cleanPersonalData(\n req.body as { [key: string]: unknown },\n );\n }\n\n if (error.statusText) {\n const errorData = error.error as HttpErrorResponseData;\n\n this.httpErrorData.response.data = {\n statusText: error.statusText,\n errors: errorData?.errors ?? [],\n };\n }\n }\n\n public getHttpErrorData(): HttpErrorData {\n return this.httpErrorData;\n }\n\n private cleanPersonalData(data: { [key: string]: unknown }): {\n [key: string]: unknown;\n } {\n return Object.entries(data).reduce((acc, [key, val]) => {\n return {\n ...acc,\n [key]: this.RESTRICTED_KEYS_REGEXP.test(key) ? '***' : val,\n };\n }, {});\n }\n}\n","import { lastValueFrom } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { SecureApiClient } from '../../http/secure-api/secure-api.service';\nimport { XpsBoolean } from '../../xps-boolean.enum';\nimport { windowToken } from '../../window.token';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { SettingsService } from '../../settings/settings.service';\nimport { XpsRequest } from '../xps-request.interface';\nimport { XpsResponse } from '../xps-response.interface';\nimport { XpsRequestParams } from '../xps-request-params.interface';\nimport { cardsWith3ds } from '../credit-card-payment-methods-id.variable';\nimport { CountryService } from '../../country/country.service';\nimport { UserAgentService } from '../../user-agent/user-agent.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class XpsApiService {\n private readonly directPaymentApiRoute = 'directpayment';\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n private readonly secureApiClient: SecureApiClient,\n private readonly settingsService: SettingsService,\n private readonly countryService: CountryService,\n private readonly userAgentService: UserAgentService,\n ) {}\n\n public async directPaymentRequest(\n parameters: XpsRequest,\n ): Promise<XpsResponse> {\n const pid =\n parameters.pid?.toString() ??\n (parameters.xps_fix_pid as string | undefined) ??\n '';\n const paymentWithSavedMethod =\n parameters.paymentWithSavedMethod ??\n (parameters.xps_paymentWithSavedMethod as string | undefined) ??\n '';\n\n const requestParams: XpsRequestParams = {\n ...this.collectAnalyticsParameters(pid, paymentWithSavedMethod),\n ...this.collectUserSessionId(),\n country: this.countryService.getCountry(),\n refer: this.settingsService.refer,\n ...parameters,\n };\n\n if (this.userAgentService.isMobileDevice) {\n requestParams.mobile = XpsBoolean.true;\n }\n\n return lastValueFrom(\n this.secureApiClient.post<XpsResponse>(\n this.directPaymentApiRoute,\n new URLSearchParams({ ...requestParams } as unknown as {\n [key: string]: string;\n }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n ),\n );\n }\n\n private collectAnalyticsParameters(\n paymentMethodId?: string,\n paymentWithSavedMethod?: XpsBoolean | string,\n ): {\n [key: string]: unknown;\n } {\n const parameters: XpsRequestParams = {};\n\n parameters.paymentWithSavedMethod = paymentWithSavedMethod\n ? paymentWithSavedMethod\n : XpsBoolean.false;\n\n if (!paymentMethodId) {\n return parameters;\n }\n\n /* If payment method with 3DSecure */\n if (cardsWith3ds.has(Number(paymentMethodId))) {\n parameters.container3DS = JSON.stringify({\n browserjavaenabled: this.window.navigator.javaEnabled(),\n browserlanguage: this.window.navigator.language,\n browsercolordepth: this.window.screen.colorDepth,\n browserscreenheight: this.window.screen.availHeight,\n browserscreenwidth: this.window.screen.availWidth,\n browsertz: new Date().getTimezoneOffset(),\n browserappname: this.window.navigator.appName,\n browserlocaltime: new Date().toString(),\n browserplatform: this.window.navigator.platform || '',\n browsercookiesenabled: this.window.navigator.cookieEnabled,\n });\n }\n\n return parameters;\n }\n\n private collectUserSessionId(): XpsRequestParams {\n const parameters: XpsRequestParams = {};\n\n parameters.xps_idUserSession = this.settingsService.user.session_id ?? '';\n parameters.user_session_id = this.settingsService.user.session_id ?? '';\n\n return parameters;\n }\n}\n","export const vkPay = 3496;\nexport const googlePay = 3431;\nexport const applePayId = 3175;\nexport const barzahlenPay = 1679;\nexport const naverPay = 3563;\nexport const venmoPay = 3636;\n","import {\n applePayId,\n vkPay,\n barzahlenPay,\n naverPay,\n venmoPay,\n} from './pages-payment-methods-id.const';\n\nexport const pagesRoutes = new Map([\n [vkPay, '/payment/external-pages/vk-pay'],\n [applePayId, '/payment/external-pages/apple-pay'],\n [barzahlenPay, '/payment/external-pages/barzahlen-pay'],\n [naverPay, '/payment/external-pages/naver-pay'],\n [venmoPay, '/payment/external-pages/venmo-pay'],\n]);\n","export const payStation4Url = 'https://secure.xsolla.com/paystation4';\nexport const sandboxPayStationUrl =\n 'https://sandbox-secure.xsolla.com/paystation4';\n","export const softBankContrId = 1303;\nexport const adyenUsContrId = 1350;\nexport const adyenEuContrId = 1351;\nexport const adyenJapanContrId = 1352;\n\nexport const acquirersWithRedirectInNewWindow = new Set<number>([\n softBankContrId,\n adyenEuContrId,\n adyenUsContrId,\n adyenJapanContrId,\n]);\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport {\n RedirectAction,\n RedirectActionData,\n RedirectActionType,\n} from './redirect.action.type';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { Injectable } from '@angular/core';\nimport { pagesRoutes } from './ps4-pages/pages-routes.const';\nimport { payStation4Url, sandboxPayStationUrl } from './pay-station4-url.const';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { acquirersWithRedirectInNewWindow } from './acquirers-with-redirect-in-new-window.const';\nimport { cardsWith3ds } from '../../credit-card-payment-methods-id.variable';\nimport { googlePayPid } from '../../../sdk-payment-systems/sdk-payment-methods.const';\n\n@Injectable()\nexport class RedirectActionCreator implements ActionCreator {\n public readonly type: RedirectActionType = 'redirect';\n\n public constructor(private readonly settingsService: SettingsService) {}\n\n public getActionData(submitResponse: SubmitResponse): RedirectAction {\n return {\n type: this.type,\n data: {\n fields: submitResponse.fields,\n errors: submitResponse.errors,\n messages: submitResponse.messages,\n order: submitResponse.summary,\n invoiceId: submitResponse.fixInvoice,\n redirect: this.getRedirect(submitResponse),\n },\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (\n response.currentCommand === XpsCommand.checkout &&\n Boolean(response.parameters.checkout)\n );\n }\n\n protected getRedirectUrl(submitResponse: SubmitResponse): string {\n const responseRedirectUrl = submitResponse.parameters.checkout.action;\n\n const pid = submitResponse?.fields?.find(\n ({ name }) => name === 'fix_pid',\n )?.value;\n if (!pid) {\n return responseRedirectUrl;\n }\n\n const pagesPath = pagesRoutes.get(Number(pid));\n if (!pagesPath) {\n return responseRedirectUrl;\n }\n\n return this.preparePagesUrl(pagesPath);\n }\n\n private getRedirect(\n submitResponse: SubmitResponse,\n ): RedirectActionData['redirect'] {\n const method = submitResponse.parameters.checkout?.method;\n\n return {\n redirectUrl: this.getRedirectUrl(submitResponse),\n isNewWindowRequired: this.getIsNewWindowRequired(submitResponse),\n isSameWindowRequired: this.getIsSameWindowRequired(submitResponse),\n data: submitResponse.parameters.checkout?.data ?? {},\n ...(!!method && { method }),\n };\n }\n\n private getIsNewWindowRequired(submitResponse: SubmitResponse): boolean {\n const pid = submitResponse?.parameters?.pid;\n\n if (!cardsWith3ds.has(pid) && pid !== googlePayPid) {\n return false;\n }\n\n const acquirer =\n submitResponse?.userSession?.payment_method_contr_id ?? null;\n const isAcquirerWithRedirectInNewWindow =\n acquirer && acquirersWithRedirectInNewWindow.has(acquirer);\n\n const cardBinCountry = submitResponse.parameters.cardBinCountry;\n const isJapanCard = cardBinCountry === 'JP';\n\n const isThreeDsIndependentWindow =\n this.settingsService.settings.is_three_ds_independent_windows ?? false;\n\n return (\n isAcquirerWithRedirectInNewWindow ||\n isJapanCard ||\n isThreeDsIndependentWindow\n );\n }\n\n private getIsSameWindowRequired(submitResponse: SubmitResponse): boolean {\n if (this.getIsNewWindowRequired(submitResponse)) {\n return false;\n }\n\n const pid = submitResponse?.parameters?.pid;\n const isCorrectPids = cardsWith3ds.has(pid) || googlePayPid === pid;\n\n // 3DS with redirect case\n return (\n isCorrectPids &&\n !this.settingsService.settings.is_three_ds_independent_windows\n );\n }\n\n private preparePagesUrl(pagesPath: string): string {\n const isSandbox = this.settingsService.isSandboxMode();\n const token = this.settingsService.token;\n\n const payStationUrl = isSandbox ? sandboxPayStationUrl : payStation4Url;\n return `${payStationUrl}/en${pagesPath}?token=${token}`;\n }\n}\n","import { ActionCreator } from '../action.interface';\nimport {\n ShowFieldsAction,\n ShowFieldsActionData,\n ShowFieldsActionType,\n} from './show-fields.action.type';\nimport { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ShowFieldsActionCreator implements ActionCreator {\n public type: ShowFieldsActionType = 'show_fields';\n\n public getActionData(submitResponse: SubmitResponse): ShowFieldsAction {\n const data: ShowFieldsActionData = {\n fields: [],\n errors: [],\n messages: [],\n order: {},\n };\n\n data.fields = submitResponse.fields.filter(\n (field) => field?.isVisible === XpsBoolean.true,\n );\n data.errors = submitResponse.errors;\n data.messages = submitResponse.messages;\n data.order = submitResponse.summary;\n data.submitButtonText = submitResponse.buyData?.value;\n\n return {\n type: this.type,\n data,\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (\n response.currentCommand === XpsCommand.check ||\n response.currentCommand === XpsCommand.form ||\n (response.currentCommand === XpsCommand.checkout &&\n !response.parameters.checkout &&\n !response.parameters?.form?.qr)\n );\n }\n}\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport {\n CheckStatusAction,\n CheckStatusActionType,\n} from './check-status.action.type';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CheckStatusActionCreator implements ActionCreator {\n public type: CheckStatusActionType = 'check_status';\n\n public getActionData(): CheckStatusAction {\n return {\n type: this.type,\n data: null,\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return response.currentCommand === XpsCommand.status;\n }\n}\n","import { ActionCreator } from '../action.interface';\nimport {\n ShowErrorsAction,\n ShowErrorsActionData,\n ShowErrorsActionType,\n} from './show-errors.action.type';\nimport { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { XpsError } from '../../xps-error.interface';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ShowErrorsActionCreator implements ActionCreator {\n public type: ShowErrorsActionType = 'show_errors';\n public data!: ShowErrorsActionData;\n\n public getActionData(errors: XpsError[]): ShowErrorsAction {\n return {\n type: this.type,\n data: { errors },\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return Boolean(response.errors?.length);\n }\n}\n","/**\n * Known capability identifiers. Values mirror the SDK-side\n * {@link Capability} enum but are kept as plain strings because\n * payment-client-core must not depend on pay-station-sdk.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const SHOW_INIT_FORM_CAPABILITY = 'show_init_form_action';\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CapabilitiesService {\n private capabilities = new Set<string>();\n\n public set(list: string[] = []): void {\n this.capabilities = new Set(list);\n }\n\n public has(capability: string): boolean {\n return this.capabilities.has(capability);\n }\n\n public clear(): void {\n this.capabilities.clear();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActionCreator } from '../action.interface';\nimport {\n ShowInitFormAction,\n ShowInitFormActionData,\n ShowInitFormActionType,\n} from './show-init-form.action.type';\nimport { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { PaymentConfigService } from '../../config/config.service';\nimport { CapabilitiesService } from '../../../capabilities/capabilities.service';\nimport { SHOW_INIT_FORM_CAPABILITY } from '../../../capabilities/capability.const';\nimport { isCreditCardSettingsGuard } from '../../payment-configurations/types/is-credit-card-settings.guard';\nimport { creditCardPaymentMethodId } from '../../credit-card-payment-methods-id.variable';\n\n@Injectable()\nexport class ShowInitFormActionCreator implements ActionCreator {\n public type: ShowInitFormActionType = 'show_init_form';\n\n public constructor(\n private readonly paymentConfigService: PaymentConfigService,\n private readonly capabilitiesService: CapabilitiesService,\n ) {}\n\n public getActionData(submitResponse: SubmitResponse): ShowInitFormAction {\n const data: ShowInitFormActionData = {\n fields: submitResponse.fields.filter(\n (field) => field?.isVisible === XpsBoolean.true,\n ),\n errors: submitResponse.errors,\n messages: submitResponse.messages,\n };\n\n return {\n type: this.type,\n data,\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n if (!this.capabilitiesService.has(SHOW_INIT_FORM_CAPABILITY)) {\n return false;\n }\n\n if (!this.isExternalVaultActive()) {\n return false;\n }\n\n if (response.pid !== creditCardPaymentMethodId) {\n return false;\n }\n\n if (response.currentCommand !== XpsCommand.form) {\n return false;\n }\n\n if (!response.errors?.length) {\n return false;\n }\n\n return true;\n }\n\n private isExternalVaultActive(): boolean {\n const config = this.paymentConfigService.activeConfig;\n\n return Boolean(\n config &&\n isCreditCardSettingsGuard(config) &&\n config.paymentMethodSettings?.useExternalVault,\n );\n }\n}\n","import { AppError } from './app-error.class';\n\nexport class TerminalError extends AppError {\n public code!: string;\n\n public constructor(message: string, code: string) {\n super(message);\n\n this.code = code;\n }\n}\n","export enum StatusGroups {\n troubled = 'troubled',\n done = 'done',\n invoice = 'invoice',\n}\n","export enum StatusEnum {\n created = 'created',\n awaiting = 'awaiting',\n processing = 'processing',\n authorized = 'authorized',\n held = 'held',\n done = 'done',\n error = 'error',\n canceled = 'canceled',\n}\n","import { Status } from '../../status.interface';\nimport { XpsResponse, XpsStatus } from '../../../xps-response.interface';\nimport { TerminalError } from '../../../../exceptions-handling/errors/terminal-error.class';\nimport { StatusGroups } from '../../status-groups';\nimport { StatusEnum } from '../../status.enum';\n\nexport class StatusResponse {\n public readonly status!: Status;\n private readonly error?: { code: string; message: string };\n\n public constructor(parameters: {\n status: XpsStatus | null;\n errors: XpsResponse['errors'];\n form?: XpsResponse['form'];\n payment_method: XpsResponse['payment_method'];\n }) {\n if (parameters.errors?.[0]) {\n this.error = {\n code: parameters.errors[0].code.toString(),\n message: parameters.errors[0].message,\n };\n }\n\n if (!parameters.status) {\n throw new TerminalError(\n this.error?.message ?? '',\n this.error?.code.toString() ?? '',\n );\n }\n\n this.status = {\n statusState: parameters.status.statusData.stateText,\n email: parameters.status.statusData.email,\n webSocketUrl: parameters.status.statusData.webSocketChannelUrl,\n webSocketChannelName: parameters.status.statusData.webSocketChannelName,\n webSocketClientType: parameters.status.statusData.webSocketClientType,\n financeInfo: parameters.status.text.info,\n discount: parameters.status.text.info.discount\n ? Math.abs(\n Number.parseFloat(\n parameters.status.text.info.discount?.value ?? '',\n ),\n )\n : null,\n isCancelUser: parameters.status.isCancelUser,\n postMessageStatus: parameters.status.isCancelUser\n ? StatusGroups.troubled\n : parameters.status.group,\n virtualCurrencyAmount: parameters.status.statusData.out,\n backUrlSettings: {\n backUrl: parameters.status.text.backurl,\n backUrlAction: parameters.status.text.backurl_action,\n backUrlCaption: parameters.status.text.backurl_caption,\n returnRegion: parameters.status.return_region,\n },\n additionalBackButton: this.getAdditionalBackButton(parameters.status),\n group: parameters.status.group,\n needToCheck: parameters.status.needToCheck,\n autoRedirect: parameters.status.autoredirect,\n statusMessage: parameters.status.text.state,\n userId: parameters.status.statusData.v1,\n invoice: parameters.status.statusData.invoice,\n pid: parameters.status.statusData.pid,\n projectAmount: this.getProjectAmount(parameters.status),\n titleClass: parameters.status.title_class,\n paymentCountryIso: parameters.status.statusData.payment_country_iso,\n order: parameters.status.text.order,\n };\n\n this.status.autoCancellation =\n parameters.payment_method?.auto_cancellation !== false;\n\n if (parameters.form) {\n this.status.userReturnStatus = this.getUserReturnStatus(parameters.form);\n }\n\n if (\n this.status.statusState === StatusEnum.done ||\n this.status.statusState === StatusEnum.authorized\n ) {\n this.status.isSuccess = true;\n }\n\n if (\n this.status.statusState === StatusEnum.canceled ||\n this.status.isCancelUser\n ) {\n this.status.isCanceled = true;\n }\n }\n\n private getUserReturnStatus(form: XpsResponse['form']): string | undefined {\n const value = form['fix_userReturnStatus']?.value;\n if (value === 'undefined') return undefined;\n\n return value;\n }\n\n private getProjectAmount(status: XpsStatus): Status['projectAmount'] {\n if (!status.statusData.projectAmount) {\n return;\n }\n\n const [amount, currency] = status.statusData.projectAmount.split(' ');\n return {\n amount,\n currency,\n };\n }\n\n private getAdditionalBackButton(\n status: XpsStatus,\n ): Status['additionalBackButton'] {\n if (!status.text.is_additional_back_url_enabled) {\n return {\n link: '',\n action: '',\n label: '',\n region: '',\n isEnabled: false,\n };\n }\n\n return {\n link: status.text.additional_back_url_link ?? '',\n action: status.text.additional_back_url_action ?? '',\n label: status.text.additional_back_url_label ?? '',\n region: status.additional_button_return_region ?? '',\n isEnabled: status.text.is_additional_back_url_enabled,\n };\n }\n}\n","import { ActionCreator } from '../action.interface';\nimport {\n StatusUpdatedAction,\n StatusUpdatedActionType,\n} from './status-updated.action.type';\nimport { StatusResponse } from '../../status/status-request/response/status-response.class';\nimport { Status } from '../../status/status.interface';\nimport { SavePaymentMethodStatus } from '../../status/save-payment-method-status/save-payment-method-status.enum';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class StatusUpdatedActionCreator implements ActionCreator {\n public type: StatusUpdatedActionType = 'status_updated';\n\n public getActionData({\n statusResponse,\n isSavePaymentMethodMode,\n savePaymentMethodStatus,\n }: {\n statusResponse: StatusResponse | Status;\n isSavePaymentMethodMode?: boolean;\n savePaymentMethodStatus?: SavePaymentMethodStatus;\n }): StatusUpdatedAction {\n let status: Status;\n\n if (statusResponse instanceof StatusResponse) {\n status = statusResponse.status;\n } else {\n status = statusResponse;\n }\n\n return {\n type: this.type,\n data: {\n statusState: status.statusState,\n invoice: status.invoice,\n isSuccess: status.isSuccess,\n isCanceled: status.isCanceled,\n group: status.group,\n email: status.email,\n isSavePaymentMethodMode: Boolean(isSavePaymentMethodMode),\n savePaymentMethodStatus,\n },\n };\n }\n\n public isSuitable(): boolean {\n return false;\n }\n}\n","import { ActionCreator } from '../action.interface';\nimport { ThreeDsAction, ThreeDsActionType } from './three-ds.action.type';\nimport { StatusChallenge } from '../../three-ds/three-ds-20/status-update.interface';\nimport { Injectable } from '@angular/core';\nimport { SettingsService } from '../../../settings/settings.service';\n\n@Injectable()\nexport class ThreeDsActionCreator implements ActionCreator {\n public type: ThreeDsActionType = '3DS';\n\n public constructor(private readonly settingsService: SettingsService) {}\n\n public getActionData(actionData: StatusChallenge): ThreeDsAction {\n return {\n type: this.type,\n data: this.enrichWithRedirectParams(actionData),\n };\n }\n\n public isSuitable(): boolean {\n return false;\n }\n\n private enrichWithRedirectParams(\n actionData: StatusChallenge,\n ): StatusChallenge {\n return {\n ...actionData,\n data: {\n ...actionData.data,\n redirect: {\n isNewWindowRequired:\n this.settingsService.settings.is_three_ds_independent_windows ??\n false,\n isSameWindowRequired:\n !this.settingsService.settings.is_three_ds_independent_windows,\n },\n },\n };\n }\n}\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport {\n SpecialButtonAction,\n SpecialButtonActionType,\n} from './special-button.action.type';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { Injectable } from '@angular/core';\nimport { googlePayPid } from '../../../sdk-payment-systems/sdk-payment-methods.const';\n\n@Injectable()\nexport class SpecialButtonActionCreator implements ActionCreator {\n public type: SpecialButtonActionType = 'special_button';\n private readonly pids: number[] = [googlePayPid];\n private readonly sdkPaymentMethodsName = new Map<number, string>([\n [googlePayPid, 'google-pay'],\n ]);\n\n public getActionData(submitResponse: SubmitResponse): SpecialButtonAction {\n return {\n type: this.type,\n data: {\n errors: submitResponse.errors,\n messages: submitResponse.messages,\n buttonName: this.getPaymentMethodName(submitResponse.pid),\n },\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (\n response.currentCommand === XpsCommand.checkout &&\n Boolean(response.parameters.checkout) &&\n this.pids.includes(response.pid)\n );\n }\n\n private getPaymentMethodName(pid: number): string {\n const buttonName = this.sdkPaymentMethodsName.get(pid);\n\n if (!buttonName) {\n throw new Error('Special button not found');\n }\n\n return buttonName as string;\n }\n}\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport { Injectable } from '@angular/core';\nimport {\n ShowQrCodeAction,\n ShowQrCodeActionType,\n} from './show-qr-code.action.type';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\n\n@Injectable()\nexport class ShowQrCodeActionCreator implements ActionCreator {\n public readonly type: ShowQrCodeActionType = 'show_qr_code';\n\n public getActionData(response: SubmitResponse): ShowQrCodeAction {\n const submitButtonText = response.parameters.buyData.value;\n const fields = response.fields.filter(\n (field) => field?.isVisible === XpsBoolean.true,\n );\n return {\n type: this.type,\n data: {\n fields,\n submitButtonText,\n },\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return Boolean(response.parameters?.form?.qr);\n }\n}\n","export const payPayId = 3669;\nexport const linePayId = 3677;\nexport const auPayId = 3686;\nexport const docomoId = 3692;\nexport const softbankId = 3693;\nexport const auEasyPaymentId = 3694;\nexport const yMobileId = 3697;\nexport const mobilePaymentMethodId = 1738;\nexport const mobilePaymentMethodId2 = 2015;\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { Injectable } from '@angular/core';\nimport {\n ShowMobilePaymentScreenAction,\n ShowMobilePaymentScreenActionType,\n} from './show-mobile-payment-screen.action.type';\nimport {\n mobilePaymentMethodId,\n mobilePaymentMethodId2,\n} from '../../../../shared/payment-methods-id.variable';\n\n@Injectable()\nexport class ShowMobilePaymentScreenActionCreator implements ActionCreator {\n public type: ShowMobilePaymentScreenActionType = 'show_mobile_payment_screen';\n private readonly pids = [mobilePaymentMethodId, mobilePaymentMethodId2];\n\n public getActionData(\n response: SubmitResponse,\n ): ShowMobilePaymentScreenAction {\n const submitButtonText = response.parameters.buyData.value;\n return {\n type: this.type,\n data: {\n submitButtonText,\n },\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (\n response.currentCommand === XpsCommand.create &&\n this.pids.includes(response.pid)\n );\n }\n}\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport { Injectable } from '@angular/core';\nimport {\n ShowXsollaNumberAction,\n ShowXsollaNumberActionType,\n} from './show-xsolla-number.action.type';\n\n@Injectable()\nexport class ShowXsollaNumberActionCreator implements ActionCreator {\n public readonly type: ShowXsollaNumberActionType =\n 'show_cash_payment_instruction';\n\n public getActionData(): ShowXsollaNumberAction {\n return {\n type: this.type,\n data: null,\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (\n this.isCashPayment(response.parameters?.categories) &&\n !this.isRedirectPaymentMethod(response)\n );\n }\n\n private isCashPayment(categories: number[] = []): boolean {\n const cashPaymentCategory = 1;\n /**\n * For some methods, the category array may contain not just [1], but [0, 1];\n * 0 is a recommended category, so it checks that all categories <= cashPaymentCategory\n */\n return (\n !!categories?.length &&\n categories.includes(cashPaymentCategory) &&\n categories.every((category: number) => category <= cashPaymentCategory)\n );\n }\n\n private isRedirectPaymentMethod(submitResponse: SubmitResponse): boolean {\n return submitResponse.parameters.isCheckout ?? false;\n }\n}\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport { Injectable } from '@angular/core';\nimport {\n ShowCashPaymentInstructionAction,\n ShowCashPaymentInstructionActionType,\n} from './show-cash-payment-instruction.action.type';\n\n@Injectable()\nexport class ShowCashPaymentInstructionActionCreator implements ActionCreator {\n public readonly type: ShowCashPaymentInstructionActionType =\n 'show_cash_payment_instruction';\n\n public getActionData(): ShowCashPaymentInstructionAction {\n return {\n type: this.type,\n data: null,\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (response.fields || []).some(\n (field) => field.name === 'payment_instruction',\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { RedirectActionCreator } from './redirect.action.class';\n\n@Injectable()\nexport class GoogleThreeDsRedirectActionCreator extends RedirectActionCreator {\n public isSuitable(response: SubmitResponse): boolean {\n return (\n response.currentCommand === XpsCommand.checkout &&\n !response.parameters.checkout &&\n Boolean(response.parameters.form?.googlePay3DSRedirect?.value)\n );\n }\n\n protected getRedirectUrl(submitResponse: SubmitResponse): string {\n return (\n String(submitResponse.parameters.form?.googlePay3DSRedirect?.value) ?? ''\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActionCreator } from '../action.interface';\nimport {\n ThreeDsRedirectAction,\n ThreeDsRedirectActionType,\n} from './three-ds-redirect.action.type';\nimport { StatusCheckout } from '../../three-ds/three-ds-20/status-update.interface';\n\n@Injectable()\nexport class ThreeDsRedirectActionCreator implements ActionCreator {\n public type: ThreeDsRedirectActionType = 'redirect';\n\n public getActionData(actionData: StatusCheckout): ThreeDsRedirectAction {\n return {\n type: this.type,\n data: {\n fields: [],\n errors: [],\n messages: [],\n order: {},\n invoiceId: '',\n redirect: {\n isNewWindowRequired: false,\n isSameWindowRequired: false,\n redirectUrl: actionData.data?.action ?? '',\n data: actionData.data?.params ?? {},\n },\n },\n };\n }\n\n public isSuitable(): boolean {\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActionCreator } from '../action.interface';\nimport {\n ServerErrorAction,\n ServerErrorActionData,\n ServerErrorActionType,\n} from './server-error.action.type';\n\n@Injectable()\nexport class ServerErrorActionCreator\n implements\n ActionCreator<unknown, ServerErrorActionType, ServerErrorActionData>\n{\n public type: ServerErrorActionType = 'server_error';\n\n public getActionData(data: ServerErrorActionData): ServerErrorAction {\n return {\n type: this.type,\n data,\n };\n }\n\n public isSuitable(): boolean {\n return false;\n }\n}\n","import { InjectionToken, ProviderToken } from '@angular/core';\nimport { ActionCreator } from './action.interface';\nimport { RedirectActionCreator } from './redirect/redirect.action.class';\nimport { ShowFieldsActionCreator } from './show-fields/show-fields.action.class';\nimport { CheckStatusActionCreator } from './check-status/check-status.action.class';\nimport { ShowErrorsActionCreator } from './show-errors/show-errors.action.class';\nimport { ShowInitFormActionCreator } from './show-init-form/show-init-form.action.class';\nimport { StatusUpdatedActionCreator } from './status-updated/status-updated.action.class';\nimport { ThreeDsActionCreator } from './three-ds/three-ds.action.class';\nimport { SpecialButtonActionCreator } from './special-button/special-button.action.class';\nimport { ShowQrCodeActionCreator } from './show-qr-code/show-qr-code.action.class';\nimport { ShowMobilePaymentScreenActionCreator } from './show-mobile-payment-screen/show-mobile-payment-screen.action.class';\nimport { ShowXsollaNumberActionCreator } from './show-xsolla-number/show-xsolla-number.action.class';\nimport { ShowCashPaymentInstructionActionCreator } from './show-cash-payment-instruction/show-cash-payment-instruction.action.class';\nimport { GoogleThreeDsRedirectActionCreator } from './redirect/google-three-ds-redirect.action.class';\nimport { ThreeDsRedirectActionCreator } from './three-ds-redirect/three-ds-redirect.action.class';\nimport { ServerErrorActionCreator } from './server-error/server-error.action.class';\n\nexport type NextActionTokens = Array<ProviderToken<ActionCreator>>;\n\nexport const nextActionsToken = new InjectionToken<ActionCreator>('Action');\n\nexport const nextActions: NextActionTokens = [\n ShowInitFormActionCreator,\n GoogleThreeDsRedirectActionCreator,\n ShowFieldsActionCreator,\n CheckStatusActionCreator,\n SpecialButtonActionCreator,\n ShowQrCodeActionCreator,\n RedirectActionCreator,\n ShowCashPaymentInstructionActionCreator,\n ShowMobilePaymentScreenActionCreator,\n ShowXsollaNumberActionCreator,\n];\n\nexport const flowUpdateNextActions: NextActionTokens = [\n ShowErrorsActionCreator,\n StatusUpdatedActionCreator,\n ThreeDsActionCreator,\n ThreeDsRedirectActionCreator,\n ServerErrorActionCreator,\n];\n","export const oneTimeAnalyticsEvents = new Set<string>([]);\n","export enum EventParameterType {\n string = '0',\n int = '1',\n float = '2',\n bool = '3',\n intArray = '4',\n stringArray = '5',\n}\n","import { Inject, Injectable, isDevMode } from '@angular/core';\nimport { EventParameterType } from './event-parameter-types';\nimport { UserBehaviourEvent } from './user-behaviour-event.interface';\nimport { Purchase } from './purchase.type';\nimport { CreateEventMethodOptionsInterface } from '../user-behaviour-analytics.interface';\nimport { SettingsService } from '../../settings/settings.service';\nimport { UserAgentService } from '../../user-agent/user-agent.service';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { Device } from '../../user-agent/device.enum';\nimport { windowToken } from '../../window.token';\nimport { UserSessionOptions } from '../user-session-options';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EventBuilderService {\n public constructor(\n private readonly settingsService: SettingsService,\n private readonly userAgentService: UserAgentService,\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {}\n\n public createEvent(\n options: CreateEventMethodOptionsInterface,\n userSessionOptions: UserSessionOptions,\n ): UserBehaviourEvent {\n return {\n action: options.action,\n type: options.type,\n value: this.convertToEventParameterType(\n options.value,\n options.valueType ?? EventParameterType.string,\n ),\n state: options.state,\n date: this.getDate(options.date),\n milliseconds: options.date.getTime(),\n timezone: this.getTimezone(options.date),\n session_id:\n this.settingsService.unsafeUtilsResponse?.user?.session_id ?? null,\n referrer_url: this.window?.document?.referrer,\n project_id: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.project?.id,\n EventParameterType.int,\n ),\n payment_country: this.convertToEventParameterType(\n options.invoice?.payment_country ??\n this.settingsService.unsafeUtilsResponse?.user?.country?.value,\n EventParameterType.string,\n ),\n geotype_id: this.convertToEventParameterType(\n options.invoice?.geotype_id,\n EventParameterType.int,\n ),\n instance_id: this.convertToEventParameterType(\n options.instanceId ??\n this.getPaymentMethodId(userSessionOptions.instanceId),\n EventParameterType.int,\n ),\n payment_method_contr_id: this.convertToEventParameterType(\n options.invoice?.payment_method_contr_id,\n EventParameterType.int,\n ),\n ps_type: this.convertToEventParameterType(\n options.invoice?.ps_type,\n EventParameterType.int,\n ),\n is_pay_with_saved_method: this.convertToEventParameterType(\n userSessionOptions.isPayWithSavedMethod,\n EventParameterType.bool,\n ),\n purchase_invoice_id: this.convertToEventParameterType(\n options.invoice?.purchase_invoice_id,\n EventParameterType.int,\n ),\n purchase_external_id: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.purchase_external_id,\n EventParameterType.string,\n ),\n purchase_type: this.settingsService.unsafeUtilsResponse?.purchase\n ?.purchase_type as Purchase,\n purchase_sum: this.convertToEventParameterType(\n options.invoice?.purchase_sum,\n EventParameterType.float,\n ),\n purchase_currency: this.convertToEventParameterType(\n options.invoice?.purchase_currency,\n EventParameterType.string,\n ),\n purchase_sku: this.convertToEventParameterType(\n options.invoice?.purchase_sku,\n EventParameterType.string,\n ),\n purchase_digital_content_sku: null,\n purchase_description: this.convertToEventParameterType(\n options.invoice?.purchase_description,\n EventParameterType.string,\n ),\n virtual_currency_amount: null, // TODO: add value\n digital_content_cart_id: this.convertToEventParameterType(\n options.invoice?.digital_content_cart_id,\n EventParameterType.int,\n ),\n digital_good_cart_id: this.convertToEventParameterType(\n options.invoice?.digital_good_cart_id,\n EventParameterType.int,\n ),\n coupon_code: this.convertToEventParameterType(\n userSessionOptions.couponCode,\n EventParameterType.string,\n ),\n theme_version: this.userAgentService.isMobileDevice\n ? Device.mobile\n : Device.desktop,\n subscription_package_id: this.convertToEventParameterType(\n userSessionOptions.subscriptionPackageId,\n EventParameterType.int,\n ),\n subscription_product_id: this.convertToEventParameterType(\n userSessionOptions.subscriptionProductId,\n EventParameterType.int,\n ),\n subscription_recurrent_id: this.convertToEventParameterType(\n userSessionOptions.subscriptionRecurrentId,\n EventParameterType.int,\n ),\n user_id: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.requisites?.id,\n EventParameterType.string,\n ),\n user_access_token: this.settingsService.token,\n user_name: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.requisites?.v2,\n EventParameterType.string,\n ),\n user_email: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.email?.value,\n EventParameterType.string,\n ),\n user_country: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.country?.value,\n EventParameterType.string,\n ),\n user_ip: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.ip,\n EventParameterType.string,\n ),\n user_mobile_operator_name: this.convertToEventParameterType(\n userSessionOptions.userMobileOperatorName,\n EventParameterType.string,\n ),\n user_operation_system: this.userAgentService.platform,\n user_browser: this.userAgentService.browserDescription,\n user_browser_version: this.userAgentService.browserVersion,\n user_agent: this.userAgentService.userAgent,\n user_locale: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.local,\n EventParameterType.string,\n ),\n user_utm: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.utm_parameters,\n EventParameterType.string,\n ),\n xsolla_product_tag: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.xsolla_product_tag,\n EventParameterType.string,\n ),\n experiment_id: null,\n is_test_session: +isDevMode(),\n babka_value: null,\n extra_value: this.convertToEventParameterType(\n options?.extraValue,\n EventParameterType.string,\n ),\n is_subscription: this.convertToEventParameterType(\n this.isSubscription(),\n EventParameterType.bool,\n ),\n is_iframe: this.convertToEventParameterType(\n this.window.parent !== this.window,\n EventParameterType.bool,\n ),\n web3wallet: null, // TODO: add value\n dimension_1: this.convertToEventParameterType(\n options?.dimension1,\n EventParameterType.string,\n ),\n dimension_2: this.convertToEventParameterType(\n options?.dimension2,\n EventParameterType.string,\n ),\n dimension_3: this.convertToEventParameterType(\n options?.dimension3,\n EventParameterType.string,\n ),\n dimension_4: this.convertToEventParameterType(\n options?.dimension4,\n EventParameterType.string,\n ),\n dimension_5: this.convertToEventParameterType(\n options?.dimension5,\n EventParameterType.string,\n ),\n client_version: 'Headless Checkout',\n };\n }\n\n private getDate(date: Date): string {\n const nullIndex = 0;\n return date.toISOString().replace('T', ' ').replace('Z', '').split('.')[\n nullIndex\n ];\n }\n\n private getTimezone(date: Date): string {\n const hour = 60;\n const nullHour = 0;\n const hourOffset = -date.getTimezoneOffset() / hour;\n\n if (hourOffset === nullHour) {\n return '0';\n }\n\n return hourOffset > nullHour ? `+${hourOffset}` : hourOffset.toString();\n }\n\n private convertToEventParameterType(\n value: boolean | number | number[] | string | string[] | null | undefined,\n type: EventParameterType,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): any | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n\n switch (type) {\n case EventParameterType.string:\n return String(value);\n case EventParameterType.int:\n value = parseInt(String(value), 10);\n return isNaN(value) ? 0 : value;\n case EventParameterType.stringArray:\n case EventParameterType.intArray:\n return Array.isArray(value) ? value : [];\n case EventParameterType.float:\n value = parseFloat(String(value));\n return isNaN(value) ? 0 : value;\n case EventParameterType.bool:\n return value ? 1 : 0;\n }\n }\n\n private convertValueForPostMessage(\n value: string | number[] | null,\n ): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n return String(value);\n }\n\n private isSubscription(): boolean {\n return (\n this.settingsService.unsafeUtilsResponse?.purchase?.purchase_type ===\n 'subscription'\n );\n }\n\n private getPaymentMethodId(instanceId: number | null): number | null {\n return (\n this.settingsService.unsafeUtilsResponse?.settings?.payment_system ??\n instanceId\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { userBehaviourEventTypes } from './user-behaviour-event/user-behaviour-event-types';\nimport { eventCategories } from './user-behaviour-event/user-behaviour-event-categories';\nimport {\n SendEventMethodOptionsInterface,\n CreateEventMethodOptionsInterface,\n} from './user-behaviour-analytics.interface';\nimport { EventBuilderService } from './event-builder/event-builder.service';\nimport { UserBehaviourEvent } from './event-builder/user-behaviour-event.interface';\nimport { Subject } from 'rxjs';\nimport { Invoice } from './event-builder/invoice.interface';\nimport { UserBehaviourEventName } from './user-behaviour-event-name.enum';\nimport { oneTimeAnalyticsEvents } from './one-time-analytics-events.const';\nimport { SettingsService } from '../settings/settings.service';\nimport { Field } from '../payment/field.interface';\nimport { XpsResponse } from '../payment/xps-response.interface';\nimport { UserSessionOptions } from './user-session-options';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserBehaviourAnalyticsService {\n public set isPayWithSavedMethod(value: boolean) {\n this.userSessionOptions.isPayWithSavedMethod = value;\n }\n\n public set subscriptionPackageId(value: number) {\n this.userSessionOptions.subscriptionPackageId = value;\n }\n\n public set couponCode(value: string) {\n this.userSessionOptions.couponCode = value;\n }\n\n public set paymentStatus(value: string) {\n this.userSessionOptions.paymentStatus = value;\n }\n\n public get sessionOptions(): UserSessionOptions {\n return this.userSessionOptions;\n }\n\n private get purchaseType(): string | null {\n return this.settingsService.unsafeUtilsResponse?.purchase?.purchase_type\n ? 'subscription'\n : null;\n }\n\n private readonly apiUrl: string =\n 'https://datagather.xsolla.com/paystation-user-sessions';\n\n private readonly _events$ = new Subject<UserBehaviourEvent>();\n\n private readonly userSessionOptions: UserSessionOptions = {\n invoice: null,\n instanceId: null,\n subscriptionRecurrentId: null,\n userMobileOperatorName: null,\n isPayWithSavedMethod: false,\n subscriptionPackageId: null,\n subscriptionProductId: null,\n couponCode: null,\n totalSum: null,\n totalCurrency: null,\n paymentInstanceName: null,\n paymentStatus: null,\n };\n\n private readonly sentEvents = new Set();\n\n public constructor(\n private readonly http: HttpClient,\n private readonly eventBuilderService: EventBuilderService,\n private readonly settingsService: SettingsService,\n ) {}\n\n public init(): undefined | void {\n this.setPid(\n this.settingsService.unsafeUtilsResponse?.purchase?.payment_system?.id,\n );\n this.onOpenPayStation();\n }\n\n public setPid(pid?: number | null): void {\n if (pid) {\n this.userSessionOptions.instanceId = pid;\n }\n }\n\n public fillUserSession(paymentForm: {\n fields: Field[];\n subscriptionRecurrentId?: number;\n userSession?: Invoice;\n pid: XpsResponse['pid'];\n errors: XpsResponse['errors'];\n summary: XpsResponse['summary'];\n title: string;\n }): void {\n if (paymentForm.subscriptionRecurrentId) {\n this.userSessionOptions.subscriptionRecurrentId =\n paymentForm.subscriptionRecurrentId;\n }\n\n const operator: Field | undefined = paymentForm.fields.find(\n (field: Field) => field.name === 'operator',\n );\n if (operator) {\n this.userSessionOptions.userMobileOperatorName = operator.value;\n }\n\n if (paymentForm.pid) {\n this.setPid(paymentForm.pid);\n }\n\n if (paymentForm.userSession) {\n this.userSessionOptions.invoice = paymentForm.userSession;\n const createInvoiceOptions = {\n eventCategory: eventCategories.withInvoice,\n };\n this.send(\n 'create-invoice',\n userBehaviourEventTypes.manual,\n createInvoiceOptions,\n );\n\n if (paymentForm.errors?.length) {\n this.resetInvoice();\n }\n }\n\n const total = paymentForm?.summary?.finance?.total;\n if (total) {\n this.userSessionOptions.totalSum = total.amount;\n this.userSessionOptions.totalCurrency = total.currency;\n }\n\n if (paymentForm.title) {\n this.userSessionOptions.paymentInstanceName = paymentForm.title;\n }\n }\n\n public send(\n action: string,\n type: keyof typeof userBehaviourEventTypes,\n options?: SendEventMethodOptionsInterface,\n ): void {\n if (oneTimeAnalyticsEvents.has(action) && this.sentEvents.has(action)) {\n return;\n }\n\n const date = new Date();\n const invoice =\n options?.eventCategory === eventCategories.withInvoice\n ? this.userSessionOptions.invoice\n : null;\n const eventOptions: CreateEventMethodOptionsInterface = {\n action,\n type,\n value: options?.value ?? null,\n valueType: options?.valueType ?? null,\n date,\n invoice,\n state: '',\n extraValue: options?.extraValue ?? null,\n purchase_type: options?.purchaseType ?? null,\n instanceId: options?.instanceId ?? null,\n dimension1: options?.dimension1 ?? null,\n dimension2: options?.dimension2 ?? null,\n dimension3: options?.dimension3 ?? null,\n dimension4: options?.dimension4 ?? null,\n dimension5: options?.dimension5 ?? null,\n };\n\n const sendEvent = (): void => {\n this.sentEvents.add(action);\n const event: UserBehaviourEvent = this.eventBuilderService.createEvent(\n eventOptions,\n this.userSessionOptions,\n );\n this._events$.next(event);\n const requestBody = JSON.stringify(event);\n if (navigator.sendBeacon) {\n navigator.sendBeacon(this.apiUrl, requestBody);\n } else {\n void this.http.post(this.apiUrl, requestBody).toPromise();\n }\n };\n\n if (options?.syncRequest) {\n sendEvent();\n return;\n }\n\n setTimeout(() => sendEvent());\n }\n\n private onOpenPayStation(): void {\n this.send(\n UserBehaviourEventName.openPaystation,\n userBehaviourEventTypes.open,\n {\n value: null,\n purchaseType: this.purchaseType,\n },\n );\n }\n\n private resetInvoice(): void {\n this.userSessionOptions.invoice = null;\n }\n\n private resetPid(): void {\n this.userSessionOptions.instanceId = null;\n }\n}\n","import { Inject, Injectable, Injector, ProviderToken } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { SubmitResponse } from '../requests/submit/response/submit-response.class';\nimport { ActionCreator } from './action.interface';\nimport { NextAction } from './next-action.interface';\nimport { nextActionsToken, NextActionTokens } from './next-actions';\nimport { ShowErrorsActionCreator } from './show-errors/show-errors.action.class';\nimport { XpsError } from '../xps-error.interface';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { ErrorTags, TaggedError } from '../../exceptions-handling/errors';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NextActionService {\n private readonly flowUpdatesSubject = new Subject<NextAction>();\n\n private readonly nextActionsList: ActionCreator[] = [];\n\n public get flowUpdates$(): Observable<NextAction> {\n return this.flowUpdatesSubject.asObservable();\n }\n\n public constructor(\n @Inject(nextActionsToken)\n private readonly nextActionTokens: NextActionTokens,\n private readonly injector: Injector,\n private readonly showErrorsActionCreator: ShowErrorsActionCreator,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {\n this.fillNextActionsList();\n }\n\n public getNextAction(submitResponse: SubmitResponse): NextAction | null {\n if (submitResponse.errors?.length) {\n this.emitFlowErrors(submitResponse.errors);\n }\n\n if (!submitResponse.currentCommand) {\n return null;\n }\n\n const nextActionCreator = this.findNextActionCreator(submitResponse);\n\n if (nextActionCreator) {\n const nextAction = nextActionCreator.getActionData(submitResponse);\n this.logNextAction(nextAction);\n return nextAction;\n }\n\n throw new TaggedError(\n 'Next action is undefined.',\n [ErrorTags.APP],\n submitResponse,\n );\n }\n\n public emitFlowUpdates(action: NextAction): void {\n this.flowUpdatesSubject.next(action);\n this.logNextAction(action);\n }\n\n public emitFlowErrors(errors: XpsError[]): void {\n if (errors.length === 0) return;\n this.emitFlowUpdates(this.showErrorsActionCreator.getActionData(errors));\n }\n\n private fillNextActionsList(): void {\n this.nextActionTokens.forEach(\n (nextAction: ProviderToken<ActionCreator>) => {\n const item = this.injector.get<ActionCreator>(nextAction);\n this.nextActionsList.push(item);\n },\n );\n }\n\n private findNextActionCreator(\n submitResponse: SubmitResponse,\n ): ActionCreator | undefined {\n const actionType = this.nextActionsList.find(\n (nextAction: ActionCreator) => {\n return nextAction.isSuitable(submitResponse);\n },\n );\n\n if (!actionType) {\n return;\n }\n\n return actionType;\n }\n\n private logNextAction(nextAction: NextAction): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.nextAction,\n 'manual',\n { value: nextAction.type },\n );\n }\n}\n","/* eslint-disable @typescript-eslint/no-magic-numbers */\nexport const cardNumberSanctionErrorCodes = [\n 2034, 2035, 5027, 5024, 5025, 2036,\n];\n","import { FieldNames } from '../payment/field-names.enum';\nimport { cardNumberSanctionErrorCodes } from './card-number-sanction-error-codes.const';\n\nexport const fieldSpecialErrorsMap = [\n {\n errorCodes: new Set(cardNumberSanctionErrorCodes),\n fieldName: FieldNames.cardNumber,\n },\n];\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'unescapeHtml',\n})\nexport class UnescapeHtmlPipe implements PipeTransform {\n public transform(html?: string): string {\n if (!html) {\n return '';\n }\n\n if (html.includes('>')) {\n const messageDocument = new DOMParser().parseFromString(\n html,\n 'text/html',\n );\n return messageDocument?.documentElement?.textContent ?? '';\n }\n\n return html;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { UnescapeHtmlPipe } from '../../shared/pipes/unescape-html/unescape-html.pipe';\nimport { XpsError } from '../payment/xps-error.interface';\nimport { XpsResponse } from '../payment/xps-response.interface';\nimport { fieldSpecialErrorsMap } from './field-special-errors-map.const';\n\n@Injectable({ providedIn: 'root' })\nexport class XpsResponseErrorsMappingService {\n public constructor(private readonly unescapeHtmlPipe: UnescapeHtmlPipe) {}\n\n public mapErrors(response: XpsResponse): XpsResponse {\n if (!response.errors?.length) {\n return response;\n }\n\n let mappedErrors = this.mapFieldSpecialErrors(response.errors);\n mappedErrors = this.unescapeErrorsText(mappedErrors);\n\n return {\n ...response,\n errors: mappedErrors,\n };\n }\n\n private mapFieldSpecialErrors(errors: XpsError[]): XpsError[] {\n return errors.map((error) => {\n if (!error.element_name) {\n const errorMap = fieldSpecialErrorsMap.find((map) =>\n map.errorCodes.has(error.code),\n );\n\n if (errorMap) {\n return {\n ...error,\n element_name: errorMap.fieldName,\n };\n }\n }\n\n return error;\n });\n }\n\n private unescapeErrorsText(errors: XpsError[]): XpsError[] {\n return errors.map((error) => {\n if (!error.message) {\n return error;\n }\n\n return {\n ...error,\n message: this.unescapeHtmlPipe.transform(error.message),\n };\n });\n }\n}\n","import { TaggedError } from './tagged-error.class';\nimport { ErrorTags } from './elk-error-types.enum';\n\nexport class EncryptCreditCardError extends TaggedError {\n public constructor(message: string, tags?: ErrorTags[]) {\n tags = tags ? [...tags, ErrorTags.ENCRYPT] : [ErrorTags.ENCRYPT];\n\n super(message, tags);\n }\n}\n","export const fourBlockMask = '9999 9999 9999 9999';\n","export enum CreditCardTypes {\n DEFAULT = '0',\n VISA = '1',\n MASTERCARD = '2',\n MAESTRO = '3',\n AMERICAN_EXPRESS = '4',\n DINERS_CLUBS = '5',\n DISCOVER = '6',\n JCB = '9',\n DANKORT = '11',\n HIPERCARD = '12',\n ELO = '13',\n AURA = '14',\n NARANJA = '15',\n MIR = '16',\n CHINA_UNION_PAY = '17',\n POSTEPAY = '18',\n}\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { fourBlockMask } from '../four-block-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const visa: CreditCardSettings = {\n id: CreditCardTypes.VISA,\n minLength: 13,\n maxLength: 16,\n iconName: 'visa',\n mask: fourBlockMask,\n checkNumber(number: string): boolean {\n return number.startsWith('4');\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { fourBlockMask } from '../four-block-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const mastercard: CreditCardSettings = {\n id: CreditCardTypes.MASTERCARD,\n minLength: 16,\n maxLength: 16,\n iconName: 'mastercard',\n mask: fourBlockMask,\n checkNumber(number: string): boolean {\n const subLength = 6;\n const cardNumberSub = number.substring(0, subLength);\n return (\n new RegExp(/^5[1-5]/).test(number) ||\n (cardNumberSub >= '222100' && cardNumberSub <= '272099')\n );\n },\n};\n","export const defaultMask = '9999 9999 9999 9999 999';\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { defaultMask } from '../default-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const maestro: CreditCardSettings = {\n id: CreditCardTypes.MAESTRO,\n minLength: 12,\n maxLength: 19,\n iconName: 'maestro',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n return new RegExp(\n /^(5018)|^(5020)|^(5038)|^(5893)|^(6304)|^(6759)|^(6761)|^(6762)|^(6763)|^(0604)|^(6706)|^(6771)|^(6709)/,\n ).test(number);\n },\n maxCvvLength: 3,\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const americanExpress: CreditCardSettings = {\n id: CreditCardTypes.AMERICAN_EXPRESS,\n minLength: 15,\n maxLength: 15,\n iconName: 'american-express',\n mask: '9999 999999 99999',\n checkNumber(number: string): boolean {\n return new RegExp(/^(34)|^(37)/).test(number);\n },\n maxCvvLength: 4,\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const dinersClubs: CreditCardSettings = {\n id: CreditCardTypes.DINERS_CLUBS,\n minLength: 14,\n maxLength: 14,\n iconName: 'dinersclub',\n mask: '9999 9999 9999 99',\n checkNumber(number: string): boolean {\n const regex = /^(36[0-9]|3(?:0[0-59]|[68][0-9])[0-9])/;\n return regex.test(number);\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\nimport { defaultMask } from '../default-mask.const';\n\nexport const discover: CreditCardSettings = {\n id: CreditCardTypes.DISCOVER,\n minLength: 16,\n maxLength: 19,\n iconName: 'discover',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n return new RegExp(\n /^(6011)|^(622(1(2[6-9]|[3-9][0-9])|[2-8][0-9]{2}|9([01][0-9]|2[0-5])))|^(64[4-9])|^65/,\n ).test(number);\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { fourBlockMask } from '../four-block-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const jcb: CreditCardSettings = {\n id: CreditCardTypes.JCB,\n minLength: 15,\n maxLength: 16,\n iconName: 'jcb',\n mask: fourBlockMask,\n checkNumber(number: string): boolean {\n return new RegExp(/^35(2[89]|[3-8][0-9])/).test(number);\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { fourBlockMask } from '../four-block-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const dankort: CreditCardSettings = {\n id: CreditCardTypes.DANKORT,\n minLength: 16,\n maxLength: 16,\n iconName: 'dankort',\n mask: fourBlockMask,\n checkNumber(number: string): boolean {\n const subLength = 4;\n const cardNumberSub = number.substring(0, subLength);\n return cardNumberSub === '5019';\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { defaultMask } from '../default-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const hipercard: CreditCardSettings = {\n id: CreditCardTypes.HIPERCARD,\n minLength: 13,\n maxLength: 19,\n iconName: 'hipercard',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n return new RegExp(/^((606282|637095|637568)[0-9]|38[0-9]{14,17})/).test(\n number,\n );\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\nimport { defaultMask } from '../default-mask.const';\n\nexport const elo: CreditCardSettings = {\n id: CreditCardTypes.ELO,\n minLength: 16,\n maxLength: 19,\n iconName: 'elo',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n return new RegExp(\n /^(40117[8-9]|431274|438935|451416|457393|45763[1-2]|506(699|7[0-6][0-9]|77[0-8])|509\\d{3}|504175|627780|636297|636368|65003[1-3]|6500(3[5-9]|4[0-9]|5[0-1])|6504(0[5-9]|[1-3][0-9])|650(4[8-9][0-9]|5[0-2][0-9]|53[0-8])|6505(4[1-9]|[5-8][0-9]|9[0-8])|6507(0[0-9]|1[0-8])|65072[0-7]|6509(0[1-9]|1[0-9]|20)|6516(5[2-9]|[6-7][0-9])|6550([0-1][0-9]|2[1-9]|[3-4][0-9]|5[0-8]))/,\n ).test(number);\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { defaultMask } from '../default-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const aura: CreditCardSettings = {\n id: CreditCardTypes.AURA,\n minLength: 16,\n maxLength: 19,\n iconName: 'aura',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n const subLength = 8;\n const cardNumberSub = number.substring(0, subLength);\n return ['50786000', '50786018', '50786019'].includes(cardNumberSub);\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { defaultMask } from '../default-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const naranja: CreditCardSettings = {\n id: CreditCardTypes.NARANJA,\n minLength: 12,\n maxLength: 19,\n iconName: 'naranja',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n const subLength = 6;\n const cardNumberSub = number.substring(0, subLength);\n return cardNumberSub === '589562';\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { defaultMask } from '../default-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const mir: CreditCardSettings = {\n id: CreditCardTypes.MIR,\n minLength: 16,\n maxLength: 16,\n iconName: 'mir',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n const subLength = 4;\n const cardNumberSub = number.substring(0, subLength);\n return cardNumberSub >= '2200' && cardNumberSub <= '2204';\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const chinaUnionPay: CreditCardSettings = {\n id: CreditCardTypes.CHINA_UNION_PAY,\n minLength: 16,\n maxLength: 19,\n iconName: 'unionpay',\n mask: '999 9999 9999 99999999',\n checkNumber(number: string): boolean {\n return number.startsWith('62');\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\nimport { defaultMask } from '../default-mask.const';\n\nexport const defaultCard: CreditCardSettings = {\n id: CreditCardTypes.DEFAULT,\n minLength: 12,\n maxLength: 19,\n iconName: null,\n mask: defaultMask,\n checkNumber(): boolean {\n return false;\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const postePay: CreditCardSettings = {\n id: CreditCardTypes.POSTEPAY,\n minLength: 12,\n maxLength: 19,\n iconName: 'poste_pay',\n mask: '9999 9999 9999 9999 999',\n checkNumber(number: string): boolean {\n const regex =\n /^(5018)|^(5020)|^(5038)|^(5893)|^(6304)|^(6759)|^(6761)|^(6762)|^(6763)|^(0604)|^(6706)|^(6771)|^(6709)/;\n return regex.test(number);\n },\n};\n","import { visa } from './types/visa';\nimport { mastercard } from './types/mastercard';\nimport { maestro } from './types/maestro';\nimport { americanExpress } from './types/american-express';\nimport { dinersClubs } from './types/diners-clubs';\nimport { discover } from './types/discover';\nimport { jcb } from './types/jcb';\nimport { dankort } from './types/dankort';\nimport { hipercard } from './types/hipercard';\nimport { elo } from './types/elo';\nimport { aura } from './types/aura';\nimport { naranja } from './types/naranja';\nimport { mir } from './types/mir';\nimport { chinaUnionPay } from './types/china-union-pay';\nimport { defaultCard } from './types/default-card';\nimport { CreditCardSettings } from './credit-card-settings.interface';\nimport { postePay } from './types/postepay';\n\n/**\n * order does matter\n * settings with more specific pattern should be placed above\n * Example:\n * - 12*\n * - 12\n * - 1\n * \"12*\" pattern should be checked first, otherwise pattern \"1\" will be taken\n * before \"12*\" checked\n */\nexport const orderedCardSettings: CreditCardSettings[] = [\n aura,\n naranja,\n maestro,\n postePay,\n elo,\n discover,\n dankort,\n hipercard,\n mir,\n jcb,\n dinersClubs,\n americanExpress,\n mastercard,\n chinaUnionPay,\n visa,\n defaultCard,\n];\n","import { CreditCardTypes } from './credit-card-types.enum';\nimport { visa } from './types/visa';\nimport { mastercard } from './types/mastercard';\nimport { maestro } from './types/maestro';\nimport { americanExpress } from './types/american-express';\nimport { dinersClubs } from './types/diners-clubs';\nimport { discover } from './types/discover';\nimport { jcb } from './types/jcb';\nimport { dankort } from './types/dankort';\nimport { hipercard } from './types/hipercard';\nimport { elo } from './types/elo';\nimport { aura } from './types/aura';\nimport { naranja } from './types/naranja';\nimport { mir } from './types/mir';\nimport { chinaUnionPay } from './types/china-union-pay';\nimport { defaultCard } from './types/default-card';\nimport { CreditCardSettings } from './credit-card-settings.interface';\nimport { postePay } from './types/postepay';\n\nexport const creditCardsMap: {\n [key in CreditCardTypes]: CreditCardSettings;\n} = {\n [CreditCardTypes.DEFAULT]: defaultCard,\n [CreditCardTypes.VISA]: visa,\n [CreditCardTypes.MASTERCARD]: mastercard,\n [CreditCardTypes.MAESTRO]: maestro,\n [CreditCardTypes.AMERICAN_EXPRESS]: americanExpress,\n [CreditCardTypes.DINERS_CLUBS]: dinersClubs,\n [CreditCardTypes.DISCOVER]: discover,\n [CreditCardTypes.JCB]: jcb,\n [CreditCardTypes.DANKORT]: dankort,\n [CreditCardTypes.HIPERCARD]: hipercard,\n [CreditCardTypes.ELO]: elo,\n [CreditCardTypes.AURA]: aura,\n [CreditCardTypes.NARANJA]: naranja,\n [CreditCardTypes.MIR]: mir,\n [CreditCardTypes.CHINA_UNION_PAY]: chinaUnionPay,\n [CreditCardTypes.POSTEPAY]: postePay,\n};\n","import { Injectable } from '@angular/core';\nimport { CreditCardTypes } from './credit-card-types.enum';\nimport { orderedCardSettings } from './ordered-cards-settings.const';\nimport { CreditCardSettings } from './credit-card-settings.interface';\nimport { creditCardsMap } from './credit-cards-map.const';\nimport { defaultCard } from './types/default-card';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CreditCardService {\n public getBinNumber(cardNumber: string): string {\n const binNumberLength = 6;\n return cardNumber.replace(/\\s+/g, '').substring(0, binNumberLength);\n }\n\n public getAccountSuffix(cardNumber: string): string {\n const accountSuffixLength = 4;\n return cardNumber\n .replace(/\\s+/g, '')\n .substring(cardNumber.length - accountSuffixLength);\n }\n\n public getTypeByNumber(cardNumber: string): CreditCardTypes {\n cardNumber = cardNumber.replace(/\\s+/g, '');\n\n const cardSettings = orderedCardSettings.find((settings) => {\n const isNumberMatched = settings.checkNumber(cardNumber);\n return isNumberMatched ? settings.id : false;\n });\n\n return cardSettings ? cardSettings.id : defaultCard.id;\n }\n\n public getCreditCardSettings(cardType: CreditCardTypes): CreditCardSettings {\n const creditCard = creditCardsMap[cardType];\n\n if (!creditCard) {\n return defaultCard;\n }\n\n return creditCard;\n }\n}\n","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport JSEncrypt from 'jsencrypt';\nimport { Injectable } from '@angular/core';\nimport { EncryptCreditCardError } from '../exceptions-handling/errors/encrypt-card-error';\nimport { XpsApiPartRequest } from '../payment/xps-api/xps-api-part-request.abstract';\nimport { CreditCardService } from '../credit-card/credit-card.service';\nimport { EncryptedCard } from './encrypted-card.interface';\nimport { OpenCard } from './open-card.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class EncryptCreditCardService {\n private readonly jsEncrypt!: JSEncrypt;\n\n private readonly secureFieldNames: Array<`xps_${string}`> = [\n 'xps_card_number',\n 'xps_cvv',\n 'xps_extra_cvv',\n 'xps_card_year',\n 'xps_card_month',\n ];\n\n public constructor(private readonly creditCardService: CreditCardService) {\n this.jsEncrypt = new JSEncrypt();\n }\n\n public setPublicKey(publicKey: string): void {\n this.jsEncrypt.setPublicKey(publicKey);\n }\n\n public encryptCreditCard<T extends XpsApiPartRequest>(\n request: XpsApiPartRequest,\n ): T {\n if (request.xps_card_number) {\n const openCard: OpenCard = this.createOpenCard(request);\n request.xps_open_card = JSON.stringify(openCard);\n }\n\n const encryptedCard: EncryptedCard = this.createEncryptedCard(request);\n\n if (request.xps_card_number || request.xps_extra_card_number) {\n request.xps_encrypted_card = this.encrypt(JSON.stringify(encryptedCard));\n }\n\n this.secureFieldNames.forEach((secureFieldName: `xps_${string}`) => {\n delete request[secureFieldName];\n });\n\n return request as T;\n }\n\n private encrypt(value: string): string {\n if (!this.jsEncrypt?.getPublicKey()) {\n throw new EncryptCreditCardError('Empty public key');\n }\n\n const encryptedValue = this.jsEncrypt.encrypt(value);\n\n if (!encryptedValue) {\n throw new EncryptCreditCardError(\n 'Encryption returns false instead of encrypted string',\n );\n }\n\n return encryptedValue;\n }\n\n private createEncryptedCard(request: XpsApiPartRequest): EncryptedCard {\n const encryptedCard: EncryptedCard = {\n card_number: request.xps_card_number as string,\n card_year: request.xps_card_year as string,\n card_month: request.xps_card_month as string,\n cvv: request.xps_cvv as string,\n };\n\n if (request.xps_extra_cvv) {\n encryptedCard.cvv = request.xps_extra_cvv as string;\n }\n\n return encryptedCard;\n }\n\n private createOpenCard(request: XpsApiPartRequest): OpenCard {\n return {\n card_bin: this.creditCardService.getBinNumber(\n request.xps_card_number as string,\n ),\n card_suffix: this.creditCardService.getAccountSuffix(\n request.xps_card_number as string,\n ),\n card_year: request.xps_card_year as string,\n card_month: request.xps_card_month as string,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PaymentConfiguration } from '../payment-configuration.interface';\nimport { PaymentSettingsRequestParams } from './payment-settings-request-params.interface';\nimport { XpsBoolean } from '../../xps-boolean.enum';\nimport { TransactionInitiationType } from '../../transaction-initiation-type.enum';\nimport { isCreditCardSettingsGuard } from '../payment-configurations/types/is-credit-card-settings.guard';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentSettingsService {\n public getPaymentSettingsParams(\n config: PaymentConfiguration | null,\n ): PaymentSettingsRequestParams {\n if (!config?.paymentMethodSettings) {\n return {};\n }\n\n const params: PaymentSettingsRequestParams = {};\n\n if (isCreditCardSettingsGuard(config)) {\n const settings = config.paymentMethodSettings;\n\n params.useSingleExpirationDateField = this.toXps(\n settings.useSingleExpirationDateField,\n );\n params.useExternalVault = this.toXps(settings.useExternalVault);\n\n const transactionType = this.resolveTransactionInitiationType(\n settings.transactionInitiationType,\n settings.isPaymentViaSavedMethod,\n settings.useExternalVault,\n );\n\n if (transactionType) {\n params.transactionInitiationType = transactionType;\n }\n }\n\n return params;\n }\n\n private toXps(value: boolean | undefined): XpsBoolean {\n return value ? XpsBoolean.true : XpsBoolean.false;\n }\n\n private resolveTransactionInitiationType(\n transactionInitiationType?: TransactionInitiationType,\n isPaymentViaSavedMethod?: boolean,\n useExternalVault?: boolean,\n ): TransactionInitiationType | undefined {\n if (!useExternalVault) {\n return undefined;\n }\n if (transactionInitiationType) {\n return transactionInitiationType;\n }\n\n return isPaymentViaSavedMethod\n ? TransactionInitiationType.COF\n : TransactionInitiationType.OT;\n }\n}\n","export function isNull(value: unknown): value is null {\n return value === null;\n}\n","export function isUndefined(value: unknown): value is undefined {\n return typeof value === 'undefined';\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ExtendedWindow } from '../extended-window.interface';\nimport { SettingsService } from '../settings/settings.service';\nimport { isNull } from '../type-guards/is-null.function';\nimport { isUndefined } from '../type-guards/is-undefined.function';\nimport { windowToken } from '../window.token';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SessionService {\n private cache: { [key: string]: unknown } = {};\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly settingsService: SettingsService,\n ) {}\n\n /**\n * @param {string} key must be uniq entire all app\n * @param {unknown} value can be anything\n */\n public set(key: string, value: unknown): void {\n this.cache[key] = value;\n\n try {\n this.window.sessionStorage.setItem(\n this.getStorageKey(key),\n JSON.stringify(value),\n );\n } catch (error: unknown) {\n console.warn('Session storage not available.');\n }\n }\n\n public get<T>(key: string): T | null {\n const cacheValue: unknown = this.cache[key];\n\n if (!isUndefined(cacheValue)) {\n return cacheValue as T;\n }\n\n try {\n const storageValue = this.window.sessionStorage.getItem(\n this.getStorageKey(key),\n );\n\n if (isNull(storageValue)) {\n return null;\n }\n\n return JSON.parse(storageValue) as T;\n } catch (error: unknown) {\n return null;\n }\n }\n\n private getStorageKey(key: string): string {\n return `${key}${this.settingsService.token}`;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { CountryService } from '../../../country/country.service';\nimport { ResponseError } from '../../../exceptions-handling/errors/response-error.class';\nimport { EncryptCreditCardService } from '../../../encrypt-credit-card/encrypt-credit-card.service';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { PaymentConfiguration } from '../../payment-configuration.interface';\nimport { NextActionService } from '../../actions/next-action.service';\nimport { ShowErrorsActionCreator } from '../../actions/show-errors/show-errors.action.class';\nimport { XpsApiService } from '../../xps-api/xps-api.service';\nimport { Field } from '../../field.interface';\nimport { PaymentForm } from '../../payment-form.interface';\nimport {\n InitializeResponseFactory,\n initializeResponseFactoryToken,\n} from './response/initialize-response.token';\nimport { InitializeResponse } from './response/initialize-response.class';\nimport { InitializeRequestParams } from './initialize-request-params.interface';\nimport { XpsResponseErrorsMappingService } from '../../../errors-mapping/xps-response-errors-mapping.service';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { PaymentSettingsService } from '../../payment-settings/payment-settings.service';\nimport { SessionService } from '../../../session/session.service';\nimport { HttpError } from '../../../exceptions-handling/errors/http-error.class';\nimport { ServerErrorActionCreator } from '../../actions/server-error/server-error.action.class';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InitializeService {\n public constructor(\n @Inject(initializeResponseFactoryToken)\n protected readonly responseFactory: InitializeResponseFactory,\n private readonly xpsApiService: XpsApiService,\n private readonly settingsService: SettingsService,\n private readonly countryService: CountryService,\n private readonly nextActionService: NextActionService,\n private readonly xpsResponseErrorsMappingService: XpsResponseErrorsMappingService,\n private readonly encryptCreditCardService: EncryptCreditCardService,\n private readonly showErrorsActionCreator: ShowErrorsActionCreator,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly paymentSettingsService: PaymentSettingsService,\n private readonly sessionService: SessionService,\n private readonly serverErrorActionCreator: ServerErrorActionCreator,\n ) {}\n\n public async request(\n config: PaymentConfiguration,\n ): Promise<InitializeResponse> {\n const paymentSettingsParams =\n this.paymentSettingsService.getPaymentSettingsParams(config);\n\n this.sessionService.set('cardNumberCountry', null);\n\n const requestParams: InitializeRequestParams = {\n access_token: this.settingsService.token,\n pid: String(config.paymentMethodId),\n country: this.countryService.getCountry(),\n returnUrl: config.returnUrl,\n paymentWithSavedMethod:\n config.paymentWithSavedMethod === true\n ? XpsBoolean.true\n : XpsBoolean.false,\n save_payment_account_only: config.savePaymentMethod\n ? XpsBoolean.true\n : XpsBoolean.false,\n ...paymentSettingsParams,\n };\n\n if (this.settingsService.isGooglePayInstantFlowEnabled !== null) {\n requestParams.google_pay_instant_flow = this.settingsService\n .isGooglePayInstantFlowEnabled\n ? XpsBoolean.true\n : XpsBoolean.false;\n }\n\n if (config.savedMethodId) {\n requestParams.saved_method_id = config.savedMethodId;\n }\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.initializeRequest,\n userBehaviourEventTypes.manual,\n { value: requestParams.pid },\n );\n\n return this.xpsApiService\n .directPaymentRequest(requestParams)\n .then((xpsResponse) => {\n const response =\n this.xpsResponseErrorsMappingService.mapErrors(xpsResponse);\n const initializeResponse = this.responseFactory(response);\n\n if (!initializeResponse.paymentForm) {\n return initializeResponse;\n }\n\n this.setCreditCardEncryptKey(initializeResponse.paymentForm);\n this.userBehaviourAnalyticsService.fillUserSession(\n initializeResponse.paymentForm,\n );\n\n if (initializeResponse.paymentForm?.errors?.length) {\n const logError = (error: { code: number; message: string }): void => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.showErrorMessage,\n userBehaviourEventTypes.manual,\n { value: String(error.code), extraValue: error.message },\n );\n };\n\n initializeResponse.paymentForm.errors.forEach(logError);\n\n this.nextActionService.emitFlowUpdates(\n this.showErrorsActionCreator.getActionData(\n initializeResponse.paymentForm.errors,\n ),\n );\n }\n\n return initializeResponse;\n })\n .catch((error: Error) => {\n if (error instanceof HttpError) {\n const httpErrorData = error.getHttpErrorData();\n this.nextActionService.emitFlowUpdates(\n this.serverErrorActionCreator.getActionData({\n status: httpErrorData.response.status,\n message: error.message,\n }),\n );\n }\n\n throw new ResponseError(error.message);\n });\n }\n\n private setCreditCardEncryptKey(paymentForm: PaymentForm): void {\n const publicKeyField: Field | undefined = paymentForm.fields.find(\n (field: Field) => field.name === 'public_key',\n );\n\n if (!publicKeyField) {\n return;\n }\n\n this.encryptCreditCardService.setPublicKey(atob(publicKeyField.value));\n }\n}\n","export abstract class XpsApiPartRequest {\n [fieldName: string]: unknown;\n\n protected addXpsParameters(parameters: { [key: string]: unknown }): void {\n for (const key in parameters) {\n this[`xps_${key}`] = parameters[key];\n }\n }\n\n protected addParameters(parameters: { [key: string]: unknown }): void {\n for (const key in parameters) {\n this[key] = parameters[key];\n }\n }\n}\n","import { AppError } from './app-error.class';\n\nexport class TokenError extends AppError {\n public constructor() {\n super('XPS API needs token.');\n }\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { AbstractControl, UntypedFormGroup } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { XpsApiPartRequest } from '../../../xps-api/xps-api-part-request.abstract';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\nimport { FieldNames } from '../../../field-names.enum';\n\nexport class SubmitRequest extends XpsApiPartRequest {\n public readonly access_token: string;\n public readonly xps_dfp_hash?: string;\n\n public constructor(parameters: {\n token: string | null;\n fields: Field[];\n form: UntypedFormGroup;\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n dfpHash: string | null;\n [key: string]: unknown;\n }) {\n super();\n\n const { token, fields, form, dfpHash, ...restParameters } = parameters;\n\n if (token === null) {\n throw new TokenError();\n }\n\n this.addParameters(restParameters);\n\n this.access_token = token;\n\n if (dfpHash) {\n this.xps_dfp_hash = dfpHash;\n }\n\n this.addXpsParameters(this.getFieldsValues(fields, form));\n }\n\n private getFieldsValues(\n fields: Field[],\n form: UntypedFormGroup,\n ): { [key: string]: unknown } {\n const fieldValues = fields.reduce(\n (xpsParams: { [key: string]: string }, field: Field) => {\n const formControl: AbstractControl | null = form.get(field.name);\n\n xpsParams[field.name] = formControl ? formControl.value : field?.value;\n\n return xpsParams;\n },\n {},\n );\n\n return this.splitCreditCardExpiration(fieldValues);\n }\n\n private splitCreditCardExpiration(fieldsValues: { [key: string]: unknown }): {\n [key: string]: unknown;\n } {\n const creditCardExpiration: string = fieldsValues[\n FieldNames.cardExpire\n ] as string;\n\n if (creditCardExpiration) {\n const [month, year] = creditCardExpiration.split('/');\n fieldsValues['card_month'] = month;\n fieldsValues['card_year'] = year;\n }\n\n return fieldsValues;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SubmitRequest } from './submit-request.class';\n\nexport type SubmitRequestParameters = ConstructorParameters<\n typeof SubmitRequest\n>;\n\nexport type SubmitRequestFactory = (\n ...args: SubmitRequestParameters\n) => SubmitRequest;\n\nexport const submitRequestFactoryToken: InjectionToken<SubmitRequestFactory> =\n new InjectionToken<SubmitRequestFactory>('SubmitRequest');\n\nexport const submitRequestFactoryProvider: ValueProvider = {\n provide: submitRequestFactoryToken,\n useValue: (...args: SubmitRequestParameters) => new SubmitRequest(...args),\n};\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SubmitResponse } from './submit-response.class';\n\nexport type SubmitResponseParameters = ConstructorParameters<\n typeof SubmitResponse\n>;\n\nexport type SubmitResponseFactory = (\n ...args: SubmitResponseParameters\n) => SubmitResponse;\n\nexport const submitResponseFactoryToken: InjectionToken<SubmitResponseFactory> =\n new InjectionToken<SubmitResponseFactory>('SubmitResponse');\n\nexport const submitResponseFactoryProvider: ValueProvider = {\n provide: submitResponseFactoryToken,\n useValue: (...args: SubmitResponseParameters) => new SubmitResponse(...args),\n};\n","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport type XsollaAntifraudFingerprint from '@xsolla/antifraud-fingerprint';\nimport { Injectable } from '@angular/core';\nimport { SettingsService } from '../settings/settings.service';\nimport { Hash } from './hash.type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DeviceFingerPrintService {\n private hash!: Promise<string>;\n private antifraudFingerprintLibrary!: Promise<\n typeof XsollaAntifraudFingerprint\n >;\n\n public constructor(private readonly settingsService: SettingsService) {}\n\n public init(): void {\n if (!this.settingsService.isInitialized) {\n return;\n }\n this.antifraudFingerprintLibrary = this.loadAntifraudFingerprintLibrary();\n this.hash = this.buildHash();\n }\n\n public async getHash(): Promise<string> {\n return this.hash;\n }\n\n private async loadAntifraudFingerprintLibrary(): Promise<\n typeof XsollaAntifraudFingerprint\n > {\n const library = await import('@xsolla/antifraud-fingerprint');\n\n return library.AntifraudFingerprint as typeof XsollaAntifraudFingerprint;\n }\n\n private async buildHash(): Promise<string> {\n const hash: Hash = await this.generate();\n return JSON.stringify(hash);\n }\n\n private async generate(): Promise<Hash | null> {\n const fingerprint = await this.makeAntifraudFingerprint();\n if (!fingerprint) {\n return null;\n }\n\n await fingerprint.dispatch().catch((err) => console.log(err));\n\n const afsHash = await fingerprint.hash();\n\n return { '301': afsHash };\n }\n\n private async makeAntifraudFingerprint(): Promise<XsollaAntifraudFingerprint | null> {\n if (!this.settingsService.token) {\n return null;\n }\n\n const antifraudFingerprint: typeof XsollaAntifraudFingerprint =\n await this.antifraudFingerprintLibrary;\n\n try {\n return new antifraudFingerprint({\n api: {\n url: 'https://afs.xsolla.com/dfp/api/v1/',\n token: this.settingsService.token,\n timeout: 3000,\n },\n retry: {\n num: 1,\n timeout: 500,\n },\n });\n } catch (error: unknown) {\n return null;\n }\n }\n}\n","import { Field } from '../../field.interface';\nimport { Inject, Injectable } from '@angular/core';\nimport {\n SubmitRequestFactory,\n submitRequestFactoryToken,\n} from './request/submit-request.token';\nimport {\n SubmitResponseFactory,\n submitResponseFactoryToken,\n} from './response/submit-response.token';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { SubmitResponse } from './response/submit-response.class';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { DeviceFingerPrintService } from '../../../device-finger-print/device-finger-print.service';\nimport { ResponseError } from '../../../exceptions-handling/errors/response-error.class';\nimport { XpsResponse } from '../../xps-response.interface';\nimport { XpsApiService } from '../../xps-api/xps-api.service';\nimport { EncryptCreditCardService } from '../../../encrypt-credit-card/encrypt-credit-card.service';\nimport { SubmitRequest } from './request/submit-request.class';\nimport { XpsResponseErrorsMappingService } from '../../../errors-mapping/xps-response-errors-mapping.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { PaymentConfiguration } from '../../payment-configuration.interface';\nimport { PaymentSettingsService } from '../../payment-settings/payment-settings.service';\nimport { NextActionService } from '../../actions/next-action.service';\nimport { ServerErrorActionCreator } from '../../actions/server-error/server-error.action.class';\nimport { HttpError } from '../../../exceptions-handling/errors/http-error.class';\n\n@Injectable({ providedIn: 'root' })\nexport class SubmitService {\n public constructor(\n @Inject(submitRequestFactoryToken)\n private readonly requestFactory: SubmitRequestFactory,\n @Inject(submitResponseFactoryToken)\n private readonly responseFactory: SubmitResponseFactory,\n private readonly settingsService: SettingsService,\n private readonly deviceFingerPrintService: DeviceFingerPrintService,\n private readonly xpsApiService: XpsApiService,\n private readonly xpsResponseErrorsMappingService: XpsResponseErrorsMappingService,\n private readonly encryptCreditCardService: EncryptCreditCardService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly paymentSettingsService: PaymentSettingsService,\n private readonly nextActionService: NextActionService,\n private readonly serverErrorActionCreator: ServerErrorActionCreator,\n ) {}\n\n // NB: Never add 'async' statement for this method!\n // 'Async' statement wraps current promise into another.\n // In this way two promises become unequal, that can broke XPS API requests logic.\n\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n public request(\n fields: Field[],\n form: UntypedFormGroup,\n config: PaymentConfiguration,\n ): Promise<SubmitResponse> {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.submitRequest,\n userBehaviourEventTypes.manual,\n { value: config.paymentMethodId },\n );\n\n return (\n this.deviceFingerPrintService\n .getHash()\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n .then((dfpHash) => {\n const paymentSettingsParams =\n this.paymentSettingsService.getPaymentSettingsParams(config);\n\n const requestParams = this.requestFactory({\n token: this.settingsService.token,\n fields,\n form,\n dfpHash,\n ...paymentSettingsParams,\n });\n\n const encryptedRequest =\n this.encryptCreditCardService.encryptCreditCard<SubmitRequest>(\n requestParams,\n );\n\n return this.xpsApiService\n .directPaymentRequest(encryptedRequest)\n .then((xpsResponse: XpsResponse) => {\n const response =\n this.xpsResponseErrorsMappingService.mapErrors(xpsResponse);\n\n this.fillUserSession(xpsResponse);\n\n if (response.errors) {\n const logError = (error: {\n code: number;\n message: string;\n }): void => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.showErrorMessage,\n userBehaviourEventTypes.manual,\n { value: String(error.code), extraValue: error.message },\n );\n };\n\n response.errors.forEach(logError);\n }\n\n return this.responseFactory(response);\n })\n .catch((error: Error) => {\n if (error instanceof HttpError) {\n const httpErrorData = error.getHttpErrorData();\n this.nextActionService.emitFlowUpdates(\n this.serverErrorActionCreator.getActionData({\n status: httpErrorData.response.status,\n message: error.message,\n }),\n );\n }\n throw new ResponseError(error.message);\n });\n })\n );\n }\n\n private fillUserSession(xpsResponse: XpsResponse): void {\n this.userBehaviourAnalyticsService.fillUserSession({\n ...xpsResponse,\n fields: Object.keys(xpsResponse.form).map(\n (key: string): Field => (xpsResponse as XpsResponse).form[key],\n ),\n });\n }\n}\n","import { Observable, Subject } from 'rxjs';\n\nexport abstract class EmitDataService<Data> {\n public data$: Observable<Data>;\n\n private readonly dataSubject = new Subject<Data>();\n\n public constructor() {\n this.data$ = this.dataSubject.asObservable();\n }\n\n public emit(data: Data): void {\n this.dataSubject.next(data);\n }\n}\n","import { UntypedFormGroup } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { XpsApiPartRequest } from '../../../xps-api/xps-api-part-request.abstract';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport class SyncRequest extends XpsApiPartRequest {\n public readonly access_token: string;\n public readonly xps_fix_command = 'calculate';\n\n public constructor({\n token,\n changedField,\n fields,\n form,\n ...parameters\n }: {\n token: string;\n changedField: Field;\n fields: Field[];\n form: UntypedFormGroup;\n [key: string]: unknown;\n }) {\n super();\n\n this.access_token = token;\n\n const fieldsValues = this.getFieldsValues(changedField, fields, form);\n\n this.addParameters(parameters);\n\n this.addXpsParameters({\n ...fieldsValues,\n change_element: changedField.name,\n fix_command:\n changedField.javascript?.change?.staticParams?.fix_command ??\n this.xps_fix_command,\n });\n }\n\n private getFieldsValues(\n changedField: Field,\n fields: Field[],\n form: UntypedFormGroup,\n ): { [key: string]: unknown } | undefined {\n const fieldsMap = this.getFieldsMap(fields);\n return changedField?.javascript?.change.params.reduce(\n (xpsParams: { [key: string]: string }, fieldName: string) => {\n const formControl = form.get(fieldName);\n const field: Field | undefined = fieldsMap.get(fieldName);\n\n if (formControl || field) {\n xpsParams[fieldName] = formControl?.value ?? field?.value;\n }\n\n return xpsParams;\n },\n {},\n );\n }\n\n private getFieldsMap(fields: Field[]): Map<string, Field> {\n const map = new Map<string, Field>();\n fields.forEach((field) => map.set(field.name, field));\n return map;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SyncRequest } from './sync-request.class';\n\nexport type SyncRequestParameters = ConstructorParameters<typeof SyncRequest>;\n\nexport type SyncRequestFactory = (\n ...args: SyncRequestParameters\n) => SyncRequest;\n\nexport const syncRequestFactoryToken: InjectionToken<SyncRequestFactory> =\n new InjectionToken<SyncRequestFactory>('SyncRequest');\n\nexport const syncRequestFactoryProvider: ValueProvider = {\n provide: syncRequestFactoryToken,\n useValue: (...args: SyncRequestParameters) => new SyncRequest(...args),\n};\n","import { ValidationErrors } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { XpsResponse } from '../../../xps-response.interface';\n\nexport class SyncResponse {\n public readonly error: ValidationErrors | null = null;\n public readonly fields: Field[];\n public readonly parameters: XpsResponse;\n\n public constructor(changedField: Field, response: XpsResponse) {\n const fieldError = response?.errors?.find(\n (error) => error.element_name === changedField.name,\n );\n\n if (fieldError) {\n this.error = {\n asyncError: {\n code: fieldError.code,\n message: fieldError.message,\n },\n };\n }\n\n this.fields = Object.keys(response.form).map(\n (key: string): Field => response.form[key],\n );\n\n this.parameters = response;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SyncResponse } from './sync-response.class';\n\nexport type SyncResponseParameters = ConstructorParameters<typeof SyncResponse>;\n\nexport type SyncResponseFactory = (\n ...args: SyncResponseParameters\n) => SyncResponse;\n\nexport const syncResponseFactoryToken: InjectionToken<SyncResponseFactory> =\n new InjectionToken<SyncResponseFactory>('SyncResponse');\n\nexport const syncResponseFactoryProvider: ValueProvider = {\n provide: syncResponseFactoryToken,\n useValue: (...args: SyncResponseParameters) => new SyncResponse(...args),\n};\n","import { Inject, Injectable } from '@angular/core';\nimport {\n AbstractControl,\n UntypedFormGroup,\n ValidationErrors,\n} from '@angular/forms';\nimport { Observable, Subject } from 'rxjs';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { EmitDataService } from '../../emit-data.service.abstract';\nimport { Field } from '../../field.interface';\nimport { XpsResponse } from '../../xps-response.interface';\nimport { FieldSyncState } from './field-sync-state.interface';\nimport {\n SyncRequestFactory,\n syncRequestFactoryToken,\n} from './request/sync-request.token';\nimport { SyncResponse } from './response/sync-response.class';\nimport {\n SyncResponseFactory,\n syncResponseFactoryToken,\n} from './response/sync-response.token';\nimport { NextActionService } from '../../actions/next-action.service';\nimport { ShowErrorsActionCreator } from '../../actions/show-errors/show-errors.action.class';\nimport { XpsApiService } from '../../xps-api/xps-api.service';\nimport { FieldAsyncValidation } from './field-async-validation.interface';\nimport { EncryptCreditCardService } from '../../../encrypt-credit-card/encrypt-credit-card.service';\nimport { SyncRequest } from './request/sync-request.class';\nimport { XpsResponseErrorsMappingService } from '../../../errors-mapping/xps-response-errors-mapping.service';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { PaymentConfiguration } from '../../payment-configuration.interface';\nimport { PaymentSettingsService } from '../../payment-settings/payment-settings.service';\nimport { SessionService } from '../../../session/session.service';\nimport { HttpError } from '../../../exceptions-handling/errors/http-error.class';\nimport { ServerErrorActionCreator } from '../../actions/server-error/server-error.action.class';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SyncService extends EmitDataService<XpsResponse> {\n private prevFieldSyncStates: { [fieldName: string]: FieldSyncState } = {};\n private form: UntypedFormGroup = new UntypedFormGroup({});\n private paymentConfiguration: PaymentConfiguration | null = null;\n private fields: Field[] = [];\n private fieldSyncTimers: { [fieldName: string]: number } = {};\n private readonly fieldAsyncValidation = new Subject<FieldAsyncValidation>();\n\n public constructor(\n @Inject(syncRequestFactoryToken)\n private readonly requestFactory: SyncRequestFactory,\n @Inject(syncResponseFactoryToken)\n private readonly responseFactory: SyncResponseFactory,\n private readonly xpsApiService: XpsApiService,\n private readonly nextActionService: NextActionService,\n private readonly settingsService: SettingsService,\n private readonly xpsResponseErrorsMappingService: XpsResponseErrorsMappingService,\n private readonly encryptCreditCardService: EncryptCreditCardService,\n private readonly showErrorsActionCreator: ShowErrorsActionCreator,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly paymentSettingsService: PaymentSettingsService,\n private readonly sessionService: SessionService,\n private readonly serverErrorActionCreator: ServerErrorActionCreator,\n ) {\n super();\n }\n\n public get fieldAsyncValidation$(): Observable<FieldAsyncValidation> {\n return this.fieldAsyncValidation.asObservable();\n }\n\n public setup(\n form: UntypedFormGroup,\n fields: Field[],\n config: PaymentConfiguration,\n ): void {\n this.reset();\n\n this.form = form;\n this.fields = fields;\n this.paymentConfiguration = config;\n }\n\n public reset(): void {\n this.prevFieldSyncStates = {};\n this.form = new UntypedFormGroup({});\n this.fields = [];\n this.paymentConfiguration = null;\n }\n\n public async validate(\n field: Field,\n delay = Number('750'),\n ): Promise<ValidationErrors | null> {\n if (!this.isReadyField(field)) {\n return Promise.resolve(null);\n }\n\n const control = this.form.get(field.name);\n const value = control?.value;\n const prevFieldState = this.getPrevFieldSyncState(field);\n\n const isInitialValue = value === field.value && !prevFieldState;\n\n if (isInitialValue) {\n return Promise.resolve(null);\n }\n\n if (prevFieldState && value === prevFieldState.value) {\n return Promise.resolve(prevFieldState.result).then((response) => {\n return response?.error ?? null;\n });\n }\n\n const updateFieldState = async (): Promise<\n string | ValidationErrors | null\n > => {\n const requestPromise = this.request(field);\n\n this.setPrevFieldSyncState(field, value, requestPromise);\n\n return requestPromise.then((response: SyncResponse) => {\n this.fieldAsyncValidation.next({\n value,\n field,\n response,\n });\n\n return response.error ?? null;\n });\n };\n\n return new Promise((resolve) => {\n if (delay) {\n const timerId = setTimeout(() => {\n if (value !== control?.value) {\n return resolve(null);\n }\n\n void updateFieldState().then(\n (errors: ValidationErrors | null | string) =>\n resolve(errors as ValidationErrors),\n );\n }, delay);\n\n this.resetFieldSyncTimer(field, Number(timerId));\n } else {\n void updateFieldState().then(\n (errors: ValidationErrors | null | string) =>\n resolve(errors as ValidationErrors),\n );\n }\n });\n }\n\n public async forceValidate(field: Field): Promise<SyncResponse | null> {\n const control: AbstractControl | null = this.form.get(field.name);\n const value = control?.value;\n\n const isHaveField = this.fields.some(\n (savedFields) => savedFields.name === field.name,\n );\n\n if (!isHaveField) {\n this.fields.push(field);\n }\n\n return this.request(field).then((syncResponse) => {\n this.setPrevFieldSyncState(field, value, Promise.resolve(syncResponse));\n this.fieldAsyncValidation.next({\n value,\n field,\n response: syncResponse,\n });\n\n return syncResponse;\n });\n }\n\n public removeField(fieldName: string): void {\n this.fields = this.fields.filter((field) => field.name !== fieldName);\n }\n\n public getSyncValidationErrors(field: Field): ValidationErrors | null {\n const control = this.form.get(field.name);\n return control?.errors ?? null;\n }\n\n public async request(\n field: Field,\n fields?: Field[],\n form?: UntypedFormGroup,\n ): Promise<SyncResponse> {\n const paymentSettingsParams =\n this.paymentSettingsService.getPaymentSettingsParams(\n this.paymentConfiguration,\n );\n\n const paramsForRequestFactory: {\n token: string;\n changedField: Field;\n fields: Field[];\n form: UntypedFormGroup;\n [key: string]: unknown;\n } = {\n token: this.settingsService.token,\n changedField: field,\n fields: fields ?? this.fields,\n form: form ?? this.form,\n ...paymentSettingsParams,\n };\n\n if (this.settingsService.isGooglePayInstantFlowEnabled !== null) {\n paramsForRequestFactory.google_pay_instant_flow = this.settingsService\n .isGooglePayInstantFlowEnabled\n ? XpsBoolean.true\n : XpsBoolean.false;\n }\n\n const requestParams = this.requestFactory(paramsForRequestFactory);\n\n const encryptedRequest =\n this.encryptCreditCardService.encryptCreditCard<SyncRequest>(\n requestParams,\n );\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.syncRequest,\n userBehaviourEventTypes.manual,\n { extraValue: field?.name ?? '' },\n );\n\n return this.xpsApiService\n .directPaymentRequest(encryptedRequest)\n .then((xpsResponse: XpsResponse) => {\n const response =\n this.xpsResponseErrorsMappingService.mapErrors(xpsResponse);\n\n this.sessionService.set('cardNumberCountry', response.cardBinCountry);\n\n this.emitFormErrors(response);\n this.emit(response);\n return this.responseFactory(field, response);\n })\n .catch((error: Error) => {\n if (error instanceof HttpError) {\n const httpErrorData = error.getHttpErrorData();\n this.nextActionService.emitFlowUpdates(\n this.serverErrorActionCreator.getActionData({\n status: httpErrorData.response.status,\n message: error.message,\n }),\n );\n }\n throw error;\n });\n }\n\n private isReadyField(field: Field): boolean {\n const isSyncEnabled = !!field.javascript?.change;\n const isExistsInForm = !!this.form?.get(field.name);\n\n return isSyncEnabled && isExistsInForm;\n }\n\n private getPrevFieldSyncState(field: Field): FieldSyncState {\n return this.prevFieldSyncStates[field.name];\n }\n\n private setPrevFieldSyncState(\n field: Field,\n value: unknown,\n result: Promise<SyncResponse>,\n ): void {\n this.prevFieldSyncStates[field.name] = { value, result };\n }\n\n private emitFormErrors(response: XpsResponse): void {\n if (response.errors) {\n const logError = (error: { code: number; message: string }): void => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.showErrorMessage,\n userBehaviourEventTypes.manual,\n { value: String(error.code), extraValue: error.message },\n );\n };\n\n response.errors.forEach(logError);\n }\n\n const formErrors = response.errors?.filter((error) => !error.element_name);\n\n if (formErrors?.length) {\n this.nextActionService.emitFlowUpdates(\n this.showErrorsActionCreator.getActionData(formErrors),\n );\n }\n }\n\n private resetFieldSyncTimer(field: Field, timerId: number): void {\n const prevTimerId: number = this.fieldSyncTimers[field.name];\n\n if (prevTimerId) {\n clearTimeout(prevTimerId);\n }\n\n this.fieldSyncTimers[field.name] = timerId;\n }\n}\n","export function isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { isObject } from '../../../type-guards/is-object.function';\nimport { ValidationError as ConvertedValidationError } from './validation-error.interface';\nimport { ValidationErrors as ConvertedValidationErrors } from './validation-errors.interface';\nimport { ValidatorFn as ConvertedValidatorFn } from './validator-fn.type';\nimport { ValidationErrorParams } from './validation-error-params.interface';\n\nexport function convert(\n validator: ValidatorFn,\n message: string,\n params?: ValidationErrorParams,\n): ConvertedValidatorFn {\n return (control: AbstractControl): ConvertedValidationErrors | null => {\n const errors: ValidationErrors | null = validator(control);\n if (!errors) return null;\n\n const firstErrorKey: string = Object.keys(errors)[0];\n const firstError: ConvertedValidationError = errors[firstErrorKey];\n const error = isObject(firstError) ? firstError : {};\n\n error.message = message;\n error.params = params;\n\n errors[firstErrorKey] = error;\n\n return errors as ConvertedValidationErrors;\n };\n}\n","import { Validators } from '@angular/forms';\nimport { convert } from '../convert.function';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nconst emailRegexp =\n /^[^\\s@]+@([a-zA-Z0-9\\u0080-\\uFFFF-]+\\.)+[a-zA-Z0-9\\u0080-\\uFFFF-]{2,}$/iu;\n\nexport function convertedEmailValidator(): ValidatorFn {\n const message = TranslateHelper.t(\n 'errors.validation.email-pattern',\n 'Enter a valid email',\n );\n\n return convert(Validators.pattern(emailRegexp), message);\n}\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { convert } from '../convert.function';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport function convertedRequiredValidator(): ValidatorFn {\n return convert(\n Validators.required,\n TranslateHelper.t('errors.validation.required', 'Required'),\n );\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\nimport { Field } from '../../field.interface';\nimport { SyncService } from '../../requests/sync/sync.service';\nimport { CommonControlConfig } from '../common-control-config.interface';\nimport { ControlConfig } from '../controls/control-config';\nimport { FormState } from '../form-state.interface';\nimport { convert } from '../validators/convert.function';\nimport { convertedRequiredValidator } from '../validators/required/required.validator';\nimport { ValidatorFn } from '../validators/validator-fn.type';\nimport { AsyncValidatorFn } from '../validators/async-validator-fn.type';\n\nexport abstract class Converter {\n protected constructor(protected syncService: SyncService) {}\n\n public convertToConfig(field: Field, formState?: FormState): ControlConfig {\n const config = this.createControlConfig(field, formState);\n\n if (formState?.disabled) {\n config.disabled = true;\n }\n\n if (field.value) {\n config.initialValue = field.value;\n }\n\n return config;\n }\n\n public convertToFormControl(field: Field): UntypedFormControl {\n return new UntypedFormControl(\n this.getValue(field),\n this.getValidators(field),\n this.getAsyncValidators(field),\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getValidators(field: Field, formState?: FormState): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n\n if (field.isMandatory === XpsBoolean.true) {\n validators.push(convertedRequiredValidator());\n }\n\n if (field.regex) {\n const match = /^\\/(.*)\\/([gim]*)$/.exec(field.regex);\n\n if (match) {\n const pattern = new RegExp(match[1], match[2]);\n const errorMessage = field.validation_error_msg\n ? field.validation_error_msg\n : 'Enter valid data';\n validators.push(\n convert(Validators.pattern(pattern), errorMessage, {\n defaultMessage: field.validation_error_msg,\n }),\n );\n }\n }\n\n return validators;\n }\n\n public getAsyncValidators(\n field: Field,\n ): AsyncValidatorFn | AsyncValidatorFn[] | null {\n return async () => this.syncService.validate(field);\n }\n\n public createDefaultControlConfig<T extends { [key: string]: unknown }>(\n controlConfigClass: new () => T,\n field: Field,\n ): T {\n const config = new controlConfigClass();\n\n this.copyCommonOptions(config, field);\n\n return config;\n }\n\n public getValue(field: Field): string {\n return field.value;\n }\n\n protected abstract createControlConfig(\n field: Field,\n formState?: FormState,\n ): ControlConfig;\n\n protected getDataType(): string {\n return 'text';\n }\n\n protected getAutocomplete(): string {\n return 'off';\n }\n\n protected shouldHideUserInput(): boolean {\n return false;\n }\n\n private getCommonControlConfig(field: Field): CommonControlConfig {\n return {\n name: field.name,\n title: field.title,\n labelHint: field.label_hint,\n dataType: this.getDataType(),\n readonly: field.isReadonly === XpsBoolean.true,\n placeholder: field.example,\n autocomplete: this.getAutocomplete(),\n };\n }\n\n private copyCommonOptions<Target extends { [key: string]: unknown }>(\n target: Target,\n field: Field,\n ): void {\n const commonControlConfig = this.getCommonControlConfig(field);\n\n Object.keys(commonControlConfig).forEach((sourceKey: string) => {\n if (!(sourceKey in target)) {\n (target as { [key: string]: unknown })[sourceKey] = (\n commonControlConfig as unknown as { [key: string]: unknown }\n )[sourceKey];\n }\n });\n }\n}\n","import { SafeHtml } from '@angular/platform-browser';\nimport { ControlType } from './control-type.type';\n\nexport class ControlConfig {\n [option: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n public controlType!: ControlType | string;\n public name!: string;\n public title?: string | null | SafeHtml;\n public shouldHideUserInput?: boolean | null = false;\n}\n","import { SafeHtml } from '@angular/platform-browser';\nimport { ControlConfig } from '../../controls/control-config';\n\nexport class EmailControlConfig extends ControlConfig {\n public controlType = 'email';\n public dataType = 'email';\n public maxLength?: number;\n public placeholder?: string | SafeHtml | null;\n public autocomplete?: string;\n public icon = 'mail';\n public description?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { convertedEmailValidator } from '../../validators/email/email-validator';\nimport { ValidatorFn } from '../../validators/validator-fn.type';\nimport { Converter } from '../converter.abstract';\nimport { EmailControlConfig } from './email-control.config';\n\n@Injectable()\nexport class EmailConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super.getValidators(field).concat([convertedEmailValidator()]);\n }\n\n protected createControlConfig(field: Field): EmailControlConfig {\n const config = this.createDefaultControlConfig(EmailControlConfig, field);\n\n config.autocomplete = 'email';\n config.icon = 'mail';\n\n return config;\n }\n\n protected getDataType(): string {\n return 'email';\n }\n}\n","import { ControlConfig } from './control-config';\n\nexport class TextControlConfig extends ControlConfig {\n public controlType = 'text';\n public dataType?: string;\n public maxLength?: number;\n public placeholder?: string;\n public autocomplete?: string;\n public icon?: string;\n public description?: string;\n public inputMode?: string;\n}\n","import { AbstractControl } from '@angular/forms';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport const restrictedValueValidator = (\n restrictedValue: unknown,\n): ValidatorFn => {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n return value !== restrictedValue\n ? null\n : {\n valueAllowed: {\n message: TranslateHelper.t(\n 'errors.validation.restrictedValue',\n 'This value is not allowed',\n ),\n params: { restrictedValue },\n },\n };\n };\n};\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { CountryService } from '../../../../country/country.service';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { convert } from '../../validators/convert.function';\nimport { restrictedValueValidator } from '../../validators/restricted-value/restricted-value.validator';\nimport { Converter } from '../converter.abstract';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\nimport { SessionService } from '../../../../session/session.service';\n\n@Injectable()\nexport class ZipConverter extends Converter {\n private readonly minLength = 3;\n private readonly maxLength = 10;\n private readonly usCountryLength = 5;\n\n public constructor(\n syncService: SyncService,\n private readonly countryService: CountryService,\n private readonly sessionService: SessionService,\n ) {\n super(syncService);\n }\n\n private get isUsCountry(): boolean {\n const currentCountry = this.countryService.getCountry().toUpperCase();\n const cardNumberCountry = this.sessionService.get('cardNumberCountry');\n\n return (cardNumberCountry ?? currentCountry) === 'US';\n }\n\n private get isCanadaCountry(): boolean {\n const currentCountry = this.countryService.getCountry().toUpperCase();\n const cardNumberCountry = this.sessionService.get('cardNumberCountry');\n\n return (cardNumberCountry ?? currentCountry) === 'CA';\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n const minLength = this.isUsCountry ? this.usCountryLength : this.minLength;\n const maxLength = this.isUsCountry ? this.usCountryLength : this.maxLength;\n const validators: ValidatorFn[] = super\n .getValidators(field)\n .concat([\n convert(\n Validators.minLength(minLength),\n TranslateHelper.t(\n 'errors.validation.min-length',\n `Enter at least ${minLength} characters`,\n { minLength },\n ),\n ),\n\n convert(\n Validators.maxLength(maxLength),\n TranslateHelper.t(\n 'errors.validation.max-length',\n `Enter no more than ${maxLength} characters`,\n { maxLength },\n ),\n ),\n ]);\n\n if (this.isUsCountry) {\n validators.push(\n convert(\n restrictedValueValidator('00000'),\n TranslateHelper.t(\n 'errors.validation.zip-pattern',\n 'Enter a valid ZIP code',\n ),\n ),\n );\n }\n\n if (this.isCanadaCountry) {\n validators.push(\n convert(\n Validators.pattern(/^[A-Za-z0-9]{3}\\s?[A-Za-z0-9]{0,3}$/),\n TranslateHelper.t(\n 'errors.validation.zip-pattern-non-us',\n 'Enter a valid postal code',\n ),\n ),\n );\n }\n\n return validators;\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n config.icon = 'location';\n config.placeholder = TranslateHelper.t(\n 'zip.converter.placeholder',\n 'ZIP code',\n );\n\n if (this.isUsCountry) {\n config.maskConfig = {\n mask: new Array(this.usCountryLength).fill('9').join(''),\n guide: false,\n unmaskModelValue: true,\n showMask: true,\n };\n config.placeholder = TranslateHelper.t(\n 'zip.converter.placeholder',\n 'ZIP code',\n );\n config.inputMode = 'numeric';\n } else {\n config.maxLength = this.maxLength;\n config.placeholder = TranslateHelper.t(\n 'zip.converter.placeholder-non-us',\n 'Postal code',\n );\n }\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'postal-code';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","export function isEmptyInputValue(value: string | null | undefined): boolean {\n return value == null || value.length === 0;\n}\n","export function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n","import { isEmptyInputValue } from '../is-empty-input-value.function';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { isString } from '../../../../type-guards/is-string.function';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n/**\n * Checks number match Luhn algorithm.\n * Based on http://en.wikipedia.org/wiki/Luhn.\n */\nexport const luhnFormulaValidator: ValidatorFn = ({ value }) => {\n if (isEmptyInputValue(value) || !isString(value)) {\n return null;\n }\n\n const error: ValidationErrors = {\n rewritableError: {\n message: TranslateHelper.t(\n 'errors.validation.cardNumber',\n 'Enter a valid card number',\n ),\n },\n };\n\n if (/[^0-9 -]+/.test(value)) {\n // accept only spaces, digits and dashes\n return error;\n }\n\n let resultSum = 0;\n let digit = 0;\n let isEven = false;\n\n const modBase = 10;\n const digitRadix = 10;\n const maxNumber = 9;\n const digits = value.replace(/\\D/g, '');\n\n // Checks if number match Luhn algorithm\n // based on http://en.wikipedia.org/wiki/Luhn\n for (let index = digits.length - 1; index >= 0; index--) {\n const char = digits.charAt(index);\n digit = parseInt(char, digitRadix);\n\n if (isEven && (digit *= 2) > maxNumber) {\n digit -= maxNumber;\n }\n\n resultSum += digit;\n isEven = !isEven;\n }\n\n return resultSum % modBase === 0 ? null : error;\n};\n","import { SafeHtml } from '@angular/platform-browser';\nimport { ControlConfig } from '../control-config';\nimport { CreditCardTypes } from '../../../../credit-card/credit-card-types.enum';\n\nexport class CardNumberConfig extends ControlConfig {\n public controlType = 'card-number';\n public placeholder?: string | SafeHtml | null;\n public icon?: string;\n public availableCardTypes: CreditCardTypes[] = [];\n public activeCardType?: CreditCardTypes;\n public customError = '';\n}\n","import { Injectable } from '@angular/core';\nimport { ValidationErrors as ConvertedValidationErrors } from '../validation-errors.interface';\nimport { CreditCardService } from '../../../../credit-card/credit-card.service';\nimport { isString } from '../../../../type-guards/is-string.function';\nimport { isEmptyInputValue } from '../is-empty-input-value.function';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CreditCardMaxLengthValidator {\n public constructor(private readonly creditService: CreditCardService) {}\n\n public validate = (field: {\n value: string;\n }): ConvertedValidationErrors | null => {\n if (isEmptyInputValue(field.value) || !isString(field.value)) {\n return null;\n }\n\n const length = field.value.length;\n const cardType = this.creditService.getTypeByNumber(field.value);\n const { maxLength } = this.creditService.getCreditCardSettings(cardType);\n\n if (length <= maxLength) return null;\n\n return {\n rewritableError: {\n message: TranslateHelper.t(\n 'errors.validation.max-length',\n `Enter no more than ${maxLength} characters`,\n { maxLength },\n ),\n number: maxLength,\n params: {\n maxLength,\n },\n },\n };\n };\n}\n","import { isEmptyInputValue } from '../is-empty-input-value.function';\nimport { Injectable } from '@angular/core';\nimport { isString } from '../../../../type-guards/is-string.function';\nimport { CreditCardService } from '../../../../credit-card/credit-card.service';\nimport { ValidationErrors as ConvertedValidationErrors } from '../validation-errors.interface';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CreditCardMinLengthValidator {\n public constructor(private readonly creditService: CreditCardService) {}\n\n public validate = (field: {\n value: string;\n }): ConvertedValidationErrors | null => {\n if (isEmptyInputValue(field.value) || !isString(field.value)) {\n return null;\n }\n\n const length = field.value.length;\n const cardType = this.creditService.getTypeByNumber(field.value);\n const { minLength } = this.creditService.getCreditCardSettings(cardType);\n\n if (length >= minLength) return null;\n\n return {\n rewritableError: {\n message: TranslateHelper.t(\n 'errors.validation.min-length',\n `Enter at least ${minLength} characters`,\n { minLength },\n ),\n number: minLength,\n params: {\n minLength,\n },\n },\n };\n };\n}\n","import { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { CreditCardMinLengthValidator } from '../../validators/credit-card-length/credit-card-min-length.validator';\nimport { CreditCardMaxLengthValidator } from '../../validators/credit-card-length/credit-card-max-length.validator';\nimport { Field } from '../../../field.interface';\nimport { ValidatorFn } from '@angular/forms';\nimport { luhnFormulaValidator } from '../../validators/luhn-formula-validator/luhn-formula.validator';\nimport { FormState } from '../../form-state.interface';\nimport { CardNumberConfig } from '../../controls/card-number/card-number-control.config';\nimport { CreditCardTypes } from '../../../../credit-card/credit-card-types.enum';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CardNumberConverter extends Converter {\n public constructor(\n syncService: SyncService,\n private readonly maxLengthValidator: CreditCardMaxLengthValidator,\n private readonly minLengthValidator: CreditCardMinLengthValidator,\n ) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super\n .getValidators(field)\n .concat([\n luhnFormulaValidator,\n this.minLengthValidator.validate,\n this.maxLengthValidator.validate,\n ]);\n }\n\n protected createControlConfig(\n field: Field,\n formState: FormState,\n ): CardNumberConfig {\n const config = this.createDefaultControlConfig(CardNumberConfig, field);\n\n config.placeholder = config.title;\n\n config.availableCardTypes =\n (formState?.availableCardTypes as CreditCardTypes[]) ?? [];\n\n config.activeCardType = formState?.activeCardType as CreditCardTypes;\n\n config.customError = formState?.customError as string;\n config.disabled = formState?.disabled ?? false;\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'cc-number';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { FormState } from '../../form-state.interface';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { ValidationErrorParams } from '../validation-error-params.interface';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport const maxMonths = 12;\nexport const getMinMonth = (parsedYear: string): number => {\n let minMonth = 1;\n\n const year = parsedYear ? Number('20' + parsedYear) : null;\n const today = new Date();\n minMonth = year === today.getFullYear() ? today.getMonth() + 1 : 1;\n\n return minMonth;\n};\n\nconst sendErrMessage = (\n message: string,\n params: ValidationErrorParams,\n): ValidationErrors =>\n ({\n cardMonthExpiration: {\n message,\n params,\n },\n }) as ValidationErrors;\n\nexport function cardMonthValidator(formState?: FormState): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const { value } = control;\n\n if (typeof value !== 'string') return null;\n\n const minMonth = getMinMonth((formState?.cardYearValue as string) ?? null);\n\n const twoDigitsRegex = new RegExp(/^\\d{2}$/);\n const fieldCommonLength = 2;\n\n if (value.length !== fieldCommonLength) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-length',\n `Enter ${fieldCommonLength} characters`,\n { requiredLength: fieldCommonLength },\n ),\n {\n requiredLength: fieldCommonLength,\n },\n );\n }\n\n if (!twoDigitsRegex.test(value)) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-month-pattern',\n 'Enter a valid expiration month',\n ),\n {},\n );\n }\n\n if (Number(value) < minMonth) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-min-month',\n `Enter a month that includes or comes after ${minMonth}`,\n { minMonth },\n ),\n {\n minMonth,\n },\n );\n }\n\n if (Number(value) > maxMonths) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-max-month',\n `Enter a month that includes or comes before ${maxMonths}`,\n { maxMonth: maxMonths },\n ),\n {\n maxMonth: maxMonths,\n },\n );\n }\n\n return null;\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { ValidatorFn } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { FormState } from '../../form-state.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { cardMonthValidator } from '../../validators/card-month/card-month.validator';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CardMonthConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field, formState: FormState): ValidatorFn[] {\n return super.getValidators(field).concat([cardMonthValidator(formState)]);\n }\n\n protected createControlConfig(\n field: Field,\n formState: FormState,\n ): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: '99',\n guide: false,\n };\n config.inputMode = 'numeric';\n\n config.placeholder = TranslateHelper.t(\n 'card-month.converter.placeholder',\n 'MM',\n );\n\n config.title = TranslateHelper.t('card-month.converter.title', 'MM');\n\n config.disabled = formState?.disabled ?? false;\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'cc-exp-month';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { FormState } from '../../form-state.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { FieldNames } from '../../../field-names.enum';\nimport { CvvFormState } from './cvv-form-state.interface';\nimport { convert } from '../../validators/convert.function';\nimport { CreditCardTypes } from '../../../../credit-card/credit-card-types.enum';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CvvConverter extends Converter {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n private maxFieldLength = 4;\n\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field, formState?: CvvFormState): ValidatorFn[] {\n const validators: ValidatorFn[] = super.getValidators(field);\n const activeCardType = formState ? formState.activeCardType : null;\n const getPatternValidator = (pattern: RegExp): ValidatorFn =>\n convert(\n Validators.pattern(pattern),\n TranslateHelper.t(\n 'errors.validation.cvv-pattern',\n 'Enter a valid CVV/CVC',\n ),\n {},\n );\n\n switch (activeCardType) {\n case CreditCardTypes.AMERICAN_EXPRESS: {\n this.maxFieldLength = 4;\n validators.push(getPatternValidator(/^\\d{4}$/));\n break;\n }\n case CreditCardTypes.MAESTRO: {\n this.maxFieldLength = 4;\n validators.push(getPatternValidator(/^(?:\\d{3,4})?$/));\n break;\n }\n default: {\n this.maxFieldLength = 3;\n validators.push(getPatternValidator(/^\\d{3}$/));\n }\n }\n\n return validators;\n }\n\n protected createControlConfig(\n field: Field,\n formState: FormState,\n ): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: new Array(this.maxFieldLength).fill('9').join(''),\n unmaskModelValue: false,\n guide: false,\n };\n\n config.tooltip = {\n text: TranslateHelper.t(\n 'cvv.converter.tooltip.text',\n 'Where to find your CVV/CVC',\n ),\n image: 'cvv',\n parentField: FieldNames.cvv,\n position: 'input',\n analyticsAction: 'show-cvv-tooltip',\n };\n\n config.placeholder = TranslateHelper.t(\n 'cvv.converter.placeholder',\n 'CVV2/CVC2',\n );\n\n config.inputMode = 'numeric';\n config.shouldHideUserInput = this.shouldHideUserInput();\n config.disabled = formState?.disabled ?? false;\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'cc-csc';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n\n protected shouldHideUserInput(): boolean {\n return true;\n }\n}\n","import { ValidatorFn, ValidationErrors } from '@angular/forms';\nimport { isEmptyInputValue } from '../is-empty-input-value.function';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport const birthdateValidator: ValidatorFn = ({ value }) => {\n if (isEmptyInputValue(value) || typeof value !== 'string') {\n return null;\n }\n\n const error: ValidationErrors = {\n invalidBirthDate: {\n message: TranslateHelper.t(\n 'errors.validation.birthDate',\n 'Enter a valid birth date',\n ),\n params: {},\n },\n };\n const dateArr = value.split('/');\n const datePartsCount = 3;\n const dayIndex = 0;\n const monthIndex = 1;\n const yearIndex = 2;\n const maxMonths = 12;\n const maxDays = 31;\n const minAge = 16;\n const maxAge = 120;\n\n if (dateArr.length < datePartsCount) {\n return null;\n }\n\n if (+dateArr[monthIndex] > maxMonths || +dateArr[dayIndex] > maxDays) {\n return error;\n }\n\n const currentDate = new Date(\n +dateArr[yearIndex],\n +dateArr[monthIndex],\n +dateArr[dayIndex],\n );\n const nowDate = new Date();\n\n if (\n isNaN(currentDate.getFullYear()) ||\n nowDate.getFullYear() - currentDate.getFullYear() <= minAge ||\n nowDate.getFullYear() - currentDate.getFullYear() > maxAge\n ) {\n return error;\n } else {\n return null;\n }\n};\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { convert } from '../../validators/convert.function';\nimport { Converter } from '../converter.abstract';\nimport { birthdateValidator } from '../../validators/birth-date/birth-date.validator';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class BirthDateConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super\n .getValidators(field)\n .concat([\n convert(\n Validators.pattern(/^[0-9]{1,2}\\/[0-9]{1,2}\\/[0-9]{4}$/),\n TranslateHelper.t(\n 'birth-date.converter.validation.pattern',\n 'Enter a valid birth date',\n ),\n ),\n birthdateValidator,\n ]);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: '99/99/9999',\n unmaskModelValue: false,\n guide: false,\n };\n\n config.placeholder = TranslateHelper.t(\n 'birth-date.converter.placeholder',\n 'DD/MM/YYYY',\n );\n\n config.inputMode = 'numeric';\n\n return config;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { Converter } from '../converter.abstract';\n\n@Injectable()\nexport class CardholderNameConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n return this.createDefaultControlConfig(TextControlConfig, field);\n }\n\n protected getAutocomplete(): string {\n return 'cc-name';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","export const cpfNameRegex =\n /^[a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ.'-]{2,50}(?: [a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ.'-]{2,50}){1,8}$/i; // tslint:disable-line\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { convert } from '../../validators/convert.function';\nimport { Converter } from '../converter.abstract';\nimport { cpfNameRegex } from './cpf-name-regex.variable';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CpfNameConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super\n .getValidators(field)\n .concat([\n convert(\n Validators.pattern(cpfNameRegex),\n TranslateHelper.t(\n 'cpf-name.converter.validation.pattern',\n 'Enter a valid name',\n ),\n {},\n ),\n ]);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.tooltip = {\n text: TranslateHelper.t(\n 'cpf-name.converter.tooltip.text',\n 'Where to find your name',\n ),\n image: 'cpf-name',\n };\n\n return config;\n }\n}\n","import { isEmptyInputValue } from '../is-empty-input-value.function';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { isString } from '../../../../type-guards/is-string.function';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nconst cpfLength = 11;\nconst firstCheckDigitPosition = 9;\nconst secondCheckDigitPosition = 10;\nconst maxCheckDigit = 10;\nconst repeatedDigitsRegex = /^(\\d)\\1+$/;\nconst allowedCharactersRegex = /[^0-9 .-]+/;\nconst moduloDivisor = 11;\n/**\n * Checks number match CPF validation algorithm.\n * Based on https://en.wikipedia.org/wiki/CPF_number\n */\nexport const cpfFormulaValidator: ValidatorFn = ({ value }) => {\n if (isEmptyInputValue(value) || !isString(value)) {\n return null;\n }\n\n const error: ValidationErrors = {\n rewritableError: {\n message: TranslateHelper.t(\n 'cpf-number.converter.validation.pattern',\n 'Enter a valid CPF number',\n ),\n },\n };\n\n if (allowedCharactersRegex.test(value)) {\n // accept only spaces, digits, dots and dashes\n return error;\n }\n\n // Remove non-numeric characters from CPF\n const cpf = value.replace(/\\D/g, '');\n\n // Check if CPF has 11 digits\n if (cpf.length !== cpfLength) {\n return error;\n }\n\n // Disallow CPFs with all same digits (e.g., \"11111111111\")\n if (repeatedDigitsRegex.test(cpf)) {\n return error;\n }\n\n function calculateCheckDigit(\n cpfNumber: string,\n checkDigitPosition: number,\n ): number {\n let sum = 0;\n for (let i = 0; i < checkDigitPosition; i++) {\n sum += parseInt(cpfNumber.charAt(i)) * (checkDigitPosition + 1 - i);\n }\n const checkDigit = (sum * maxCheckDigit) % moduloDivisor;\n return checkDigit >= maxCheckDigit ? 0 : checkDigit;\n }\n\n // Validate the check digits\n for (const position of [firstCheckDigitPosition, secondCheckDigitPosition]) {\n const checkDigit = calculateCheckDigit(cpf, position);\n if (checkDigit !== parseInt(cpf.charAt(position))) {\n return error;\n }\n }\n\n return null;\n};\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { cpfFormulaValidator } from '../../validators/cpf-formula-validator/cpf-formula.validator';\nimport { Converter } from '../converter.abstract';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CpfNumberConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super.getValidators(field).concat([cpfFormulaValidator]);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: '999.999.999-99',\n unmaskModelValue: true,\n guide: false,\n };\n\n config.inputMode = 'numeric';\n\n config.placeholder = TranslateHelper.t(\n 'cpf-number.converter.placeholder',\n '000.000.000-00',\n );\n\n config.tooltip = {\n text: TranslateHelper.t(\n 'cpf-number.converter.tooltip.text',\n 'Where to find your registration number',\n ),\n image: 'cpf-number',\n };\n\n return config;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { StreetNumberFormState } from './street-number-from-state.interface';\nimport { ValidatorFn } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { convert } from '../../validators/convert.function';\nimport { restrictedValueValidator } from '../../validators/restricted-value/restricted-value.validator';\nimport { Converter } from '../converter.abstract';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class StreetNumberConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(\n field: Field,\n formState?: StreetNumberFormState,\n ): ValidatorFn[] {\n const validators: ValidatorFn[] = super.getValidators(field);\n\n if (formState?.country === 'BL') {\n validators.push(\n convert(\n restrictedValueValidator('0'),\n TranslateHelper.t(\n 'errors.validation.building-number',\n 'Enter a valid building number',\n ),\n {},\n ),\n );\n }\n\n return validators;\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n return this.createDefaultControlConfig(TextControlConfig, field);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { Converter } from '../converter.abstract';\n\n@Injectable()\nexport class TextConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n return this.createDefaultControlConfig(TextControlConfig, field);\n }\n}\n","import { ControlConfig } from '../control-config';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\n\nexport class CheckboxControlConfig extends ControlConfig {\n public controlType = 'checkbox';\n public initValue!: XpsBoolean;\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { ValidatorFn } from '../../validators/validator-fn.type';\nimport { convert } from '../../validators/convert.function';\nimport { restrictedValueValidator } from '../../validators/restricted-value/restricted-value.validator';\nimport { CheckboxControlConfig } from '../../controls/checkbox/checkbox-control.config';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CheckboxConverter extends Converter {\n protected readonly checkedValue = XpsBoolean.true;\n protected readonly uncheckedValue = XpsBoolean.false;\n\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n\n if (field.isMandatory === this.checkedValue) {\n validators.push(\n convert(\n restrictedValueValidator(this.uncheckedValue),\n field.validation_error_msg ||\n TranslateHelper.t(\n 'checkbox.converter.validation.required',\n 'Required',\n ),\n ),\n );\n }\n\n return validators;\n }\n\n protected createControlConfig(field: Field): CheckboxControlConfig {\n const config = this.createDefaultControlConfig(\n CheckboxControlConfig,\n field,\n );\n\n config.placeholder = config.title;\n config.initValue = field.value as XpsBoolean;\n\n return config;\n }\n}\n","import { ControlConfig } from '../control-config';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { SearchSelectOption } from './search-select-option.interface';\nimport { SelectOption } from './select-option.interface';\n\nexport class SelectControlConfig extends ControlConfig {\n public controlType = 'search-select';\n public name!: string;\n public title?: string | SafeHtml;\n public options?: SelectOption[] | SearchSelectOption[];\n public initValue?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { SelectControlConfig } from '../../controls/search-select/select-control.config';\nimport { Field } from '../../../field.interface';\nimport { SelectOption } from '../../controls/search-select/select-option.interface';\n\n@Injectable()\nexport class SelectConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n protected createControlConfig(field: Field): SelectControlConfig {\n const config = this.createDefaultControlConfig(SelectControlConfig, field);\n config.options = field.options as SelectOption[];\n config.initValue = field.value;\n\n return config;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\n\n@Injectable()\nexport class PinConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n return this.createDefaultControlConfig(TextControlConfig, field);\n }\n}\n","import { RadioOption } from './radio-option.interface';\nimport { ControlConfig } from '../control-config';\n\nexport class RadioControlConfig extends ControlConfig {\n public controlType = 'radio';\n public options: RadioOption[] = [];\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { RadioControlConfig } from '../../controls/radio-control/radio-control.config';\nimport { RadioOption } from '../../controls/radio-control/radio-option.interface';\n\n@Injectable()\nexport class RadioGroupConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n protected createControlConfig(field: Field): RadioControlConfig {\n const config = this.createDefaultControlConfig(RadioControlConfig, field);\n\n config.options = field.options as RadioOption[];\n return config;\n }\n}\n","import { ValidatorFn } from '@angular/forms';\nimport { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\n\n@Injectable()\nexport class PricepointConverter extends Converter {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n private readonly maxFieldLength = 30;\n\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super.getValidators(field);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: new Array(this.maxFieldLength).fill('9').join(``),\n unmaskModelValue: false,\n guide: false,\n };\n\n config.placeholder = field.title;\n config.inputMode = 'numeric';\n\n return config;\n }\n}\n","import { SafeHtml } from '@angular/platform-browser';\nimport { ControlConfig } from '../control-config';\n\nexport class CouponControlConfig extends ControlConfig {\n public controlType = 'coupon';\n public dataType?: string;\n public placeholder?: string | SafeHtml | null;\n public autocomplete?: string;\n}\n","import { Validators } from '@angular/forms';\nimport { convert } from '../convert.function';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport function couponValidator(message?: string): ValidatorFn {\n const defaultMessage = TranslateHelper.t(\n 'errors.validation.coupon-pattern',\n 'Enter a valid promo code',\n );\n return convert(\n Validators.pattern(/^[0-9a-z_-]+$/i),\n message || defaultMessage,\n );\n}\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn } from '@angular/forms';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { CouponControlConfig } from '../../controls/coupon/coupon-control.config';\nimport { couponValidator } from '../../validators/coupon/coupon-validator';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CouponConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(): ValidatorFn[] {\n return [couponValidator()];\n }\n\n protected createControlConfig(field: Field): CouponControlConfig {\n const config = this.createDefaultControlConfig(CouponControlConfig, field);\n\n config.placeholder = TranslateHelper.t(\n 'coupon.converter.placeholder',\n 'Enter promo code',\n );\n\n return config;\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { ValidationErrorParams } from '../validation-error-params.interface';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nconst sendErrMessage = (\n message: string,\n params: ValidationErrorParams,\n): ValidationErrors =>\n ({\n cardYearExpiration: {\n message,\n params,\n },\n }) as ValidationErrors;\n\nexport const getLastCharactersInYear = (\n str: string = new Date().getFullYear().toString(),\n): string => {\n // for getting last characters in year; need to check in future\n return str.slice(str.length - 2);\n};\n\n// Карта выдается максимум на 50 лет\nexport const maxYearsCount = 50;\n\nexport function cardYearValidator(\n control: AbstractControl,\n): ValidationErrors | null {\n const { value } = control;\n\n if (typeof value !== 'string') return null;\n\n const minYear = parseInt(getLastCharactersInYear(), 10);\n\n const twoDigitsRegex = new RegExp(/^\\d{2}$/);\n\n const fieldCommonLength = 2;\n\n if (value.length !== fieldCommonLength) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-length',\n `Enter ${fieldCommonLength} characters`,\n { requiredLength: fieldCommonLength },\n ),\n {\n requiredLength: fieldCommonLength,\n },\n );\n }\n\n if (!twoDigitsRegex.test(value)) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-year-pattern',\n 'Enter a valid expiration year',\n ),\n {},\n );\n }\n\n if (Number(value) < minYear) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-min-year',\n `Enter a year that includes or comes after ${minYear}`,\n { minYear },\n ),\n {\n minYear,\n },\n );\n }\n\n const maxValidYear = minYear + maxYearsCount;\n\n if (Number(value) > maxValidYear) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-max-year',\n `Enter a year that includes or comes before ${maxValidYear}`,\n { maxYear: maxValidYear },\n ),\n {\n maxYear: maxValidYear,\n },\n );\n }\n\n return null;\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { ValidatorFn } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { FormState } from '../../form-state.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { cardYearValidator } from '../../validators/card-year/card-year.validator';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CardYearConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super.getValidators(field).concat([cardYearValidator]);\n }\n\n protected createControlConfig(\n field: Field,\n formState: FormState,\n ): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: '99',\n guide: false,\n };\n config.inputMode = 'numeric';\n\n config.placeholder = TranslateHelper.t(\n 'card-year.converter.placeholder',\n 'YY',\n );\n\n config.title = TranslateHelper.t('card-year.converter.title', 'YY');\n\n config.disabled = formState?.disabled ?? false;\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'cc-exp-year';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","import { Validators } from '@angular/forms';\nimport { ValidatorFn } from './validator-fn.type';\nimport { convert } from './convert.function';\nimport { TranslateHelper } from '../../../../shared/translate/translate.helper';\n\nexport function phoneValidator(): ValidatorFn {\n return convert(\n Validators.pattern(/^\\d*$/),\n TranslateHelper.t('errors.validation.phone-pattern', 'Enter a valid phone'),\n );\n}\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { convert } from './convert.function';\nimport { TranslateHelper } from '../../../../shared/translate/translate.helper';\n\nexport function minLengthValidator(minLength: number): ValidatorFn {\n return convert(\n Validators.minLength(minLength),\n TranslateHelper.t(\n 'errors.validation.min-length',\n `Enter at least ${minLength} characters`,\n { minLength },\n ),\n {\n minLength,\n },\n );\n}\n","import { Validators } from '@angular/forms';\nimport { ValidatorFn } from './validator-fn.type';\nimport { convert } from './convert.function';\nimport { TranslateHelper } from '../../../../shared/translate/translate.helper';\n\nexport function maxLengthValidator(maxLength: number): ValidatorFn {\n return convert(\n Validators.maxLength(maxLength),\n TranslateHelper.t(\n 'errors.validation.max-length',\n `Enter no more than ${maxLength} characters`,\n { maxLength },\n ),\n {\n maxLength,\n },\n );\n}\n","import { ControlConfig } from './control-config';\n\nexport class PhoneControlConfig extends ControlConfig {\n public controlType = 'phone';\n public placeholder?: string;\n public icon?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn } from '@angular/forms';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { phoneValidator } from '../../validators/phone-validator';\nimport { minLengthValidator } from '../../validators/min-length-validator';\nimport { maxLengthValidator } from '../../validators/max-length-validator';\nimport { PhoneControlConfig } from '../../controls/phone-control.config';\nimport { convertedRequiredValidator } from '../../validators/required/required.validator';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\n\n@Injectable()\nexport class PhoneConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n if (field.isMandatory === XpsBoolean.false) return [];\n\n const minLength = 10;\n const maxLength = 15;\n\n return super\n .getValidators(field)\n .concat([\n convertedRequiredValidator(),\n phoneValidator(),\n minLengthValidator(minLength),\n maxLengthValidator(maxLength),\n ]);\n }\n\n protected createControlConfig(field: Field): PhoneControlConfig {\n const config = this.createDefaultControlConfig(PhoneControlConfig, field);\n config.inputMode = 'numeric';\n\n return config;\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { maxMonths } from '../../converters/card-expiration/card-expiration.converter';\nimport { ValidationErrorParams } from '../validation-error-params.interface';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport const getMinMonth = (parsedYear: string): number => {\n let minMonth = 1;\n\n if (parsedYear) {\n const year = parsedYear ? Number('20' + parsedYear) : null;\n const today = new Date();\n minMonth = year === today.getFullYear() ? today.getMonth() + 1 : 1;\n }\n\n return minMonth;\n};\n\nconst sendErrMessage = (\n message: string,\n params: ValidationErrorParams,\n): ValidationErrors =>\n ({\n rewritableError: {\n message,\n params,\n },\n }) as ValidationErrors;\n\nexport const getLastCharactersInYear = (\n str: string = new Date().getFullYear().toString(),\n): string => {\n // for getting last characters in year; need to check in future\n return str.slice(str.length - 2);\n};\n\nexport const sliceMmYy = (value: string): { month: string; year: string } => {\n const sliceIndex = 2;\n\n const month = value.slice(0, sliceIndex) as string;\n const year = value.slice(-sliceIndex) as string;\n\n return { month, year };\n};\n\nexport const maxYearsCount = 50;\n\nexport function cardExpValidator(\n control: AbstractControl,\n): ValidationErrors | null {\n const { value } = control;\n\n if (typeof value !== 'string') return null;\n\n const { month, year } = sliceMmYy(value);\n\n const minMonth = getMinMonth(year);\n const minYear = parseInt(getLastCharactersInYear(), 10);\n\n const twoDigitsRegex = new RegExp(/^\\d{2}$/);\n const fieldCommonLength = 4;\n\n const trickyFieldLength = fieldCommonLength + 1;\n\n if (value.length !== trickyFieldLength) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-length',\n `Enter ${fieldCommonLength} characters`,\n { requiredLength: fieldCommonLength },\n ),\n {\n requiredLength: fieldCommonLength,\n },\n );\n }\n\n if (!twoDigitsRegex.test(month)) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-month-pattern',\n 'Enter a valid expiration month',\n ),\n {},\n );\n }\n\n if (Number(month) < minMonth) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-min-month',\n `Enter a month that includes or comes after ${minMonth}`,\n { minMonth },\n ),\n {\n minMonth,\n },\n );\n }\n\n if (Number(month) > maxMonths) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-max-month',\n `Enter a month that includes or comes before ${maxMonths}`,\n { maxMonth: maxMonths },\n ),\n {\n maxMonth: maxMonths,\n },\n );\n }\n\n if (!twoDigitsRegex.test(year)) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-year-pattern',\n 'Enter a valid expiration year',\n ),\n {},\n );\n }\n\n if (Number(year) < minYear) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-min-year',\n `Enter a year that includes or comes after ${minYear}`,\n { minYear },\n ),\n {\n minYear,\n },\n );\n }\n\n const maxValidYear = minYear + maxYearsCount;\n\n if (Number(year) > maxValidYear) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-max-year',\n `Enter a year that includes or comes before ${maxValidYear}`,\n { maxYear: maxValidYear },\n ),\n {\n maxYear: maxValidYear,\n },\n );\n }\n\n return null;\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { ValidatorFn } from '../../validators/validator-fn.type';\nimport { cardExpValidator } from '../../validators/card-expiration-date-validator/card-expiration-date.validator';\nimport { FormState } from '../../form-state.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport const maxMonths = 12;\n\n@Injectable()\nexport class CardExpirationConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super.getValidators(field).concat([cardExpValidator]);\n }\n\n protected createControlConfig(\n field: Field,\n formState: FormState,\n ): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: '99/99',\n guide: false,\n };\n config.inputMode = 'numeric';\n\n config.placeholder = TranslateHelper.t(\n 'card-expiration.converter.placeholder',\n 'MM/YY',\n );\n\n config.title = TranslateHelper.t(\n 'card-expiration.converter.title',\n 'MM/YY',\n );\n\n config.disabled = formState?.disabled ?? false;\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'cc-exp';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ConvertersMap } from './converters-map.interface';\nimport { EmailConverter } from './email/email.converter';\nimport { ZipConverter } from './zip/zip.converter';\nimport { CardNumberConverter } from './card-number/card-number.converter';\nimport { CardMonthConverter } from './card-month/card-month.converter';\nimport { CvvConverter } from './cvv/cvv.converter';\nimport { BirthDateConverter } from './birth-date/birth-date.converter';\nimport { CardholderNameConverter } from './cardholder-name/cardholder-name.converter';\nimport { CpfNameConverter } from './cpf-name/cpf-name.converter';\nimport { CpfNumberConverter } from './cpf-number/cpf-number.converter';\nimport { StreetNumberConverter } from './street-number/street-number.converter';\nimport { TextConverter } from './text/text.converter';\nimport { CheckboxConverter } from './checkbox/checkbox.converter';\nimport { SelectConverter } from './select/select.converter';\nimport { PinConverter } from './pin/pin.converter';\nimport { RadioGroupConverter } from './radio-group/radio-group.converter';\nimport { PricepointConverter } from './pricepoint/pricepoint.converter';\nimport { CouponConverter } from './coupon/coupon.converter';\nimport { CardYearConverter } from './card-year/card-year.converter';\nimport { PhoneConverter } from './phone/phone.converter';\nimport { CardExpirationConverter } from './card-expiration/card-expiration.converter';\n\nexport const convertersMapToken = new InjectionToken<ConvertersMap>(\n 'ConvertersTokensMap',\n);\n\nexport const convertersMap: ConvertersMap = {\n card_number: CardNumberConverter,\n card_month: CardMonthConverter,\n card_year: CardYearConverter,\n card_expire: CardExpirationConverter,\n cvv: CvvConverter,\n extra_cvv: CvvConverter,\n zip: ZipConverter,\n cardholdername: CardholderNameConverter,\n cpf_number: CpfNumberConverter,\n cpf_name: CpfNameConverter,\n birth_date: BirthDateConverter,\n text: TextConverter,\n check: CheckboxConverter,\n select: SelectConverter,\n pin: PinConverter,\n radiogroup: RadioGroupConverter,\n email: EmailConverter,\n psEmail: EmailConverter,\n bazitemail: EmailConverter,\n street_number: StreetNumberConverter,\n sum: PricepointConverter,\n out: PricepointConverter,\n couponCode: CouponConverter,\n phone: PhoneConverter,\n};\n","import { Inject, Injectable, Injector } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Field } from '../../field.interface';\nimport { Converter } from '../converters/converter.abstract';\nimport { convertersMapToken } from '../converters/converters-map';\nimport { ConvertersMap } from '../converters/converters-map.interface';\nimport { ControlConfig } from './control-config';\n\n@Injectable()\nexport class ControlConfigService {\n public constructor(\n @Inject(convertersMapToken)\n private readonly convertersMap: ConvertersMap,\n private readonly injector: Injector,\n ) {}\n\n public getFormControl(field: Field): UntypedFormControl | null {\n const converter = this.getConverter(field);\n\n if (!converter) {\n return null;\n }\n\n return converter.convertToFormControl(field);\n }\n\n public getConfig(field: Field): ControlConfig | null {\n const converter = this.getConverter(field);\n\n if (!converter) {\n return null;\n }\n\n return converter.convertToConfig(field);\n }\n\n public getConverter(field: Field | null): Converter | null {\n if (!field) {\n return null;\n }\n\n const sanitizedName = field.name.replace(/^fix_/i, '');\n let converter = this.convertersMap[sanitizedName];\n\n if (!converter) {\n converter = this.convertersMap[field.type];\n }\n\n if (!converter) {\n return null;\n }\n\n return this.injector.get<Converter>(converter);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { XpsBoolean } from '../../xps-boolean.enum';\nimport { Field } from '../field.interface';\nimport { ControlConfigService } from './controls/control-config.service';\nimport { FieldFormStates } from './field-form-states.interface';\nimport { FormState } from './form-state.interface';\nimport { FieldNames } from '../field-names.enum';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable()\nexport class FormService {\n public fieldFormStates: FieldFormStates = {};\n\n public constructor(\n private readonly controlConfigService: ControlConfigService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {}\n\n public createForm(fields: Field[]): UntypedFormGroup {\n const visibleFields = this.getVisibleFields(fields);\n const externalVaultFields = this.getExternalVaultFields(fields);\n\n const formFields = this.deduplicateFields([\n ...visibleFields,\n ...externalVaultFields,\n ]);\n const controls: { [name: string]: UntypedFormControl } = formFields.reduce(\n (result: { [key: string]: UntypedFormControl }, field: Field) => {\n const formControl: UntypedFormControl | null =\n this.controlConfigService.getFormControl(field);\n\n if (formControl) {\n result[field.name] = formControl;\n }\n\n return result;\n },\n {},\n );\n\n this.logCreateForm(formFields);\n\n return new UntypedFormGroup(controls);\n }\n\n public getFieldFormState(fieldName: FieldNames): FormState | null {\n return this.fieldFormStates[fieldName] ?? null;\n }\n\n public updateFieldFormState(\n form: UntypedFormGroup,\n fields: Field[],\n fieldName: string,\n formState: FormState,\n ): void {\n const field = fields.find(\n (fieldItem: Field) => fieldItem.name === fieldName,\n );\n\n if (!field) {\n return;\n }\n\n const converter = this.controlConfigService.getConverter(field);\n const control = form.controls[fieldName];\n\n if (!control) {\n return;\n }\n\n this.fieldFormStates[fieldName] = {\n ...this.fieldFormStates[fieldName],\n ...formState,\n };\n control.setValidators(\n converter?.getValidators(field, this.fieldFormStates[fieldName]) ?? [],\n );\n control.updateValueAndValidity();\n }\n\n private getVisibleFields(fields: Field[]): Field[] {\n return fields.filter(({ isVisible }) => isVisible === XpsBoolean.true);\n }\n\n private getExternalVaultFields(fields: Field[]): Field[] {\n return fields.filter(({ name }) =>\n [FieldNames.pmId, FieldNames.externalCardIssuerCountry].includes(\n name as FieldNames,\n ),\n );\n }\n\n private deduplicateFields(fields: Field[]): Field[] {\n const uniqueFieldsMap = new Map<string, Field>();\n fields.forEach((field) => uniqueFieldsMap.set(field.name, field));\n return Array.from(uniqueFieldsMap.values());\n }\n\n private logCreateForm(fields: Field[]): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.createForm,\n 'manual',\n { value: fields.map((field) => field.name) },\n );\n }\n}\n","export enum StatusSearchParam {\n token = 'token',\n pid = 'fix_pid',\n invoice = 'fix_invoice',\n signature = 'signature',\n locale = 'locale',\n testProject = 'fix_testProject',\n testPs = 'fix_testPs',\n testXsolla = 'fix_testXsolla',\n userReturnStatus = 'fix_userReturnStatus',\n isSavePaymentAccount = 'isSavePaymentAccount',\n}\n","import { StatusSearchParam } from './status-search-param.enum';\n\nexport const requiredStatusSearchParams = [\n StatusSearchParam.token,\n StatusSearchParam.locale,\n StatusSearchParam.signature,\n StatusSearchParam.pid,\n StatusSearchParam.invoice,\n];\n","import { StatusRequestParams } from './status-request-params.interface';\nimport { StatusSearchParam } from './status-search-param.enum';\n\ntype SearchParamConverter = (value: string) => string | number;\n\ninterface StatusSearchParamSettings {\n key: keyof StatusRequestParams;\n converter: SearchParamConverter;\n}\n\nconst stringConverter: SearchParamConverter = (value: string): string => value;\nconst numberConverter: SearchParamConverter = (value: string): number => {\n const numberValue = Number(value);\n return isNaN(numberValue) ? 0 : numberValue;\n};\n\nexport const statusSearchParamsMap = new Map<\n StatusSearchParam,\n StatusSearchParamSettings\n>([\n [\n StatusSearchParam.token,\n {\n key: 'token',\n converter: stringConverter,\n },\n ],\n [\n StatusSearchParam.signature,\n {\n key: 'signature',\n converter: stringConverter,\n },\n ],\n [\n StatusSearchParam.locale,\n {\n key: 'locale',\n converter: stringConverter,\n },\n ],\n [\n StatusSearchParam.userReturnStatus,\n {\n key: 'userReturnStatus',\n converter: stringConverter,\n },\n ],\n [\n StatusSearchParam.pid,\n {\n key: 'pid',\n converter: numberConverter,\n },\n ],\n [\n StatusSearchParam.invoice,\n {\n key: 'invoice',\n converter: numberConverter,\n },\n ],\n [\n StatusSearchParam.testProject,\n {\n key: 'testProject',\n converter: numberConverter,\n },\n ],\n [\n StatusSearchParam.testPs,\n {\n key: 'testPs',\n converter: numberConverter,\n },\n ],\n [\n StatusSearchParam.testXsolla,\n {\n key: 'testXsolla',\n converter: numberConverter,\n },\n ],\n [\n StatusSearchParam.isSavePaymentAccount,\n {\n key: 'isSavePaymentAccount',\n converter: stringConverter,\n },\n ],\n]);\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nexport abstract class XpsApiPart<Response> {\n public get response$(): Observable<Response> {\n return this.response\n .asObservable()\n .pipe(\n filter<Response | null, Response>(\n (response: Response | null): response is Response =>\n response !== null,\n ),\n );\n }\n\n private readonly response: BehaviorSubject<Response | null> =\n new BehaviorSubject<Response | null>(null);\n\n public emitResponse(response: Response | null): void {\n this.response.next(response);\n }\n\n public get currentValue(): Response | null {\n return this.response.getValue();\n }\n\n protected abstract request(\n ...args: any[] // eslint-disable-line @typescript-eslint/no-explicit-any\n ): void | Promise<Response | void> | Promise<Response> | Observable<Response>;\n}\n","import { XpsApiPartRequest } from '../../../xps-api/xps-api-part-request.abstract';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\nimport { StatusRequestParams } from '../status-request-params.interface';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport class StatusRequest extends XpsApiPartRequest {\n public readonly access_token: string;\n public readonly xps_fix_command = 'status';\n public readonly xps_fix_invoice: number;\n public readonly xps_fix_pid: number;\n public readonly xps_signature: string;\n public readonly xps_locale: string;\n public readonly xps_fix_testProject: number | undefined;\n public readonly xps_fix_testPs: number | undefined;\n public readonly xps_fix_testXsolla: number | undefined;\n public readonly xps_fix_userReturnStatus: string | undefined;\n\n public constructor(parameters: StatusRequestParams) {\n super();\n\n if (!parameters.token) {\n throw new TokenError();\n }\n\n this.access_token = parameters.token;\n this.xps_fix_invoice = parameters.invoice;\n this.xps_fix_pid = parameters.pid;\n this.xps_signature = parameters.signature;\n this.xps_fix_testProject = parameters.testProject;\n this.xps_fix_testPs = parameters.testPs;\n this.xps_fix_testXsolla = parameters.testXsolla;\n this.xps_fix_userReturnStatus = parameters.userReturnStatus;\n this.xps_locale = parameters.locale;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { StatusRequest } from './status-request.class';\n\nexport type StatusRequestParameters = ConstructorParameters<\n typeof StatusRequest\n>;\n\nexport type StatusRequestFactory = (\n ...args: StatusRequestParameters\n) => StatusRequest;\n\nexport const statusRequestFactoryToken: InjectionToken<StatusRequestFactory> =\n new InjectionToken<StatusRequestFactory>('StatusRequest');\n\nexport const statusRequestFactoryProvider: ValueProvider = {\n provide: statusRequestFactoryToken,\n useValue: (...args: StatusRequestParameters) => new StatusRequest(...args),\n};\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { StatusResponse } from './status-response.class';\n\ntype ResponseParameters = ConstructorParameters<typeof StatusResponse>;\n\nexport type StatusResponseFactory = (\n ...args: ResponseParameters\n) => StatusResponse;\n\nexport const statusResponseFactoryToken: InjectionToken<StatusResponseFactory> =\n new InjectionToken<StatusResponseFactory>('StatusResponse');\n\nexport const statusResponseFactoryProvider: ValueProvider = {\n provide: statusResponseFactoryToken,\n useValue: (...args: ResponseParameters) => new StatusResponse(...args),\n};\n","import { lastValueFrom } from 'rxjs';\nimport { Injectable, Inject } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { XpsResponse, XpsStatus } from '../../xps-response.interface';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { TerminalError } from '../../../exceptions-handling/errors/terminal-error.class';\nimport { SecureApiClient } from '../../../http/secure-api/secure-api.service';\nimport { XpsApiPart } from '../../xps-api/xps-api-part.abstract';\nimport {\n StatusRequestFactory,\n statusRequestFactoryToken,\n} from './request/status-request.token';\nimport {\n StatusResponseFactory,\n statusResponseFactoryToken,\n} from './response/status-response.token';\nimport { StatusRequestParams } from './status-request-params.interface';\nimport { StatusResponse } from './response/status-response.class';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StatusRequestService extends XpsApiPart<StatusResponse> {\n private readonly apiRoute = 'directpayment';\n private requestParams!: StatusRequestParams;\n public constructor(\n private readonly secureApiClient: SecureApiClient,\n private readonly settingsService: SettingsService,\n @Inject(statusRequestFactoryToken)\n private readonly requestFactory: StatusRequestFactory,\n @Inject(statusResponseFactoryToken)\n private readonly responseFactory: StatusResponseFactory,\n ) {\n super();\n }\n\n public setRequestParams(params: StatusRequestParams): void {\n this.requestParams = {\n locale: params.locale,\n testProject: params.testProject,\n testPs: params.testPs,\n testXsolla: params.testXsolla,\n userReturnStatus: params.userReturnStatus,\n invoice: params.invoice,\n pid: params.pid,\n signature: params.signature,\n };\n }\n\n public request(): void {\n const requestParams = this.requestFactory({\n token: this.settingsService.token,\n ...this.requestParams,\n });\n\n lastValueFrom(\n this.secureApiClient.post<XpsResponse>(\n this.apiRoute,\n new URLSearchParams(\n requestParams as unknown as { [key: string]: string },\n ),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n ),\n )\n .then((response: XpsResponse) => {\n const statusResponse = this.responseFactory({\n status: response.status as XpsStatus | null,\n errors: response.errors,\n form: response.form,\n payment_method: response.payment_method,\n });\n\n this.emitResponse(statusResponse);\n })\n .catch((e: TerminalError) => {\n throw new TerminalError(e.message, e.code);\n });\n }\n}\n","import { Price } from './price.interface';\n\nexport function extractMoneyCurrency<T>(\n money: (T & { amount?: null | number; currency?: string }) | undefined,\n allowZero = true,\n): Price {\n return {\n amount: money?.amount ?? (allowZero ? 0 : null),\n currency: money?.currency ?? '',\n };\n}\n\nexport function createPriceOrUndefined(\n amount: number | undefined | null,\n currency: string | undefined,\n): Price | undefined {\n return amount !== undefined && amount !== null && currency !== undefined\n ? {\n amount,\n currency,\n }\n : undefined;\n}\n","/**\n * default image for purchase item is set on Publisher Account side.\n * for purchase checkout items the image url is converted into base64 string.\n * to determine default image fixed templates are used\n */\nexport const defaultImagePatterns = [\n /^data:image\\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAAAAADmVT4XAAACMUlEQVR4Ae3YgYqdMBSE4fP/,\n /virtual_item_default_image/,\n];\n","export enum VatDetailsKey {\n vat = 'vat',\n vatPercent = 'vat-percent',\n vatIncluding = 'vat-including',\n vatPercentIncluding = 'vat-percent-including',\n\n vatIndia = 'vat-india',\n vatIndiaPercent = 'vat-india-percent',\n vatIndiaIncluding = 'vat-india-including',\n vatIndiaPercentIncluding = 'vat-india-percent-including',\n\n vatGhana = 'vat-ghana',\n vatGhanaIncluding = 'vat-ghana-including',\n}\n","export enum SalesTaxDetailsKey {\n salesTax = 'sales-tax',\n salesTaxPercent = 'sales-tax-percent',\n salesTaxIncluding = 'sales-tax-including',\n}\n","import { Injectable } from '@angular/core';\nimport { XpsSummary } from '../../xps-summary.interface';\nimport { XpsFinance } from '../../xps-finance.interface';\nimport { XpsPurchase } from '../../xps-purchase.interface';\nimport { CartItem } from '../cart-item.interface';\nimport { CartSummary } from '../cart-summary.interface';\nimport { createPriceOrUndefined, extractMoneyCurrency } from '../price.helpers';\nimport { defaultImagePatterns } from './default-image-patterns.const';\nimport { Price } from '../price.interface';\nimport { CartLine } from '../cart-line.interface';\nimport { FinanceDetails } from '../finance-details.interface';\nimport { VatDetailsKey } from '../vat-details-key.enum';\nimport { SalesTaxDetailsKey } from './sales-tax-details-key.enum';\n\n@Injectable({ providedIn: 'root' })\nexport class SummaryFinanceDetailsAdapterService {\n public getFinanceDetails(summary: XpsSummary): FinanceDetails {\n const { purchase, finance } = summary;\n return {\n purchase: purchase,\n finance: finance,\n cartItems: this.getCartItems(purchase, finance),\n cartSummary: this.getCartSummary(finance),\n paymentCountry: this.getPaymentCountry(finance),\n };\n }\n\n private shouldShowZeroIndirectTaxRate(finance: XpsFinance | null): boolean {\n return !!(finance?.vat?.visible ?? finance?.vat_user?.visible);\n }\n\n private isSalesTaxes(finance: XpsFinance | null): boolean {\n return !!(finance?.sales_tax?.amount ?? finance?.sales_tax_user?.amount);\n }\n\n private getCartItems(\n purchase: XpsPurchase,\n finance: XpsFinance | null,\n ): CartItem[] {\n const checkouts: CartItem[] | undefined = purchase.checkout_items?.map(\n (item) => {\n return {\n imgSrc: item.image_url,\n hasDefaultImg: this.isDefaultImage(item.image_url),\n title: item.name,\n price: extractMoneyCurrency(item, false),\n priceBeforeDiscount: createPriceOrUndefined(\n item.amount_before_discount,\n item.currency,\n ),\n quantity: item.quantity,\n description: item.description,\n tax: this.getTaxForItem(finance, item.indirect_tax_rate),\n isBonus: item.is_bonus,\n };\n },\n );\n\n const virtualCurrencies: CartItem[] | undefined =\n purchase.virtual_currency?.map((item) => {\n return {\n imgSrc: item.image_url,\n hasDefaultImg: this.isDefaultImage(item.image_url),\n title: `${item.quantity} ${item.name}`,\n price: extractMoneyCurrency(item),\n description: item.description,\n isBonus: item.is_bonus,\n };\n });\n\n const virtualItems: CartItem[] | undefined = purchase.virtual_items?.map(\n (item) => {\n return {\n imgSrc: item.image_url,\n hasDefaultImg: this.isDefaultImage(item.image_url),\n title: item.name,\n price: extractMoneyCurrency(item),\n description: item.description,\n quantity: item.quantity,\n isBonus: item.is_bonus,\n };\n },\n );\n\n let checkoutArray: CartItem[] | undefined = undefined;\n if (purchase.checkout) {\n checkoutArray = [\n {\n key: 'checkout',\n title: purchase.checkout.description,\n price: extractMoneyCurrency(purchase.checkout),\n isBonus: purchase.checkout.is_bonus ?? false,\n },\n ];\n }\n\n return [\n ...(checkouts ?? []),\n ...(virtualCurrencies ?? []),\n ...(virtualItems ?? []),\n ...(checkoutArray ?? []),\n ];\n }\n\n private getCartSummary(finance: XpsFinance | null): CartSummary {\n return {\n subtotal: {\n title: 'Subtotal',\n money: createPriceOrUndefined(\n finance?.sub_total?.amount,\n finance?.sub_total?.currency,\n ),\n },\n subtotalPayment: {\n title: '',\n money: createPriceOrUndefined(\n finance?.sub_total?.payment_amount,\n finance?.sub_total?.payment_currency,\n ),\n },\n total: {\n title: 'Total',\n money: extractMoneyCurrency(finance?.total),\n },\n totalDetails: this.getTaxesForTotalDetails(finance),\n subtotalDetails: [\n ...this.getSubtotalDetails(finance),\n ...this.getTaxesForSubtotalDetails(finance),\n ],\n };\n }\n\n private getPaymentCountry(finance: XpsFinance | null): string {\n return finance?.payment_country?.iso ?? '';\n }\n\n private getTaxForItem(\n finance: XpsFinance | null,\n indirectTaxRate?: number,\n ): CartLine | null {\n if (\n indirectTaxRate ||\n (this.shouldShowZeroIndirectTaxRate(finance) && indirectTaxRate === 0)\n ) {\n if (this.isSalesTaxes(finance)) {\n return {\n key: SalesTaxDetailsKey.salesTaxPercent,\n content: `Sales tax ${indirectTaxRate}%`,\n rate: indirectTaxRate,\n };\n }\n\n if (this.isIndia(finance)) {\n return {\n key: VatDetailsKey.vatIndiaPercent,\n content: `GST ${indirectTaxRate}%`,\n rate: indirectTaxRate,\n };\n }\n\n if (this.isGhana(finance)) {\n return {\n key: VatDetailsKey.vatGhana,\n content: 'VAT, NHIL, GETFund Levy, and Covid-19 Levy',\n rate: indirectTaxRate,\n };\n }\n\n return {\n key: VatDetailsKey.vatPercent,\n content: `VAT ${indirectTaxRate}%`,\n rate: indirectTaxRate,\n };\n }\n return null;\n }\n\n private getSubtotalDetails(finance: XpsFinance | null): CartLine[] {\n if (!finance) {\n return [];\n }\n\n // subtotal details fields\n const subtotalDetailsSorting = [\n {\n key: 'discount',\n responseKey: 'discount',\n title: 'Discount',\n },\n {\n key: 'fee',\n responseKey: 'fee',\n title: 'Payment system fee',\n },\n {\n key: 'user-balance',\n responseKey: 'user_balance',\n title: 'Balance',\n },\n ];\n\n return subtotalDetailsSorting.map((sorting) => {\n const field = (finance as unknown as { [key: string]: unknown })[\n sorting.responseKey\n ] as Price;\n\n if (field) {\n return {\n key: sorting.key,\n title: sorting.title,\n money: {\n amount:\n sorting.key === 'discount' && field.amount\n ? -field.amount\n : field.amount,\n currency: field.currency,\n },\n };\n }\n return sorting;\n });\n }\n\n private getTaxesForSubtotalDetails(finance: XpsFinance | null): CartLine[] {\n const ret = [];\n\n // subtotal. VAT %p\n if (\n finance?.vat_user &&\n (finance?.vat_user?.amount ?? finance?.vat_user?.visible)\n ) {\n ret.push({\n key: this.getVatNotIncludingKeyForDetails(finance),\n title: this.getVatLabelForSubtotalDetails(finance),\n money: extractMoneyCurrency(finance?.vat_user),\n });\n }\n\n if (finance?.sales_tax_user?.amount) {\n ret.push({\n key: SalesTaxDetailsKey.salesTax,\n title: 'Sales tax',\n money: extractMoneyCurrency(finance?.sales_tax_user),\n });\n }\n\n return ret;\n }\n\n private getVatLabelForSubtotalDetails(finance: XpsFinance | null): string {\n if (this.isIndia(finance)) {\n return `GST ${finance?.vat_user?.percent ?? ''}%`;\n }\n\n if (this.isGhana(finance)) {\n return `VAT, NHIL, GETFund Levy, and Covid-19 Levy`;\n }\n\n return `VAT ${finance?.vat_user?.percent ?? ''}%`;\n }\n\n private getTaxesForTotalDetails(finance: XpsFinance | null): CartLine[] {\n const ret = [];\n\n // for totalDetails. VAT\n if (\n (finance?.vat?.amount || finance?.vat?.visible) &&\n !finance?.vat_user?.amount\n ) {\n ret.push({\n key: this.getVatIncludingKeyForDetails(finance),\n title: this.getVatLabelForTotalDetails(finance),\n money: extractMoneyCurrency(finance?.vat),\n });\n }\n\n if (finance?.sales_tax?.amount && !finance?.sales_tax_user?.amount) {\n ret.push({\n key: SalesTaxDetailsKey.salesTaxIncluding,\n title: 'Sales tax included',\n money: extractMoneyCurrency(finance?.sales_tax),\n });\n }\n\n return ret;\n }\n\n private getVatNotIncludingKeyForDetails(finance: XpsFinance | null): string {\n if (this.isIndia(finance)) {\n return VatDetailsKey.vatIndiaPercent;\n }\n\n if (this.isGhana(finance)) {\n return VatDetailsKey.vatGhana;\n }\n\n return VatDetailsKey.vatPercent;\n }\n\n private getVatIncludingKeyForDetails(finance: XpsFinance | null): string {\n if (this.isIndia(finance)) {\n return VatDetailsKey.vatIndiaPercentIncluding;\n }\n\n if (this.isGhana(finance)) {\n return VatDetailsKey.vatGhanaIncluding;\n }\n\n return VatDetailsKey.vatPercentIncluding;\n }\n\n private getVatLabelForTotalDetails(finance: XpsFinance | null): string {\n if (this.isIndia(finance)) {\n return `Including ${finance?.vat.percent ?? ''}% GST`;\n }\n\n if (this.isGhana(finance)) {\n return 'Including VAT, NHIL, GETFund Levy, and Covid-19 Levy';\n }\n\n return `Including ${finance?.vat.percent ?? ''}% VAT`;\n }\n\n private isIndia(finance: XpsFinance | null): boolean {\n return finance?.payment_country.iso === 'IN';\n }\n\n private isGhana(finance: XpsFinance | null): boolean {\n return finance?.payment_country.iso === 'GH';\n }\n\n private isDefaultImage(url: string): boolean {\n return defaultImagePatterns.some((regex) => regex.test(url));\n }\n}\n","export const fieldsWithCurrency = new Set([\n 'sum',\n 'commissionUserVatPrc',\n 'salesTaxCommission',\n 'vatUserNotIncluded',\n 'xsollaTipsAmount',\n 'paymentSystemFee',\n 'discount',\n 'userWallet',\n 'subtotal',\n 'subtotalSummaryBeforeConversion',\n 'grandTotal',\n 'subtotalBeforeDiscount',\n 'redeemedPoints',\n]);\n","export enum CountryIsoCode {\n India = 'IN',\n Ghana = 'GH',\n}\n","import { Injectable } from '@angular/core';\nimport { StatusFinanceInfo } from '../../status/status-finance-info.interface';\nimport { Status } from '../../status/status.interface';\nimport { FinanceDetails } from '../finance-details.interface';\nimport { FinanceInfoWithAmountAndCurrency } from './finance-info.interface';\nimport { FinanceInfoField } from '../../status/finance-info-field.interface';\nimport { fieldsWithCurrency } from './fields-with-currency';\nimport { CartLine } from '../cart-line.interface';\nimport { extractMoneyCurrency } from '../price.helpers';\nimport { FieldWithAmountAndCurrency } from './field-with-amount-and-currency.interface';\nimport { CartSummary } from '../cart-summary.interface';\nimport { CountryIsoCode } from '../../../country/country-iso-code.enum';\nimport { VatDetailsKey } from '../vat-details-key.enum';\nimport { XpsPurchase } from '../../xps-purchase.interface';\nimport { CartItem } from '../cart-item.interface';\nimport { XpsFinance } from '../../xps-finance.interface';\nimport { StatusOrder } from '../../status/status-order.interface';\nimport { SummaryFinanceDetailsAdapterService } from '../summary/summary-finance-details-adapter.service';\nimport { StatusEnum } from '../../status/status.enum';\n\n@Injectable({ providedIn: 'root' })\nexport class StatusFinanceDetailsAdapterService {\n public constructor(\n private readonly summarFinanceDetailsAdapterService: SummaryFinanceDetailsAdapterService,\n ) {}\n\n public getFinanceDetails(\n status: Status,\n purchase: XpsPurchase | null,\n ): FinanceDetails {\n const financeInfo = this.fillFinanceInfo(status.financeInfo);\n const country = status.paymentCountryIso;\n const order = status.order ?? null;\n\n const summaryFinance = this.convertStatusFinanceToSummaryFinance(\n purchase,\n order,\n country,\n );\n\n return {\n purchase,\n finance: summaryFinance,\n cartItems: this.getCartItems(purchase, summaryFinance),\n cartSummary: this.getCartSummary(status, financeInfo, country),\n paymentCountry: country,\n };\n }\n\n private fillFinanceInfo(\n financeInfo: StatusFinanceInfo,\n ): FinanceInfoWithAmountAndCurrency {\n return Object.keys(financeInfo).reduce(\n (\n financeInfoWithAmountAndCurrency: FinanceInfoWithAmountAndCurrency,\n key: string,\n ) => {\n const field: FinanceInfoField = financeInfo[key];\n\n if (field?.key && fieldsWithCurrency.has(field?.key)) {\n this.addAmountAndCurrencyToField(field);\n }\n return { ...financeInfoWithAmountAndCurrency, [key]: field };\n },\n {},\n );\n }\n\n private addAmountAndCurrencyToField(field: {\n key?: string;\n pref?: string;\n value?: string;\n amount?: number;\n currency?: string;\n }): void {\n const amountAndCurrency = /(^[-\\d.]+) ([A-Z]{3})$/;\n const currencyParts = field.value?.trim().match(amountAndCurrency);\n\n if (currencyParts) {\n const amountPosition = 1;\n const currencyPosition = 2;\n field.amount = Number(currencyParts[amountPosition]);\n field.currency = currencyParts[currencyPosition];\n }\n }\n\n private getCartItems(\n purchase: XpsPurchase | null,\n summaryFinance: XpsFinance | null,\n ): CartItem[] | null {\n if (!purchase) {\n return null;\n }\n\n const financeDetails =\n this.summarFinanceDetailsAdapterService.getFinanceDetails({\n purchase,\n finance: summaryFinance,\n });\n\n return financeDetails.cartItems;\n }\n\n private convertStatusFinanceToSummaryFinance(\n purchase: XpsPurchase | null,\n order: StatusOrder | null,\n country: string,\n ): XpsFinance | null {\n if (!order || !purchase?.checkout_items?.length) {\n return null;\n }\n\n const finance = {\n payment_country: {\n iso: country,\n },\n } as XpsFinance;\n\n const firstCheckoutItem = purchase?.checkout_items[0];\n const firstCheckoutItemAmount = firstCheckoutItem?.amount ?? 0;\n const oneHundredPercent = 100;\n const taxAmount =\n (firstCheckoutItemAmount * firstCheckoutItem?.indirect_tax_rate) /\n oneHundredPercent;\n\n if (order.contained_taxes?.sales_tax) {\n finance.sales_tax = {\n amount: taxAmount,\n percent: firstCheckoutItem?.indirect_tax_rate,\n currency: purchase?.checkout?.currency ?? '',\n };\n }\n\n if (order.contained_taxes?.user_vat) {\n finance.vat = {\n amount: taxAmount,\n percent: firstCheckoutItem?.indirect_tax_rate,\n currency: purchase?.checkout?.currency ?? '',\n visible: true,\n };\n }\n\n return finance;\n }\n\n private getCartSummary(\n status: Status,\n financeInfo: FinanceInfoWithAmountAndCurrency,\n country: string,\n ): CartSummary {\n const cart: CartSummary = {\n total: this.getTotal(financeInfo),\n totalDetails: this.getTotalDetails(financeInfo, country),\n subtotalDetails: [\n ...this.getSubtotalDetails(financeInfo),\n ...this.getTaxesForSubtotalDetails(financeInfo, country),\n ],\n transactionDetails: this.getTransactionDetails(status, financeInfo),\n subtotal: this.getInitialCurrencySubtotal(financeInfo) ?? null,\n subtotalPayment: this.getSubtotalPayment(financeInfo) ?? null,\n };\n\n return cart;\n }\n\n private getTotal(financeInfo: FinanceInfoWithAmountAndCurrency): CartLine {\n return {\n title: 'Total',\n money: extractMoneyCurrency(\n financeInfo.sum as FieldWithAmountAndCurrency,\n ),\n };\n }\n\n private getSubtotalPayment(\n financeInfo: FinanceInfoWithAmountAndCurrency,\n ): CartLine | null {\n if (!financeInfo?.subtotal) {\n return null;\n }\n\n return {\n title: 'Subtotal',\n money: extractMoneyCurrency(\n financeInfo.subtotal as FieldWithAmountAndCurrency,\n ),\n };\n }\n\n private getInitialCurrencySubtotal(\n financeInfo: FinanceInfoWithAmountAndCurrency,\n ): CartLine | null {\n if (!financeInfo?.subtotalSummaryBeforeConversion) {\n return {\n title: '',\n money: extractMoneyCurrency(financeInfo.subtotal),\n };\n }\n\n return {\n title: '',\n money: extractMoneyCurrency(financeInfo.subtotalSummaryBeforeConversion),\n };\n }\n\n private getTotalDetails(\n financeInfo: FinanceInfoWithAmountAndCurrency,\n country: string,\n ): CartLine[] {\n const totalDetails: CartLine[] = [];\n\n const salesTaxCommissionField = financeInfo[\n 'salesTaxCommission'\n ] as FieldWithAmountAndCurrency;\n if (salesTaxCommissionField) {\n totalDetails.push({\n title: salesTaxCommissionField.pref,\n money: {\n amount: salesTaxCommissionField.amount ?? null,\n currency: salesTaxCommissionField.currency ?? '',\n },\n });\n }\n\n const commissionUserVatPrcField = financeInfo[\n 'commissionUserVatPrc'\n ] as FieldWithAmountAndCurrency;\n\n if (commissionUserVatPrcField?.pref) {\n const percents = this.getPercents(commissionUserVatPrcField.pref);\n\n totalDetails.push({\n key: this.getVatIncludingKeyDetails(percents, country),\n title: this.geVatIncludingTitleDetails(percents, country),\n percents: percents,\n money: {\n amount: commissionUserVatPrcField.amount ?? null,\n currency: commissionUserVatPrcField.currency ?? '',\n },\n });\n }\n return totalDetails;\n }\n\n private getSubtotalDetails(\n financeInfo: FinanceInfoWithAmountAndCurrency,\n ): CartLine[] {\n const subtotalDetailsSorting = [\n {\n key: 'discount',\n responseKey: 'discount',\n title: 'Discount',\n },\n {\n key: 'fee',\n responseKey: 'paymentSystemFee',\n title: 'Payment system fee',\n },\n {\n key: 'user-balance',\n responseKey: 'userWallet',\n title: 'Balance',\n },\n ];\n\n const redeemedPoints = financeInfo['redeemedPoints'];\n\n if (redeemedPoints?.pref) {\n subtotalDetailsSorting.push({\n key: 'redeem-points',\n responseKey: 'redeemedPoints',\n title: redeemedPoints.pref,\n });\n }\n\n return subtotalDetailsSorting.reduce(\n (\n subTotalDetails: CartLine[],\n sorting: { responseKey: string; title: string },\n ) => {\n const field = financeInfo[\n sorting.responseKey\n ] as FieldWithAmountAndCurrency;\n if (field) {\n subTotalDetails.push({\n title: sorting.title,\n money: {\n amount: field.amount ?? null,\n currency: field.currency ?? '',\n },\n });\n }\n return subTotalDetails;\n },\n [],\n );\n }\n\n private getTaxesForSubtotalDetails(\n financeInfo: FinanceInfoWithAmountAndCurrency,\n country: string,\n ): CartLine[] {\n const taxesForSubtotalDetails: CartLine[] = [];\n const vatUserNotIncludedField = financeInfo[\n 'vatUserNotIncluded'\n ] as FieldWithAmountAndCurrency;\n if (vatUserNotIncludedField?.pref) {\n const percents = this.getPercents(vatUserNotIncludedField.pref);\n taxesForSubtotalDetails.push({\n key: this.getVatNotIncludingKeyDetails(percents, country),\n title: this.getVatNotIncludingTitleDetails(percents, country),\n money: {\n amount: vatUserNotIncludedField.amount ?? null,\n currency: vatUserNotIncludedField.currency ?? '',\n },\n });\n }\n\n return taxesForSubtotalDetails;\n }\n\n private getVatNotIncludingKeyDetails(\n percents: string | null,\n country: string,\n ): string {\n if (this.isIndia(country)) {\n return percents ? VatDetailsKey.vatIndiaPercent : VatDetailsKey.vatIndia;\n }\n\n if (this.isGhana(country)) {\n return VatDetailsKey.vatGhana;\n }\n\n return percents ? VatDetailsKey.vatPercent : VatDetailsKey.vat;\n }\n\n private getVatNotIncludingTitleDetails(\n percents: string | null,\n country: string,\n ): string {\n if (this.isIndia(country)) {\n return percents ? `GST ${percents}%` : 'GST';\n }\n\n if (this.isGhana(country)) {\n return 'VAT, NHIL, GETFund Levy, and Covid-19 Levy';\n }\n\n return percents ? `VAT ${percents}%` : 'VAT';\n }\n\n private getVatIncludingKeyDetails(\n percents: string | null,\n country: string,\n ): string {\n if (this.isIndia(country)) {\n return percents\n ? VatDetailsKey.vatIndiaPercentIncluding\n : VatDetailsKey.vatIndiaIncluding;\n }\n\n if (this.isGhana(country)) {\n return VatDetailsKey.vatGhanaIncluding;\n }\n\n return percents\n ? VatDetailsKey.vatPercentIncluding\n : VatDetailsKey.vatIncluding;\n }\n\n private geVatIncludingTitleDetails(\n percents: string | null,\n country: string,\n ): string {\n if (this.isIndia(country)) {\n return percents ? `Including ${percents}% GST` : 'Including GST';\n }\n\n if (this.isGhana(country)) {\n return 'Including VAT, NHIL, GETFund Levy, and Covid-19 Levy';\n }\n\n return percents ? `Including ${percents}% VAT` : `Including VAT`;\n }\n\n private isGhana(country: string): boolean {\n return country === CountryIsoCode.Ghana;\n }\n\n private isIndia(country: string): boolean {\n return country === CountryIsoCode.India;\n }\n\n private getTransactionDetails(\n status: Status,\n financeInfo: FinanceInfoWithAmountAndCurrency,\n ): CartLine[] {\n const transactionDetails: CartLine[] = [];\n if (financeInfo.invoice?.value) {\n transactionDetails.push({\n key: 'invoice',\n title: 'Transaction',\n content: financeInfo.invoice.value,\n });\n }\n\n const isCompleted =\n status.isCancelUser ||\n (status.statusState !== StatusEnum.processing &&\n status.statusState !== StatusEnum.created &&\n status.statusState !== StatusEnum.held);\n if (isCompleted && financeInfo.time?.value) {\n transactionDetails.push({\n key: 'time',\n title: 'Date',\n content: financeInfo.time.value,\n isDateLine: true,\n });\n }\n return transactionDetails;\n }\n\n private getPercents(value: string): string | null {\n const percentsTemplate = /(\\d+(.\\d+)?)/;\n const percentsMatchResult = percentsTemplate.exec(value);\n\n if (!percentsMatchResult) {\n return null;\n }\n\n return percentsMatchResult[0];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { EmitDataService } from '../emit-data.service.abstract';\nimport { Status } from '../status/status.interface';\nimport { XpsSummary } from '../xps-summary.interface';\nimport { FinanceDetails } from './finance-details.interface';\nimport { StatusFinanceDetailsAdapterService } from './status/status-finance-details-adapter.service';\nimport { SummaryFinanceDetailsAdapterService } from './summary/summary-finance-details-adapter.service';\nimport { SessionService } from '../../session/session.service';\nimport { XpsPurchase } from '../xps-purchase.interface';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\n\n@Injectable({ providedIn: 'root' })\nexport class FinanceDetailsService extends EmitDataService<FinanceDetails> {\n private readonly purchaseSessionKey = 'purchase';\n\n public constructor(\n private readonly sessionService: SessionService,\n private readonly summaryFinanceDetailsAdapterService: SummaryFinanceDetailsAdapterService,\n private readonly statusFinanceDetailsAdapterService: StatusFinanceDetailsAdapterService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {\n super();\n }\n\n public emitWithSummary(summary?: XpsSummary, needLogCart = true): void {\n if (summary) {\n const financeDetails =\n this.summaryFinanceDetailsAdapterService.getFinanceDetails(summary);\n\n if (financeDetails.purchase) {\n this.sessionService.set(\n this.purchaseSessionKey,\n financeDetails.purchase,\n );\n }\n\n super.emit(financeDetails);\n\n if (needLogCart) {\n this.logCartEvent(financeDetails);\n }\n }\n }\n\n public emitWithStatus(status?: Status): void {\n if (status) {\n const purchase = this.sessionService.get<XpsPurchase>(\n this.purchaseSessionKey,\n );\n const financeDetails =\n this.statusFinanceDetailsAdapterService.getFinanceDetails(\n status,\n purchase,\n );\n super.emit(financeDetails);\n }\n }\n\n public getDetailsFromSummary(summary: XpsSummary): FinanceDetails {\n return this.summaryFinanceDetailsAdapterService.getFinanceDetails(summary);\n }\n\n private logCartEvent(financeDetails: FinanceDetails): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.showShoppingCart,\n userBehaviourEventTypes.show,\n {\n value: financeDetails.finance ? 'success' : 'fail',\n },\n );\n }\n}\n","import { XpsApiPartRequest } from '../../../xps-api/xps-api-part-request.abstract';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport class CheckStatusRequest extends XpsApiPartRequest {\n public readonly access_token: string;\n public readonly xps_fix_command = 'status';\n public readonly invoice: number;\n public readonly section = 'getstatus';\n\n public constructor(token: string | null, invoice: number) {\n super();\n\n if (token === null) {\n throw new TokenError();\n }\n\n this.access_token = token;\n this.invoice = invoice;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { CheckStatusRequest } from './check-status-request.class';\n\nexport type CheckStatusRequestParameters = ConstructorParameters<\n typeof CheckStatusRequest\n>;\n\nexport type CheckStatusRequestFactory = (\n ...args: CheckStatusRequestParameters\n) => CheckStatusRequest;\n\nexport const checkStatusRequestFactoryToken: InjectionToken<CheckStatusRequestFactory> =\n new InjectionToken<CheckStatusRequestFactory>('CheckStatusRequest');\n\nexport const checkStatusRequestFactoryProvider: ValueProvider = {\n provide: checkStatusRequestFactoryToken,\n useValue: (...args: CheckStatusRequestParameters) =>\n new CheckStatusRequest(...args),\n};\n","import { Properties } from '../../../../properties.type';\nimport { StatusEnum } from '../../status.enum';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport class CheckStatusResponse {\n public readonly status?: StatusEnum;\n public readonly final?: boolean;\n public readonly isPaymentAccountAttached?: boolean;\n\n public constructor(parameters: Properties<CheckStatusResponse>) {\n this.status = parameters.status;\n this.final = parameters.final;\n this.isPaymentAccountAttached = parameters.isPaymentAccountAttached;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { CheckStatusResponse } from './check-status-response.class';\n\ntype ResponseParameters = ConstructorParameters<typeof CheckStatusResponse>;\n\nexport type CheckStatusResponseFactory = (\n ...args: ResponseParameters\n) => CheckStatusResponse;\n\nexport const checkStatusResponseFactoryToken: InjectionToken<CheckStatusResponseFactory> =\n new InjectionToken<CheckStatusResponseFactory>('CheckStatusResponse');\n\nexport const checkStatusResponseFactoryProvider: ValueProvider = {\n provide: checkStatusResponseFactoryToken,\n useValue: (...args: ResponseParameters) => new CheckStatusResponse(...args),\n};\n","import { Inject, Injectable } from '@angular/core';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { XpsResponse } from '../../xps-response.interface';\nimport { StatusEnum } from '../status.enum';\nimport { ResponseError } from '../../../exceptions-handling/errors/response-error.class';\nimport {\n CheckStatusRequestFactory,\n checkStatusRequestFactoryToken,\n} from './request/check-status-request.token';\nimport {\n CheckStatusResponseFactory,\n checkStatusResponseFactoryToken,\n} from './response/check-status-response.token';\nimport { XpsApiPart } from '../../xps-api/xps-api-part.abstract';\nimport { XpsApiService } from '../../xps-api/xps-api.service';\nimport { CheckStatusResponse } from './response/check-status-response.class';\nimport { XpsResponseErrorsMappingService } from '../../../errors-mapping/xps-response-errors-mapping.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CheckStatusService extends XpsApiPart<CheckStatusResponse> {\n private invoice!: number;\n\n public constructor(\n private readonly xpsApiService: XpsApiService,\n private readonly settingsService: SettingsService,\n private readonly xpsResponseErrorsMappingService: XpsResponseErrorsMappingService,\n @Inject(checkStatusRequestFactoryToken)\n private readonly requestFactory: CheckStatusRequestFactory,\n @Inject(checkStatusResponseFactoryToken)\n private readonly responseFactory: CheckStatusResponseFactory,\n ) {\n super();\n }\n\n public setRequestParams(invoice: number): void {\n this.invoice = invoice;\n }\n\n public request(): void {\n const requestParams = this.requestFactory(\n this.settingsService.token,\n this.invoice,\n );\n\n this.xpsApiService\n .directPaymentRequest(requestParams)\n .then((xpsResponse: XpsResponse) => {\n const response =\n this.xpsResponseErrorsMappingService.mapErrors(xpsResponse);\n const checkStatusResponse = this.responseFactory({\n status: response.status as StatusEnum,\n final: response.final,\n isPaymentAccountAttached: response.is_payment_account_attached,\n });\n\n this.emitResponse(checkStatusResponse);\n })\n .catch((error: Error) => {\n throw new ResponseError(error.message);\n });\n }\n}\n","export enum WebSocketStatus {\n statusChanged = 'status_changed',\n troubledStatus = 'troubled_status',\n}\n","export enum WebSocketClientType {\n nchan = 'nchan',\n centrifugo = 'centrifugo',\n}\n","export enum MessageTags {\n WS = 'webSocket',\n HEADLESS_UI = 'headlessUi',\n}\n","import { MessageTags } from './message-tags.enum';\n\nexport class TaggedMessage {\n public name = 'TaggedMessage';\n public message: string;\n public tags: MessageTags[] = [];\n public extra: object;\n\n private readonly parentTag: MessageTags = MessageTags.HEADLESS_UI;\n\n public constructor(message: string, tags?: MessageTags[], extra?: object) {\n this.message = message;\n\n this.tags = [this.parentTag];\n\n if (tags) {\n const newTags = tags.filter(\n (t, i, arr) => !this.tags.includes(t) && arr.indexOf(t) === i,\n );\n this.tags = [...this.tags, ...newTags];\n }\n\n this.extra = extra || {};\n }\n}\n","import { Observable, Subject, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { WebSocketClient } from './web-socket.interface';\nimport { WebSocketClientType } from './web-socket-client-type.enum';\nimport { LoggerService } from '../exceptions-handling/logger/logger.service';\nimport { MessageTags, TaggedMessage } from '../exceptions-handling/messages';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NchanWebSocketService implements WebSocketClient {\n public static readonly reconnectionTimeoutIncrementFactor = 2;\n\n public url!: string;\n\n public type = WebSocketClientType.nchan;\n\n private static readonly timeoutsMs = {\n reconnection: 1500,\n reconnectionMaxDeviation: 1500,\n };\n\n private openPromise: Promise<unknown> | null = null;\n\n private reconnectionTimeoutMs!: number;\n private reconnectionTimerId: ReturnType<typeof setTimeout> | null = null;\n\n private readonly openConnectionTimerId: number | undefined;\n\n private connection!: WebSocket;\n\n private readonly incomingMessages$: Subject<MessageEvent> =\n new Subject<MessageEvent>();\n private readonly successfulReconnectionEventsProxy$: Subject<void> =\n new Subject<void>();\n\n public constructor(private readonly loggerService: LoggerService) {}\n\n public async open(url: string): Promise<unknown> {\n if (url === this.url) {\n this.close();\n }\n\n if (this.openPromise && !this.isClosed()) {\n return this.openPromise;\n }\n\n this.url = url;\n\n this.openPromise = this.createConnection()\n .catch(async () => {\n return this.waitWhileNotReconnect();\n })\n .then(() => {\n this.connection.onclose = async () => this.open(url);\n });\n\n return this.openPromise;\n }\n\n public close(): void {\n this.clearReconnectionTimer();\n\n if (this.isClosed()) {\n return;\n }\n\n this.connection.onclose = null;\n this.connection.close();\n\n this.openPromise = null;\n\n this.url = '';\n }\n\n public get messages$(): Observable<string> {\n return this.incomingMessages$\n .asObservable()\n .pipe(map((event: MessageEvent<string>) => event.data));\n }\n\n public subscribeOnSuccessfulReconnection(next?: () => void): Subscription {\n return this.successfulReconnectionEventsProxy$\n .asObservable()\n .subscribe(next);\n }\n\n private isClosed(): boolean {\n if (!this.connection) {\n return true;\n }\n\n return (\n [this.connection.CLOSED, this.connection.CLOSING] as number[]\n ).includes(this.connection.readyState);\n }\n\n /* istanbul ignore next */\n private clearReconnectionTimer(): void {\n if (this.reconnectionTimerId) {\n clearTimeout(this.reconnectionTimerId);\n this.reconnectionTimerId = null;\n }\n }\n\n /* istanbul ignore next */\n private setFirstReconnectionTimeout(): void {\n const min =\n NchanWebSocketService.timeoutsMs.reconnection -\n NchanWebSocketService.timeoutsMs.reconnectionMaxDeviation;\n const max =\n NchanWebSocketService.timeoutsMs.reconnection +\n NchanWebSocketService.timeoutsMs.reconnectionMaxDeviation;\n this.reconnectionTimeoutMs =\n Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n /* istanbul ignore next */\n private incrementReconnectionTimeout(): void {\n this.reconnectionTimeoutMs =\n this.reconnectionTimeoutMs *\n NchanWebSocketService.reconnectionTimeoutIncrementFactor;\n }\n\n /* istanbul ignore next */\n private async createConnection(): Promise<unknown> {\n this.connection = new WebSocket(this.url);\n this.connection.onmessage = (event: MessageEvent) => {\n const message = event.data as string;\n this.loggerService.info(\n new TaggedMessage(`websocket message received: ${message}`, [\n MessageTags.WS,\n ]),\n );\n this.incomingMessages$.next(event);\n };\n\n return new Promise<void>((resolve, reject) => {\n this.connection.onopen = () => {\n clearTimeout(this.openConnectionTimerId);\n resolve();\n };\n\n this.connection.onclose = () => {\n reject();\n };\n });\n }\n\n /* istanbul ignore next */\n private async reconnect(): Promise<boolean> {\n this.clearReconnectionTimer();\n\n return new Promise((resolve) => {\n this.reconnectionTimerId = setTimeout(() => {\n this.createConnection()\n .then(() => resolve(true))\n .catch(() => resolve(false));\n this.incrementReconnectionTimeout();\n }, this.reconnectionTimeoutMs);\n });\n }\n\n /* istanbul ignore next */\n private async waitWhileNotReconnect(): Promise<void> {\n this.clearReconnectionTimer();\n this.setFirstReconnectionTimeout();\n\n let isConnected = false;\n\n while (!isConnected) {\n isConnected = await this.reconnect();\n }\n\n this.successfulReconnectionEventsProxy$.next();\n }\n}\n","import { ErrorTags } from './elk-error-types.enum';\n\nimport { TaggedError } from './tagged-error.class';\n\nexport class WsError extends TaggedError {\n public constructor(message: string, channelName: string, tags?: ErrorTags[]) {\n tags = tags ? [...tags, ErrorTags.WS] : [ErrorTags.WS];\n\n const messageWithChannel = `${message}. ChannelName - ${channelName}`;\n\n super(messageWithChannel, tags);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport type {\n Centrifuge,\n DisconnectedContext,\n PublicationContext,\n Subscription as CentrifugeSubscription,\n} from 'centrifuge';\nimport { StreamPosition, SubscriptionOptions } from 'centrifuge/build/types';\nimport { WsError } from '../exceptions-handling/errors/ws-error.class';\nimport { ErrorTags } from '../exceptions-handling/errors/elk-error-types.enum';\nimport { WebSocketClient } from './web-socket.interface';\nimport { WebSocketClientType } from './web-socket-client-type.enum';\nimport { LoggerService } from '../exceptions-handling/logger/logger.service';\nimport { MessageTags, TaggedMessage } from '../exceptions-handling/messages';\nimport { TaggedError } from '../exceptions-handling/errors';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CentrifugoWebSocketService implements WebSocketClient {\n public static readonly reconnectionTimeoutIncrementFactor = 2;\n\n public type = WebSocketClientType.centrifugo;\n\n private static readonly timeoutsMs = {\n reconnection: 1000,\n reconnectionMaxDeviation: 1000,\n };\n\n private reconnectionTimeoutMs!: number;\n private reconnectionTimerId: ReturnType<typeof setTimeout> | null = null;\n\n private readonly openConnectionTimerId: number | undefined;\n\n private connection!: Centrifuge;\n private subscription!: CentrifugeSubscription;\n private subscriptionPosition?: StreamPosition;\n private isConnectionOpen = false;\n private isConnecting = false;\n private url!: string;\n private channel!: string;\n private prevSubscribedChannel?: string;\n\n private readonly incomingMessages$: Subject<PublicationContext> =\n new Subject<PublicationContext>();\n\n private readonly successfulReconnectionEventsProxy$: Subject<void> =\n new Subject<void>();\n\n public constructor(private readonly loggerService: LoggerService) {}\n\n public async open(url: string, channel: string): Promise<void> {\n if (url === this.url && channel === this.channel) {\n this.close();\n }\n\n try {\n this.url = url;\n this.channel = channel;\n await this.createConnection(url, channel);\n } catch (error: unknown) {\n // @ts-expect-error error is unknown\n const message = (error?.message || error) as string;\n const wsError = new WsError(\n `unknown websocket error: ${message}`,\n channel,\n );\n\n this.loggerService.error(wsError);\n }\n }\n\n public close(): void {\n this.clearReconnectionTimer();\n\n if (!this.isConnectionOpen) {\n return;\n }\n\n this.connection?.disconnect();\n\n this.url = '';\n this.channel = '';\n }\n\n public get messages$(): Observable<string> {\n return (\n this.incomingMessages$\n .asObservable()\n // event don't respect type from argument, it's weird\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n .pipe(map((event) => event.data))\n );\n }\n\n public subscribeOnSuccessfulReconnection(next?: () => void): Subscription {\n return this.successfulReconnectionEventsProxy$\n .asObservable()\n .subscribe(next);\n }\n\n /* istanbul ignore next */\n private clearReconnectionTimer(): void {\n if (this.reconnectionTimerId) {\n clearTimeout(this.reconnectionTimerId);\n this.reconnectionTimerId = null;\n }\n }\n\n /* istanbul ignore next */\n private setFirstReconnectionTimeout(): void {\n const min =\n CentrifugoWebSocketService.timeoutsMs.reconnection -\n CentrifugoWebSocketService.timeoutsMs.reconnectionMaxDeviation;\n const max =\n CentrifugoWebSocketService.timeoutsMs.reconnection +\n CentrifugoWebSocketService.timeoutsMs.reconnectionMaxDeviation;\n this.reconnectionTimeoutMs =\n Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n /* istanbul ignore next */\n private incrementReconnectionTimeout(): void {\n this.reconnectionTimeoutMs =\n this.reconnectionTimeoutMs *\n CentrifugoWebSocketService.reconnectionTimeoutIncrementFactor;\n }\n\n /* istanbul ignore next */\n private async getCentrifugoClient(): Promise<typeof Centrifuge> {\n return import('centrifuge').then((module) => module.Centrifuge);\n }\n\n /* istanbul ignore next */\n private async createConnection(\n url?: string,\n channel?: string,\n ): Promise<void> {\n if (this.isConnectionOpen || this.isConnecting) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const CentrifugeClient = await this.getCentrifugoClient();\n\n const websocketUrl = url ?? this.url;\n const websocketChannel = channel ?? this.channel;\n\n this.connection = new CentrifugeClient(websocketUrl, {\n debug: true,\n maxReconnectDelay: 1500,\n maxServerPingDelay: 1000,\n });\n\n return new Promise<void>((resolve, reject) => {\n this.connection\n .on('connecting', () => {\n this.isConnecting = true;\n })\n .on('connected', () => {\n this.onConnect();\n resolve();\n })\n .on('disconnected', (ctx) => {\n this.onDisconnect(ctx, websocketChannel);\n reject();\n })\n .on('error', (ctx) => {\n const message = `code ${ctx.error.code} - ${ctx.error.message}`;\n\n this.loggerService.error(\n new TaggedError(`connection error: ${message}`, [ErrorTags.WS], {\n channel: websocketChannel,\n }),\n );\n })\n .connect();\n\n this.subscription = this.connection.newSubscription(\n websocketChannel,\n this.getSubscriptionOptions(websocketChannel),\n );\n\n this.subscription\n .on('subscribed', (ctx) => {\n this.subscriptionPosition = ctx.streamPosition;\n this.prevSubscribedChannel = websocketChannel;\n })\n .on('publication', (ctx) => {\n const message = ctx.data as string;\n\n this.loggerService.info(\n new TaggedMessage(\n `websocket message received: ${message}`,\n [MessageTags.WS],\n { channel: websocketChannel },\n ),\n );\n\n this.incomingMessages$.next(ctx);\n })\n .on('error', (ctx) => {\n const message = `code ${ctx.error.code} - ${ctx.error.message}`;\n\n this.loggerService.error(\n new TaggedError(`subscription error: ${message}`, [ErrorTags.WS], {\n channel: websocketChannel,\n }),\n );\n })\n .subscribe();\n });\n }\n\n private onConnect(): void {\n clearTimeout(this.openConnectionTimerId);\n this.isConnecting = false;\n this.isConnectionOpen = true;\n }\n\n private onDisconnect(\n ctx: DisconnectedContext,\n websocketChannel: string,\n ): void {\n this.isConnecting = false;\n this.isConnectionOpen = false;\n\n /* If connection error, cause any connection error isn't 0 */\n if (ctx.code !== 0) {\n const message = `code ${ctx.code} - ${ctx.reason}`;\n\n this.loggerService.error(\n new TaggedError(`disconnected error: ${message}`, [ErrorTags.WS], {\n channel: websocketChannel,\n }),\n );\n\n (async () => {\n await this.waitWhileNotReconnect();\n })();\n }\n }\n\n private async reconnect(): Promise<boolean> {\n this.clearReconnectionTimer();\n\n return new Promise((resolve) => {\n this.reconnectionTimerId = setTimeout(() => {\n this.createConnection()\n .then(() => resolve(true))\n .catch(() => resolve(false));\n this.incrementReconnectionTimeout();\n }, this.reconnectionTimeoutMs);\n });\n }\n\n private async waitWhileNotReconnect(): Promise<void> {\n this.clearReconnectionTimer();\n this.setFirstReconnectionTimeout();\n\n let isConnected = false;\n\n const beforeTimer = performance.now();\n\n while (!isConnected) {\n isConnected = await this.reconnect();\n }\n\n const afterTimer = performance.now();\n\n const timerDuration = afterTimer - beforeTimer;\n\n this.loggerService.error(\n new TaggedError(\n `fallback to reconnection timer: duration ${timerDuration}ms`,\n [ErrorTags.WS],\n {\n channel: this.channel,\n },\n ),\n );\n\n this.successfulReconnectionEventsProxy$.next();\n }\n\n private getSubscriptionOptions(\n websocketChannel: string,\n ): Partial<SubscriptionOptions> {\n const options: Partial<SubscriptionOptions> = {\n recoverable: true,\n };\n\n if (\n websocketChannel === this.prevSubscribedChannel &&\n this.subscriptionPosition\n ) {\n options.since = this.subscriptionPosition;\n }\n\n return options;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NchanWebSocketService } from './nchan-web-socket.service';\nimport { CentrifugoWebSocketService } from './centrifugo-web-socket.service';\nimport { WebSocketClient } from './web-socket.interface';\nimport { WebSocketClientType } from './web-socket-client-type.enum';\n\n// @todo: remove this factory and switch to centrifugo client after centrifugo issues resolved\n@Injectable({\n providedIn: 'root',\n})\nexport class WebSocketFactory {\n public constructor(\n private readonly nchanWebSocket: NchanWebSocketService,\n private readonly centrifugoWebSocket: CentrifugoWebSocketService,\n ) {}\n\n public createWebSocketClient(\n url: string,\n clientType: WebSocketClientType,\n ): WebSocketClient {\n if (clientType === WebSocketClientType.centrifugo) {\n return this.centrifugoWebSocket;\n }\n\n return this.nchanWebSocket;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { WebSocketFactory } from '../../../web-socket/web-socket.factory';\nimport { WebSocketClient } from '../../../web-socket/web-socket.interface';\nimport { WebSocketClientType } from '../../../web-socket/web-socket-client-type.enum';\nimport { WebSocketStatus } from './websocket-status.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketStatusService {\n private webSocketSubscription: Subscription | undefined;\n private webSocketReconnectionSubscription: Subscription | undefined;\n private readonly reinsuranceCheckStatus: {\n timeoutId: ReturnType<typeof setTimeout> | null;\n readonly timeoutMs: number;\n } = {\n timeoutId: null,\n timeoutMs: 180000,\n };\n\n private readonly needCheckStatusSubject = new Subject<void>();\n private readonly statusChangedSubject = new Subject<void>();\n\n private webSocketClient: WebSocketClient | null = null;\n\n public get needCheckStatus$(): Observable<void> {\n return this.needCheckStatusSubject.asObservable();\n }\n public get statusChanged$(): Observable<void> {\n return this.statusChangedSubject.asObservable();\n }\n\n public constructor(private readonly webSocketFactory: WebSocketFactory) {}\n\n public async checkStatusWithWebSocket(\n webSocketUrl: string,\n webSocketChannelName: string,\n webSocketClientType: WebSocketClientType,\n ): Promise<void> {\n this.webSocketClient = this.webSocketFactory.createWebSocketClient(\n webSocketUrl,\n webSocketClientType,\n );\n\n await this.webSocketClient.open(webSocketUrl, webSocketChannelName);\n\n this.webSocketSubscription?.unsubscribe();\n this.webSocketSubscription = this.webSocketClient.messages$.subscribe(\n (message) => this.statusProcessing(message),\n );\n\n this.webSocketReconnectionSubscription =\n this.webSocketClient.subscribeOnSuccessfulReconnection(() => {\n this.needCheckStatusSubject.next();\n });\n this.needCheckStatusSubject.next();\n this.startReinsuranceCheckTimeout();\n }\n\n public closeWebSocket(): void {\n this.removeSubscription();\n this.webSocketClient?.close();\n this.clearReinsuranceCheckTimeout();\n }\n\n public startReinsuranceCheckTimeout(): void {\n this.clearReinsuranceCheckTimeout();\n this.reinsuranceCheckStatus.timeoutId = setTimeout(() => {\n this.needCheckStatusSubject.next();\n }, this.reinsuranceCheckStatus.timeoutMs);\n }\n\n private clearReinsuranceCheckTimeout(): void {\n if (this.reinsuranceCheckStatus.timeoutId) {\n clearTimeout(this.reinsuranceCheckStatus.timeoutId);\n this.reinsuranceCheckStatus.timeoutId = null;\n }\n }\n\n private statusProcessing(message: string): void {\n if (message === WebSocketStatus.statusChanged) {\n this.statusChangedSubject.next();\n this.closeWebSocket();\n this.clearReinsuranceCheckTimeout();\n }\n if (message === WebSocketStatus.troubledStatus) {\n this.clearReinsuranceCheckTimeout();\n this.closeWebSocket();\n }\n }\n\n private removeSubscription(): void {\n this.webSocketSubscription?.unsubscribe();\n this.webSocketReconnectionSubscription?.unsubscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { filter, Observable, Subject, takeUntil } from 'rxjs';\nimport { StatusRequestService } from '../status-request/status-request.service';\nimport { CheckStatusService } from '../check-status/check-status.service';\nimport { WebsocketStatusService } from '../websocket-status/websocket-status.service';\nimport { StatusSettings } from '../status-settings.interface';\nimport { StatusEnum } from '../status.enum';\nimport { StatusUpdated } from '../status-updated.interface';\nimport { StatusResponse } from '../status-request/response/status-response.class';\nimport { CheckStatusResponse } from '../check-status/response/check-status-response.class';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ListenStatusService {\n public isListening = false;\n\n private readonly websocketOpenedSubject = new Subject<StatusSettings>();\n private readonly statusUpdatedSubject = new Subject<StatusUpdated>();\n private readonly statusDoneSubject = new Subject<StatusSettings>();\n private destroy$ = new Subject<void>();\n\n public get websocketOpened$(): Observable<StatusSettings> {\n return this.websocketOpenedSubject.asObservable();\n }\n\n public get statusUpdated$(): Observable<StatusUpdated> {\n return this.statusUpdatedSubject.asObservable();\n }\n\n public constructor(\n private readonly statusService: StatusRequestService,\n private readonly checkStatusService: CheckStatusService,\n private readonly websocketStatusService: WebsocketStatusService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {}\n\n public listen(invoice: number): Observable<StatusSettings> {\n if (this.isListening) {\n this.stopListening();\n }\n\n this.destroy$ = new Subject<void>();\n this.isListening = true;\n\n this.subscribeStatusUpdate(invoice);\n this.subscribeCheckStatusUpdate();\n this.subscribeWebsocketEvent();\n\n this.checkStatusService.setRequestParams(invoice);\n\n return this.statusDoneSubject.asObservable();\n }\n\n public stopListening(): void {\n this.isListening = false;\n this.websocketStatusService.closeWebSocket();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private subscribeStatusUpdate(invoice: number): void {\n this.statusService.response$\n .pipe(\n filter((statusResponse) => {\n return statusResponse?.status?.invoice === Number(invoice);\n }),\n takeUntil(this.destroy$),\n )\n .subscribe((statusResponse: StatusResponse | null) => {\n if (!statusResponse?.status) {\n return;\n }\n\n const statusSettings = {\n statusState: statusResponse.status.statusState,\n isCancelUser: statusResponse.status.isCancelUser,\n needWebSocket: statusResponse.status.needToCheck,\n backUrlSettings: statusResponse.status.backUrlSettings,\n autoRedirect: statusResponse.status.autoRedirect,\n webSocketUrl: statusResponse.status.webSocketUrl,\n webSocketChannelName: statusResponse.status.webSocketChannelName,\n webSocketClientType: statusResponse.status.webSocketClientType,\n };\n\n this.statusUpdatedSubject.next({\n statusResponse: statusResponse,\n statusSettings: statusSettings,\n });\n\n const isStatusError =\n statusSettings.statusState === StatusEnum.canceled ||\n statusSettings.statusState === StatusEnum.error ||\n statusSettings.isCancelUser;\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.changeStatus,\n userBehaviourEventTypes.manual,\n {\n instanceId: statusResponse.status.pid,\n value: statusResponse.status.statusState,\n },\n );\n\n if (isStatusError) {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.openStatusError,\n userBehaviourEventTypes.manual,\n {\n instanceId: statusResponse.status.pid,\n },\n );\n }\n\n if (statusSettings.needWebSocket) {\n this.openWebsocket(statusSettings);\n return;\n }\n\n this.stopListening();\n this.statusDoneSubject.next(statusSettings);\n });\n }\n\n private subscribeCheckStatusUpdate(): void {\n this.checkStatusService.response$\n .pipe(takeUntil(this.destroy$))\n .subscribe((checkStatusResponse: CheckStatusResponse | null) => {\n if (!checkStatusResponse?.status) return;\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.checkStatusUpdate,\n userBehaviourEventTypes.manual,\n {\n value: checkStatusResponse.status ?? '',\n },\n );\n\n if (checkStatusResponse.status === StatusEnum.done) {\n this.statusService.request();\n this.websocketStatusService.closeWebSocket();\n return;\n }\n\n if (checkStatusResponse.final === false) {\n this.websocketStatusService.startReinsuranceCheckTimeout();\n return;\n }\n });\n }\n\n private subscribeWebsocketEvent(): void {\n this.websocketStatusService.needCheckStatus$\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.checkStatusService.request());\n\n this.websocketStatusService.statusChanged$\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.statusService.request());\n }\n\n private openWebsocket(statusSettings: StatusSettings): void {\n void this.websocketStatusService.checkStatusWithWebSocket(\n statusSettings.webSocketUrl,\n statusSettings.webSocketChannelName,\n statusSettings.webSocketClientType,\n );\n this.websocketOpenedSubject.next(statusSettings);\n }\n}\n","export enum TitleClass {\n done = 'done',\n cancel = 'cancel',\n cancelUser = 'canceluser',\n}\n","export enum SavePaymentMethodStatus {\n success = 'success',\n failed = 'failed',\n}\n","import { AppError } from '../exceptions-handling/errors/app-error.class';\n\nexport class XpsResponseError extends AppError {\n public constructor(message?: string) {\n super('XPS response failed' + (message ? `: \"${message}\".` : '.'));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { lastValueFrom, Observable, Subject } from 'rxjs';\nimport { HttpHeaders } from '@angular/common/http';\nimport { tap } from 'rxjs/operators';\nimport { SavedPaymentAccountChanges } from './saved-payment-account-changes.interface';\nimport { SettingsService } from '../../../../settings/settings.service';\nimport { SecureApiClient } from '../../../../http/secure-api/secure-api.service';\nimport { XpsResponseError } from '../../../xps-response.error';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SavedPaymentAccountChangesService {\n private readonly apiRoute = 'savedmethods/newaccountinfo';\n private readonly response = new Subject<SavedPaymentAccountChanges | null>();\n\n public constructor(\n private readonly settingsService: SettingsService,\n private readonly secureApi: SecureApiClient,\n ) {}\n\n public get response$(): Observable<SavedPaymentAccountChanges | null> {\n return this.response.asObservable();\n }\n\n public async request(invoice: number): Promise<SavedPaymentAccountChanges> {\n const requestParameters = {\n access_token: this.settingsService.token,\n invoice_id: invoice,\n };\n\n return lastValueFrom(\n this.secureApi\n .post<SavedPaymentAccountChanges>(\n this.apiRoute,\n new URLSearchParams(\n requestParameters as unknown as { [key: string]: string },\n ),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(\n tap((value: SavedPaymentAccountChanges) => {\n this.response.next(value);\n }),\n ),\n ).catch((error: Error) => {\n throw new XpsResponseError(error.message);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { StatusRequestParams } from '../status-request/status-request-params.interface';\nimport { Status } from '../status.interface';\nimport { firstValueFrom, Subscription } from 'rxjs';\nimport { StatusRequestService } from '../status-request/status-request.service';\nimport { StatusUpdatedActionCreator } from '../../actions/status-updated/status-updated.action.class';\nimport { ListenStatusService } from '../listen-status/listen-status.service';\nimport { SavedPaymentAccountChanges } from './api/saved-payment-account-changes.interface';\nimport { SavedPaymentAccountChangesService } from './api/saved-payment-account-changes.service';\nimport { TitleClass } from '../title-class.enum';\nimport { NextActionService } from '../../actions/next-action.service';\nimport { StatusEnum } from '../status.enum';\nimport { SavePaymentMethodStatus } from './save-payment-method-status.enum';\nimport { CheckStatusService } from '../check-status/check-status.service';\nimport { CheckStatusResponse } from '../check-status/response/check-status-response.class';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SavePaymentMethodStatusService {\n private savePaymentMethodStatus?: SavePaymentMethodStatus;\n private listenStatusSubscription!: Subscription;\n private statusChecked = false;\n private accountData?: SavedPaymentAccountChanges;\n private status?: Status | null;\n\n public constructor(\n private readonly statusRequestService: StatusRequestService,\n private readonly listenStatusService: ListenStatusService,\n private readonly savedPaymentAccountChangesService: SavedPaymentAccountChangesService,\n private readonly nextActionService: NextActionService,\n private readonly checkStatusService: CheckStatusService,\n private readonly statusUpdatedActionCreator: StatusUpdatedActionCreator,\n ) {}\n\n public async getStatus(params: StatusRequestParams): Promise<Status> {\n if (!this.accountData || !this.status) {\n this.statusRequestService.setRequestParams(params);\n this.statusRequestService.request();\n\n const statusResponse = await firstValueFrom(\n this.statusRequestService.response$,\n );\n\n this.status = statusResponse.status;\n this.status.isSavePaymentAccount = true;\n\n this.accountData = await this.getPaymentAccountData(params.invoice);\n }\n\n if (\n this.savingFailedOrCancel(this.status) ||\n (this.accountData && this.savingSuccessful(this.accountData, this.status))\n ) {\n return this.status;\n }\n\n if (!this.statusChecked) {\n this.checkStatus(params);\n this.status.statusState = StatusEnum.processing;\n return this.status;\n }\n\n this.statusChecked = false;\n this.status.statusState = StatusEnum.error;\n const outStatus = { ...this.status };\n this.status = null;\n return outStatus;\n }\n\n private checkStatus(params: StatusRequestParams): void {\n if (!this.statusChecked) {\n this.statusChecked = true;\n }\n this.startWaitingStatusUpdates(params.invoice);\n this.statusRequestService.request();\n }\n\n private savingFailedOrCancel(status?: Status | null): boolean {\n return (\n status?.titleClass === TitleClass.cancel ||\n status?.titleClass === TitleClass.cancelUser\n );\n }\n\n private savingSuccessful(\n accountData: SavedPaymentAccountChanges,\n status?: Status | null,\n checkStatus?: CheckStatusResponse,\n ): boolean {\n return !!(\n status?.titleClass === TitleClass.done &&\n (accountData?.new_account || checkStatus?.isPaymentAccountAttached)\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n private getPaymentAccountData(\n invoice: number,\n ): Promise<SavedPaymentAccountChanges> {\n return this.savedPaymentAccountChangesService.request(invoice);\n }\n\n private startWaitingStatusUpdates(invoice: number): void {\n if (this.listenStatusSubscription) {\n this.listenStatusSubscription.unsubscribe();\n this.listenStatusService.stopListening();\n }\n\n this.listenStatusService.listen(invoice);\n\n this.listenStatusSubscription =\n this.listenStatusService.statusUpdated$.subscribe(\n ({ statusResponse }) => {\n if (!statusResponse?.status) {\n return;\n }\n this.status = statusResponse.status;\n\n void firstValueFrom(this.checkStatusService.response$).then(\n (checkStatusResponse) => {\n if (checkStatusResponse?.final && statusResponse.status) {\n this.loadNewPaymentAccountData(\n statusResponse.status,\n checkStatusResponse,\n );\n }\n },\n );\n },\n );\n }\n\n private loadNewPaymentAccountData(\n status: Status,\n checkStatus: CheckStatusResponse,\n ): void {\n if (!status.invoice) {\n return;\n }\n void this.getPaymentAccountData(status.invoice).then(\n (accountChanges: SavedPaymentAccountChanges) => {\n if (accountChanges) {\n this.accountData = accountChanges;\n this.handleSavingStatus(status, accountChanges, checkStatus);\n }\n },\n );\n }\n\n private handleSavingStatus(\n status: Status,\n account: SavedPaymentAccountChanges,\n checkStatus: CheckStatusResponse,\n ): void {\n if (this.savingSuccessful(account, status, checkStatus)) {\n this.savePaymentMethodStatus = SavePaymentMethodStatus.success;\n } else {\n this.savePaymentMethodStatus = SavePaymentMethodStatus.failed;\n }\n\n this.listenStatusService.stopListening();\n this.listenStatusSubscription.unsubscribe();\n\n const isSavePaymentMethod = true;\n\n this.nextActionService.emitFlowUpdates(\n this.statusUpdatedActionCreator.getActionData({\n statusResponse: status,\n isSavePaymentMethodMode: isSavePaymentMethod,\n savePaymentMethodStatus: this.savePaymentMethodStatus,\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { firstValueFrom, Observable, skip } from 'rxjs';\nimport { StatusRequestService } from './status-request/status-request.service';\nimport { StatusRequestParams } from './status-request/status-request-params.interface';\nimport { ListenStatusService } from './listen-status/listen-status.service';\nimport { Status } from './status.interface';\nimport { NextActionService } from '../actions/next-action.service';\nimport { StatusUpdatedActionCreator } from '../actions/status-updated/status-updated.action.class';\nimport { UrlService } from '../../url/url.service';\nimport { requiredStatusSearchParams } from './status-request/required-status-search-params.const';\nimport { statusSearchParamsMap } from './status-request/status-search-params.map';\nimport { FinanceDetailsService } from '../finance-details/finance-details.service';\nimport { SavePaymentMethodStatusService } from './save-payment-method-status/save-payment-method-status.service';\nimport { XpsBoolean } from '../../xps-boolean.enum';\nimport { StatusSettings } from './status-settings.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StatusService {\n public constructor(\n private readonly urlService: UrlService,\n private readonly statusRequestService: StatusRequestService,\n private readonly financeDetailsService: FinanceDetailsService,\n private readonly listenStatusService: ListenStatusService,\n private readonly nextActionService: NextActionService,\n private readonly savePaymentMethodStatusService: SavePaymentMethodStatusService,\n private readonly statusUpdatedActionCreator: StatusUpdatedActionCreator,\n ) {}\n\n public async getStatus(params: StatusRequestParams): Promise<Status> {\n const isSavePaymentMethodMode =\n params?.isSavePaymentAccount === XpsBoolean.true;\n if (isSavePaymentMethodMode) {\n return this.savePaymentMethodStatusService.getStatus(params);\n }\n\n this.statusRequestService.setRequestParams(params);\n\n this.startWaitingStatusUpdates(params.invoice);\n\n this.statusRequestService.request();\n\n const statusResponse = await firstValueFrom(\n this.statusRequestService.response$,\n );\n\n this.financeDetailsService.emitWithStatus(statusResponse.status);\n\n return statusResponse.status;\n }\n\n public async getStatusWithUrlSearchParams(url?: string): Promise<Status> {\n const searchParams = this.getRequestParamsFromUrl(url);\n\n if (!searchParams) {\n throw new Error('No required search params to get status');\n }\n\n return this.getStatus(searchParams);\n }\n\n public listenFinalStatus(invoice: number): Observable<StatusSettings> {\n return this.listenStatusService.listen(invoice);\n }\n\n private getRequestParamsFromUrl(url?: string): StatusRequestParams | null {\n const searchParams = this.urlService.getSearchParams(url ?? '');\n const keys = new Set(Object.keys(searchParams));\n\n if (\n requiredStatusSearchParams.some((requiredKey) => !keys.has(requiredKey))\n ) {\n return null;\n }\n\n const params: { [key: string]: string | number } = {};\n statusSearchParamsMap.forEach((settings, key) => {\n params[settings.key] = settings.converter(searchParams[key]);\n });\n\n return params as unknown as StatusRequestParams;\n }\n\n private startWaitingStatusUpdates(invoice: number): void {\n this.listenStatusService.listen(invoice);\n\n this.listenStatusService.statusUpdated$\n .pipe(skip(1))\n .subscribe(({ statusResponse }) => {\n this.financeDetailsService.emitWithStatus(statusResponse.status);\n\n this.nextActionService.emitFlowUpdates(\n this.statusUpdatedActionCreator.getActionData({ statusResponse }),\n );\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { EmitDataService } from '../emit-data.service.abstract';\nimport { CreditCardState } from './credit-card-state.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CreditCardStateService extends EmitDataService<CreditCardState> {}\n","import { Injectable } from '@angular/core';\nimport { googlePayPid } from '../../../sdk-payment-systems/sdk-payment-methods.const';\nimport { FieldNames } from '../../field-names.enum';\nimport { InitializeResponse } from '../../requests/initialize/response/initialize-response.class';\nimport { InitializeActionCreator } from '../action.interface';\nimport {\n InitializeSpecialButtonAction,\n SpecialButtonActionType,\n} from './special-button.action.type';\nimport { ErrorTags } from '../../../exceptions-handling/errors/elk-error-types.enum';\nimport { LoggerService } from '../../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../../exceptions-handling/errors';\n\n@Injectable()\nexport class InitializeSpecialButtonActionCreator\n implements InitializeActionCreator\n{\n public type: SpecialButtonActionType = 'special_button';\n private readonly pids: number[] = [googlePayPid];\n private readonly sdkPaymentMethodsName = new Map<number, string>([\n [googlePayPid, 'google-pay'],\n ]);\n\n public constructor(private readonly loggerService: LoggerService) {}\n\n public getActionData(\n response: InitializeResponse,\n ): InitializeSpecialButtonAction {\n return {\n type: this.type,\n data: {\n buttonName: this.getPaymentMethodName(response.paymentForm?.pid),\n },\n };\n }\n\n public isSuitable(response: InitializeResponse): boolean {\n if (!response.paymentForm) return false;\n\n const hasGooglePayInitDataField = response.paymentForm.fields.some(\n (field) => field.name === FieldNames.googlePayInitData,\n );\n\n return (\n this.pids.includes(response.paymentForm.pid) && hasGooglePayInitDataField\n );\n }\n\n private getPaymentMethodName(pid = 0): string {\n const buttonName = this.sdkPaymentMethodsName.get(pid);\n\n if (!buttonName) {\n this.loggerService.error(\n new TaggedError(\n 'No special button for provided pid',\n [ErrorTags.GOOGLEPAY],\n {\n pid,\n },\n ),\n );\n throw new Error('Special button not found');\n }\n\n return buttonName;\n }\n}\n","import { InjectionToken, ProviderToken } from '@angular/core';\nimport { InitializeSpecialButtonActionCreator } from './special-button/special-button.action.class';\nimport { InitializeActionCreator } from './action.interface';\n\nexport type InitializeNextActionTokens = Array<\n ProviderToken<InitializeActionCreator>\n>;\n\nexport const initializeNextActionsToken =\n new InjectionToken<InitializeActionCreator>('InitializeNextActions');\n\nexport const initializeNextActions: InitializeNextActionTokens = [\n InitializeSpecialButtonActionCreator,\n];\n","import { Inject, Injectable, Injector, ProviderToken } from '@angular/core';\nimport { InitializeResponse } from '../requests/initialize/response/initialize-response.class';\nimport { InitializeActionCreator } from './action.interface';\nimport {\n initializeNextActionsToken,\n InitializeNextActionTokens,\n} from './initialize-next-actions';\nimport { InitializeNextAction } from './next-action.interface';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InitializeNextActionService {\n private readonly initializeNextActionsList: InitializeActionCreator[] = [];\n\n public constructor(\n @Inject(initializeNextActionsToken)\n private readonly initializeNextActionTokens: InitializeNextActionTokens,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly injector: Injector,\n ) {\n this.fillNextActionsList();\n }\n\n public getNextAction(\n response: InitializeResponse,\n ): InitializeNextAction | null {\n const nextAction = this.findNextAction(response);\n\n if (!nextAction) return null;\n\n this.logNextAction(nextAction);\n return nextAction.getActionData(response);\n }\n\n private fillNextActionsList(): void {\n this.initializeNextActionTokens.forEach(\n (nextAction: ProviderToken<InitializeActionCreator>) => {\n const item = this.injector.get<InitializeActionCreator>(nextAction);\n this.initializeNextActionsList.push(item);\n },\n );\n }\n\n private findNextAction(\n response: InitializeResponse,\n ): InitializeActionCreator | undefined {\n return this.initializeNextActionsList.find(\n (nextAction: InitializeActionCreator) => {\n return nextAction.isSuitable(response);\n },\n );\n }\n\n private logNextAction(nextAction: InitializeActionCreator): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.initializeNextAction,\n 'manual',\n { value: nextAction.type },\n );\n }\n}\n","export enum ThreeDsStatusWebSocketTypes {\n status3DS_changed = 'status3DS_changed',\n}\n","export enum ThreeDsStatusTypes {\n completed = 'completed',\n challenge = 'challenge',\n checkout = 'checkout',\n collectDfp = 'collect_dfp',\n}\n","export class StatusThreeDsRequest {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public readonly access_token: string;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public readonly threeDSTrXid: string;\n\n public constructor(token: string, threeDsId: string) {\n this.access_token = token;\n this.threeDSTrXid = threeDsId;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { StatusThreeDsRequest } from './status-three-ds-request.class';\n\nexport type StatusThreeDsRequestParameters = ConstructorParameters<\n typeof StatusThreeDsRequest\n>;\n\nexport type StatusThreeDsRequestFactory = (\n ...args: StatusThreeDsRequestParameters\n) => StatusThreeDsRequest;\n\nexport const statusThreeDsRequestFactoryToken: InjectionToken<StatusThreeDsRequestFactory> =\n new InjectionToken<StatusThreeDsRequestFactory>('StatusThreeDsRequest');\n\nexport const statusThreeDsRequestFactoryProvider: ValueProvider = {\n provide: statusThreeDsRequestFactoryToken,\n useValue: (...args: StatusThreeDsRequestParameters) =>\n new StatusThreeDsRequest(...args),\n};\n","import { ThreeDsCheckoutForm } from '../three-ds-checkout-form.interface';\nimport { Properties } from '../../../../../properties.type';\nimport { ThreeDsForm } from '../../../three-ds-form.interface';\n\nexport class StatusThreeDsResponse {\n public readonly status: string;\n public readonly checkoutForm?: ThreeDsCheckoutForm;\n public readonly collectDfpParameters?: ThreeDsForm;\n\n public constructor(params: Properties<StatusThreeDsResponse>) {\n this.status = params.status;\n this.checkoutForm = params.checkoutForm;\n this.collectDfpParameters = params.collectDfpParameters;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { StatusThreeDsResponse } from './status-three-ds-response.class';\n\nexport type StatusThreeDsResponseParameters = ConstructorParameters<\n typeof StatusThreeDsResponse\n>;\n\nexport type StatusThreeDsResponseFactory = (\n ...args: StatusThreeDsResponseParameters\n) => StatusThreeDsResponse;\n\nexport const statusThreeDsResponseFactoryToken: InjectionToken<StatusThreeDsResponseFactory> =\n new InjectionToken<StatusThreeDsResponseFactory>('StatusThreeDsResponse');\n\nexport const statusThreeDsResponseFactoryProvider: ValueProvider = {\n provide: statusThreeDsResponseFactoryToken,\n useValue: (...args: StatusThreeDsResponseParameters) =>\n new StatusThreeDsResponse(...args),\n};\n","import { lastValueFrom, Observable, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { SecureApiClient } from '../../../../http/secure-api/secure-api.service';\nimport { SettingsService } from '../../../../settings/settings.service';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\nimport { XpsResponseError } from '../../../xps-response.error';\nimport { ThreeDsForm } from '../../three-ds-form.interface';\nimport { StatusThreeDsResponseApi } from './status-three-ds-response.interface';\nimport {\n StatusThreeDsRequestFactory,\n statusThreeDsRequestFactoryToken,\n} from './request/status-three-ds-request.token';\nimport {\n StatusThreeDsResponseFactory,\n statusThreeDsResponseFactoryToken,\n} from './response/status-three-ds-response.token';\nimport { StatusThreeDsResponse } from './response/status-three-ds-response.class';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StatusThreeDsService {\n public get response$(): Observable<StatusThreeDsResponse | null> {\n return this.response.asObservable();\n }\n\n private readonly apiRoute = 'secure3d/check';\n private readonly response = new Subject<StatusThreeDsResponse | null>();\n\n public constructor(\n private readonly secureApi: SecureApiClient,\n private readonly settingsService: SettingsService,\n @Inject(statusThreeDsRequestFactoryToken)\n private readonly requestFactory: StatusThreeDsRequestFactory,\n @Inject(statusThreeDsResponseFactoryToken)\n private readonly responseFactory: StatusThreeDsResponseFactory,\n ) {}\n\n public request(data: ThreeDsForm): void {\n const token = this.settingsService.token;\n\n if (!token) {\n throw new TokenError();\n }\n const requestParams = this.requestFactory(token, data.threeDSTrXid);\n\n void lastValueFrom(\n this.secureApi\n .post<StatusThreeDsResponseApi>(\n this.apiRoute,\n new URLSearchParams({ ...requestParams }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(\n map((response) => {\n const statusResponse = this.responseFactory({\n status: response.secure3d.status,\n checkoutForm: response.secure3d.checkout_form,\n collectDfpParameters: response.secure3d.collect_dfp_parameters,\n });\n\n this.response.next(statusResponse);\n }),\n ),\n ).catch((error: Error) => {\n throw new XpsResponseError(error.message);\n });\n }\n}\n","export class NotifyDfpStatusRequest {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public readonly access_token: string;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public readonly threeDSTrXid: string;\n\n public readonly secure3dCompind: 'Y' | 'N';\n\n public constructor(params: {\n token: string;\n threeDsTrXid: string;\n isCompind: boolean;\n }) {\n this.access_token = params.token;\n this.threeDSTrXid = params.threeDsTrXid;\n this.secure3dCompind = params.isCompind ? 'Y' : 'N';\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { NotifyDfpStatusRequest } from './notify-dfp-status-request.class';\n\nexport type NotifyDfpStatusRequestParameters = ConstructorParameters<\n typeof NotifyDfpStatusRequest\n>;\n\nexport type NotifyDfpStatusRequestFactory = (\n ...args: NotifyDfpStatusRequestParameters\n) => NotifyDfpStatusRequest;\n\nexport const notifyDfpStatusRequestFactoryToken: InjectionToken<NotifyDfpStatusRequestFactory> =\n new InjectionToken<NotifyDfpStatusRequestFactory>('NotifyDfpStatusRequest');\n\nexport const notifyDfpStatusRequestFactoryProvider: ValueProvider = {\n provide: notifyDfpStatusRequestFactoryToken,\n useValue: (...args: NotifyDfpStatusRequestParameters) =>\n new NotifyDfpStatusRequest(...args),\n};\n","import { lastValueFrom } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { SecureApiClient } from '../../../../http/secure-api/secure-api.service';\nimport { SettingsService } from '../../../../settings/settings.service';\nimport {\n NotifyDfpStatusRequestFactory,\n notifyDfpStatusRequestFactoryToken,\n} from './request/notify-dfp-status-request.token';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\nimport { XpsResponseError } from '../../../xps-response.error';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotifyDfpStatusService {\n private readonly apiRouteComplete = 'secure3d/notify';\n\n public constructor(\n private readonly secureApi: SecureApiClient,\n private readonly settingsService: SettingsService,\n @Inject(notifyDfpStatusRequestFactoryToken)\n private readonly requestFactory: NotifyDfpStatusRequestFactory,\n ) {}\n\n /*\n * isCompind is a flag of dfp expired state\n */\n public request(threeDsId: string, isCompind: boolean): void {\n const token = this.settingsService.token;\n\n if (!token) {\n throw new TokenError();\n }\n\n const requestParams = this.requestFactory({\n token: token,\n threeDsTrXid: threeDsId,\n isCompind,\n });\n\n lastValueFrom(\n this.secureApi.post(\n this.apiRouteComplete,\n new URLSearchParams({ ...requestParams }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n ),\n ).catch((error: Error) => {\n throw new XpsResponseError(error.message);\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { windowToken } from '../../../window.token';\nimport { ExtendedWindow } from '../../../extended-window.interface';\nimport { NotifyDfpStatusService } from '../api/notify-dfp-status/notify-dfp-status.service';\nimport { ThreeDsForm } from '../three-ds-form.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DfpCollectService {\n private readonly iframeName = 'iframeDFP';\n private readonly formName = 'formDFP';\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n private readonly notifyDfpStatusService: NotifyDfpStatusService,\n ) {}\n\n public collectDfpStatus(threeDsForm: ThreeDsForm): void {\n if (threeDsForm.waitCallback) {\n this.openIframeWithPostRequest(threeDsForm, false);\n } else {\n this.openIframeWithPostRequest(threeDsForm, true);\n }\n }\n\n /*\n * This method create invisible iframe with required params and after that it submit form in iframe\n * */\n private openIframeWithPostRequest(\n threeDsForm: ThreeDsForm,\n isNeedNotifyAfterLoad: boolean,\n ): void {\n const iFrameElement = this.window.document.getElementById(this.iframeName);\n if (!iFrameElement) {\n this.createIframe(isNeedNotifyAfterLoad, threeDsForm.threeDSTrXid);\n this.postFormToIframe(\n threeDsForm.threeDSMethod,\n threeDsForm.threeDSMethodData,\n );\n }\n }\n\n /*\n * isNeedNotifyAfterLoad is need to send notification of dft to server\n * */\n private createIframe(\n isNeedNotifyAfterLoad: boolean,\n threeDsTrXid: string,\n ): void {\n const attributes: { [key: string]: string } = {\n name: this.iframeName,\n id: this.iframeName,\n src: 'about:blank',\n style: 'display:none',\n };\n\n const iFrame = this.window.document.createElement('iframe');\n this.setAttributes(iFrame, attributes);\n this.window.document.body.appendChild(iFrame);\n\n // dynamically created iframe triggers onload event twice\n let isAlreadySent = false;\n\n if (isNeedNotifyAfterLoad) {\n (\n this.window.document.getElementById(\n this.iframeName,\n ) as HTMLIFrameElement\n ).onload = () => {\n if (isAlreadySent) return;\n\n this.notifyDfpStatusService.request(threeDsTrXid, true);\n isAlreadySent = true;\n };\n }\n }\n\n /*\n * This method will submit form in our iframe. Form will be created, if it's don't exist\n * */\n private postFormToIframe(url: string, threeDsMethod: string): void {\n let form = this.window.document.getElementById(\n this.formName,\n ) as HTMLFormElement;\n\n if (!form) {\n form = this.createForm();\n this.window.document.body.appendChild(form);\n }\n\n form.setAttribute('action', url);\n form.setAttribute('target', this.iframeName);\n form.appendChild(this.createInput('threeDSMethodData', threeDsMethod));\n\n form.submit();\n }\n\n /*\n * This method will create invisible form with required params\n */\n private createForm(): HTMLFormElement {\n const form = this.window.document.createElement('form');\n const initAttributes: { [key: string]: string } = {\n name: this.formName,\n id: this.formName,\n style: 'display:none',\n method: 'POST',\n enctype: 'application/x-www-form-urlencoded',\n };\n\n this.setAttributes(form, initAttributes);\n\n return form;\n }\n\n private createInput(name: string, value: string): HTMLInputElement {\n const input = this.window.document.createElement('input');\n input.type = 'hidden';\n input.name = name;\n input.value = value;\n return input;\n }\n\n /*\n * This method will set attributes to form/iframe\n * */\n private setAttributes(\n element: HTMLElement,\n attributes: { [key: string]: string },\n ): void {\n Object.keys(attributes).forEach((name) => {\n element.setAttribute(name, attributes[name]);\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Timer, Timers } from './timer.interface';\nimport { windowToken } from '../../../window.token';\nimport { ExtendedWindow } from '../../../extended-window.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ReinsuranceCheckService {\n private timers: Timers = {};\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {}\n\n public addTimer(timer: Timer): void {\n if (!timer) {\n return;\n }\n\n this.removeTimer(timer.id);\n\n this.timers[timer.id] = timer;\n\n const timerInStorage = this.timers[timer.id] as unknown as Timer;\n\n timerInStorage.timeoutRef = this.window.setTimeout(() => {\n timerInStorage.callback();\n\n this.timers[timer.id] = null;\n }, timerInStorage.timeoutMs) as unknown as number;\n }\n\n public removeTimer(id: string): void {\n const timerInStorage = this.timers[id];\n\n if (!timerInStorage) {\n return;\n }\n\n this.window.clearTimeout(timerInStorage.timeoutRef);\n this.timers[id] = null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { WebSocketFactory } from '../../../web-socket/web-socket.factory';\nimport { WebSocketClient } from '../../../web-socket/web-socket.interface';\nimport { StatusThreeDsService } from '../api/status-three-ds/status-three-ds.service';\nimport { NotifyDfpStatusService } from '../api/notify-dfp-status/notify-dfp-status.service';\nimport { ThreeDsStatusWebSocketTypes } from '../three-ds-status-websocket-types.enum';\nimport { ThreeDsForm } from '../three-ds-form.interface';\nimport { ThreeDsStatusTypes } from '../api/status-three-ds/status-types.enum';\nimport { DfpCollectService } from '../dfp-collect/dfp-collect.service';\nimport { ReinsuranceCheckService } from '../reinsurance-check/reinsurance-check.service';\nimport { StatusUpdate } from './status-update.interface';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { userBehaviourEventTypes } from '../../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThreeDs20Service {\n public get statusUpdates$(): Observable<StatusUpdate> {\n return this.statusUpdates.asObservable();\n }\n\n private webSocketSubscription: Subscription | undefined;\n private webSocketReconnectionSubscription: Subscription | undefined;\n private webSocketClient: WebSocketClient | null = null;\n\n private readonly statusUpdates = new Subject<StatusUpdate>();\n\n private statusRequestSubscription: Subscription | null = null;\n private latestDfpParameters: ThreeDsForm | null = null;\n\n private readonly notifyDfpTimerId = 'notify-dfp';\n private readonly notifyDfpTimeoutMs = 10000;\n\n private readonly statusThreeDsTimerId = 'status-three-ds';\n private readonly statusThreeDsTimeoutMs = 180000;\n\n public constructor(\n private readonly statusThreeDsService: StatusThreeDsService,\n private readonly notifyDfpStatusService: NotifyDfpStatusService,\n private readonly webSocketFactory: WebSocketFactory,\n private readonly dfpCollectService: DfpCollectService,\n private readonly reinsuranceCheckService: ReinsuranceCheckService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {}\n\n public async checkThreeDs20(threeDsForm: ThreeDsForm | null): Promise<void> {\n if (!threeDsForm) {\n return;\n }\n\n this.clearLatestDfpParameters();\n\n this.reinsuranceCheckService.addTimer({\n id: this.notifyDfpTimerId,\n timeoutMs: this.notifyDfpTimeoutMs,\n callback: () => {\n const threeDsTransactionId =\n this.latestDfpParameters?.threeDSTrXid ?? threeDsForm.threeDSTrXid;\n this.notifyDfpStatusService.request(threeDsTransactionId, false);\n },\n });\n\n this.webSocketClient = this.webSocketFactory.createWebSocketClient(\n threeDsForm.webSocketChannelUrl,\n threeDsForm.webSocketClientType,\n );\n\n await this.webSocketClient.open(\n threeDsForm.webSocketChannelUrl,\n threeDsForm.webSocketClientType,\n );\n this.webSocketSubscription?.unsubscribe();\n\n this.webSocketSubscription = this.webSocketClient.messages$.subscribe(\n (message) => {\n if (message !== ThreeDsStatusWebSocketTypes.status3DS_changed) {\n return;\n }\n\n this.requestThreeDsStatus(threeDsForm);\n },\n );\n\n this.webSocketReconnectionSubscription?.unsubscribe();\n this.webSocketReconnectionSubscription =\n this.webSocketClient.subscribeOnSuccessfulReconnection(() => {\n this.requestThreeDsStatus(threeDsForm);\n });\n\n this.handleThreeDsUpdates(threeDsForm);\n this.requestThreeDsStatus(threeDsForm);\n\n this.reinsuranceCheckService.addTimer({\n id: this.statusThreeDsTimerId,\n timeoutMs: this.statusThreeDsTimeoutMs,\n callback: () => {\n this.requestThreeDsStatus(threeDsForm);\n },\n });\n }\n\n private requestThreeDsStatus(threeDsForm: ThreeDsForm): void {\n this.statusThreeDsService.request(this.latestDfpParameters ?? threeDsForm);\n }\n\n private handleThreeDsUpdates(threeDsForm: ThreeDsForm): void {\n this.statusRequestSubscription?.unsubscribe();\n this.statusRequestSubscription =\n this.statusThreeDsService.response$.subscribe((threeDsStatus) => {\n if (!threeDsStatus) {\n return;\n }\n\n if (threeDsStatus.collectDfpParameters) {\n this.latestDfpParameters = threeDsStatus.collectDfpParameters;\n }\n\n if (threeDsStatus.status === ThreeDsStatusTypes.completed) {\n this.stopReinsuranceMethods();\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.threeDs2complete,\n userBehaviourEventTypes.manual,\n );\n\n this.statusUpdates.next({\n type: 'complete',\n data: {\n statusUrl: threeDsForm.statusUrl,\n },\n });\n return;\n }\n\n if (\n threeDsStatus.status === ThreeDsStatusTypes.challenge &&\n threeDsStatus.checkoutForm\n ) {\n this.stopReinsuranceMethods();\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.threeDs2challenge,\n userBehaviourEventTypes.manual,\n );\n\n this.statusUpdates.next({\n type: 'challenge',\n data: threeDsStatus.checkoutForm,\n });\n }\n\n if (threeDsStatus.status === ThreeDsStatusTypes.collectDfp) {\n this.dfpCollectService.collectDfpStatus(\n this.latestDfpParameters ?? threeDsForm,\n );\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.threeDs2collectDfp,\n userBehaviourEventTypes.manual,\n );\n }\n\n if (\n threeDsStatus.status === ThreeDsStatusTypes.checkout &&\n threeDsStatus.checkoutForm\n ) {\n this.stopReinsuranceMethods();\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.threeDs2checkout,\n userBehaviourEventTypes.manual,\n );\n\n this.statusUpdates.next({\n type: 'checkout',\n data: threeDsStatus.checkoutForm,\n });\n }\n });\n }\n\n private stopReinsuranceMethods(): void {\n this.reinsuranceCheckService.removeTimer(this.notifyDfpTimerId);\n this.reinsuranceCheckService.removeTimer(this.statusThreeDsTimerId);\n this.webSocketClient?.close();\n this.statusRequestSubscription?.unsubscribe();\n }\n\n private clearLatestDfpParameters(): void {\n this.latestDfpParameters = null;\n }\n}\n","import { Subscription } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { NextActionService } from '../actions/next-action.service';\nimport { ThreeDs20Service } from './three-ds-20/three-ds20.service';\nimport { ThreeDsActionCreator } from '../actions/three-ds/three-ds.action.class';\nimport { CheckStatusActionCreator } from '../actions/check-status/check-status.action.class';\nimport { ThreeDsRedirectActionCreator } from '../actions/three-ds-redirect/three-ds-redirect.action.class';\nimport { SubmitResponse } from '../requests/submit/response/submit-response.class';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThreeDsService {\n private statusSubscription: Subscription | null = null;\n\n public constructor(\n private readonly threeDs20Service: ThreeDs20Service,\n private readonly nextActionService: NextActionService,\n private readonly checkStatusActionCreator: CheckStatusActionCreator,\n private readonly threeDsActionCreator: ThreeDsActionCreator,\n private readonly threeDsRedirectActionCreator: ThreeDsRedirectActionCreator,\n ) {}\n\n public checkThreeDs(params: SubmitResponse): void {\n /*\n At this moment we support only 3ds 2.0 version.\n 3ds 1.0 currently working by our redirect logic (Redirect NextAction).\n If in future we will get new version of 3ds, we should add 3ds determination logic to this service\n */\n void this.threeDs20Service.checkThreeDs20(params.parameters.threeDSForm);\n\n this.statusSubscription?.unsubscribe();\n this.statusSubscription = this.threeDs20Service.statusUpdates$.subscribe(\n (statusUpdate) => {\n switch (statusUpdate.type) {\n case 'complete':\n return this.nextActionService.emitFlowUpdates(\n this.checkStatusActionCreator.getActionData(),\n );\n case 'challenge':\n return this.nextActionService.emitFlowUpdates(\n this.threeDsActionCreator.getActionData(statusUpdate),\n );\n case 'checkout':\n return this.nextActionService.emitFlowUpdates(\n this.threeDsRedirectActionCreator.getActionData(statusUpdate),\n );\n }\n },\n );\n }\n\n public stopChecking(): void {\n this.statusSubscription?.unsubscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { EmitDataService } from '../emit-data.service.abstract';\nimport { XpsMessage } from '../xps-message.interface';\nimport { UnescapeHtmlPipe } from '../../../shared/pipes/unescape-html/unescape-html.pipe';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormMessagesService extends EmitDataService<string[]> {\n public constructor(private readonly unescapeHtmlPipe: UnescapeHtmlPipe) {\n super();\n }\n\n public emitOnResponse(messages?: XpsMessage[]): void {\n const mapInfoMessages = (infoMessage: XpsMessage): string =>\n this.unescapeHtmlPipe.transform(infoMessage.message);\n\n super.emit(messages?.map(mapInfoMessages) ?? []);\n }\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { PrintInstructionRequestInterface } from './print-instruction-request.interface';\n\nexport class PrintInstructionRequest {\n public readonly xsolla_num: string;\n public readonly public_id: string;\n public readonly payment_name: string;\n public readonly pid: number;\n\n public constructor(parameters: PrintInstructionRequestInterface) {\n this.xsolla_num = parameters.xsollaNumber;\n this.public_id = parameters.publicId;\n this.payment_name = parameters.title;\n this.pid = parameters.pid;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { PrintInstructionRequest } from './print-instruction-request.class';\n\ntype RequestParameters = ConstructorParameters<typeof PrintInstructionRequest>;\n\nexport type PrintInstructionRequestFactory = (\n ...args: RequestParameters\n) => PrintInstructionRequest;\n\nexport const printInstructionRequestFactoryToken: InjectionToken<PrintInstructionRequestFactory> =\n new InjectionToken<PrintInstructionRequestFactory>(\n 'PrintInstructionResponse',\n );\n\nexport const printInstructionRequestFactoryProvider: ValueProvider = {\n provide: printInstructionRequestFactoryToken,\n useValue: (...args: RequestParameters) =>\n new PrintInstructionRequest(...args),\n};\n","import { Inject, Injectable } from '@angular/core';\nimport {\n printInstructionRequestFactoryToken,\n PrintInstructionRequestFactory,\n} from './request/print-instruction-request.token';\nimport { PrintInstructionRequestInterface } from './request/print-instruction-request.interface';\nimport { SecureApiClient } from '../../../http/secure-api/secure-api.service';\nimport { SettingsService } from '../../../settings/settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PrintInstructionService {\n private readonly apiRoute = 'xsollanumber';\n\n public constructor(\n private readonly settingsService: SettingsService,\n private readonly secureApi: SecureApiClient,\n @Inject(printInstructionRequestFactoryToken)\n private readonly printInstructionRequestFactory: PrintInstructionRequestFactory,\n ) {}\n\n public getPrintInstructionUrl(\n parameters: PrintInstructionRequestInterface,\n ): string {\n const printUrlParameters = {\n ...this.printInstructionRequestFactory(parameters),\n access_token: this.settingsService.token,\n };\n\n const printInstructionUrl = new URL(\n `${this.secureApi.baseUrl}${this.apiRoute}/printNumber`,\n );\n\n Object.entries(printUrlParameters).forEach(([key, parameter]) =>\n printInstructionUrl.searchParams.append(key, String(parameter)),\n );\n\n return printInstructionUrl.toString();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { InitializeResponse } from '../../requests/initialize/response/initialize-response.class';\nimport { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { PaymentConfiguration } from '../../payment-configuration.interface';\n\n@Injectable()\nexport abstract class BehaviourStrategy {\n public abstract name: string;\n\n protected paymentData!: InitializeResponse | SubmitResponse | null;\n protected paymentConfig!: PaymentConfiguration;\n\n public isSuitable(): boolean {\n return false;\n }\n\n public onInit(): void {}\n\n public onDestroy(): void {}\n\n public canAutoSubmit(): boolean {\n return false;\n }\n\n public setPaymentData(\n paymentData: InitializeResponse | SubmitResponse | null,\n ): void {\n this.paymentData = paymentData;\n }\n\n public setPaymentConfig(config: PaymentConfiguration): void {\n this.paymentConfig = config;\n }\n}\n","import { InitializeResponse } from './response/initialize-response.class';\n\nexport const isInitializeResponse = (\n value: unknown,\n): value is InitializeResponse => {\n return value instanceof InitializeResponse;\n};\n","import { Injectable } from '@angular/core';\nimport { BehaviourStrategy } from '../behaviour-strategy.abstract';\nimport { isInitializeResponse } from '../../../requests/initialize/is-initialize-response.function';\nimport { applePayId } from '../../../actions/redirect/ps4-pages/pages-payment-methods-id.const';\nimport { FieldNames } from '../../../field-names.enum';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\nimport { isSubmitResponse } from '../../../requests/submit/is-submit-response.function';\nimport { InitializeResponse } from '../../../requests/initialize/response/initialize-response.class';\n\n@Injectable()\nexport class ApplePayWithShippingAddressStrategy extends BehaviourStrategy {\n public name = 'ApplePayWithShippingAddressStrategy';\n\n public constructor() {\n super();\n }\n\n public isSuitable(): boolean {\n if (isInitializeResponse(this.paymentData)) {\n return this.paymentData.paymentForm?.pid === applePayId;\n }\n\n if (isSubmitResponse(this.paymentData)) {\n return this.paymentData.pid === applePayId;\n }\n\n return false;\n }\n\n public onInit(): void {\n this.hideField(FieldNames.zip);\n this.hideField(FieldNames.email);\n }\n\n private hideField(fieldName: FieldNames): void {\n if (\n !isInitializeResponse(this.paymentData) &&\n !isSubmitResponse(this.paymentData)\n ) {\n return;\n }\n\n const fields =\n this.paymentData instanceof InitializeResponse\n ? this.paymentData.paymentForm?.fields\n : this.paymentData.fields;\n\n const fieldForHide = fields?.find((field) => {\n return field.name === fieldName;\n });\n\n if (fieldForHide) {\n fieldForHide.isVisible = XpsBoolean.false;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviourStrategy } from '../behaviour-strategy.abstract';\nimport { isInitializeResponse } from '../../../requests/initialize/is-initialize-response.function';\nimport { googlePay } from '../../../actions/redirect/ps4-pages/pages-payment-methods-id.const';\nimport { FieldNames } from '../../../field-names.enum';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\n\n@Injectable()\nexport class GooglePayInstantFlowStrategy extends BehaviourStrategy {\n public name = 'GooglePayInstantFlowStrategy';\n\n public constructor() {\n super();\n }\n\n public isSuitable(): boolean {\n if (!isInitializeResponse(this.paymentData)) {\n return false;\n }\n\n const isInstantPayFlow = this.paymentData.paymentForm?.fields.some(\n (field) => {\n return field.name === FieldNames.googlePayInitData;\n },\n );\n\n return (\n this.paymentData.paymentForm?.pid === googlePay && !!isInstantPayFlow\n );\n }\n\n public onInit(): void {\n this.hideField(FieldNames.zip);\n this.hideField(FieldNames.email);\n }\n\n private hideField(fieldName: FieldNames): void {\n if (!isInitializeResponse(this.paymentData)) {\n return;\n }\n\n const fieldForHide = this.paymentData.paymentForm?.fields.find((field) => {\n return field.name === fieldName;\n });\n\n if (fieldForHide) {\n fieldForHide.isVisible = XpsBoolean.false;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviourStrategy } from '../behaviour-strategy.abstract';\nimport { isInitializeResponse } from '../../../requests/initialize/is-initialize-response.function';\nimport { googlePay } from '../../../actions/redirect/ps4-pages/pages-payment-methods-id.const';\nimport { FieldNames } from '../../../field-names.enum';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\nimport { Field } from '../../../field.interface';\n\n@Injectable()\nexport class GooglePayRegularFlowStrategy extends BehaviourStrategy {\n public name = 'GooglePayRegularFlowStrategy';\n\n public constructor() {\n super();\n }\n\n public isSuitable(): boolean {\n if (!isInitializeResponse(this.paymentData)) {\n return false;\n }\n\n const isInstantPayFlow = this.paymentData.paymentForm?.fields.some(\n (field) => {\n return field.name === FieldNames.googlePayInitData;\n },\n );\n\n return this.paymentData.paymentForm?.pid === googlePay && !isInstantPayFlow;\n }\n\n public canAutoSubmit(): boolean {\n const visibleFields = this.getVisibleFields();\n\n return visibleFields.length === 0;\n }\n\n private getVisibleFields(): Field[] {\n if (!isInitializeResponse(this.paymentData)) {\n return [];\n }\n\n return (\n this.paymentData.paymentForm?.fields.filter(\n (field) => field.isVisible === XpsBoolean.true && field.isMandatory,\n ) ?? []\n );\n }\n}\n","import { InjectionToken, ProviderToken } from '@angular/core';\nimport { BehaviourStrategy } from './strategies/behaviour-strategy.abstract';\nimport { ApplePayWithShippingAddressStrategy } from './strategies/apple-pay-with-shipping-address/apple-pay-with-shipping-address.strategy';\nimport { GooglePayInstantFlowStrategy } from './strategies/google-pay-instant-flow/google-pay-instant-flow.strategy';\nimport { GooglePayRegularFlowStrategy } from './strategies/google-pay-regular-flow/google-pay-regular-flow.strategy';\n\nexport type BehaviourStrategyTokens = Array<ProviderToken<BehaviourStrategy>>;\n\nexport const behaviourStrategiesToken =\n new InjectionToken<BehaviourStrategyTokens>('BehaviourStrategies');\n\nexport const behaviourStrategies: BehaviourStrategyTokens = [\n ApplePayWithShippingAddressStrategy,\n GooglePayInstantFlowStrategy,\n GooglePayRegularFlowStrategy,\n];\n","import { Inject, Injectable, Injector, ProviderToken } from '@angular/core';\nimport { BehaviourStrategy } from './strategies/behaviour-strategy.abstract';\nimport {\n behaviourStrategiesToken,\n BehaviourStrategyTokens,\n} from './behaviour-strategies';\nimport { InitializeResponse } from '../requests/initialize/response/initialize-response.class';\nimport { SubmitResponse } from '../requests/submit/response/submit-response.class';\nimport { PaymentConfiguration } from '../payment-configuration.interface';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable()\nexport class PaymentBehaviourService {\n public constructor(\n @Inject(behaviourStrategiesToken)\n private readonly behaviourStrategyTokens: BehaviourStrategyTokens,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly injector: Injector,\n ) {}\n\n public getApplicableBehaviourStrategies(\n paymentData: InitializeResponse | SubmitResponse | null,\n config: PaymentConfiguration,\n ): BehaviourStrategy[] {\n const strategies = this.getBehaviourStrategies();\n\n const applicableStrategies = strategies.filter(\n (behaviourStrategy: BehaviourStrategy) => {\n behaviourStrategy.setPaymentData(paymentData);\n behaviourStrategy.setPaymentConfig(config);\n return behaviourStrategy.isSuitable();\n },\n );\n\n this.logApplicableStrategies(applicableStrategies);\n return applicableStrategies;\n }\n\n private getBehaviourStrategies(): BehaviourStrategy[] {\n return this.behaviourStrategyTokens.map(\n (behaviourStrategyToken: ProviderToken<BehaviourStrategy>) =>\n this.injector.get<BehaviourStrategy>(behaviourStrategyToken),\n );\n }\n\n private logApplicableStrategies(strategies: BehaviourStrategy[]): void {\n if (!strategies.length) return;\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applicablePaymentStrategies,\n 'manual',\n { value: strategies.map((strategy) => strategy.name) },\n );\n }\n}\n","import {\n BehaviorSubject,\n filter,\n Observable,\n Subject,\n take,\n takeUntil,\n} from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { FormControlStatus, FormGroup, UntypedFormGroup } from '@angular/forms';\nimport { SubmitResponse } from './requests/submit/response/submit-response.class';\nimport { FormService } from './form/form.service';\nimport { InitializeResponse } from './requests/initialize/response/initialize-response.class';\nimport { InitializeService } from './requests/initialize/initialize.service';\nimport { Status } from './status/status.interface';\nimport { SubmitService } from './requests/submit/submit.service';\nimport { SyncService } from './requests/sync/sync.service';\nimport { StatusService } from './status/status.service';\nimport { NextActionService } from './actions/next-action.service';\nimport { InitializeNextActionService } from './initialize-actions/initialize-next-action.service';\nimport { ControlConfig } from './form/controls/control-config';\nimport { ControlConfigService } from './form/controls/control-config.service';\nimport { FinanceDetails } from './finance-details/finance-details.interface';\nimport { FinanceDetailsService } from './finance-details/finance-details.service';\nimport { NextAction } from './actions/next-action.interface';\nimport { UserBehaviourAnalyticsService } from '../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { eventCategories } from '../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-categories';\nimport { XpsSummary } from './xps-summary.interface';\nimport { Field } from './field.interface';\nimport { PaymentConfiguration } from './payment-configuration.interface';\nimport { isSubmitResponse } from './requests/submit/is-submit-response.function';\nimport { XpsBoolean } from '../xps-boolean.enum';\nimport { StatusRequestParams } from './status/status-request/status-request-params.interface';\nimport { ValidationErrors } from './form/validators/validation-errors.interface';\nimport { InputEventName } from './form/input-event.enum';\nimport { FormFieldsStatus } from './form/form-fields-status.interface';\nimport { ThreeDsService } from './three-ds/three-ds.service';\nimport { XpsCommand } from './xps-comand.enum';\nimport { CreditCardStateService } from './credit-card-state/credit-card-state.service';\nimport { FieldNames } from './field-names.enum';\nimport { FormState } from './form/form-state.interface';\nimport { FormMessagesService } from './form-messages/form-messages.service';\nimport { XpsMessage } from './xps-message.interface';\nimport { SettingsService } from '../settings/settings.service';\nimport { CountryService } from '../country/country.service';\nimport { SdkPaymentSystemsInitialData } from '../sdk-payment-systems/sdk-payment-systems-initial-data.interface';\nimport { FormResponse } from './form-response.interface';\nimport { CheckStatusActionCreator } from './actions/check-status/check-status.action.class';\nimport { ControlStatus } from './form/control-status.interface';\nimport { InitializedForm } from './initialized-form.inteface';\nimport { CashPaymentData } from './cash-payment-data.interface';\nimport { PrintInstructionService } from '../xsolla-number/api/print-instruction/print-instruction.service';\nimport { SyncResponse } from './requests/sync/response/sync-response.class';\nimport { ErrorTags } from '../exceptions-handling/errors/elk-error-types.enum';\nimport { BehaviourStrategy } from './payment-behaviour/strategies/behaviour-strategy.abstract';\nimport { PaymentBehaviourService } from './payment-behaviour/payment-behaviour.service';\nimport { fieldsAllowedToOverride } from './form/overrided-fields/fields-allowed-to-override';\nimport { overrideFieldConfigs } from './form/overrided-fields/override-field-config';\nimport { LoggerService } from '../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../exceptions-handling/errors';\nimport { updateAfterErrorRules } from './update-submit-response/update-after-error-rules.const';\nimport { fieldsAllowedToExternalChange } from './external-change-fields.const';\nimport { TranslateService } from '@ngx-translate/core';\nimport { isGooglePaySettingsGuard } from './payment-configurations/types/is-google-pay-settings.guard';\nimport { isCreditCardSettingsGuard } from './payment-configurations/types/is-credit-card-settings.guard';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentService {\n public form: UntypedFormGroup | null = null;\n\n public get formFieldsStatus$(): Observable<FormFieldsStatus> {\n return this.formFieldsStatusSubject.asObservable().pipe(filter(Boolean));\n }\n\n public get paymentForm$(): Observable<FormControlStatus | null> {\n return this._paymentForm$.asObservable();\n }\n\n public get formResponse$(): Observable<FormResponse | null> {\n return this._formResponse$.asObservable();\n }\n\n public get formResponseValue(): FormResponse | null {\n return this._formResponse$.getValue();\n }\n\n private data: InitializeResponse | SubmitResponse | null = null;\n private financeDetails: FinanceDetails | null = null;\n private focusFieldName: string | null = null;\n private fields: Field[] = [];\n private isSubmitAttempted = false;\n private config!: PaymentConfiguration;\n\n private destroy$ = new Subject<void>();\n private formDestroy$ = new Subject<void>();\n private readonly _paymentForm$ =\n new BehaviorSubject<FormControlStatus | null>(null);\n private readonly formFieldsStatusSubject =\n new BehaviorSubject<FormFieldsStatus | null>(null);\n private readonly _formResponse$ = new BehaviorSubject<FormResponse | null>(\n null,\n );\n\n private isSavingMethodMode = false;\n\n public constructor(\n private readonly loggerService: LoggerService,\n private readonly initializeService: InitializeService,\n private readonly submitService: SubmitService,\n private readonly syncService: SyncService,\n private readonly formService: FormService,\n private readonly statusService: StatusService,\n private readonly financeDetailsService: FinanceDetailsService,\n private readonly creditCardStateService: CreditCardStateService,\n private readonly nextActionService: NextActionService,\n private readonly initializeNextActionService: InitializeNextActionService,\n private readonly controlConfigService: ControlConfigService,\n private readonly threeDsService: ThreeDsService,\n private readonly formMessagesService: FormMessagesService,\n private readonly settingsService: SettingsService,\n private readonly countryService: CountryService,\n private readonly checkStatusActionCreator: CheckStatusActionCreator,\n private readonly printInstructionService: PrintInstructionService,\n private readonly paymentBehaviourService: PaymentBehaviourService,\n private readonly translateService: TranslateService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {}\n\n public async initialize(\n config: PaymentConfiguration,\n ): Promise<InitializedForm> {\n this.destroy$ = new Subject<void>();\n this.formDestroy$ = new Subject<void>();\n this.isSubmitAttempted = false;\n\n this.listenFinanceDetails();\n\n this.config = config;\n\n if (config.country) {\n this.countryService.setCountry(config.country);\n }\n\n this.data = await this.initializeService.request(config);\n\n this.initializeBehaviourStrategies();\n\n this.emitFormResponse(this.data);\n\n this.fields = this.getFields();\n this.setupInitialFieldValues();\n\n this.form = this.formService.createForm(this.fields);\n\n this.updatePidConfig();\n this.setupSyncService(this.form, this.fields, config);\n this.listenFormStatusChanges(this.form);\n\n const isNeedAutoSubmit = this.canAutoSubmit();\n\n if (isNeedAutoSubmit) {\n const nextAction = await this.submit();\n\n if (nextAction) {\n this.nextActionService.emitFlowUpdates(nextAction);\n }\n }\n\n this.emitFinanceDetails(this.data.paymentForm?.summary);\n this.emitFormFieldsStatus(this.form);\n\n this.emitFormMessages(this.getInitializeMessages());\n\n const excludedFields = [\n FieldNames.koreaLimitsInstruction,\n FieldNames.koreaCashReceiptInstruction,\n ];\n\n return {\n fields: this.fields.filter(\n (field: Field) =>\n field?.isVisible === XpsBoolean.true &&\n !excludedFields.includes(field?.name as FieldNames),\n ),\n isFormAutoSubmitted: isNeedAutoSubmit,\n nextAction: this.initializeNextActionService.getNextAction(this.data),\n };\n }\n\n public async submit(): Promise<NextAction | null | void> {\n if (!this.form) {\n throw new Error('form is empty!');\n }\n\n if (!this.form.valid) {\n this.logSubmitAttempt();\n this.isSubmitAttempted = true;\n this.form.markAllAsTouched();\n this.emitFormFieldsStatus(this.form);\n return;\n }\n\n this.logSubmit();\n\n this.isSavingMethodMode = this.fields.some(\n ({ name, value }) =>\n name === 'savePsAccountOnly' && value === XpsBoolean.true,\n );\n const submitResponse = await this.submitService.request(\n this.fields,\n this.form,\n this.config,\n );\n\n this.handleSubmitWithErrors(submitResponse);\n\n this.data = submitResponse;\n this.initializeBehaviourStrategies();\n\n this.emitFormResponse(this.data);\n\n if (!this.isSavingMethodMode) {\n this.emitFinanceDetails(submitResponse.summary, false);\n }\n this.emitFormMessages(submitResponse.messages);\n\n // Handle 3ds flow\n if (\n submitResponse.currentCommand === XpsCommand.create &&\n submitResponse.parameters.threeDSForm\n ) {\n this.runThreeDs();\n return;\n }\n\n const nextAction = this.nextActionService.getNextAction(submitResponse);\n\n this.fields = this.getFields();\n this.form = this.formService.createForm(this.fields);\n\n this.listenFormStatusChanges(this.form);\n this.syncService.setup(this.form, this.fields, this.config);\n\n return nextAction;\n }\n\n public async submitWithFields(fields?: Field[]): Promise<{\n response: SubmitResponse;\n nextAction: NextAction | null | void;\n }> {\n if (!this.form) {\n this.loggerService.error(\n new TaggedError('submit error: trying to submit with no form', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n throw new Error('form is empty!');\n }\n\n this.isSavingMethodMode = this.fields.some(\n ({ name, value }) =>\n name === 'savePsAccountOnly' && value === XpsBoolean.true,\n );\n const submitResponse = await this.submitService.request(\n fields ?? this.fields,\n this.form,\n this.config,\n );\n\n this.data = submitResponse;\n this.emitFormResponse(this.data);\n\n if (!this.isSavingMethodMode) {\n this.emitFinanceDetails(submitResponse.summary, false);\n }\n this.emitFormMessages(submitResponse.messages);\n\n this.fields = this.getFields();\n this.form = this.formService.createForm(this.fields);\n\n this.syncService.setup(this.form, this.fields, this.config);\n\n return {\n response: submitResponse,\n nextAction: this.nextActionService.getNextAction(submitResponse),\n };\n }\n\n public setupInitialFieldValues(): void {\n const fieldsToOverride = this.config.overrideFormFields;\n if (!fieldsToOverride) return;\n\n const overridableNames = new Set(\n Object.keys(fieldsToOverride).filter((name) =>\n fieldsAllowedToOverride.has(name as FieldNames),\n ),\n );\n\n for (const field of this.fields) {\n const fieldName = field.name;\n if (!overridableNames.has(fieldName)) continue;\n\n const config = overrideFieldConfigs[fieldName];\n if (!config) continue;\n\n const overriddenValue = fieldsToOverride[fieldName]?.initialValue;\n\n field.value = String(\n config.validator(overriddenValue)\n ? overriddenValue\n : config.defaultValue,\n );\n }\n }\n\n public getFields(): Field[] {\n if (this.data instanceof SubmitResponse) {\n return this.data.fields ?? [];\n }\n\n return this.data?.paymentForm?.fields ?? [];\n }\n\n public getControlStatus(name: FieldNames): ControlStatus | null {\n const control = this.form?.get(name);\n if (!control) {\n return null;\n }\n\n return {\n name,\n errors: control.errors,\n status: control.status,\n };\n }\n\n public async getInitialDataForSdkPaymentSystems(): Promise<SdkPaymentSystemsInitialData> {\n if (!this.data) {\n throw new Error('Should submit form first');\n }\n\n const sdkPaymentData = this.getSdkPaymentDataFromResponse(this.data);\n\n const shouldHandleUserBackRedirectOnSdkSide = isGooglePaySettingsGuard(\n this.config,\n )\n ? !!this.config.paymentMethodSettings?.useSdkHandlerForUserBackRedirect\n : false;\n\n return Promise.resolve({\n data: sdkPaymentData.checkoutData,\n sandbox: this.settingsService.isSandboxMode()\n ? XpsBoolean.true\n : XpsBoolean.false,\n country: this.countryService.getCountry(),\n fields: sdkPaymentData.fields,\n submitResponse: isSubmitResponse(this.data) ? this.data : null,\n summary: sdkPaymentData.summary,\n locale: this.translateService.getCurrentLang(),\n shouldHandleUserBackRedirectOnSdkSide,\n isThreeDsIndependentWindows:\n this.settingsService.settings.is_three_ds_independent_windows ?? false,\n });\n }\n\n public getQrCode(): string {\n if (!isSubmitResponse(this.data)) {\n throw new Error('Should submit form first');\n }\n\n return this.data.parameters.form.qr.title;\n }\n\n public getCashPaymentData(): CashPaymentData {\n if (!isSubmitResponse(this.data)) {\n throw new Error('Should submit form first');\n }\n\n const cashInstructionField = this.data.fields.find(\n (field) => field.name === 'payment_instruction',\n );\n\n const params = {\n isCashPaymentMethod: !!cashInstructionField,\n xsollaNumber: this.data.xsollaNumber.accountXsolla,\n pid: this.data.parameters.pid,\n publicId: this.data.parameters.public_id,\n title: this.data.parameters.title,\n projectName: this.settingsService.project.name,\n instruction: cashInstructionField?.title,\n };\n return {\n ...params,\n printUrl: this.printInstructionService.getPrintInstructionUrl(params),\n };\n }\n\n public getPid(): number | null {\n if (this.data instanceof SubmitResponse) {\n return this.data.parameters.pid;\n }\n\n if (this.data instanceof InitializeResponse) {\n return this.data.paymentForm?.pid ?? null;\n }\n\n return null;\n }\n\n public getSubmitButtonText(): string | null {\n if (this.data instanceof SubmitResponse) {\n return this.data.parameters.buyData.value;\n }\n\n if (this.data instanceof InitializeResponse) {\n return this.data.paymentForm?.buyData.value ?? null;\n }\n\n return null;\n }\n\n public async validate(field: Field): Promise<ValidationErrors | null> {\n const syncErrors = this.syncService.getSyncValidationErrors(field);\n\n if (syncErrors) {\n return Promise.resolve(syncErrors);\n }\n\n return this.syncService.validate(field);\n }\n\n public async calculateField(\n changedField: Field,\n fields: Field[],\n ): Promise<SyncResponse> {\n return this.syncService.request(changedField, fields, new FormGroup({}));\n }\n\n public runThreeDs(): void {\n if (!isSubmitResponse(this.data)) {\n throw new Error('Should submit form first');\n }\n\n this.threeDsService.checkThreeDs(this.data);\n }\n\n public getFinanceDetails(): FinanceDetails | null {\n return this.financeDetails;\n }\n\n public updateFieldFormState(fieldName: string, formState: FormState): void {\n if (this.form) {\n this.formService.updateFieldFormState(\n this.form,\n this.fields,\n fieldName,\n formState,\n );\n }\n }\n\n public getFieldFormState(fieldName: FieldNames): FormState | null {\n return this.formService.getFieldFormState(fieldName);\n }\n\n public async getStatus(): Promise<Status> {\n if (!isSubmitResponse(this.data)) {\n throw new Error('Should submit form first');\n }\n\n const params: StatusRequestParams = {\n pid: this.config.paymentMethodId,\n invoice: parseInt(this.data.fixInvoice ?? ''),\n signature: this.data.signature ?? '',\n locale:\n this.data.fields.find((field) => field.name === 'locale')?.value ??\n 'en',\n isSavePaymentAccount: this.isSavingMethodMode\n ? XpsBoolean.true\n : XpsBoolean.false,\n };\n return this.statusService.getStatus(params);\n }\n\n public async listenFinalStatus(): Promise<void> {\n const { invoice } = await this.getStatus();\n\n this.statusService\n .listenFinalStatus(invoice as unknown as number)\n .pipe(take(1))\n .subscribe(() => {\n this.nextActionService.emitFlowUpdates(\n this.checkStatusActionCreator.getActionData(),\n );\n });\n }\n\n public getFieldConfig(field: Field): ControlConfig | null {\n return this.controlConfigService.getConfig(field);\n }\n\n public changeFieldValue(name: string, value: string): void {\n const formControl = this.form?.get(name);\n formControl?.setValue(value);\n }\n\n public externalChangeFieldValue(name: FieldNames, value: string): void {\n const isFieldAllowedForExternalChange =\n fieldsAllowedToExternalChange.has(name);\n\n const isExternalVault =\n isCreditCardSettingsGuard(this.config) &&\n this.config.paymentMethodSettings?.useExternalVault;\n\n if (!isFieldAllowedForExternalChange || !isExternalVault) return;\n\n const formControl = this.form?.get(name);\n formControl?.setValue(value);\n }\n\n public changeFieldState(name: string, state: InputEventName): void {\n const formControl = this.form?.get(name);\n\n if (!this.form || !formControl) {\n return;\n }\n\n switch (state) {\n case InputEventName.blur: {\n formControl.markAsTouched();\n this.focusFieldName = null;\n break;\n }\n case InputEventName.focus: {\n formControl.markAsUntouched();\n this.focusFieldName = name;\n break;\n }\n }\n\n this.emitFormFieldsStatus(this.form);\n }\n\n public addExtraField(name: string, value: string): void {\n const isHaveField = this.fields.find((field) => {\n return field.name === name;\n });\n\n if (isHaveField) {\n this.fields = this.fields.map((field) => {\n if (field.name === name) {\n field.value = value;\n }\n\n return field;\n });\n return;\n }\n\n const field = {\n name: name,\n value: value,\n title: '',\n type: 'text',\n example: '',\n isMandatory: XpsBoolean.true,\n isVisible: XpsBoolean.false,\n } as Field;\n\n this.fields.push(field);\n }\n\n public destroy(): void {\n this.destroyBehaviourStrategies(this.config);\n\n this.data = null;\n this.financeDetails = null;\n this.form = null;\n this.fields = [];\n this.formDestroy$.next();\n this.destroy$.next();\n\n this.threeDsService.stopChecking();\n }\n\n private emitFinanceDetails(summary?: XpsSummary, needLogCart = true): void {\n this.financeDetailsService.emitWithSummary(summary, needLogCart);\n }\n\n private emitCreditCardState({\n idCardType,\n cardBinCountry,\n }: {\n idCardType: string;\n cardBinCountry?: string;\n }): void {\n this.creditCardStateService.emit({ idCardType, cardBinCountry });\n }\n\n private emitFormFieldsStatus(form: UntypedFormGroup): void {\n const formFieldsStatus: FormFieldsStatus = {};\n\n Object.keys(form.controls).forEach((name) => {\n const control = form.controls[name];\n formFieldsStatus[name] = {\n name: name,\n validationStatus: control.status,\n errors: control.errors,\n isFocused: this.focusFieldName === name,\n isTouched: control.touched,\n };\n });\n\n this.formFieldsStatusSubject.next(formFieldsStatus);\n }\n\n private emitFormMessages(messages?: XpsMessage[]): void {\n this.formMessagesService.emitOnResponse(messages);\n }\n\n private setupSyncService(\n form: UntypedFormGroup,\n fields: Field[],\n config: PaymentConfiguration,\n ): void {\n this.syncService.setup(form, fields, config);\n this.syncService.data$\n .pipe(takeUntil(this.destroy$))\n .subscribe((response) => {\n this.emitFinanceDetails(response.summary);\n this.emitFormMessages(response.messages);\n this.emitFormResponse(response);\n });\n\n this.syncService.fieldAsyncValidation$\n .pipe(takeUntil(this.destroy$))\n .subscribe((fieldAsyncValidation) => {\n switch (fieldAsyncValidation.field.name) {\n case FieldNames.cardNumber:\n this.emitCreditCardState({\n idCardType: fieldAsyncValidation.response.parameters.idCardType,\n cardBinCountry:\n fieldAsyncValidation.response.parameters.cardBinCountry,\n });\n }\n });\n }\n\n private listenFinanceDetails(): void {\n this.financeDetailsService.data$\n .pipe(takeUntil(this.destroy$))\n .subscribe((financeDetails) => (this.financeDetails = financeDetails));\n }\n\n private listenFormStatusChanges(form: UntypedFormGroup): void {\n form.statusChanges\n .pipe(takeUntil(this.formDestroy$))\n .subscribe((status: FormControlStatus) => {\n this.emitFormFieldsStatus(form);\n this._paymentForm$.next(status);\n });\n }\n\n /**\n * In case the form pid changes despite the one passed during initialization\n */\n private updatePidConfig(): void {\n const currentPid = this.getPid();\n if (currentPid) {\n this.config.paymentMethodId = currentPid;\n }\n }\n\n private emitFormResponse(data: FormResponse['data']): void {\n let type: FormResponse['type'];\n if (data instanceof InitializeResponse) {\n type = 'initialize';\n } else if (data instanceof SubmitResponse) {\n type = 'submit';\n } else {\n type = 'sync';\n }\n this._formResponse$.next({\n type,\n data,\n token: this.settingsService.token,\n isSandbox: this.settingsService.isSandboxMode(),\n });\n }\n\n private getInitializeMessages(): XpsMessage[] {\n const messages = (this.data as InitializeResponse).paymentForm?.messages;\n\n return messages ?? [];\n }\n\n private canAutoSubmit(): boolean {\n const response = this.data as InitializeResponse;\n if (!response.paymentForm) {\n return false;\n }\n\n const isRedirectMethod = response.paymentForm.isCheckout;\n const canSkipForm = response.paymentForm.skipForm;\n\n const isSuitableByStrategy = this.autoSubmitBehaviourStrategies(\n this.config,\n );\n\n return (!isRedirectMethod && canSkipForm) || isSuitableByStrategy;\n }\n\n private getSdkPaymentDataFromResponse(\n data: SubmitResponse | InitializeResponse,\n ): {\n checkoutData: string | null;\n fields: Field[];\n summary: XpsSummary | null;\n } {\n if (isSubmitResponse(data)) {\n return {\n checkoutData: data.parameters?.checkout.data.data,\n fields: data.fields,\n summary: data.summary,\n };\n }\n\n return {\n checkoutData: null,\n fields: data.paymentForm?.fields ?? [],\n summary: data.paymentForm?.summary ?? null,\n };\n }\n\n private initializeBehaviourStrategies(): void {\n const behaviourStrategies =\n this.paymentBehaviourService.getApplicableBehaviourStrategies(\n this.data,\n this.config,\n );\n\n behaviourStrategies.forEach((strategy: BehaviourStrategy) => {\n strategy.onInit();\n });\n }\n\n private destroyBehaviourStrategies(config: PaymentConfiguration): void {\n const behaviourStrategies =\n this.paymentBehaviourService.getApplicableBehaviourStrategies(\n this.data,\n config,\n );\n\n behaviourStrategies.forEach((strategy: BehaviourStrategy) => {\n strategy.onDestroy();\n });\n }\n\n private autoSubmitBehaviourStrategies(config: PaymentConfiguration): boolean {\n const behaviourStrategies =\n this.paymentBehaviourService.getApplicableBehaviourStrategies(\n this.data,\n config,\n );\n\n return behaviourStrategies.some((strategy: BehaviourStrategy) => {\n return strategy.canAutoSubmit();\n });\n }\n\n private handleSubmitWithErrors(submitResponse: SubmitResponse): void {\n if (!submitResponse.errors?.length) return;\n\n const fieldsMap = this.fields.reduce((map, field) => {\n if (field.value !== null) {\n const fieldValue = this.form?.get(field.name)?.value ?? field.value;\n map.set(field.name, fieldValue);\n }\n return map;\n }, new Map<string, string>());\n\n updateAfterErrorRules.forEach((rule) =>\n rule.apply(submitResponse, fieldsMap),\n );\n }\n\n private logSubmitAttempt(): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.attemptBuyNow,\n userBehaviourEventTypes.click,\n );\n }\n\n private logSubmit(): void {\n if (this.isSubmitAttempted) {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.attemptContinue,\n userBehaviourEventTypes.click,\n {\n eventCategory: eventCategories.withInvoice,\n },\n );\n }\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.clickBtnPay,\n userBehaviourEventTypes.click,\n {\n eventCategory: eventCategories.withInvoice,\n },\n );\n }\n}\n","export const euCountries = new Set([\n 'AT',\n 'BE',\n 'BG',\n 'HR',\n 'CY',\n 'CZ',\n 'DK',\n 'EE',\n 'FI',\n 'FR',\n 'DE',\n 'GR',\n 'HU',\n 'IE',\n 'IT',\n 'LV',\n 'LT',\n 'LU',\n 'MT',\n 'NL',\n 'PL',\n 'PT',\n 'RO',\n 'SK',\n 'SI',\n 'ES',\n 'SE',\n]);\n","import {\n auEasyPaymentId,\n auPayId,\n docomoId,\n linePayId,\n payPayId,\n softbankId,\n yMobileId,\n} from '../../shared/payment-methods-id.variable';\n\nconst sctlLinkUsa = 'https://xsolla.com/ja/sctl/xsolla-usa';\nconst sctlLinkJapan = 'https://xsolla.com/ja/sctl/xsolla-japan';\n\nconst sctlLinkMap = new Map<number, string>([\n [payPayId, sctlLinkJapan],\n [linePayId, sctlLinkJapan],\n [auPayId, sctlLinkJapan],\n [docomoId, sctlLinkJapan],\n [softbankId, sctlLinkJapan],\n [auEasyPaymentId, sctlLinkJapan],\n [yMobileId, sctlLinkJapan],\n]);\n\nexport const getSctlLink = (pid?: number): string => {\n if (!pid) {\n return sctlLinkUsa;\n }\n\n return sctlLinkMap.get(pid) ?? sctlLinkUsa;\n};\n","import { Injectable } from '@angular/core';\nimport { SettingsService } from '../settings/settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RefundPolicyService {\n public readonly defaultVersionId = 2;\n public readonly defaultUrl = 'https://xsolla.com/refund-policy-ps';\n\n public constructor(private readonly settingsService: SettingsService) {}\n\n public get url(): string {\n if (!this.settingsService.token) {\n return 'https://xsolla.com/refundpolicy/en-us';\n }\n const language = this.settingsService.user.local ?? 'en';\n const versionId =\n this.settingsService.project.refundPolicySettings?.policy_version_id ??\n this.defaultVersionId;\n const countryIso = this.settingsService.user.country.value ?? '';\n const projectId = this.settingsService.project.id;\n return `${this.defaultUrl}?policy_version_id=${versionId}&language=${language}&country=${countryIso}&project_id=${projectId}`;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DisclaimerService {\n public readonly disclaimer = 'disclaimer';\n}\n","import { Injectable } from '@angular/core';\nimport { LegalArea, LegalComponentConfig } from './legal.component.config';\nimport { SettingsService } from '../settings/settings.service';\nimport { RefundPolicyService } from './refund-policy.service';\nimport { DisclaimerService } from './disclaimer.service';\nimport { CountryService } from '../country/country.service';\nimport { euCountries } from '../country/eu-countries.const';\nimport { getSctlLink } from './get-sctl-link.function';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LegalService {\n private get isJapanUser(): boolean {\n return this.settingsService.user?.local === 'ja';\n }\n\n private get legalArea(): LegalArea {\n const userCountry =\n this.countryService.getCountry() || this.countryService.userIpCountry;\n\n switch (true) {\n case userCountry === 'US':\n return 'US';\n case userCountry === 'KR':\n return 'KR';\n case euCountries.has(userCountry):\n return 'EU';\n default:\n return 'other';\n }\n }\n\n public constructor(\n private readonly countryService: CountryService,\n private readonly settingsService: SettingsService,\n private readonly refundPolicyService: RefundPolicyService,\n private readonly disclaimerService: DisclaimerService,\n ) {}\n\n public getLegalComponentConfig(pid?: number): LegalComponentConfig {\n return {\n legalArea: this.legalArea,\n isJapanUser: this.isJapanUser,\n refundPolicyUrl: this.refundPolicyService.url,\n sctlPolicyUrl: getSctlLink(pid),\n disclaimer: this.disclaimerService.disclaimer,\n };\n }\n}\n","import { lastValueFrom } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { SettingsService } from '../settings/settings.service';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\nimport { SavedMethodsService } from '../saved-methods/saved-methods.service';\nimport { DeleteMethodResponse } from './delete-method-response.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EditSavedMethodsService {\n private readonly deleteRoute = 'savedmethods/delete';\n\n public constructor(\n private readonly savedMethodsService: SavedMethodsService,\n private readonly settingsService: SettingsService,\n private readonly secureApi: SecureApiClient,\n ) {}\n\n public async deleteSavedMethodRequest(\n id: number,\n type: string,\n ): Promise<boolean> {\n const token = this.settingsService.token;\n\n const parameters: {\n access_token: string;\n id: number;\n type: string;\n } = {\n access_token: token,\n id,\n type,\n };\n\n return lastValueFrom(\n this.secureApi.post<DeleteMethodResponse>(\n this.deleteRoute,\n new URLSearchParams(parameters as unknown as { [key: string]: string }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n ),\n )\n .then(async () => {\n await this.savedMethodsService.getList(true);\n return true;\n })\n .catch(() => {\n return false;\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { interval, Observable, of, Subject } from 'rxjs';\nimport { debounce, filter, map } from 'rxjs/operators';\nimport { XhrAction } from './xhr-action.interface';\nimport { ExtendedWindow } from '../extended-window.interface';\nimport { windowToken } from '../window.token';\nimport { defaultApiUrl, sandboxApiUrl } from '../http/secure-api/api-url.const';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class XhrActionService {\n private readonly pauseTime = 1000;\n private readonly userInputEventNames: string[] = ['click', 'change'];\n private isXhrActionStarted = false;\n private apiRequestEntries: PerformanceResourceTiming[] = [];\n private cdnRequestEntries: PerformanceResourceTiming[] = [];\n private readonly entriesSubject = new Subject<PerformanceResourceTiming>();\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {}\n\n public getXhrAction(): Observable<XhrAction> {\n if (!this.window.performance || !this.window.PerformanceObserver) {\n return of();\n }\n\n this.getUserInput().subscribe(() =>\n this.window.performance.mark('userInput'),\n );\n\n this.getPerformance().subscribe((entry: PerformanceResourceTiming) =>\n this.processEntry(entry),\n );\n\n return this.getPauseEvent().pipe(\n map<PerformanceResourceTiming, XhrAction>(() => {\n const event: XhrAction = {\n name: this.getApiRequestName(),\n duration: this.getDuration([\n ...this.apiRequestEntries,\n ...this.cdnRequestEntries,\n ]),\n apiRequestCount: this.apiRequestEntries.length,\n apiRequestDuration: this.getDuration(this.apiRequestEntries),\n cdnRequestCount: this.cdnRequestEntries.length,\n cdnRequestDuration: this.getDuration(this.cdnRequestEntries),\n };\n\n this.stopXhrAction();\n\n return event;\n }),\n );\n }\n\n private processEntry(entry: PerformanceResourceTiming): void {\n const isApiRequest: boolean = entry.name.includes(\n defaultApiUrl || sandboxApiUrl,\n );\n\n const cdnUrl = '';\n const isCdnRequest: boolean =\n !isApiRequest && entry.name.startsWith(cdnUrl);\n\n if (this.isXhrActionStarted && isApiRequest) {\n this.apiRequestEntries.push(entry);\n }\n\n if (this.isXhrActionStarted && isCdnRequest) {\n this.cdnRequestEntries.push(entry);\n }\n\n if (isApiRequest && !this.isXhrActionStarted) {\n const userInputEntries: PerformanceEntry[] =\n this.window.performance.getEntriesByName('userInput', 'mark');\n const userInputEntry: PerformanceEntry =\n userInputEntries[userInputEntries.length - 1];\n\n if (userInputEntry) {\n this.startXhrAction(entry);\n }\n }\n\n if (isApiRequest || isCdnRequest) {\n this.entriesSubject.next(entry);\n }\n }\n\n private startXhrAction(xhrEntry: PerformanceResourceTiming): void {\n this.isXhrActionStarted = true;\n this.apiRequestEntries.push(xhrEntry);\n }\n\n private stopXhrAction(): void {\n this.isXhrActionStarted = false;\n this.apiRequestEntries = [];\n this.cdnRequestEntries = [];\n }\n\n private getUserInput(): Subject<void> {\n const userInputSubject: Subject<void> = new Subject();\n\n this.userInputEventNames.forEach((eventName: string) => {\n this.window.addEventListener(eventName, () => userInputSubject.next());\n });\n\n return userInputSubject;\n }\n\n private getPerformance(): Subject<PerformanceResourceTiming> {\n const performanceSubject: Subject<PerformanceResourceTiming> =\n new Subject();\n\n if (this.window.PerformanceObserver) {\n const observer = new this.window.PerformanceObserver(\n (list: PerformanceObserverEntryList) => {\n list.getEntries().forEach((entry: PerformanceEntry): void => {\n return performanceSubject.next(entry as PerformanceResourceTiming);\n });\n },\n );\n\n observer.observe({ entryTypes: ['resource'] });\n }\n\n return performanceSubject;\n }\n\n private getApiRequestName(): string {\n return this.apiRequestEntries[0].name.split(defaultApiUrl)[1].split('?')[0];\n }\n\n private getDuration(entries: PerformanceResourceTiming[]): number {\n if (!entries.length) {\n return 0;\n }\n\n const firstApiRequestEntry: PerformanceResourceTiming = entries.reduce(\n (prev, current) => (prev.startTime < current.startTime ? prev : current),\n );\n const lastApiRequestEntry: PerformanceResourceTiming = entries.reduce(\n (prev, current) =>\n prev.responseEnd > current.responseEnd ? prev : current,\n );\n\n return Math.round(\n lastApiRequestEntry.responseEnd - firstApiRequestEntry.startTime,\n );\n }\n\n private getPauseEvent(): Observable<PerformanceResourceTiming> {\n return this.entriesSubject.pipe(\n debounce(() => interval(this.pauseTime)),\n filter(() => this.isXhrActionStarted),\n );\n }\n}\n","import { Inject, Injectable, NgZone } from '@angular/core';\nimport { UserBehaviourAnalyticsService } from '../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { XhrActionService } from './xhr-action.service';\nimport { XhrAction } from './xhr-action.interface';\nimport { userBehaviourEventTypes } from '../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { eventCategories } from '../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-categories';\nimport { Observable } from 'rxjs';\nimport { ExtendedWindow } from '../extended-window.interface';\nimport { windowToken } from '../window.token';\nimport { defaultApiUrl, sandboxApiUrl } from '../http/secure-api/api-url.const';\nimport { SendEventMethodOptionsInterface } from '../user-behaviour-analytics/user-behaviour-analytics.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PerformanceService {\n private readonly navigationPerformance =\n this.window.performance?.getEntriesByType('navigation')?.[0] as\n | PerformanceNavigationTiming\n | undefined;\n\n private get resourcesPerformance(): PerformanceResourceTiming[] | undefined {\n return this.window.performance?.getEntriesByType('resource') as\n | PerformanceResourceTiming[]\n | undefined;\n }\n\n private get network(): number | undefined {\n return this.navigationPerformance?.responseEnd;\n }\n\n private get runApp(): number | null {\n const domComplete = this.navigationPerformance?.domComplete;\n\n if (domComplete == null || this.network == null) {\n return null;\n }\n\n return domComplete - this.network;\n }\n\n public constructor(\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly xhrActionService: XhrActionService,\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n private readonly zone: NgZone,\n ) {}\n\n public init(): undefined | void {\n if (!this.window?.performance) {\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n this.measureInitialValues();\n this.listenXhrActions();\n });\n }\n\n private getInitRequest(): {\n duration: number;\n timeReserve: number;\n utilsDuration: number;\n } | null {\n if (!this.navigationPerformance || !this.resourcesPerformance) {\n return null;\n }\n\n const utilsTiming: PerformanceResourceTiming | undefined =\n this.resourcesPerformance.find(\n (performance: PerformanceResourceTiming) =>\n performance.name.includes(`${defaultApiUrl}utils`) ||\n performance.name.includes(`${sandboxApiUrl}utils`),\n );\n\n if (!utilsTiming) {\n return null;\n }\n\n return {\n duration: utilsTiming.responseEnd - utilsTiming.fetchStart,\n timeReserve:\n this.navigationPerformance.domComplete - utilsTiming.responseEnd,\n utilsDuration: utilsTiming.duration,\n };\n }\n\n private sendMeasurement(\n name: string,\n value: number | null | undefined,\n additional?: {\n extraValue?: number | null | undefined;\n dimension1?: number | null | undefined;\n dimension2?: number | null | undefined;\n },\n ): void {\n if (value == null) {\n return;\n }\n\n const eventOptions: SendEventMethodOptionsInterface = {\n value: value.toString(),\n };\n\n if (additional) {\n Object.keys(additional).forEach((optionName: string): void => {\n const optionValue: number | null | undefined =\n additional[optionName as keyof typeof additional];\n if (optionValue != null) {\n eventOptions[optionName as keyof typeof additional] =\n optionValue.toString();\n }\n });\n }\n\n void this.userBehaviourAnalyticsService.send(\n name,\n userBehaviourEventTypes.manual,\n eventOptions,\n );\n }\n\n private measureRunApp(): void {\n const sendRunApp = (): void =>\n void setTimeout(() => this.sendMeasurement('run-app', this.runApp));\n\n if (document.readyState === 'complete') {\n sendRunApp();\n } else {\n this.window.addEventListener('load', () => sendRunApp());\n }\n }\n\n private measureInitialValues(): void {\n const initRequest = this.getInitRequest();\n if (initRequest) {\n this.sendMeasurement('utils', initRequest.duration, {\n extraValue: initRequest.timeReserve,\n dimension1: initRequest.utilsDuration,\n });\n }\n this.sendMeasurement('network', this.network);\n this.measureRunApp();\n }\n\n private listenXhrActions(): void {\n const xhrAction: Observable<XhrAction> =\n this.xhrActionService.getXhrAction();\n\n xhrAction.subscribe((event: XhrAction) => {\n void this.userBehaviourAnalyticsService.send(\n `xhr-action:${event.name}`,\n userBehaviourEventTypes.manual,\n {\n value: event.duration.toString(),\n eventCategory: eventCategories.withoutInvoice,\n extraValue: JSON.stringify(event),\n },\n );\n });\n }\n}\n","import { SavedMethodsService } from '../saved-methods/saved-methods.service';\nimport { PaymentMethodsService } from '../payment-methods/payment-methods.service';\nimport { Injectable } from '@angular/core';\nimport { CombinedPaymentMethods } from './combined-payment-methods.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CombinedPaymentMethodsService {\n public constructor(\n private readonly paymentMethodsService: PaymentMethodsService,\n private readonly savedMethodsService: SavedMethodsService,\n ) {}\n\n public async getCombinedPaymentMethods(): Promise<CombinedPaymentMethods> {\n const [paymentMethods, savedMethods] = await Promise.all([\n this.paymentMethodsService.getAllMethods(),\n this.savedMethodsService.getList(),\n ]);\n\n return {\n paymentMethods: {\n quick: paymentMethods.especial,\n remained: paymentMethods.remained,\n },\n savedMethods,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { map, tap } from 'rxjs/operators';\nimport { CountryResponse } from './country-response.interface';\nimport { BehaviorSubject, lastValueFrom } from 'rxjs';\nimport { SettingsService } from '../settings/settings.service';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CountriesApiService {\n public countries$: BehaviorSubject<CountryResponse['countryList'] | null> =\n new BehaviorSubject<CountryResponse['countryList'] | null>(null);\n\n private readonly apiRoute = 'country';\n\n public constructor(\n private readonly secureApi: SecureApiClient,\n private readonly settingsService: SettingsService,\n ) {}\n\n public async request(): Promise<CountryResponse['countryList']> {\n const token = this.settingsService.token;\n\n return lastValueFrom(\n this.secureApi\n .post<CountryResponse>(\n this.apiRoute,\n { access_token: token },\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(\n map((response: CountryResponse) => {\n return response.countryList;\n }),\n tap((value) => {\n this.countries$.next(value);\n return value;\n }),\n ),\n );\n }\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { SendInstructionRequestInterface } from './send-instruction-request.interface';\nimport { isNull } from '../../../../type-guards/is-null.function';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\n\nexport class SendInstructionRequest {\n public readonly access_token: string;\n public readonly xsolla_num: string;\n public readonly public_id: string;\n public readonly recipient: string;\n public readonly payment_name: string;\n public readonly pid: number;\n public readonly purchase?: string;\n\n public constructor(parameters: SendInstructionRequestInterface) {\n if (isNull(parameters.accessToken)) {\n throw new TokenError();\n }\n\n this.access_token = parameters.accessToken;\n this.xsolla_num = parameters.xsollaNumber;\n this.public_id = parameters.publicId;\n this.recipient = parameters.recipient;\n this.payment_name = parameters.title;\n this.pid = parameters.pid;\n\n if (parameters.purchase) {\n this.purchase = JSON.stringify(parameters.purchase);\n }\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SendInstructionRequest } from './send-instruction-request.class';\n\ntype RequestParameters = ConstructorParameters<typeof SendInstructionRequest>;\n\nexport type SendInstructionRequestFactory = (\n ...args: RequestParameters\n) => SendInstructionRequest;\n\nexport const sendInstructionRequestFactoryToken: InjectionToken<SendInstructionRequestFactory> =\n new InjectionToken<SendInstructionRequestFactory>('SendInstructionRequest');\n\nexport const sendInstructionRequestFactoryProvider: ValueProvider = {\n provide: sendInstructionRequestFactoryToken,\n useValue: (...args: RequestParameters) => new SendInstructionRequest(...args),\n};\n","export enum ShippingMethodsEnum {\n sms = 'sms',\n email = 'email',\n print = 'print',\n}\n","export enum SendStatus {\n succeed = 'succeed',\n failed = 'failed',\n}\n","import { SendInstructionResponseInterface } from './send-instruction-response.interface';\nimport { ShippingMethodsEnum } from '../../../shipping-methods.enum';\nimport { SendError } from '../send-error.interface';\nimport { SendStatus } from './send-status.enum';\n\nexport class SendInstructionStatusResponse {\n public readonly type: SendInstructionResponseInterface['type'];\n public readonly status: SendInstructionResponseInterface['status'];\n public readonly errors: string[] = [];\n\n public constructor(\n sendResponse: SendInstructionResponseInterface | SendError,\n sendInstructionRoute: 'sendSms' | 'sendEmail',\n ) {\n this.type =\n sendInstructionRoute === 'sendSms'\n ? ShippingMethodsEnum.sms\n : ShippingMethodsEnum.email;\n\n if ((sendResponse as SendError).errors) {\n this.errors = (sendResponse as SendError).errors.map(\n ({ message }) => message,\n );\n }\n\n if ((sendResponse as SendInstructionResponseInterface).status) {\n this.status =\n (sendResponse as SendInstructionResponseInterface)?.status ===\n SendStatus.succeed\n ? SendStatus.succeed\n : SendStatus.failed;\n } else {\n this.status = SendStatus.failed;\n }\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SendInstructionStatusResponse } from './send-instruction-response.class';\n\ntype RequestParameters = ConstructorParameters<\n typeof SendInstructionStatusResponse\n>;\n\nexport type SendInstructionStatusResponseFactory = (\n ...args: RequestParameters\n) => SendInstructionStatusResponse;\n\nexport const sendInstructionStatusResponseFactoryToken: InjectionToken<SendInstructionStatusResponseFactory> =\n new InjectionToken<SendInstructionStatusResponseFactory>(\n 'SendInstructionStatusResponse',\n );\n\nexport const sendInstructionStatusResponseFactoryProvider: ValueProvider = {\n provide: sendInstructionStatusResponseFactoryToken,\n useValue: (...args: RequestParameters) =>\n new SendInstructionStatusResponse(...args),\n};\n","export enum SendInstructionApiRoutesEnum {\n sendSms = 'sendSms',\n sendEmail = 'sendEmail',\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { lastValueFrom, map } from 'rxjs';\nimport { SendInstructionRequest } from './request/send-instruction-request.class';\nimport {\n SendInstructionRequestFactory,\n sendInstructionRequestFactoryToken,\n} from './request/send-instruction-request.token';\nimport {\n SendInstructionStatusResponseFactory,\n sendInstructionStatusResponseFactoryToken,\n} from './response/send-instruction-response.token';\nimport { SendInstructionResponseInterface } from './response/send-instruction-response.interface';\nimport { SendInstructionApiRoutesEnum } from './send-instruction-api-routes.enum';\nimport { SendInstructionParametersInterface } from './send-instruction-parameters.interface';\nimport { SecureApiClient } from '../../../http/secure-api/secure-api.service';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { SendError } from './send-error.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SendInstructionService {\n private readonly apiRoute = 'xsollanumber';\n\n public constructor(\n private readonly secureApi: SecureApiClient,\n private readonly settingsService: SettingsService,\n @Inject(sendInstructionRequestFactoryToken)\n private readonly sendInstructionRequestFactory: SendInstructionRequestFactory,\n @Inject(sendInstructionStatusResponseFactoryToken)\n private readonly sendInstructionStatusResponseFactory: SendInstructionStatusResponseFactory,\n ) {}\n\n public async sendInstructionWithEmail(\n parameters: SendInstructionParametersInterface,\n ): Promise<SendInstructionResponseInterface> {\n return this.request(\n SendInstructionApiRoutesEnum.sendEmail,\n this.sendInstructionRequestFactory({\n accessToken: this.settingsService.token,\n ...parameters,\n }),\n );\n }\n\n public async sendInstructionWithSms(\n parameters: SendInstructionParametersInterface,\n ): Promise<SendInstructionResponseInterface> {\n return this.request(\n SendInstructionApiRoutesEnum.sendSms,\n this.sendInstructionRequestFactory({\n accessToken: this.settingsService.token,\n ...parameters,\n }),\n );\n }\n\n private async request(\n route: SendInstructionApiRoutesEnum,\n parameters: SendInstructionRequest,\n ): Promise<SendInstructionResponseInterface> {\n return lastValueFrom(\n this.secureApi\n .post<SendInstructionResponseInterface | SendError>(\n `${this.apiRoute}/${route}`,\n new URLSearchParams(\n parameters as unknown as { [key: string]: string },\n ),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(\n map((response: SendInstructionResponseInterface | SendError) =>\n this.sendInstructionStatusResponseFactory(response, route),\n ),\n ),\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { UserBehaviourAnalyticsService } from '../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { UserBehaviourEventName } from '../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { EventParameterType } from '../user-behaviour-analytics/event-builder/event-parameter-types';\nimport { Environment } from '../environment.interface';\nimport { ExtendedWindow } from '../extended-window.interface';\nimport { windowToken } from '../window.token';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScriptTrackerService {\n private readonly currentScripts: Set<string> = new Set();\n\n private readonly scriptHostBlacklist = [\n 'https://cdn.xsolla.net/headless-checkout-prod',\n ];\n\n private readonly SCRIPT_DEBOUNCE_TIME_MS = 1000;\n\n private readonly scriptTracked$ = new Subject<void>();\n\n public constructor(\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {}\n\n public initScriptTracking(environment: Environment): void {\n if (environment !== 'production') {\n return;\n }\n\n this.scriptTracked$\n .pipe(debounceTime(this.SCRIPT_DEBOUNCE_TIME_MS))\n .subscribe(() => this.handleScriptData());\n\n this.checkCurrentScripts();\n this.setupScriptObserver();\n }\n\n private handleScriptData(): void {\n const scriptsData = this.getTrackedScripts();\n\n if (!scriptsData.length) {\n return;\n }\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.sysTrackedScripts,\n userBehaviourEventTypes.manual,\n {\n value: JSON.stringify(scriptsData),\n valueType: EventParameterType.string,\n },\n );\n }\n\n private getTrackedScripts(): string[] {\n return Array.from(this.currentScripts.values());\n }\n\n private checkCurrentScripts(): void {\n const resources = this.window.performance.getEntriesByType('resource');\n const scripts = resources.filter(\n // @ts-expect-error wrong type\n (resource) => resource?.initiatorType === 'script',\n );\n\n scripts.forEach((script) => {\n this.trackScript(script.name);\n });\n }\n\n private setupScriptObserver(): void {\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type !== 'childList') {\n return;\n }\n\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'SCRIPT') {\n const script = node as HTMLScriptElement;\n const scriptLoadHandler = (): void => {\n this.trackScript(script.src);\n\n script.removeEventListener('load', scriptLoadHandler);\n };\n\n script.addEventListener('load', scriptLoadHandler);\n }\n });\n });\n });\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n }\n\n private trackScript(script: string): void {\n if (!script || this.currentScripts.has(script)) {\n return;\n }\n\n const isScriptInBlacklist = this.scriptHostBlacklist.some((host) => {\n return script.includes(host);\n });\n\n if (isScriptInBlacklist) {\n return;\n }\n\n this.currentScripts.add(script);\n this.scriptTracked$.next();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { InitConfiguration } from './core/settings/configuration.interface';\nimport { SettingsService } from './core/settings/settings.service';\nimport { CountryService } from './core/country/country.service';\nimport { PaymentMethodsService } from './core/payment-methods/payment-methods.service';\nimport { PaymentMethod } from './core/payment-methods/payment-method.interface';\nimport { SavedMethodsService } from './core/saved-methods/saved-methods.service';\nimport { SavedMethod } from './core/saved-methods/saved-method.interface';\nimport { UserBalanceResponse } from './core/user-balance/user-balance-response.class';\nimport { UserBalanceService } from './core/user-balance/user-balance.service';\nimport { PaymentConfiguration } from './core/payment/payment-configuration.interface';\nimport { PaymentService } from './core/payment/payment.service';\nimport { Payment } from './core/payment/payment.interface';\nimport { Field } from './core/payment/field.interface';\nimport { DeviceFingerPrintService } from './core/device-finger-print/device-finger-print.service';\nimport { LegalService } from './core/legal/legal.service';\nimport { LegalComponentConfig } from './core/legal/legal.component.config';\nimport { NextActionService } from './core/payment/actions/next-action.service';\nimport { FinanceDetailsService } from './core/payment/finance-details/finance-details.service';\nimport { PaymentConfigService } from './core/payment/config/config.service';\nimport { Status } from './core/payment/status/status.interface';\nimport { StatusService } from './core/payment/status/status.service';\nimport { CreditCardService } from './core/credit-card/credit-card.service';\nimport { CreditCardTypes } from './core/credit-card/credit-card-types.enum';\nimport { CreditCard } from './core/credit-card/credit-card.interface';\nimport { InputEventName } from './core/payment/form/input-event.enum';\nimport { CreditCardStateService } from './core/payment/credit-card-state/credit-card-state.service';\nimport { Observable } from 'rxjs';\nimport { CreditCardState } from './core/payment/credit-card-state/credit-card-state.interface';\nimport { FormState } from './core/payment/form/form-state.interface';\nimport { FinanceDetails } from './core/payment/finance-details/finance-details.interface';\nimport { NextAction } from './core/payment/actions/next-action.interface';\nimport { Balance } from './core/settings/balance.interface';\nimport { FormMessagesService } from './core/payment/form-messages/form-messages.service';\nimport { EditSavedMethodsService } from './core/edit-saved-methods/edit-saved-methods.service';\nimport { FormControlStatus } from '@angular/forms';\nimport { SdkPaymentSystems } from './core/sdk-payment-systems/sdk-payment-systems.interface';\nimport { FormResponse } from './core/payment/form-response.interface';\nimport { UserBehaviourAnalyticsService } from './core/user-behaviour-analytics/user-behaviour-analytics.service';\nimport { userBehaviourEventTypes } from './core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { SendEventMethodOptionsInterface } from './core/user-behaviour-analytics/user-behaviour-analytics.interface';\nimport { PerformanceService } from './core/performance/performance.service';\nimport { FieldNames } from './core/payment/field-names.enum';\nimport { CombinedPaymentMethods } from './core/combined-payment-methods/combined-payment-methods.interface';\nimport { CombinedPaymentMethodsService } from './core/combined-payment-methods/combined-payment-methods.service';\nimport { CountriesApiService } from './core/countries-api/countries-api.service';\nimport { CountryResponse } from './core/countries-api/country-response.interface';\nimport { CashPaymentData } from './core/payment/cash-payment-data.interface';\nimport { SendInstructionService } from './core/xsolla-number/api/send-instruction/send-instruction.service';\nimport { SendInstructionResponseInterface } from './core/xsolla-number/api/send-instruction/response/send-instruction-response.interface';\nimport { SendInstructionParametersInterface } from './core/xsolla-number/api/send-instruction/send-instruction-parameters.interface';\nimport { ScriptTrackerService } from './core/script-tracker/script-tracker.service';\nimport { SyncResponse } from './core/payment/requests/sync/response/sync-response.class';\nimport { XpsSummary } from './core/payment/xps-summary.interface';\nimport { SubmitResponse } from './core/payment/requests/submit/response/submit-response.class';\nimport { TranslateService } from '@ngx-translate/core';\nimport { TranslateHelper } from './shared/translate/translate.helper';\nimport { CommonLogAttributesService } from './core/exceptions-handling/common-log-attributes/common-log-attributes.service';\nimport { CommonLogAttributes } from './core/exceptions-handling/common-log-attributes/common-log-attributes.interface';\nimport { LogHandler } from './core/exceptions-handling/logger/log-handler.interface';\nimport { LoggerService } from './core/exceptions-handling/logger/logger.service';\nimport { XpsError } from './core/payment/xps-error.interface';\nimport { CapabilitiesService } from './core/capabilities/capabilities.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CoreLibraryService {\n public paymentMethods = {\n getList: async (isSaveMethodMode?: boolean): Promise<PaymentMethod[]> =>\n this.paymentMethodsService.getList(isSaveMethodMode),\n\n getQuickMethods: async (): Promise<PaymentMethod[]> =>\n this.paymentMethodsService.getQuickMethods(),\n getSavedMethods: async (): Promise<SavedMethod[]> =>\n this.savedMethodsService.getList(),\n getCombinedPaymentMethods: async (): Promise<CombinedPaymentMethods> =>\n this.combinedPaymentMethodsService.getCombinedPaymentMethods(),\n getUserBalance: async (): Promise<UserBalanceResponse> =>\n this.userBalanceService.getUserBalance(),\n deleteSavedMethod: async (id: number, type: string): Promise<boolean> =>\n this.editSavedMethodsService.deleteSavedMethodRequest(id, type),\n };\n\n public sdkPaymentSystems: SdkPaymentSystems = {\n getInitialData: async () =>\n this.paymentService.getInitialDataForSdkPaymentSystems(),\n };\n\n public finance = {\n getDetailsFromSummary: (summary: XpsSummary): FinanceDetails => {\n return this.financeDetailsService.getDetailsFromSummary(summary);\n },\n };\n\n public constructor(\n private readonly settingsService: SettingsService,\n private readonly loggerService: LoggerService,\n private readonly countryService: CountryService,\n private readonly paymentMethodsService: PaymentMethodsService,\n private readonly savedMethodsService: SavedMethodsService,\n private readonly userBalanceService: UserBalanceService,\n private readonly paymentConfigService: PaymentConfigService,\n private readonly paymentService: PaymentService,\n private readonly deviceFingerPrintService: DeviceFingerPrintService,\n private readonly financeDetailsService: FinanceDetailsService,\n private readonly legalService: LegalService,\n private readonly statusService: StatusService,\n private readonly nextActionService: NextActionService,\n private readonly creditCardService: CreditCardService,\n private readonly creditCardStateService: CreditCardStateService,\n private readonly formMessagesService: FormMessagesService,\n private readonly editSavedMethodsService: EditSavedMethodsService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly performanceService: PerformanceService,\n private readonly combinedPaymentMethodsService: CombinedPaymentMethodsService,\n private readonly countriesApiService: CountriesApiService,\n private readonly sendInstructionService: SendInstructionService,\n private readonly scriptTrackerService: ScriptTrackerService,\n private readonly translateService: TranslateService,\n private readonly commonLogAttributesService: CommonLogAttributesService,\n private readonly capabilitiesService: CapabilitiesService,\n ) {}\n\n public async init(configuration: InitConfiguration): Promise<void> {\n await this.settingsService.init(configuration);\n this.capabilitiesService.set(configuration.capabilities);\n this.paymentConfigService.setActiveConfig(null);\n this.performanceService.init();\n this.userBehaviourAnalyticsService.init();\n this.deviceFingerPrintService.init();\n this.scriptTrackerService.initScriptTracking(configuration.environment);\n TranslateHelper.init(this.translateService);\n this.translateService.use(TranslateHelper.getLocale(configuration.locale));\n }\n\n public async getStatus(url?: string): Promise<Status> {\n return this.statusService.getStatusWithUrlSearchParams(url);\n }\n\n public async calculateField(\n changedField: Field,\n fields: Field[],\n ): Promise<SyncResponse> {\n return this.paymentService.calculateField(changedField, fields);\n }\n\n public async submit(fields: Field[]): Promise<{\n response: SubmitResponse;\n nextAction: NextAction | null | void;\n }> {\n return this.paymentService.submitWithFields(fields);\n }\n\n public sendAnalytics(\n action: string,\n type: keyof typeof userBehaviourEventTypes,\n options?: SendEventMethodOptionsInterface,\n ): void {\n this.userBehaviourAnalyticsService.send(action, type, options);\n }\n\n public getQrCodeInitialData(): {\n qrCode: string;\n pid: number | null;\n } {\n return {\n qrCode: this.paymentService.getQrCode(),\n pid: this.paymentService.getPid(),\n };\n }\n\n public getCashPaymentData(): CashPaymentData {\n return this.paymentService.getCashPaymentData();\n }\n\n public async sendXsollaNumberWithEmail(\n params: SendInstructionParametersInterface,\n ): Promise<SendInstructionResponseInterface> {\n return this.sendInstructionService.sendInstructionWithEmail(params);\n }\n\n public async sendXsollaNumberWithSms(\n params: SendInstructionParametersInterface,\n ): Promise<SendInstructionResponseInterface> {\n return this.sendInstructionService.sendInstructionWithSms(params);\n }\n\n public async getCountries(): Promise<CountryResponse['countryList']> {\n return this.countriesApiService.request();\n }\n\n public setCountry(country: string): void {\n this.countryService.setCountry(country);\n }\n\n public getCountry(): string {\n return this.countryService.getCountry();\n }\n\n public createPayment(config: PaymentConfiguration): Payment {\n const enrichedConfig = this.paymentConfigService.enrich(config);\n\n this.paymentConfigService.updateReferByPaymentConfiguration(enrichedConfig);\n this.paymentConfigService.setActiveConfig(enrichedConfig);\n\n return {\n initialize: async () => this.paymentService.initialize(enrichedConfig),\n submit: async () => this.paymentService.submit(),\n getFields: () => this.paymentService.getFields(),\n getPid: () => this.paymentService.getPid(),\n getSubmitButtonText: () => this.paymentService.getSubmitButtonText(),\n validate: async (field: Field) => this.paymentService.validate(field),\n getFinanceDetails: () => this.paymentService.getFinanceDetails(),\n runThreeDs: () => this.paymentService.runThreeDs(),\n getStatus: async () => this.paymentService.getStatus(),\n listenFinalStatus: async () => this.paymentService.listenFinalStatus(),\n financeDetailsUpdates$: this.financeDetailsService.data$,\n form: {\n fieldsStatus$: this.paymentService.formFieldsStatus$,\n getControlConfig: (field: Field) =>\n this.paymentService.getFieldConfig(field),\n changeFieldValue: (name: string, value: string) =>\n this.paymentService.changeFieldValue(name, value),\n externalChangeFieldValue: (name: FieldNames, value: string) =>\n this.paymentService.externalChangeFieldValue(name, value),\n changeFieldState: (name: string, state: InputEventName) =>\n this.paymentService.changeFieldState(name, state),\n updateFieldFormState: (fieldName: string, formState: FormState) =>\n this.paymentService.updateFieldFormState(fieldName, formState),\n getFieldFormState: (fieldName: FieldNames) =>\n this.paymentService.getFieldFormState(fieldName),\n formMessages$: this.formMessagesService.data$,\n cardTypeUpdates$: this.creditCardStateService.data$,\n getFormStatus: () => this.paymentService.form?.status,\n getControlStatus: (name: FieldNames) =>\n this.paymentService.getControlStatus(name),\n },\n addExtraField: (name: string, value: string): void =>\n this.paymentService.addExtraField(name, value),\n };\n }\n\n public getCreditCardService(): CreditCard {\n return {\n getTypeByNumber: (cardNumber: string) =>\n this.creditCardService.getTypeByNumber(cardNumber),\n getCreditCardSettings: (cardType: CreditCardTypes) =>\n this.creditCardService.getCreditCardSettings(cardType),\n cardTypeUpdates$: this.creditCardStateService.data$,\n };\n }\n\n public get flowUpdates$(): Observable<NextAction> {\n return this.nextActionService.flowUpdates$;\n }\n\n public get financeDetailsUpdates$(): Observable<FinanceDetails> {\n return this.financeDetailsService.data$;\n }\n\n public get cardTypeUpdates$(): Observable<CreditCardState> {\n return this.creditCardStateService.data$;\n }\n\n public getLegalComponentConfig(pid?: number): LegalComponentConfig {\n return this.legalService.getLegalComponentConfig(pid);\n }\n\n public getUserBalanceValue(): Balance | null {\n return this.userBalanceService.getUserBalanceValue();\n }\n\n public registerLogHandler(handler: LogHandler): void {\n this.loggerService.register(handler);\n }\n\n public emitFlowErrors(errors: XpsError[]): void {\n this.nextActionService.emitFlowErrors(errors);\n }\n\n public get paymentForm$(): Observable<FormControlStatus | null> {\n return this.paymentService.paymentForm$;\n }\n\n public get formResponse$(): Observable<FormResponse | null> {\n return this.paymentService.formResponse$;\n }\n\n public get formResponseValue(): FormResponse | null {\n return this.paymentService.formResponseValue;\n }\n\n public get topLevelDomain(): string | undefined {\n return this.settingsService.topLevelDomain;\n }\n\n public get isApplePayInstantFlowEnabled(): boolean {\n return this.settingsService.isApplePayInstantFlowEnabled;\n }\n\n public get isGooglePayInstantFlowEnabled(): boolean | null {\n return this.settingsService.isGooglePayInstantFlowEnabled;\n }\n\n public get commonLogAttributes(): CommonLogAttributes {\n return this.commonLogAttributesService.getAttributes();\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\n\nimport { catchError } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { Observable, throwError } from 'rxjs';\nimport { HttpError } from '../errors/http-error.class';\n@Injectable()\nexport class HttpExceptionsInterceptor implements HttpInterceptor {\n public constructor(public router: Router) {}\n\n public intercept(\n req: HttpRequest<unknown>,\n next: HttpHandler,\n ): Observable<HttpEvent<unknown>> {\n return next.handle(req).pipe(\n catchError((error: HttpErrorResponse) => {\n return throwError(() => new HttpError(error, req));\n }),\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CreditCardMaxLengthValidator } from './credit-card-length/credit-card-max-length.validator';\nimport { CreditCardMinLengthValidator } from './credit-card-length/credit-card-min-length.validator';\n\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n providers: [CreditCardMinLengthValidator, CreditCardMaxLengthValidator],\n})\nexport class ValidatorsModule {}\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ControlConfigService } from './controls/control-config.service';\nimport { convertersMap, convertersMapToken } from './converters/converters-map';\nimport { EmailConverter } from './converters/email/email.converter';\nimport { ZipConverter } from './converters/zip/zip.converter';\nimport { FormService } from './form.service';\nimport { CardNumberConverter } from './converters/card-number/card-number.converter';\nimport { CardMonthConverter } from './converters/card-month/card-month.converter';\nimport { CvvConverter } from './converters/cvv/cvv.converter';\nimport { ValidatorsModule } from './validators/validators.module';\nimport { BirthDateConverter } from './converters/birth-date/birth-date.converter';\nimport { CardholderNameConverter } from './converters/cardholder-name/cardholder-name.converter';\nimport { CpfNameConverter } from './converters/cpf-name/cpf-name.converter';\nimport { CpfNumberConverter } from './converters/cpf-number/cpf-number.converter';\nimport { StreetNumberConverter } from './converters/street-number/street-number.converter';\nimport { TextConverter } from './converters/text/text.converter';\nimport { CardYearConverter } from './converters/card-year/card-year.converter';\nimport { CheckboxConverter } from './converters/checkbox/checkbox.converter';\nimport { SelectConverter } from './converters/select/select.converter';\nimport { PinConverter } from './converters/pin/pin.converter';\nimport { RadioGroupConverter } from './converters/radio-group/radio-group.converter';\nimport { PricepointConverter } from './converters/pricepoint/pricepoint.converter';\nimport { CouponConverter } from './converters/coupon/coupon.converter';\nimport { PhoneConverter } from './converters/phone/phone.converter';\nimport { CardExpirationConverter } from './converters/card-expiration/card-expiration.converter';\n\n@NgModule({\n imports: [ReactiveFormsModule, ValidatorsModule],\n providers: [\n FormService,\n ControlConfigService,\n CardNumberConverter,\n CardMonthConverter,\n CardYearConverter,\n CardExpirationConverter,\n CvvConverter,\n CvvConverter,\n ZipConverter,\n CardholderNameConverter,\n CpfNumberConverter,\n CpfNameConverter,\n BirthDateConverter,\n TextConverter,\n CheckboxConverter,\n SelectConverter,\n PinConverter,\n RadioGroupConverter,\n EmailConverter,\n EmailConverter,\n EmailConverter,\n StreetNumberConverter,\n PricepointConverter,\n PricepointConverter,\n CouponConverter,\n TextConverter,\n PhoneConverter,\n { provide: convertersMapToken, useValue: convertersMap },\n ],\n})\nexport class FormModule {}\n","import { NgModule } from '@angular/core';\nimport { UnescapeHtmlPipe } from './unescape-html/unescape-html.pipe';\n\n@NgModule({\n declarations: [UnescapeHtmlPipe],\n providers: [UnescapeHtmlPipe],\n exports: [UnescapeHtmlPipe],\n})\nexport class PipesModule {}\n","export const applePayVersion = 3;\n","export enum ApplePayErrors {\n paymentError = 'Apple Pay: payment error',\n deviceIsNotCapableError = 'Apple Pay: device is not capable',\n cancelled = 'Apple Pay: payment cancelled',\n merchantValidationError = 'Apple Pay: merchant validation error',\n braintreeInitializeError = 'Apple Pay: Braintree library is not initialized',\n}\n","import { Observable, Subject } from 'rxjs';\nimport { ApplePayParams } from '../apple-pay-params.interface';\nimport { ApplePayErrors } from '../apple-pay.errors.enum';\nimport { ApplePayPaymentRequest } from './apple-pay-session.interface';\nimport { StartSessionParams } from './start-session-params.interface';\n\nexport abstract class ApplePaySessionHandlerAbstract {\n protected readonly payment: Subject<string> = new Subject();\n private readonly _errorSubject = new Subject<ApplePayErrors>();\n\n public get error$(): Observable<ApplePayErrors> {\n return this._errorSubject.asObservable();\n }\n\n public get payment$(): Observable<string> {\n return this.payment.asObservable();\n }\n\n public abstract startSession(\n params: ApplePayParams,\n additionalParams: StartSessionParams,\n applePayFinallyCallback: () => void,\n ): void;\n\n protected emitError(error: ApplePayErrors): void {\n this._errorSubject.next(error);\n }\n\n protected buildPaymentRequest(\n params: ApplePayParams,\n ): ApplePayPaymentRequest {\n return {\n total: {\n label: params.totalLabel,\n amount: params.totalAmount,\n },\n currencyCode: params.currencyCode,\n countryCode: params.countryCode,\n merchantCapabilities: params.merchantCapabilities,\n requiredBillingContactFields: params.requiredBillingContactFields,\n requiredShippingContactFields: params.requiredShippingContactFields,\n supportedNetworks: params.supportedNetworks,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, share, Subject } from 'rxjs';\nimport {\n ApplePayError,\n ApplePayShippingContact,\n ApplePayShippingContactUpdate,\n} from '../session-handlers/apple-pay-session.interface';\nimport { ApplePayParams } from '../apple-pay-params.interface';\nimport { UpdatedPrice } from '../updated-price.interface';\nimport { ShippingAddress } from '../shipping-address.interface';\nimport { ApplePayLineItem } from 'braintree-web';\nimport { CartLine } from '../../../payment/finance-details/cart-line.interface';\nimport { XpsResponse } from '../../../payment/xps-response.interface';\nimport { SummaryFinanceDetailsAdapterService } from '../../../payment/finance-details/summary/summary-finance-details-adapter.service';\nimport { XpsFinance } from '../../../payment/xps-finance.interface';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplePayCartService {\n private readonly cartSuccessfulRecalculated = new Subject<UpdatedPrice>();\n private readonly cartErrorRecalculated = new Subject<ApplePayError>();\n\n private readonly cartRecalculationRequest = new Subject<ShippingAddress>();\n\n public get cartSuccessfulRecalculated$(): Observable<UpdatedPrice> {\n return this.cartSuccessfulRecalculated.asObservable().pipe(share());\n }\n\n public get cartErrorRecalculated$(): Observable<ApplePayError> {\n return this.cartErrorRecalculated.asObservable();\n }\n\n public get cartRecalculationRequest$(): Observable<ShippingAddress> {\n return this.cartRecalculationRequest.asObservable();\n }\n\n public constructor(\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly summaryFinanceDetailsAdapterService: SummaryFinanceDetailsAdapterService,\n ) {}\n\n public recalculateCartTaxes(shippingContact: ApplePayShippingContact): void {\n const zip = shippingContact.postalCode;\n const parsedZip = zip?.replace(/\\s/g, '');\n let country = shippingContact.countryCode?.toUpperCase() ?? '';\n\n // Converting all United Kingdom country codes to GB\n if (country === 'UK') {\n country = 'GB';\n }\n\n this.cartRecalculationRequest.next({\n zip: parsedZip,\n country,\n });\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayRecalculateCartTaxes,\n 'manual',\n {\n dimension1: country,\n dimension2: parsedZip || '',\n },\n );\n }\n\n public buildShippingContactUpdate(\n paymentParams: ApplePayParams,\n updatedPrice: UpdatedPrice,\n ): ApplePayShippingContactUpdate {\n return {\n status: 'STATUS_SUCCESS',\n newTotal: {\n label: paymentParams.totalLabel,\n amount: updatedPrice.total.toString(),\n },\n newLineItems: this.getLineItems(updatedPrice),\n };\n }\n\n public sendSuccessfulRecalculatedCart(xpsResponse: XpsResponse): void {\n const financeDetails =\n this.summaryFinanceDetailsAdapterService.getFinanceDetails(\n xpsResponse.summary,\n );\n\n const updatedPrice: UpdatedPrice = {\n // @ts-expect-error finance exist\n total: this.getTotalAmount(xpsResponse.summary.finance),\n subtotalDetails: financeDetails.cartSummary.subtotalDetails,\n totalDetails: financeDetails.cartSummary.totalDetails,\n subtotalPayment: financeDetails.cartSummary.subtotalPayment,\n };\n\n this.cartSuccessfulRecalculated.next(updatedPrice);\n }\n\n public sendErrorRecalculatedCart(error: ApplePayError): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayRecalculateCartError,\n 'manual',\n );\n\n this.cartErrorRecalculated.next(error);\n }\n\n public isZipCountry(country: string): boolean {\n return ['US', 'CA'].includes(country);\n }\n\n private getLineItems(updatedPrice: UpdatedPrice): ApplePayLineItem[] {\n const newLineItems: ApplePayLineItem[] = [];\n\n if (updatedPrice.subtotalPayment?.money?.amount) {\n newLineItems.push({\n label: updatedPrice.subtotalPayment.title ?? 'Subtotal',\n amount: updatedPrice.subtotalPayment.money?.amount.toString(),\n });\n }\n\n let paymentsDetails: CartLine[] = [];\n\n if (updatedPrice.subtotalDetails?.length) {\n paymentsDetails = updatedPrice.subtotalDetails;\n }\n\n if (updatedPrice.totalDetails?.length) {\n paymentsDetails = paymentsDetails.concat(updatedPrice.totalDetails);\n }\n\n paymentsDetails.forEach((cartItem) => {\n if (!cartItem.title || !cartItem.money?.amount) {\n return;\n }\n\n newLineItems.push({\n label: cartItem.title,\n amount: cartItem.money.amount.toString(),\n });\n });\n\n return newLineItems;\n }\n\n private getTotalAmount(finance: XpsFinance): number {\n return finance?.grand_total?.amount ?? finance?.total?.amount;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ApplePay } from 'braintree-web';\nimport { ErrorTags } from '../../../exceptions-handling/errors/elk-error-types.enum';\nimport { ExtendedWindow } from '../../../extended-window.interface';\nimport { windowToken } from '../../../window.token';\nimport { ApplePayParams } from '../apple-pay-params.interface';\nimport { applePayVersion } from '../apple-pay.const';\nimport { ApplePayErrors } from '../apple-pay.errors.enum';\nimport { ApplePaySessionHandlerAbstract } from './session-handler.abstract';\nimport { StartSessionParams } from './start-session-params.interface';\nimport { ApplePayCartService } from '../apple-pay-cart/apple-pay-cart.service';\nimport { take } from 'rxjs';\nimport { ApplePayError } from './apple-pay-session.interface';\nimport { LoggerService } from '../../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../../exceptions-handling/errors/tagged-error.class';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable()\nexport class BraintreeHandler extends ApplePaySessionHandlerAbstract {\n private paymentClient: ApplePay | null = null;\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly loggerService: LoggerService,\n private readonly applePayCartService: ApplePayCartService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {\n super();\n }\n\n public setClient(client: ApplePay): void {\n this.paymentClient = client;\n }\n\n public startSession(\n params: ApplePayParams,\n additionalParams: StartSessionParams,\n applePayFinallyCallback: () => void,\n ): void {\n if (!this.paymentClient) {\n console.error(ApplePayErrors.braintreeInitializeError);\n this.loggerService.error(\n new TaggedError(ApplePayErrors.braintreeInitializeError, [\n ErrorTags.APPLEPAY,\n ]),\n );\n return;\n }\n\n const request = this.buildPaymentRequest(params);\n const applePayRequest = this.paymentClient.createPaymentRequest(request);\n\n const session = new this.window.ApplePaySession(\n applePayVersion,\n applePayRequest,\n );\n\n const { isApplePayInstantFlowEnabled, topLevelDomain } = additionalParams;\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeStartSession,\n 'manual',\n );\n\n session.onshippingcontactselected = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeSelectShipping,\n 'manual',\n );\n\n this.applePayCartService.cartSuccessfulRecalculated$\n .pipe(take(1))\n .subscribe((updatedPrice) => {\n const contactUpdate =\n this.applePayCartService.buildShippingContactUpdate(\n params,\n updatedPrice,\n );\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeCartSuccessfulRecalculated,\n 'manual',\n );\n\n session.completeShippingContactSelection(contactUpdate);\n });\n\n this.applePayCartService.cartErrorRecalculated$.subscribe(\n (error: ApplePayError) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeCartErrorRecalculated,\n 'manual',\n );\n\n session.completeShippingContactSelection({\n errors: [error],\n newTotal: {\n label: params.totalLabel,\n amount: params.totalAmount?.toString(),\n },\n status: 'STATUS_FAILURE',\n });\n },\n );\n\n this.applePayCartService.recalculateCartTaxes(event.shippingContact);\n };\n\n session.onvalidatemerchant = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeValidateMerchant,\n 'manual',\n {\n value: event.validationURL,\n extraValue: params.totalLabel,\n },\n );\n\n const validationParams = {\n validationURL: event.validationURL,\n displayName: params.totalLabel,\n };\n\n if (isApplePayInstantFlowEnabled && topLevelDomain) {\n // @ts-expect-error unknown property\n validationParams.domainName = topLevelDomain;\n }\n\n this.paymentClient\n ?.performValidation(validationParams)\n .then((merchantSession) => {\n session.completeMerchantValidation(merchantSession);\n })\n .catch((error) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeValidateMerchantError,\n 'manual',\n );\n console.error(ApplePayErrors.merchantValidationError, error);\n session.abort();\n applePayFinallyCallback();\n });\n };\n\n session.onpaymentauthorized = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreePaymentAuthorized,\n 'manual',\n );\n\n this.paymentClient\n ?.tokenize({ token: event.payment.token })\n .then((response) => {\n this.payment.next(\n JSON.stringify({\n token: response?.nonce ?? '',\n email: event.payment.billingContact?.emailAddress ?? null,\n postalCode: event.payment.billingContact?.postalCode ?? null,\n shippingEmail:\n event.payment.shippingContact?.emailAddress ?? null,\n }),\n );\n session.completePayment(this.window.ApplePaySession.STATUS_SUCCESS);\n })\n .catch((error) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreePaymentTokenizationError,\n 'manual',\n );\n\n console.error('Apple Pay: Tokenization error', error);\n session.completePayment(this.window.ApplePaySession.STATUS_FAILURE);\n applePayFinallyCallback();\n });\n };\n\n session.oncancel = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreePaymentCancel,\n 'manual',\n );\n\n console.error(ApplePayErrors.cancelled, event);\n this.emitError(ApplePayErrors.cancelled);\n applePayFinallyCallback();\n };\n\n session.begin();\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { ExtendedWindow } from '../../../extended-window.interface';\nimport { windowToken } from '../../../window.token';\nimport { ApplePayParams } from '../apple-pay-params.interface';\nimport {\n ApplePayError,\n GetMerchantSessionResponse,\n} from './apple-pay-session.interface';\nimport { applePayVersion } from '../apple-pay.const';\nimport { ApplePayErrors } from '../apple-pay.errors.enum';\nimport { ApplePaySessionHandlerAbstract } from './session-handler.abstract';\nimport { StartSessionParams } from './start-session-params.interface';\nimport { take } from 'rxjs';\nimport { ApplePayCartService } from '../apple-pay-cart/apple-pay-cart.service';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable()\nexport class CheckoutHandler extends ApplePaySessionHandlerAbstract {\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly http: HttpClient,\n private readonly applePayCartService: ApplePayCartService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {\n super();\n }\n\n public startSession(\n params: ApplePayParams,\n additionalParams: StartSessionParams,\n applePayFinallyCallback: () => void,\n ): void {\n const request = this.buildPaymentRequest(params);\n\n const session = new this.window.ApplePaySession(applePayVersion, request);\n\n session.onshippingcontactselected = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutSelectShipping,\n 'manual',\n );\n\n this.applePayCartService.cartSuccessfulRecalculated$\n .pipe(take(1))\n .subscribe((updatedPrice) => {\n const contactUpdate =\n this.applePayCartService.buildShippingContactUpdate(\n params,\n updatedPrice,\n );\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutCartSuccessfulRecalculated,\n 'manual',\n );\n\n session.completeShippingContactSelection(contactUpdate);\n });\n\n this.applePayCartService.cartErrorRecalculated$.subscribe(\n (error: ApplePayError) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutCartErrorRecalculated,\n 'manual',\n );\n\n session.completeShippingContactSelection({\n errors: [error],\n newTotal: {\n label: params.totalLabel,\n amount: params.totalAmount?.toString(),\n },\n status: 'STATUS_FAILURE',\n });\n },\n );\n\n this.applePayCartService.recalculateCartTaxes(event.shippingContact);\n };\n\n session.onvalidatemerchant = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutValidateMerchant,\n 'manual',\n {\n value: event.validationURL,\n extraValue: params.totalLabel,\n },\n );\n\n const validationParams = {\n validationURL: event.validationURL,\n accountId: params.payInstanceAccountId,\n isSandbox: params.isSandbox,\n };\n\n const { isApplePayInstantFlowEnabled, topLevelDomain } = additionalParams;\n\n if (isApplePayInstantFlowEnabled && topLevelDomain) {\n // @ts-expect-error unknown property\n validationParams.domainName = topLevelDomain;\n }\n\n this.http\n .post<GetMerchantSessionResponse>(\n params.getApplePaySessionUrl,\n JSON.stringify(validationParams),\n {\n headers: new HttpHeaders().set('Content-Type', 'application/json'),\n },\n )\n .subscribe({\n next: (response) => {\n session.completeMerchantValidation(response.merchantSession);\n },\n error: (error) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutValidateMerchantError,\n 'manual',\n );\n console.error(ApplePayErrors.merchantValidationError, error);\n session.abort();\n applePayFinallyCallback();\n },\n });\n };\n\n session.onpaymentauthorized = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutPaymentAuthorized,\n 'manual',\n );\n\n this.payment.next(\n JSON.stringify({\n token: event.payment.token ?? '',\n email: event.payment.billingContact?.emailAddress ?? null,\n postalCode: event.payment.billingContact?.postalCode ?? null,\n shippingEmail: event.payment.shippingContact?.emailAddress ?? null,\n }),\n );\n\n session.completePayment(this.window.ApplePaySession.STATUS_SUCCESS);\n };\n\n session.oncancel = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutPaymentCancel,\n 'manual',\n );\n\n console.error(ApplePayErrors.cancelled, event);\n this.emitError(ApplePayErrors.cancelled);\n applePayFinallyCallback();\n };\n\n session.begin();\n }\n}\n","import { NgModule, TypeProvider } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PaymentBehaviourService } from './payment-behaviour.service';\nimport {\n behaviourStrategies,\n behaviourStrategiesToken,\n} from './behaviour-strategies';\n\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n providers: [\n PaymentBehaviourService,\n {\n provide: behaviourStrategiesToken,\n useValue: behaviourStrategies,\n },\n ...(behaviourStrategies as TypeProvider[]),\n ],\n})\nexport class PaymentBehaviourModule {}\n","import { NgModule, TypeProvider } from '@angular/core';\nimport {\n HTTP_INTERCEPTORS,\n HttpClientModule,\n provideHttpClient,\n} from '@angular/common/http';\nimport { HttpExceptionsInterceptor } from './core/exceptions-handling/http-interceptor/http-exceptions.interceptor';\nimport { windowToken } from './core/window.token';\nimport { paymentMethodsResponseFactoryProvider } from './core/payment-methods/payment-methods-response.token';\nimport { savedMethodsResponseFactoryProvider } from './core/saved-methods/saved-methods-response.token';\nimport { userBalanceResponseFactoryProvider } from './core/user-balance/user-balance-response.token';\nimport { initializeResponseFactoryProvider } from './core/payment/requests/initialize/response/initialize-response.token';\nimport { submitRequestFactoryProvider } from './core/payment/requests/submit/request/submit-request.token';\nimport { submitResponseFactoryProvider } from './core/payment/requests/submit/response/submit-response.token';\nimport {\n flowUpdateNextActions,\n nextActions,\n nextActionsToken,\n} from './core/payment/actions/next-actions';\nimport { syncRequestFactoryProvider } from './core/payment/requests/sync/request/sync-request.token';\nimport { syncResponseFactoryProvider } from './core/payment/requests/sync/response/sync-response.token';\nimport { FormModule } from './core/payment/form/form.module';\nimport { statusRequestFactoryProvider } from './core/payment/status/status-request/request/status-request.token';\nimport { statusResponseFactoryProvider } from './core/payment/status/status-request/response/status-response.token';\nimport { checkStatusRequestFactoryProvider } from './core/payment/status/check-status/request/check-status-request.token';\nimport { checkStatusResponseFactoryProvider } from './core/payment/status/check-status/response/check-status-response.token';\nimport { statusThreeDsRequestFactoryProvider } from './core/payment/three-ds/api/status-three-ds/request/status-three-ds-request.token';\nimport { statusThreeDsResponseFactoryProvider } from './core/payment/three-ds/api/status-three-ds/response/status-three-ds-response.token';\nimport { notifyDfpStatusRequestFactoryProvider } from './core/payment/three-ds/api/notify-dfp-status/request/notify-dfp-status-request.token';\nimport { PipesModule } from './shared/pipes/pipes.module';\nimport { sendInstructionRequestFactoryProvider } from './core/xsolla-number/api/send-instruction/request/send-instruction-request.token';\nimport { sendInstructionStatusResponseFactoryProvider } from './core/xsolla-number/api/send-instruction/response/send-instruction-response.token';\nimport { printInstructionRequestFactoryProvider } from './core/xsolla-number/api/print-instruction/request/print-instruction-request.token';\nimport {\n initializeNextActions,\n initializeNextActionsToken,\n} from './core/payment/initialize-actions/initialize-next-actions';\nimport { BraintreeHandler } from './core/sdk-payment-systems/apple-pay/session-handlers/braintree.handler';\nimport { CheckoutHandler } from './core/sdk-payment-systems/apple-pay/session-handlers/checkout.handler';\nimport { PaymentBehaviourModule } from './core/payment/payment-behaviour/payment-behaviour.module';\nimport {\n MissingTranslationHandler,\n provideTranslateService,\n} from '@ngx-translate/core';\nimport { provideTranslateHttpLoader } from '@ngx-translate/http-loader';\n\n@NgModule({\n imports: [HttpClientModule, FormModule, PipesModule, PaymentBehaviourModule],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: HttpExceptionsInterceptor,\n multi: true,\n },\n { provide: windowToken, useValue: window },\n paymentMethodsResponseFactoryProvider,\n savedMethodsResponseFactoryProvider,\n userBalanceResponseFactoryProvider,\n initializeResponseFactoryProvider,\n submitRequestFactoryProvider,\n submitResponseFactoryProvider,\n syncRequestFactoryProvider,\n syncResponseFactoryProvider,\n statusRequestFactoryProvider,\n statusResponseFactoryProvider,\n checkStatusRequestFactoryProvider,\n checkStatusResponseFactoryProvider,\n statusThreeDsRequestFactoryProvider,\n statusThreeDsResponseFactoryProvider,\n notifyDfpStatusRequestFactoryProvider,\n {\n provide: nextActionsToken,\n useValue: nextActions,\n },\n {\n provide: initializeNextActionsToken,\n useValue: initializeNextActions,\n },\n ...(nextActions as TypeProvider[]),\n ...(initializeNextActions as TypeProvider[]),\n ...(flowUpdateNextActions as TypeProvider[]),\n printInstructionRequestFactoryProvider,\n sendInstructionRequestFactoryProvider,\n sendInstructionStatusResponseFactoryProvider,\n BraintreeHandler,\n CheckoutHandler,\n provideHttpClient(),\n provideTranslateService({\n loader: provideTranslateHttpLoader({\n prefix: './i18n/',\n suffix: '.json',\n }),\n fallbackLang: 'en',\n missingTranslationHandler: {\n provide: MissingTranslationHandler,\n useValue: {\n handle: () => null,\n },\n },\n }),\n ],\n})\nexport class CoreLibraryModule {}\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { GooglePayCheckout } from '../google-pay/google-pay-checkout.interface';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { windowToken } from '../../window.token';\nimport { AppError } from '../../exceptions-handling/errors/app-error.class';\n\nexport type CommonCheckout = GooglePayCheckout;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentSystemProcessingService {\n private readonly statusUrl: BehaviorSubject<string> = new BehaviorSubject('');\n private readonly initialize: BehaviorSubject<boolean> =\n new BehaviorSubject<boolean>(false);\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n ) {}\n\n public get initialize$(): Observable<boolean> {\n return this.initialize.asObservable();\n }\n\n public get status$(): Observable<string> {\n return this.statusUrl.asObservable().pipe(filter((status) => !!status));\n }\n\n public emitStatusUrl(statusUrl: string): void {\n this.statusUrl.next(statusUrl);\n }\n\n public emitInitialize(isInitialized: boolean): void {\n this.initialize.next(isInitialized);\n }\n\n public getDecodedCheckout<T extends CommonCheckout>(\n base64checkoutData: string,\n ): T {\n try {\n return JSON.parse(atob(base64checkoutData)) as T;\n } catch (error: unknown) {\n throw new AppError('load script service: decode error');\n }\n }\n\n public loadScript(\n url: string,\n onLoad: () => void,\n addScriptCustomAttributes?: (\n script: HTMLScriptElement,\n ) => HTMLScriptElement,\n ): void {\n this.initialize.next(false);\n let script: HTMLScriptElement =\n this.window.document.createElement('script');\n\n script.async = true;\n script.src = url;\n\n if (addScriptCustomAttributes) {\n script = addScriptCustomAttributes(script);\n }\n\n this.window.document.body.append(script);\n\n script.onload = () => {\n try {\n onLoad();\n } catch (error: unknown) {\n let message = error;\n\n if (error instanceof Error) {\n message = error.message;\n }\n throw new AppError(\n `Pages: error during script onload handler: ${\n message as string\n }, url - ${url}`,\n );\n }\n };\n\n script.onerror = (\n event: Event | string,\n source?: string,\n lineno?: number,\n colno?: number,\n error?: Error,\n ) => {\n const errorMessage = error ? error.message : '';\n\n let eventMessage = event as string;\n\n if (typeof event === 'object') {\n eventMessage = JSON.stringify(event);\n }\n\n throw new AppError(\n `Pages: error during script onerror handler:\n url - ${url},\n event - ${eventMessage},\n source - ${source ?? ''},\n lineno - ${lineno ?? ''},\n colno - ${colno ?? ''},\n error - ${errorMessage}`,\n );\n };\n }\n\n public isInitialized(): boolean {\n return this.initialize.getValue();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PaymentSystemProcessingService } from '../../payment-systems/payment-system-processing.service';\nimport { GooglePayCheckout } from '../google-pay-checkout.interface';\nimport { GooglePayInitParams } from '../google-pay-init-params.interface';\nimport {\n AllowedPaymentMethod,\n GoogleInitData,\n GooglePayPaymentRequest,\n PaymentDataResponse,\n} from '../google-pay-library.interface';\nimport {\n GooglePayPaymentService,\n PreparePaymentParams,\n} from './google-pay-payment-service.interface';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { LoggerService } from '../../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../../exceptions-handling/errors';\nimport { ErrorTags } from '../../../exceptions-handling/errors/elk-error-types.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GooglePayCheckoutPaymentService\n implements GooglePayPaymentService\n{\n private initParams!: GooglePayInitParams;\n private checkout: GooglePayCheckout | null = null;\n\n public constructor(\n public readonly paymentSystemProcessingService: PaymentSystemProcessingService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly loggerService: LoggerService,\n ) {}\n\n public preparePayment({\n initParams,\n checkDeviceData,\n }: PreparePaymentParams): GoogleInitData | null {\n if (!initParams || !checkDeviceData.base64checkoutData) {\n this.loggerService.error(\n new TaggedError(\n 'Google Pay checkout: missing initParams or base64checkoutData',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n return null;\n }\n\n this.initParams = initParams;\n this.checkout =\n this.paymentSystemProcessingService.getDecodedCheckout<GooglePayCheckout>(\n checkDeviceData.base64checkoutData,\n );\n\n if (!this.checkout) {\n this.loggerService.error(\n new TaggedError('Google Pay checkout: failed to decode checkout data', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n return null;\n }\n\n const checkoutData = this.checkout.request.form.fields;\n const paymentDataRequest = JSON.parse(checkoutData.paymentDataRequest);\n const isReadyToPayRequest = JSON.parse(checkoutData.isReadyToPayRequest);\n\n const result: GoogleInitData = { paymentDataRequest, isReadyToPayRequest };\n\n if (checkoutData.amexCardNotification) {\n result.amexCardNotification = JSON.parse(\n checkoutData.amexCardNotification,\n );\n }\n\n return result;\n }\n\n public getPaymentRequest(): GooglePayPaymentRequest | null {\n if (!this.checkout) return null;\n\n const checkoutData = this.checkout.request.form.fields;\n const paymentDataRequest = JSON.parse(\n checkoutData.paymentDataRequest,\n ) as GooglePayPaymentRequest;\n\n paymentDataRequest.transactionInfo = {\n currencyCode: checkoutData.currency,\n totalPriceStatus: 'FINAL',\n totalPrice: checkoutData.sum?.toString(),\n countryCode: this.initParams.country.toUpperCase(),\n };\n\n return paymentDataRequest;\n }\n\n public getAllowedPaymentMethods(): AllowedPaymentMethod[] {\n if (!this.checkout) return [];\n\n const paymentDataRequest = JSON.parse(\n this.checkout.request.form.fields.paymentDataRequest,\n ) as GooglePayPaymentRequest;\n\n return paymentDataRequest.allowedPaymentMethods;\n }\n\n public handleSuccessfulPayment(response: PaymentDataResponse): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.googlePayHandleSuccessfulPayment,\n 'manual',\n { value: this.checkout?.request?.form?.fields?.returnSuccessUrl ?? '' },\n );\n\n if (!this.checkout) return;\n\n let returnUrl = this.checkout.request.form.fields.returnSuccessUrl;\n\n const data = this.checkout.request.form.fields;\n returnUrl += `&cpf_number=${data.cpf_number}&descriptor=${\n data.descriptor\n }&paymentData=${JSON.stringify(response)}`;\n\n this.paymentSystemProcessingService.emitStatusUrl(returnUrl);\n }\n\n public handleFailedPayment(error: unknown): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.googlePayHandleFailedPayment,\n 'manual',\n { value: this.checkout?.request?.form?.fields?.returnFailUrl ?? '' },\n );\n\n if (!this.checkout) return;\n\n const statusCode = (error as { statusCode?: string })?.statusCode;\n const isStatusCanceled = statusCode && this.isCancelledStatus(statusCode);\n\n if (isStatusCanceled) return;\n\n const returnUrl = this.checkout.request.form.fields.returnFailUrl;\n this.paymentSystemProcessingService.emitStatusUrl(returnUrl);\n }\n\n private isCancelledStatus(statusCode: string): boolean {\n return statusCode.toLowerCase() === 'canceled';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FieldNames } from '../../../payment/field-names.enum';\nimport { Field } from '../../../payment/field.interface';\nimport { CartLine } from '../../../payment/finance-details/cart-line.interface';\nimport { SummaryFinanceDetailsAdapterService } from '../../../payment/finance-details/summary/summary-finance-details-adapter.service';\nimport { XpsFinance } from '../../../payment/xps-finance.interface';\nimport { XpsSummary } from '../../../payment/xps-summary.interface';\nimport { GooglePayInitParams } from '../google-pay-init-params.interface';\nimport {\n AllowedPaymentMethod,\n DisplayItems,\n GoogleInitData,\n GooglePayPaymentRequest,\n} from '../google-pay-library.interface';\nimport { UpdatedPrice } from '../updated-price.interface';\nimport {\n GooglePayPaymentService,\n PreparePaymentParams,\n} from './google-pay-payment-service.interface';\nimport { LoggerService } from '../../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../../exceptions-handling/errors';\nimport { ErrorTags } from '../../../exceptions-handling/errors/elk-error-types.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GooglePayInstantPaymentService implements GooglePayPaymentService {\n private initParams!: GooglePayInitParams;\n private googleInitData: GoogleInitData | null = null;\n\n public constructor(\n private readonly summaryFinanceDetailsAdapterService: SummaryFinanceDetailsAdapterService,\n private readonly loggerService: LoggerService,\n ) {}\n\n public preparePayment({\n initParams,\n checkDeviceData,\n }: PreparePaymentParams): GoogleInitData | null {\n if (!initParams) {\n this.loggerService.error(\n new TaggedError('Google Pay instant: missing initParams', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n return null;\n }\n this.initParams = initParams;\n\n this.googleInitData = this.extractGoogleInitData(initParams.fields);\n\n if (!this.googleInitData) {\n this.loggerService.error(\n new TaggedError(\n 'Google Pay instant: failed to extract google init data from fields',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n return null;\n }\n\n const displayItems: DisplayItems = checkDeviceData.summary\n ? this.getItemsTaxes(checkDeviceData.summary)\n : [];\n\n this.googleInitData.paymentDataRequest = {\n ...this.googleInitData.paymentDataRequest,\n transactionInfo: {\n ...this.googleInitData.paymentDataRequest.transactionInfo,\n totalPriceStatus: 'ESTIMATED',\n totalPrice:\n this.googleInitData.paymentDataRequest.transactionInfo.totalPrice?.toString(),\n countryCode:\n initParams.country.toUpperCase() ??\n this.googleInitData.paymentDataRequest.transactionInfo.countryCode?.toUpperCase(),\n totalPriceLabel:\n this.googleInitData.paymentDataRequest.transactionInfo\n .totalPriceLabel ?? 'Total',\n displayItems,\n },\n shippingAddressRequired: true,\n callbackIntents: ['SHIPPING_ADDRESS', 'PAYMENT_AUTHORIZATION'],\n };\n\n return this.googleInitData;\n }\n\n public getPaymentRequest(): GooglePayPaymentRequest | null {\n if (!this.googleInitData) return null;\n\n return {\n ...this.googleInitData.paymentDataRequest,\n transactionInfo: {\n ...this.googleInitData.paymentDataRequest.transactionInfo,\n totalPriceStatus: 'ESTIMATED',\n totalPrice:\n this.googleInitData.paymentDataRequest.transactionInfo.totalPrice?.toString(),\n countryCode:\n this.initParams.country.toUpperCase() ??\n this.googleInitData.paymentDataRequest.transactionInfo.countryCode?.toUpperCase(),\n },\n shippingAddressRequired: true,\n callbackIntents: ['SHIPPING_ADDRESS', 'PAYMENT_AUTHORIZATION'],\n };\n }\n\n public getAllowedPaymentMethods(): AllowedPaymentMethod[] {\n if (!this.googleInitData) return [];\n return this.googleInitData.paymentDataRequest.allowedPaymentMethods;\n }\n\n private extractGoogleInitData(fields: Field[]): GoogleInitData | null {\n try {\n const googlePayInitData = fields.filter(\n (field) => field.name === FieldNames.googlePayInitData,\n )[0]?.value;\n const data: GoogleInitData | null = JSON.parse(googlePayInitData ?? null);\n return data;\n } catch (error) {\n this.loggerService.error(\n new TaggedError(\n `Google Pay instant: failed to parse googlePayInitData, ${(error as Error).message}`,\n [ErrorTags.GOOGLEPAY],\n ),\n );\n return null;\n }\n }\n\n private getItemsTaxes(summary: XpsSummary): DisplayItems {\n const financeResponse =\n this.summaryFinanceDetailsAdapterService.getFinanceDetails(summary);\n\n const newCartPricing = financeResponse.cartSummary;\n\n if (!newCartPricing.total?.money?.amount || !financeResponse.finance) {\n return [];\n }\n\n const newPrice: UpdatedPrice = {\n total: this.getTotalAmount(financeResponse.finance),\n subtotalDetails: newCartPricing.subtotalDetails,\n subtotalPayment: newCartPricing.subtotalPayment,\n totalDetails: newCartPricing.totalDetails,\n };\n\n const displayItems = [];\n\n if (newPrice.subtotalPayment?.money?.amount) {\n displayItems.push({\n label: newPrice.subtotalPayment.title || 'Subtotal',\n amount: newPrice.subtotalPayment.money?.amount.toString(),\n });\n }\n\n let paymentsDetails: CartLine[] = [];\n\n if (newPrice.subtotalDetails?.length) {\n paymentsDetails = newPrice.subtotalDetails;\n }\n\n if (newPrice.totalDetails?.length) {\n paymentsDetails = paymentsDetails.concat(newPrice.totalDetails);\n }\n\n paymentsDetails.forEach((cartItem) => {\n if (!cartItem.title || !cartItem.money?.amount) {\n return;\n }\n\n displayItems.push({\n label: cartItem.title,\n amount: cartItem.money.amount.toString(),\n });\n });\n\n return displayItems.map((item) => ({\n label: item.label ?? '',\n type: 'TAX',\n price: item.amount,\n }));\n }\n\n private getTotalAmount(finance: XpsFinance): number {\n return finance?.grand_total?.amount ?? finance?.total?.amount;\n }\n}\n","import { Inject, Injectable, Injector } from '@angular/core';\nimport { BehaviorSubject, filter, Observable, Subject, take } from 'rxjs';\nimport { AppError } from '../../exceptions-handling/errors/app-error.class';\nimport { ErrorTags } from '../../exceptions-handling/errors/elk-error-types.enum';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { CheckStatusActionCreator } from '../../payment/actions/check-status/check-status.action.class';\nimport { CheckStatusAction } from '../../payment/actions/check-status/check-status.action.type';\nimport { NextAction } from '../../payment/actions/next-action.interface';\nimport { windowToken } from '../../window.token';\nimport { PaymentSystemProcessingService } from '../payment-systems/payment-system-processing.service';\nimport { CheckPaymentDeviceData } from './check-payment-device-data.interface';\nimport { GooglePayInitParams } from './google-pay-init-params.interface';\nimport {\n GooglePayClient,\n GooglePayClientInitData,\n PaymentAuthorizedHandler,\n PaymentDataChangedHandler,\n} from './google-pay-library.interface';\nimport { GooglePayCheckoutPaymentService } from './payment/google-pay-checkout-payment.service';\nimport { GooglePayInstantPaymentService } from './payment/google-pay-instant-payment.service';\nimport { GooglePayPaymentService } from './payment/google-pay-payment-service.interface';\nimport { LoggerService } from '../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../exceptions-handling/errors';\nimport { GooglePayButtonConfiguration } from './google-pay-button-configuration.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GooglePayService {\n private readonly googlePayScriptUrl = 'https://pay.google.com/gp/p/js/pay.js';\n\n private readonly readyToPay = new BehaviorSubject<boolean | null>(null);\n private readonly paymentWindowIsReady = new Subject<void>();\n private readonly paymentWindowIsClose = new Subject<void>();\n private readonly error = new Subject<unknown>();\n\n private paymentInProgress = false;\n\n private googlePaymentClient: GooglePayClient | null = null;\n private initParams!: GooglePayInitParams;\n private paymentService: GooglePayPaymentService | null = null;\n\n private onPaymentDataChanged!: PaymentDataChangedHandler;\n private onPaymentAuthorized!: PaymentAuthorizedHandler;\n\n private get libraryWasInitialized(): boolean {\n return !!this.window.google;\n }\n\n private get googlePaymentClientWasInitialized(): boolean {\n return !!this.googlePaymentClient;\n }\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n private readonly loggerService: LoggerService,\n private readonly paymentSystemProcessingService: PaymentSystemProcessingService,\n private readonly googlePayCheckoutPaymentService: GooglePayCheckoutPaymentService,\n private readonly googlePayInstantPaymentService: GooglePayInstantPaymentService,\n private readonly injector: Injector,\n ) {}\n\n public get readyToPay$(): Observable<boolean | null> {\n return this.readyToPay.asObservable();\n }\n\n public get paymentWindowIsReady$(): Observable<void> {\n return this.paymentWindowIsReady.asObservable();\n }\n\n public get paymentWindowIsClose$(): Observable<void> {\n return this.paymentWindowIsClose.asObservable();\n }\n\n public get error$(): Observable<unknown> {\n return this.error.asObservable();\n }\n\n public isReadyToPay(): boolean | null {\n return this.readyToPay.getValue();\n }\n\n public initGooglePayLibrary(data: GooglePayInitParams): void {\n this.initParams = data;\n this.onPaymentDataChanged = data.onPaymentDataChanged;\n this.onPaymentAuthorized = data.onPaymentAuthorized;\n\n if (this.libraryWasInitialized && this.googlePaymentClientWasInitialized) {\n return;\n }\n\n if (this.libraryWasInitialized && !this.googlePaymentClientWasInitialized) {\n this.setupGooglePayClient();\n return;\n }\n\n this.paymentSystemProcessingService.loadScript(\n this.googlePayScriptUrl,\n this.onLoadScript.bind(this),\n );\n }\n\n public checkPaymentDevice(data: CheckPaymentDeviceData): void {\n this.paymentSystemProcessingService.initialize$\n .pipe(filter(Boolean), take(1))\n .subscribe(() => {\n if (!this.googlePaymentClient) {\n this.loggerService.error(\n new TaggedError('Google payment client is not initialized', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n throw new AppError(\n `Google Pay: Google payment client is not initialized`,\n );\n }\n\n this.paymentService = this.getPaymentService();\n const initData = this.paymentService.preparePayment({\n initParams: this.initParams,\n checkDeviceData: data,\n });\n\n if (!initData) {\n this.loggerService.error(\n new TaggedError('No initialization data', [ErrorTags.GOOGLEPAY]),\n );\n throw new AppError('Google Pay: no initialization data');\n }\n\n this.googlePaymentClient\n .isReadyToPay(initData.isReadyToPayRequest)\n .then((response) => {\n if (response.result && this.googlePaymentClient) {\n this.googlePaymentClient.prefetchPaymentData(\n initData.paymentDataRequest,\n );\n\n return this.readyToPay.next(true);\n }\n\n this.readyToPay.next(false);\n const result = response.result?.toString() ?? '';\n const isHavePaymentClient = Boolean(\n this.googlePaymentClient,\n ).toString();\n\n const message = `Google Pay: possibly no response.result or googlePaymentClient is missing, result - ${result}, isHavePaymentClient - ${isHavePaymentClient}`;\n this.loggerService.error(\n new TaggedError(message, [ErrorTags.GOOGLEPAY]),\n );\n })\n .catch((error) => {\n this.readyToPay.next(false);\n\n let message = (error as string) ?? '';\n\n if (error instanceof Error) {\n message = error.message;\n }\n\n this.loggerService.error(\n new TaggedError(\n `Google Pay: device is not ready to pay, ${message}`,\n [ErrorTags.GOOGLEPAY],\n ),\n );\n });\n });\n }\n\n public async proceedCheckout(): Promise<CheckStatusAction | null> {\n if (!this.googlePaymentClient) {\n this.loggerService.error(\n new TaggedError(\n 'Google payment client is not initialized to proceed checkout',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n throw new AppError(\n `Google Pay. proceedCheckout: no google payment client`,\n );\n }\n\n if (!this.paymentService) {\n this.loggerService.error(\n new TaggedError(\n 'Google payment service is not initialized to proceed checkout',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n throw new AppError(\n `Google Pay. proceedCheckout: no google payment service`,\n );\n }\n\n // google support only one payment in time\n if (this.paymentInProgress) {\n return Promise.resolve(null);\n }\n\n const paymentDataRequest = this.paymentService.getPaymentRequest();\n\n if (!paymentDataRequest) {\n this.loggerService.error(\n new TaggedError('No data for payment data request', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n throw new AppError(`Google Pay: No data for payment data request`);\n }\n\n const checkStatusAction: NextAction = this.injector\n .get<CheckStatusActionCreator>(CheckStatusActionCreator)\n .getActionData();\n\n try {\n this.paymentInProgress = true;\n\n this.paymentWindowIsReady.next();\n\n const paymentData =\n await this.googlePaymentClient.loadPaymentData(paymentDataRequest);\n\n if (!paymentData?.paymentMethodData?.tokenizationData?.token) {\n this.loggerService.error(\n new TaggedError('Token is missing', [ErrorTags.GOOGLEPAY]),\n );\n throw new AppError('Google Pay: token is missing');\n }\n\n this.paymentService.handleSuccessfulPayment?.(paymentData);\n\n this.paymentWindowIsClose.next();\n\n this.paymentInProgress = false;\n\n return checkStatusAction;\n } catch (error: unknown) {\n this.paymentInProgress = false;\n\n this.paymentService.handleFailedPayment?.(error);\n this.paymentWindowIsClose.next();\n this.error.next(error);\n\n const errorMessage = (error as { message: string })?.message ?? '';\n const errorStatusCode =\n (error as { statusCode: string })?.statusCode ?? '';\n\n const isClosedByUser = this.isClosedByUser(errorMessage);\n const isCanceledStatus = this.isCanceledStatus(errorStatusCode);\n\n if (isClosedByUser || isCanceledStatus) return null;\n\n this.loggerService.error(\n new TaggedError(`Google Pay: proceedCheckout failed, ${errorMessage}`, [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n\n return checkStatusAction;\n }\n }\n\n public createButton(\n onClickHandler: () => void,\n configuration: GooglePayButtonConfiguration,\n ): HTMLButtonElement | null {\n if (!this.googlePaymentClient) {\n this.loggerService.error(\n new TaggedError(\n 'Google payment client is not initialized to create button',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n return null;\n }\n\n const allowedPaymentMethods =\n this.paymentService?.getAllowedPaymentMethods() || [];\n\n return this.googlePaymentClient.createButton({\n onClick: onClickHandler,\n allowedPaymentMethods: allowedPaymentMethods,\n buttonSizeMode: 'fill',\n buttonType: 'buy',\n buttonColor: configuration.color ?? 'default',\n buttonLocale: this.getLocaleForButton(configuration.locale),\n });\n }\n\n private setupGooglePayClient(): void {\n if (!this.window.google) {\n this.loggerService.error(\n new TaggedError('Google Pay library is not available on window', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n return;\n }\n\n const environment = this.initParams.isSandbox ? 'TEST' : 'PRODUCTION';\n const googlePaymentClientData: GooglePayClientInitData = {\n environment,\n };\n\n if (this.initParams.isInstantPayFlow) {\n googlePaymentClientData.paymentDataCallbacks = {\n onPaymentDataChanged: this.onPaymentDataChanged,\n onPaymentAuthorized: this.onPaymentAuthorized,\n };\n }\n\n this.googlePaymentClient =\n new this.window.google.payments.api.PaymentsClient(\n googlePaymentClientData,\n );\n }\n\n private onLoadScript(): void {\n if (!this.window.google) {\n const retryTimeout = 1000;\n\n this.loggerService.error(\n new TaggedError(\n 'Google Pay: library not available after script load, retrying',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n\n setTimeout(() => {\n const isAvailableGoogleClient = !!this.window.google;\n\n if (isAvailableGoogleClient) {\n this.setupGooglePayClient();\n\n this.paymentSystemProcessingService.emitInitialize(true);\n }\n }, retryTimeout);\n\n throw new AppError('Google Pay: google library now is available');\n } else {\n this.setupGooglePayClient();\n\n this.paymentSystemProcessingService.emitInitialize(true);\n }\n }\n\n private getPaymentService(): GooglePayPaymentService {\n if (this.initParams.isInstantPayFlow)\n return this.googlePayInstantPaymentService;\n return this.googlePayCheckoutPaymentService;\n }\n\n private isClosedByUser(message: string): boolean {\n return message.toLowerCase().includes('user closed the payment request ui');\n }\n\n private isCanceledStatus(statusCode: string): boolean {\n return statusCode.toLowerCase() === 'canceled';\n }\n\n private getLocaleForButton(userLocale: string): string {\n const allowedLocales = [\n 'en',\n 'ar',\n 'bg',\n 'ca',\n 'cs',\n 'da',\n 'de',\n 'el',\n 'es',\n 'et',\n 'fi',\n 'fr',\n 'hr',\n 'id',\n 'it',\n 'ja',\n 'ko',\n 'ms',\n 'nl',\n 'no',\n 'pl',\n 'pt',\n 'ru',\n 'sk',\n 'sl',\n 'sr',\n 'sv',\n 'th',\n 'tr',\n 'uk',\n 'zh',\n ];\n\n if (['cn', 'zh_HANT'].includes(userLocale)) {\n return 'zh';\n }\n\n if (['zh_HANS'].includes(userLocale)) {\n return 'tw';\n }\n\n return allowedLocales.find((locale) => locale === userLocale) ?? 'en';\n }\n}\n","export enum ApplePayIntegrationType {\n redirect = 'redirect',\n native = 'native',\n}\n\nexport type ApplePayIntegration = ApplePayIntegrationType;\n","import { ApplePayShippingContact } from './session-handlers/apple-pay-session.interface';\nimport { ShippingAddress } from './shipping-address.interface';\n\nexport const mapShippingAddressToContact = (\n shippingAddress: ShippingAddress,\n): ApplePayShippingContact => {\n return {\n postalCode: shippingAddress.zip,\n country: shippingAddress.country,\n countryCode: shippingAddress.country,\n administrativeArea: '',\n locality: '',\n newLineItems: [],\n };\n};\n","import { FieldNames } from './payment/field-names.enum';\n\nexport const agreementsGroup = [\n FieldNames.licenseDisclaimer,\n FieldNames.termsAndConditions,\n FieldNames.termsAndConditionsHtcEula,\n FieldNames.termsAndConditionsAtariTc,\n FieldNames.termsAndConditionsAtariPp,\n FieldNames.termsAndConditionsRolandEula,\n FieldNames.termsAndConditionsRobloxEula,\n FieldNames.termsAndConditionsDeusLoVultEula,\n FieldNames.termsAndConditionsOnzenga,\n FieldNames.take2Taxes,\n FieldNames.rockstarTaxes,\n FieldNames.omnibusDirective,\n FieldNames.koreaLimitsInstruction,\n FieldNames.koreaCashReceiptInstruction,\n];\n","import { Injectable } from '@angular/core';\nimport { agreementsGroup } from '../../../agreements-group.const';\nimport { FieldNames } from '../../../payment/field-names.enum';\nimport { Field } from '../../../payment/field.interface';\nimport { PaymentForm } from '../../../payment/payment-form.interface';\nimport { XpsSummary } from '../../../payment/xps-summary.interface';\nimport { ApplePayParams } from '../apple-pay-params.interface';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplePayParamsBuilderService {\n private readonly agreementFieldsNames: string[] = agreementsGroup;\n\n public buildParams(paymentForm: PaymentForm): ApplePayParams | null {\n const { fields, summary } = paymentForm;\n\n if (!fields || !summary) return null;\n\n const formFields = fields.reduce(\n (acc: { [key: string]: string }, field) => {\n if (\n this.agreementFieldsNames.includes(field.name) &&\n field.isVisible === XpsBoolean.true\n ) {\n acc[field.name] = field.title;\n } else {\n acc[field.name] = field.value;\n }\n\n return acc;\n },\n {},\n );\n\n const agreements = this.agreementFieldsNames\n .map((fieldName) => [fieldName, formFields[fieldName]])\n .filter((fieldEntry) => {\n const [, value] = fieldEntry;\n return !!value;\n });\n\n return {\n tokenKey: this.getAppleToken(fields),\n totalLabel: formFields[FieldNames.labelApplePay] ?? '',\n totalAmount: this.getTotalAmount(summary),\n currencyCode: this.getTotalCurrency(summary),\n countryCode: formFields[FieldNames.countryCode] ?? '',\n merchantCapabilities: this.getJsonValueFromField(\n formFields,\n FieldNames.merchantCapabilities,\n ),\n requiredBillingContactFields: this.getJsonValueFromField(\n formFields,\n FieldNames.requiredBillingContactFields,\n ),\n requiredShippingContactFields: this.getJsonValueFromField(\n formFields,\n FieldNames.requiredShippingContactFields,\n ),\n supportedNetworks: this.getJsonValueFromField(\n formFields,\n FieldNames.supportedNetworks,\n ),\n agreements,\n acquirer: formFields[FieldNames.acquirer] ?? '',\n isSandbox: formFields[FieldNames.isSandbox] ?? '',\n payInstanceAccountId: formFields[FieldNames.payInstanceAccountId] ?? '',\n getApplePaySessionUrl: formFields[FieldNames.getApplePaySessionUrl] ?? '',\n payViaCheckoutUrl: formFields[FieldNames.payViaCheckoutUrl] ?? '',\n };\n }\n\n public updateParams(\n params: ApplePayParams,\n summary: XpsSummary,\n ): ApplePayParams {\n return {\n ...params,\n totalAmount: this.getTotalAmount(summary),\n currencyCode: this.getTotalCurrency(summary),\n };\n }\n\n private getJsonValueFromField(\n fields: {\n [key: string]: string;\n },\n fieldName: string,\n ): string[] | undefined {\n const field = fields[fieldName];\n\n try {\n return field ? (JSON.parse(field) as string[]) : undefined;\n } catch (error: unknown) {\n return undefined;\n }\n }\n\n private getAppleToken(fields: Field[]): string {\n const appleTokenField = fields.find((field) => {\n return field.name === 'token_key';\n });\n\n if (!appleTokenField) {\n return '';\n }\n\n return appleTokenField.value;\n }\n\n private getTotalAmount(summary: XpsSummary): string {\n const finance = summary?.finance;\n const total = finance?.grand_total?.amount ?? finance?.total.amount;\n\n return total?.toString() ?? '';\n }\n\n private getTotalCurrency(summary: XpsSummary): string {\n const finance = summary?.finance;\n return finance?.grand_total?.currency ?? finance?.total?.currency ?? '';\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { windowToken } from '../../window.token';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { ErrorTags } from '../../exceptions-handling/errors/elk-error-types.enum';\nimport { Observable, Subject } from 'rxjs';\nimport { LoggerService } from '../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../exceptions-handling/errors';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplePaySdkService {\n public readonly needToAddApplePayJs: boolean;\n public sdkLoaded = false;\n\n private readonly jsSdk =\n 'https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js';\n private readonly sdkSuccessfulPayment: Subject<void> = new Subject();\n private readonly windowClosing: Subject<void> = new Subject();\n private readonly successPaymentType = 'successClose';\n private readonly windowClosingType = 'windowclosing';\n\n private applePaySdkPostMessagesListener!: (event: MessageEvent) => void;\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly loggerService: LoggerService,\n ) {\n this.needToAddApplePayJs = !this.window.ApplePaySession;\n }\n\n public get windowClosing$(): Observable<void> {\n return this.windowClosing.asObservable();\n }\n\n public emitWindowClosing(): void {\n return this.windowClosing.next();\n }\n\n public addApplePaySdkJs(): void {\n const isApplePayJsAdded = this.isAppleSdkExist();\n\n if (!this.needToAddApplePayJs) {\n if (isApplePayJsAdded) {\n this.sdkLoaded = true;\n }\n\n return;\n }\n\n const listenApplePayPostMessages = (): void => {\n this.applePaySdkPostMessagesListener = (\n event: MessageEvent<{ messageType: string }>,\n ) => {\n /* istanbul ignore if */\n if (!event.origin.includes('apple')) {\n return;\n }\n\n /* istanbul ignore if */\n if (event.data.messageType === this.windowClosingType) {\n this.emitWindowClosing();\n }\n\n /* istanbul ignore if */\n if (event.data.messageType === this.successPaymentType) {\n this.sdkSuccessfulPayment.next();\n }\n };\n\n this.window.addEventListener(\n 'message',\n this.applePaySdkPostMessagesListener,\n );\n };\n\n if (isApplePayJsAdded && this.window.ApplePaySession) {\n this.sdkLoaded = true;\n listenApplePayPostMessages();\n return;\n }\n\n const firstScriptElement =\n this.window.document.getElementsByTagName('script')[0];\n const script = this.window.document.createElement('script');\n script.async = true;\n script.crossOrigin = 'anonymous';\n script.src = `${this.jsSdk}`;\n firstScriptElement?.parentNode?.insertBefore(script, firstScriptElement);\n script.onload = () => {\n this.sdkLoaded = true;\n listenApplePayPostMessages();\n };\n script.onerror = (error: unknown) => {\n this.loggerService.error(\n new TaggedError(\n 'Apple pay: script sdk loading error',\n [ErrorTags.APPLEPAY],\n // @ts-expect-error error type\n { error: error?.message ? error.toString() : JSON.stringify(error) },\n ),\n );\n console.error('Apple pay: script sdk loading error', error);\n };\n }\n\n /* istanbul ignore next */\n public removeListeners(): void {\n if (!this.applePaySdkPostMessagesListener) {\n return;\n }\n this.window.removeEventListener(\n 'message',\n this.applePaySdkPostMessagesListener,\n );\n }\n\n private isAppleSdkExist(): boolean {\n const scriptsElements = this.window.document.querySelectorAll('script');\n\n return Array.from(scriptsElements).some(\n (element) => element.src === this.jsSdk,\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { SecureApiClient } from '../../http/secure-api/secure-api.service';\nimport { BridgeConnectionChannel } from './bridge-connection-channel.interface';\nimport { BridgeRequestMessagePayload } from './bridge-request-payload.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SocketBridgeService {\n private readonly apiUrl = 'socket_bridge';\n private token!: string;\n\n public constructor(private readonly secureApiClient: SecureApiClient) {}\n\n public async getBridgeConnectionChannel(\n token: string,\n ): Promise<BridgeConnectionChannel> {\n this.token = token;\n const params = new HttpParams().set('access_token', token);\n\n return firstValueFrom(\n this.secureApiClient.get<BridgeConnectionChannel>(\n `${this.apiUrl}/socket_url`,\n {\n params,\n },\n ),\n );\n }\n\n public async publishMessage<P = { [key: string]: unknown }>(\n message: string,\n messagePayload?: P,\n ): Promise<void> {\n const requestPayload: BridgeRequestMessagePayload<P> = {\n message: {\n command: message,\n data: messagePayload,\n },\n };\n\n const endpointUrl = `${this.apiUrl}/message?access_token=${this.token}`;\n\n return firstValueFrom(\n this.secureApiClient.post<void, BridgeRequestMessagePayload<P>>(\n endpointUrl.toString(),\n requestPayload,\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/json; charset=utf-8',\n ),\n responseType: 'json',\n },\n ),\n );\n }\n}\n","import { Observable } from 'rxjs';\nimport { filter, map, tap } from 'rxjs/operators';\nimport { Inject, Injectable } from '@angular/core';\nimport { WebSocketFactory } from '../../../web-socket/web-socket.factory';\nimport { WebSocketClient } from '../../../web-socket/web-socket.interface';\nimport { windowToken } from '../../../window.token';\nimport { ExtendedWindow } from '../../../extended-window.interface';\nimport { SocketBridgeService } from '../../../web-socket/socket-bridge/socket-bridge.service';\nimport { WindowCloseMessage } from '../socket-messages/window-close-message.interface';\nimport { WindowCommand } from '../../../window-command.interface';\nimport { CommandsForPages } from '../commands-for-pages.enum';\nimport { BridgeCommand } from '../../../web-socket/socket-bridge/bridge-command.interface';\nimport { RecalculateCartMessage } from '../socket-messages/recalculate-cart-message.interface';\nimport { ApplePaySendTokenMessage } from '../socket-messages/send-token-message.interface';\nimport { ReturnMessage } from '../socket-messages/return-message.interface';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplePayExternalWindowCommunicationService {\n private websocketClient!: WebSocketClient;\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly webSocketFactory: WebSocketFactory,\n private readonly socketBridgeService: SocketBridgeService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {}\n\n public getWindowClose$(): Observable<WindowCloseMessage> {\n const isWindowCloseMessage = (\n message: WindowCommand,\n ): message is WindowCloseMessage =>\n message.command === CommandsForPages.APPLE_PAY_WINDOW_CLOSE;\n\n const eventSource$ =\n this.getEventSource<WindowCloseMessage>(isWindowCloseMessage);\n\n return eventSource$.pipe(\n tap(() => {\n this.window.focus();\n }),\n );\n }\n\n public getWindowReturnMessage$(): Observable<ReturnMessage> {\n const isReturnMessage = (\n message: WindowCommand,\n ): message is ReturnMessage =>\n message.command === CommandsForPages.APPLE_PAY_RETURN;\n\n const eventSource$ = this.getEventSource<ReturnMessage>(isReturnMessage);\n\n return eventSource$.pipe(\n tap(() => {\n // TODO: send close event to sdk\n }),\n );\n }\n\n public getWindowSendTokenMessage$(): Observable<ApplePaySendTokenMessage> {\n const isSendTokenMessage = (\n message: WindowCommand,\n ): message is ApplePaySendTokenMessage =>\n message.command === CommandsForPages.APPLE_PAY_SEND_TOKEN;\n\n return this.getEventSource<ApplePaySendTokenMessage>(isSendTokenMessage);\n }\n\n public getCartRecalculationMessage$(): Observable<RecalculateCartMessage> {\n const isRecalculateCartMessage = (\n message: WindowCommand,\n ): message is RecalculateCartMessage =>\n message.command === CommandsForPages.APPLE_PAY_RECALCULATE_CART;\n\n return this.getEventSource<RecalculateCartMessage>(\n isRecalculateCartMessage,\n );\n }\n\n public async openWebSocketConnection(token: string): Promise<void> {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayOpenWebSocketConnection,\n 'manual',\n );\n\n const bridgeInfo =\n await this.socketBridgeService.getBridgeConnectionChannel(token);\n\n if (this.websocketClient) {\n this.websocketClient.close();\n }\n\n this.websocketClient = this.webSocketFactory.createWebSocketClient(\n bridgeInfo.subscribeUrl,\n bridgeInfo.clientType,\n );\n\n await this.websocketClient.open(\n bridgeInfo.subscribeUrl,\n bridgeInfo.channelName,\n );\n }\n\n public async sendMessageToAnotherWindow<P extends { [key: string]: unknown }>(\n command: CommandsForPages,\n payload?: P,\n ): Promise<void> {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePaySendMessageToAnotherWindow,\n 'manual',\n { value: command },\n );\n\n await this.socketBridgeService.publishMessage<P>(command, payload);\n }\n\n private getEventSource<T extends WindowCommand>(\n eventHandler: (message: WindowCommand) => message is T,\n ): Observable<T> {\n return this.websocketClient.messages$.pipe(\n map<string, BridgeCommand>((message) => {\n console.info('websocket message', message);\n return JSON.parse(message) as BridgeCommand;\n }),\n filter<BridgeCommand, T>(eventHandler),\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { ApplePay, applePay, client } from 'braintree-web';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport {\n payStation4Url,\n sandboxPayStationUrl,\n} from '../../payment/actions/redirect/pay-station4-url.const';\nimport { applePayId } from '../../payment/actions/redirect/ps4-pages/pages-payment-methods-id.const';\nimport { pagesRoutes } from '../../payment/actions/redirect/ps4-pages/pages-routes.const';\nimport { FieldNames } from '../../payment/field-names.enum';\nimport { SummaryFinanceDetailsAdapterService } from '../../payment/finance-details/summary/summary-finance-details-adapter.service';\nimport { XpsResponse } from '../../payment/xps-response.interface';\nimport { windowToken } from '../../window.token';\nimport {\n ApplePayIntegration,\n ApplePayIntegrationType,\n} from './apple-pay-integration.type';\nimport { ApplePayParams } from './apple-pay-params.interface';\nimport { applePayVersion } from './apple-pay.const';\nimport { ApplePayErrors } from './apple-pay.errors.enum';\nimport { BraintreeHandler } from './session-handlers/braintree.handler';\nimport { CheckoutHandler } from './session-handlers/checkout.handler';\nimport { ApplePaySessionHandler } from './session-handlers/session-handler.type';\nimport { PaymentForm } from '../../payment/payment-form.interface';\nimport { ApplePayParamsBuilderService } from './params-builder/apple-pay-params-builder.service';\nimport { ErrorTags } from '../../exceptions-handling/errors/elk-error-types.enum';\nimport { StartSessionParams } from './session-handlers/start-session-params.interface';\nimport { ApplePaySdkService } from './apple-pay-sdk.service';\nimport { ApplePayExternalWindowCommunicationService } from './external-window-communication/external-window-communication.service';\nimport { mapShippingAddressToContact } from './map-shipping-address-to-contact.function';\nimport { RecalculateCartMessage } from './socket-messages/recalculate-cart-message.interface';\nimport { ApplePaySendTokenMessage } from './socket-messages/send-token-message.interface';\nimport { WindowCloseMessage } from './socket-messages/window-close-message.interface';\nimport { ReturnMessage } from './socket-messages/return-message.interface';\nimport { SettingsService } from '../../settings/settings.service';\nimport { ShippingAddress } from './shipping-address.interface';\nimport { ApplePayShippingContact } from './session-handlers/apple-pay-session.interface';\nimport { UpdatedPrice } from './updated-price.interface';\nimport { UpdatePriceMessage } from './socket-messages/update-price-message.interface';\nimport { CommandsForPages } from './commands-for-pages.enum';\nimport { LoggerService } from '../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../exceptions-handling/errors/tagged-error.class';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplePayService {\n private readonly payment: Subject<string> = new Subject();\n private readonly error: Subject<ApplePayErrors> = new Subject();\n private readonly integrationType: Subject<ApplePayIntegration> =\n new Subject();\n private readonly applePayQrOpened: Subject<void> = new Subject();\n private readonly destroy$ = new Subject<void>();\n\n private paymentClient: ApplePay | null = null;\n\n private readonly api: Promise<{\n applePay: typeof applePay;\n client: typeof client;\n }>;\n private applePayParams: ApplePayParams | null = null;\n private order?: string | null = null;\n\n public get paymentParameters(): ApplePayParams | null {\n return this.applePayParams;\n }\n\n public get payment$(): Observable<string> {\n return this.payment.asObservable();\n }\n\n public get error$(): Observable<ApplePayErrors> {\n return this.error.asObservable();\n }\n\n /* istanbul ignore next */\n public get applePayQrOpened$(): Observable<void> {\n return this.applePayQrOpened.asObservable();\n }\n\n /* istanbul ignore next */\n public get windowClosing$(): Observable<void> {\n return this.applePaySdkService.windowClosing$;\n }\n\n public get integrationType$(): Observable<ApplePayIntegration> {\n return this.integrationType.asObservable();\n }\n\n public get getCartRecalculationMessage$(): Observable<RecalculateCartMessage> {\n return this.externalWindowCommunicationService\n .getCartRecalculationMessage$()\n .pipe(takeUntil(this.destroy$));\n }\n\n public get getWindowSendTokenMessage$(): Observable<ApplePaySendTokenMessage> {\n return this.externalWindowCommunicationService\n .getWindowSendTokenMessage$()\n .pipe(takeUntil(this.destroy$));\n }\n\n public get getWindowClose$(): Observable<WindowCloseMessage> {\n return this.externalWindowCommunicationService\n .getWindowClose$()\n .pipe(takeUntil(this.destroy$));\n }\n\n public get getWindowReturnMessage$(): Observable<ReturnMessage> {\n return this.externalWindowCommunicationService\n .getWindowReturnMessage$()\n .pipe(takeUntil(this.destroy$));\n }\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly summaryFinanceDetailsAdapterService: SummaryFinanceDetailsAdapterService,\n private readonly braintreeHandler: BraintreeHandler,\n private readonly checkoutHandler: CheckoutHandler,\n private readonly appleParamsBuilder: ApplePayParamsBuilderService,\n private readonly loggerService: LoggerService,\n private readonly applePaySdkService: ApplePaySdkService,\n private readonly externalWindowCommunicationService: ApplePayExternalWindowCommunicationService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly settingsService: SettingsService,\n ) {\n this.api = this.loadBraintree();\n\n this.subscribeToHandlers();\n }\n\n /* istanbul ignore next */\n public addApplePaySdkJs(): void {\n this.applePaySdkService.addApplePaySdkJs();\n }\n\n /* istanbul ignore next */\n public removeListeners(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.applePaySdkService.removeListeners();\n }\n\n public setApplePayParams(data: { paymentForm: PaymentForm }): void {\n const paymentForm = data?.paymentForm;\n const formFields = paymentForm?.fields;\n const summary = paymentForm?.summary;\n\n if (!formFields || !summary) {\n return;\n }\n\n this.applePayParams = this.appleParamsBuilder.buildParams(paymentForm);\n }\n\n public async initBraintreeLibrary(tokenKey: string): Promise<void> {\n try {\n const api = await this.api;\n const clientInstance = await api.client.create({\n authorization: tokenKey,\n });\n\n this.paymentClient = await api.applePay.create({\n client: clientInstance,\n });\n this.braintreeHandler.setClient(this.paymentClient);\n } catch (error: unknown) {\n console.error(ApplePayErrors.braintreeInitializeError, error);\n this.loggerService.error(\n new TaggedError(ApplePayErrors.braintreeInitializeError, [\n ErrorTags.APPLEPAY,\n ]),\n );\n }\n\n if (!this.paymentClient || !this.isDeviceCapable) {\n this.emitError(ApplePayErrors.deviceIsNotCapableError);\n }\n }\n\n public async initApplePay(\n tokenKey: string,\n isApplePayInstantFlowEnabled: boolean,\n ): Promise<void> {\n if (this.applePayParams?.acquirer === 'braintree') {\n await this.initBraintreeLibrary(tokenKey);\n }\n\n this.emitIntegrationType(isApplePayInstantFlowEnabled);\n }\n\n public async startWindowCommunication(): Promise<void> {\n await this.externalWindowCommunicationService.openWebSocketConnection(\n this.settingsService.token,\n );\n }\n\n public sendUpdatedPriceViaWindowCommunication(\n updatedPrice: UpdatedPrice,\n ): void {\n void this.externalWindowCommunicationService.sendMessageToAnotherWindow<\n UpdatePriceMessage['data']\n >(CommandsForPages.APPLE_PAY_UPDATE_PRICE, {\n newCartPricing: updatedPrice,\n });\n }\n\n public redirectToPaymentPage(\n parameters: ApplePayParams,\n token: string,\n isSandbox?: boolean,\n ): string | undefined {\n const route = pagesRoutes.get(applePayId);\n if (!route) {\n return;\n }\n\n const query = new URLSearchParams({\n ...parameters,\n merchantCapabilities: JSON.stringify(parameters.merchantCapabilities),\n supportedNetworks: JSON.stringify(parameters.supportedNetworks),\n requiredBillingContactFields: JSON.stringify(\n parameters?.requiredBillingContactFields,\n ),\n requiredShippingContactFields: JSON.stringify(\n parameters?.requiredShippingContactFields,\n ),\n agreements: JSON.stringify(parameters.agreements),\n token,\n });\n\n if (this.order) {\n query.append('order', this.order);\n }\n\n const payStationUrl = isSandbox ? sandboxPayStationUrl : payStation4Url;\n return `${payStationUrl}/en${route}?${query.toString()}`;\n }\n\n public setOrder(data: { paymentForm: PaymentForm }): void {\n const summary = data?.paymentForm?.summary;\n if (!summary) {\n return;\n }\n\n const financeDetails =\n this.summaryFinanceDetailsAdapterService.getFinanceDetails(summary);\n\n if (financeDetails?.purchase && financeDetails?.finance) {\n const cartItems = financeDetails.cartItems;\n this.order = cartItems?.reduce((curr, item) => {\n if (curr) {\n return curr + `; ${item.title}`;\n }\n\n return curr + item.title;\n }, '');\n }\n }\n\n public get isDeviceCapable(): boolean {\n if (this.applePaySdkService.needToAddApplePayJs) {\n return true;\n }\n\n try {\n return Boolean(\n this.window.ApplePaySession?.supportsVersion(applePayVersion) &&\n this.window.ApplePaySession?.canMakePayments(),\n );\n } catch (error: unknown) {\n return false;\n }\n }\n\n public getTokenNonceFieldData(tokenNonce: string): {\n name: string;\n value: string;\n } {\n const name = FieldNames.tokenApplePay;\n const value = btoa(tokenNonce);\n return { name, value };\n }\n\n public updateApplePayParams(data: unknown): void {\n const summary = (data as XpsResponse)?.summary;\n if (!this.applePayParams || !summary) {\n return;\n }\n\n this.applePayParams = this.appleParamsBuilder.updateParams(\n this.applePayParams,\n summary,\n );\n }\n\n public proceedCheckout(\n parameters: ApplePayParams,\n additionalParams: StartSessionParams,\n ): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayAcquirer,\n 'manual',\n { value: parameters.acquirer },\n );\n\n const sessionHandler = this.getSessionHandler(parameters.acquirer);\n\n if (!sessionHandler) {\n console.error('Apple Pay: Unsupported acquirer:', parameters.acquirer);\n return;\n }\n\n sessionHandler.startSession(parameters, additionalParams, () =>\n this.applePaySdkService.emitWindowClosing(),\n );\n this.emitApplePayOpened(\n additionalParams.isApplePayInstantFlowEnabled ?? false,\n );\n }\n\n public mapShippingAddressToContact(\n shippingAddress: ShippingAddress,\n ): ApplePayShippingContact {\n return mapShippingAddressToContact(shippingAddress);\n }\n\n public setToken(token: string): void {\n this.payment.next(token);\n }\n\n private getSessionHandler(\n acquirer: string,\n ): ApplePaySessionHandler | undefined {\n switch (acquirer) {\n case 'braintree':\n return this.braintreeHandler;\n case 'checkout':\n return this.checkoutHandler;\n default:\n return undefined;\n }\n }\n\n private async loadBraintree(): Promise<{\n applePay: typeof applePay;\n client: typeof client;\n }> {\n const api = await import('braintree-web');\n return api;\n }\n\n private emitError(error: ApplePayErrors): void {\n this.error.next(error);\n }\n\n private emitIntegrationType(isApplePayInstantFlowEnabled: boolean): void {\n this.integrationType.next(\n this.getIntegrationType(isApplePayInstantFlowEnabled),\n );\n }\n\n private subscribeToHandlers(): void {\n const handlers = [this.braintreeHandler, this.checkoutHandler];\n\n handlers.forEach((handler) => {\n handler.error$.subscribe((error) => this.emitError(error));\n handler.payment$.subscribe((token) => {\n this.payment.next(token);\n });\n });\n }\n\n private getIntegrationType(\n isApplePayInstantFlowEnabled: boolean,\n ): ApplePayIntegrationType {\n /* istanbul ignore next */\n return this.isDeviceCapable && isApplePayInstantFlowEnabled\n ? ApplePayIntegrationType.native\n : ApplePayIntegrationType.redirect;\n }\n\n private emitApplePayOpened(isApplePayInstantFlowEnabled: boolean): void {\n /* istanbul ignore next */\n if (\n this.getIntegrationType(isApplePayInstantFlowEnabled) ===\n ApplePayIntegrationType.native &&\n this.applePaySdkService.needToAddApplePayJs\n ) {\n this.applePayQrOpened.next();\n }\n }\n}\n","/*\n * Public API Surface of core-library\n */\n\nexport * from './lib/core-library.service';\nexport * from './lib/core-library.module';\nexport * from './lib/core/legal/legal.component.config';\n\nexport * from './lib/core/sdk-payment-systems/payment-systems/payment-system-processing.service';\nexport * from './lib/core/sdk-payment-systems/google-pay/google-pay.service';\n\nexport * from './lib/core/sdk-payment-systems/apple-pay/apple-pay.service';\nexport * from './lib/core/sdk-payment-systems/apple-pay/apple-pay-cart/apple-pay-cart.service';\nexport * from './lib/core/sdk-payment-systems/apple-pay/apple-pay-params.interface';\n\nexport * from './lib/core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nexport * from './lib/core/payment/form/control-status.interface';\nexport * from './lib/core/payment/field-names.enum';\n\nexport * from './lib/core/credit-card/credit-card-types.enum';\nexport * from './lib/core/countries-api/country-response.interface';\nexport * from './lib/core/transaction-initiation-type.enum';\n\nexport * from './lib/core/sdk-payment-systems/google-pay/google-pay-button-color.type';\n\nexport * from './lib/core/xsolla-number/api/send-instruction/response/send-instruction-response.interface';\n\nexport * from './lib/core/exceptions-handling/errors';\nexport * from './lib/core/exceptions-handling/messages';\nexport * from './lib/core/exceptions-handling/logger';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SecureApiClient","i1.SettingsService","i2.UserAgentService","i1.CommonLogAttributesService","i2","i1.ElkLoggerService","i2.CountryService","i3.SecureApiClient","i2.SecureApiClient","i1.UrlService","i2.SettingsService","i3.CountryService","i4.UserAgentService","i1.PaymentConfigService","i2.CapabilitiesService","i2.EventBuilderService","i3.SettingsService","i1.ShowErrorsActionCreator","i2.UserBehaviourAnalyticsService","i1.UnescapeHtmlPipe","i1.CreditCardService","i1.XpsApiService","i4.NextActionService","i5.XpsResponseErrorsMappingService","i6.EncryptCreditCardService","i7.ShowErrorsActionCreator","i8.UserBehaviourAnalyticsService","i9.PaymentSettingsService","i10.SessionService","i11.ServerErrorActionCreator","i2.DeviceFingerPrintService","i3.XpsApiService","i4.XpsResponseErrorsMappingService","i5.EncryptCreditCardService","i6.UserBehaviourAnalyticsService","i7.PaymentSettingsService","i8.NextActionService","i9.ServerErrorActionCreator","i2.NextActionService","i6.ShowErrorsActionCreator","i7.UserBehaviourAnalyticsService","i8.PaymentSettingsService","i9.SessionService","i10.ServerErrorActionCreator","i1.SyncService","i3.SessionService","i2.CreditCardMaxLengthValidator","i3.CreditCardMinLengthValidator","maxMonths","getMinMonth","sendErrMessage","getLastCharactersInYear","maxYearsCount","i1.ControlConfigService","i1.SummaryFinanceDetailsAdapterService","i1.SessionService","i2.SummaryFinanceDetailsAdapterService","i3.StatusFinanceDetailsAdapterService","i4.UserBehaviourAnalyticsService","i3.XpsResponseErrorsMappingService","map","i1.LoggerService","i1.NchanWebSocketService","i2.CentrifugoWebSocketService","i1.WebSocketFactory","filter","i1.StatusRequestService","i2.CheckStatusService","i3.WebsocketStatusService","i2.ListenStatusService","i3.SavedPaymentAccountChangesService","i5.CheckStatusService","i6.StatusUpdatedActionCreator","i2.StatusRequestService","i3.FinanceDetailsService","i4.ListenStatusService","i5.NextActionService","i6.SavePaymentMethodStatusService","i7.StatusUpdatedActionCreator","i1.UserBehaviourAnalyticsService","i1.NotifyDfpStatusService","i1.StatusThreeDsService","i2.NotifyDfpStatusService","i3.WebSocketFactory","i4.DfpCollectService","i5.ReinsuranceCheckService","i1.ThreeDs20Service","i3.CheckStatusActionCreator","i4.ThreeDsActionCreator","i5.ThreeDsRedirectActionCreator","i2.InitializeService","i3.SubmitService","i4.SyncService","i5.FormService","i6.StatusService","i7.FinanceDetailsService","i8.CreditCardStateService","i9.NextActionService","i10.InitializeNextActionService","i11.ControlConfigService","i12.ThreeDsService","i13.FormMessagesService","i14.SettingsService","i15.CountryService","i16.CheckStatusActionCreator","i17.PrintInstructionService","i18.PaymentBehaviourService","i20.UserBehaviourAnalyticsService","i1.CountryService","i3.RefundPolicyService","i4.DisclaimerService","i1.SavedMethodsService","i1.PaymentMethodsService","i2.SavedMethodsService","i2.LoggerService","i4.PaymentMethodsService","i5.SavedMethodsService","i6.UserBalanceService","i7.PaymentConfigService","i8.PaymentService","i9.DeviceFingerPrintService","i10.FinanceDetailsService","i11.LegalService","i12.StatusService","i13.NextActionService","i14.CreditCardService","i15.CreditCardStateService","i16.FormMessagesService","i17.EditSavedMethodsService","i18.UserBehaviourAnalyticsService","i19.PerformanceService","i20.CombinedPaymentMethodsService","i21.CountriesApiService","i22.SendInstructionService","i23.ScriptTrackerService","i24","i25.CommonLogAttributesService","i26.CapabilitiesService","i1","i2.ApplePayCartService","i3.UserBehaviourAnalyticsService","i1.PaymentSystemProcessingService","i3.LoggerService","i2.PaymentSystemProcessingService","i3.GooglePayCheckoutPaymentService","i4.GooglePayInstantPaymentService","i2.SocketBridgeService","i2.BraintreeHandler","i3.CheckoutHandler","i4.ApplePayParamsBuilderService","i5.LoggerService","i6.ApplePaySdkService","i7.ApplePayExternalWindowCommunicationService","i9.SettingsService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"xsolla-payment-client-core.mjs","sources":["../../src/lib/shared/translate/translate.helper.ts","../../src/lib/core/exceptions-handling/errors/app-error.class.ts","../../src/lib/core/settings/empty-utils-response.error.ts","../../src/lib/core/window.token.ts","../../src/lib/core/http/secure-api/api-url.const.ts","../../src/lib/core/http/secure-api/secure-api.service.ts","../../src/lib/core/settings/settings.service.ts","../../src/lib/core/exceptions-handling/errors/elk-error-types.enum.ts","../../src/lib/core/exceptions-handling/errors/tagged-error.class.ts","../../src/lib/core/user-agent/browsers.ts","../../src/lib/core/user-agent/device.enum.ts","../../src/lib/core/user-agent/os.ts","../../src/lib/core/user-agent/user-agent.service.ts","../../src/lib/core/exceptions-handling/common-log-attributes/common-log-attributes.service.ts","../../src/lib/core/exceptions-handling/elk/elk-logger.service.ts","../../src/lib/core/exceptions-handling/logger/logger.service.ts","../../src/lib/core/country/country.service.ts","../../src/lib/core/exceptions-handling/errors/response-error.class.ts","../../src/lib/core/boolean-number.enum.ts","../../src/lib/core/payment-methods/payment-methods-response.class.ts","../../src/lib/core/payment-methods/payment-methods-response.token.ts","../../src/lib/core/payment-methods/payment-methods.service.ts","../../src/lib/core/saved-methods/saved-methods-response.class.ts","../../src/lib/core/saved-methods/saved-methods-response.token.ts","../../src/lib/core/saved-methods/saved-methods.service.ts","../../src/lib/core/user-balance/user-balance-response.class.ts","../../src/lib/core/user-balance/user-balance-response.token.ts","../../src/lib/core/user-balance/user-balance.service.ts","../../src/lib/core/payment/credit-card-payment-methods-id.variable.ts","../../src/lib/core/payment/payment-configurations/types/is-credit-card-settings.guard.ts","../../src/lib/core/settings/refer.const.ts","../../src/lib/core/url/url.service.ts","../../src/lib/core/payment/config/config.service.ts","../../src/lib/core/payment/xps-comand.enum.ts","../../src/lib/core/payment/field-names.enum.ts","../../src/lib/core/payment/requests/submit/response/submit-response.class.ts","../../src/lib/core/payment/requests/initialize/response/initialize-response.class.ts","../../src/lib/core/user-behaviour-analytics/user-behaviour-event-name.enum.ts","../../src/lib/core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types.ts","../../src/lib/core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-categories.ts","../../src/lib/core/payment/requests/submit/is-submit-response.function.ts","../../src/lib/core/payment/form/input-event.enum.ts","../../src/lib/core/payment/form/overrided-fields/fields-allowed-to-override.ts","../../src/lib/core/type-guards/is-xps-boolean.function.ts","../../src/lib/core/payment/form/overrided-fields/empty-validator.function.ts","../../src/lib/core/payment/form/overrided-fields/override-field-config.ts","../../src/lib/core/payment/update-submit-response/update-after-error-rules.const.ts","../../src/lib/core/payment/external-change-fields.const.ts","../../src/lib/core/sdk-payment-systems/sdk-payment-methods.const.ts","../../src/lib/core/payment/payment-configurations/types/is-google-pay-settings.guard.ts","../../src/lib/core/payment/requests/initialize/response/initialize-response.token.ts","../../src/lib/core/exceptions-handling/errors/http-error.class.ts","../../src/lib/core/payment/xps-api/xps-api.service.ts","../../src/lib/core/payment/actions/redirect/ps4-pages/pages-payment-methods-id.const.ts","../../src/lib/core/payment/actions/redirect/ps4-pages/pages-routes.const.ts","../../src/lib/core/payment/actions/redirect/pay-station4-url.const.ts","../../src/lib/core/payment/actions/redirect/acquirers-with-redirect-in-new-window.const.ts","../../src/lib/core/payment/actions/redirect/redirect.action.class.ts","../../src/lib/core/payment/actions/show-fields/show-fields.action.class.ts","../../src/lib/core/payment/actions/check-status/check-status.action.class.ts","../../src/lib/core/payment/actions/show-errors/show-errors.action.class.ts","../../src/lib/core/capabilities/capability.const.ts","../../src/lib/core/capabilities/capabilities.service.ts","../../src/lib/core/payment/actions/show-init-form/show-init-form.action.class.ts","../../src/lib/core/exceptions-handling/errors/terminal-error.class.ts","../../src/lib/core/payment/status/status-groups.ts","../../src/lib/core/payment/status/status.enum.ts","../../src/lib/core/payment/status/status-request/response/status-response.class.ts","../../src/lib/core/payment/actions/status-updated/status-updated.action.class.ts","../../src/lib/core/payment/actions/three-ds/three-ds.action.class.ts","../../src/lib/core/payment/actions/special-button/special-button.action.class.ts","../../src/lib/core/payment/actions/show-qr-code/show-qr-code.action.class.ts","../../src/lib/shared/payment-methods-id.variable.ts","../../src/lib/core/payment/actions/show-mobile-payment-screen/show-mobile-payment-screen.action.class.ts","../../src/lib/core/payment/actions/show-xsolla-number/show-xsolla-number.action.class.ts","../../src/lib/core/payment/actions/show-cash-payment-instruction/show-cash-payment-instruction.action.class.ts","../../src/lib/core/payment/actions/redirect/google-three-ds-redirect.action.class.ts","../../src/lib/core/payment/actions/three-ds-redirect/three-ds-redirect.action.class.ts","../../src/lib/core/payment/actions/server-error/server-error.action.class.ts","../../src/lib/core/payment/actions/next-actions.ts","../../src/lib/core/payment/actions/analytics/status-updated-analytics-payload-creator.ts","../../src/lib/core/payment/actions/analytics/analytics-payload-creator.map.ts","../../src/lib/core/user-behaviour-analytics/one-time-analytics-events.const.ts","../../src/lib/core/user-behaviour-analytics/event-builder/event-parameter-types.ts","../../src/lib/core/user-behaviour-analytics/event-builder/event-builder.service.ts","../../src/lib/core/user-behaviour-analytics/user-behaviour-analytics.service.ts","../../src/lib/core/payment/actions/next-action.service.ts","../../src/lib/core/errors-mapping/card-number-sanction-error-codes.const.ts","../../src/lib/core/errors-mapping/field-special-errors-map.const.ts","../../src/lib/shared/pipes/unescape-html/unescape-html.pipe.ts","../../src/lib/core/errors-mapping/xps-response-errors-mapping.service.ts","../../src/lib/core/exceptions-handling/errors/encrypt-card-error.ts","../../src/lib/core/credit-card/four-block-mask.const.ts","../../src/lib/core/credit-card/credit-card-types.enum.ts","../../src/lib/core/credit-card/types/visa.ts","../../src/lib/core/credit-card/types/mastercard.ts","../../src/lib/core/credit-card/default-mask.const.ts","../../src/lib/core/credit-card/types/maestro.ts","../../src/lib/core/credit-card/types/american-express.ts","../../src/lib/core/credit-card/types/diners-clubs.ts","../../src/lib/core/credit-card/types/discover.ts","../../src/lib/core/credit-card/types/jcb.ts","../../src/lib/core/credit-card/types/dankort.ts","../../src/lib/core/credit-card/types/hipercard.ts","../../src/lib/core/credit-card/types/elo.ts","../../src/lib/core/credit-card/types/aura.ts","../../src/lib/core/credit-card/types/naranja.ts","../../src/lib/core/credit-card/types/mir.ts","../../src/lib/core/credit-card/types/china-union-pay.ts","../../src/lib/core/credit-card/types/default-card.ts","../../src/lib/core/credit-card/types/postepay.ts","../../src/lib/core/credit-card/ordered-cards-settings.const.ts","../../src/lib/core/credit-card/credit-cards-map.const.ts","../../src/lib/core/credit-card/credit-card.service.ts","../../src/lib/core/encrypt-credit-card/encrypt-credit-card.service.ts","../../src/lib/core/payment/payment-settings/payment-settings.service.ts","../../src/lib/core/type-guards/is-null.function.ts","../../src/lib/core/type-guards/is-undefined.function.ts","../../src/lib/core/session/session.service.ts","../../src/lib/core/payment/requests/initialize/initialize.service.ts","../../src/lib/core/payment/xps-api/xps-api-part-request.abstract.ts","../../src/lib/core/exceptions-handling/errors/token-error.class.ts","../../src/lib/core/payment/requests/submit/request/submit-request.class.ts","../../src/lib/core/payment/requests/submit/request/submit-request.token.ts","../../src/lib/core/payment/requests/submit/response/submit-response.token.ts","../../src/lib/core/device-finger-print/device-finger-print.service.ts","../../src/lib/core/payment/requests/submit/submit.service.ts","../../src/lib/core/payment/emit-data.service.abstract.ts","../../src/lib/core/payment/requests/sync/request/sync-request.class.ts","../../src/lib/core/payment/requests/sync/request/sync-request.token.ts","../../src/lib/core/payment/requests/sync/response/sync-response.class.ts","../../src/lib/core/payment/requests/sync/response/sync-response.token.ts","../../src/lib/core/payment/requests/sync/sync.service.ts","../../src/lib/core/type-guards/is-object.function.ts","../../src/lib/core/payment/form/validators/convert.function.ts","../../src/lib/core/payment/form/validators/email/email-validator.ts","../../src/lib/core/payment/form/validators/required/required.validator.ts","../../src/lib/core/payment/form/converters/converter.abstract.ts","../../src/lib/core/payment/form/controls/control-config.ts","../../src/lib/core/payment/form/converters/email/email-control.config.ts","../../src/lib/core/payment/form/converters/email/email.converter.ts","../../src/lib/core/payment/form/controls/text-control.config.ts","../../src/lib/core/payment/form/validators/restricted-value/restricted-value.validator.ts","../../src/lib/core/payment/form/converters/zip/zip.converter.ts","../../src/lib/core/payment/form/validators/is-empty-input-value.function.ts","../../src/lib/core/type-guards/is-string.function.ts","../../src/lib/core/payment/form/validators/luhn-formula-validator/luhn-formula.validator.ts","../../src/lib/core/payment/form/controls/card-number/card-number-control.config.ts","../../src/lib/core/payment/form/validators/credit-card-length/credit-card-max-length.validator.ts","../../src/lib/core/payment/form/validators/credit-card-length/credit-card-min-length.validator.ts","../../src/lib/core/payment/form/converters/card-number/card-number.converter.ts","../../src/lib/core/payment/form/validators/card-month/card-month.validator.ts","../../src/lib/core/payment/form/converters/card-month/card-month.converter.ts","../../src/lib/core/payment/form/converters/cvv/cvv.converter.ts","../../src/lib/core/payment/form/validators/birth-date/birth-date.validator.ts","../../src/lib/core/payment/form/converters/birth-date/birth-date.converter.ts","../../src/lib/core/payment/form/converters/cardholder-name/cardholder-name.converter.ts","../../src/lib/core/payment/form/converters/cpf-name/cpf-name-regex.variable.ts","../../src/lib/core/payment/form/converters/cpf-name/cpf-name.converter.ts","../../src/lib/core/payment/form/validators/cpf-formula-validator/cpf-formula.validator.ts","../../src/lib/core/payment/form/converters/cpf-number/cpf-number.converter.ts","../../src/lib/core/payment/form/converters/street-number/street-number.converter.ts","../../src/lib/core/payment/form/converters/text/text.converter.ts","../../src/lib/core/payment/form/controls/checkbox/checkbox-control.config.ts","../../src/lib/core/payment/form/converters/checkbox/checkbox.converter.ts","../../src/lib/core/payment/form/controls/search-select/select-control.config.ts","../../src/lib/core/payment/form/converters/select/select.converter.ts","../../src/lib/core/payment/form/converters/pin/pin.converter.ts","../../src/lib/core/payment/form/controls/radio-control/radio-control.config.ts","../../src/lib/core/payment/form/converters/radio-group/radio-group.converter.ts","../../src/lib/core/payment/form/converters/pricepoint/pricepoint.converter.ts","../../src/lib/core/payment/form/controls/coupon/coupon-control.config.ts","../../src/lib/core/payment/form/validators/coupon/coupon-validator.ts","../../src/lib/core/payment/form/converters/coupon/coupon.converter.ts","../../src/lib/core/payment/form/validators/card-year/card-year.validator.ts","../../src/lib/core/payment/form/converters/card-year/card-year.converter.ts","../../src/lib/core/payment/form/validators/phone-validator.ts","../../src/lib/core/payment/form/validators/min-length-validator.ts","../../src/lib/core/payment/form/validators/max-length-validator.ts","../../src/lib/core/payment/form/controls/phone-control.config.ts","../../src/lib/core/payment/form/converters/phone/phone.converter.ts","../../src/lib/core/payment/form/validators/card-expiration-date-validator/card-expiration-date.validator.ts","../../src/lib/core/payment/form/converters/card-expiration/card-expiration.converter.ts","../../src/lib/core/payment/form/converters/converters-map.ts","../../src/lib/core/payment/form/controls/control-config.service.ts","../../src/lib/core/payment/form/form.service.ts","../../src/lib/core/payment/status/status-request/status-search-param.enum.ts","../../src/lib/core/payment/status/status-request/required-status-search-params.const.ts","../../src/lib/core/payment/status/status-request/status-search-params.map.ts","../../src/lib/core/payment/xps-api/xps-api-part.abstract.ts","../../src/lib/core/payment/status/status-request/request/status-request.class.ts","../../src/lib/core/payment/status/status-request/request/status-request.token.ts","../../src/lib/core/payment/status/status-request/response/status-response.token.ts","../../src/lib/core/payment/status/status-request/status-request.service.ts","../../src/lib/core/payment/finance-details/price.helpers.ts","../../src/lib/core/payment/finance-details/summary/default-image-patterns.const.ts","../../src/lib/core/payment/finance-details/vat-details-key.enum.ts","../../src/lib/core/payment/finance-details/summary/sales-tax-details-key.enum.ts","../../src/lib/core/payment/finance-details/summary/summary-finance-details-adapter.service.ts","../../src/lib/core/payment/finance-details/status/fields-with-currency.ts","../../src/lib/core/country/country-iso-code.enum.ts","../../src/lib/core/payment/finance-details/status/status-finance-details-adapter.service.ts","../../src/lib/core/payment/finance-details/finance-details.service.ts","../../src/lib/core/payment/status/check-status/request/check-status-request.class.ts","../../src/lib/core/payment/status/check-status/request/check-status-request.token.ts","../../src/lib/core/payment/status/check-status/response/check-status-response.class.ts","../../src/lib/core/payment/status/check-status/response/check-status-response.token.ts","../../src/lib/core/payment/status/check-status/check-status.service.ts","../../src/lib/core/payment/status/websocket-status/websocket-status.enum.ts","../../src/lib/core/web-socket/web-socket-client-type.enum.ts","../../src/lib/core/exceptions-handling/messages/message-tags.enum.ts","../../src/lib/core/exceptions-handling/messages/tagged-message.class.ts","../../src/lib/core/web-socket/nchan-web-socket.service.ts","../../src/lib/core/exceptions-handling/errors/ws-error.class.ts","../../src/lib/core/web-socket/centrifugo-web-socket.service.ts","../../src/lib/core/web-socket/web-socket.factory.ts","../../src/lib/core/payment/status/websocket-status/websocket-status.service.ts","../../src/lib/core/payment/status/listen-status/listen-status.service.ts","../../src/lib/core/payment/status/title-class.enum.ts","../../src/lib/core/payment/status/save-payment-method-status/save-payment-method-status.enum.ts","../../src/lib/core/payment/xps-response.error.ts","../../src/lib/core/payment/status/save-payment-method-status/api/saved-payment-account-changes.service.ts","../../src/lib/core/payment/status/save-payment-method-status/save-payment-method-status.service.ts","../../src/lib/core/payment/status/status.service.ts","../../src/lib/core/payment/credit-card-state/credit-card-state.service.ts","../../src/lib/core/payment/initialize-actions/special-button/special-button.action.class.ts","../../src/lib/core/payment/initialize-actions/initialize-next-actions.ts","../../src/lib/core/payment/initialize-actions/initialize-next-action.service.ts","../../src/lib/core/payment/three-ds/three-ds-status-websocket-types.enum.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/status-types.enum.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/request/status-three-ds-request.class.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/request/status-three-ds-request.token.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/response/status-three-ds-response.class.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/response/status-three-ds-response.token.ts","../../src/lib/core/payment/three-ds/api/status-three-ds/status-three-ds.service.ts","../../src/lib/core/payment/three-ds/api/notify-dfp-status/request/notify-dfp-status-request.class.ts","../../src/lib/core/payment/three-ds/api/notify-dfp-status/request/notify-dfp-status-request.token.ts","../../src/lib/core/payment/three-ds/api/notify-dfp-status/notify-dfp-status.service.ts","../../src/lib/core/payment/three-ds/dfp-collect/dfp-collect.service.ts","../../src/lib/core/payment/three-ds/reinsurance-check/reinsurance-check.service.ts","../../src/lib/core/payment/three-ds/three-ds-20/three-ds20.service.ts","../../src/lib/core/payment/three-ds/three-ds.service.ts","../../src/lib/core/payment/form-messages/form-messages.service.ts","../../src/lib/core/xsolla-number/api/print-instruction/request/print-instruction-request.class.ts","../../src/lib/core/xsolla-number/api/print-instruction/request/print-instruction-request.token.ts","../../src/lib/core/xsolla-number/api/print-instruction/print-instruction.service.ts","../../src/lib/core/payment/payment-behaviour/strategies/behaviour-strategy.abstract.ts","../../src/lib/core/payment/requests/initialize/is-initialize-response.function.ts","../../src/lib/core/payment/payment-behaviour/strategies/apple-pay-with-shipping-address/apple-pay-with-shipping-address.strategy.ts","../../src/lib/core/payment/payment-behaviour/strategies/google-pay-instant-flow/google-pay-instant-flow.strategy.ts","../../src/lib/core/payment/payment-behaviour/strategies/google-pay-regular-flow/google-pay-regular-flow.strategy.ts","../../src/lib/core/payment/payment-behaviour/behaviour-strategies.ts","../../src/lib/core/payment/payment-behaviour/payment-behaviour.service.ts","../../src/lib/core/payment/payment.service.ts","../../src/lib/core/country/eu-countries.const.ts","../../src/lib/core/legal/get-sctl-link.function.ts","../../src/lib/core/legal/refund-policy.service.ts","../../src/lib/core/legal/disclaimer.service.ts","../../src/lib/core/legal/legal.service.ts","../../src/lib/core/edit-saved-methods/edit-saved-methods.service.ts","../../src/lib/core/performance/xhr-action.service.ts","../../src/lib/core/performance/performance.service.ts","../../src/lib/core/combined-payment-methods/combined-payment-methods.service.ts","../../src/lib/core/countries-api/countries-api.service.ts","../../src/lib/core/xsolla-number/api/send-instruction/request/send-instruction-request.class.ts","../../src/lib/core/xsolla-number/api/send-instruction/request/send-instruction-request.token.ts","../../src/lib/core/xsolla-number/shipping-methods.enum.ts","../../src/lib/core/xsolla-number/api/send-instruction/response/send-status.enum.ts","../../src/lib/core/xsolla-number/api/send-instruction/response/send-instruction-response.class.ts","../../src/lib/core/xsolla-number/api/send-instruction/response/send-instruction-response.token.ts","../../src/lib/core/xsolla-number/api/send-instruction/send-instruction-api-routes.enum.ts","../../src/lib/core/xsolla-number/api/send-instruction/send-instruction.service.ts","../../src/lib/core/script-tracker/script-tracker.service.ts","../../src/lib/core-library.service.ts","../../src/lib/core/exceptions-handling/http-interceptor/http-exceptions.interceptor.ts","../../src/lib/core/payment/form/validators/validators.module.ts","../../src/lib/core/payment/form/form.module.ts","../../src/lib/shared/pipes/pipes.module.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay.const.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay.errors.enum.ts","../../src/lib/core/sdk-payment-systems/apple-pay/session-handlers/session-handler.abstract.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay-cart/apple-pay-cart.service.ts","../../src/lib/core/sdk-payment-systems/apple-pay/session-handlers/braintree.handler.ts","../../src/lib/core/sdk-payment-systems/apple-pay/session-handlers/checkout.handler.ts","../../src/lib/core/payment/payment-behaviour/payment-behaviour.module.ts","../../src/lib/core-library.module.ts","../../src/lib/core/sdk-payment-systems/payment-systems/payment-system-processing.service.ts","../../src/lib/core/sdk-payment-systems/google-pay/payment/google-pay-checkout-payment.service.ts","../../src/lib/core/sdk-payment-systems/google-pay/payment/google-pay-instant-payment.service.ts","../../src/lib/core/sdk-payment-systems/google-pay/google-pay.service.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay-integration.type.ts","../../src/lib/core/sdk-payment-systems/apple-pay/map-shipping-address-to-contact.function.ts","../../src/lib/core/agreements-group.const.ts","../../src/lib/core/sdk-payment-systems/apple-pay/params-builder/apple-pay-params-builder.service.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay-sdk.service.ts","../../src/lib/core/web-socket/socket-bridge/socket-bridge.service.ts","../../src/lib/core/sdk-payment-systems/apple-pay/external-window-communication/external-window-communication.service.ts","../../src/lib/core/sdk-payment-systems/apple-pay/apple-pay.service.ts","../../src/public-api.ts","../../src/xsolla-payment-client-core.ts"],"sourcesContent":["// translate.helper.ts\nimport { InterpolationParameters, TranslateService } from '@ngx-translate/core';\n\nexport class TranslateHelper {\n private static service: TranslateService;\n\n public static init(service: TranslateService): void {\n this.service = service;\n }\n\n public static t(\n key: string,\n defaultValue: string,\n interpolateParams?: InterpolationParameters,\n ): string {\n return (\n (this.service.instant(key, interpolateParams) as string | null) ??\n defaultValue\n );\n }\n\n public static getLocale(locale: string): string {\n if (locale.toLowerCase() === 'tw') {\n return 'zh_HANT';\n }\n\n if (locale.toLowerCase() === 'cn') {\n return 'zh_HANS';\n }\n\n if (locale.toLowerCase() === 'ph') {\n return 'fil';\n }\n\n return locale.toLowerCase();\n }\n}\n","export class AppError extends Error {\n public constructor(message: string) {\n super(message);\n }\n}\n","import { AppError } from '../exceptions-handling/errors/app-error.class';\n\nexport class EmptyUtilsResponseError extends AppError {\n public constructor() {\n super('Utils response is empty or not requested. Check your token.');\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ExtendedWindow } from './extended-window.interface';\n\nexport const windowToken: InjectionToken<ExtendedWindow> = new InjectionToken(\n 'window',\n);\n","export const defaultApiUrl = 'https://secure.xsolla.com/paystation2/api/';\nexport const sandboxApiUrl =\n 'https://sandbox-secure.xsolla.com/paystation2/api/';\n","import { Observable } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { windowToken } from '../../window.token';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { RequestOptions } from './options.interface';\nimport { defaultApiUrl, sandboxApiUrl } from './api-url.const';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SecureApiClient {\n private isSandboxMode = false;\n\n public constructor(\n private readonly httpClient: HttpClient,\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {}\n\n public setSandboxMode(isSandboxMode: boolean): void {\n this.isSandboxMode = isSandboxMode;\n }\n\n public get<T>(url: string, options?: RequestOptions): Observable<T> {\n return this.httpClient.get<T>(`${this.baseUrl}${url}`, options);\n }\n\n public post<T, P = URLSearchParams>(\n url: string,\n body: P | URLSearchParams | { [key: string]: string },\n options?: RequestOptions,\n ): Observable<T> {\n return this.httpClient.post<T>(`${this.baseUrl}${url}`, body, options);\n }\n\n public patch<T>(\n url: string,\n body: unknown | null,\n options?: RequestOptions,\n ): Observable<T> {\n return this.httpClient.patch<T>(`${this.baseUrl}${url}`, body, options);\n }\n\n public put<T>(\n url: string,\n body: unknown | null,\n options?: RequestOptions,\n ): Observable<T> {\n return this.httpClient.put<T>(`${this.baseUrl}${url}`, body, options);\n }\n\n public delete<T>(url: string, options?: RequestOptions): Observable<T> {\n return this.httpClient.delete<T>(`${this.baseUrl}${url}`, options);\n }\n\n public get baseUrl(): string {\n let predefinedBaseUrl: string | null = null;\n\n try {\n predefinedBaseUrl = this.window.localStorage.getItem('devApiUrl');\n } catch (e: unknown) {\n console.warn('localStorage is not available');\n }\n\n if (predefinedBaseUrl) {\n return predefinedBaseUrl;\n }\n\n return this.isSandboxMode ? sandboxApiUrl : defaultApiUrl;\n }\n}\n","import { firstValueFrom } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { HttpParams } from '@angular/common/http';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\nimport { DeepReadonly } from '../deep-readonly.type';\nimport { InitConfiguration } from './configuration.interface';\nimport { EmptyUtilsResponseError } from './empty-utils-response.error';\nimport { User } from './user.interface';\nimport { Settings } from './settings.interface';\nimport { Purchase } from './purchase.interface';\nimport { Project } from './project.interface';\nimport { UtilsResponse } from './utils-response.interface';\nimport { Refer } from './refer.const';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SettingsService {\n public get project(): DeepReadonly<Project> {\n if (!this.response) {\n throw new EmptyUtilsResponseError();\n }\n\n return this.response.project;\n }\n\n public get purchase(): DeepReadonly<Purchase> {\n if (!this.response) {\n throw new EmptyUtilsResponseError();\n }\n\n return this.response.purchase;\n }\n\n public get settings(): DeepReadonly<Settings> {\n if (!this.response) {\n throw new EmptyUtilsResponseError();\n }\n\n if (this.response?.purchase_external_id) {\n return {\n ...this.response.settings,\n purchase_external_id: this.response.purchase_external_id,\n };\n }\n\n return this.response?.settings;\n }\n\n public get user(): DeepReadonly<User> {\n if (!this.response) {\n throw new EmptyUtilsResponseError();\n }\n\n return this.response.user;\n }\n\n public get utilsResponse(): DeepReadonly<UtilsResponse> {\n if (!this.response) {\n throw new EmptyUtilsResponseError();\n }\n\n return this.response;\n }\n\n public get unsafeUtilsResponse(): DeepReadonly<UtilsResponse | null> {\n return this.response ?? null;\n }\n\n public get unsafeUser(): DeepReadonly<User | null> {\n return this.response?.user ?? null;\n }\n\n public get unsafeProject(): DeepReadonly<Project | null> {\n return this.response?.project ?? null;\n }\n\n public get unsafeSettings(): DeepReadonly<Settings | null> {\n return this.response?.settings ?? null;\n }\n\n public get isEmpty(): boolean {\n return !this.response;\n }\n\n public get token(): string {\n return this._token;\n }\n\n public get hasResponse(): boolean {\n return !!this.response;\n }\n\n public isInitialized = false;\n\n private response!: DeepReadonly<UtilsResponse> | undefined;\n\n private _token = '';\n\n private _topLevelDomain?: string;\n private _isApplePayInstantFlowEnabled = false;\n private _isGooglePayInstantFlowEnabled: boolean | null = null;\n private sandboxMode = false;\n private _refer!: Refer;\n\n public constructor(private readonly secureApi: SecureApiClient) {}\n\n public async init(configuration: InitConfiguration): Promise<void> {\n if (!configuration.token) {\n return Promise.reject('token is missing');\n }\n\n this._token = configuration.token;\n this.sandboxMode = !!configuration.sandbox;\n this._refer = configuration.refer;\n this._topLevelDomain = configuration.topLevelDomain;\n this._isApplePayInstantFlowEnabled =\n !!configuration.isApplePayInstantFlowEnabled;\n this._isGooglePayInstantFlowEnabled =\n configuration.isGooglePayInstantFlowEnabled ?? null;\n\n this.setDevApiUrl(configuration.apiUrl);\n\n await this.sendRequest(this.token);\n\n this.isInitialized = true;\n }\n\n public isSandboxMode(): boolean {\n return this.sandboxMode;\n }\n\n private setDevApiUrl(apiUrl: string | undefined): void {\n if (!apiUrl) {\n return;\n }\n\n try {\n window.localStorage.setItem('devApiUrl', apiUrl);\n } catch {\n console.warn('Could not set devApiUrl in localStorage');\n }\n }\n\n public get topLevelDomain(): string | undefined {\n return this._topLevelDomain;\n }\n\n public get isApplePayInstantFlowEnabled(): boolean {\n return this._isApplePayInstantFlowEnabled;\n }\n\n public get isGooglePayInstantFlowEnabled(): boolean | null {\n return this._isGooglePayInstantFlowEnabled;\n }\n\n public get refer(): Refer {\n return this._refer;\n }\n\n public set refer(refer: Refer) {\n this._refer = refer;\n }\n\n private async sendRequest(token: string): Promise<void> {\n const params = new HttpParams().set('access_token', token);\n\n this.secureApi.setSandboxMode(this.isSandboxMode());\n\n this.response = await firstValueFrom(\n this.secureApi.get<UtilsResponse>('utils', { params }),\n );\n }\n}\n","export enum ErrorTags {\n APP = 'appError',\n HTTP = 'httpError',\n JS = 'jsError',\n WS = 'webSocket',\n ENCRYPT = 'encrypt',\n APPLEPAY = 'applepay',\n HEADLESS_UI = 'headlessUi',\n GOOGLEPAY = 'googlepay',\n PAYTM = 'paytm',\n}\n","import { ErrorTags } from './elk-error-types.enum';\nimport { AdditionalInfo } from '../elk/additional-info.interface';\n\nexport class TaggedError extends Error {\n public childTag!: ErrorTags;\n public trace!: string;\n public tags: ErrorTags[] = [];\n public additionalInfo!: AdditionalInfo;\n public extra: object;\n\n private readonly parentTag: ErrorTags = ErrorTags.HEADLESS_UI;\n\n public constructor(message: string, tags?: ErrorTags[], extra?: object) {\n super(message);\n\n this.tags = this.childTag\n ? [this.parentTag, this.childTag]\n : [this.parentTag];\n\n if (tags) {\n const newTags = tags.filter(\n (t, i, arr) => !this.tags.includes(t) && arr.indexOf(t) == i,\n );\n this.tags = [...this.tags, ...newTags];\n }\n\n this.extra = extra || {};\n }\n}\n","export const unknownValue = 'unknown' as const;\n\nexport type BrowserName =\n | (typeof browsers)[number]['sentName']\n | typeof unknownValue\n | null;\n\nexport type BrowserApp =\n | (typeof browsers)[number]['shortName']\n | typeof unknownValue\n | null;\n\nexport interface BrowserInterface {\n sentName:\n | 'Mozilla Firefox'\n | 'Samsung Internet'\n | 'Opera'\n | 'Microsoft Edge (Legacy)'\n | 'Microsoft Edge (Chromium)'\n | 'Google Chrome or Chromium'\n | 'Apple Safari';\n shortName:\n | 'Firefox'\n | 'SamsungBrowser'\n | 'Opera'\n | 'MSEdge-legacy'\n | 'MSEdge'\n | 'Chrome'\n | 'Safari';\n regexpBrowserNameWithVersion: string;\n}\n\nexport const browsers: BrowserInterface[] = [\n {\n sentName: 'Mozilla Firefox',\n shortName: 'Firefox',\n regexpBrowserNameWithVersion: '(Firefox)\\\\/(.+)',\n },\n {\n sentName: 'Samsung Internet',\n shortName: 'SamsungBrowser',\n regexpBrowserNameWithVersion: '(SamsungBrowser)\\\\/(.+)\\\\s',\n },\n {\n sentName: 'Opera',\n shortName: 'Opera',\n regexpBrowserNameWithVersion: '(Opera)\\\\/(.+)',\n },\n {\n sentName: 'Opera',\n shortName: 'Opera',\n regexpBrowserNameWithVersion: '(OPR)\\\\/(.+)',\n },\n {\n sentName: 'Microsoft Edge (Legacy)',\n shortName: 'MSEdge-legacy',\n regexpBrowserNameWithVersion: '(Edge)\\\\/(.+)',\n },\n {\n sentName: 'Microsoft Edge (Chromium)',\n shortName: 'MSEdge',\n regexpBrowserNameWithVersion: '(Edg)\\\\/(.+)',\n },\n {\n sentName: 'Google Chrome or Chromium',\n shortName: 'Chrome',\n regexpBrowserNameWithVersion: '(Chrome)\\\\/(.+)\\\\s',\n },\n {\n sentName: 'Apple Safari',\n shortName: 'Safari',\n regexpBrowserNameWithVersion: '(Safari)\\\\/(.+)',\n },\n];\n","export enum Device {\n mobile = 'mobile',\n desktop = 'desktop',\n}\n","// eslint-disable-next-line @typescript-eslint/naming-convention\ninterface OS {\n name: string;\n regExp: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ntype OSList = OS[];\n\nexport const osList: OSList = [\n {\n name: 'Windows XP',\n regExp: 'Windows XP',\n },\n {\n name: 'Windows XP',\n regExp: 'Windows NT 5.1|Windows NT5.1',\n },\n {\n name: 'Windows Vista',\n regExp: 'Windows NT 6.0',\n },\n {\n name: 'Windows 7',\n regExp: 'Windows NT 6.1',\n },\n {\n name: 'Windows 8',\n regExp: 'Windows NT 6.2',\n },\n {\n name: 'Windows 8.1',\n regExp: 'Windows NT 6.3',\n },\n {\n name: 'Windows 10',\n regExp: 'Windows NT 10.0',\n },\n {\n name: 'Windows CE',\n regExp: 'Windows CE',\n },\n {\n name: 'iPhone',\n regExp: 'iphone',\n },\n {\n name: 'iPod',\n regExp: 'ipod',\n },\n {\n name: 'iPad',\n regExp: 'ipad',\n },\n {\n name: 'Android',\n regExp: 'Android ([0-9]{1,2}.[0-9]{1,2}.?[0-9]{0,3})',\n },\n {\n name: 'Android',\n regExp: 'Android',\n },\n {\n name: 'Android',\n regExp: 'android',\n },\n {\n name: 'BlackBerry',\n regExp: 'blackberry',\n },\n {\n name: 'Mobile',\n regExp: 'webos',\n },\n {\n name: 'Nintendo WiiU',\n regExp: 'Nintendo WiiU',\n },\n {\n name: 'Xbox One S',\n regExp: 'XBOX_ONE_ED',\n },\n {\n name: 'Xbox One',\n regExp: 'Xbox; Xbox One',\n },\n {\n name: 'PlayStation',\n regExp: 'PlayStation',\n },\n {\n name: 'Windows',\n regExp: '(win)([0-9]{1,2}\\\\.[0-9x]{1,2})',\n },\n {\n name: 'Windows',\n regExp: '(windows)([0-9x]{2})',\n },\n {\n name: 'Windows',\n regExp: '(windows)([0-9]{1,2}\\\\.[0-9]{1,2})',\n },\n {\n name: 'Windows',\n regExp: 'win32',\n },\n {\n name: 'Java',\n regExp: '(java)([0-9]{1,2}\\\\.[0-9]{1,2}\\\\.[0-9]{1,2})',\n },\n {\n name: 'Solaris',\n regExp: '(Solaris)([0-9]{1,2}\\\\.[0-9x]{1,2}){0,1}',\n },\n {\n name: 'Unix',\n regExp: 'unix',\n },\n {\n name: 'Mac OS X',\n regExp: 'Mac OS X',\n },\n {\n name: 'Mac OS',\n regExp: '(mac|Macintosh)',\n },\n {\n name: 'SunOS',\n regExp: '(sunos)([0-9]{1,2}\\\\.[0-9]{1,2}){0,1}',\n },\n {\n name: 'BeOS',\n regExp: '(beos)([0-9]{1,2}\\\\.[0-9]{1,2}){0,1}',\n },\n {\n name: 'RISC OS',\n regExp: '(risc os)([0-9]{1,2}\\\\.[0-9]{1,2})',\n },\n {\n name: 'FreeBSD',\n regExp: 'freebsd',\n },\n {\n name: 'OpenBSD',\n regExp: 'openbsd',\n },\n {\n name: 'NetBSD',\n regExp: 'netbsd',\n },\n {\n name: 'IRIX',\n regExp: 'irix',\n },\n {\n name: 'Plan9',\n regExp: 'plan9',\n },\n {\n name: 'OSF',\n regExp: 'osf',\n },\n {\n name: 'AIX',\n regExp: 'aix',\n },\n {\n name: 'GNU Hurd',\n regExp: 'GNU Hurd',\n },\n {\n name: 'Linux - Fedora',\n regExp: '(fedora)',\n },\n {\n name: 'Linux - Kubuntu',\n regExp: '(kubuntu)',\n },\n {\n name: 'Linux - Ubuntu',\n regExp: '(ubuntu)',\n },\n {\n name: 'Linux - Debian',\n regExp: '(debian)',\n },\n {\n name: 'Linux - CentOS',\n regExp: '(CentOS)',\n },\n {\n name: 'Linux - Mandriva',\n regExp: '(Mandriva).([0-9]{1,3}(\\\\.[0-9]{1,3})?(\\\\.[0-9]{1,3})?)',\n },\n {\n name: 'Linux - SUSE',\n regExp: '(SUSE).([0-9]{1,3}(\\\\.[0-9]{1,3})?(\\\\.[0-9]{1,3})?)',\n },\n {\n name: 'Linux - Slackware (Dropline GNOME)',\n regExp: '(Dropline)',\n },\n {\n name: 'Linux - ASPLinux',\n regExp: '(ASPLinux)',\n },\n {\n name: 'Linux - Red Hat',\n regExp: '(Red Hat)',\n },\n {\n name: 'Linux',\n regExp: '(linux)',\n },\n {\n name: 'AmigaOS',\n regExp: '(amigaos)([0-9]{1,2}\\\\.[0-9]{1,2})',\n },\n {\n name: 'AmigaOS',\n regExp: 'amiga-aweb',\n },\n {\n name: 'Amiga',\n regExp: 'amiga',\n },\n {\n name: 'PalmOS',\n regExp: 'AvantGo',\n },\n {\n name: 'WebTV',\n regExp: '(webtv)/([0-9]{1,2}\\\\.[0-9]{1,2})',\n },\n {\n name: 'Dreamcast OS',\n regExp: 'Dreamcast',\n },\n {\n name: 'Windows',\n regExp: 'wget',\n },\n {\n name: 'Unknown',\n regExp: 'Java',\n },\n {\n name: 'Windows',\n regExp: '(msie)([0-9]{1,2}.[0-9]{1,2})',\n },\n {\n name: 'Unix',\n regExp: 'libwww-perl',\n },\n {\n name: 'Windows CE',\n regExp: 'UP.Browser',\n },\n {\n name: 'Windows',\n regExp: 'NetAnts',\n },\n];\n","import { Inject, Injectable } from '@angular/core';\nimport { browsers, BrowserName, BrowserApp, unknownValue } from './browsers';\nimport { Device } from './device.enum';\nimport { windowToken } from '../window.token';\nimport { ExtendedWindow } from '../extended-window.interface';\nimport { BrowserInfo } from './browserInfo.interface';\nimport { osList } from './os';\nimport { UserAgentData } from './user-agent-data.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserAgentService {\n private _browserName: BrowserName = null;\n private _browserVersion: string | null = null;\n private _browserApp: BrowserApp = null;\n private _platform: string | null = null;\n private _os: string | null = null;\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {\n this.getUserPlatform();\n this.getBrowserInformation();\n this.getOsInformation();\n }\n\n public get browserVersion(): string | null {\n return this._browserVersion;\n }\n\n public get browserApp(): BrowserApp {\n return this._browserApp;\n }\n\n public get platform(): string | null {\n if (this._platform === unknownValue) {\n return this.osType;\n }\n\n return this._platform;\n }\n\n public get userAgent(): string {\n return this.window.navigator.userAgent;\n }\n\n public get browserDescription():\n | (typeof browsers)[number]['sentName']\n | string {\n if (this.browserName === unknownValue || this.browserName === null) {\n return this.userAgent;\n }\n\n return this.browserName;\n }\n\n public get isSafari(): boolean {\n return this._browserName === 'Apple Safari';\n }\n\n public get safariVersion(): null | number {\n if (!this.isSafari) {\n return null;\n }\n\n const versionRegExp = new RegExp('(Version)\\\\/(.+)\\\\s');\n const version = versionRegExp.exec(this.userAgent);\n if (!version) {\n return null;\n }\n\n return Number(version[2].split('.')[0]);\n }\n\n public get iOsVersion(): string | null {\n if (this.osType !== 'ios') {\n return null;\n }\n\n const version = /OS (\\d+)_(\\d+)_?(\\d+)?/.exec(\n this.window.navigator.appVersion,\n );\n\n return version ? `${version[1]}.${version[2]}.${version[3] ?? 0}` : null;\n }\n\n public get browserInfo(): BrowserInfo {\n const browserInfo: BrowserInfo = {\n name: this.browserDescription,\n [this.browserApp?.toLowerCase() ?? unknownValue]: true,\n version: this.browserVersion,\n [this.browserEngine.toLowerCase()]: true,\n ui_version: this.isMobileDevice ? Device.mobile : Device.desktop,\n os: this.os,\n };\n\n if (this.isMobileDevice) {\n browserInfo.mobile = true;\n }\n\n if (this.osType) {\n // @ts-expect-error index is string\n browserInfo[this.osType.toLowerCase()] = true;\n }\n\n if (this.window.navigator.platform?.includes('iPhone')) {\n browserInfo.iphone = true;\n }\n\n if (this.window.navigator.platform?.includes('iPod')) {\n browserInfo.ipod = true;\n }\n\n if (this.window.navigator.platform?.includes('iPad')) {\n browserInfo.ipad = true;\n browserInfo.tablet = true;\n }\n\n if (this.isAndroid) {\n browserInfo.android = true;\n }\n\n return browserInfo;\n }\n\n public get isMobileDevice(): boolean {\n const deviceAgents = [\n 'Android',\n 'webOS',\n 'iPhone',\n 'iPad',\n 'iPod',\n 'BlackBerry',\n 'IEMobile',\n 'Opera Mini',\n 'Mobile',\n 'Tablet',\n 'Kindle',\n 'Playbook',\n 'Silk',\n 'Puffin',\n 'CriOS',\n ];\n return new RegExp(deviceAgents.join('|'), 'i').test(this.userAgent);\n }\n\n public get isIosAndNotIpad(): boolean {\n return ['iPhone', 'iPod'].includes(this.window.navigator.platform);\n }\n\n private getUserPlatform(): void {\n const experimentalPlatformApi = (\n this.window.navigator as unknown as {\n userAgentData: UserAgentData | undefined;\n }\n )?.userAgentData;\n\n const platform =\n experimentalPlatformApi?.platform ??\n this.window?.navigator?.platform ??\n unknownValue;\n\n this._platform = platform.toLowerCase();\n }\n\n private getBrowserInformation(): void {\n for (const browser of browsers) {\n const browserRegExp = new RegExp(browser.regexpBrowserNameWithVersion);\n const browserNameWithVersion = browserRegExp.exec(this.userAgent);\n\n if (browserNameWithVersion !== null) {\n this._browserName = browser.sentName;\n this._browserApp = browser.shortName;\n this._browserVersion = browserNameWithVersion[2];\n break;\n }\n\n this._browserName = unknownValue;\n this._browserApp = unknownValue;\n this._browserVersion = unknownValue;\n }\n }\n\n private getOsInformation(): void {\n for (const os of osList) {\n const osRegExp = new RegExp(os.regExp);\n const osName = osRegExp.exec(this.userAgent);\n\n if (osName !== null) {\n this._os = os.name;\n break;\n }\n\n this._os = unknownValue;\n }\n }\n\n private get browserName(): BrowserName {\n return this._browserName;\n }\n\n private get isAndroid(): boolean {\n return /Android\\s+([\\d.]+)/.test(this.userAgent);\n }\n\n private get isXbox(): boolean {\n return /xbox/i.test(this.userAgent);\n }\n\n private get isLinux(): boolean {\n return /linux/i.test(this.userAgent);\n }\n\n private get isWindows(): boolean {\n return /windows/i.test(this.userAgent);\n }\n\n private get browserEngine(): string {\n const engines = new Map<BrowserApp, string>([\n ['Firefox', 'Gecko'],\n ['Safari', 'Webkit'],\n ['MSEdge-legacy', 'EdgeHTML'],\n ['Chrome', 'Blink'],\n ['Opera', 'Blink'],\n ['MSEdge', 'Blink'],\n ['SamsungBrowser', 'Blink'],\n ]);\n\n return engines.get(this.browserApp) ?? unknownValue;\n }\n\n private get os(): string | null {\n return this._os;\n }\n\n private get osType(): string | null {\n if (['iPhone', 'iPod', 'iPad'].includes(this.window.navigator.platform)) {\n return 'ios';\n }\n\n if (this.window.navigator.platform?.includes('MacIntel')) {\n return 'mac';\n }\n\n if (this.isXbox) {\n return 'xbox';\n }\n if (this.isWindows) {\n return 'windows';\n }\n\n if (this.isAndroid) {\n return 'android';\n }\n\n if (this.isLinux) {\n return 'linux';\n }\n\n return null;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { SettingsService } from '../../settings/settings.service';\nimport { UserAgentService } from '../../user-agent/user-agent.service';\nimport { windowToken } from '../../window.token';\nimport { CommonLogAttributes } from './common-log-attributes.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CommonLogAttributesService {\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly settingsService: SettingsService,\n private readonly userAgentService: UserAgentService,\n ) {}\n\n public getAttributes(): CommonLogAttributes {\n const user = this.settingsService.unsafeUser;\n const project = this.settingsService.unsafeProject;\n const settings = this.settingsService.unsafeSettings;\n\n return {\n token: this.settingsService.token,\n userId: user?.uuid,\n userEmail: user?.email?.value,\n projectId: project?.id,\n merchantId: project?.merchantId,\n locationUrl: this.window.location.href,\n userAgent: this.userAgentService.userAgent,\n referrerUrl: this.window.document.referrer,\n viewportWidth: this.window.document.documentElement.clientWidth,\n viewportHeight: this.window.document.documentElement.clientHeight,\n cdnAddress: settings?.cdnUrl\n ? this.extractUrlHost(settings.cdnUrl)\n : 'none',\n country: user?.country?.value,\n local: user?.country?.localized_name,\n browserInfo: this.userAgentService.browserInfo,\n };\n }\n\n private extractUrlHost(url: string): string {\n return url.replace(/^https?:\\/\\/([^/?#]+).*$/i, '$1');\n }\n}\n","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport type StackTrace from 'stacktrace-js';\nimport { firstValueFrom } from 'rxjs';\nimport { ErrorHandler, Injectable, isDevMode, NgZone } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { TaggedError } from '../errors/tagged-error.class';\nimport { ErrorTags } from '../errors/elk-error-types.enum';\nimport { MessageTags } from '../messages/message-tags.enum';\nimport { AdditionalInfo } from './additional-info.interface';\nimport { ErrorWithoutMetaFields } from './error-without-meta-fields.interface';\nimport { LogMessage } from './log-message.interface';\nimport { CommonLogAttributesService } from '../common-log-attributes/common-log-attributes.service';\n\ntype LogTags = ErrorTags | MessageTags;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ElkLoggerService implements ErrorHandler {\n private readonly stackTrace: Promise<typeof StackTrace>;\n private readonly vendors: RegExp = new RegExp(\n 'node_modules\\\\/(@angular|zone).*.js$',\n );\n\n public constructor(\n private readonly commonLogAttributesService: CommonLogAttributesService,\n private readonly http: HttpClient,\n private readonly ngZone: NgZone,\n ) {\n this.stackTrace = this.loadStackTrace();\n }\n\n public handleError(error: Error): void {\n this.ngZone.runOutsideAngular(() => {\n if (isDevMode()) {\n console.error(error);\n return;\n }\n\n this.parseError(error).catch(console.log);\n });\n }\n\n public log(message: string, tags: LogTags[], extra?: object): void {\n const logTags: LogTags[] = [ErrorTags.HEADLESS_UI, ...tags];\n\n if (isDevMode()) {\n console.log(message, tags);\n return;\n }\n\n const logMessage: LogMessage = {\n additionalInfo: this.getAdditionalInfo(),\n extra,\n message,\n };\n\n this.sendLog(logMessage, logTags);\n }\n\n private async parseError(error: Error): Promise<TaggedError> {\n const errorObj =\n error instanceof TaggedError\n ? error\n : new TaggedError(error.message || error.toString());\n\n errorObj.trace = await this.getErrorTrace(errorObj);\n errorObj.additionalInfo = this.getAdditionalInfo();\n\n const { tags } = errorObj;\n\n const cleanError = this.removeErrorMetaFields(errorObj);\n\n this.sendLog(cleanError, tags);\n return errorObj;\n }\n\n private async loadStackTrace(): Promise<typeof StackTrace> {\n const library = await import('stacktrace-js');\n return library.default;\n }\n\n private async getErrorTrace(error: Error): Promise<string> {\n const stackTrace = await this.stackTrace;\n\n const stackFramesArr = await stackTrace.fromError(error);\n\n const filteredFramesArr = stackFramesArr.filter(\n ({ fileName }) => fileName && !this.vendors.test(fileName),\n );\n\n return filteredFramesArr\n .map((stackFrame) => stackFrame.toString())\n .join('\\n');\n }\n\n private getAdditionalInfo(): AdditionalInfo {\n const commonLogAttributes = this.commonLogAttributesService.getAttributes();\n\n return {\n token: commonLogAttributes.token,\n location: {\n url: commonLogAttributes.locationUrl ?? '',\n },\n project: {\n id: commonLogAttributes.projectId ?? null,\n },\n referrer: {\n url: commonLogAttributes.referrerUrl ?? '',\n },\n viewport: {\n width: commonLogAttributes.viewportWidth,\n height: commonLogAttributes.viewportHeight,\n },\n cdn_address: commonLogAttributes.cdnAddress,\n country: commonLogAttributes.country ?? '',\n local: commonLogAttributes.local ?? '',\n };\n }\n\n private removeErrorMetaFields(error: TaggedError): ErrorWithoutMetaFields {\n const metaPropList = [\n 'parentTag',\n 'childTag',\n 'RESTRICTED_KEYS_REGEXP',\n 'tags',\n ];\n\n Object.keys(error).forEach((key) => {\n if (metaPropList.includes(key)) delete error[key as keyof TaggedError];\n });\n\n // implementing own 'message' property from prototype\n return { ...error, message: error.message };\n }\n\n private sendLog(\n message: ErrorWithoutMetaFields | LogMessage,\n tags: LogTags[],\n ): void {\n const url = `https://logs-01.xsolla.com/tag/${tags.join(',')}`;\n\n firstValueFrom(\n this.http.post(url, message, {\n headers: new HttpHeaders().set('Content-Type', 'text/plain'),\n responseType: 'text',\n }),\n ).catch((err) => console.error('Elk Logger: request error', err));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ElkLoggerService } from '../elk/elk-logger.service';\nimport { TaggedError } from '../errors';\nimport { TaggedMessage } from '../messages';\nimport { LogHandler } from './log-handler.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggerService {\n private readonly handlers: LogHandler[] = [];\n\n public constructor(private readonly elkLoggerService: ElkLoggerService) {}\n\n public register(handler: LogHandler): void {\n this.handlers.push(handler);\n }\n\n public error(error: Error | TaggedError): void {\n this.elkLoggerService.handleError(error);\n this.handlers.forEach((handler) => handler.handleError(error));\n }\n\n public info(info: TaggedMessage): void {\n this.elkLoggerService.log(info.message, info.tags, info.extra);\n this.handlers.forEach((handler) => handler.handleInfo?.(info));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SettingsService } from '../settings/settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CountryService {\n public get userIpCountry(): string {\n const user = this.settingsService.user;\n return user?.ip_country ?? user?.country.value ?? '';\n }\n\n private userDefinedCountry: string | null = null;\n\n public constructor(private readonly settingsService: SettingsService) {}\n\n public setCountry(country: string): void {\n this.userDefinedCountry = country;\n }\n\n public getCountry(): string {\n return this.userDefinedCountry ?? this.getTokenCountry();\n }\n\n private getTokenCountry(): string {\n return this.settingsService.user.country.value;\n }\n}\n","import { AppError } from './app-error.class';\n\nexport class ResponseError extends AppError {\n public constructor(message?: string) {\n super('Response failed' + (message ? `: \"${message}\".` : '.'));\n }\n}\n","export enum BooleanNumber {\n false = 0,\n true = 1,\n}\n","import { BooleanNumber } from '../boolean-number.enum';\nimport { PaymentMethodApi } from './payment-method-api.interface';\nimport { PaymentMethod } from './payment-method.interface';\nimport { PaymentMethodsApi } from './payment-methods-api.interface';\n\nexport class PaymentMethodsResponse {\n public readonly top: PaymentMethod[];\n public readonly especial: PaymentMethod[];\n public readonly remained: PaymentMethod[];\n public readonly remainedCount: { total: number; visible: number };\n\n public constructor(paymentMethods: PaymentMethodsApi) {\n this.especial = paymentMethods.especial.map((method) =>\n this.mapPaymentMethod(method),\n );\n this.top = paymentMethods.top.map((method) =>\n this.mapPaymentMethod(method),\n );\n this.remained = paymentMethods.remained.map((method) =>\n this.mapPaymentMethod(method),\n );\n this.remainedCount = {\n total: paymentMethods.remained_count.total,\n visible: paymentMethods.remained_count.visible,\n };\n }\n\n private mapPaymentMethod(method: PaymentMethodApi): PaymentMethod {\n return {\n id: method.id,\n rank: method.rank,\n name: method.name,\n aliases: method.aliases,\n categories: method.cat,\n recommended: method.recommended === BooleanNumber.true,\n enabledSaveAccount: method.enabled_save_account,\n iconName: method.switch_icon_name,\n };\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { PaymentMethodsResponse } from './payment-methods-response.class';\n\ntype ResponseParameters = ConstructorParameters<typeof PaymentMethodsResponse>;\n\nexport type PaymentMethodsResponseFactory = (\n ...args: ResponseParameters\n) => PaymentMethodsResponse;\n\nexport const paymentMethodsResponseFactoryToken: InjectionToken<PaymentMethodsResponseFactory> =\n new InjectionToken<PaymentMethodsResponseFactory>('PaymentMethodsResponse');\n\nexport const paymentMethodsResponseFactoryProvider: ValueProvider = {\n provide: paymentMethodsResponseFactoryToken,\n useValue: (...args: ResponseParameters) =>\n new PaymentMethodsResponse(...args),\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { lastValueFrom, map } from 'rxjs';\nimport { CountryService } from '../country/country.service';\nimport { ResponseError } from '../exceptions-handling/errors/response-error.class';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\nimport { SettingsService } from '../settings/settings.service';\nimport { PaymentMethod } from './payment-method.interface';\nimport { PaymentMethodsRequestParams } from './payment-methods-request-params.interface';\nimport { PaymentMethodsResponse } from './payment-methods-response.class';\nimport { PaymentMethodsResponseApi } from './payment-methods-response.interface';\nimport {\n PaymentMethodsResponseFactory,\n paymentMethodsResponseFactoryToken,\n} from './payment-methods-response.token';\nimport { XpsBoolean } from '../xps-boolean.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentMethodsService {\n private readonly apiRoute = 'remained_payment_methods';\n\n private readonly cache = new Map<string, Promise<PaymentMethodsResponse>>();\n\n public constructor(\n @Inject(paymentMethodsResponseFactoryToken)\n private readonly responseFactory: PaymentMethodsResponseFactory,\n private readonly settingsService: SettingsService,\n private readonly countryService: CountryService,\n private readonly secureApi: SecureApiClient,\n ) {}\n\n public async getAllMethods(): Promise<PaymentMethodsResponse> {\n return this.request();\n }\n\n public async getList(isSaveMethodMode?: boolean): Promise<PaymentMethod[]> {\n const response = await this.request(isSaveMethodMode);\n\n if (this.isFixedPaymentMethod) {\n return this.filterMethodsByFixedPaymentMethod(response.remained);\n }\n\n return response.remained;\n }\n\n public async getQuickMethods(): Promise<PaymentMethod[]> {\n const response = await this.request();\n return response.especial;\n }\n\n private async request(\n isSaveMethodMode?: boolean,\n ): Promise<PaymentMethodsResponse> {\n const requestParams: PaymentMethodsRequestParams = {\n access_token: this.settingsService.token,\n country: this.countryService.getCountry(),\n save_payment_account_only: isSaveMethodMode\n ? XpsBoolean.true\n : XpsBoolean.false,\n refer: this.settingsService.refer,\n };\n const cacheKey = JSON.stringify(requestParams);\n\n if (!this.cache.has(cacheKey)) {\n this.cache.set(\n cacheKey,\n lastValueFrom(\n this.secureApi\n .post<PaymentMethodsResponseApi>(\n this.apiRoute,\n new URLSearchParams({\n ...requestParams,\n refer: String(requestParams.refer),\n }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(\n map((response) => this.responseFactory(response.payment_methods)),\n ),\n ).catch((error: Error) => {\n throw new ResponseError(error.message);\n }),\n );\n }\n\n // @ts-expect-error the map already has the cache with key\n return this.cache.get(cacheKey);\n }\n\n private filterMethodsByFixedPaymentMethod(\n methods: PaymentMethod[],\n ): PaymentMethod[] {\n const fixedPid = this.settingsService.purchase?.payment_system?.id;\n const paymentMethod = methods.find((method) => method.id === fixedPid);\n\n return paymentMethod ? [paymentMethod] : [];\n }\n\n private get isFixedPaymentMethod(): boolean {\n return !!this.settingsService.purchase?.payment_system?.id;\n }\n}\n","import { SavedMethodsResponseApi } from './saved-methods-response.interface';\nimport { SavedMethodApi } from './saved-method-api.interface';\nimport { SavedMethod } from './saved-method.interface';\n\nexport class SavedMethodsResponse {\n public readonly list: SavedMethod[];\n\n public constructor(savedMethods: SavedMethodsResponseApi) {\n this.list = savedMethods.list.map((method) => this.mapSavedMethod(method));\n }\n\n private mapSavedMethod(method: SavedMethodApi): SavedMethod {\n return {\n currency: method.currency,\n form: method.form,\n id: method.id,\n isSelected: method.isSelected,\n isBabkaPay: method.is_babka_pay,\n name: method.name,\n pid: method.pid,\n psName: method.psName,\n recurrentType: method.recurrent_type,\n replaced: method.replaced,\n type: method.type,\n cardExpiryDate: method.card_expiry_date,\n dateCreate: method.date_create,\n dateLastCharge: method.date_last_charge,\n iconName: method.switch_icon_name,\n userEmail: method.user_email,\n partner: method.partner,\n };\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SavedMethodsResponse } from './saved-methods-response.class';\n\ntype ResponseParameters = ConstructorParameters<typeof SavedMethodsResponse>;\n\nexport type SavedMethodsResponseFactory = (\n ...args: ResponseParameters\n) => SavedMethodsResponse;\n\nexport const savedMethodsResponseFactoryToken: InjectionToken<SavedMethodsResponseFactory> =\n new InjectionToken<SavedMethodsResponseFactory>('SavedMethodsResponse');\n\nexport const savedMethodsResponseFactoryProvider: ValueProvider = {\n provide: savedMethodsResponseFactoryToken,\n useValue: (...args: ResponseParameters) => new SavedMethodsResponse(...args),\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { lastValueFrom, map } from 'rxjs';\nimport { ResponseError } from '../exceptions-handling/errors/response-error.class';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\nimport { SettingsService } from '../settings/settings.service';\nimport { SavedMethodsRequestParams } from './saved-methods-request-params.interface';\nimport { SavedMethodsResponseApi } from './saved-methods-response.interface';\nimport {\n SavedMethodsResponseFactory,\n savedMethodsResponseFactoryToken,\n} from './saved-methods-response.token';\nimport { SavedMethodsResponse } from './saved-methods-response.class';\nimport { SavedMethod } from './saved-method.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SavedMethodsService {\n private readonly apiRoute = 'savedmethods';\n\n private readonly cache = new Map<string, Promise<SavedMethodsResponse>>();\n\n public constructor(\n @Inject(savedMethodsResponseFactoryToken)\n private readonly responseFactory: SavedMethodsResponseFactory,\n private readonly settingsService: SettingsService,\n private readonly secureApi: SecureApiClient,\n ) {}\n\n public async getList(needResetCache = false): Promise<SavedMethod[]> {\n if (needResetCache) {\n this.cache.clear();\n }\n\n const response = await this.request();\n return response.list;\n }\n\n private async request(): Promise<SavedMethodsResponse> {\n const requestParams: SavedMethodsRequestParams = {\n access_token: this.settingsService.token,\n };\n const cacheKey = JSON.stringify(requestParams);\n\n if (!this.cache.has(cacheKey)) {\n this.cache.set(\n cacheKey,\n lastValueFrom(\n this.secureApi\n .post<SavedMethodsResponseApi>(\n this.apiRoute,\n new URLSearchParams({ ...requestParams }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(map((response) => this.responseFactory(response))),\n ).catch((error: Error) => {\n throw new ResponseError(error.message);\n }),\n );\n }\n\n // @ts-expect-error the map already has the cache with key\n return this.cache.get(cacheKey);\n }\n}\n","import { UserBalanceApi } from './user-balance-api.interface';\n\nexport class UserBalanceResponse {\n public readonly isEnoughUserBalance: boolean;\n public readonly isEnoughUserRecurrentBalance: boolean;\n\n public constructor(userBalance: UserBalanceApi) {\n this.isEnoughUserBalance = userBalance.is_enough_user_balance ?? false;\n this.isEnoughUserRecurrentBalance =\n userBalance.is_enough_user_recurrent_balance ?? false;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { UserBalanceResponse } from './user-balance-response.class';\n\ntype ResponseParameters = ConstructorParameters<typeof UserBalanceResponse>;\n\nexport type UserBalanceResponseFactory = (\n ...args: ResponseParameters\n) => UserBalanceResponse;\n\nexport const userBalanceResponseFactoryToken: InjectionToken<UserBalanceResponseFactory> =\n new InjectionToken<UserBalanceResponseFactory>('UserBalanceResponse');\n\nexport const userBalanceResponseFactoryProvider: ValueProvider = {\n provide: userBalanceResponseFactoryToken,\n useValue: (...args: ResponseParameters) => new UserBalanceResponse(...args),\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { lastValueFrom, map } from 'rxjs';\nimport { ResponseError } from '../exceptions-handling/errors/response-error.class';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\nimport { SettingsService } from '../settings/settings.service';\nimport {\n UserBalanceResponseFactory,\n userBalanceResponseFactoryToken,\n} from './user-balance-response.token';\nimport { UserBalanceResponse } from './user-balance-response.class';\nimport { UserBalanceRequestParams } from './user-balance-request-params.interface';\nimport { UserBalanceApi } from './user-balance-api.interface';\nimport { Balance } from '../settings/balance.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserBalanceService {\n private readonly apiRoute = 'balance/sufficiency';\n\n private readonly cache = new Map<string, Promise<UserBalanceResponse>>();\n\n public constructor(\n @Inject(userBalanceResponseFactoryToken)\n private readonly responseFactory: UserBalanceResponseFactory,\n private readonly settingsService: SettingsService,\n private readonly secureApi: SecureApiClient,\n ) {}\n\n public async getUserBalance(): Promise<UserBalanceResponse> {\n return this.request();\n }\n\n public getUserBalanceValue(): Balance | null {\n return this.settingsService.user.user_balance;\n }\n\n private async request(): Promise<UserBalanceResponse> {\n const requestParams: UserBalanceRequestParams = {\n access_token: this.settingsService.token,\n };\n const cacheKey = JSON.stringify(requestParams);\n\n if (!this.cache.has(cacheKey)) {\n this.cache.set(\n cacheKey,\n lastValueFrom(\n this.secureApi\n .post<UserBalanceApi>(\n this.apiRoute,\n new URLSearchParams({ ...requestParams }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(map((response) => this.responseFactory(response))),\n ).catch((error: Error) => {\n throw new ResponseError(error.message);\n }),\n );\n }\n\n // @ts-expect-error the map already has the cache with key\n return this.cache.get(cacheKey);\n }\n}\n","export const masterCardAndVisaPaymentMethodId = 26;\nexport const maestroPaymentMethodId = 490;\n// eslint-disable-next-line @typescript-eslint/no-magic-numbers\nexport const creditCardPaymentMethodId = 1380 as const;\nexport const americanExpressMethodId = 714;\n\nexport const specialCards: number[] = [\n maestroPaymentMethodId,\n masterCardAndVisaPaymentMethodId,\n americanExpressMethodId,\n];\n\nexport const cardsWith3ds = new Set<number>([\n masterCardAndVisaPaymentMethodId,\n maestroPaymentMethodId,\n creditCardPaymentMethodId,\n]);\n","import { PaymentConfigurationCreditCardSettings } from './credit-card-form-configuration.interface';\nimport { PaymentConfiguration } from '../../payment-configuration.interface';\nimport { creditCardPaymentMethodId } from '../../credit-card-payment-methods-id.variable';\n\nexport const isCreditCardSettingsGuard = (\n settings: PaymentConfiguration,\n): settings is PaymentConfigurationCreditCardSettings => {\n return settings.paymentMethodId === creditCardPaymentMethodId;\n};\n","export const defaultRefer = 23;\n\nexport const externalVaultRefer = 69;\n\nexport type Refer = typeof defaultRefer | typeof externalVaultRefer;\n","import { Injectable } from '@angular/core';\nimport { SearchParams } from './search-params.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UrlService {\n public addSearchParams(url: string, params: SearchParams = {}): string {\n if (!url) {\n return '';\n }\n\n const urlObject = new URL(url);\n for (const [key, value] of Object.entries(params)) {\n urlObject.searchParams.set(key, value);\n }\n\n return urlObject.toString();\n }\n\n public getSearchParams(url: string): SearchParams {\n if (!url) {\n return {};\n }\n\n const urlObject = new URL(url);\n const searchParams: SearchParams = {};\n\n for (const [key, value] of urlObject.searchParams) {\n searchParams[key] = value;\n }\n\n return searchParams;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SettingsService } from '../../settings/settings.service';\nimport { UrlService } from '../../url/url.service';\nimport { PaymentConfiguration } from '../payment-configuration.interface';\nimport { XpsBoolean } from '../../xps-boolean.enum';\nimport { isCreditCardSettingsGuard } from '../payment-configurations/types/is-credit-card-settings.guard';\nimport { externalVaultRefer } from '../../settings/refer.const';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentConfigService {\n private _activeConfig: PaymentConfiguration | null = null;\n\n public constructor(\n private readonly urlService: UrlService,\n private readonly settingsService: SettingsService,\n ) {}\n\n public get activeConfig(): PaymentConfiguration | null {\n return this._activeConfig;\n }\n\n public setActiveConfig(config: PaymentConfiguration | null): void {\n this._activeConfig = config;\n }\n\n public enrich(config: PaymentConfiguration): PaymentConfiguration {\n if (!config.returnUrl) {\n throw new Error('URL is not provided in payment config');\n }\n\n return {\n ...config,\n returnUrl: this.enrichReturnUrl(\n config.returnUrl,\n !!config.savePaymentMethod,\n ),\n };\n }\n\n public updateReferByPaymentConfiguration(config: PaymentConfiguration): void {\n if (\n isCreditCardSettingsGuard(config) &&\n config.paymentMethodSettings?.useExternalVault\n ) {\n this.settingsService.refer = externalVaultRefer;\n }\n }\n\n private enrichReturnUrl(\n returnUrl: string,\n savePaymentMethod: boolean,\n ): string {\n const enrichedUrl = this.urlService.addSearchParams(returnUrl, {\n token: this.settingsService.token,\n isSavePaymentAccount: savePaymentMethod\n ? XpsBoolean.true\n : XpsBoolean.false,\n });\n return enrichedUrl;\n }\n}\n","export enum XpsCommand {\n form = 'form',\n check = 'check',\n status = 'status',\n checkout = 'checkout',\n account = 'account',\n create = 'create',\n}\n","export enum FieldNames {\n address1 = 'address1',\n address2 = 'address2',\n address = 'address',\n allowRecurrentSubscription = 'allowRecurrentSubscription',\n allowSubscription = 'allowSubscription',\n apt = 'apt',\n availableCardTypes = 'available_card_types',\n babka_pay_phone = 'babka_pay_phone',\n babka_pay_jwt = 'babka_pay_jwt',\n babkaPayLoyaltyParticipation = 'babka_pay_loyalty_participation',\n bank = 'bank',\n birthDate = 'birth_date',\n cardMonth = 'card_month',\n cardYear = 'card_year',\n cardExpire = 'card_expire',\n cardNumber = 'card_number',\n cardholdername = 'cardholdername',\n city = 'city',\n couponCode = 'couponCode',\n document = 'document',\n cpfName = 'cpf_name',\n cpfNumber = 'cpf_number',\n cvv = 'cvv',\n description = 'description',\n collectedEmailConsent = 'collectedEmailConsent',\n email = 'email',\n psEmail = 'psEmail',\n bazitemail = 'bazitemail',\n euCheck = 'eu_check',\n extraCvv = 'extra_cvv',\n extraCardNumber = 'extra_card_number',\n extraCardType = 'extra_card_type',\n fName = 'f_name',\n installments = 'installments',\n lName = 'l_name',\n needInstallments = 'needInstallments',\n payer = 'payer',\n personId = 'person_id',\n personIdAr = 'person_id_ar',\n personIdCo = 'person_id_co',\n phone = 'phone',\n purchaseDescription = 'purchaseDescription',\n recurrentType = 'recurrent_type',\n rockstarTaxes = 'rockstar_taxes',\n state = 'state',\n street = 'street',\n streetNumber = 'street_number',\n take2Taxes = 'take2_taxes',\n termsAndConditions = 'termsAndConditions',\n termsAndConditionsAtariPp = 'termsAndConditionsAtariPP',\n termsAndConditionsAtariTc = 'termsAndConditionsAtariTC',\n termsAndConditionsHtcEula = 'termsAndConditionsHtcEula',\n termsAndConditionsRobloxEula = 'termsAndConditionsRobloxEula',\n termsAndConditionsRolandEula = 'termsAndConditionsRolandEula',\n termsAndConditionsDeusLoVultEula = 'termsAndConditionsDeusLoVultEula',\n termsAndConditionsOnzenga = 'termsAndConditionsOnzenga',\n licenseDisclaimer = 'licenseDisclaimer',\n xsollaTipsAmount = 'xsollaTipsAmount',\n zip = 'zip',\n psAccountCountry = 'psAccountCountry',\n allowSave = 'allowSave',\n koreaLimitsInstruction = 'korea_limits_instruction',\n koreaCashReceiptInstruction = 'korea_cash_receipt_instruction',\n tokenApplePay = 'token_applepay',\n fixInvoice = 'fix_invoice',\n fixPid = 'fix_pid',\n signature = 'signature',\n qr = 'qr',\n qrCode = 'qr_code',\n qrTtl = 'qr_ttl',\n sum = 'sum',\n out = 'out',\n tinkoffDisclaimer = 'ps.tinkoff.disclaimer',\n ppEmail = 'pp_email',\n redeemPoints = 'redeemPoints',\n redeemLoyaltyPoints = 'redeemLoyaltyPoints',\n omnibusDirective = 'omnibus_directive',\n labelApplePay = 'label_applePay',\n countryCode = 'countryCode',\n merchantCapabilities = 'merchantCapabilities',\n requiredBillingContactFields = 'requiredBillingContactFields',\n requiredShippingContactFields = 'requiredShippingContactFields',\n supportedNetworks = 'supportedNetworks',\n acquirer = 'acquirer',\n isSandbox = 'isSandbox',\n payInstanceAccountId = 'payInstanceAccountId',\n getApplePaySessionUrl = 'getApplePaySessionUrl',\n payViaCheckoutUrl = 'payViaCheckoutUrl',\n paymentInstruction = 'payment_instruction',\n paymentWithSavedMethod = 'paymentWithSavedMethod',\n xsollaOrbsPartialPayment = 'xsolla_currency_wallet_partial',\n xsollaGoldOrbsPartial = 'xsolla-gold-orbs-partial',\n xsollaOrbsFullPayment = 'xsolla_currency_wallet_full',\n xsollaCurrencyDescription = 'xsolla_currency_description',\n fixCommand = 'fix_command',\n jwtToken = 'jwt_token',\n userId = 'user_id',\n userPass = 'user_pass',\n pinCard = 'pin_card',\n payType = 'payType',\n fullName = 'user_name',\n name = 'name',\n epin = 'epin',\n zipCode = 'zip_code',\n googlePay3dsRedirect = 'googlePay3DSRedirect',\n googlePayInitData = 'googlePayInitData',\n googlePayPaymentData = 'googlePayPaymentData',\n externalCardIssuerCountry = 'externalCardIssuerCountry',\n pmId = 'pm_id',\n}\n","import { XpsResponse } from '../../../xps-response.interface';\nimport { Field } from '../../../field.interface';\nimport { Invoice } from '../../../invoice.interface';\nimport { XpsCommand } from '../../../xps-comand.enum';\nimport { FieldNames } from '../../../field-names.enum';\nimport { XsollaNumber } from './xsolla-number.interface';\n\nexport class SubmitResponse {\n public readonly parameters: XpsResponse;\n public readonly fields: Field[];\n public onlineBanking?: {\n url: string;\n };\n public readonly data?: unknown;\n public isNeedRedirect: boolean;\n\n public buyData: XpsResponse['buyData'];\n\n public signature?: string;\n public fixInvoice?: string;\n public hasFatalErrors?: boolean;\n public userSession?: Invoice;\n public pid: XpsResponse['pid'];\n public errors: XpsResponse['errors'];\n public summary: XpsResponse['summary'];\n public title: string;\n public currentCommand: XpsCommand | null;\n public messages: XpsResponse['messages'];\n public xsollaNumber: XsollaNumber;\n\n public constructor(\n parameters: XpsResponse,\n public readonly responseNumber: number = 0,\n ) {\n /* Todo split into properties */\n this.parameters = parameters;\n this.fields = Object.keys(parameters.form).map(\n (key: string): Field => parameters.form[key],\n );\n\n if (parameters.onlineBanking) {\n this.onlineBanking = {\n url: parameters.onlineBanking.value,\n };\n }\n\n this.isNeedRedirect =\n parameters.currentCommand === XpsCommand.account ||\n (parameters.currentCommand === XpsCommand.checkout &&\n Boolean(parameters.checkout));\n\n this.buyData = parameters.buyData;\n\n this.fixInvoice = this.getFieldValue(FieldNames.fixInvoice);\n this.signature = this.getFieldValue(FieldNames.signature);\n\n this.hasFatalErrors = parameters.textAll?.fatal;\n\n this.userSession = parameters.userSession;\n this.pid = parameters.pid;\n this.errors = parameters.errors;\n this.summary = parameters.summary;\n this.title = parameters.title;\n this.currentCommand = parameters.currentCommand;\n this.messages = parameters.messages;\n\n this.xsollaNumber = {\n accountXsolla: parameters.accountXsolla,\n isMap: parameters.isMap,\n };\n }\n\n public setFieldValue(fieldName: FieldNames, value: string): void {\n if (!this.parameters.form[fieldName]) return;\n\n this.parameters.form[fieldName].value = value;\n\n const fieldToUpdate = this.fields.find((field) => field.name === fieldName);\n if (!fieldToUpdate) return;\n\n fieldToUpdate.value = value;\n }\n\n public getFieldValue(fieldName: string): string | undefined {\n return this.parameters.form[fieldName]?.value;\n }\n}\n","import { Field } from '../../../field.interface';\nimport { PaymentForm } from '../../../payment-form.interface';\nimport { XpsResponse, XpsStatus } from '../../../xps-response.interface';\n\nexport class InitializeResponse {\n public readonly paymentForm: PaymentForm | null = null;\n\n public constructor(response: XpsResponse) {\n this.paymentForm = this.extractPaymentForm(response);\n }\n\n private extractPaymentForm(response: XpsResponse): PaymentForm | null {\n if (!response) {\n return null;\n }\n\n return {\n totalAmount: response.buyData.sum,\n currency: response.buyData.currency,\n fields: Object.keys(response.form).map(\n (key: string): Field => (response as XpsResponse).form[key],\n ),\n taxDisclaimer: response.taxDisclaimer,\n number: response.number,\n barcode: response.barcode,\n instruction: response.instruction,\n offers: response.offers,\n error: response.error,\n errors: response.errors,\n restrictions: response.restrictions,\n info: response.info,\n buyData: response.buyData,\n pid: response.pid,\n messages: response.messages ?? [],\n title: response.title,\n summary: response.summary,\n skipForm: response.skipForm,\n isSavedMethodPayment: !!response.form?.saved_method_id,\n couponCode: response.form?.couponCode?.value || '',\n publicId: response.public_id,\n skipCheckout: response.skipCheckout,\n koreaNotification: response.form.korea_limits_instruction,\n isCheckout: response.isCheckout,\n categories: response.categories,\n hasFatalErrors: response.textAll?.fatal,\n userSession: response.userSession,\n statusText: (response.status as XpsStatus)?.statusData?.stateText ?? null,\n country: response.country ? response.country.iso : null,\n };\n }\n}\n","export enum UserBehaviourEventName {\n openPaystation = 'open-paystation',\n showErrorMessage = 'show-error-message',\n openStatusError = 'open-status-error',\n changeStatus = 'change-status',\n checkStatusUpdate = 'check-status-update',\n sysTrackedScripts = 'sys-tracked_scripts',\n showShoppingCart = 'show-shopping_cart',\n attemptBuyNow = 'attempt-buy_now',\n attemptContinue = 'attempt-continue',\n clickBtnPay = 'click-btn-pay',\n initializeNextAction = 'initialize-next-action',\n nextAction = 'next-action',\n createForm = 'create-form',\n applicablePaymentStrategies = 'applicable-payment-strategies',\n initializeRequest = 'initialize-request',\n submitRequest = 'submit-request',\n syncRequest = 'sync-request',\n threeDs2complete = '3DS-2.0-complete',\n threeDs2challenge = '3DS-2.0-challenge',\n threeDs2checkout = '3DS-2.0-checkout',\n threeDs2collectDfp = '3DS-2.0-collect-dfp',\n\n // Apple Pay\n applePayRecalculateCartTaxes = 'apple-pay-recalculate-cart-taxes',\n applePayRecalculateCartError = 'apple-pay-recalculate-cart-error',\n applePayOpenWebSocketConnection = 'apple-pay-open-web-socket-connection',\n applePaySendMessageToAnotherWindow = 'apple-pay-send-message-to-another-window',\n applePayBraintreeStartSession = 'apple-pay-braintree-start-session',\n applePayBraintreeSelectShipping = 'apple-pay-braintree-select-shipping',\n applePayBraintreeCartSuccessfulRecalculated = 'apple-pay-braintree-cart-successful-recalculated',\n applePayBraintreeCartErrorRecalculated = 'apple-pay-braintree-cart-error-recalculated',\n applePayBraintreeValidateMerchant = 'apple-pay-braintree-validate-merchant',\n applePayBraintreeValidateMerchantError = 'apple-pay-braintree-validate-merchant-error',\n applePayBraintreePaymentAuthorized = 'apple-pay-braintree-payment-authorized',\n applePayBraintreePaymentTokenizationError = 'apple-pay-braintree-payment-tokenization-error',\n applePayBraintreePaymentCancel = 'apple-pay-braintree-payment-cancel',\n applePayCheckoutSelectShipping = 'apple-pay-checkout-select-shipping',\n applePayCheckoutCartSuccessfulRecalculated = 'apple-pay-checkout-cart-successful-recalculated',\n applePayCheckoutCartErrorRecalculated = 'apple-pay-checkout-cart-error-recalculated',\n applePayCheckoutValidateMerchant = 'apple-pay-checkout-validate-merchant',\n applePayCheckoutValidateMerchantError = 'apple-pay-checkout-validate-merchant-error',\n applePayCheckoutPaymentAuthorized = 'apple-pay-checkout-payment-authorized',\n applePayCheckoutPaymentCancel = 'apple-pay-checkout-payment-cancel',\n applePayAcquirer = 'apple-pay-acquirer',\n\n // Google Pay\n googlePayHandleFailedPayment = 'google-pay-handle-failed-payment',\n googlePayHandleSuccessfulPayment = 'google-pay-handle-successful-payment',\n}\n","export const userBehaviourEventTypes = {\n open: 'open',\n show: 'show',\n click: 'click',\n manual: 'manual',\n store: 'store',\n} as const;\n","export const eventCategories = {\n withoutInvoice: 'withoutInvoice',\n withInvoice: 'withInvoice',\n} as const;\n","import { SubmitResponse } from './response/submit-response.class';\n\nexport const isSubmitResponse = (value: unknown): value is SubmitResponse => {\n return value instanceof SubmitResponse;\n};\n","export enum InputEventName {\n blur = 'blur',\n focus = 'focus',\n}\n","import { FieldNames } from '../../field-names.enum';\n\nexport const fieldsAllowedToOverride = new Set<FieldNames>([\n FieldNames.allowSubscription,\n FieldNames.allowSave,\n FieldNames.email,\n FieldNames.zip,\n]);\n","import { XpsBoolean } from '../xps-boolean.enum';\n\nexport function isXpsBoolean(value: unknown): value is XpsBoolean {\n return value === XpsBoolean.true || value === XpsBoolean.false;\n}\n","export const emptyValidator = (): boolean => true;\n","import { isXpsBoolean } from '../../../type-guards/is-xps-boolean.function';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\nimport { FieldNames } from '../../field-names.enum';\nimport { emptyValidator } from './empty-validator.function';\n\ntype AllowedFieldValidator = (val: unknown) => boolean;\n\ninterface OverrideFieldConfig {\n validator: AllowedFieldValidator;\n defaultValue: XpsBoolean | string;\n}\n\n/**\n * Configuration for fields that can be overridden by partner.\n * We can extend this configuration with additional fields in the future.\n */\nexport const overrideFieldConfigs: { [key: string]: OverrideFieldConfig } = {\n [FieldNames.allowSubscription]: {\n validator: isXpsBoolean,\n defaultValue: XpsBoolean.false,\n },\n [FieldNames.allowSave]: {\n validator: isXpsBoolean,\n defaultValue: XpsBoolean.false,\n },\n [FieldNames.email]: {\n validator: emptyValidator,\n defaultValue: '',\n },\n [FieldNames.zip]: {\n validator: emptyValidator,\n defaultValue: '',\n },\n};\n","import { FieldNames } from '../field-names.enum';\nimport { SubmitResponse } from '../requests/submit/response/submit-response.class';\n\ninterface UpdateAfterErrorRule {\n description: string;\n apply(\n submitResponse: SubmitResponse,\n fieldValueMap: Map<string, string>,\n ): void;\n}\n\nconst getRestoreAllowSaveRule = (\n fieldName: FieldNames,\n): UpdateAfterErrorRule => ({\n description: `Restore ${fieldName} field value entered by user before submit`,\n apply: (\n submitResponse: SubmitResponse,\n fieldValueMap: Map<string, string>,\n ): void => {\n const value = fieldValueMap.get(fieldName);\n if (!fieldValueMap.has(fieldName) || value === undefined) return;\n\n submitResponse.setFieldValue(fieldName, value);\n },\n});\n\nexport const updateAfterErrorRules: UpdateAfterErrorRule[] = [\n getRestoreAllowSaveRule(FieldNames.allowSave),\n getRestoreAllowSaveRule(FieldNames.allowSubscription),\n getRestoreAllowSaveRule(FieldNames.allowRecurrentSubscription),\n {\n description:\n 'Restore zip field value entered by user before submit if no zip value in response',\n apply: (\n submitResponse: SubmitResponse,\n fieldValueMap: Map<string, string>,\n ): void => {\n const valueInResponse = submitResponse.getFieldValue(FieldNames.zip);\n if (valueInResponse) return;\n\n const value = fieldValueMap.get(FieldNames.zip);\n if (!fieldValueMap.has(FieldNames.zip) || value === undefined) return;\n\n submitResponse.setFieldValue(FieldNames.zip, value);\n },\n },\n {\n description:\n 'Reset card_expire field value that sent by paycore for some reason',\n apply: (submitResponse: SubmitResponse): void => {\n submitResponse.setFieldValue(FieldNames.cardExpire, '');\n },\n },\n];\n","import { FieldNames } from './field-names.enum';\n\nexport const fieldsAllowedToExternalChange = new Set<FieldNames>([\n FieldNames.email,\n FieldNames.externalCardIssuerCountry,\n FieldNames.pmId,\n]);\n","export const googlePayPid = 3431;\n","import { PaymentConfiguration } from '../../payment-configuration.interface';\nimport { googlePayPid } from '../../../sdk-payment-systems/sdk-payment-methods.const';\nimport { PaymentConfigurationGooglePaySettings } from './google-pay-form-configuration.interface';\n\nexport const isGooglePaySettingsGuard = (\n settings: PaymentConfiguration,\n): settings is PaymentConfigurationGooglePaySettings => {\n return settings.paymentMethodId === googlePayPid;\n};\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { InitializeResponse } from './initialize-response.class';\n\nexport type ResponseParameters = ConstructorParameters<\n typeof InitializeResponse\n>;\n\nexport type InitializeResponseFactory = (\n ...args: ResponseParameters\n) => InitializeResponse;\n\nexport const initializeResponseFactoryToken: InjectionToken<InitializeResponseFactory> =\n new InjectionToken<InitializeResponseFactory>('InitializeResponse');\n\nexport const initializeResponseFactoryProvider: ValueProvider = {\n provide: initializeResponseFactoryToken,\n useValue: (...args: ResponseParameters) => new InitializeResponse(...args),\n};\n","import { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { AppError } from './app-error.class';\nimport { HttpErrorData } from '../http-interceptor/http-error-data.interface';\nimport { HttpErrorResponseData } from '../http-interceptor/http-error-response-data.interface';\n\nexport class HttpError extends AppError {\n private readonly RESTRICTED_KEYS_REGEXP = new RegExp(\n '.*(card_number|number|cvv|cvn|month|year|cardholdername|client_data|dfp|password).*',\n 'i',\n );\n private readonly httpErrorData!: HttpErrorData;\n\n public constructor(error: HttpErrorResponse, req: HttpRequest<unknown>) {\n super(error.message);\n\n this.httpErrorData = {\n request: {\n url: req.url,\n method: req.method,\n headers: req.headers,\n },\n response: {\n status: error.status,\n headers: error.headers,\n },\n };\n\n if (req.body) {\n this.httpErrorData.request.data = this.cleanPersonalData(\n req.body as { [key: string]: unknown },\n );\n }\n\n if (error.statusText) {\n const errorData = error.error as HttpErrorResponseData;\n\n this.httpErrorData.response.data = {\n statusText: error.statusText,\n errors: errorData?.errors ?? [],\n };\n }\n }\n\n public getHttpErrorData(): HttpErrorData {\n return this.httpErrorData;\n }\n\n private cleanPersonalData(data: { [key: string]: unknown }): {\n [key: string]: unknown;\n } {\n return Object.entries(data).reduce((acc, [key, val]) => {\n return {\n ...acc,\n [key]: this.RESTRICTED_KEYS_REGEXP.test(key) ? '***' : val,\n };\n }, {});\n }\n}\n","import { lastValueFrom } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { SecureApiClient } from '../../http/secure-api/secure-api.service';\nimport { XpsBoolean } from '../../xps-boolean.enum';\nimport { windowToken } from '../../window.token';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { SettingsService } from '../../settings/settings.service';\nimport { XpsRequest } from '../xps-request.interface';\nimport { XpsResponse } from '../xps-response.interface';\nimport { XpsRequestParams } from '../xps-request-params.interface';\nimport { cardsWith3ds } from '../credit-card-payment-methods-id.variable';\nimport { CountryService } from '../../country/country.service';\nimport { UserAgentService } from '../../user-agent/user-agent.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class XpsApiService {\n private readonly directPaymentApiRoute = 'directpayment';\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n private readonly secureApiClient: SecureApiClient,\n private readonly settingsService: SettingsService,\n private readonly countryService: CountryService,\n private readonly userAgentService: UserAgentService,\n ) {}\n\n public async directPaymentRequest(\n parameters: XpsRequest,\n ): Promise<XpsResponse> {\n const pid =\n parameters.pid?.toString() ??\n (parameters.xps_fix_pid as string | undefined) ??\n '';\n const paymentWithSavedMethod =\n parameters.paymentWithSavedMethod ??\n (parameters.xps_paymentWithSavedMethod as string | undefined) ??\n '';\n\n const requestParams: XpsRequestParams = {\n ...this.collectAnalyticsParameters(pid, paymentWithSavedMethod),\n ...this.collectUserSessionId(),\n country: this.countryService.getCountry(),\n refer: this.settingsService.refer,\n ...parameters,\n };\n\n if (this.userAgentService.isMobileDevice) {\n requestParams.mobile = XpsBoolean.true;\n }\n\n return lastValueFrom(\n this.secureApiClient.post<XpsResponse>(\n this.directPaymentApiRoute,\n new URLSearchParams({ ...requestParams } as unknown as {\n [key: string]: string;\n }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n ),\n );\n }\n\n private collectAnalyticsParameters(\n paymentMethodId?: string,\n paymentWithSavedMethod?: XpsBoolean | string,\n ): {\n [key: string]: unknown;\n } {\n const parameters: XpsRequestParams = {};\n\n parameters.paymentWithSavedMethod = paymentWithSavedMethod\n ? paymentWithSavedMethod\n : XpsBoolean.false;\n\n if (!paymentMethodId) {\n return parameters;\n }\n\n /* If payment method with 3DSecure */\n if (cardsWith3ds.has(Number(paymentMethodId))) {\n parameters.container3DS = JSON.stringify({\n browserjavaenabled: this.window.navigator.javaEnabled(),\n browserlanguage: this.window.navigator.language,\n browsercolordepth: this.window.screen.colorDepth,\n browserscreenheight: this.window.screen.availHeight,\n browserscreenwidth: this.window.screen.availWidth,\n browsertz: new Date().getTimezoneOffset(),\n browserappname: this.window.navigator.appName,\n browserlocaltime: new Date().toString(),\n browserplatform: this.window.navigator.platform || '',\n browsercookiesenabled: this.window.navigator.cookieEnabled,\n });\n }\n\n return parameters;\n }\n\n private collectUserSessionId(): XpsRequestParams {\n const parameters: XpsRequestParams = {};\n\n parameters.xps_idUserSession = this.settingsService.user.session_id ?? '';\n parameters.user_session_id = this.settingsService.user.session_id ?? '';\n\n return parameters;\n }\n}\n","export const vkPay = 3496;\nexport const googlePay = 3431;\nexport const applePayId = 3175;\nexport const barzahlenPay = 1679;\nexport const naverPay = 3563;\nexport const venmoPay = 3636;\n","import {\n applePayId,\n vkPay,\n barzahlenPay,\n naverPay,\n venmoPay,\n} from './pages-payment-methods-id.const';\n\nexport const pagesRoutes = new Map([\n [vkPay, '/payment/external-pages/vk-pay'],\n [applePayId, '/payment/external-pages/apple-pay'],\n [barzahlenPay, '/payment/external-pages/barzahlen-pay'],\n [naverPay, '/payment/external-pages/naver-pay'],\n [venmoPay, '/payment/external-pages/venmo-pay'],\n]);\n","export const payStation4Url = 'https://secure.xsolla.com/paystation4';\nexport const sandboxPayStationUrl =\n 'https://sandbox-secure.xsolla.com/paystation4';\n","export const softBankContrId = 1303;\nexport const adyenUsContrId = 1350;\nexport const adyenEuContrId = 1351;\nexport const adyenJapanContrId = 1352;\n\nexport const acquirersWithRedirectInNewWindow = new Set<number>([\n softBankContrId,\n adyenEuContrId,\n adyenUsContrId,\n adyenJapanContrId,\n]);\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport {\n RedirectAction,\n RedirectActionData,\n RedirectActionType,\n} from './redirect.action.type';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { Injectable } from '@angular/core';\nimport { pagesRoutes } from './ps4-pages/pages-routes.const';\nimport { payStation4Url, sandboxPayStationUrl } from './pay-station4-url.const';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { acquirersWithRedirectInNewWindow } from './acquirers-with-redirect-in-new-window.const';\nimport { cardsWith3ds } from '../../credit-card-payment-methods-id.variable';\nimport { googlePayPid } from '../../../sdk-payment-systems/sdk-payment-methods.const';\n\n@Injectable()\nexport class RedirectActionCreator implements ActionCreator {\n public readonly type: RedirectActionType = 'redirect';\n\n public constructor(private readonly settingsService: SettingsService) {}\n\n public getActionData(submitResponse: SubmitResponse): RedirectAction {\n return {\n type: this.type,\n data: {\n fields: submitResponse.fields,\n errors: submitResponse.errors,\n messages: submitResponse.messages,\n order: submitResponse.summary,\n invoiceId: submitResponse.fixInvoice,\n redirect: this.getRedirect(submitResponse),\n },\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (\n response.currentCommand === XpsCommand.checkout &&\n Boolean(response.parameters.checkout)\n );\n }\n\n protected getRedirectUrl(submitResponse: SubmitResponse): string {\n const responseRedirectUrl = submitResponse.parameters.checkout.action;\n\n const pid = submitResponse?.fields?.find(\n ({ name }) => name === 'fix_pid',\n )?.value;\n if (!pid) {\n return responseRedirectUrl;\n }\n\n const pagesPath = pagesRoutes.get(Number(pid));\n if (!pagesPath) {\n return responseRedirectUrl;\n }\n\n return this.preparePagesUrl(pagesPath);\n }\n\n private getRedirect(\n submitResponse: SubmitResponse,\n ): RedirectActionData['redirect'] {\n const method = submitResponse.parameters.checkout?.method;\n\n return {\n redirectUrl: this.getRedirectUrl(submitResponse),\n isNewWindowRequired: this.getIsNewWindowRequired(submitResponse),\n isSameWindowRequired: this.getIsSameWindowRequired(submitResponse),\n data: submitResponse.parameters.checkout?.data ?? {},\n ...(!!method && { method }),\n };\n }\n\n private getIsNewWindowRequired(submitResponse: SubmitResponse): boolean {\n const pid = submitResponse?.parameters?.pid;\n\n if (!cardsWith3ds.has(pid) && pid !== googlePayPid) {\n return false;\n }\n\n const acquirer =\n submitResponse?.userSession?.payment_method_contr_id ?? null;\n const isAcquirerWithRedirectInNewWindow =\n acquirer && acquirersWithRedirectInNewWindow.has(acquirer);\n\n const cardBinCountry = submitResponse.parameters.cardBinCountry;\n const isJapanCard = cardBinCountry === 'JP';\n\n const isThreeDsIndependentWindow =\n this.settingsService.settings.is_three_ds_independent_windows ?? false;\n\n return (\n isAcquirerWithRedirectInNewWindow ||\n isJapanCard ||\n isThreeDsIndependentWindow\n );\n }\n\n private getIsSameWindowRequired(submitResponse: SubmitResponse): boolean {\n if (this.getIsNewWindowRequired(submitResponse)) {\n return false;\n }\n\n const pid = submitResponse?.parameters?.pid;\n const isCorrectPids = cardsWith3ds.has(pid) || googlePayPid === pid;\n\n // 3DS with redirect case\n return (\n isCorrectPids &&\n !this.settingsService.settings.is_three_ds_independent_windows\n );\n }\n\n private preparePagesUrl(pagesPath: string): string {\n const isSandbox = this.settingsService.isSandboxMode();\n const token = this.settingsService.token;\n\n const payStationUrl = isSandbox ? sandboxPayStationUrl : payStation4Url;\n return `${payStationUrl}/en${pagesPath}?token=${token}`;\n }\n}\n","import { ActionCreator } from '../action.interface';\nimport {\n ShowFieldsAction,\n ShowFieldsActionData,\n ShowFieldsActionType,\n} from './show-fields.action.type';\nimport { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ShowFieldsActionCreator implements ActionCreator {\n public type: ShowFieldsActionType = 'show_fields';\n\n public getActionData(submitResponse: SubmitResponse): ShowFieldsAction {\n const data: ShowFieldsActionData = {\n fields: [],\n errors: [],\n messages: [],\n order: {},\n };\n\n data.fields = submitResponse.fields.filter(\n (field) => field?.isVisible === XpsBoolean.true,\n );\n data.errors = submitResponse.errors;\n data.messages = submitResponse.messages;\n data.order = submitResponse.summary;\n data.submitButtonText = submitResponse.buyData?.value;\n\n return {\n type: this.type,\n data,\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (\n response.currentCommand === XpsCommand.check ||\n response.currentCommand === XpsCommand.form ||\n (response.currentCommand === XpsCommand.checkout &&\n !response.parameters.checkout &&\n !response.parameters?.form?.qr)\n );\n }\n}\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport {\n CheckStatusAction,\n CheckStatusActionType,\n} from './check-status.action.type';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CheckStatusActionCreator implements ActionCreator {\n public type: CheckStatusActionType = 'check_status';\n\n public getActionData(): CheckStatusAction {\n return {\n type: this.type,\n data: null,\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return response.currentCommand === XpsCommand.status;\n }\n}\n","import { ActionCreator } from '../action.interface';\nimport {\n ShowErrorsAction,\n ShowErrorsActionData,\n ShowErrorsActionType,\n} from './show-errors.action.type';\nimport { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { XpsError } from '../../xps-error.interface';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ShowErrorsActionCreator implements ActionCreator {\n public type: ShowErrorsActionType = 'show_errors';\n public data!: ShowErrorsActionData;\n\n public getActionData(errors: XpsError[]): ShowErrorsAction {\n return {\n type: this.type,\n data: { errors },\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return Boolean(response.errors?.length);\n }\n}\n","/**\n * Known capability identifiers. Values mirror the SDK-side\n * {@link Capability} enum but are kept as plain strings because\n * payment-client-core must not depend on pay-station-sdk.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const SHOW_INIT_FORM_CAPABILITY = 'show_init_form_action';\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CapabilitiesService {\n private capabilities = new Set<string>();\n\n public set(list: string[] = []): void {\n this.capabilities = new Set(list);\n }\n\n public has(capability: string): boolean {\n return this.capabilities.has(capability);\n }\n\n public clear(): void {\n this.capabilities.clear();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActionCreator } from '../action.interface';\nimport {\n ShowInitFormAction,\n ShowInitFormActionData,\n ShowInitFormActionType,\n} from './show-init-form.action.type';\nimport { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { PaymentConfigService } from '../../config/config.service';\nimport { CapabilitiesService } from '../../../capabilities/capabilities.service';\nimport { SHOW_INIT_FORM_CAPABILITY } from '../../../capabilities/capability.const';\nimport { isCreditCardSettingsGuard } from '../../payment-configurations/types/is-credit-card-settings.guard';\nimport { creditCardPaymentMethodId } from '../../credit-card-payment-methods-id.variable';\n\n@Injectable()\nexport class ShowInitFormActionCreator implements ActionCreator {\n public type: ShowInitFormActionType = 'show_init_form';\n\n public constructor(\n private readonly paymentConfigService: PaymentConfigService,\n private readonly capabilitiesService: CapabilitiesService,\n ) {}\n\n public getActionData(submitResponse: SubmitResponse): ShowInitFormAction {\n const data: ShowInitFormActionData = {\n fields: submitResponse.fields.filter(\n (field) => field?.isVisible === XpsBoolean.true,\n ),\n errors: submitResponse.errors,\n messages: submitResponse.messages,\n };\n\n return {\n type: this.type,\n data,\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n if (!this.capabilitiesService.has(SHOW_INIT_FORM_CAPABILITY)) {\n return false;\n }\n\n if (!this.isExternalVaultActive()) {\n return false;\n }\n\n if (response.pid !== creditCardPaymentMethodId) {\n return false;\n }\n\n if (response.currentCommand !== XpsCommand.form) {\n return false;\n }\n\n if (!response.errors?.length) {\n return false;\n }\n\n return true;\n }\n\n private isExternalVaultActive(): boolean {\n const config = this.paymentConfigService.activeConfig;\n\n return Boolean(\n config &&\n isCreditCardSettingsGuard(config) &&\n config.paymentMethodSettings?.useExternalVault,\n );\n }\n}\n","import { AppError } from './app-error.class';\n\nexport class TerminalError extends AppError {\n public code!: string;\n\n public constructor(message: string, code: string) {\n super(message);\n\n this.code = code;\n }\n}\n","export enum StatusGroups {\n troubled = 'troubled',\n done = 'done',\n invoice = 'invoice',\n}\n","export enum StatusEnum {\n created = 'created',\n awaiting = 'awaiting',\n processing = 'processing',\n authorized = 'authorized',\n held = 'held',\n done = 'done',\n error = 'error',\n canceled = 'canceled',\n}\n","import { Status } from '../../status.interface';\nimport { XpsResponse, XpsStatus } from '../../../xps-response.interface';\nimport { TerminalError } from '../../../../exceptions-handling/errors/terminal-error.class';\nimport { StatusGroups } from '../../status-groups';\nimport { StatusEnum } from '../../status.enum';\n\nexport class StatusResponse {\n public readonly status!: Status;\n private readonly error?: { code: string; message: string };\n\n public constructor(parameters: {\n status: XpsStatus | null;\n errors: XpsResponse['errors'];\n form?: XpsResponse['form'];\n payment_method: XpsResponse['payment_method'];\n }) {\n if (parameters.errors?.[0]) {\n this.error = {\n code: parameters.errors[0].code.toString(),\n message: parameters.errors[0].message,\n };\n }\n\n if (!parameters.status) {\n throw new TerminalError(\n this.error?.message ?? '',\n this.error?.code.toString() ?? '',\n );\n }\n\n this.status = {\n statusState: parameters.status.statusData.stateText,\n email: parameters.status.statusData.email,\n webSocketUrl: parameters.status.statusData.webSocketChannelUrl,\n webSocketChannelName: parameters.status.statusData.webSocketChannelName,\n webSocketClientType: parameters.status.statusData.webSocketClientType,\n financeInfo: parameters.status.text.info,\n discount: parameters.status.text.info.discount\n ? Math.abs(\n Number.parseFloat(\n parameters.status.text.info.discount?.value ?? '',\n ),\n )\n : null,\n isCancelUser: parameters.status.isCancelUser,\n postMessageStatus: parameters.status.isCancelUser\n ? StatusGroups.troubled\n : parameters.status.group,\n virtualCurrencyAmount: parameters.status.statusData.out,\n backUrlSettings: {\n backUrl: parameters.status.text.backurl,\n backUrlAction: parameters.status.text.backurl_action,\n backUrlCaption: parameters.status.text.backurl_caption,\n returnRegion: parameters.status.return_region,\n },\n additionalBackButton: this.getAdditionalBackButton(parameters.status),\n group: parameters.status.group,\n needToCheck: parameters.status.needToCheck,\n autoRedirect: parameters.status.autoredirect,\n statusMessage: parameters.status.text.state,\n userId: parameters.status.statusData.v1,\n invoice: parameters.status.statusData.invoice,\n pid: parameters.status.statusData.pid,\n projectAmount: this.getProjectAmount(parameters.status),\n titleClass: parameters.status.title_class,\n paymentCountryIso: parameters.status.statusData.payment_country_iso,\n order: parameters.status.text.order,\n };\n\n this.status.autoCancellation =\n parameters.payment_method?.auto_cancellation !== false;\n\n if (parameters.form) {\n this.status.userReturnStatus = this.getUserReturnStatus(parameters.form);\n }\n\n if (\n this.status.statusState === StatusEnum.done ||\n this.status.statusState === StatusEnum.authorized\n ) {\n this.status.isSuccess = true;\n }\n\n if (\n this.status.statusState === StatusEnum.canceled ||\n this.status.isCancelUser\n ) {\n this.status.isCanceled = true;\n }\n }\n\n private getUserReturnStatus(form: XpsResponse['form']): string | undefined {\n const value = form['fix_userReturnStatus']?.value;\n if (value === 'undefined') return undefined;\n\n return value;\n }\n\n private getProjectAmount(status: XpsStatus): Status['projectAmount'] {\n if (!status.statusData.projectAmount) {\n return;\n }\n\n const [amount, currency] = status.statusData.projectAmount.split(' ');\n return {\n amount,\n currency,\n };\n }\n\n private getAdditionalBackButton(\n status: XpsStatus,\n ): Status['additionalBackButton'] {\n if (!status.text.is_additional_back_url_enabled) {\n return {\n link: '',\n action: '',\n label: '',\n region: '',\n isEnabled: false,\n };\n }\n\n return {\n link: status.text.additional_back_url_link ?? '',\n action: status.text.additional_back_url_action ?? '',\n label: status.text.additional_back_url_label ?? '',\n region: status.additional_button_return_region ?? '',\n isEnabled: status.text.is_additional_back_url_enabled,\n };\n }\n}\n","import { ActionCreator } from '../action.interface';\nimport {\n StatusUpdatedAction,\n StatusUpdatedActionType,\n} from './status-updated.action.type';\nimport { StatusResponse } from '../../status/status-request/response/status-response.class';\nimport { Status } from '../../status/status.interface';\nimport { SavePaymentMethodStatus } from '../../status/save-payment-method-status/save-payment-method-status.enum';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class StatusUpdatedActionCreator implements ActionCreator {\n public type: StatusUpdatedActionType = 'status_updated';\n\n public getActionData({\n statusResponse,\n isSavePaymentMethodMode,\n savePaymentMethodStatus,\n }: {\n statusResponse: StatusResponse | Status;\n isSavePaymentMethodMode?: boolean;\n savePaymentMethodStatus?: SavePaymentMethodStatus;\n }): StatusUpdatedAction {\n let status: Status;\n\n if (statusResponse instanceof StatusResponse) {\n status = statusResponse.status;\n } else {\n status = statusResponse;\n }\n\n return {\n type: this.type,\n data: {\n statusState: status.statusState,\n invoice: status.invoice,\n isSuccess: status.isSuccess,\n isCanceled: status.isCanceled,\n group: status.group,\n email: status.email,\n isSavePaymentMethodMode: Boolean(isSavePaymentMethodMode),\n savePaymentMethodStatus,\n },\n };\n }\n\n public isSuitable(): boolean {\n return false;\n }\n}\n","import { ActionCreator } from '../action.interface';\nimport { ThreeDsAction, ThreeDsActionType } from './three-ds.action.type';\nimport { StatusChallenge } from '../../three-ds/three-ds-20/status-update.interface';\nimport { Injectable } from '@angular/core';\nimport { SettingsService } from '../../../settings/settings.service';\n\n@Injectable()\nexport class ThreeDsActionCreator implements ActionCreator {\n public type: ThreeDsActionType = '3DS';\n\n public constructor(private readonly settingsService: SettingsService) {}\n\n public getActionData(actionData: StatusChallenge): ThreeDsAction {\n return {\n type: this.type,\n data: this.enrichWithRedirectParams(actionData),\n };\n }\n\n public isSuitable(): boolean {\n return false;\n }\n\n private enrichWithRedirectParams(\n actionData: StatusChallenge,\n ): StatusChallenge {\n return {\n ...actionData,\n data: {\n ...actionData.data,\n redirect: {\n isNewWindowRequired:\n this.settingsService.settings.is_three_ds_independent_windows ??\n false,\n isSameWindowRequired:\n !this.settingsService.settings.is_three_ds_independent_windows,\n },\n },\n };\n }\n}\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport {\n SpecialButtonAction,\n SpecialButtonActionType,\n} from './special-button.action.type';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { Injectable } from '@angular/core';\nimport { googlePayPid } from '../../../sdk-payment-systems/sdk-payment-methods.const';\n\n@Injectable()\nexport class SpecialButtonActionCreator implements ActionCreator {\n public type: SpecialButtonActionType = 'special_button';\n private readonly pids: number[] = [googlePayPid];\n private readonly sdkPaymentMethodsName = new Map<number, string>([\n [googlePayPid, 'google-pay'],\n ]);\n\n public getActionData(submitResponse: SubmitResponse): SpecialButtonAction {\n return {\n type: this.type,\n data: {\n errors: submitResponse.errors,\n messages: submitResponse.messages,\n buttonName: this.getPaymentMethodName(submitResponse.pid),\n },\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (\n response.currentCommand === XpsCommand.checkout &&\n Boolean(response.parameters.checkout) &&\n this.pids.includes(response.pid)\n );\n }\n\n private getPaymentMethodName(pid: number): string {\n const buttonName = this.sdkPaymentMethodsName.get(pid);\n\n if (!buttonName) {\n throw new Error('Special button not found');\n }\n\n return buttonName as string;\n }\n}\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport { Injectable } from '@angular/core';\nimport {\n ShowQrCodeAction,\n ShowQrCodeActionType,\n} from './show-qr-code.action.type';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\n\n@Injectable()\nexport class ShowQrCodeActionCreator implements ActionCreator {\n public readonly type: ShowQrCodeActionType = 'show_qr_code';\n\n public getActionData(response: SubmitResponse): ShowQrCodeAction {\n const submitButtonText = response.parameters.buyData.value;\n const fields = response.fields.filter(\n (field) => field?.isVisible === XpsBoolean.true,\n );\n return {\n type: this.type,\n data: {\n fields,\n submitButtonText,\n },\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return Boolean(response.parameters?.form?.qr);\n }\n}\n","export const payPayId = 3669;\nexport const linePayId = 3677;\nexport const auPayId = 3686;\nexport const docomoId = 3692;\nexport const softbankId = 3693;\nexport const auEasyPaymentId = 3694;\nexport const yMobileId = 3697;\nexport const mobilePaymentMethodId = 1738;\nexport const mobilePaymentMethodId2 = 2015;\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { Injectable } from '@angular/core';\nimport {\n ShowMobilePaymentScreenAction,\n ShowMobilePaymentScreenActionType,\n} from './show-mobile-payment-screen.action.type';\nimport {\n mobilePaymentMethodId,\n mobilePaymentMethodId2,\n} from '../../../../shared/payment-methods-id.variable';\n\n@Injectable()\nexport class ShowMobilePaymentScreenActionCreator implements ActionCreator {\n public type: ShowMobilePaymentScreenActionType = 'show_mobile_payment_screen';\n private readonly pids = [mobilePaymentMethodId, mobilePaymentMethodId2];\n\n public getActionData(\n response: SubmitResponse,\n ): ShowMobilePaymentScreenAction {\n const submitButtonText = response.parameters.buyData.value;\n return {\n type: this.type,\n data: {\n submitButtonText,\n },\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (\n response.currentCommand === XpsCommand.create &&\n this.pids.includes(response.pid)\n );\n }\n}\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport { Injectable } from '@angular/core';\nimport {\n ShowXsollaNumberAction,\n ShowXsollaNumberActionType,\n} from './show-xsolla-number.action.type';\n\n@Injectable()\nexport class ShowXsollaNumberActionCreator implements ActionCreator {\n public readonly type: ShowXsollaNumberActionType =\n 'show_cash_payment_instruction';\n\n public getActionData(): ShowXsollaNumberAction {\n return {\n type: this.type,\n data: null,\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (\n this.isCashPayment(response.parameters?.categories) &&\n !this.isRedirectPaymentMethod(response)\n );\n }\n\n private isCashPayment(categories: number[] = []): boolean {\n const cashPaymentCategory = 1;\n /**\n * For some methods, the category array may contain not just [1], but [0, 1];\n * 0 is a recommended category, so it checks that all categories <= cashPaymentCategory\n */\n return (\n !!categories?.length &&\n categories.includes(cashPaymentCategory) &&\n categories.every((category: number) => category <= cashPaymentCategory)\n );\n }\n\n private isRedirectPaymentMethod(submitResponse: SubmitResponse): boolean {\n return submitResponse.parameters.isCheckout ?? false;\n }\n}\n","import { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { ActionCreator } from '../action.interface';\nimport { Injectable } from '@angular/core';\nimport {\n ShowCashPaymentInstructionAction,\n ShowCashPaymentInstructionActionType,\n} from './show-cash-payment-instruction.action.type';\n\n@Injectable()\nexport class ShowCashPaymentInstructionActionCreator implements ActionCreator {\n public readonly type: ShowCashPaymentInstructionActionType =\n 'show_cash_payment_instruction';\n\n public getActionData(): ShowCashPaymentInstructionAction {\n return {\n type: this.type,\n data: null,\n };\n }\n\n public isSuitable(response: SubmitResponse): boolean {\n return (response.fields || []).some(\n (field) => field.name === 'payment_instruction',\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { XpsCommand } from '../../xps-comand.enum';\nimport { RedirectActionCreator } from './redirect.action.class';\n\n@Injectable()\nexport class GoogleThreeDsRedirectActionCreator extends RedirectActionCreator {\n public isSuitable(response: SubmitResponse): boolean {\n return (\n response.currentCommand === XpsCommand.checkout &&\n !response.parameters.checkout &&\n Boolean(response.parameters.form?.googlePay3DSRedirect?.value)\n );\n }\n\n protected getRedirectUrl(submitResponse: SubmitResponse): string {\n return (\n String(submitResponse.parameters.form?.googlePay3DSRedirect?.value) ?? ''\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActionCreator } from '../action.interface';\nimport {\n ThreeDsRedirectAction,\n ThreeDsRedirectActionType,\n} from './three-ds-redirect.action.type';\nimport { StatusCheckout } from '../../three-ds/three-ds-20/status-update.interface';\n\n@Injectable()\nexport class ThreeDsRedirectActionCreator implements ActionCreator {\n public type: ThreeDsRedirectActionType = 'redirect';\n\n public getActionData(actionData: StatusCheckout): ThreeDsRedirectAction {\n return {\n type: this.type,\n data: {\n fields: [],\n errors: [],\n messages: [],\n order: {},\n invoiceId: '',\n redirect: {\n isNewWindowRequired: false,\n isSameWindowRequired: false,\n redirectUrl: actionData.data?.action ?? '',\n data: actionData.data?.params ?? {},\n },\n },\n };\n }\n\n public isSuitable(): boolean {\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActionCreator } from '../action.interface';\nimport {\n ServerErrorAction,\n ServerErrorActionData,\n ServerErrorActionType,\n} from './server-error.action.type';\n\n@Injectable()\nexport class ServerErrorActionCreator\n implements\n ActionCreator<unknown, ServerErrorActionType, ServerErrorActionData>\n{\n public type: ServerErrorActionType = 'server_error';\n\n public getActionData(data: ServerErrorActionData): ServerErrorAction {\n return {\n type: this.type,\n data,\n };\n }\n\n public isSuitable(): boolean {\n return false;\n }\n}\n","import { InjectionToken, ProviderToken } from '@angular/core';\nimport { ActionCreator } from './action.interface';\nimport { RedirectActionCreator } from './redirect/redirect.action.class';\nimport { ShowFieldsActionCreator } from './show-fields/show-fields.action.class';\nimport { CheckStatusActionCreator } from './check-status/check-status.action.class';\nimport { ShowErrorsActionCreator } from './show-errors/show-errors.action.class';\nimport { ShowInitFormActionCreator } from './show-init-form/show-init-form.action.class';\nimport { StatusUpdatedActionCreator } from './status-updated/status-updated.action.class';\nimport { ThreeDsActionCreator } from './three-ds/three-ds.action.class';\nimport { SpecialButtonActionCreator } from './special-button/special-button.action.class';\nimport { ShowQrCodeActionCreator } from './show-qr-code/show-qr-code.action.class';\nimport { ShowMobilePaymentScreenActionCreator } from './show-mobile-payment-screen/show-mobile-payment-screen.action.class';\nimport { ShowXsollaNumberActionCreator } from './show-xsolla-number/show-xsolla-number.action.class';\nimport { ShowCashPaymentInstructionActionCreator } from './show-cash-payment-instruction/show-cash-payment-instruction.action.class';\nimport { GoogleThreeDsRedirectActionCreator } from './redirect/google-three-ds-redirect.action.class';\nimport { ThreeDsRedirectActionCreator } from './three-ds-redirect/three-ds-redirect.action.class';\nimport { ServerErrorActionCreator } from './server-error/server-error.action.class';\n\nexport type NextActionTokens = Array<ProviderToken<ActionCreator>>;\n\nexport const nextActionsToken = new InjectionToken<ActionCreator>('Action');\n\nexport const nextActions: NextActionTokens = [\n ShowInitFormActionCreator,\n GoogleThreeDsRedirectActionCreator,\n ShowFieldsActionCreator,\n CheckStatusActionCreator,\n SpecialButtonActionCreator,\n ShowQrCodeActionCreator,\n RedirectActionCreator,\n ShowCashPaymentInstructionActionCreator,\n ShowMobilePaymentScreenActionCreator,\n ShowXsollaNumberActionCreator,\n];\n\nexport const flowUpdateNextActions: NextActionTokens = [\n ShowErrorsActionCreator,\n StatusUpdatedActionCreator,\n ThreeDsActionCreator,\n ThreeDsRedirectActionCreator,\n ServerErrorActionCreator,\n];\n","import { AnalyticsPayloadCreator } from './analytics-payload-creator.type';\n\nexport const statusUpdatedAnalyticsPayloadCreator: AnalyticsPayloadCreator = (\n nextAction,\n) => {\n if (nextAction.type !== 'status_updated') return null;\n\n const { statusState, group, isSuccess, isCanceled } = nextAction.data;\n return {\n value: nextAction.type,\n extraValue: statusState,\n dimension1: group,\n dimension2: isSuccess ? 'successful' : null,\n dimension3: isCanceled ? 'canceled' : null,\n };\n};\n","import { AnalyticsPayloadCreator } from './analytics-payload-creator.type';\nimport { statusUpdatedAnalyticsPayloadCreator } from './status-updated-analytics-payload-creator';\n\nexport const analyticsPayloadCreatorMap: Map<string, AnalyticsPayloadCreator> =\n new Map([['status_updated', statusUpdatedAnalyticsPayloadCreator]]);\n","export const oneTimeAnalyticsEvents = new Set<string>([]);\n","export enum EventParameterType {\n string = '0',\n int = '1',\n float = '2',\n bool = '3',\n intArray = '4',\n stringArray = '5',\n}\n","import { Inject, Injectable, isDevMode } from '@angular/core';\nimport { EventParameterType } from './event-parameter-types';\nimport { UserBehaviourEvent } from './user-behaviour-event.interface';\nimport { Purchase } from './purchase.type';\nimport { CreateEventMethodOptionsInterface } from '../user-behaviour-analytics.interface';\nimport { SettingsService } from '../../settings/settings.service';\nimport { UserAgentService } from '../../user-agent/user-agent.service';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { Device } from '../../user-agent/device.enum';\nimport { windowToken } from '../../window.token';\nimport { UserSessionOptions } from '../user-session-options';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EventBuilderService {\n public constructor(\n private readonly settingsService: SettingsService,\n private readonly userAgentService: UserAgentService,\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {}\n\n public createEvent(\n options: CreateEventMethodOptionsInterface,\n userSessionOptions: UserSessionOptions,\n ): UserBehaviourEvent {\n return {\n action: options.action,\n type: options.type,\n value: this.convertToEventParameterType(\n options.value,\n options.valueType ?? EventParameterType.string,\n ),\n state: options.state,\n date: this.getDate(options.date),\n milliseconds: options.date.getTime(),\n timezone: this.getTimezone(options.date),\n session_id:\n this.settingsService.unsafeUtilsResponse?.user?.session_id ?? null,\n referrer_url: this.window?.document?.referrer,\n project_id: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.project?.id,\n EventParameterType.int,\n ),\n payment_country: this.convertToEventParameterType(\n options.invoice?.payment_country ??\n this.settingsService.unsafeUtilsResponse?.user?.country?.value,\n EventParameterType.string,\n ),\n geotype_id: this.convertToEventParameterType(\n options.invoice?.geotype_id,\n EventParameterType.int,\n ),\n instance_id: this.convertToEventParameterType(\n options.instanceId ??\n this.getPaymentMethodId(userSessionOptions.instanceId),\n EventParameterType.int,\n ),\n payment_method_contr_id: this.convertToEventParameterType(\n options.invoice?.payment_method_contr_id,\n EventParameterType.int,\n ),\n ps_type: this.convertToEventParameterType(\n options.invoice?.ps_type,\n EventParameterType.int,\n ),\n is_pay_with_saved_method: this.convertToEventParameterType(\n userSessionOptions.isPayWithSavedMethod,\n EventParameterType.bool,\n ),\n purchase_invoice_id: this.convertToEventParameterType(\n options.invoice?.purchase_invoice_id,\n EventParameterType.int,\n ),\n purchase_external_id: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.purchase_external_id,\n EventParameterType.string,\n ),\n purchase_type: this.settingsService.unsafeUtilsResponse?.purchase\n ?.purchase_type as Purchase,\n purchase_sum: this.convertToEventParameterType(\n options.invoice?.purchase_sum,\n EventParameterType.float,\n ),\n purchase_currency: this.convertToEventParameterType(\n options.invoice?.purchase_currency,\n EventParameterType.string,\n ),\n purchase_sku: this.convertToEventParameterType(\n options.invoice?.purchase_sku,\n EventParameterType.string,\n ),\n purchase_digital_content_sku: null,\n purchase_description: this.convertToEventParameterType(\n options.invoice?.purchase_description,\n EventParameterType.string,\n ),\n virtual_currency_amount: null, // TODO: add value\n digital_content_cart_id: this.convertToEventParameterType(\n options.invoice?.digital_content_cart_id,\n EventParameterType.int,\n ),\n digital_good_cart_id: this.convertToEventParameterType(\n options.invoice?.digital_good_cart_id,\n EventParameterType.int,\n ),\n coupon_code: this.convertToEventParameterType(\n userSessionOptions.couponCode,\n EventParameterType.string,\n ),\n theme_version: this.userAgentService.isMobileDevice\n ? Device.mobile\n : Device.desktop,\n subscription_package_id: this.convertToEventParameterType(\n userSessionOptions.subscriptionPackageId,\n EventParameterType.int,\n ),\n subscription_product_id: this.convertToEventParameterType(\n userSessionOptions.subscriptionProductId,\n EventParameterType.int,\n ),\n subscription_recurrent_id: this.convertToEventParameterType(\n userSessionOptions.subscriptionRecurrentId,\n EventParameterType.int,\n ),\n user_id: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.requisites?.id,\n EventParameterType.string,\n ),\n user_access_token: this.settingsService.token,\n user_name: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.requisites?.v2,\n EventParameterType.string,\n ),\n user_email: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.email?.value,\n EventParameterType.string,\n ),\n user_country: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.country?.value,\n EventParameterType.string,\n ),\n user_ip: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.ip,\n EventParameterType.string,\n ),\n user_mobile_operator_name: this.convertToEventParameterType(\n userSessionOptions.userMobileOperatorName,\n EventParameterType.string,\n ),\n user_operation_system: this.userAgentService.platform,\n user_browser: this.userAgentService.browserDescription,\n user_browser_version: this.userAgentService.browserVersion,\n user_agent: this.userAgentService.userAgent,\n user_locale: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.local,\n EventParameterType.string,\n ),\n user_utm: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.user?.utm_parameters,\n EventParameterType.string,\n ),\n xsolla_product_tag: this.convertToEventParameterType(\n this.settingsService.unsafeUtilsResponse?.xsolla_product_tag,\n EventParameterType.string,\n ),\n experiment_id: null,\n is_test_session: +isDevMode(),\n babka_value: null,\n extra_value: this.convertToEventParameterType(\n options?.extraValue,\n EventParameterType.string,\n ),\n is_subscription: this.convertToEventParameterType(\n this.isSubscription(),\n EventParameterType.bool,\n ),\n is_iframe: this.convertToEventParameterType(\n this.window.parent !== this.window,\n EventParameterType.bool,\n ),\n web3wallet: null, // TODO: add value\n dimension_1: this.convertToEventParameterType(\n options?.dimension1,\n EventParameterType.string,\n ),\n dimension_2: this.convertToEventParameterType(\n options?.dimension2,\n EventParameterType.string,\n ),\n dimension_3: this.convertToEventParameterType(\n options?.dimension3,\n EventParameterType.string,\n ),\n dimension_4: this.convertToEventParameterType(\n options?.dimension4,\n EventParameterType.string,\n ),\n dimension_5: this.convertToEventParameterType(\n options?.dimension5,\n EventParameterType.string,\n ),\n client_version: 'Headless Checkout',\n };\n }\n\n private getDate(date: Date): string {\n const nullIndex = 0;\n return date.toISOString().replace('T', ' ').replace('Z', '').split('.')[\n nullIndex\n ];\n }\n\n private getTimezone(date: Date): string {\n const hour = 60;\n const nullHour = 0;\n const hourOffset = -date.getTimezoneOffset() / hour;\n\n if (hourOffset === nullHour) {\n return '0';\n }\n\n return hourOffset > nullHour ? `+${hourOffset}` : hourOffset.toString();\n }\n\n private convertToEventParameterType(\n value: boolean | number | number[] | string | string[] | null | undefined,\n type: EventParameterType,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): any | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n\n switch (type) {\n case EventParameterType.string:\n return String(value);\n case EventParameterType.int:\n value = parseInt(String(value), 10);\n return isNaN(value) ? 0 : value;\n case EventParameterType.stringArray:\n case EventParameterType.intArray:\n return Array.isArray(value) ? value : [];\n case EventParameterType.float:\n value = parseFloat(String(value));\n return isNaN(value) ? 0 : value;\n case EventParameterType.bool:\n return value ? 1 : 0;\n }\n }\n\n private convertValueForPostMessage(\n value: string | number[] | null,\n ): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n return String(value);\n }\n\n private isSubscription(): boolean {\n return (\n this.settingsService.unsafeUtilsResponse?.purchase?.purchase_type ===\n 'subscription'\n );\n }\n\n private getPaymentMethodId(instanceId: number | null): number | null {\n return (\n this.settingsService.unsafeUtilsResponse?.settings?.payment_system ??\n instanceId\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { userBehaviourEventTypes } from './user-behaviour-event/user-behaviour-event-types';\nimport { eventCategories } from './user-behaviour-event/user-behaviour-event-categories';\nimport {\n SendEventMethodOptionsInterface,\n CreateEventMethodOptionsInterface,\n} from './user-behaviour-analytics.interface';\nimport { EventBuilderService } from './event-builder/event-builder.service';\nimport { UserBehaviourEvent } from './event-builder/user-behaviour-event.interface';\nimport { Subject } from 'rxjs';\nimport { Invoice } from './event-builder/invoice.interface';\nimport { UserBehaviourEventName } from './user-behaviour-event-name.enum';\nimport { oneTimeAnalyticsEvents } from './one-time-analytics-events.const';\nimport { SettingsService } from '../settings/settings.service';\nimport { Field } from '../payment/field.interface';\nimport { XpsResponse } from '../payment/xps-response.interface';\nimport { UserSessionOptions } from './user-session-options';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserBehaviourAnalyticsService {\n public set isPayWithSavedMethod(value: boolean) {\n this.userSessionOptions.isPayWithSavedMethod = value;\n }\n\n public set subscriptionPackageId(value: number) {\n this.userSessionOptions.subscriptionPackageId = value;\n }\n\n public set couponCode(value: string) {\n this.userSessionOptions.couponCode = value;\n }\n\n public set paymentStatus(value: string) {\n this.userSessionOptions.paymentStatus = value;\n }\n\n public get sessionOptions(): UserSessionOptions {\n return this.userSessionOptions;\n }\n\n private get purchaseType(): string | null {\n return this.settingsService.unsafeUtilsResponse?.purchase?.purchase_type\n ? 'subscription'\n : null;\n }\n\n private readonly apiUrl: string =\n 'https://datagather.xsolla.com/paystation-user-sessions';\n\n private readonly _events$ = new Subject<UserBehaviourEvent>();\n\n private readonly userSessionOptions: UserSessionOptions = {\n invoice: null,\n instanceId: null,\n subscriptionRecurrentId: null,\n userMobileOperatorName: null,\n isPayWithSavedMethod: false,\n subscriptionPackageId: null,\n subscriptionProductId: null,\n couponCode: null,\n totalSum: null,\n totalCurrency: null,\n paymentInstanceName: null,\n paymentStatus: null,\n };\n\n private readonly sentEvents = new Set();\n\n public constructor(\n private readonly http: HttpClient,\n private readonly eventBuilderService: EventBuilderService,\n private readonly settingsService: SettingsService,\n ) {}\n\n public init(): undefined | void {\n this.setPid(\n this.settingsService.unsafeUtilsResponse?.purchase?.payment_system?.id,\n );\n this.onOpenPayStation();\n }\n\n public setPid(pid?: number | null): void {\n if (pid) {\n this.userSessionOptions.instanceId = pid;\n }\n }\n\n public fillUserSession(paymentForm: {\n fields: Field[];\n subscriptionRecurrentId?: number;\n userSession?: Invoice;\n pid: XpsResponse['pid'];\n errors: XpsResponse['errors'];\n summary: XpsResponse['summary'];\n title: string;\n }): void {\n if (paymentForm.subscriptionRecurrentId) {\n this.userSessionOptions.subscriptionRecurrentId =\n paymentForm.subscriptionRecurrentId;\n }\n\n const operator: Field | undefined = paymentForm.fields.find(\n (field: Field) => field.name === 'operator',\n );\n if (operator) {\n this.userSessionOptions.userMobileOperatorName = operator.value;\n }\n\n if (paymentForm.pid) {\n this.setPid(paymentForm.pid);\n }\n\n if (paymentForm.userSession) {\n this.userSessionOptions.invoice = paymentForm.userSession;\n const createInvoiceOptions = {\n eventCategory: eventCategories.withInvoice,\n };\n this.send(\n 'create-invoice',\n userBehaviourEventTypes.manual,\n createInvoiceOptions,\n );\n\n if (paymentForm.errors?.length) {\n this.resetInvoice();\n }\n }\n\n const total = paymentForm?.summary?.finance?.total;\n if (total) {\n this.userSessionOptions.totalSum = total.amount;\n this.userSessionOptions.totalCurrency = total.currency;\n }\n\n if (paymentForm.title) {\n this.userSessionOptions.paymentInstanceName = paymentForm.title;\n }\n }\n\n public send(\n action: string,\n type: keyof typeof userBehaviourEventTypes,\n options?: SendEventMethodOptionsInterface,\n ): void {\n if (oneTimeAnalyticsEvents.has(action) && this.sentEvents.has(action)) {\n return;\n }\n\n const date = new Date();\n const invoice =\n options?.eventCategory === eventCategories.withInvoice\n ? this.userSessionOptions.invoice\n : null;\n const eventOptions: CreateEventMethodOptionsInterface = {\n action,\n type,\n value: options?.value ?? null,\n valueType: options?.valueType ?? null,\n date,\n invoice,\n state: '',\n extraValue: options?.extraValue ?? null,\n purchase_type: options?.purchaseType ?? null,\n instanceId: options?.instanceId ?? null,\n dimension1: options?.dimension1 ?? null,\n dimension2: options?.dimension2 ?? null,\n dimension3: options?.dimension3 ?? null,\n dimension4: options?.dimension4 ?? null,\n dimension5: options?.dimension5 ?? null,\n };\n\n const sendEvent = (): void => {\n this.sentEvents.add(action);\n const event: UserBehaviourEvent = this.eventBuilderService.createEvent(\n eventOptions,\n this.userSessionOptions,\n );\n this._events$.next(event);\n const requestBody = JSON.stringify(event);\n if (navigator.sendBeacon) {\n navigator.sendBeacon(this.apiUrl, requestBody);\n } else {\n void this.http.post(this.apiUrl, requestBody).toPromise();\n }\n };\n\n if (options?.syncRequest) {\n sendEvent();\n return;\n }\n\n setTimeout(() => sendEvent());\n }\n\n private onOpenPayStation(): void {\n this.send(\n UserBehaviourEventName.openPaystation,\n userBehaviourEventTypes.open,\n {\n value: null,\n purchaseType: this.purchaseType,\n },\n );\n }\n\n private resetInvoice(): void {\n this.userSessionOptions.invoice = null;\n }\n\n private resetPid(): void {\n this.userSessionOptions.instanceId = null;\n }\n}\n","import { Inject, Injectable, Injector, ProviderToken } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { SubmitResponse } from '../requests/submit/response/submit-response.class';\nimport { ActionCreator } from './action.interface';\nimport { NextAction } from './next-action.interface';\nimport { nextActionsToken, NextActionTokens } from './next-actions';\nimport { ShowErrorsActionCreator } from './show-errors/show-errors.action.class';\nimport { XpsError } from '../xps-error.interface';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { ErrorTags, TaggedError } from '../../exceptions-handling/errors';\nimport { analyticsPayloadCreatorMap } from './analytics/analytics-payload-creator.map';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NextActionService {\n private readonly flowUpdatesSubject = new Subject<NextAction>();\n\n private readonly nextActionsList: ActionCreator[] = [];\n\n public get flowUpdates$(): Observable<NextAction> {\n return this.flowUpdatesSubject.asObservable();\n }\n\n public constructor(\n @Inject(nextActionsToken)\n private readonly nextActionTokens: NextActionTokens,\n private readonly injector: Injector,\n private readonly showErrorsActionCreator: ShowErrorsActionCreator,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {\n this.fillNextActionsList();\n }\n\n public getNextAction(submitResponse: SubmitResponse): NextAction | null {\n if (submitResponse.errors?.length) {\n this.emitFlowErrors(submitResponse.errors);\n }\n\n if (!submitResponse.currentCommand) {\n return null;\n }\n\n const nextActionCreator = this.findNextActionCreator(submitResponse);\n\n if (nextActionCreator) {\n const nextAction = nextActionCreator.getActionData(submitResponse);\n this.logNextAction(nextAction);\n return nextAction;\n }\n\n throw new TaggedError(\n 'Next action is undefined.',\n [ErrorTags.APP],\n submitResponse,\n );\n }\n\n public emitFlowUpdates(action: NextAction): void {\n this.flowUpdatesSubject.next(action);\n this.logNextAction(action);\n }\n\n public emitFlowErrors(errors: XpsError[]): void {\n if (errors.length === 0) return;\n this.emitFlowUpdates(this.showErrorsActionCreator.getActionData(errors));\n }\n\n private fillNextActionsList(): void {\n this.nextActionTokens.forEach(\n (nextAction: ProviderToken<ActionCreator>) => {\n const item = this.injector.get<ActionCreator>(nextAction);\n this.nextActionsList.push(item);\n },\n );\n }\n\n private findNextActionCreator(\n submitResponse: SubmitResponse,\n ): ActionCreator | undefined {\n const actionType = this.nextActionsList.find(\n (nextAction: ActionCreator) => {\n return nextAction.isSuitable(submitResponse);\n },\n );\n\n if (!actionType) {\n return;\n }\n\n return actionType;\n }\n\n private logNextAction(nextAction: NextAction): void {\n const analyticsPayloadCreator = analyticsPayloadCreatorMap.get(\n nextAction.type,\n );\n const payload = analyticsPayloadCreator?.(nextAction) ?? {\n value: nextAction.type,\n };\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.nextAction,\n 'manual',\n payload,\n );\n }\n}\n","/* eslint-disable @typescript-eslint/no-magic-numbers */\nexport const cardNumberSanctionErrorCodes = [\n 2034, 2035, 5027, 5024, 5025, 2036,\n];\n","import { FieldNames } from '../payment/field-names.enum';\nimport { cardNumberSanctionErrorCodes } from './card-number-sanction-error-codes.const';\n\nexport const fieldSpecialErrorsMap = [\n {\n errorCodes: new Set(cardNumberSanctionErrorCodes),\n fieldName: FieldNames.cardNumber,\n },\n];\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'unescapeHtml',\n})\nexport class UnescapeHtmlPipe implements PipeTransform {\n public transform(html?: string): string {\n if (!html) {\n return '';\n }\n\n if (html.includes('>')) {\n const messageDocument = new DOMParser().parseFromString(\n html,\n 'text/html',\n );\n return messageDocument?.documentElement?.textContent ?? '';\n }\n\n return html;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { UnescapeHtmlPipe } from '../../shared/pipes/unescape-html/unescape-html.pipe';\nimport { XpsError } from '../payment/xps-error.interface';\nimport { XpsResponse } from '../payment/xps-response.interface';\nimport { fieldSpecialErrorsMap } from './field-special-errors-map.const';\n\n@Injectable({ providedIn: 'root' })\nexport class XpsResponseErrorsMappingService {\n public constructor(private readonly unescapeHtmlPipe: UnescapeHtmlPipe) {}\n\n public mapErrors(response: XpsResponse): XpsResponse {\n if (!response.errors?.length) {\n return response;\n }\n\n let mappedErrors = this.mapFieldSpecialErrors(response.errors);\n mappedErrors = this.unescapeErrorsText(mappedErrors);\n\n return {\n ...response,\n errors: mappedErrors,\n };\n }\n\n private mapFieldSpecialErrors(errors: XpsError[]): XpsError[] {\n return errors.map((error) => {\n if (!error.element_name) {\n const errorMap = fieldSpecialErrorsMap.find((map) =>\n map.errorCodes.has(error.code),\n );\n\n if (errorMap) {\n return {\n ...error,\n element_name: errorMap.fieldName,\n };\n }\n }\n\n return error;\n });\n }\n\n private unescapeErrorsText(errors: XpsError[]): XpsError[] {\n return errors.map((error) => {\n if (!error.message) {\n return error;\n }\n\n return {\n ...error,\n message: this.unescapeHtmlPipe.transform(error.message),\n };\n });\n }\n}\n","import { TaggedError } from './tagged-error.class';\nimport { ErrorTags } from './elk-error-types.enum';\n\nexport class EncryptCreditCardError extends TaggedError {\n public constructor(message: string, tags?: ErrorTags[]) {\n tags = tags ? [...tags, ErrorTags.ENCRYPT] : [ErrorTags.ENCRYPT];\n\n super(message, tags);\n }\n}\n","export const fourBlockMask = '9999 9999 9999 9999';\n","export enum CreditCardTypes {\n DEFAULT = '0',\n VISA = '1',\n MASTERCARD = '2',\n MAESTRO = '3',\n AMERICAN_EXPRESS = '4',\n DINERS_CLUBS = '5',\n DISCOVER = '6',\n JCB = '9',\n DANKORT = '11',\n HIPERCARD = '12',\n ELO = '13',\n AURA = '14',\n NARANJA = '15',\n MIR = '16',\n CHINA_UNION_PAY = '17',\n POSTEPAY = '18',\n}\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { fourBlockMask } from '../four-block-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const visa: CreditCardSettings = {\n id: CreditCardTypes.VISA,\n minLength: 13,\n maxLength: 16,\n iconName: 'visa',\n mask: fourBlockMask,\n checkNumber(number: string): boolean {\n return number.startsWith('4');\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { fourBlockMask } from '../four-block-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const mastercard: CreditCardSettings = {\n id: CreditCardTypes.MASTERCARD,\n minLength: 16,\n maxLength: 16,\n iconName: 'mastercard',\n mask: fourBlockMask,\n checkNumber(number: string): boolean {\n const subLength = 6;\n const cardNumberSub = number.substring(0, subLength);\n return (\n new RegExp(/^5[1-5]/).test(number) ||\n (cardNumberSub >= '222100' && cardNumberSub <= '272099')\n );\n },\n};\n","export const defaultMask = '9999 9999 9999 9999 999';\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { defaultMask } from '../default-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const maestro: CreditCardSettings = {\n id: CreditCardTypes.MAESTRO,\n minLength: 12,\n maxLength: 19,\n iconName: 'maestro',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n return new RegExp(\n /^(5018)|^(5020)|^(5038)|^(5893)|^(6304)|^(6759)|^(6761)|^(6762)|^(6763)|^(0604)|^(6706)|^(6771)|^(6709)/,\n ).test(number);\n },\n maxCvvLength: 3,\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const americanExpress: CreditCardSettings = {\n id: CreditCardTypes.AMERICAN_EXPRESS,\n minLength: 15,\n maxLength: 15,\n iconName: 'american-express',\n mask: '9999 999999 99999',\n checkNumber(number: string): boolean {\n return new RegExp(/^(34)|^(37)/).test(number);\n },\n maxCvvLength: 4,\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const dinersClubs: CreditCardSettings = {\n id: CreditCardTypes.DINERS_CLUBS,\n minLength: 14,\n maxLength: 14,\n iconName: 'dinersclub',\n mask: '9999 9999 9999 99',\n checkNumber(number: string): boolean {\n const regex = /^(36[0-9]|3(?:0[0-59]|[68][0-9])[0-9])/;\n return regex.test(number);\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\nimport { defaultMask } from '../default-mask.const';\n\nexport const discover: CreditCardSettings = {\n id: CreditCardTypes.DISCOVER,\n minLength: 16,\n maxLength: 19,\n iconName: 'discover',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n return new RegExp(\n /^(6011)|^(622(1(2[6-9]|[3-9][0-9])|[2-8][0-9]{2}|9([01][0-9]|2[0-5])))|^(64[4-9])|^65/,\n ).test(number);\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { fourBlockMask } from '../four-block-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const jcb: CreditCardSettings = {\n id: CreditCardTypes.JCB,\n minLength: 15,\n maxLength: 16,\n iconName: 'jcb',\n mask: fourBlockMask,\n checkNumber(number: string): boolean {\n return new RegExp(/^35(2[89]|[3-8][0-9])/).test(number);\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { fourBlockMask } from '../four-block-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const dankort: CreditCardSettings = {\n id: CreditCardTypes.DANKORT,\n minLength: 16,\n maxLength: 16,\n iconName: 'dankort',\n mask: fourBlockMask,\n checkNumber(number: string): boolean {\n const subLength = 4;\n const cardNumberSub = number.substring(0, subLength);\n return cardNumberSub === '5019';\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { defaultMask } from '../default-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const hipercard: CreditCardSettings = {\n id: CreditCardTypes.HIPERCARD,\n minLength: 13,\n maxLength: 19,\n iconName: 'hipercard',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n return new RegExp(/^((606282|637095|637568)[0-9]|38[0-9]{14,17})/).test(\n number,\n );\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\nimport { defaultMask } from '../default-mask.const';\n\nexport const elo: CreditCardSettings = {\n id: CreditCardTypes.ELO,\n minLength: 16,\n maxLength: 19,\n iconName: 'elo',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n return new RegExp(\n /^(40117[8-9]|431274|438935|451416|457393|45763[1-2]|506(699|7[0-6][0-9]|77[0-8])|509\\d{3}|504175|627780|636297|636368|65003[1-3]|6500(3[5-9]|4[0-9]|5[0-1])|6504(0[5-9]|[1-3][0-9])|650(4[8-9][0-9]|5[0-2][0-9]|53[0-8])|6505(4[1-9]|[5-8][0-9]|9[0-8])|6507(0[0-9]|1[0-8])|65072[0-7]|6509(0[1-9]|1[0-9]|20)|6516(5[2-9]|[6-7][0-9])|6550([0-1][0-9]|2[1-9]|[3-4][0-9]|5[0-8]))/,\n ).test(number);\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { defaultMask } from '../default-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const aura: CreditCardSettings = {\n id: CreditCardTypes.AURA,\n minLength: 16,\n maxLength: 19,\n iconName: 'aura',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n const subLength = 8;\n const cardNumberSub = number.substring(0, subLength);\n return ['50786000', '50786018', '50786019'].includes(cardNumberSub);\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { defaultMask } from '../default-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const naranja: CreditCardSettings = {\n id: CreditCardTypes.NARANJA,\n minLength: 12,\n maxLength: 19,\n iconName: 'naranja',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n const subLength = 6;\n const cardNumberSub = number.substring(0, subLength);\n return cardNumberSub === '589562';\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { defaultMask } from '../default-mask.const';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const mir: CreditCardSettings = {\n id: CreditCardTypes.MIR,\n minLength: 16,\n maxLength: 16,\n iconName: 'mir',\n mask: defaultMask,\n checkNumber(number: string): boolean {\n const subLength = 4;\n const cardNumberSub = number.substring(0, subLength);\n return cardNumberSub >= '2200' && cardNumberSub <= '2204';\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const chinaUnionPay: CreditCardSettings = {\n id: CreditCardTypes.CHINA_UNION_PAY,\n minLength: 16,\n maxLength: 19,\n iconName: 'unionpay',\n mask: '999 9999 9999 99999999',\n checkNumber(number: string): boolean {\n return number.startsWith('62');\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\nimport { defaultMask } from '../default-mask.const';\n\nexport const defaultCard: CreditCardSettings = {\n id: CreditCardTypes.DEFAULT,\n minLength: 12,\n maxLength: 19,\n iconName: null,\n mask: defaultMask,\n checkNumber(): boolean {\n return false;\n },\n};\n","import { CreditCardSettings } from '../credit-card-settings.interface';\nimport { CreditCardTypes } from '../credit-card-types.enum';\n\nexport const postePay: CreditCardSettings = {\n id: CreditCardTypes.POSTEPAY,\n minLength: 12,\n maxLength: 19,\n iconName: 'poste_pay',\n mask: '9999 9999 9999 9999 999',\n checkNumber(number: string): boolean {\n const regex =\n /^(5018)|^(5020)|^(5038)|^(5893)|^(6304)|^(6759)|^(6761)|^(6762)|^(6763)|^(0604)|^(6706)|^(6771)|^(6709)/;\n return regex.test(number);\n },\n};\n","import { visa } from './types/visa';\nimport { mastercard } from './types/mastercard';\nimport { maestro } from './types/maestro';\nimport { americanExpress } from './types/american-express';\nimport { dinersClubs } from './types/diners-clubs';\nimport { discover } from './types/discover';\nimport { jcb } from './types/jcb';\nimport { dankort } from './types/dankort';\nimport { hipercard } from './types/hipercard';\nimport { elo } from './types/elo';\nimport { aura } from './types/aura';\nimport { naranja } from './types/naranja';\nimport { mir } from './types/mir';\nimport { chinaUnionPay } from './types/china-union-pay';\nimport { defaultCard } from './types/default-card';\nimport { CreditCardSettings } from './credit-card-settings.interface';\nimport { postePay } from './types/postepay';\n\n/**\n * order does matter\n * settings with more specific pattern should be placed above\n * Example:\n * - 12*\n * - 12\n * - 1\n * \"12*\" pattern should be checked first, otherwise pattern \"1\" will be taken\n * before \"12*\" checked\n */\nexport const orderedCardSettings: CreditCardSettings[] = [\n aura,\n naranja,\n maestro,\n postePay,\n elo,\n discover,\n dankort,\n hipercard,\n mir,\n jcb,\n dinersClubs,\n americanExpress,\n mastercard,\n chinaUnionPay,\n visa,\n defaultCard,\n];\n","import { CreditCardTypes } from './credit-card-types.enum';\nimport { visa } from './types/visa';\nimport { mastercard } from './types/mastercard';\nimport { maestro } from './types/maestro';\nimport { americanExpress } from './types/american-express';\nimport { dinersClubs } from './types/diners-clubs';\nimport { discover } from './types/discover';\nimport { jcb } from './types/jcb';\nimport { dankort } from './types/dankort';\nimport { hipercard } from './types/hipercard';\nimport { elo } from './types/elo';\nimport { aura } from './types/aura';\nimport { naranja } from './types/naranja';\nimport { mir } from './types/mir';\nimport { chinaUnionPay } from './types/china-union-pay';\nimport { defaultCard } from './types/default-card';\nimport { CreditCardSettings } from './credit-card-settings.interface';\nimport { postePay } from './types/postepay';\n\nexport const creditCardsMap: {\n [key in CreditCardTypes]: CreditCardSettings;\n} = {\n [CreditCardTypes.DEFAULT]: defaultCard,\n [CreditCardTypes.VISA]: visa,\n [CreditCardTypes.MASTERCARD]: mastercard,\n [CreditCardTypes.MAESTRO]: maestro,\n [CreditCardTypes.AMERICAN_EXPRESS]: americanExpress,\n [CreditCardTypes.DINERS_CLUBS]: dinersClubs,\n [CreditCardTypes.DISCOVER]: discover,\n [CreditCardTypes.JCB]: jcb,\n [CreditCardTypes.DANKORT]: dankort,\n [CreditCardTypes.HIPERCARD]: hipercard,\n [CreditCardTypes.ELO]: elo,\n [CreditCardTypes.AURA]: aura,\n [CreditCardTypes.NARANJA]: naranja,\n [CreditCardTypes.MIR]: mir,\n [CreditCardTypes.CHINA_UNION_PAY]: chinaUnionPay,\n [CreditCardTypes.POSTEPAY]: postePay,\n};\n","import { Injectable } from '@angular/core';\nimport { CreditCardTypes } from './credit-card-types.enum';\nimport { orderedCardSettings } from './ordered-cards-settings.const';\nimport { CreditCardSettings } from './credit-card-settings.interface';\nimport { creditCardsMap } from './credit-cards-map.const';\nimport { defaultCard } from './types/default-card';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CreditCardService {\n public getBinNumber(cardNumber: string): string {\n const binNumberLength = 6;\n return cardNumber.replace(/\\s+/g, '').substring(0, binNumberLength);\n }\n\n public getAccountSuffix(cardNumber: string): string {\n const accountSuffixLength = 4;\n return cardNumber\n .replace(/\\s+/g, '')\n .substring(cardNumber.length - accountSuffixLength);\n }\n\n public getTypeByNumber(cardNumber: string): CreditCardTypes {\n cardNumber = cardNumber.replace(/\\s+/g, '');\n\n const cardSettings = orderedCardSettings.find((settings) => {\n const isNumberMatched = settings.checkNumber(cardNumber);\n return isNumberMatched ? settings.id : false;\n });\n\n return cardSettings ? cardSettings.id : defaultCard.id;\n }\n\n public getCreditCardSettings(cardType: CreditCardTypes): CreditCardSettings {\n const creditCard = creditCardsMap[cardType];\n\n if (!creditCard) {\n return defaultCard;\n }\n\n return creditCard;\n }\n}\n","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport JSEncrypt from 'jsencrypt';\nimport { Injectable } from '@angular/core';\nimport { EncryptCreditCardError } from '../exceptions-handling/errors/encrypt-card-error';\nimport { XpsApiPartRequest } from '../payment/xps-api/xps-api-part-request.abstract';\nimport { CreditCardService } from '../credit-card/credit-card.service';\nimport { EncryptedCard } from './encrypted-card.interface';\nimport { OpenCard } from './open-card.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class EncryptCreditCardService {\n private readonly jsEncrypt!: JSEncrypt;\n\n private readonly secureFieldNames: Array<`xps_${string}`> = [\n 'xps_card_number',\n 'xps_cvv',\n 'xps_extra_cvv',\n 'xps_card_year',\n 'xps_card_month',\n ];\n\n public constructor(private readonly creditCardService: CreditCardService) {\n this.jsEncrypt = new JSEncrypt();\n }\n\n public setPublicKey(publicKey: string): void {\n this.jsEncrypt.setPublicKey(publicKey);\n }\n\n public encryptCreditCard<T extends XpsApiPartRequest>(\n request: XpsApiPartRequest,\n ): T {\n if (request.xps_card_number) {\n const openCard: OpenCard = this.createOpenCard(request);\n request.xps_open_card = JSON.stringify(openCard);\n }\n\n const encryptedCard: EncryptedCard = this.createEncryptedCard(request);\n\n if (request.xps_card_number || request.xps_extra_card_number) {\n request.xps_encrypted_card = this.encrypt(JSON.stringify(encryptedCard));\n }\n\n this.secureFieldNames.forEach((secureFieldName: `xps_${string}`) => {\n delete request[secureFieldName];\n });\n\n return request as T;\n }\n\n private encrypt(value: string): string {\n if (!this.jsEncrypt?.getPublicKey()) {\n throw new EncryptCreditCardError('Empty public key');\n }\n\n const encryptedValue = this.jsEncrypt.encrypt(value);\n\n if (!encryptedValue) {\n throw new EncryptCreditCardError(\n 'Encryption returns false instead of encrypted string',\n );\n }\n\n return encryptedValue;\n }\n\n private createEncryptedCard(request: XpsApiPartRequest): EncryptedCard {\n const encryptedCard: EncryptedCard = {\n card_number: request.xps_card_number as string,\n card_year: request.xps_card_year as string,\n card_month: request.xps_card_month as string,\n cvv: request.xps_cvv as string,\n };\n\n if (request.xps_extra_cvv) {\n encryptedCard.cvv = request.xps_extra_cvv as string;\n }\n\n return encryptedCard;\n }\n\n private createOpenCard(request: XpsApiPartRequest): OpenCard {\n return {\n card_bin: this.creditCardService.getBinNumber(\n request.xps_card_number as string,\n ),\n card_suffix: this.creditCardService.getAccountSuffix(\n request.xps_card_number as string,\n ),\n card_year: request.xps_card_year as string,\n card_month: request.xps_card_month as string,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PaymentConfiguration } from '../payment-configuration.interface';\nimport { PaymentSettingsRequestParams } from './payment-settings-request-params.interface';\nimport { XpsBoolean } from '../../xps-boolean.enum';\nimport { TransactionInitiationType } from '../../transaction-initiation-type.enum';\nimport { isCreditCardSettingsGuard } from '../payment-configurations/types/is-credit-card-settings.guard';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentSettingsService {\n public getPaymentSettingsParams(\n config: PaymentConfiguration | null,\n ): PaymentSettingsRequestParams {\n if (!config?.paymentMethodSettings) {\n return {};\n }\n\n const params: PaymentSettingsRequestParams = {};\n\n if (isCreditCardSettingsGuard(config)) {\n const settings = config.paymentMethodSettings;\n\n params.useSingleExpirationDateField = this.toXps(\n settings.useSingleExpirationDateField,\n );\n params.useExternalVault = this.toXps(settings.useExternalVault);\n\n const transactionType = this.resolveTransactionInitiationType(\n settings.transactionInitiationType,\n settings.isPaymentViaSavedMethod,\n settings.useExternalVault,\n );\n\n if (transactionType) {\n params.transactionInitiationType = transactionType;\n }\n }\n\n return params;\n }\n\n private toXps(value: boolean | undefined): XpsBoolean {\n return value ? XpsBoolean.true : XpsBoolean.false;\n }\n\n private resolveTransactionInitiationType(\n transactionInitiationType?: TransactionInitiationType,\n isPaymentViaSavedMethod?: boolean,\n useExternalVault?: boolean,\n ): TransactionInitiationType | undefined {\n if (!useExternalVault) {\n return undefined;\n }\n if (transactionInitiationType) {\n return transactionInitiationType;\n }\n\n return isPaymentViaSavedMethod\n ? TransactionInitiationType.COF\n : TransactionInitiationType.OT;\n }\n}\n","export function isNull(value: unknown): value is null {\n return value === null;\n}\n","export function isUndefined(value: unknown): value is undefined {\n return typeof value === 'undefined';\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ExtendedWindow } from '../extended-window.interface';\nimport { SettingsService } from '../settings/settings.service';\nimport { isNull } from '../type-guards/is-null.function';\nimport { isUndefined } from '../type-guards/is-undefined.function';\nimport { windowToken } from '../window.token';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SessionService {\n private cache: { [key: string]: unknown } = {};\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly settingsService: SettingsService,\n ) {}\n\n /**\n * @param {string} key must be uniq entire all app\n * @param {unknown} value can be anything\n */\n public set(key: string, value: unknown): void {\n this.cache[key] = value;\n\n try {\n this.window.sessionStorage.setItem(\n this.getStorageKey(key),\n JSON.stringify(value),\n );\n } catch (error: unknown) {\n console.warn('Session storage not available.');\n }\n }\n\n public get<T>(key: string): T | null {\n const cacheValue: unknown = this.cache[key];\n\n if (!isUndefined(cacheValue)) {\n return cacheValue as T;\n }\n\n try {\n const storageValue = this.window.sessionStorage.getItem(\n this.getStorageKey(key),\n );\n\n if (isNull(storageValue)) {\n return null;\n }\n\n return JSON.parse(storageValue) as T;\n } catch (error: unknown) {\n return null;\n }\n }\n\n private getStorageKey(key: string): string {\n return `${key}${this.settingsService.token}`;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { CountryService } from '../../../country/country.service';\nimport { ResponseError } from '../../../exceptions-handling/errors/response-error.class';\nimport { EncryptCreditCardService } from '../../../encrypt-credit-card/encrypt-credit-card.service';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { PaymentConfiguration } from '../../payment-configuration.interface';\nimport { NextActionService } from '../../actions/next-action.service';\nimport { ShowErrorsActionCreator } from '../../actions/show-errors/show-errors.action.class';\nimport { XpsApiService } from '../../xps-api/xps-api.service';\nimport { Field } from '../../field.interface';\nimport { PaymentForm } from '../../payment-form.interface';\nimport {\n InitializeResponseFactory,\n initializeResponseFactoryToken,\n} from './response/initialize-response.token';\nimport { InitializeResponse } from './response/initialize-response.class';\nimport { InitializeRequestParams } from './initialize-request-params.interface';\nimport { XpsResponseErrorsMappingService } from '../../../errors-mapping/xps-response-errors-mapping.service';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { PaymentSettingsService } from '../../payment-settings/payment-settings.service';\nimport { SessionService } from '../../../session/session.service';\nimport { HttpError } from '../../../exceptions-handling/errors/http-error.class';\nimport { ServerErrorActionCreator } from '../../actions/server-error/server-error.action.class';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InitializeService {\n public constructor(\n @Inject(initializeResponseFactoryToken)\n protected readonly responseFactory: InitializeResponseFactory,\n private readonly xpsApiService: XpsApiService,\n private readonly settingsService: SettingsService,\n private readonly countryService: CountryService,\n private readonly nextActionService: NextActionService,\n private readonly xpsResponseErrorsMappingService: XpsResponseErrorsMappingService,\n private readonly encryptCreditCardService: EncryptCreditCardService,\n private readonly showErrorsActionCreator: ShowErrorsActionCreator,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly paymentSettingsService: PaymentSettingsService,\n private readonly sessionService: SessionService,\n private readonly serverErrorActionCreator: ServerErrorActionCreator,\n ) {}\n\n public async request(\n config: PaymentConfiguration,\n ): Promise<InitializeResponse> {\n const paymentSettingsParams =\n this.paymentSettingsService.getPaymentSettingsParams(config);\n\n this.sessionService.set('cardNumberCountry', null);\n\n const requestParams: InitializeRequestParams = {\n access_token: this.settingsService.token,\n pid: String(config.paymentMethodId),\n country: this.countryService.getCountry(),\n returnUrl: config.returnUrl,\n paymentWithSavedMethod:\n config.paymentWithSavedMethod === true\n ? XpsBoolean.true\n : XpsBoolean.false,\n save_payment_account_only: config.savePaymentMethod\n ? XpsBoolean.true\n : XpsBoolean.false,\n ...paymentSettingsParams,\n };\n\n if (this.settingsService.isGooglePayInstantFlowEnabled !== null) {\n requestParams.google_pay_instant_flow = this.settingsService\n .isGooglePayInstantFlowEnabled\n ? XpsBoolean.true\n : XpsBoolean.false;\n }\n\n if (config.savedMethodId) {\n requestParams.saved_method_id = config.savedMethodId;\n }\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.initializeRequest,\n userBehaviourEventTypes.manual,\n { value: requestParams.pid },\n );\n\n return this.xpsApiService\n .directPaymentRequest(requestParams)\n .then((xpsResponse) => {\n const response =\n this.xpsResponseErrorsMappingService.mapErrors(xpsResponse);\n const initializeResponse = this.responseFactory(response);\n\n if (!initializeResponse.paymentForm) {\n return initializeResponse;\n }\n\n this.setCreditCardEncryptKey(initializeResponse.paymentForm);\n this.userBehaviourAnalyticsService.fillUserSession(\n initializeResponse.paymentForm,\n );\n\n if (initializeResponse.paymentForm?.errors?.length) {\n const logError = (error: { code: number; message: string }): void => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.showErrorMessage,\n userBehaviourEventTypes.manual,\n { value: String(error.code), extraValue: error.message },\n );\n };\n\n initializeResponse.paymentForm.errors.forEach(logError);\n\n this.nextActionService.emitFlowUpdates(\n this.showErrorsActionCreator.getActionData(\n initializeResponse.paymentForm.errors,\n ),\n );\n }\n\n return initializeResponse;\n })\n .catch((error: Error) => {\n if (error instanceof HttpError) {\n const httpErrorData = error.getHttpErrorData();\n this.nextActionService.emitFlowUpdates(\n this.serverErrorActionCreator.getActionData({\n status: httpErrorData.response.status,\n message: error.message,\n }),\n );\n }\n\n throw new ResponseError(error.message);\n });\n }\n\n private setCreditCardEncryptKey(paymentForm: PaymentForm): void {\n const publicKeyField: Field | undefined = paymentForm.fields.find(\n (field: Field) => field.name === 'public_key',\n );\n\n if (!publicKeyField) {\n return;\n }\n\n this.encryptCreditCardService.setPublicKey(atob(publicKeyField.value));\n }\n}\n","export abstract class XpsApiPartRequest {\n [fieldName: string]: unknown;\n\n protected addXpsParameters(parameters: { [key: string]: unknown }): void {\n for (const key in parameters) {\n this[`xps_${key}`] = parameters[key];\n }\n }\n\n protected addParameters(parameters: { [key: string]: unknown }): void {\n for (const key in parameters) {\n this[key] = parameters[key];\n }\n }\n}\n","import { AppError } from './app-error.class';\n\nexport class TokenError extends AppError {\n public constructor() {\n super('XPS API needs token.');\n }\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { AbstractControl, UntypedFormGroup } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { XpsApiPartRequest } from '../../../xps-api/xps-api-part-request.abstract';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\nimport { FieldNames } from '../../../field-names.enum';\n\nexport class SubmitRequest extends XpsApiPartRequest {\n public readonly access_token: string;\n public readonly xps_dfp_hash?: string;\n\n public constructor(parameters: {\n token: string | null;\n fields: Field[];\n form: UntypedFormGroup;\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n dfpHash: string | null;\n [key: string]: unknown;\n }) {\n super();\n\n const { token, fields, form, dfpHash, ...restParameters } = parameters;\n\n if (token === null) {\n throw new TokenError();\n }\n\n this.addParameters(restParameters);\n\n this.access_token = token;\n\n if (dfpHash) {\n this.xps_dfp_hash = dfpHash;\n }\n\n this.addXpsParameters(this.getFieldsValues(fields, form));\n }\n\n private getFieldsValues(\n fields: Field[],\n form: UntypedFormGroup,\n ): { [key: string]: unknown } {\n const fieldValues = fields.reduce(\n (xpsParams: { [key: string]: string }, field: Field) => {\n const formControl: AbstractControl | null = form.get(field.name);\n\n xpsParams[field.name] = formControl ? formControl.value : field?.value;\n\n return xpsParams;\n },\n {},\n );\n\n return this.splitCreditCardExpiration(fieldValues);\n }\n\n private splitCreditCardExpiration(fieldsValues: { [key: string]: unknown }): {\n [key: string]: unknown;\n } {\n const creditCardExpiration: string = fieldsValues[\n FieldNames.cardExpire\n ] as string;\n\n if (creditCardExpiration) {\n const [month, year] = creditCardExpiration.split('/');\n fieldsValues['card_month'] = month;\n fieldsValues['card_year'] = year;\n }\n\n return fieldsValues;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SubmitRequest } from './submit-request.class';\n\nexport type SubmitRequestParameters = ConstructorParameters<\n typeof SubmitRequest\n>;\n\nexport type SubmitRequestFactory = (\n ...args: SubmitRequestParameters\n) => SubmitRequest;\n\nexport const submitRequestFactoryToken: InjectionToken<SubmitRequestFactory> =\n new InjectionToken<SubmitRequestFactory>('SubmitRequest');\n\nexport const submitRequestFactoryProvider: ValueProvider = {\n provide: submitRequestFactoryToken,\n useValue: (...args: SubmitRequestParameters) => new SubmitRequest(...args),\n};\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SubmitResponse } from './submit-response.class';\n\nexport type SubmitResponseParameters = ConstructorParameters<\n typeof SubmitResponse\n>;\n\nexport type SubmitResponseFactory = (\n ...args: SubmitResponseParameters\n) => SubmitResponse;\n\nexport const submitResponseFactoryToken: InjectionToken<SubmitResponseFactory> =\n new InjectionToken<SubmitResponseFactory>('SubmitResponse');\n\nexport const submitResponseFactoryProvider: ValueProvider = {\n provide: submitResponseFactoryToken,\n useValue: (...args: SubmitResponseParameters) => new SubmitResponse(...args),\n};\n","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport type XsollaAntifraudFingerprint from '@xsolla/antifraud-fingerprint';\nimport { Injectable } from '@angular/core';\nimport { SettingsService } from '../settings/settings.service';\nimport { Hash } from './hash.type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DeviceFingerPrintService {\n private hash!: Promise<string>;\n private antifraudFingerprintLibrary!: Promise<\n typeof XsollaAntifraudFingerprint\n >;\n\n public constructor(private readonly settingsService: SettingsService) {}\n\n public init(): void {\n if (!this.settingsService.isInitialized) {\n return;\n }\n this.antifraudFingerprintLibrary = this.loadAntifraudFingerprintLibrary();\n this.hash = this.buildHash();\n }\n\n public async getHash(): Promise<string> {\n return this.hash;\n }\n\n private async loadAntifraudFingerprintLibrary(): Promise<\n typeof XsollaAntifraudFingerprint\n > {\n const library = await import('@xsolla/antifraud-fingerprint');\n\n return library.AntifraudFingerprint as typeof XsollaAntifraudFingerprint;\n }\n\n private async buildHash(): Promise<string> {\n const hash: Hash = await this.generate();\n return JSON.stringify(hash);\n }\n\n private async generate(): Promise<Hash | null> {\n const fingerprint = await this.makeAntifraudFingerprint();\n if (!fingerprint) {\n return null;\n }\n\n await fingerprint.dispatch().catch((err) => console.log(err));\n\n const afsHash = await fingerprint.hash();\n\n return { '301': afsHash };\n }\n\n private async makeAntifraudFingerprint(): Promise<XsollaAntifraudFingerprint | null> {\n if (!this.settingsService.token) {\n return null;\n }\n\n const antifraudFingerprint: typeof XsollaAntifraudFingerprint =\n await this.antifraudFingerprintLibrary;\n\n try {\n return new antifraudFingerprint({\n api: {\n url: 'https://afs.xsolla.com/dfp/api/v1/',\n token: this.settingsService.token,\n timeout: 3000,\n },\n retry: {\n num: 1,\n timeout: 500,\n },\n });\n } catch (error: unknown) {\n return null;\n }\n }\n}\n","import { Field } from '../../field.interface';\nimport { Inject, Injectable } from '@angular/core';\nimport {\n SubmitRequestFactory,\n submitRequestFactoryToken,\n} from './request/submit-request.token';\nimport {\n SubmitResponseFactory,\n submitResponseFactoryToken,\n} from './response/submit-response.token';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { SubmitResponse } from './response/submit-response.class';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { DeviceFingerPrintService } from '../../../device-finger-print/device-finger-print.service';\nimport { ResponseError } from '../../../exceptions-handling/errors/response-error.class';\nimport { XpsResponse } from '../../xps-response.interface';\nimport { XpsApiService } from '../../xps-api/xps-api.service';\nimport { EncryptCreditCardService } from '../../../encrypt-credit-card/encrypt-credit-card.service';\nimport { SubmitRequest } from './request/submit-request.class';\nimport { XpsResponseErrorsMappingService } from '../../../errors-mapping/xps-response-errors-mapping.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { PaymentConfiguration } from '../../payment-configuration.interface';\nimport { PaymentSettingsService } from '../../payment-settings/payment-settings.service';\nimport { NextActionService } from '../../actions/next-action.service';\nimport { ServerErrorActionCreator } from '../../actions/server-error/server-error.action.class';\nimport { HttpError } from '../../../exceptions-handling/errors/http-error.class';\n\n@Injectable({ providedIn: 'root' })\nexport class SubmitService {\n public constructor(\n @Inject(submitRequestFactoryToken)\n private readonly requestFactory: SubmitRequestFactory,\n @Inject(submitResponseFactoryToken)\n private readonly responseFactory: SubmitResponseFactory,\n private readonly settingsService: SettingsService,\n private readonly deviceFingerPrintService: DeviceFingerPrintService,\n private readonly xpsApiService: XpsApiService,\n private readonly xpsResponseErrorsMappingService: XpsResponseErrorsMappingService,\n private readonly encryptCreditCardService: EncryptCreditCardService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly paymentSettingsService: PaymentSettingsService,\n private readonly nextActionService: NextActionService,\n private readonly serverErrorActionCreator: ServerErrorActionCreator,\n ) {}\n\n // NB: Never add 'async' statement for this method!\n // 'Async' statement wraps current promise into another.\n // In this way two promises become unequal, that can broke XPS API requests logic.\n\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n public request(\n fields: Field[],\n form: UntypedFormGroup,\n config: PaymentConfiguration,\n ): Promise<SubmitResponse> {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.submitRequest,\n userBehaviourEventTypes.manual,\n { value: config.paymentMethodId },\n );\n\n return (\n this.deviceFingerPrintService\n .getHash()\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n .then((dfpHash) => {\n const paymentSettingsParams =\n this.paymentSettingsService.getPaymentSettingsParams(config);\n\n const requestParams = this.requestFactory({\n token: this.settingsService.token,\n fields,\n form,\n dfpHash,\n ...paymentSettingsParams,\n });\n\n const encryptedRequest =\n this.encryptCreditCardService.encryptCreditCard<SubmitRequest>(\n requestParams,\n );\n\n return this.xpsApiService\n .directPaymentRequest(encryptedRequest)\n .then((xpsResponse: XpsResponse) => {\n const response =\n this.xpsResponseErrorsMappingService.mapErrors(xpsResponse);\n\n this.fillUserSession(xpsResponse);\n\n if (response.errors) {\n const logError = (error: {\n code: number;\n message: string;\n }): void => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.showErrorMessage,\n userBehaviourEventTypes.manual,\n { value: String(error.code), extraValue: error.message },\n );\n };\n\n response.errors.forEach(logError);\n }\n\n return this.responseFactory(response);\n })\n .catch((error: Error) => {\n if (error instanceof HttpError) {\n const httpErrorData = error.getHttpErrorData();\n this.nextActionService.emitFlowUpdates(\n this.serverErrorActionCreator.getActionData({\n status: httpErrorData.response.status,\n message: error.message,\n }),\n );\n }\n throw new ResponseError(error.message);\n });\n })\n );\n }\n\n private fillUserSession(xpsResponse: XpsResponse): void {\n this.userBehaviourAnalyticsService.fillUserSession({\n ...xpsResponse,\n fields: Object.keys(xpsResponse.form).map(\n (key: string): Field => (xpsResponse as XpsResponse).form[key],\n ),\n });\n }\n}\n","import { Observable, Subject } from 'rxjs';\n\nexport abstract class EmitDataService<Data> {\n public data$: Observable<Data>;\n\n private readonly dataSubject = new Subject<Data>();\n\n public constructor() {\n this.data$ = this.dataSubject.asObservable();\n }\n\n public emit(data: Data): void {\n this.dataSubject.next(data);\n }\n}\n","import { UntypedFormGroup } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { XpsApiPartRequest } from '../../../xps-api/xps-api-part-request.abstract';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport class SyncRequest extends XpsApiPartRequest {\n public readonly access_token: string;\n public readonly xps_fix_command = 'calculate';\n\n public constructor({\n token,\n changedField,\n fields,\n form,\n ...parameters\n }: {\n token: string;\n changedField: Field;\n fields: Field[];\n form: UntypedFormGroup;\n [key: string]: unknown;\n }) {\n super();\n\n this.access_token = token;\n\n const fieldsValues = this.getFieldsValues(changedField, fields, form);\n\n this.addParameters(parameters);\n\n this.addXpsParameters({\n ...fieldsValues,\n change_element: changedField.name,\n fix_command:\n changedField.javascript?.change?.staticParams?.fix_command ??\n this.xps_fix_command,\n });\n }\n\n private getFieldsValues(\n changedField: Field,\n fields: Field[],\n form: UntypedFormGroup,\n ): { [key: string]: unknown } | undefined {\n const fieldsMap = this.getFieldsMap(fields);\n return changedField?.javascript?.change.params.reduce(\n (xpsParams: { [key: string]: string }, fieldName: string) => {\n const formControl = form.get(fieldName);\n const field: Field | undefined = fieldsMap.get(fieldName);\n\n if (formControl || field) {\n xpsParams[fieldName] = formControl?.value ?? field?.value;\n }\n\n return xpsParams;\n },\n {},\n );\n }\n\n private getFieldsMap(fields: Field[]): Map<string, Field> {\n const map = new Map<string, Field>();\n fields.forEach((field) => map.set(field.name, field));\n return map;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SyncRequest } from './sync-request.class';\n\nexport type SyncRequestParameters = ConstructorParameters<typeof SyncRequest>;\n\nexport type SyncRequestFactory = (\n ...args: SyncRequestParameters\n) => SyncRequest;\n\nexport const syncRequestFactoryToken: InjectionToken<SyncRequestFactory> =\n new InjectionToken<SyncRequestFactory>('SyncRequest');\n\nexport const syncRequestFactoryProvider: ValueProvider = {\n provide: syncRequestFactoryToken,\n useValue: (...args: SyncRequestParameters) => new SyncRequest(...args),\n};\n","import { ValidationErrors } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { XpsResponse } from '../../../xps-response.interface';\n\nexport class SyncResponse {\n public readonly error: ValidationErrors | null = null;\n public readonly fields: Field[];\n public readonly parameters: XpsResponse;\n\n public constructor(changedField: Field, response: XpsResponse) {\n const fieldError = response?.errors?.find(\n (error) => error.element_name === changedField.name,\n );\n\n if (fieldError) {\n this.error = {\n asyncError: {\n code: fieldError.code,\n message: fieldError.message,\n },\n };\n }\n\n this.fields = Object.keys(response.form).map(\n (key: string): Field => response.form[key],\n );\n\n this.parameters = response;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SyncResponse } from './sync-response.class';\n\nexport type SyncResponseParameters = ConstructorParameters<typeof SyncResponse>;\n\nexport type SyncResponseFactory = (\n ...args: SyncResponseParameters\n) => SyncResponse;\n\nexport const syncResponseFactoryToken: InjectionToken<SyncResponseFactory> =\n new InjectionToken<SyncResponseFactory>('SyncResponse');\n\nexport const syncResponseFactoryProvider: ValueProvider = {\n provide: syncResponseFactoryToken,\n useValue: (...args: SyncResponseParameters) => new SyncResponse(...args),\n};\n","import { Inject, Injectable } from '@angular/core';\nimport {\n AbstractControl,\n UntypedFormGroup,\n ValidationErrors,\n} from '@angular/forms';\nimport { Observable, Subject } from 'rxjs';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { EmitDataService } from '../../emit-data.service.abstract';\nimport { Field } from '../../field.interface';\nimport { XpsResponse } from '../../xps-response.interface';\nimport { FieldSyncState } from './field-sync-state.interface';\nimport {\n SyncRequestFactory,\n syncRequestFactoryToken,\n} from './request/sync-request.token';\nimport { SyncResponse } from './response/sync-response.class';\nimport {\n SyncResponseFactory,\n syncResponseFactoryToken,\n} from './response/sync-response.token';\nimport { NextActionService } from '../../actions/next-action.service';\nimport { ShowErrorsActionCreator } from '../../actions/show-errors/show-errors.action.class';\nimport { XpsApiService } from '../../xps-api/xps-api.service';\nimport { FieldAsyncValidation } from './field-async-validation.interface';\nimport { EncryptCreditCardService } from '../../../encrypt-credit-card/encrypt-credit-card.service';\nimport { SyncRequest } from './request/sync-request.class';\nimport { XpsResponseErrorsMappingService } from '../../../errors-mapping/xps-response-errors-mapping.service';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { PaymentConfiguration } from '../../payment-configuration.interface';\nimport { PaymentSettingsService } from '../../payment-settings/payment-settings.service';\nimport { SessionService } from '../../../session/session.service';\nimport { HttpError } from '../../../exceptions-handling/errors/http-error.class';\nimport { ServerErrorActionCreator } from '../../actions/server-error/server-error.action.class';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SyncService extends EmitDataService<XpsResponse> {\n private prevFieldSyncStates: { [fieldName: string]: FieldSyncState } = {};\n private form: UntypedFormGroup = new UntypedFormGroup({});\n private paymentConfiguration: PaymentConfiguration | null = null;\n private fields: Field[] = [];\n private fieldSyncTimers: { [fieldName: string]: number } = {};\n private readonly fieldAsyncValidation = new Subject<FieldAsyncValidation>();\n\n public constructor(\n @Inject(syncRequestFactoryToken)\n private readonly requestFactory: SyncRequestFactory,\n @Inject(syncResponseFactoryToken)\n private readonly responseFactory: SyncResponseFactory,\n private readonly xpsApiService: XpsApiService,\n private readonly nextActionService: NextActionService,\n private readonly settingsService: SettingsService,\n private readonly xpsResponseErrorsMappingService: XpsResponseErrorsMappingService,\n private readonly encryptCreditCardService: EncryptCreditCardService,\n private readonly showErrorsActionCreator: ShowErrorsActionCreator,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly paymentSettingsService: PaymentSettingsService,\n private readonly sessionService: SessionService,\n private readonly serverErrorActionCreator: ServerErrorActionCreator,\n ) {\n super();\n }\n\n public get fieldAsyncValidation$(): Observable<FieldAsyncValidation> {\n return this.fieldAsyncValidation.asObservable();\n }\n\n public setup(\n form: UntypedFormGroup,\n fields: Field[],\n config: PaymentConfiguration,\n ): void {\n this.reset();\n\n this.form = form;\n this.fields = fields;\n this.paymentConfiguration = config;\n }\n\n public reset(): void {\n this.prevFieldSyncStates = {};\n this.form = new UntypedFormGroup({});\n this.fields = [];\n this.paymentConfiguration = null;\n }\n\n public async validate(\n field: Field,\n delay = Number('750'),\n ): Promise<ValidationErrors | null> {\n if (!this.isReadyField(field)) {\n return Promise.resolve(null);\n }\n\n const control = this.form.get(field.name);\n const value = control?.value;\n const prevFieldState = this.getPrevFieldSyncState(field);\n\n const isInitialValue = value === field.value && !prevFieldState;\n\n if (isInitialValue) {\n return Promise.resolve(null);\n }\n\n if (prevFieldState && value === prevFieldState.value) {\n return Promise.resolve(prevFieldState.result).then((response) => {\n return response?.error ?? null;\n });\n }\n\n const updateFieldState = async (): Promise<\n string | ValidationErrors | null\n > => {\n const requestPromise = this.request(field);\n\n this.setPrevFieldSyncState(field, value, requestPromise);\n\n return requestPromise.then((response: SyncResponse) => {\n this.fieldAsyncValidation.next({\n value,\n field,\n response,\n });\n\n return response.error ?? null;\n });\n };\n\n return new Promise((resolve) => {\n if (delay) {\n const timerId = setTimeout(() => {\n if (value !== control?.value) {\n return resolve(null);\n }\n\n void updateFieldState().then(\n (errors: ValidationErrors | null | string) =>\n resolve(errors as ValidationErrors),\n );\n }, delay);\n\n this.resetFieldSyncTimer(field, Number(timerId));\n } else {\n void updateFieldState().then(\n (errors: ValidationErrors | null | string) =>\n resolve(errors as ValidationErrors),\n );\n }\n });\n }\n\n public async forceValidate(field: Field): Promise<SyncResponse | null> {\n const control: AbstractControl | null = this.form.get(field.name);\n const value = control?.value;\n\n const isHaveField = this.fields.some(\n (savedFields) => savedFields.name === field.name,\n );\n\n if (!isHaveField) {\n this.fields.push(field);\n }\n\n return this.request(field).then((syncResponse) => {\n this.setPrevFieldSyncState(field, value, Promise.resolve(syncResponse));\n this.fieldAsyncValidation.next({\n value,\n field,\n response: syncResponse,\n });\n\n return syncResponse;\n });\n }\n\n public removeField(fieldName: string): void {\n this.fields = this.fields.filter((field) => field.name !== fieldName);\n }\n\n public getSyncValidationErrors(field: Field): ValidationErrors | null {\n const control = this.form.get(field.name);\n return control?.errors ?? null;\n }\n\n public async request(\n field: Field,\n fields?: Field[],\n form?: UntypedFormGroup,\n ): Promise<SyncResponse> {\n const paymentSettingsParams =\n this.paymentSettingsService.getPaymentSettingsParams(\n this.paymentConfiguration,\n );\n\n const paramsForRequestFactory: {\n token: string;\n changedField: Field;\n fields: Field[];\n form: UntypedFormGroup;\n [key: string]: unknown;\n } = {\n token: this.settingsService.token,\n changedField: field,\n fields: fields ?? this.fields,\n form: form ?? this.form,\n ...paymentSettingsParams,\n };\n\n if (this.settingsService.isGooglePayInstantFlowEnabled !== null) {\n paramsForRequestFactory.google_pay_instant_flow = this.settingsService\n .isGooglePayInstantFlowEnabled\n ? XpsBoolean.true\n : XpsBoolean.false;\n }\n\n const requestParams = this.requestFactory(paramsForRequestFactory);\n\n const encryptedRequest =\n this.encryptCreditCardService.encryptCreditCard<SyncRequest>(\n requestParams,\n );\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.syncRequest,\n userBehaviourEventTypes.manual,\n { extraValue: field?.name ?? '' },\n );\n\n return this.xpsApiService\n .directPaymentRequest(encryptedRequest)\n .then((xpsResponse: XpsResponse) => {\n const response =\n this.xpsResponseErrorsMappingService.mapErrors(xpsResponse);\n\n this.sessionService.set('cardNumberCountry', response.cardBinCountry);\n\n this.emitFormErrors(response);\n this.emit(response);\n return this.responseFactory(field, response);\n })\n .catch((error: Error) => {\n if (error instanceof HttpError) {\n const httpErrorData = error.getHttpErrorData();\n this.nextActionService.emitFlowUpdates(\n this.serverErrorActionCreator.getActionData({\n status: httpErrorData.response.status,\n message: error.message,\n }),\n );\n }\n throw error;\n });\n }\n\n private isReadyField(field: Field): boolean {\n const isSyncEnabled = !!field.javascript?.change;\n const isExistsInForm = !!this.form?.get(field.name);\n\n return isSyncEnabled && isExistsInForm;\n }\n\n private getPrevFieldSyncState(field: Field): FieldSyncState {\n return this.prevFieldSyncStates[field.name];\n }\n\n private setPrevFieldSyncState(\n field: Field,\n value: unknown,\n result: Promise<SyncResponse>,\n ): void {\n this.prevFieldSyncStates[field.name] = { value, result };\n }\n\n private emitFormErrors(response: XpsResponse): void {\n if (response.errors) {\n const logError = (error: { code: number; message: string }): void => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.showErrorMessage,\n userBehaviourEventTypes.manual,\n { value: String(error.code), extraValue: error.message },\n );\n };\n\n response.errors.forEach(logError);\n }\n\n const formErrors = response.errors?.filter((error) => !error.element_name);\n\n if (formErrors?.length) {\n this.nextActionService.emitFlowUpdates(\n this.showErrorsActionCreator.getActionData(formErrors),\n );\n }\n }\n\n private resetFieldSyncTimer(field: Field, timerId: number): void {\n const prevTimerId: number = this.fieldSyncTimers[field.name];\n\n if (prevTimerId) {\n clearTimeout(prevTimerId);\n }\n\n this.fieldSyncTimers[field.name] = timerId;\n }\n}\n","export function isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { isObject } from '../../../type-guards/is-object.function';\nimport { ValidationError as ConvertedValidationError } from './validation-error.interface';\nimport { ValidationErrors as ConvertedValidationErrors } from './validation-errors.interface';\nimport { ValidatorFn as ConvertedValidatorFn } from './validator-fn.type';\nimport { ValidationErrorParams } from './validation-error-params.interface';\n\nexport function convert(\n validator: ValidatorFn,\n message: string,\n params?: ValidationErrorParams,\n): ConvertedValidatorFn {\n return (control: AbstractControl): ConvertedValidationErrors | null => {\n const errors: ValidationErrors | null = validator(control);\n if (!errors) return null;\n\n const firstErrorKey: string = Object.keys(errors)[0];\n const firstError: ConvertedValidationError = errors[firstErrorKey];\n const error = isObject(firstError) ? firstError : {};\n\n error.message = message;\n error.params = params;\n\n errors[firstErrorKey] = error;\n\n return errors as ConvertedValidationErrors;\n };\n}\n","import { Validators } from '@angular/forms';\nimport { convert } from '../convert.function';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nconst emailRegexp =\n /^[^\\s@]+@([a-zA-Z0-9\\u0080-\\uFFFF-]+\\.)+[a-zA-Z0-9\\u0080-\\uFFFF-]{2,}$/iu;\n\nexport function convertedEmailValidator(): ValidatorFn {\n const message = TranslateHelper.t(\n 'errors.validation.email-pattern',\n 'Enter a valid email',\n );\n\n return convert(Validators.pattern(emailRegexp), message);\n}\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { convert } from '../convert.function';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport function convertedRequiredValidator(): ValidatorFn {\n return convert(\n Validators.required,\n TranslateHelper.t('errors.validation.required', 'Required'),\n );\n}\n","import { UntypedFormControl, Validators } from '@angular/forms';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\nimport { Field } from '../../field.interface';\nimport { SyncService } from '../../requests/sync/sync.service';\nimport { CommonControlConfig } from '../common-control-config.interface';\nimport { ControlConfig } from '../controls/control-config';\nimport { FormState } from '../form-state.interface';\nimport { convert } from '../validators/convert.function';\nimport { convertedRequiredValidator } from '../validators/required/required.validator';\nimport { ValidatorFn } from '../validators/validator-fn.type';\nimport { AsyncValidatorFn } from '../validators/async-validator-fn.type';\n\nexport abstract class Converter {\n protected constructor(protected syncService: SyncService) {}\n\n public convertToConfig(field: Field, formState?: FormState): ControlConfig {\n const config = this.createControlConfig(field, formState);\n\n if (formState?.disabled) {\n config.disabled = true;\n }\n\n if (field.value) {\n config.initialValue = field.value;\n }\n\n return config;\n }\n\n public convertToFormControl(field: Field): UntypedFormControl {\n return new UntypedFormControl(\n this.getValue(field),\n this.getValidators(field),\n this.getAsyncValidators(field),\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getValidators(field: Field, formState?: FormState): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n\n if (field.isMandatory === XpsBoolean.true) {\n validators.push(convertedRequiredValidator());\n }\n\n if (field.regex) {\n const match = /^\\/(.*)\\/([gim]*)$/.exec(field.regex);\n\n if (match) {\n const pattern = new RegExp(match[1], match[2]);\n const errorMessage = field.validation_error_msg\n ? field.validation_error_msg\n : 'Enter valid data';\n validators.push(\n convert(Validators.pattern(pattern), errorMessage, {\n defaultMessage: field.validation_error_msg,\n }),\n );\n }\n }\n\n return validators;\n }\n\n public getAsyncValidators(\n field: Field,\n ): AsyncValidatorFn | AsyncValidatorFn[] | null {\n return async () => this.syncService.validate(field);\n }\n\n public createDefaultControlConfig<T extends { [key: string]: unknown }>(\n controlConfigClass: new () => T,\n field: Field,\n ): T {\n const config = new controlConfigClass();\n\n this.copyCommonOptions(config, field);\n\n return config;\n }\n\n public getValue(field: Field): string {\n return field.value;\n }\n\n protected abstract createControlConfig(\n field: Field,\n formState?: FormState,\n ): ControlConfig;\n\n protected getDataType(): string {\n return 'text';\n }\n\n protected getAutocomplete(): string {\n return 'off';\n }\n\n protected shouldHideUserInput(): boolean {\n return false;\n }\n\n private getCommonControlConfig(field: Field): CommonControlConfig {\n return {\n name: field.name,\n title: field.title,\n labelHint: field.label_hint,\n dataType: this.getDataType(),\n readonly: field.isReadonly === XpsBoolean.true,\n placeholder: field.example,\n autocomplete: this.getAutocomplete(),\n };\n }\n\n private copyCommonOptions<Target extends { [key: string]: unknown }>(\n target: Target,\n field: Field,\n ): void {\n const commonControlConfig = this.getCommonControlConfig(field);\n\n Object.keys(commonControlConfig).forEach((sourceKey: string) => {\n if (!(sourceKey in target)) {\n (target as { [key: string]: unknown })[sourceKey] = (\n commonControlConfig as unknown as { [key: string]: unknown }\n )[sourceKey];\n }\n });\n }\n}\n","import { SafeHtml } from '@angular/platform-browser';\nimport { ControlType } from './control-type.type';\n\nexport class ControlConfig {\n [option: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n public controlType!: ControlType | string;\n public name!: string;\n public title?: string | null | SafeHtml;\n public shouldHideUserInput?: boolean | null = false;\n}\n","import { SafeHtml } from '@angular/platform-browser';\nimport { ControlConfig } from '../../controls/control-config';\n\nexport class EmailControlConfig extends ControlConfig {\n public controlType = 'email';\n public dataType = 'email';\n public maxLength?: number;\n public placeholder?: string | SafeHtml | null;\n public autocomplete?: string;\n public icon = 'mail';\n public description?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { convertedEmailValidator } from '../../validators/email/email-validator';\nimport { ValidatorFn } from '../../validators/validator-fn.type';\nimport { Converter } from '../converter.abstract';\nimport { EmailControlConfig } from './email-control.config';\n\n@Injectable()\nexport class EmailConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super.getValidators(field).concat([convertedEmailValidator()]);\n }\n\n protected createControlConfig(field: Field): EmailControlConfig {\n const config = this.createDefaultControlConfig(EmailControlConfig, field);\n\n config.autocomplete = 'email';\n config.icon = 'mail';\n\n return config;\n }\n\n protected getDataType(): string {\n return 'email';\n }\n}\n","import { ControlConfig } from './control-config';\n\nexport class TextControlConfig extends ControlConfig {\n public controlType = 'text';\n public dataType?: string;\n public maxLength?: number;\n public placeholder?: string;\n public autocomplete?: string;\n public icon?: string;\n public description?: string;\n public inputMode?: string;\n}\n","import { AbstractControl } from '@angular/forms';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport const restrictedValueValidator = (\n restrictedValue: unknown,\n): ValidatorFn => {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n return value !== restrictedValue\n ? null\n : {\n valueAllowed: {\n message: TranslateHelper.t(\n 'errors.validation.restrictedValue',\n 'This value is not allowed',\n ),\n params: { restrictedValue },\n },\n };\n };\n};\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { CountryService } from '../../../../country/country.service';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { convert } from '../../validators/convert.function';\nimport { restrictedValueValidator } from '../../validators/restricted-value/restricted-value.validator';\nimport { Converter } from '../converter.abstract';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\nimport { SessionService } from '../../../../session/session.service';\n\n@Injectable()\nexport class ZipConverter extends Converter {\n private readonly minLength = 3;\n private readonly maxLength = 10;\n private readonly usCountryLength = 5;\n\n public constructor(\n syncService: SyncService,\n private readonly countryService: CountryService,\n private readonly sessionService: SessionService,\n ) {\n super(syncService);\n }\n\n private get isUsCountry(): boolean {\n const currentCountry = this.countryService.getCountry().toUpperCase();\n const cardNumberCountry = this.sessionService.get('cardNumberCountry');\n\n return (cardNumberCountry ?? currentCountry) === 'US';\n }\n\n private get isCanadaCountry(): boolean {\n const currentCountry = this.countryService.getCountry().toUpperCase();\n const cardNumberCountry = this.sessionService.get('cardNumberCountry');\n\n return (cardNumberCountry ?? currentCountry) === 'CA';\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n const minLength = this.isUsCountry ? this.usCountryLength : this.minLength;\n const maxLength = this.isUsCountry ? this.usCountryLength : this.maxLength;\n const validators: ValidatorFn[] = super\n .getValidators(field)\n .concat([\n convert(\n Validators.minLength(minLength),\n TranslateHelper.t(\n 'errors.validation.min-length',\n `Enter at least ${minLength} characters`,\n { minLength },\n ),\n ),\n\n convert(\n Validators.maxLength(maxLength),\n TranslateHelper.t(\n 'errors.validation.max-length',\n `Enter no more than ${maxLength} characters`,\n { maxLength },\n ),\n ),\n ]);\n\n if (this.isUsCountry) {\n validators.push(\n convert(\n restrictedValueValidator('00000'),\n TranslateHelper.t(\n 'errors.validation.zip-pattern',\n 'Enter a valid ZIP code',\n ),\n ),\n );\n }\n\n if (this.isCanadaCountry) {\n validators.push(\n convert(\n Validators.pattern(/^[A-Za-z0-9]{3}\\s?[A-Za-z0-9]{0,3}$/),\n TranslateHelper.t(\n 'errors.validation.zip-pattern-non-us',\n 'Enter a valid postal code',\n ),\n ),\n );\n }\n\n return validators;\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n config.icon = 'location';\n config.placeholder = TranslateHelper.t(\n 'zip.converter.placeholder',\n 'ZIP code',\n );\n\n if (this.isUsCountry) {\n config.maskConfig = {\n mask: new Array(this.usCountryLength).fill('9').join(''),\n guide: false,\n unmaskModelValue: true,\n showMask: true,\n };\n config.placeholder = TranslateHelper.t(\n 'zip.converter.placeholder',\n 'ZIP code',\n );\n config.inputMode = 'numeric';\n } else {\n config.maxLength = this.maxLength;\n config.placeholder = TranslateHelper.t(\n 'zip.converter.placeholder-non-us',\n 'Postal code',\n );\n }\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'postal-code';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","export function isEmptyInputValue(value: string | null | undefined): boolean {\n return value == null || value.length === 0;\n}\n","export function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n","import { isEmptyInputValue } from '../is-empty-input-value.function';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { isString } from '../../../../type-guards/is-string.function';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n/**\n * Checks number match Luhn algorithm.\n * Based on http://en.wikipedia.org/wiki/Luhn.\n */\nexport const luhnFormulaValidator: ValidatorFn = ({ value }) => {\n if (isEmptyInputValue(value) || !isString(value)) {\n return null;\n }\n\n const error: ValidationErrors = {\n rewritableError: {\n message: TranslateHelper.t(\n 'errors.validation.cardNumber',\n 'Enter a valid card number',\n ),\n },\n };\n\n if (/[^0-9 -]+/.test(value)) {\n // accept only spaces, digits and dashes\n return error;\n }\n\n let resultSum = 0;\n let digit = 0;\n let isEven = false;\n\n const modBase = 10;\n const digitRadix = 10;\n const maxNumber = 9;\n const digits = value.replace(/\\D/g, '');\n\n // Checks if number match Luhn algorithm\n // based on http://en.wikipedia.org/wiki/Luhn\n for (let index = digits.length - 1; index >= 0; index--) {\n const char = digits.charAt(index);\n digit = parseInt(char, digitRadix);\n\n if (isEven && (digit *= 2) > maxNumber) {\n digit -= maxNumber;\n }\n\n resultSum += digit;\n isEven = !isEven;\n }\n\n return resultSum % modBase === 0 ? null : error;\n};\n","import { SafeHtml } from '@angular/platform-browser';\nimport { ControlConfig } from '../control-config';\nimport { CreditCardTypes } from '../../../../credit-card/credit-card-types.enum';\n\nexport class CardNumberConfig extends ControlConfig {\n public controlType = 'card-number';\n public placeholder?: string | SafeHtml | null;\n public icon?: string;\n public availableCardTypes: CreditCardTypes[] = [];\n public activeCardType?: CreditCardTypes;\n public customError = '';\n}\n","import { Injectable } from '@angular/core';\nimport { ValidationErrors as ConvertedValidationErrors } from '../validation-errors.interface';\nimport { CreditCardService } from '../../../../credit-card/credit-card.service';\nimport { isString } from '../../../../type-guards/is-string.function';\nimport { isEmptyInputValue } from '../is-empty-input-value.function';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CreditCardMaxLengthValidator {\n public constructor(private readonly creditService: CreditCardService) {}\n\n public validate = (field: {\n value: string;\n }): ConvertedValidationErrors | null => {\n if (isEmptyInputValue(field.value) || !isString(field.value)) {\n return null;\n }\n\n const length = field.value.length;\n const cardType = this.creditService.getTypeByNumber(field.value);\n const { maxLength } = this.creditService.getCreditCardSettings(cardType);\n\n if (length <= maxLength) return null;\n\n return {\n rewritableError: {\n message: TranslateHelper.t(\n 'errors.validation.max-length',\n `Enter no more than ${maxLength} characters`,\n { maxLength },\n ),\n number: maxLength,\n params: {\n maxLength,\n },\n },\n };\n };\n}\n","import { isEmptyInputValue } from '../is-empty-input-value.function';\nimport { Injectable } from '@angular/core';\nimport { isString } from '../../../../type-guards/is-string.function';\nimport { CreditCardService } from '../../../../credit-card/credit-card.service';\nimport { ValidationErrors as ConvertedValidationErrors } from '../validation-errors.interface';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CreditCardMinLengthValidator {\n public constructor(private readonly creditService: CreditCardService) {}\n\n public validate = (field: {\n value: string;\n }): ConvertedValidationErrors | null => {\n if (isEmptyInputValue(field.value) || !isString(field.value)) {\n return null;\n }\n\n const length = field.value.length;\n const cardType = this.creditService.getTypeByNumber(field.value);\n const { minLength } = this.creditService.getCreditCardSettings(cardType);\n\n if (length >= minLength) return null;\n\n return {\n rewritableError: {\n message: TranslateHelper.t(\n 'errors.validation.min-length',\n `Enter at least ${minLength} characters`,\n { minLength },\n ),\n number: minLength,\n params: {\n minLength,\n },\n },\n };\n };\n}\n","import { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { CreditCardMinLengthValidator } from '../../validators/credit-card-length/credit-card-min-length.validator';\nimport { CreditCardMaxLengthValidator } from '../../validators/credit-card-length/credit-card-max-length.validator';\nimport { Field } from '../../../field.interface';\nimport { ValidatorFn } from '@angular/forms';\nimport { luhnFormulaValidator } from '../../validators/luhn-formula-validator/luhn-formula.validator';\nimport { FormState } from '../../form-state.interface';\nimport { CardNumberConfig } from '../../controls/card-number/card-number-control.config';\nimport { CreditCardTypes } from '../../../../credit-card/credit-card-types.enum';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CardNumberConverter extends Converter {\n public constructor(\n syncService: SyncService,\n private readonly maxLengthValidator: CreditCardMaxLengthValidator,\n private readonly minLengthValidator: CreditCardMinLengthValidator,\n ) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super\n .getValidators(field)\n .concat([\n luhnFormulaValidator,\n this.minLengthValidator.validate,\n this.maxLengthValidator.validate,\n ]);\n }\n\n protected createControlConfig(\n field: Field,\n formState: FormState,\n ): CardNumberConfig {\n const config = this.createDefaultControlConfig(CardNumberConfig, field);\n\n config.placeholder = config.title;\n\n config.availableCardTypes =\n (formState?.availableCardTypes as CreditCardTypes[]) ?? [];\n\n config.activeCardType = formState?.activeCardType as CreditCardTypes;\n\n config.customError = formState?.customError as string;\n config.disabled = formState?.disabled ?? false;\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'cc-number';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { FormState } from '../../form-state.interface';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { ValidationErrorParams } from '../validation-error-params.interface';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport const maxMonths = 12;\nexport const getMinMonth = (parsedYear: string): number => {\n let minMonth = 1;\n\n const year = parsedYear ? Number('20' + parsedYear) : null;\n const today = new Date();\n minMonth = year === today.getFullYear() ? today.getMonth() + 1 : 1;\n\n return minMonth;\n};\n\nconst sendErrMessage = (\n message: string,\n params: ValidationErrorParams,\n): ValidationErrors =>\n ({\n cardMonthExpiration: {\n message,\n params,\n },\n }) as ValidationErrors;\n\nexport function cardMonthValidator(formState?: FormState): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const { value } = control;\n\n if (typeof value !== 'string') return null;\n\n const minMonth = getMinMonth((formState?.cardYearValue as string) ?? null);\n\n const twoDigitsRegex = new RegExp(/^\\d{2}$/);\n const fieldCommonLength = 2;\n\n if (value.length !== fieldCommonLength) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-length',\n `Enter ${fieldCommonLength} characters`,\n { requiredLength: fieldCommonLength },\n ),\n {\n requiredLength: fieldCommonLength,\n },\n );\n }\n\n if (!twoDigitsRegex.test(value)) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-month-pattern',\n 'Enter a valid expiration month',\n ),\n {},\n );\n }\n\n if (Number(value) < minMonth) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-min-month',\n `Enter a month that includes or comes after ${minMonth}`,\n { minMonth },\n ),\n {\n minMonth,\n },\n );\n }\n\n if (Number(value) > maxMonths) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-max-month',\n `Enter a month that includes or comes before ${maxMonths}`,\n { maxMonth: maxMonths },\n ),\n {\n maxMonth: maxMonths,\n },\n );\n }\n\n return null;\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { ValidatorFn } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { FormState } from '../../form-state.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { cardMonthValidator } from '../../validators/card-month/card-month.validator';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CardMonthConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field, formState: FormState): ValidatorFn[] {\n return super.getValidators(field).concat([cardMonthValidator(formState)]);\n }\n\n protected createControlConfig(\n field: Field,\n formState: FormState,\n ): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: '99',\n guide: false,\n };\n config.inputMode = 'numeric';\n\n config.placeholder = TranslateHelper.t(\n 'card-month.converter.placeholder',\n 'MM',\n );\n\n config.title = TranslateHelper.t('card-month.converter.title', 'MM');\n\n config.disabled = formState?.disabled ?? false;\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'cc-exp-month';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { FormState } from '../../form-state.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { FieldNames } from '../../../field-names.enum';\nimport { CvvFormState } from './cvv-form-state.interface';\nimport { convert } from '../../validators/convert.function';\nimport { CreditCardTypes } from '../../../../credit-card/credit-card-types.enum';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CvvConverter extends Converter {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n private maxFieldLength = 4;\n\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field, formState?: CvvFormState): ValidatorFn[] {\n const validators: ValidatorFn[] = super.getValidators(field);\n const activeCardType = formState ? formState.activeCardType : null;\n const getPatternValidator = (pattern: RegExp): ValidatorFn =>\n convert(\n Validators.pattern(pattern),\n TranslateHelper.t(\n 'errors.validation.cvv-pattern',\n 'Enter a valid CVV/CVC',\n ),\n {},\n );\n\n switch (activeCardType) {\n case CreditCardTypes.AMERICAN_EXPRESS: {\n this.maxFieldLength = 4;\n validators.push(getPatternValidator(/^\\d{4}$/));\n break;\n }\n case CreditCardTypes.MAESTRO: {\n this.maxFieldLength = 4;\n validators.push(getPatternValidator(/^(?:\\d{3,4})?$/));\n break;\n }\n default: {\n this.maxFieldLength = 3;\n validators.push(getPatternValidator(/^\\d{3}$/));\n }\n }\n\n return validators;\n }\n\n protected createControlConfig(\n field: Field,\n formState: FormState,\n ): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: new Array(this.maxFieldLength).fill('9').join(''),\n unmaskModelValue: false,\n guide: false,\n };\n\n config.tooltip = {\n text: TranslateHelper.t(\n 'cvv.converter.tooltip.text',\n 'Where to find your CVV/CVC',\n ),\n image: 'cvv',\n parentField: FieldNames.cvv,\n position: 'input',\n analyticsAction: 'show-cvv-tooltip',\n };\n\n config.placeholder = TranslateHelper.t(\n 'cvv.converter.placeholder',\n 'CVV2/CVC2',\n );\n\n config.inputMode = 'numeric';\n config.shouldHideUserInput = this.shouldHideUserInput();\n config.disabled = formState?.disabled ?? false;\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'cc-csc';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n\n protected shouldHideUserInput(): boolean {\n return true;\n }\n}\n","import { ValidatorFn, ValidationErrors } from '@angular/forms';\nimport { isEmptyInputValue } from '../is-empty-input-value.function';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport const birthdateValidator: ValidatorFn = ({ value }) => {\n if (isEmptyInputValue(value) || typeof value !== 'string') {\n return null;\n }\n\n const error: ValidationErrors = {\n invalidBirthDate: {\n message: TranslateHelper.t(\n 'errors.validation.birthDate',\n 'Enter a valid birth date',\n ),\n params: {},\n },\n };\n const dateArr = value.split('/');\n const datePartsCount = 3;\n const dayIndex = 0;\n const monthIndex = 1;\n const yearIndex = 2;\n const maxMonths = 12;\n const maxDays = 31;\n const minAge = 16;\n const maxAge = 120;\n\n if (dateArr.length < datePartsCount) {\n return null;\n }\n\n if (+dateArr[monthIndex] > maxMonths || +dateArr[dayIndex] > maxDays) {\n return error;\n }\n\n const currentDate = new Date(\n +dateArr[yearIndex],\n +dateArr[monthIndex],\n +dateArr[dayIndex],\n );\n const nowDate = new Date();\n\n if (\n isNaN(currentDate.getFullYear()) ||\n nowDate.getFullYear() - currentDate.getFullYear() <= minAge ||\n nowDate.getFullYear() - currentDate.getFullYear() > maxAge\n ) {\n return error;\n } else {\n return null;\n }\n};\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { convert } from '../../validators/convert.function';\nimport { Converter } from '../converter.abstract';\nimport { birthdateValidator } from '../../validators/birth-date/birth-date.validator';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class BirthDateConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super\n .getValidators(field)\n .concat([\n convert(\n Validators.pattern(/^[0-9]{1,2}\\/[0-9]{1,2}\\/[0-9]{4}$/),\n TranslateHelper.t(\n 'birth-date.converter.validation.pattern',\n 'Enter a valid birth date',\n ),\n ),\n birthdateValidator,\n ]);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: '99/99/9999',\n unmaskModelValue: false,\n guide: false,\n };\n\n config.placeholder = TranslateHelper.t(\n 'birth-date.converter.placeholder',\n 'DD/MM/YYYY',\n );\n\n config.inputMode = 'numeric';\n\n return config;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { Converter } from '../converter.abstract';\n\n@Injectable()\nexport class CardholderNameConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n return this.createDefaultControlConfig(TextControlConfig, field);\n }\n\n protected getAutocomplete(): string {\n return 'cc-name';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","export const cpfNameRegex =\n /^[a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ.'-]{2,50}(?: [a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ.'-]{2,50}){1,8}$/i; // tslint:disable-line\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { convert } from '../../validators/convert.function';\nimport { Converter } from '../converter.abstract';\nimport { cpfNameRegex } from './cpf-name-regex.variable';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CpfNameConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super\n .getValidators(field)\n .concat([\n convert(\n Validators.pattern(cpfNameRegex),\n TranslateHelper.t(\n 'cpf-name.converter.validation.pattern',\n 'Enter a valid name',\n ),\n {},\n ),\n ]);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.tooltip = {\n text: TranslateHelper.t(\n 'cpf-name.converter.tooltip.text',\n 'Where to find your name',\n ),\n image: 'cpf-name',\n };\n\n return config;\n }\n}\n","import { isEmptyInputValue } from '../is-empty-input-value.function';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { isString } from '../../../../type-guards/is-string.function';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nconst cpfLength = 11;\nconst firstCheckDigitPosition = 9;\nconst secondCheckDigitPosition = 10;\nconst maxCheckDigit = 10;\nconst repeatedDigitsRegex = /^(\\d)\\1+$/;\nconst allowedCharactersRegex = /[^0-9 .-]+/;\nconst moduloDivisor = 11;\n/**\n * Checks number match CPF validation algorithm.\n * Based on https://en.wikipedia.org/wiki/CPF_number\n */\nexport const cpfFormulaValidator: ValidatorFn = ({ value }) => {\n if (isEmptyInputValue(value) || !isString(value)) {\n return null;\n }\n\n const error: ValidationErrors = {\n rewritableError: {\n message: TranslateHelper.t(\n 'cpf-number.converter.validation.pattern',\n 'Enter a valid CPF number',\n ),\n },\n };\n\n if (allowedCharactersRegex.test(value)) {\n // accept only spaces, digits, dots and dashes\n return error;\n }\n\n // Remove non-numeric characters from CPF\n const cpf = value.replace(/\\D/g, '');\n\n // Check if CPF has 11 digits\n if (cpf.length !== cpfLength) {\n return error;\n }\n\n // Disallow CPFs with all same digits (e.g., \"11111111111\")\n if (repeatedDigitsRegex.test(cpf)) {\n return error;\n }\n\n function calculateCheckDigit(\n cpfNumber: string,\n checkDigitPosition: number,\n ): number {\n let sum = 0;\n for (let i = 0; i < checkDigitPosition; i++) {\n sum += parseInt(cpfNumber.charAt(i)) * (checkDigitPosition + 1 - i);\n }\n const checkDigit = (sum * maxCheckDigit) % moduloDivisor;\n return checkDigit >= maxCheckDigit ? 0 : checkDigit;\n }\n\n // Validate the check digits\n for (const position of [firstCheckDigitPosition, secondCheckDigitPosition]) {\n const checkDigit = calculateCheckDigit(cpf, position);\n if (checkDigit !== parseInt(cpf.charAt(position))) {\n return error;\n }\n }\n\n return null;\n};\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { cpfFormulaValidator } from '../../validators/cpf-formula-validator/cpf-formula.validator';\nimport { Converter } from '../converter.abstract';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CpfNumberConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super.getValidators(field).concat([cpfFormulaValidator]);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: '999.999.999-99',\n unmaskModelValue: true,\n guide: false,\n };\n\n config.inputMode = 'numeric';\n\n config.placeholder = TranslateHelper.t(\n 'cpf-number.converter.placeholder',\n '000.000.000-00',\n );\n\n config.tooltip = {\n text: TranslateHelper.t(\n 'cpf-number.converter.tooltip.text',\n 'Where to find your registration number',\n ),\n image: 'cpf-number',\n };\n\n return config;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { StreetNumberFormState } from './street-number-from-state.interface';\nimport { ValidatorFn } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { convert } from '../../validators/convert.function';\nimport { restrictedValueValidator } from '../../validators/restricted-value/restricted-value.validator';\nimport { Converter } from '../converter.abstract';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class StreetNumberConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(\n field: Field,\n formState?: StreetNumberFormState,\n ): ValidatorFn[] {\n const validators: ValidatorFn[] = super.getValidators(field);\n\n if (formState?.country === 'BL') {\n validators.push(\n convert(\n restrictedValueValidator('0'),\n TranslateHelper.t(\n 'errors.validation.building-number',\n 'Enter a valid building number',\n ),\n {},\n ),\n );\n }\n\n return validators;\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n return this.createDefaultControlConfig(TextControlConfig, field);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Field } from '../../../field.interface';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { Converter } from '../converter.abstract';\n\n@Injectable()\nexport class TextConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n return this.createDefaultControlConfig(TextControlConfig, field);\n }\n}\n","import { ControlConfig } from '../control-config';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\n\nexport class CheckboxControlConfig extends ControlConfig {\n public controlType = 'checkbox';\n public initValue!: XpsBoolean;\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { ValidatorFn } from '../../validators/validator-fn.type';\nimport { convert } from '../../validators/convert.function';\nimport { restrictedValueValidator } from '../../validators/restricted-value/restricted-value.validator';\nimport { CheckboxControlConfig } from '../../controls/checkbox/checkbox-control.config';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CheckboxConverter extends Converter {\n protected readonly checkedValue = XpsBoolean.true;\n protected readonly uncheckedValue = XpsBoolean.false;\n\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n\n if (field.isMandatory === this.checkedValue) {\n validators.push(\n convert(\n restrictedValueValidator(this.uncheckedValue),\n field.validation_error_msg ||\n TranslateHelper.t(\n 'checkbox.converter.validation.required',\n 'Required',\n ),\n ),\n );\n }\n\n return validators;\n }\n\n protected createControlConfig(field: Field): CheckboxControlConfig {\n const config = this.createDefaultControlConfig(\n CheckboxControlConfig,\n field,\n );\n\n config.placeholder = config.title;\n config.initValue = field.value as XpsBoolean;\n\n return config;\n }\n}\n","import { ControlConfig } from '../control-config';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { SearchSelectOption } from './search-select-option.interface';\nimport { SelectOption } from './select-option.interface';\n\nexport class SelectControlConfig extends ControlConfig {\n public controlType = 'search-select';\n public name!: string;\n public title?: string | SafeHtml;\n public options?: SelectOption[] | SearchSelectOption[];\n public initValue?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { SelectControlConfig } from '../../controls/search-select/select-control.config';\nimport { Field } from '../../../field.interface';\nimport { SelectOption } from '../../controls/search-select/select-option.interface';\n\n@Injectable()\nexport class SelectConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n protected createControlConfig(field: Field): SelectControlConfig {\n const config = this.createDefaultControlConfig(SelectControlConfig, field);\n config.options = field.options as SelectOption[];\n config.initValue = field.value;\n\n return config;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\n\n@Injectable()\nexport class PinConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n return this.createDefaultControlConfig(TextControlConfig, field);\n }\n}\n","import { RadioOption } from './radio-option.interface';\nimport { ControlConfig } from '../control-config';\n\nexport class RadioControlConfig extends ControlConfig {\n public controlType = 'radio';\n public options: RadioOption[] = [];\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { RadioControlConfig } from '../../controls/radio-control/radio-control.config';\nimport { RadioOption } from '../../controls/radio-control/radio-option.interface';\n\n@Injectable()\nexport class RadioGroupConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n protected createControlConfig(field: Field): RadioControlConfig {\n const config = this.createDefaultControlConfig(RadioControlConfig, field);\n\n config.options = field.options as RadioOption[];\n return config;\n }\n}\n","import { ValidatorFn } from '@angular/forms';\nimport { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\n\n@Injectable()\nexport class PricepointConverter extends Converter {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n private readonly maxFieldLength = 30;\n\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super.getValidators(field);\n }\n\n protected createControlConfig(field: Field): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: new Array(this.maxFieldLength).fill('9').join(``),\n unmaskModelValue: false,\n guide: false,\n };\n\n config.placeholder = field.title;\n config.inputMode = 'numeric';\n\n return config;\n }\n}\n","import { SafeHtml } from '@angular/platform-browser';\nimport { ControlConfig } from '../control-config';\n\nexport class CouponControlConfig extends ControlConfig {\n public controlType = 'coupon';\n public dataType?: string;\n public placeholder?: string | SafeHtml | null;\n public autocomplete?: string;\n}\n","import { Validators } from '@angular/forms';\nimport { convert } from '../convert.function';\nimport { ValidatorFn } from '../validator-fn.type';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport function couponValidator(message?: string): ValidatorFn {\n const defaultMessage = TranslateHelper.t(\n 'errors.validation.coupon-pattern',\n 'Enter a valid promo code',\n );\n return convert(\n Validators.pattern(/^[0-9a-z_-]+$/i),\n message || defaultMessage,\n );\n}\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn } from '@angular/forms';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { CouponControlConfig } from '../../controls/coupon/coupon-control.config';\nimport { couponValidator } from '../../validators/coupon/coupon-validator';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CouponConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(): ValidatorFn[] {\n return [couponValidator()];\n }\n\n protected createControlConfig(field: Field): CouponControlConfig {\n const config = this.createDefaultControlConfig(CouponControlConfig, field);\n\n config.placeholder = TranslateHelper.t(\n 'coupon.converter.placeholder',\n 'Enter promo code',\n );\n\n return config;\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { ValidationErrorParams } from '../validation-error-params.interface';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nconst sendErrMessage = (\n message: string,\n params: ValidationErrorParams,\n): ValidationErrors =>\n ({\n cardYearExpiration: {\n message,\n params,\n },\n }) as ValidationErrors;\n\nexport const getLastCharactersInYear = (\n str: string = new Date().getFullYear().toString(),\n): string => {\n // for getting last characters in year; need to check in future\n return str.slice(str.length - 2);\n};\n\n// Карта выдается максимум на 50 лет\nexport const maxYearsCount = 50;\n\nexport function cardYearValidator(\n control: AbstractControl,\n): ValidationErrors | null {\n const { value } = control;\n\n if (typeof value !== 'string') return null;\n\n const minYear = parseInt(getLastCharactersInYear(), 10);\n\n const twoDigitsRegex = new RegExp(/^\\d{2}$/);\n\n const fieldCommonLength = 2;\n\n if (value.length !== fieldCommonLength) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-length',\n `Enter ${fieldCommonLength} characters`,\n { requiredLength: fieldCommonLength },\n ),\n {\n requiredLength: fieldCommonLength,\n },\n );\n }\n\n if (!twoDigitsRegex.test(value)) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-year-pattern',\n 'Enter a valid expiration year',\n ),\n {},\n );\n }\n\n if (Number(value) < minYear) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-min-year',\n `Enter a year that includes or comes after ${minYear}`,\n { minYear },\n ),\n {\n minYear,\n },\n );\n }\n\n const maxValidYear = minYear + maxYearsCount;\n\n if (Number(value) > maxValidYear) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-max-year',\n `Enter a year that includes or comes before ${maxValidYear}`,\n { maxYear: maxValidYear },\n ),\n {\n maxYear: maxValidYear,\n },\n );\n }\n\n return null;\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { ValidatorFn } from '@angular/forms';\nimport { Field } from '../../../field.interface';\nimport { FormState } from '../../form-state.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { cardYearValidator } from '../../validators/card-year/card-year.validator';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\n@Injectable()\nexport class CardYearConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super.getValidators(field).concat([cardYearValidator]);\n }\n\n protected createControlConfig(\n field: Field,\n formState: FormState,\n ): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: '99',\n guide: false,\n };\n config.inputMode = 'numeric';\n\n config.placeholder = TranslateHelper.t(\n 'card-year.converter.placeholder',\n 'YY',\n );\n\n config.title = TranslateHelper.t('card-year.converter.title', 'YY');\n\n config.disabled = formState?.disabled ?? false;\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'cc-exp-year';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","import { Validators } from '@angular/forms';\nimport { ValidatorFn } from './validator-fn.type';\nimport { convert } from './convert.function';\nimport { TranslateHelper } from '../../../../shared/translate/translate.helper';\n\nexport function phoneValidator(): ValidatorFn {\n return convert(\n Validators.pattern(/^\\d*$/),\n TranslateHelper.t('errors.validation.phone-pattern', 'Enter a valid phone'),\n );\n}\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { convert } from './convert.function';\nimport { TranslateHelper } from '../../../../shared/translate/translate.helper';\n\nexport function minLengthValidator(minLength: number): ValidatorFn {\n return convert(\n Validators.minLength(minLength),\n TranslateHelper.t(\n 'errors.validation.min-length',\n `Enter at least ${minLength} characters`,\n { minLength },\n ),\n {\n minLength,\n },\n );\n}\n","import { Validators } from '@angular/forms';\nimport { ValidatorFn } from './validator-fn.type';\nimport { convert } from './convert.function';\nimport { TranslateHelper } from '../../../../shared/translate/translate.helper';\n\nexport function maxLengthValidator(maxLength: number): ValidatorFn {\n return convert(\n Validators.maxLength(maxLength),\n TranslateHelper.t(\n 'errors.validation.max-length',\n `Enter no more than ${maxLength} characters`,\n { maxLength },\n ),\n {\n maxLength,\n },\n );\n}\n","import { ControlConfig } from './control-config';\n\nexport class PhoneControlConfig extends ControlConfig {\n public controlType = 'phone';\n public placeholder?: string;\n public icon?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn } from '@angular/forms';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { phoneValidator } from '../../validators/phone-validator';\nimport { minLengthValidator } from '../../validators/min-length-validator';\nimport { maxLengthValidator } from '../../validators/max-length-validator';\nimport { PhoneControlConfig } from '../../controls/phone-control.config';\nimport { convertedRequiredValidator } from '../../validators/required/required.validator';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\n\n@Injectable()\nexport class PhoneConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n if (field.isMandatory === XpsBoolean.false) return [];\n\n const minLength = 10;\n const maxLength = 15;\n\n return super\n .getValidators(field)\n .concat([\n convertedRequiredValidator(),\n phoneValidator(),\n minLengthValidator(minLength),\n maxLengthValidator(maxLength),\n ]);\n }\n\n protected createControlConfig(field: Field): PhoneControlConfig {\n const config = this.createDefaultControlConfig(PhoneControlConfig, field);\n config.inputMode = 'numeric';\n\n return config;\n }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { ValidationErrors } from '../validation-errors.interface';\nimport { maxMonths } from '../../converters/card-expiration/card-expiration.converter';\nimport { ValidationErrorParams } from '../validation-error-params.interface';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport const getMinMonth = (parsedYear: string): number => {\n let minMonth = 1;\n\n if (parsedYear) {\n const year = parsedYear ? Number('20' + parsedYear) : null;\n const today = new Date();\n minMonth = year === today.getFullYear() ? today.getMonth() + 1 : 1;\n }\n\n return minMonth;\n};\n\nconst sendErrMessage = (\n message: string,\n params: ValidationErrorParams,\n): ValidationErrors =>\n ({\n rewritableError: {\n message,\n params,\n },\n }) as ValidationErrors;\n\nexport const getLastCharactersInYear = (\n str: string = new Date().getFullYear().toString(),\n): string => {\n // for getting last characters in year; need to check in future\n return str.slice(str.length - 2);\n};\n\nexport const sliceMmYy = (value: string): { month: string; year: string } => {\n const sliceIndex = 2;\n\n const month = value.slice(0, sliceIndex) as string;\n const year = value.slice(-sliceIndex) as string;\n\n return { month, year };\n};\n\nexport const maxYearsCount = 50;\n\nexport function cardExpValidator(\n control: AbstractControl,\n): ValidationErrors | null {\n const { value } = control;\n\n if (typeof value !== 'string') return null;\n\n const { month, year } = sliceMmYy(value);\n\n const minMonth = getMinMonth(year);\n const minYear = parseInt(getLastCharactersInYear(), 10);\n\n const twoDigitsRegex = new RegExp(/^\\d{2}$/);\n const fieldCommonLength = 4;\n\n const trickyFieldLength = fieldCommonLength + 1;\n\n if (value.length !== trickyFieldLength) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-length',\n `Enter ${fieldCommonLength} characters`,\n { requiredLength: fieldCommonLength },\n ),\n {\n requiredLength: fieldCommonLength,\n },\n );\n }\n\n if (!twoDigitsRegex.test(month)) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-month-pattern',\n 'Enter a valid expiration month',\n ),\n {},\n );\n }\n\n if (Number(month) < minMonth) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-min-month',\n `Enter a month that includes or comes after ${minMonth}`,\n { minMonth },\n ),\n {\n minMonth,\n },\n );\n }\n\n if (Number(month) > maxMonths) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-max-month',\n `Enter a month that includes or comes before ${maxMonths}`,\n { maxMonth: maxMonths },\n ),\n {\n maxMonth: maxMonths,\n },\n );\n }\n\n if (!twoDigitsRegex.test(year)) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-year-pattern',\n 'Enter a valid expiration year',\n ),\n {},\n );\n }\n\n if (Number(year) < minYear) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-min-year',\n `Enter a year that includes or comes after ${minYear}`,\n { minYear },\n ),\n {\n minYear,\n },\n );\n }\n\n const maxValidYear = minYear + maxYearsCount;\n\n if (Number(year) > maxValidYear) {\n return sendErrMessage(\n TranslateHelper.t(\n 'errors.validation.expiration-max-year',\n `Enter a year that includes or comes before ${maxValidYear}`,\n { maxYear: maxValidYear },\n ),\n {\n maxYear: maxValidYear,\n },\n );\n }\n\n return null;\n}\n","import { Injectable } from '@angular/core';\nimport { Converter } from '../converter.abstract';\nimport { SyncService } from '../../../requests/sync/sync.service';\nimport { Field } from '../../../field.interface';\nimport { ValidatorFn } from '../../validators/validator-fn.type';\nimport { cardExpValidator } from '../../validators/card-expiration-date-validator/card-expiration-date.validator';\nimport { FormState } from '../../form-state.interface';\nimport { TextControlConfig } from '../../controls/text-control.config';\nimport { TranslateHelper } from '../../../../../shared/translate/translate.helper';\n\nexport const maxMonths = 12;\n\n@Injectable()\nexport class CardExpirationConverter extends Converter {\n public constructor(syncService: SyncService) {\n super(syncService);\n }\n\n public getValidators(field: Field): ValidatorFn[] {\n return super.getValidators(field).concat([cardExpValidator]);\n }\n\n protected createControlConfig(\n field: Field,\n formState: FormState,\n ): TextControlConfig {\n const config = this.createDefaultControlConfig(TextControlConfig, field);\n\n config.maskConfig = {\n mask: '99/99',\n guide: false,\n };\n config.inputMode = 'numeric';\n\n config.placeholder = TranslateHelper.t(\n 'card-expiration.converter.placeholder',\n 'MM/YY',\n );\n\n config.title = TranslateHelper.t(\n 'card-expiration.converter.title',\n 'MM/YY',\n );\n\n config.disabled = formState?.disabled ?? false;\n\n return config;\n }\n\n protected getAutocomplete(): string {\n return 'cc-exp';\n }\n\n protected getDataType(): string {\n return 'text';\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ConvertersMap } from './converters-map.interface';\nimport { EmailConverter } from './email/email.converter';\nimport { ZipConverter } from './zip/zip.converter';\nimport { CardNumberConverter } from './card-number/card-number.converter';\nimport { CardMonthConverter } from './card-month/card-month.converter';\nimport { CvvConverter } from './cvv/cvv.converter';\nimport { BirthDateConverter } from './birth-date/birth-date.converter';\nimport { CardholderNameConverter } from './cardholder-name/cardholder-name.converter';\nimport { CpfNameConverter } from './cpf-name/cpf-name.converter';\nimport { CpfNumberConverter } from './cpf-number/cpf-number.converter';\nimport { StreetNumberConverter } from './street-number/street-number.converter';\nimport { TextConverter } from './text/text.converter';\nimport { CheckboxConverter } from './checkbox/checkbox.converter';\nimport { SelectConverter } from './select/select.converter';\nimport { PinConverter } from './pin/pin.converter';\nimport { RadioGroupConverter } from './radio-group/radio-group.converter';\nimport { PricepointConverter } from './pricepoint/pricepoint.converter';\nimport { CouponConverter } from './coupon/coupon.converter';\nimport { CardYearConverter } from './card-year/card-year.converter';\nimport { PhoneConverter } from './phone/phone.converter';\nimport { CardExpirationConverter } from './card-expiration/card-expiration.converter';\n\nexport const convertersMapToken = new InjectionToken<ConvertersMap>(\n 'ConvertersTokensMap',\n);\n\nexport const convertersMap: ConvertersMap = {\n card_number: CardNumberConverter,\n card_month: CardMonthConverter,\n card_year: CardYearConverter,\n card_expire: CardExpirationConverter,\n cvv: CvvConverter,\n extra_cvv: CvvConverter,\n zip: ZipConverter,\n cardholdername: CardholderNameConverter,\n cpf_number: CpfNumberConverter,\n cpf_name: CpfNameConverter,\n birth_date: BirthDateConverter,\n text: TextConverter,\n check: CheckboxConverter,\n select: SelectConverter,\n pin: PinConverter,\n radiogroup: RadioGroupConverter,\n email: EmailConverter,\n psEmail: EmailConverter,\n bazitemail: EmailConverter,\n street_number: StreetNumberConverter,\n sum: PricepointConverter,\n out: PricepointConverter,\n couponCode: CouponConverter,\n phone: PhoneConverter,\n};\n","import { Inject, Injectable, Injector } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Field } from '../../field.interface';\nimport { Converter } from '../converters/converter.abstract';\nimport { convertersMapToken } from '../converters/converters-map';\nimport { ConvertersMap } from '../converters/converters-map.interface';\nimport { ControlConfig } from './control-config';\n\n@Injectable()\nexport class ControlConfigService {\n public constructor(\n @Inject(convertersMapToken)\n private readonly convertersMap: ConvertersMap,\n private readonly injector: Injector,\n ) {}\n\n public getFormControl(field: Field): UntypedFormControl | null {\n const converter = this.getConverter(field);\n\n if (!converter) {\n return null;\n }\n\n return converter.convertToFormControl(field);\n }\n\n public getConfig(field: Field): ControlConfig | null {\n const converter = this.getConverter(field);\n\n if (!converter) {\n return null;\n }\n\n return converter.convertToConfig(field);\n }\n\n public getConverter(field: Field | null): Converter | null {\n if (!field) {\n return null;\n }\n\n const sanitizedName = field.name.replace(/^fix_/i, '');\n let converter = this.convertersMap[sanitizedName];\n\n if (!converter) {\n converter = this.convertersMap[field.type];\n }\n\n if (!converter) {\n return null;\n }\n\n return this.injector.get<Converter>(converter);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { XpsBoolean } from '../../xps-boolean.enum';\nimport { Field } from '../field.interface';\nimport { ControlConfigService } from './controls/control-config.service';\nimport { FieldFormStates } from './field-form-states.interface';\nimport { FormState } from './form-state.interface';\nimport { FieldNames } from '../field-names.enum';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable()\nexport class FormService {\n public fieldFormStates: FieldFormStates = {};\n\n public constructor(\n private readonly controlConfigService: ControlConfigService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {}\n\n public createForm(fields: Field[]): UntypedFormGroup {\n const visibleFields = this.getVisibleFields(fields);\n const externalVaultFields = this.getExternalVaultFields(fields);\n\n const formFields = this.deduplicateFields([\n ...visibleFields,\n ...externalVaultFields,\n ]);\n const controls: { [name: string]: UntypedFormControl } = formFields.reduce(\n (result: { [key: string]: UntypedFormControl }, field: Field) => {\n const formControl: UntypedFormControl | null =\n this.controlConfigService.getFormControl(field);\n\n if (formControl) {\n result[field.name] = formControl;\n }\n\n return result;\n },\n {},\n );\n\n this.logCreateForm(formFields);\n\n return new UntypedFormGroup(controls);\n }\n\n public getFieldFormState(fieldName: FieldNames): FormState | null {\n return this.fieldFormStates[fieldName] ?? null;\n }\n\n public updateFieldFormState(\n form: UntypedFormGroup,\n fields: Field[],\n fieldName: string,\n formState: FormState,\n ): void {\n const field = fields.find(\n (fieldItem: Field) => fieldItem.name === fieldName,\n );\n\n if (!field) {\n return;\n }\n\n const converter = this.controlConfigService.getConverter(field);\n const control = form.controls[fieldName];\n\n if (!control) {\n return;\n }\n\n this.fieldFormStates[fieldName] = {\n ...this.fieldFormStates[fieldName],\n ...formState,\n };\n control.setValidators(\n converter?.getValidators(field, this.fieldFormStates[fieldName]) ?? [],\n );\n control.updateValueAndValidity();\n }\n\n private getVisibleFields(fields: Field[]): Field[] {\n return fields.filter(({ isVisible }) => isVisible === XpsBoolean.true);\n }\n\n private getExternalVaultFields(fields: Field[]): Field[] {\n return fields.filter(({ name }) =>\n [FieldNames.pmId, FieldNames.externalCardIssuerCountry].includes(\n name as FieldNames,\n ),\n );\n }\n\n private deduplicateFields(fields: Field[]): Field[] {\n const uniqueFieldsMap = new Map<string, Field>();\n fields.forEach((field) => uniqueFieldsMap.set(field.name, field));\n return Array.from(uniqueFieldsMap.values());\n }\n\n private logCreateForm(fields: Field[]): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.createForm,\n 'manual',\n { value: fields.map((field) => field.name) },\n );\n }\n}\n","export enum StatusSearchParam {\n token = 'token',\n pid = 'fix_pid',\n invoice = 'fix_invoice',\n signature = 'signature',\n locale = 'locale',\n testProject = 'fix_testProject',\n testPs = 'fix_testPs',\n testXsolla = 'fix_testXsolla',\n userReturnStatus = 'fix_userReturnStatus',\n isSavePaymentAccount = 'isSavePaymentAccount',\n}\n","import { StatusSearchParam } from './status-search-param.enum';\n\nexport const requiredStatusSearchParams = [\n StatusSearchParam.token,\n StatusSearchParam.locale,\n StatusSearchParam.signature,\n StatusSearchParam.pid,\n StatusSearchParam.invoice,\n];\n","import { StatusRequestParams } from './status-request-params.interface';\nimport { StatusSearchParam } from './status-search-param.enum';\n\ntype SearchParamConverter = (value: string) => string | number;\n\ninterface StatusSearchParamSettings {\n key: keyof StatusRequestParams;\n converter: SearchParamConverter;\n}\n\nconst stringConverter: SearchParamConverter = (value: string): string => value;\nconst numberConverter: SearchParamConverter = (value: string): number => {\n const numberValue = Number(value);\n return isNaN(numberValue) ? 0 : numberValue;\n};\n\nexport const statusSearchParamsMap = new Map<\n StatusSearchParam,\n StatusSearchParamSettings\n>([\n [\n StatusSearchParam.token,\n {\n key: 'token',\n converter: stringConverter,\n },\n ],\n [\n StatusSearchParam.signature,\n {\n key: 'signature',\n converter: stringConverter,\n },\n ],\n [\n StatusSearchParam.locale,\n {\n key: 'locale',\n converter: stringConverter,\n },\n ],\n [\n StatusSearchParam.userReturnStatus,\n {\n key: 'userReturnStatus',\n converter: stringConverter,\n },\n ],\n [\n StatusSearchParam.pid,\n {\n key: 'pid',\n converter: numberConverter,\n },\n ],\n [\n StatusSearchParam.invoice,\n {\n key: 'invoice',\n converter: numberConverter,\n },\n ],\n [\n StatusSearchParam.testProject,\n {\n key: 'testProject',\n converter: numberConverter,\n },\n ],\n [\n StatusSearchParam.testPs,\n {\n key: 'testPs',\n converter: numberConverter,\n },\n ],\n [\n StatusSearchParam.testXsolla,\n {\n key: 'testXsolla',\n converter: numberConverter,\n },\n ],\n [\n StatusSearchParam.isSavePaymentAccount,\n {\n key: 'isSavePaymentAccount',\n converter: stringConverter,\n },\n ],\n]);\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nexport abstract class XpsApiPart<Response> {\n public get response$(): Observable<Response> {\n return this.response\n .asObservable()\n .pipe(\n filter<Response | null, Response>(\n (response: Response | null): response is Response =>\n response !== null,\n ),\n );\n }\n\n private readonly response: BehaviorSubject<Response | null> =\n new BehaviorSubject<Response | null>(null);\n\n public emitResponse(response: Response | null): void {\n this.response.next(response);\n }\n\n public get currentValue(): Response | null {\n return this.response.getValue();\n }\n\n protected abstract request(\n ...args: any[] // eslint-disable-line @typescript-eslint/no-explicit-any\n ): void | Promise<Response | void> | Promise<Response> | Observable<Response>;\n}\n","import { XpsApiPartRequest } from '../../../xps-api/xps-api-part-request.abstract';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\nimport { StatusRequestParams } from '../status-request-params.interface';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport class StatusRequest extends XpsApiPartRequest {\n public readonly access_token: string;\n public readonly xps_fix_command = 'status';\n public readonly xps_fix_invoice: number;\n public readonly xps_fix_pid: number;\n public readonly xps_signature: string;\n public readonly xps_locale: string;\n public readonly xps_fix_testProject: number | undefined;\n public readonly xps_fix_testPs: number | undefined;\n public readonly xps_fix_testXsolla: number | undefined;\n public readonly xps_fix_userReturnStatus: string | undefined;\n\n public constructor(parameters: StatusRequestParams) {\n super();\n\n if (!parameters.token) {\n throw new TokenError();\n }\n\n this.access_token = parameters.token;\n this.xps_fix_invoice = parameters.invoice;\n this.xps_fix_pid = parameters.pid;\n this.xps_signature = parameters.signature;\n this.xps_fix_testProject = parameters.testProject;\n this.xps_fix_testPs = parameters.testPs;\n this.xps_fix_testXsolla = parameters.testXsolla;\n this.xps_fix_userReturnStatus = parameters.userReturnStatus;\n this.xps_locale = parameters.locale;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { StatusRequest } from './status-request.class';\n\nexport type StatusRequestParameters = ConstructorParameters<\n typeof StatusRequest\n>;\n\nexport type StatusRequestFactory = (\n ...args: StatusRequestParameters\n) => StatusRequest;\n\nexport const statusRequestFactoryToken: InjectionToken<StatusRequestFactory> =\n new InjectionToken<StatusRequestFactory>('StatusRequest');\n\nexport const statusRequestFactoryProvider: ValueProvider = {\n provide: statusRequestFactoryToken,\n useValue: (...args: StatusRequestParameters) => new StatusRequest(...args),\n};\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { StatusResponse } from './status-response.class';\n\ntype ResponseParameters = ConstructorParameters<typeof StatusResponse>;\n\nexport type StatusResponseFactory = (\n ...args: ResponseParameters\n) => StatusResponse;\n\nexport const statusResponseFactoryToken: InjectionToken<StatusResponseFactory> =\n new InjectionToken<StatusResponseFactory>('StatusResponse');\n\nexport const statusResponseFactoryProvider: ValueProvider = {\n provide: statusResponseFactoryToken,\n useValue: (...args: ResponseParameters) => new StatusResponse(...args),\n};\n","import { lastValueFrom } from 'rxjs';\nimport { Injectable, Inject } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { XpsResponse, XpsStatus } from '../../xps-response.interface';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { TerminalError } from '../../../exceptions-handling/errors/terminal-error.class';\nimport { SecureApiClient } from '../../../http/secure-api/secure-api.service';\nimport { XpsApiPart } from '../../xps-api/xps-api-part.abstract';\nimport {\n StatusRequestFactory,\n statusRequestFactoryToken,\n} from './request/status-request.token';\nimport {\n StatusResponseFactory,\n statusResponseFactoryToken,\n} from './response/status-response.token';\nimport { StatusRequestParams } from './status-request-params.interface';\nimport { StatusResponse } from './response/status-response.class';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StatusRequestService extends XpsApiPart<StatusResponse> {\n private readonly apiRoute = 'directpayment';\n private requestParams!: StatusRequestParams;\n public constructor(\n private readonly secureApiClient: SecureApiClient,\n private readonly settingsService: SettingsService,\n @Inject(statusRequestFactoryToken)\n private readonly requestFactory: StatusRequestFactory,\n @Inject(statusResponseFactoryToken)\n private readonly responseFactory: StatusResponseFactory,\n ) {\n super();\n }\n\n public setRequestParams(params: StatusRequestParams): void {\n this.requestParams = {\n locale: params.locale,\n testProject: params.testProject,\n testPs: params.testPs,\n testXsolla: params.testXsolla,\n userReturnStatus: params.userReturnStatus,\n invoice: params.invoice,\n pid: params.pid,\n signature: params.signature,\n };\n }\n\n public request(): void {\n const requestParams = this.requestFactory({\n token: this.settingsService.token,\n ...this.requestParams,\n });\n\n lastValueFrom(\n this.secureApiClient.post<XpsResponse>(\n this.apiRoute,\n new URLSearchParams(\n requestParams as unknown as { [key: string]: string },\n ),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n ),\n )\n .then((response: XpsResponse) => {\n const statusResponse = this.responseFactory({\n status: response.status as XpsStatus | null,\n errors: response.errors,\n form: response.form,\n payment_method: response.payment_method,\n });\n\n this.emitResponse(statusResponse);\n })\n .catch((e: TerminalError) => {\n throw new TerminalError(e.message, e.code);\n });\n }\n}\n","import { Price } from './price.interface';\n\nexport function extractMoneyCurrency<T>(\n money: (T & { amount?: null | number; currency?: string }) | undefined,\n allowZero = true,\n): Price {\n return {\n amount: money?.amount ?? (allowZero ? 0 : null),\n currency: money?.currency ?? '',\n };\n}\n\nexport function createPriceOrUndefined(\n amount: number | undefined | null,\n currency: string | undefined,\n): Price | undefined {\n return amount !== undefined && amount !== null && currency !== undefined\n ? {\n amount,\n currency,\n }\n : undefined;\n}\n","/**\n * default image for purchase item is set on Publisher Account side.\n * for purchase checkout items the image url is converted into base64 string.\n * to determine default image fixed templates are used\n */\nexport const defaultImagePatterns = [\n /^data:image\\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAAAAADmVT4XAAACMUlEQVR4Ae3YgYqdMBSE4fP/,\n /virtual_item_default_image/,\n];\n","export enum VatDetailsKey {\n vat = 'vat',\n vatPercent = 'vat-percent',\n vatIncluding = 'vat-including',\n vatPercentIncluding = 'vat-percent-including',\n\n vatIndia = 'vat-india',\n vatIndiaPercent = 'vat-india-percent',\n vatIndiaIncluding = 'vat-india-including',\n vatIndiaPercentIncluding = 'vat-india-percent-including',\n\n vatGhana = 'vat-ghana',\n vatGhanaIncluding = 'vat-ghana-including',\n}\n","export enum SalesTaxDetailsKey {\n salesTax = 'sales-tax',\n salesTaxPercent = 'sales-tax-percent',\n salesTaxIncluding = 'sales-tax-including',\n}\n","import { Injectable } from '@angular/core';\nimport { XpsSummary } from '../../xps-summary.interface';\nimport { XpsFinance } from '../../xps-finance.interface';\nimport { XpsPurchase } from '../../xps-purchase.interface';\nimport { CartItem } from '../cart-item.interface';\nimport { CartSummary } from '../cart-summary.interface';\nimport { createPriceOrUndefined, extractMoneyCurrency } from '../price.helpers';\nimport { defaultImagePatterns } from './default-image-patterns.const';\nimport { Price } from '../price.interface';\nimport { CartLine } from '../cart-line.interface';\nimport { FinanceDetails } from '../finance-details.interface';\nimport { VatDetailsKey } from '../vat-details-key.enum';\nimport { SalesTaxDetailsKey } from './sales-tax-details-key.enum';\n\n@Injectable({ providedIn: 'root' })\nexport class SummaryFinanceDetailsAdapterService {\n public getFinanceDetails(summary: XpsSummary): FinanceDetails {\n const { purchase, finance } = summary;\n return {\n purchase: purchase,\n finance: finance,\n cartItems: this.getCartItems(purchase, finance),\n cartSummary: this.getCartSummary(finance),\n paymentCountry: this.getPaymentCountry(finance),\n };\n }\n\n private shouldShowZeroIndirectTaxRate(finance: XpsFinance | null): boolean {\n return !!(finance?.vat?.visible ?? finance?.vat_user?.visible);\n }\n\n private isSalesTaxes(finance: XpsFinance | null): boolean {\n return !!(finance?.sales_tax?.amount ?? finance?.sales_tax_user?.amount);\n }\n\n private getCartItems(\n purchase: XpsPurchase,\n finance: XpsFinance | null,\n ): CartItem[] {\n const checkouts: CartItem[] | undefined = purchase.checkout_items?.map(\n (item) => {\n return {\n imgSrc: item.image_url,\n hasDefaultImg: this.isDefaultImage(item.image_url),\n title: item.name,\n price: extractMoneyCurrency(item, false),\n priceBeforeDiscount: createPriceOrUndefined(\n item.amount_before_discount,\n item.currency,\n ),\n quantity: item.quantity,\n description: item.description,\n tax: this.getTaxForItem(finance, item.indirect_tax_rate),\n isBonus: item.is_bonus,\n };\n },\n );\n\n const virtualCurrencies: CartItem[] | undefined =\n purchase.virtual_currency?.map((item) => {\n return {\n imgSrc: item.image_url,\n hasDefaultImg: this.isDefaultImage(item.image_url),\n title: `${item.quantity} ${item.name}`,\n price: extractMoneyCurrency(item),\n description: item.description,\n isBonus: item.is_bonus,\n };\n });\n\n const virtualItems: CartItem[] | undefined = purchase.virtual_items?.map(\n (item) => {\n return {\n imgSrc: item.image_url,\n hasDefaultImg: this.isDefaultImage(item.image_url),\n title: item.name,\n price: extractMoneyCurrency(item),\n description: item.description,\n quantity: item.quantity,\n isBonus: item.is_bonus,\n };\n },\n );\n\n let checkoutArray: CartItem[] | undefined = undefined;\n if (purchase.checkout) {\n checkoutArray = [\n {\n key: 'checkout',\n title: purchase.checkout.description,\n price: extractMoneyCurrency(purchase.checkout),\n isBonus: purchase.checkout.is_bonus ?? false,\n },\n ];\n }\n\n return [\n ...(checkouts ?? []),\n ...(virtualCurrencies ?? []),\n ...(virtualItems ?? []),\n ...(checkoutArray ?? []),\n ];\n }\n\n private getCartSummary(finance: XpsFinance | null): CartSummary {\n return {\n subtotal: {\n title: 'Subtotal',\n money: createPriceOrUndefined(\n finance?.sub_total?.amount,\n finance?.sub_total?.currency,\n ),\n },\n subtotalPayment: {\n title: '',\n money: createPriceOrUndefined(\n finance?.sub_total?.payment_amount,\n finance?.sub_total?.payment_currency,\n ),\n },\n total: {\n title: 'Total',\n money: extractMoneyCurrency(finance?.total),\n },\n totalDetails: this.getTaxesForTotalDetails(finance),\n subtotalDetails: [\n ...this.getSubtotalDetails(finance),\n ...this.getTaxesForSubtotalDetails(finance),\n ],\n };\n }\n\n private getPaymentCountry(finance: XpsFinance | null): string {\n return finance?.payment_country?.iso ?? '';\n }\n\n private getTaxForItem(\n finance: XpsFinance | null,\n indirectTaxRate?: number,\n ): CartLine | null {\n if (\n indirectTaxRate ||\n (this.shouldShowZeroIndirectTaxRate(finance) && indirectTaxRate === 0)\n ) {\n if (this.isSalesTaxes(finance)) {\n return {\n key: SalesTaxDetailsKey.salesTaxPercent,\n content: `Sales tax ${indirectTaxRate}%`,\n rate: indirectTaxRate,\n };\n }\n\n if (this.isIndia(finance)) {\n return {\n key: VatDetailsKey.vatIndiaPercent,\n content: `GST ${indirectTaxRate}%`,\n rate: indirectTaxRate,\n };\n }\n\n if (this.isGhana(finance)) {\n return {\n key: VatDetailsKey.vatGhana,\n content: 'VAT, NHIL, GETFund Levy, and Covid-19 Levy',\n rate: indirectTaxRate,\n };\n }\n\n return {\n key: VatDetailsKey.vatPercent,\n content: `VAT ${indirectTaxRate}%`,\n rate: indirectTaxRate,\n };\n }\n return null;\n }\n\n private getSubtotalDetails(finance: XpsFinance | null): CartLine[] {\n if (!finance) {\n return [];\n }\n\n // subtotal details fields\n const subtotalDetailsSorting = [\n {\n key: 'discount',\n responseKey: 'discount',\n title: 'Discount',\n },\n {\n key: 'fee',\n responseKey: 'fee',\n title: 'Payment system fee',\n },\n {\n key: 'user-balance',\n responseKey: 'user_balance',\n title: 'Balance',\n },\n ];\n\n return subtotalDetailsSorting.map((sorting) => {\n const field = (finance as unknown as { [key: string]: unknown })[\n sorting.responseKey\n ] as Price;\n\n if (field) {\n return {\n key: sorting.key,\n title: sorting.title,\n money: {\n amount:\n sorting.key === 'discount' && field.amount\n ? -field.amount\n : field.amount,\n currency: field.currency,\n },\n };\n }\n return sorting;\n });\n }\n\n private getTaxesForSubtotalDetails(finance: XpsFinance | null): CartLine[] {\n const ret = [];\n\n // subtotal. VAT %p\n if (\n finance?.vat_user &&\n (finance?.vat_user?.amount ?? finance?.vat_user?.visible)\n ) {\n ret.push({\n key: this.getVatNotIncludingKeyForDetails(finance),\n title: this.getVatLabelForSubtotalDetails(finance),\n money: extractMoneyCurrency(finance?.vat_user),\n });\n }\n\n if (finance?.sales_tax_user?.amount) {\n ret.push({\n key: SalesTaxDetailsKey.salesTax,\n title: 'Sales tax',\n money: extractMoneyCurrency(finance?.sales_tax_user),\n });\n }\n\n return ret;\n }\n\n private getVatLabelForSubtotalDetails(finance: XpsFinance | null): string {\n if (this.isIndia(finance)) {\n return `GST ${finance?.vat_user?.percent ?? ''}%`;\n }\n\n if (this.isGhana(finance)) {\n return `VAT, NHIL, GETFund Levy, and Covid-19 Levy`;\n }\n\n return `VAT ${finance?.vat_user?.percent ?? ''}%`;\n }\n\n private getTaxesForTotalDetails(finance: XpsFinance | null): CartLine[] {\n const ret = [];\n\n // for totalDetails. VAT\n if (\n (finance?.vat?.amount || finance?.vat?.visible) &&\n !finance?.vat_user?.amount\n ) {\n ret.push({\n key: this.getVatIncludingKeyForDetails(finance),\n title: this.getVatLabelForTotalDetails(finance),\n money: extractMoneyCurrency(finance?.vat),\n });\n }\n\n if (finance?.sales_tax?.amount && !finance?.sales_tax_user?.amount) {\n ret.push({\n key: SalesTaxDetailsKey.salesTaxIncluding,\n title: 'Sales tax included',\n money: extractMoneyCurrency(finance?.sales_tax),\n });\n }\n\n return ret;\n }\n\n private getVatNotIncludingKeyForDetails(finance: XpsFinance | null): string {\n if (this.isIndia(finance)) {\n return VatDetailsKey.vatIndiaPercent;\n }\n\n if (this.isGhana(finance)) {\n return VatDetailsKey.vatGhana;\n }\n\n return VatDetailsKey.vatPercent;\n }\n\n private getVatIncludingKeyForDetails(finance: XpsFinance | null): string {\n if (this.isIndia(finance)) {\n return VatDetailsKey.vatIndiaPercentIncluding;\n }\n\n if (this.isGhana(finance)) {\n return VatDetailsKey.vatGhanaIncluding;\n }\n\n return VatDetailsKey.vatPercentIncluding;\n }\n\n private getVatLabelForTotalDetails(finance: XpsFinance | null): string {\n if (this.isIndia(finance)) {\n return `Including ${finance?.vat.percent ?? ''}% GST`;\n }\n\n if (this.isGhana(finance)) {\n return 'Including VAT, NHIL, GETFund Levy, and Covid-19 Levy';\n }\n\n return `Including ${finance?.vat.percent ?? ''}% VAT`;\n }\n\n private isIndia(finance: XpsFinance | null): boolean {\n return finance?.payment_country.iso === 'IN';\n }\n\n private isGhana(finance: XpsFinance | null): boolean {\n return finance?.payment_country.iso === 'GH';\n }\n\n private isDefaultImage(url: string): boolean {\n return defaultImagePatterns.some((regex) => regex.test(url));\n }\n}\n","export const fieldsWithCurrency = new Set([\n 'sum',\n 'commissionUserVatPrc',\n 'salesTaxCommission',\n 'vatUserNotIncluded',\n 'xsollaTipsAmount',\n 'paymentSystemFee',\n 'discount',\n 'userWallet',\n 'subtotal',\n 'subtotalSummaryBeforeConversion',\n 'grandTotal',\n 'subtotalBeforeDiscount',\n 'redeemedPoints',\n]);\n","export enum CountryIsoCode {\n India = 'IN',\n Ghana = 'GH',\n}\n","import { Injectable } from '@angular/core';\nimport { StatusFinanceInfo } from '../../status/status-finance-info.interface';\nimport { Status } from '../../status/status.interface';\nimport { FinanceDetails } from '../finance-details.interface';\nimport { FinanceInfoWithAmountAndCurrency } from './finance-info.interface';\nimport { FinanceInfoField } from '../../status/finance-info-field.interface';\nimport { fieldsWithCurrency } from './fields-with-currency';\nimport { CartLine } from '../cart-line.interface';\nimport { extractMoneyCurrency } from '../price.helpers';\nimport { FieldWithAmountAndCurrency } from './field-with-amount-and-currency.interface';\nimport { CartSummary } from '../cart-summary.interface';\nimport { CountryIsoCode } from '../../../country/country-iso-code.enum';\nimport { VatDetailsKey } from '../vat-details-key.enum';\nimport { XpsPurchase } from '../../xps-purchase.interface';\nimport { CartItem } from '../cart-item.interface';\nimport { XpsFinance } from '../../xps-finance.interface';\nimport { StatusOrder } from '../../status/status-order.interface';\nimport { SummaryFinanceDetailsAdapterService } from '../summary/summary-finance-details-adapter.service';\nimport { StatusEnum } from '../../status/status.enum';\n\n@Injectable({ providedIn: 'root' })\nexport class StatusFinanceDetailsAdapterService {\n public constructor(\n private readonly summarFinanceDetailsAdapterService: SummaryFinanceDetailsAdapterService,\n ) {}\n\n public getFinanceDetails(\n status: Status,\n purchase: XpsPurchase | null,\n ): FinanceDetails {\n const financeInfo = this.fillFinanceInfo(status.financeInfo);\n const country = status.paymentCountryIso;\n const order = status.order ?? null;\n\n const summaryFinance = this.convertStatusFinanceToSummaryFinance(\n purchase,\n order,\n country,\n );\n\n return {\n purchase,\n finance: summaryFinance,\n cartItems: this.getCartItems(purchase, summaryFinance),\n cartSummary: this.getCartSummary(status, financeInfo, country),\n paymentCountry: country,\n };\n }\n\n private fillFinanceInfo(\n financeInfo: StatusFinanceInfo,\n ): FinanceInfoWithAmountAndCurrency {\n return Object.keys(financeInfo).reduce(\n (\n financeInfoWithAmountAndCurrency: FinanceInfoWithAmountAndCurrency,\n key: string,\n ) => {\n const field: FinanceInfoField = financeInfo[key];\n\n if (field?.key && fieldsWithCurrency.has(field?.key)) {\n this.addAmountAndCurrencyToField(field);\n }\n return { ...financeInfoWithAmountAndCurrency, [key]: field };\n },\n {},\n );\n }\n\n private addAmountAndCurrencyToField(field: {\n key?: string;\n pref?: string;\n value?: string;\n amount?: number;\n currency?: string;\n }): void {\n const amountAndCurrency = /(^[-\\d.]+) ([A-Z]{3})$/;\n const currencyParts = field.value?.trim().match(amountAndCurrency);\n\n if (currencyParts) {\n const amountPosition = 1;\n const currencyPosition = 2;\n field.amount = Number(currencyParts[amountPosition]);\n field.currency = currencyParts[currencyPosition];\n }\n }\n\n private getCartItems(\n purchase: XpsPurchase | null,\n summaryFinance: XpsFinance | null,\n ): CartItem[] | null {\n if (!purchase) {\n return null;\n }\n\n const financeDetails =\n this.summarFinanceDetailsAdapterService.getFinanceDetails({\n purchase,\n finance: summaryFinance,\n });\n\n return financeDetails.cartItems;\n }\n\n private convertStatusFinanceToSummaryFinance(\n purchase: XpsPurchase | null,\n order: StatusOrder | null,\n country: string,\n ): XpsFinance | null {\n if (!order || !purchase?.checkout_items?.length) {\n return null;\n }\n\n const finance = {\n payment_country: {\n iso: country,\n },\n } as XpsFinance;\n\n const firstCheckoutItem = purchase?.checkout_items[0];\n const firstCheckoutItemAmount = firstCheckoutItem?.amount ?? 0;\n const oneHundredPercent = 100;\n const taxAmount =\n (firstCheckoutItemAmount * firstCheckoutItem?.indirect_tax_rate) /\n oneHundredPercent;\n\n if (order.contained_taxes?.sales_tax) {\n finance.sales_tax = {\n amount: taxAmount,\n percent: firstCheckoutItem?.indirect_tax_rate,\n currency: purchase?.checkout?.currency ?? '',\n };\n }\n\n if (order.contained_taxes?.user_vat) {\n finance.vat = {\n amount: taxAmount,\n percent: firstCheckoutItem?.indirect_tax_rate,\n currency: purchase?.checkout?.currency ?? '',\n visible: true,\n };\n }\n\n return finance;\n }\n\n private getCartSummary(\n status: Status,\n financeInfo: FinanceInfoWithAmountAndCurrency,\n country: string,\n ): CartSummary {\n const cart: CartSummary = {\n total: this.getTotal(financeInfo),\n totalDetails: this.getTotalDetails(financeInfo, country),\n subtotalDetails: [\n ...this.getSubtotalDetails(financeInfo),\n ...this.getTaxesForSubtotalDetails(financeInfo, country),\n ],\n transactionDetails: this.getTransactionDetails(status, financeInfo),\n subtotal: this.getInitialCurrencySubtotal(financeInfo) ?? null,\n subtotalPayment: this.getSubtotalPayment(financeInfo) ?? null,\n };\n\n return cart;\n }\n\n private getTotal(financeInfo: FinanceInfoWithAmountAndCurrency): CartLine {\n return {\n title: 'Total',\n money: extractMoneyCurrency(\n financeInfo.sum as FieldWithAmountAndCurrency,\n ),\n };\n }\n\n private getSubtotalPayment(\n financeInfo: FinanceInfoWithAmountAndCurrency,\n ): CartLine | null {\n if (!financeInfo?.subtotal) {\n return null;\n }\n\n return {\n title: 'Subtotal',\n money: extractMoneyCurrency(\n financeInfo.subtotal as FieldWithAmountAndCurrency,\n ),\n };\n }\n\n private getInitialCurrencySubtotal(\n financeInfo: FinanceInfoWithAmountAndCurrency,\n ): CartLine | null {\n if (!financeInfo?.subtotalSummaryBeforeConversion) {\n return {\n title: '',\n money: extractMoneyCurrency(financeInfo.subtotal),\n };\n }\n\n return {\n title: '',\n money: extractMoneyCurrency(financeInfo.subtotalSummaryBeforeConversion),\n };\n }\n\n private getTotalDetails(\n financeInfo: FinanceInfoWithAmountAndCurrency,\n country: string,\n ): CartLine[] {\n const totalDetails: CartLine[] = [];\n\n const salesTaxCommissionField = financeInfo[\n 'salesTaxCommission'\n ] as FieldWithAmountAndCurrency;\n if (salesTaxCommissionField) {\n totalDetails.push({\n title: salesTaxCommissionField.pref,\n money: {\n amount: salesTaxCommissionField.amount ?? null,\n currency: salesTaxCommissionField.currency ?? '',\n },\n });\n }\n\n const commissionUserVatPrcField = financeInfo[\n 'commissionUserVatPrc'\n ] as FieldWithAmountAndCurrency;\n\n if (commissionUserVatPrcField?.pref) {\n const percents = this.getPercents(commissionUserVatPrcField.pref);\n\n totalDetails.push({\n key: this.getVatIncludingKeyDetails(percents, country),\n title: this.geVatIncludingTitleDetails(percents, country),\n percents: percents,\n money: {\n amount: commissionUserVatPrcField.amount ?? null,\n currency: commissionUserVatPrcField.currency ?? '',\n },\n });\n }\n return totalDetails;\n }\n\n private getSubtotalDetails(\n financeInfo: FinanceInfoWithAmountAndCurrency,\n ): CartLine[] {\n const subtotalDetailsSorting = [\n {\n key: 'discount',\n responseKey: 'discount',\n title: 'Discount',\n },\n {\n key: 'fee',\n responseKey: 'paymentSystemFee',\n title: 'Payment system fee',\n },\n {\n key: 'user-balance',\n responseKey: 'userWallet',\n title: 'Balance',\n },\n ];\n\n const redeemedPoints = financeInfo['redeemedPoints'];\n\n if (redeemedPoints?.pref) {\n subtotalDetailsSorting.push({\n key: 'redeem-points',\n responseKey: 'redeemedPoints',\n title: redeemedPoints.pref,\n });\n }\n\n return subtotalDetailsSorting.reduce(\n (\n subTotalDetails: CartLine[],\n sorting: { responseKey: string; title: string },\n ) => {\n const field = financeInfo[\n sorting.responseKey\n ] as FieldWithAmountAndCurrency;\n if (field) {\n subTotalDetails.push({\n title: sorting.title,\n money: {\n amount: field.amount ?? null,\n currency: field.currency ?? '',\n },\n });\n }\n return subTotalDetails;\n },\n [],\n );\n }\n\n private getTaxesForSubtotalDetails(\n financeInfo: FinanceInfoWithAmountAndCurrency,\n country: string,\n ): CartLine[] {\n const taxesForSubtotalDetails: CartLine[] = [];\n const vatUserNotIncludedField = financeInfo[\n 'vatUserNotIncluded'\n ] as FieldWithAmountAndCurrency;\n if (vatUserNotIncludedField?.pref) {\n const percents = this.getPercents(vatUserNotIncludedField.pref);\n taxesForSubtotalDetails.push({\n key: this.getVatNotIncludingKeyDetails(percents, country),\n title: this.getVatNotIncludingTitleDetails(percents, country),\n money: {\n amount: vatUserNotIncludedField.amount ?? null,\n currency: vatUserNotIncludedField.currency ?? '',\n },\n });\n }\n\n return taxesForSubtotalDetails;\n }\n\n private getVatNotIncludingKeyDetails(\n percents: string | null,\n country: string,\n ): string {\n if (this.isIndia(country)) {\n return percents ? VatDetailsKey.vatIndiaPercent : VatDetailsKey.vatIndia;\n }\n\n if (this.isGhana(country)) {\n return VatDetailsKey.vatGhana;\n }\n\n return percents ? VatDetailsKey.vatPercent : VatDetailsKey.vat;\n }\n\n private getVatNotIncludingTitleDetails(\n percents: string | null,\n country: string,\n ): string {\n if (this.isIndia(country)) {\n return percents ? `GST ${percents}%` : 'GST';\n }\n\n if (this.isGhana(country)) {\n return 'VAT, NHIL, GETFund Levy, and Covid-19 Levy';\n }\n\n return percents ? `VAT ${percents}%` : 'VAT';\n }\n\n private getVatIncludingKeyDetails(\n percents: string | null,\n country: string,\n ): string {\n if (this.isIndia(country)) {\n return percents\n ? VatDetailsKey.vatIndiaPercentIncluding\n : VatDetailsKey.vatIndiaIncluding;\n }\n\n if (this.isGhana(country)) {\n return VatDetailsKey.vatGhanaIncluding;\n }\n\n return percents\n ? VatDetailsKey.vatPercentIncluding\n : VatDetailsKey.vatIncluding;\n }\n\n private geVatIncludingTitleDetails(\n percents: string | null,\n country: string,\n ): string {\n if (this.isIndia(country)) {\n return percents ? `Including ${percents}% GST` : 'Including GST';\n }\n\n if (this.isGhana(country)) {\n return 'Including VAT, NHIL, GETFund Levy, and Covid-19 Levy';\n }\n\n return percents ? `Including ${percents}% VAT` : `Including VAT`;\n }\n\n private isGhana(country: string): boolean {\n return country === CountryIsoCode.Ghana;\n }\n\n private isIndia(country: string): boolean {\n return country === CountryIsoCode.India;\n }\n\n private getTransactionDetails(\n status: Status,\n financeInfo: FinanceInfoWithAmountAndCurrency,\n ): CartLine[] {\n const transactionDetails: CartLine[] = [];\n if (financeInfo.invoice?.value) {\n transactionDetails.push({\n key: 'invoice',\n title: 'Transaction',\n content: financeInfo.invoice.value,\n });\n }\n\n const isCompleted =\n status.isCancelUser ||\n (status.statusState !== StatusEnum.processing &&\n status.statusState !== StatusEnum.created &&\n status.statusState !== StatusEnum.held);\n if (isCompleted && financeInfo.time?.value) {\n transactionDetails.push({\n key: 'time',\n title: 'Date',\n content: financeInfo.time.value,\n isDateLine: true,\n });\n }\n return transactionDetails;\n }\n\n private getPercents(value: string): string | null {\n const percentsTemplate = /(\\d+(.\\d+)?)/;\n const percentsMatchResult = percentsTemplate.exec(value);\n\n if (!percentsMatchResult) {\n return null;\n }\n\n return percentsMatchResult[0];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { EmitDataService } from '../emit-data.service.abstract';\nimport { Status } from '../status/status.interface';\nimport { XpsSummary } from '../xps-summary.interface';\nimport { FinanceDetails } from './finance-details.interface';\nimport { StatusFinanceDetailsAdapterService } from './status/status-finance-details-adapter.service';\nimport { SummaryFinanceDetailsAdapterService } from './summary/summary-finance-details-adapter.service';\nimport { SessionService } from '../../session/session.service';\nimport { XpsPurchase } from '../xps-purchase.interface';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\n\n@Injectable({ providedIn: 'root' })\nexport class FinanceDetailsService extends EmitDataService<FinanceDetails> {\n private readonly purchaseSessionKey = 'purchase';\n\n public constructor(\n private readonly sessionService: SessionService,\n private readonly summaryFinanceDetailsAdapterService: SummaryFinanceDetailsAdapterService,\n private readonly statusFinanceDetailsAdapterService: StatusFinanceDetailsAdapterService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {\n super();\n }\n\n public emitWithSummary(summary?: XpsSummary, needLogCart = true): void {\n if (summary) {\n const financeDetails =\n this.summaryFinanceDetailsAdapterService.getFinanceDetails(summary);\n\n if (financeDetails.purchase) {\n this.sessionService.set(\n this.purchaseSessionKey,\n financeDetails.purchase,\n );\n }\n\n super.emit(financeDetails);\n\n if (needLogCart) {\n this.logCartEvent(financeDetails);\n }\n }\n }\n\n public emitWithStatus(status?: Status): void {\n if (status) {\n const purchase = this.sessionService.get<XpsPurchase>(\n this.purchaseSessionKey,\n );\n const financeDetails =\n this.statusFinanceDetailsAdapterService.getFinanceDetails(\n status,\n purchase,\n );\n super.emit(financeDetails);\n }\n }\n\n public getDetailsFromSummary(summary: XpsSummary): FinanceDetails {\n return this.summaryFinanceDetailsAdapterService.getFinanceDetails(summary);\n }\n\n private logCartEvent(financeDetails: FinanceDetails): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.showShoppingCart,\n userBehaviourEventTypes.show,\n {\n value: financeDetails.finance ? 'success' : 'fail',\n },\n );\n }\n}\n","import { XpsApiPartRequest } from '../../../xps-api/xps-api-part-request.abstract';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport class CheckStatusRequest extends XpsApiPartRequest {\n public readonly access_token: string;\n public readonly xps_fix_command = 'status';\n public readonly invoice: number;\n public readonly section = 'getstatus';\n\n public constructor(token: string | null, invoice: number) {\n super();\n\n if (token === null) {\n throw new TokenError();\n }\n\n this.access_token = token;\n this.invoice = invoice;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { CheckStatusRequest } from './check-status-request.class';\n\nexport type CheckStatusRequestParameters = ConstructorParameters<\n typeof CheckStatusRequest\n>;\n\nexport type CheckStatusRequestFactory = (\n ...args: CheckStatusRequestParameters\n) => CheckStatusRequest;\n\nexport const checkStatusRequestFactoryToken: InjectionToken<CheckStatusRequestFactory> =\n new InjectionToken<CheckStatusRequestFactory>('CheckStatusRequest');\n\nexport const checkStatusRequestFactoryProvider: ValueProvider = {\n provide: checkStatusRequestFactoryToken,\n useValue: (...args: CheckStatusRequestParameters) =>\n new CheckStatusRequest(...args),\n};\n","import { Properties } from '../../../../properties.type';\nimport { StatusEnum } from '../../status.enum';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport class CheckStatusResponse {\n public readonly status?: StatusEnum;\n public readonly final?: boolean;\n public readonly isPaymentAccountAttached?: boolean;\n\n public constructor(parameters: Properties<CheckStatusResponse>) {\n this.status = parameters.status;\n this.final = parameters.final;\n this.isPaymentAccountAttached = parameters.isPaymentAccountAttached;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { CheckStatusResponse } from './check-status-response.class';\n\ntype ResponseParameters = ConstructorParameters<typeof CheckStatusResponse>;\n\nexport type CheckStatusResponseFactory = (\n ...args: ResponseParameters\n) => CheckStatusResponse;\n\nexport const checkStatusResponseFactoryToken: InjectionToken<CheckStatusResponseFactory> =\n new InjectionToken<CheckStatusResponseFactory>('CheckStatusResponse');\n\nexport const checkStatusResponseFactoryProvider: ValueProvider = {\n provide: checkStatusResponseFactoryToken,\n useValue: (...args: ResponseParameters) => new CheckStatusResponse(...args),\n};\n","import { Inject, Injectable } from '@angular/core';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { XpsResponse } from '../../xps-response.interface';\nimport { StatusEnum } from '../status.enum';\nimport { ResponseError } from '../../../exceptions-handling/errors/response-error.class';\nimport {\n CheckStatusRequestFactory,\n checkStatusRequestFactoryToken,\n} from './request/check-status-request.token';\nimport {\n CheckStatusResponseFactory,\n checkStatusResponseFactoryToken,\n} from './response/check-status-response.token';\nimport { XpsApiPart } from '../../xps-api/xps-api-part.abstract';\nimport { XpsApiService } from '../../xps-api/xps-api.service';\nimport { CheckStatusResponse } from './response/check-status-response.class';\nimport { XpsResponseErrorsMappingService } from '../../../errors-mapping/xps-response-errors-mapping.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CheckStatusService extends XpsApiPart<CheckStatusResponse> {\n private invoice!: number;\n\n public constructor(\n private readonly xpsApiService: XpsApiService,\n private readonly settingsService: SettingsService,\n private readonly xpsResponseErrorsMappingService: XpsResponseErrorsMappingService,\n @Inject(checkStatusRequestFactoryToken)\n private readonly requestFactory: CheckStatusRequestFactory,\n @Inject(checkStatusResponseFactoryToken)\n private readonly responseFactory: CheckStatusResponseFactory,\n ) {\n super();\n }\n\n public setRequestParams(invoice: number): void {\n this.invoice = invoice;\n }\n\n public request(): void {\n const requestParams = this.requestFactory(\n this.settingsService.token,\n this.invoice,\n );\n\n this.xpsApiService\n .directPaymentRequest(requestParams)\n .then((xpsResponse: XpsResponse) => {\n const response =\n this.xpsResponseErrorsMappingService.mapErrors(xpsResponse);\n const checkStatusResponse = this.responseFactory({\n status: response.status as StatusEnum,\n final: response.final,\n isPaymentAccountAttached: response.is_payment_account_attached,\n });\n\n this.emitResponse(checkStatusResponse);\n })\n .catch((error: Error) => {\n throw new ResponseError(error.message);\n });\n }\n}\n","export enum WebSocketStatus {\n statusChanged = 'status_changed',\n troubledStatus = 'troubled_status',\n}\n","export enum WebSocketClientType {\n nchan = 'nchan',\n centrifugo = 'centrifugo',\n}\n","export enum MessageTags {\n WS = 'webSocket',\n HEADLESS_UI = 'headlessUi',\n}\n","import { MessageTags } from './message-tags.enum';\n\nexport class TaggedMessage {\n public name = 'TaggedMessage';\n public message: string;\n public tags: MessageTags[] = [];\n public extra: object;\n\n private readonly parentTag: MessageTags = MessageTags.HEADLESS_UI;\n\n public constructor(message: string, tags?: MessageTags[], extra?: object) {\n this.message = message;\n\n this.tags = [this.parentTag];\n\n if (tags) {\n const newTags = tags.filter(\n (t, i, arr) => !this.tags.includes(t) && arr.indexOf(t) === i,\n );\n this.tags = [...this.tags, ...newTags];\n }\n\n this.extra = extra || {};\n }\n}\n","import { Observable, Subject, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\nimport { WebSocketClient } from './web-socket.interface';\nimport { WebSocketClientType } from './web-socket-client-type.enum';\nimport { LoggerService } from '../exceptions-handling/logger/logger.service';\nimport { MessageTags, TaggedMessage } from '../exceptions-handling/messages';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NchanWebSocketService implements WebSocketClient {\n public static readonly reconnectionTimeoutIncrementFactor = 2;\n\n public url!: string;\n\n public type = WebSocketClientType.nchan;\n\n private static readonly timeoutsMs = {\n reconnection: 1500,\n reconnectionMaxDeviation: 1500,\n };\n\n private openPromise: Promise<unknown> | null = null;\n\n private reconnectionTimeoutMs!: number;\n private reconnectionTimerId: ReturnType<typeof setTimeout> | null = null;\n\n private readonly openConnectionTimerId: number | undefined;\n\n private connection!: WebSocket;\n\n private readonly incomingMessages$: Subject<MessageEvent> =\n new Subject<MessageEvent>();\n private readonly successfulReconnectionEventsProxy$: Subject<void> =\n new Subject<void>();\n\n public constructor(private readonly loggerService: LoggerService) {}\n\n public async open(url: string): Promise<unknown> {\n if (url === this.url) {\n this.close();\n }\n\n if (this.openPromise && this.url && url !== this.url && !this.isClosed()) {\n this.close();\n }\n\n if (this.openPromise && !this.isClosed()) {\n return this.openPromise;\n }\n\n this.url = url;\n\n this.openPromise = this.createConnection()\n .catch(async () => {\n return this.waitWhileNotReconnect();\n })\n .then(() => {\n this.connection.onclose = async () => this.open(url);\n });\n\n return this.openPromise;\n }\n\n public close(): void {\n this.clearReconnectionTimer();\n\n if (this.isClosed()) {\n return;\n }\n\n this.connection.onclose = null;\n this.connection.close();\n\n this.openPromise = null;\n\n this.url = '';\n }\n\n public get messages$(): Observable<string> {\n return this.incomingMessages$\n .asObservable()\n .pipe(map((event: MessageEvent<string>) => event.data));\n }\n\n public subscribeOnSuccessfulReconnection(next?: () => void): Subscription {\n return this.successfulReconnectionEventsProxy$\n .asObservable()\n .subscribe(next);\n }\n\n public isOpened(): boolean {\n return !this.isClosed();\n }\n\n private isClosed(): boolean {\n if (!this.connection) {\n return true;\n }\n\n return (\n [this.connection.CLOSED, this.connection.CLOSING] as number[]\n ).includes(this.connection.readyState);\n }\n\n /* istanbul ignore next */\n private clearReconnectionTimer(): void {\n if (this.reconnectionTimerId) {\n clearTimeout(this.reconnectionTimerId);\n this.reconnectionTimerId = null;\n }\n }\n\n /* istanbul ignore next */\n private setFirstReconnectionTimeout(): void {\n const min =\n NchanWebSocketService.timeoutsMs.reconnection -\n NchanWebSocketService.timeoutsMs.reconnectionMaxDeviation;\n const max =\n NchanWebSocketService.timeoutsMs.reconnection +\n NchanWebSocketService.timeoutsMs.reconnectionMaxDeviation;\n this.reconnectionTimeoutMs =\n Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n /* istanbul ignore next */\n private incrementReconnectionTimeout(): void {\n this.reconnectionTimeoutMs =\n this.reconnectionTimeoutMs *\n NchanWebSocketService.reconnectionTimeoutIncrementFactor;\n }\n\n /* istanbul ignore next */\n private async createConnection(): Promise<unknown> {\n this.connection = new WebSocket(this.url);\n this.connection.onmessage = (event: MessageEvent) => {\n const message = event.data as string;\n this.loggerService.info(\n new TaggedMessage(`websocket message received: ${message}`, [\n MessageTags.WS,\n ]),\n );\n this.incomingMessages$.next(event);\n };\n\n return new Promise<void>((resolve, reject) => {\n this.connection.onopen = () => {\n clearTimeout(this.openConnectionTimerId);\n resolve();\n };\n\n this.connection.onclose = () => {\n reject();\n };\n });\n }\n\n /* istanbul ignore next */\n private async reconnect(): Promise<boolean> {\n this.clearReconnectionTimer();\n\n return new Promise((resolve) => {\n this.reconnectionTimerId = setTimeout(() => {\n this.createConnection()\n .then(() => resolve(true))\n .catch(() => resolve(false));\n this.incrementReconnectionTimeout();\n }, this.reconnectionTimeoutMs);\n });\n }\n\n /* istanbul ignore next */\n private async waitWhileNotReconnect(): Promise<void> {\n this.clearReconnectionTimer();\n this.setFirstReconnectionTimeout();\n\n let isConnected = false;\n\n while (!isConnected) {\n isConnected = await this.reconnect();\n }\n\n this.successfulReconnectionEventsProxy$.next();\n }\n}\n","import { ErrorTags } from './elk-error-types.enum';\n\nimport { TaggedError } from './tagged-error.class';\n\nexport class WsError extends TaggedError {\n public constructor(message: string, channelName: string, tags?: ErrorTags[]) {\n tags = tags ? [...tags, ErrorTags.WS] : [ErrorTags.WS];\n\n const messageWithChannel = `${message}. ChannelName - ${channelName}`;\n\n super(messageWithChannel, tags);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport type {\n Centrifuge,\n DisconnectedContext,\n PublicationContext,\n Subscription as CentrifugeSubscription,\n} from 'centrifuge';\nimport { StreamPosition, SubscriptionOptions } from 'centrifuge/build/types';\nimport { WsError } from '../exceptions-handling/errors/ws-error.class';\nimport { ErrorTags } from '../exceptions-handling/errors/elk-error-types.enum';\nimport { WebSocketClient } from './web-socket.interface';\nimport { WebSocketClientType } from './web-socket-client-type.enum';\nimport { LoggerService } from '../exceptions-handling/logger/logger.service';\nimport { MessageTags, TaggedMessage } from '../exceptions-handling/messages';\nimport { TaggedError } from '../exceptions-handling/errors';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CentrifugoWebSocketService implements WebSocketClient {\n public static readonly reconnectionTimeoutIncrementFactor = 2;\n\n public type = WebSocketClientType.centrifugo;\n\n private static readonly timeoutsMs = {\n reconnection: 1000,\n reconnectionMaxDeviation: 1000,\n };\n\n private reconnectionTimeoutMs!: number;\n private reconnectionTimerId: ReturnType<typeof setTimeout> | null = null;\n\n private readonly openConnectionTimerId: number | undefined;\n\n private connection!: Centrifuge;\n private subscription!: CentrifugeSubscription;\n private subscriptionPosition?: StreamPosition;\n private isConnectionOpen = false;\n private isConnecting = false;\n private url!: string;\n private channel!: string;\n private prevSubscribedChannel?: string;\n\n private readonly incomingMessages$: Subject<PublicationContext> =\n new Subject<PublicationContext>();\n\n private readonly successfulReconnectionEventsProxy$: Subject<void> =\n new Subject<void>();\n\n public constructor(private readonly loggerService: LoggerService) {}\n\n public async open(url: string, channel: string): Promise<void> {\n if (url === this.url && channel === this.channel) {\n this.close();\n }\n\n try {\n this.url = url;\n this.channel = channel;\n await this.createConnection(url, channel);\n } catch (error: unknown) {\n // @ts-expect-error error is unknown\n const message = (error?.message || error) as string;\n const wsError = new WsError(\n `unknown websocket error: ${message}`,\n channel,\n );\n\n this.loggerService.error(wsError);\n }\n }\n\n public close(): void {\n this.clearReconnectionTimer();\n\n if (!this.isConnectionOpen) {\n return;\n }\n\n this.connection?.disconnect();\n\n this.url = '';\n this.channel = '';\n }\n\n public isOpened(): boolean {\n return this.isConnectionOpen || this.isConnecting;\n }\n\n public get messages$(): Observable<string> {\n return (\n this.incomingMessages$\n .asObservable()\n // event don't respect type from argument, it's weird\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n .pipe(map((event) => event.data))\n );\n }\n\n public subscribeOnSuccessfulReconnection(next?: () => void): Subscription {\n return this.successfulReconnectionEventsProxy$\n .asObservable()\n .subscribe(next);\n }\n\n /* istanbul ignore next */\n private clearReconnectionTimer(): void {\n if (this.reconnectionTimerId) {\n clearTimeout(this.reconnectionTimerId);\n this.reconnectionTimerId = null;\n }\n }\n\n /* istanbul ignore next */\n private setFirstReconnectionTimeout(): void {\n const min =\n CentrifugoWebSocketService.timeoutsMs.reconnection -\n CentrifugoWebSocketService.timeoutsMs.reconnectionMaxDeviation;\n const max =\n CentrifugoWebSocketService.timeoutsMs.reconnection +\n CentrifugoWebSocketService.timeoutsMs.reconnectionMaxDeviation;\n this.reconnectionTimeoutMs =\n Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n /* istanbul ignore next */\n private incrementReconnectionTimeout(): void {\n this.reconnectionTimeoutMs =\n this.reconnectionTimeoutMs *\n CentrifugoWebSocketService.reconnectionTimeoutIncrementFactor;\n }\n\n /* istanbul ignore next */\n private async getCentrifugoClient(): Promise<typeof Centrifuge> {\n return import('centrifuge').then((module) => module.Centrifuge);\n }\n\n /* istanbul ignore next */\n private async createConnection(\n url?: string,\n channel?: string,\n ): Promise<void> {\n if (this.isConnectionOpen || this.isConnecting) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const CentrifugeClient = await this.getCentrifugoClient();\n\n const websocketUrl = url ?? this.url;\n const websocketChannel = channel ?? this.channel;\n\n this.connection = new CentrifugeClient(websocketUrl, {\n debug: true,\n maxReconnectDelay: 1500,\n maxServerPingDelay: 1000,\n });\n\n return new Promise<void>((resolve, reject) => {\n this.connection\n .on('connecting', () => {\n this.isConnecting = true;\n })\n .on('connected', () => {\n this.onConnect();\n resolve();\n })\n .on('disconnected', (ctx) => {\n this.onDisconnect(ctx, websocketChannel);\n reject();\n })\n .on('error', (ctx) => {\n const message = `code ${ctx.error.code} - ${ctx.error.message}`;\n\n this.loggerService.error(\n new TaggedError(`connection error: ${message}`, [ErrorTags.WS], {\n channel: websocketChannel,\n }),\n );\n })\n .connect();\n\n this.subscription = this.connection.newSubscription(\n websocketChannel,\n this.getSubscriptionOptions(websocketChannel),\n );\n\n this.subscription\n .on('subscribed', (ctx) => {\n this.subscriptionPosition = ctx.streamPosition;\n this.prevSubscribedChannel = websocketChannel;\n })\n .on('publication', (ctx) => {\n const message = ctx.data as string;\n\n this.loggerService.info(\n new TaggedMessage(\n `websocket message received: ${message}`,\n [MessageTags.WS],\n { channel: websocketChannel },\n ),\n );\n\n this.incomingMessages$.next(ctx);\n })\n .on('error', (ctx) => {\n const message = `code ${ctx.error.code} - ${ctx.error.message}`;\n\n this.loggerService.error(\n new TaggedError(`subscription error: ${message}`, [ErrorTags.WS], {\n channel: websocketChannel,\n }),\n );\n })\n .subscribe();\n });\n }\n\n private onConnect(): void {\n clearTimeout(this.openConnectionTimerId);\n this.isConnecting = false;\n this.isConnectionOpen = true;\n }\n\n private onDisconnect(\n ctx: DisconnectedContext,\n websocketChannel: string,\n ): void {\n this.isConnecting = false;\n this.isConnectionOpen = false;\n\n /* If connection error, cause any connection error isn't 0 */\n if (ctx.code !== 0) {\n const message = `code ${ctx.code} - ${ctx.reason}`;\n\n this.loggerService.error(\n new TaggedError(`disconnected error: ${message}`, [ErrorTags.WS], {\n channel: websocketChannel,\n }),\n );\n\n (async () => {\n await this.waitWhileNotReconnect();\n })();\n }\n }\n\n private async reconnect(): Promise<boolean> {\n this.clearReconnectionTimer();\n\n return new Promise((resolve) => {\n this.reconnectionTimerId = setTimeout(() => {\n this.createConnection()\n .then(() => resolve(true))\n .catch(() => resolve(false));\n this.incrementReconnectionTimeout();\n }, this.reconnectionTimeoutMs);\n });\n }\n\n private async waitWhileNotReconnect(): Promise<void> {\n this.clearReconnectionTimer();\n this.setFirstReconnectionTimeout();\n\n let isConnected = false;\n\n const beforeTimer = performance.now();\n\n while (!isConnected) {\n isConnected = await this.reconnect();\n }\n\n const afterTimer = performance.now();\n\n const timerDuration = afterTimer - beforeTimer;\n\n this.loggerService.error(\n new TaggedError(\n `fallback to reconnection timer: duration ${timerDuration}ms`,\n [ErrorTags.WS],\n {\n channel: this.channel,\n },\n ),\n );\n\n this.successfulReconnectionEventsProxy$.next();\n }\n\n private getSubscriptionOptions(\n websocketChannel: string,\n ): Partial<SubscriptionOptions> {\n const options: Partial<SubscriptionOptions> = {\n recoverable: true,\n };\n\n if (\n websocketChannel === this.prevSubscribedChannel &&\n this.subscriptionPosition\n ) {\n options.since = this.subscriptionPosition;\n }\n\n return options;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NchanWebSocketService } from './nchan-web-socket.service';\nimport { CentrifugoWebSocketService } from './centrifugo-web-socket.service';\nimport { WebSocketClient } from './web-socket.interface';\nimport { WebSocketClientType } from './web-socket-client-type.enum';\n\n// @todo: remove this factory and switch to centrifugo client after centrifugo issues resolved\n@Injectable({\n providedIn: 'root',\n})\nexport class WebSocketFactory {\n public constructor(\n private readonly nchanWebSocket: NchanWebSocketService,\n private readonly centrifugoWebSocket: CentrifugoWebSocketService,\n ) {}\n\n public createWebSocketClient(\n url: string,\n clientType: WebSocketClientType,\n ): WebSocketClient {\n if (clientType === WebSocketClientType.centrifugo) {\n return this.centrifugoWebSocket;\n }\n\n return this.nchanWebSocket;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { WebSocketFactory } from '../../../web-socket/web-socket.factory';\nimport { WebSocketClient } from '../../../web-socket/web-socket.interface';\nimport { WebSocketClientType } from '../../../web-socket/web-socket-client-type.enum';\nimport { WebSocketStatus } from './websocket-status.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketStatusService {\n private webSocketSubscription: Subscription | undefined;\n private webSocketReconnectionSubscription: Subscription | undefined;\n private readonly reinsuranceCheckStatus: {\n timeoutId: ReturnType<typeof setTimeout> | null;\n readonly timeoutMs: number;\n } = {\n timeoutId: null,\n timeoutMs: 180000,\n };\n\n private readonly needCheckStatusSubject = new Subject<void>();\n private readonly statusChangedSubject = new Subject<void>();\n\n private webSocketClient: WebSocketClient | null = null;\n\n public get needCheckStatus$(): Observable<void> {\n return this.needCheckStatusSubject.asObservable();\n }\n public get statusChanged$(): Observable<void> {\n return this.statusChangedSubject.asObservable();\n }\n\n public get isOpened(): boolean {\n return this.webSocketClient?.isOpened() ?? false;\n }\n\n public constructor(private readonly webSocketFactory: WebSocketFactory) {}\n\n public async checkStatusWithWebSocket(\n webSocketUrl: string,\n webSocketChannelName: string,\n webSocketClientType: WebSocketClientType,\n ): Promise<void> {\n this.webSocketClient = this.webSocketFactory.createWebSocketClient(\n webSocketUrl,\n webSocketClientType,\n );\n\n await this.webSocketClient.open(webSocketUrl, webSocketChannelName);\n\n this.webSocketSubscription?.unsubscribe();\n this.webSocketSubscription = this.webSocketClient.messages$.subscribe(\n (message) => this.statusProcessing(message),\n );\n\n this.webSocketReconnectionSubscription =\n this.webSocketClient.subscribeOnSuccessfulReconnection(() => {\n this.needCheckStatusSubject.next();\n });\n this.needCheckStatusSubject.next();\n this.startReinsuranceCheckTimeout();\n }\n\n public closeWebSocket(): void {\n this.removeSubscription();\n this.webSocketClient?.close();\n this.clearReinsuranceCheckTimeout();\n }\n\n public startReinsuranceCheckTimeout(): void {\n this.clearReinsuranceCheckTimeout();\n this.reinsuranceCheckStatus.timeoutId = setTimeout(() => {\n this.needCheckStatusSubject.next();\n }, this.reinsuranceCheckStatus.timeoutMs);\n }\n\n private clearReinsuranceCheckTimeout(): void {\n if (this.reinsuranceCheckStatus.timeoutId) {\n clearTimeout(this.reinsuranceCheckStatus.timeoutId);\n this.reinsuranceCheckStatus.timeoutId = null;\n }\n }\n\n private statusProcessing(message: string): void {\n if (message === WebSocketStatus.statusChanged) {\n this.statusChangedSubject.next();\n this.closeWebSocket();\n this.clearReinsuranceCheckTimeout();\n }\n if (message === WebSocketStatus.troubledStatus) {\n this.clearReinsuranceCheckTimeout();\n this.closeWebSocket();\n }\n }\n\n private removeSubscription(): void {\n this.webSocketSubscription?.unsubscribe();\n this.webSocketReconnectionSubscription?.unsubscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { filter, Observable, Subject, takeUntil } from 'rxjs';\nimport { StatusRequestService } from '../status-request/status-request.service';\nimport { CheckStatusService } from '../check-status/check-status.service';\nimport { WebsocketStatusService } from '../websocket-status/websocket-status.service';\nimport { StatusSettings } from '../status-settings.interface';\nimport { StatusEnum } from '../status.enum';\nimport { StatusUpdated } from '../status-updated.interface';\nimport { StatusResponse } from '../status-request/response/status-response.class';\nimport { CheckStatusResponse } from '../check-status/response/check-status-response.class';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ListenStatusService {\n public isListening = false;\n\n private readonly websocketOpenedSubject = new Subject<StatusSettings>();\n private readonly statusUpdatedSubject = new Subject<StatusUpdated>();\n private readonly statusDoneSubject = new Subject<StatusSettings>();\n private destroy$ = new Subject<void>();\n private listenInvoice: number | null = null;\n private websocketInvoice: number | null = null;\n\n public get websocketOpened$(): Observable<StatusSettings> {\n return this.websocketOpenedSubject.asObservable();\n }\n\n public get statusUpdated$(): Observable<StatusUpdated> {\n return this.statusUpdatedSubject.asObservable();\n }\n\n public constructor(\n private readonly statusService: StatusRequestService,\n private readonly checkStatusService: CheckStatusService,\n private readonly websocketStatusService: WebsocketStatusService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {}\n\n public listen(invoice: number): Observable<StatusSettings> {\n if (this.isListening) {\n this.stopListening();\n }\n\n this.destroy$ = new Subject<void>();\n this.isListening = true;\n this.listenInvoice = invoice;\n\n this.subscribeStatusUpdate(invoice);\n this.subscribeCheckStatusUpdate();\n this.subscribeWebsocketEvent();\n\n this.checkStatusService.setRequestParams(invoice);\n\n return this.statusDoneSubject.asObservable();\n }\n\n public stopListening(): void {\n this.isListening = false;\n this.websocketStatusService.closeWebSocket();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public isListeningInvoice(invoice: number): boolean {\n return this.isListening && this.listenInvoice === invoice;\n }\n\n private subscribeStatusUpdate(invoice: number): void {\n this.statusService.response$\n .pipe(\n filter((statusResponse) => {\n return statusResponse?.status?.invoice === Number(invoice);\n }),\n takeUntil(this.destroy$),\n )\n .subscribe((statusResponse: StatusResponse | null) => {\n if (!statusResponse?.status) {\n return;\n }\n\n const statusSettings = {\n statusState: statusResponse.status.statusState,\n isCancelUser: statusResponse.status.isCancelUser,\n needWebSocket: statusResponse.status.needToCheck,\n backUrlSettings: statusResponse.status.backUrlSettings,\n autoRedirect: statusResponse.status.autoRedirect,\n webSocketUrl: statusResponse.status.webSocketUrl,\n webSocketChannelName: statusResponse.status.webSocketChannelName,\n webSocketClientType: statusResponse.status.webSocketClientType,\n };\n\n this.statusUpdatedSubject.next({\n statusResponse: statusResponse,\n statusSettings: statusSettings,\n });\n\n const isStatusError =\n statusSettings.statusState === StatusEnum.canceled ||\n statusSettings.statusState === StatusEnum.error ||\n statusSettings.isCancelUser;\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.changeStatus,\n userBehaviourEventTypes.manual,\n {\n instanceId: statusResponse.status.pid,\n value: statusResponse.status.statusState,\n },\n );\n\n if (isStatusError) {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.openStatusError,\n userBehaviourEventTypes.manual,\n {\n instanceId: statusResponse.status.pid,\n },\n );\n }\n\n if (statusSettings.needWebSocket) {\n if (\n !this.websocketStatusService.isOpened ||\n this.websocketInvoice !== invoice\n ) {\n this.websocketInvoice = invoice;\n this.openWebsocket(statusSettings);\n }\n return;\n }\n\n this.stopListening();\n this.statusDoneSubject.next(statusSettings);\n });\n }\n\n private subscribeCheckStatusUpdate(): void {\n this.checkStatusService.response$\n .pipe(takeUntil(this.destroy$))\n .subscribe((checkStatusResponse: CheckStatusResponse | null) => {\n if (!checkStatusResponse?.status) return;\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.checkStatusUpdate,\n userBehaviourEventTypes.manual,\n {\n value: checkStatusResponse.status ?? '',\n },\n );\n\n if (checkStatusResponse.status === StatusEnum.done) {\n this.statusService.request();\n this.websocketStatusService.closeWebSocket();\n return;\n }\n\n if (checkStatusResponse.final === false) {\n this.websocketStatusService.startReinsuranceCheckTimeout();\n return;\n }\n });\n }\n\n private subscribeWebsocketEvent(): void {\n this.websocketStatusService.needCheckStatus$\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.checkStatusService.request());\n\n this.websocketStatusService.statusChanged$\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.statusService.request());\n }\n\n private openWebsocket(statusSettings: StatusSettings): void {\n void this.websocketStatusService.checkStatusWithWebSocket(\n statusSettings.webSocketUrl,\n statusSettings.webSocketChannelName,\n statusSettings.webSocketClientType,\n );\n this.websocketOpenedSubject.next(statusSettings);\n }\n}\n","export enum TitleClass {\n done = 'done',\n cancel = 'cancel',\n cancelUser = 'canceluser',\n}\n","export enum SavePaymentMethodStatus {\n success = 'success',\n failed = 'failed',\n}\n","import { AppError } from '../exceptions-handling/errors/app-error.class';\n\nexport class XpsResponseError extends AppError {\n public constructor(message?: string) {\n super('XPS response failed' + (message ? `: \"${message}\".` : '.'));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { lastValueFrom, Observable, Subject } from 'rxjs';\nimport { HttpHeaders } from '@angular/common/http';\nimport { tap } from 'rxjs/operators';\nimport { SavedPaymentAccountChanges } from './saved-payment-account-changes.interface';\nimport { SettingsService } from '../../../../settings/settings.service';\nimport { SecureApiClient } from '../../../../http/secure-api/secure-api.service';\nimport { XpsResponseError } from '../../../xps-response.error';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SavedPaymentAccountChangesService {\n private readonly apiRoute = 'savedmethods/newaccountinfo';\n private readonly response = new Subject<SavedPaymentAccountChanges | null>();\n\n public constructor(\n private readonly settingsService: SettingsService,\n private readonly secureApi: SecureApiClient,\n ) {}\n\n public get response$(): Observable<SavedPaymentAccountChanges | null> {\n return this.response.asObservable();\n }\n\n public async request(invoice: number): Promise<SavedPaymentAccountChanges> {\n const requestParameters = {\n access_token: this.settingsService.token,\n invoice_id: invoice,\n };\n\n return lastValueFrom(\n this.secureApi\n .post<SavedPaymentAccountChanges>(\n this.apiRoute,\n new URLSearchParams(\n requestParameters as unknown as { [key: string]: string },\n ),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(\n tap((value: SavedPaymentAccountChanges) => {\n this.response.next(value);\n }),\n ),\n ).catch((error: Error) => {\n throw new XpsResponseError(error.message);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { StatusRequestParams } from '../status-request/status-request-params.interface';\nimport { Status } from '../status.interface';\nimport { firstValueFrom, Subscription } from 'rxjs';\nimport { StatusRequestService } from '../status-request/status-request.service';\nimport { StatusUpdatedActionCreator } from '../../actions/status-updated/status-updated.action.class';\nimport { ListenStatusService } from '../listen-status/listen-status.service';\nimport { SavedPaymentAccountChanges } from './api/saved-payment-account-changes.interface';\nimport { SavedPaymentAccountChangesService } from './api/saved-payment-account-changes.service';\nimport { TitleClass } from '../title-class.enum';\nimport { NextActionService } from '../../actions/next-action.service';\nimport { StatusEnum } from '../status.enum';\nimport { SavePaymentMethodStatus } from './save-payment-method-status.enum';\nimport { CheckStatusService } from '../check-status/check-status.service';\nimport { CheckStatusResponse } from '../check-status/response/check-status-response.class';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SavePaymentMethodStatusService {\n private savePaymentMethodStatus?: SavePaymentMethodStatus;\n private listenStatusSubscription!: Subscription;\n private statusChecked = false;\n private accountData?: SavedPaymentAccountChanges;\n private status?: Status | null;\n\n public constructor(\n private readonly statusRequestService: StatusRequestService,\n private readonly listenStatusService: ListenStatusService,\n private readonly savedPaymentAccountChangesService: SavedPaymentAccountChangesService,\n private readonly nextActionService: NextActionService,\n private readonly checkStatusService: CheckStatusService,\n private readonly statusUpdatedActionCreator: StatusUpdatedActionCreator,\n ) {}\n\n public async getStatus(params: StatusRequestParams): Promise<Status> {\n if (!this.accountData || !this.status) {\n this.statusRequestService.setRequestParams(params);\n this.statusRequestService.request();\n\n const statusResponse = await firstValueFrom(\n this.statusRequestService.response$,\n );\n\n this.status = statusResponse.status;\n this.status.isSavePaymentAccount = true;\n\n this.accountData = await this.getPaymentAccountData(params.invoice);\n }\n\n if (\n this.savingFailedOrCancel(this.status) ||\n (this.accountData && this.savingSuccessful(this.accountData, this.status))\n ) {\n return this.status;\n }\n\n if (!this.statusChecked) {\n this.checkStatus(params);\n this.status.statusState = StatusEnum.processing;\n return this.status;\n }\n\n this.statusChecked = false;\n this.status.statusState = StatusEnum.error;\n const outStatus = { ...this.status };\n this.status = null;\n return outStatus;\n }\n\n private checkStatus(params: StatusRequestParams): void {\n if (!this.statusChecked) {\n this.statusChecked = true;\n }\n this.startWaitingStatusUpdates(params.invoice);\n this.statusRequestService.request();\n }\n\n private savingFailedOrCancel(status?: Status | null): boolean {\n return (\n status?.titleClass === TitleClass.cancel ||\n status?.titleClass === TitleClass.cancelUser\n );\n }\n\n private savingSuccessful(\n accountData: SavedPaymentAccountChanges,\n status?: Status | null,\n checkStatus?: CheckStatusResponse,\n ): boolean {\n return !!(\n status?.titleClass === TitleClass.done &&\n (accountData?.new_account || checkStatus?.isPaymentAccountAttached)\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n private getPaymentAccountData(\n invoice: number,\n ): Promise<SavedPaymentAccountChanges> {\n return this.savedPaymentAccountChangesService.request(invoice);\n }\n\n private startWaitingStatusUpdates(invoice: number): void {\n if (this.listenStatusSubscription) {\n this.listenStatusSubscription.unsubscribe();\n this.listenStatusService.stopListening();\n }\n\n this.listenStatusService.listen(invoice);\n\n this.listenStatusSubscription =\n this.listenStatusService.statusUpdated$.subscribe(\n ({ statusResponse }) => {\n if (!statusResponse?.status) {\n return;\n }\n this.status = statusResponse.status;\n\n void firstValueFrom(this.checkStatusService.response$).then(\n (checkStatusResponse) => {\n if (checkStatusResponse?.final && statusResponse.status) {\n this.loadNewPaymentAccountData(\n statusResponse.status,\n checkStatusResponse,\n );\n }\n },\n );\n },\n );\n }\n\n private loadNewPaymentAccountData(\n status: Status,\n checkStatus: CheckStatusResponse,\n ): void {\n if (!status.invoice) {\n return;\n }\n void this.getPaymentAccountData(status.invoice).then(\n (accountChanges: SavedPaymentAccountChanges) => {\n if (accountChanges) {\n this.accountData = accountChanges;\n this.handleSavingStatus(status, accountChanges, checkStatus);\n }\n },\n );\n }\n\n private handleSavingStatus(\n status: Status,\n account: SavedPaymentAccountChanges,\n checkStatus: CheckStatusResponse,\n ): void {\n if (this.savingSuccessful(account, status, checkStatus)) {\n this.savePaymentMethodStatus = SavePaymentMethodStatus.success;\n } else {\n this.savePaymentMethodStatus = SavePaymentMethodStatus.failed;\n }\n\n this.listenStatusService.stopListening();\n this.listenStatusSubscription.unsubscribe();\n\n const isSavePaymentMethod = true;\n\n this.nextActionService.emitFlowUpdates(\n this.statusUpdatedActionCreator.getActionData({\n statusResponse: status,\n isSavePaymentMethodMode: isSavePaymentMethod,\n savePaymentMethodStatus: this.savePaymentMethodStatus,\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { firstValueFrom, Observable, skip, Subscription } from 'rxjs';\nimport { StatusRequestService } from './status-request/status-request.service';\nimport { StatusRequestParams } from './status-request/status-request-params.interface';\nimport { ListenStatusService } from './listen-status/listen-status.service';\nimport { Status } from './status.interface';\nimport { NextActionService } from '../actions/next-action.service';\nimport { StatusUpdatedActionCreator } from '../actions/status-updated/status-updated.action.class';\nimport { UrlService } from '../../url/url.service';\nimport { requiredStatusSearchParams } from './status-request/required-status-search-params.const';\nimport { statusSearchParamsMap } from './status-request/status-search-params.map';\nimport { FinanceDetailsService } from '../finance-details/finance-details.service';\nimport { SavePaymentMethodStatusService } from './save-payment-method-status/save-payment-method-status.service';\nimport { XpsBoolean } from '../../xps-boolean.enum';\nimport { StatusSettings } from './status-settings.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StatusService {\n private listenStatusSubscription: Subscription | null = null;\n\n public constructor(\n private readonly urlService: UrlService,\n private readonly statusRequestService: StatusRequestService,\n private readonly financeDetailsService: FinanceDetailsService,\n private readonly listenStatusService: ListenStatusService,\n private readonly nextActionService: NextActionService,\n private readonly savePaymentMethodStatusService: SavePaymentMethodStatusService,\n private readonly statusUpdatedActionCreator: StatusUpdatedActionCreator,\n ) {}\n\n public async getStatus(params: StatusRequestParams): Promise<Status> {\n const isSavePaymentMethodMode =\n params?.isSavePaymentAccount === XpsBoolean.true;\n if (isSavePaymentMethodMode) {\n return this.savePaymentMethodStatusService.getStatus(params);\n }\n\n this.statusRequestService.setRequestParams(params);\n\n this.startWaitingStatusUpdates(params.invoice);\n\n this.statusRequestService.request();\n\n const statusResponse = await firstValueFrom(\n this.statusRequestService.response$,\n );\n\n this.financeDetailsService.emitWithStatus(statusResponse.status);\n\n return statusResponse.status;\n }\n\n public async getStatusWithUrlSearchParams(url?: string): Promise<Status> {\n const searchParams = this.getRequestParamsFromUrl(url);\n\n if (!searchParams) {\n throw new Error('No required search params to get status');\n }\n\n return this.getStatus(searchParams);\n }\n\n public listenFinalStatus(invoice: number): Observable<StatusSettings> {\n return this.listenStatusService.listen(invoice);\n }\n\n private getRequestParamsFromUrl(url?: string): StatusRequestParams | null {\n const searchParams = this.urlService.getSearchParams(url ?? '');\n const keys = new Set(Object.keys(searchParams));\n\n if (\n requiredStatusSearchParams.some((requiredKey) => !keys.has(requiredKey))\n ) {\n return null;\n }\n\n const params: { [key: string]: string | number } = {};\n statusSearchParamsMap.forEach((settings, key) => {\n params[settings.key] = settings.converter(searchParams[key]);\n });\n\n return params as unknown as StatusRequestParams;\n }\n\n private startWaitingStatusUpdates(invoice: number): void {\n if (this.listenStatusService.isListeningInvoice(invoice)) {\n return;\n }\n\n this.listenStatusService.listen(invoice);\n\n this.listenStatusSubscription?.unsubscribe();\n this.listenStatusSubscription = this.listenStatusService.statusUpdated$\n .pipe(skip(1))\n .subscribe(({ statusResponse }) => {\n this.financeDetailsService.emitWithStatus(statusResponse.status);\n\n this.nextActionService.emitFlowUpdates(\n this.statusUpdatedActionCreator.getActionData({ statusResponse }),\n );\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { EmitDataService } from '../emit-data.service.abstract';\nimport { CreditCardState } from './credit-card-state.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CreditCardStateService extends EmitDataService<CreditCardState> {}\n","import { Injectable } from '@angular/core';\nimport { googlePayPid } from '../../../sdk-payment-systems/sdk-payment-methods.const';\nimport { FieldNames } from '../../field-names.enum';\nimport { InitializeResponse } from '../../requests/initialize/response/initialize-response.class';\nimport { InitializeActionCreator } from '../action.interface';\nimport {\n InitializeSpecialButtonAction,\n SpecialButtonActionType,\n} from './special-button.action.type';\nimport { ErrorTags } from '../../../exceptions-handling/errors/elk-error-types.enum';\nimport { LoggerService } from '../../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../../exceptions-handling/errors';\n\n@Injectable()\nexport class InitializeSpecialButtonActionCreator\n implements InitializeActionCreator\n{\n public type: SpecialButtonActionType = 'special_button';\n private readonly pids: number[] = [googlePayPid];\n private readonly sdkPaymentMethodsName = new Map<number, string>([\n [googlePayPid, 'google-pay'],\n ]);\n\n public constructor(private readonly loggerService: LoggerService) {}\n\n public getActionData(\n response: InitializeResponse,\n ): InitializeSpecialButtonAction {\n return {\n type: this.type,\n data: {\n buttonName: this.getPaymentMethodName(response.paymentForm?.pid),\n },\n };\n }\n\n public isSuitable(response: InitializeResponse): boolean {\n if (!response.paymentForm) return false;\n\n const hasGooglePayInitDataField = response.paymentForm.fields.some(\n (field) => field.name === FieldNames.googlePayInitData,\n );\n\n return (\n this.pids.includes(response.paymentForm.pid) && hasGooglePayInitDataField\n );\n }\n\n private getPaymentMethodName(pid = 0): string {\n const buttonName = this.sdkPaymentMethodsName.get(pid);\n\n if (!buttonName) {\n this.loggerService.error(\n new TaggedError(\n 'No special button for provided pid',\n [ErrorTags.GOOGLEPAY],\n {\n pid,\n },\n ),\n );\n throw new Error('Special button not found');\n }\n\n return buttonName;\n }\n}\n","import { InjectionToken, ProviderToken } from '@angular/core';\nimport { InitializeSpecialButtonActionCreator } from './special-button/special-button.action.class';\nimport { InitializeActionCreator } from './action.interface';\n\nexport type InitializeNextActionTokens = Array<\n ProviderToken<InitializeActionCreator>\n>;\n\nexport const initializeNextActionsToken =\n new InjectionToken<InitializeActionCreator>('InitializeNextActions');\n\nexport const initializeNextActions: InitializeNextActionTokens = [\n InitializeSpecialButtonActionCreator,\n];\n","import { Inject, Injectable, Injector, ProviderToken } from '@angular/core';\nimport { InitializeResponse } from '../requests/initialize/response/initialize-response.class';\nimport { InitializeActionCreator } from './action.interface';\nimport {\n initializeNextActionsToken,\n InitializeNextActionTokens,\n} from './initialize-next-actions';\nimport { InitializeNextAction } from './next-action.interface';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InitializeNextActionService {\n private readonly initializeNextActionsList: InitializeActionCreator[] = [];\n\n public constructor(\n @Inject(initializeNextActionsToken)\n private readonly initializeNextActionTokens: InitializeNextActionTokens,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly injector: Injector,\n ) {\n this.fillNextActionsList();\n }\n\n public getNextAction(\n response: InitializeResponse,\n ): InitializeNextAction | null {\n const nextAction = this.findNextAction(response);\n\n if (!nextAction) return null;\n\n this.logNextAction(nextAction);\n return nextAction.getActionData(response);\n }\n\n private fillNextActionsList(): void {\n this.initializeNextActionTokens.forEach(\n (nextAction: ProviderToken<InitializeActionCreator>) => {\n const item = this.injector.get<InitializeActionCreator>(nextAction);\n this.initializeNextActionsList.push(item);\n },\n );\n }\n\n private findNextAction(\n response: InitializeResponse,\n ): InitializeActionCreator | undefined {\n return this.initializeNextActionsList.find(\n (nextAction: InitializeActionCreator) => {\n return nextAction.isSuitable(response);\n },\n );\n }\n\n private logNextAction(nextAction: InitializeActionCreator): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.initializeNextAction,\n 'manual',\n { value: nextAction.type },\n );\n }\n}\n","export enum ThreeDsStatusWebSocketTypes {\n status3DS_changed = 'status3DS_changed',\n}\n","export enum ThreeDsStatusTypes {\n completed = 'completed',\n challenge = 'challenge',\n checkout = 'checkout',\n collectDfp = 'collect_dfp',\n}\n","export class StatusThreeDsRequest {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public readonly access_token: string;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public readonly threeDSTrXid: string;\n\n public constructor(token: string, threeDsId: string) {\n this.access_token = token;\n this.threeDSTrXid = threeDsId;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { StatusThreeDsRequest } from './status-three-ds-request.class';\n\nexport type StatusThreeDsRequestParameters = ConstructorParameters<\n typeof StatusThreeDsRequest\n>;\n\nexport type StatusThreeDsRequestFactory = (\n ...args: StatusThreeDsRequestParameters\n) => StatusThreeDsRequest;\n\nexport const statusThreeDsRequestFactoryToken: InjectionToken<StatusThreeDsRequestFactory> =\n new InjectionToken<StatusThreeDsRequestFactory>('StatusThreeDsRequest');\n\nexport const statusThreeDsRequestFactoryProvider: ValueProvider = {\n provide: statusThreeDsRequestFactoryToken,\n useValue: (...args: StatusThreeDsRequestParameters) =>\n new StatusThreeDsRequest(...args),\n};\n","import { ThreeDsCheckoutForm } from '../three-ds-checkout-form.interface';\nimport { Properties } from '../../../../../properties.type';\nimport { ThreeDsForm } from '../../../three-ds-form.interface';\n\nexport class StatusThreeDsResponse {\n public readonly status: string;\n public readonly checkoutForm?: ThreeDsCheckoutForm;\n public readonly collectDfpParameters?: ThreeDsForm;\n\n public constructor(params: Properties<StatusThreeDsResponse>) {\n this.status = params.status;\n this.checkoutForm = params.checkoutForm;\n this.collectDfpParameters = params.collectDfpParameters;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { StatusThreeDsResponse } from './status-three-ds-response.class';\n\nexport type StatusThreeDsResponseParameters = ConstructorParameters<\n typeof StatusThreeDsResponse\n>;\n\nexport type StatusThreeDsResponseFactory = (\n ...args: StatusThreeDsResponseParameters\n) => StatusThreeDsResponse;\n\nexport const statusThreeDsResponseFactoryToken: InjectionToken<StatusThreeDsResponseFactory> =\n new InjectionToken<StatusThreeDsResponseFactory>('StatusThreeDsResponse');\n\nexport const statusThreeDsResponseFactoryProvider: ValueProvider = {\n provide: statusThreeDsResponseFactoryToken,\n useValue: (...args: StatusThreeDsResponseParameters) =>\n new StatusThreeDsResponse(...args),\n};\n","import { lastValueFrom, Observable, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { SecureApiClient } from '../../../../http/secure-api/secure-api.service';\nimport { SettingsService } from '../../../../settings/settings.service';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\nimport { XpsResponseError } from '../../../xps-response.error';\nimport { ThreeDsForm } from '../../three-ds-form.interface';\nimport { StatusThreeDsResponseApi } from './status-three-ds-response.interface';\nimport {\n StatusThreeDsRequestFactory,\n statusThreeDsRequestFactoryToken,\n} from './request/status-three-ds-request.token';\nimport {\n StatusThreeDsResponseFactory,\n statusThreeDsResponseFactoryToken,\n} from './response/status-three-ds-response.token';\nimport { StatusThreeDsResponse } from './response/status-three-ds-response.class';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StatusThreeDsService {\n public get response$(): Observable<StatusThreeDsResponse | null> {\n return this.response.asObservable();\n }\n\n private readonly apiRoute = 'secure3d/check';\n private readonly response = new Subject<StatusThreeDsResponse | null>();\n\n public constructor(\n private readonly secureApi: SecureApiClient,\n private readonly settingsService: SettingsService,\n @Inject(statusThreeDsRequestFactoryToken)\n private readonly requestFactory: StatusThreeDsRequestFactory,\n @Inject(statusThreeDsResponseFactoryToken)\n private readonly responseFactory: StatusThreeDsResponseFactory,\n ) {}\n\n public request(data: ThreeDsForm): void {\n const token = this.settingsService.token;\n\n if (!token) {\n throw new TokenError();\n }\n const requestParams = this.requestFactory(token, data.threeDSTrXid);\n\n void lastValueFrom(\n this.secureApi\n .post<StatusThreeDsResponseApi>(\n this.apiRoute,\n new URLSearchParams({ ...requestParams }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(\n map((response) => {\n const statusResponse = this.responseFactory({\n status: response.secure3d.status,\n checkoutForm: response.secure3d.checkout_form,\n collectDfpParameters: response.secure3d.collect_dfp_parameters,\n });\n\n this.response.next(statusResponse);\n }),\n ),\n ).catch((error: Error) => {\n throw new XpsResponseError(error.message);\n });\n }\n}\n","export class NotifyDfpStatusRequest {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public readonly access_token: string;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public readonly threeDSTrXid: string;\n\n public readonly secure3dCompind: 'Y' | 'N';\n\n public constructor(params: {\n token: string;\n threeDsTrXid: string;\n isCompind: boolean;\n }) {\n this.access_token = params.token;\n this.threeDSTrXid = params.threeDsTrXid;\n this.secure3dCompind = params.isCompind ? 'Y' : 'N';\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { NotifyDfpStatusRequest } from './notify-dfp-status-request.class';\n\nexport type NotifyDfpStatusRequestParameters = ConstructorParameters<\n typeof NotifyDfpStatusRequest\n>;\n\nexport type NotifyDfpStatusRequestFactory = (\n ...args: NotifyDfpStatusRequestParameters\n) => NotifyDfpStatusRequest;\n\nexport const notifyDfpStatusRequestFactoryToken: InjectionToken<NotifyDfpStatusRequestFactory> =\n new InjectionToken<NotifyDfpStatusRequestFactory>('NotifyDfpStatusRequest');\n\nexport const notifyDfpStatusRequestFactoryProvider: ValueProvider = {\n provide: notifyDfpStatusRequestFactoryToken,\n useValue: (...args: NotifyDfpStatusRequestParameters) =>\n new NotifyDfpStatusRequest(...args),\n};\n","import { lastValueFrom } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { SecureApiClient } from '../../../../http/secure-api/secure-api.service';\nimport { SettingsService } from '../../../../settings/settings.service';\nimport {\n NotifyDfpStatusRequestFactory,\n notifyDfpStatusRequestFactoryToken,\n} from './request/notify-dfp-status-request.token';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\nimport { XpsResponseError } from '../../../xps-response.error';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotifyDfpStatusService {\n private readonly apiRouteComplete = 'secure3d/notify';\n\n public constructor(\n private readonly secureApi: SecureApiClient,\n private readonly settingsService: SettingsService,\n @Inject(notifyDfpStatusRequestFactoryToken)\n private readonly requestFactory: NotifyDfpStatusRequestFactory,\n ) {}\n\n /*\n * isCompind is a flag of dfp expired state\n */\n public request(threeDsId: string, isCompind: boolean): void {\n const token = this.settingsService.token;\n\n if (!token) {\n throw new TokenError();\n }\n\n const requestParams = this.requestFactory({\n token: token,\n threeDsTrXid: threeDsId,\n isCompind,\n });\n\n lastValueFrom(\n this.secureApi.post(\n this.apiRouteComplete,\n new URLSearchParams({ ...requestParams }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n ),\n ).catch((error: Error) => {\n throw new XpsResponseError(error.message);\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { windowToken } from '../../../window.token';\nimport { ExtendedWindow } from '../../../extended-window.interface';\nimport { NotifyDfpStatusService } from '../api/notify-dfp-status/notify-dfp-status.service';\nimport { ThreeDsForm } from '../three-ds-form.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DfpCollectService {\n private readonly iframeName = 'iframeDFP';\n private readonly formName = 'formDFP';\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n private readonly notifyDfpStatusService: NotifyDfpStatusService,\n ) {}\n\n public collectDfpStatus(threeDsForm: ThreeDsForm): void {\n if (threeDsForm.waitCallback) {\n this.openIframeWithPostRequest(threeDsForm, false);\n } else {\n this.openIframeWithPostRequest(threeDsForm, true);\n }\n }\n\n /*\n * This method create invisible iframe with required params and after that it submit form in iframe\n * */\n private openIframeWithPostRequest(\n threeDsForm: ThreeDsForm,\n isNeedNotifyAfterLoad: boolean,\n ): void {\n this.window.document.getElementById(this.iframeName)?.remove();\n this.window.document.getElementById(this.formName)?.remove();\n this.createIframe(isNeedNotifyAfterLoad, threeDsForm.threeDSTrXid);\n this.postFormToIframe(\n threeDsForm.threeDSMethod,\n threeDsForm.threeDSMethodData,\n );\n }\n\n /*\n * isNeedNotifyAfterLoad is need to send notification of dft to server\n * */\n private createIframe(\n isNeedNotifyAfterLoad: boolean,\n threeDsTrXid: string,\n ): void {\n const attributes: { [key: string]: string } = {\n name: this.iframeName,\n id: this.iframeName,\n src: 'about:blank',\n style: 'display:none',\n };\n\n const iFrame = this.window.document.createElement('iframe');\n this.setAttributes(iFrame, attributes);\n this.window.document.body.appendChild(iFrame);\n\n // dynamically created iframe triggers onload event twice\n let isAlreadySent = false;\n\n if (isNeedNotifyAfterLoad) {\n (\n this.window.document.getElementById(\n this.iframeName,\n ) as HTMLIFrameElement\n ).onload = () => {\n if (isAlreadySent) return;\n\n this.notifyDfpStatusService.request(threeDsTrXid, true);\n isAlreadySent = true;\n };\n }\n }\n\n /*\n * This method will submit form in our iframe\n * */\n private postFormToIframe(url: string, threeDsMethod: string): void {\n const form = this.createForm();\n this.window.document.body.appendChild(form);\n\n form.setAttribute('action', url);\n form.setAttribute('target', this.iframeName);\n form.appendChild(this.createInput('threeDSMethodData', threeDsMethod));\n\n form.submit();\n }\n\n /*\n * This method will create invisible form with required params\n */\n private createForm(): HTMLFormElement {\n const form = this.window.document.createElement('form');\n const initAttributes: { [key: string]: string } = {\n name: this.formName,\n id: this.formName,\n style: 'display:none',\n method: 'POST',\n enctype: 'application/x-www-form-urlencoded',\n };\n\n this.setAttributes(form, initAttributes);\n\n return form;\n }\n\n private createInput(name: string, value: string): HTMLInputElement {\n const input = this.window.document.createElement('input');\n input.type = 'hidden';\n input.name = name;\n input.value = value;\n return input;\n }\n\n /*\n * This method will set attributes to form/iframe\n * */\n private setAttributes(\n element: HTMLElement,\n attributes: { [key: string]: string },\n ): void {\n Object.keys(attributes).forEach((name) => {\n element.setAttribute(name, attributes[name]);\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Timer, Timers } from './timer.interface';\nimport { windowToken } from '../../../window.token';\nimport { ExtendedWindow } from '../../../extended-window.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ReinsuranceCheckService {\n private timers: Timers = {};\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {}\n\n public addTimer(timer: Timer): void {\n if (!timer) {\n return;\n }\n\n this.removeTimer(timer.id);\n\n this.timers[timer.id] = timer;\n\n const timerInStorage = this.timers[timer.id] as unknown as Timer;\n\n timerInStorage.timeoutRef = this.window.setTimeout(() => {\n timerInStorage.callback();\n\n this.timers[timer.id] = null;\n }, timerInStorage.timeoutMs) as unknown as number;\n }\n\n public removeTimer(id: string): void {\n const timerInStorage = this.timers[id];\n\n if (!timerInStorage) {\n return;\n }\n\n this.window.clearTimeout(timerInStorage.timeoutRef);\n this.timers[id] = null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { WebSocketFactory } from '../../../web-socket/web-socket.factory';\nimport { WebSocketClient } from '../../../web-socket/web-socket.interface';\nimport { StatusThreeDsService } from '../api/status-three-ds/status-three-ds.service';\nimport { NotifyDfpStatusService } from '../api/notify-dfp-status/notify-dfp-status.service';\nimport { ThreeDsStatusWebSocketTypes } from '../three-ds-status-websocket-types.enum';\nimport { ThreeDsForm } from '../three-ds-form.interface';\nimport { ThreeDsStatusTypes } from '../api/status-three-ds/status-types.enum';\nimport { DfpCollectService } from '../dfp-collect/dfp-collect.service';\nimport { ReinsuranceCheckService } from '../reinsurance-check/reinsurance-check.service';\nimport { StatusUpdate } from './status-update.interface';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { userBehaviourEventTypes } from '../../../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThreeDs20Service {\n public get statusUpdates$(): Observable<StatusUpdate> {\n return this.statusUpdates.asObservable();\n }\n\n private webSocketSubscription: Subscription | undefined;\n private webSocketReconnectionSubscription: Subscription | undefined;\n private webSocketClient: WebSocketClient | null = null;\n\n private readonly statusUpdates = new Subject<StatusUpdate>();\n\n private statusRequestSubscription: Subscription | null = null;\n private latestDfpParameters: ThreeDsForm | null = null;\n\n private readonly notifyDfpTimerId = 'notify-dfp';\n private readonly notifyDfpTimeoutMs = 10000;\n\n private readonly statusThreeDsTimerId = 'status-three-ds';\n private readonly statusThreeDsTimeoutMs = 180000;\n\n public constructor(\n private readonly statusThreeDsService: StatusThreeDsService,\n private readonly notifyDfpStatusService: NotifyDfpStatusService,\n private readonly webSocketFactory: WebSocketFactory,\n private readonly dfpCollectService: DfpCollectService,\n private readonly reinsuranceCheckService: ReinsuranceCheckService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {}\n\n public async checkThreeDs20(threeDsForm: ThreeDsForm | null): Promise<void> {\n if (!threeDsForm) {\n return;\n }\n\n this.clearLatestDfpParameters();\n\n this.reinsuranceCheckService.addTimer({\n id: this.notifyDfpTimerId,\n timeoutMs: this.notifyDfpTimeoutMs,\n callback: () => {\n const threeDsTransactionId =\n this.latestDfpParameters?.threeDSTrXid ?? threeDsForm.threeDSTrXid;\n this.notifyDfpStatusService.request(threeDsTransactionId, false);\n },\n });\n\n this.webSocketClient = this.webSocketFactory.createWebSocketClient(\n threeDsForm.webSocketChannelUrl,\n threeDsForm.webSocketClientType,\n );\n\n await this.webSocketClient.open(\n threeDsForm.webSocketChannelUrl,\n threeDsForm.webSocketClientType,\n );\n this.webSocketSubscription?.unsubscribe();\n\n this.webSocketSubscription = this.webSocketClient.messages$.subscribe(\n (message) => {\n if (message !== ThreeDsStatusWebSocketTypes.status3DS_changed) {\n return;\n }\n\n this.requestThreeDsStatus(threeDsForm);\n },\n );\n\n this.webSocketReconnectionSubscription?.unsubscribe();\n this.webSocketReconnectionSubscription =\n this.webSocketClient.subscribeOnSuccessfulReconnection(() => {\n this.requestThreeDsStatus(threeDsForm);\n });\n\n this.handleThreeDsUpdates(threeDsForm);\n this.requestThreeDsStatus(threeDsForm);\n\n this.reinsuranceCheckService.addTimer({\n id: this.statusThreeDsTimerId,\n timeoutMs: this.statusThreeDsTimeoutMs,\n callback: () => {\n this.requestThreeDsStatus(threeDsForm);\n },\n });\n }\n\n private requestThreeDsStatus(threeDsForm: ThreeDsForm): void {\n this.statusThreeDsService.request(this.latestDfpParameters ?? threeDsForm);\n }\n\n private handleThreeDsUpdates(threeDsForm: ThreeDsForm): void {\n this.statusRequestSubscription?.unsubscribe();\n this.statusRequestSubscription =\n this.statusThreeDsService.response$.subscribe((threeDsStatus) => {\n if (!threeDsStatus) {\n return;\n }\n\n if (threeDsStatus.collectDfpParameters) {\n this.latestDfpParameters = threeDsStatus.collectDfpParameters;\n }\n\n if (threeDsStatus.status === ThreeDsStatusTypes.completed) {\n this.stopReinsuranceMethods();\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.threeDs2complete,\n userBehaviourEventTypes.manual,\n );\n\n this.statusUpdates.next({\n type: 'complete',\n data: {\n statusUrl: threeDsForm.statusUrl,\n },\n });\n return;\n }\n\n if (\n threeDsStatus.status === ThreeDsStatusTypes.challenge &&\n threeDsStatus.checkoutForm\n ) {\n this.stopReinsuranceMethods();\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.threeDs2challenge,\n userBehaviourEventTypes.manual,\n );\n\n this.statusUpdates.next({\n type: 'challenge',\n data: threeDsStatus.checkoutForm,\n });\n }\n\n if (threeDsStatus.status === ThreeDsStatusTypes.collectDfp) {\n this.dfpCollectService.collectDfpStatus(\n this.latestDfpParameters ?? threeDsForm,\n );\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.threeDs2collectDfp,\n userBehaviourEventTypes.manual,\n );\n }\n\n if (\n threeDsStatus.status === ThreeDsStatusTypes.checkout &&\n threeDsStatus.checkoutForm\n ) {\n this.stopReinsuranceMethods();\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.threeDs2checkout,\n userBehaviourEventTypes.manual,\n );\n\n this.statusUpdates.next({\n type: 'checkout',\n data: threeDsStatus.checkoutForm,\n });\n }\n });\n }\n\n private stopReinsuranceMethods(): void {\n this.reinsuranceCheckService.removeTimer(this.notifyDfpTimerId);\n this.reinsuranceCheckService.removeTimer(this.statusThreeDsTimerId);\n this.webSocketClient?.close();\n this.statusRequestSubscription?.unsubscribe();\n }\n\n private clearLatestDfpParameters(): void {\n this.latestDfpParameters = null;\n }\n}\n","import { Subscription } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { NextActionService } from '../actions/next-action.service';\nimport { ThreeDs20Service } from './three-ds-20/three-ds20.service';\nimport { ThreeDsActionCreator } from '../actions/three-ds/three-ds.action.class';\nimport { CheckStatusActionCreator } from '../actions/check-status/check-status.action.class';\nimport { ThreeDsRedirectActionCreator } from '../actions/three-ds-redirect/three-ds-redirect.action.class';\nimport { SubmitResponse } from '../requests/submit/response/submit-response.class';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThreeDsService {\n private statusSubscription: Subscription | null = null;\n\n public constructor(\n private readonly threeDs20Service: ThreeDs20Service,\n private readonly nextActionService: NextActionService,\n private readonly checkStatusActionCreator: CheckStatusActionCreator,\n private readonly threeDsActionCreator: ThreeDsActionCreator,\n private readonly threeDsRedirectActionCreator: ThreeDsRedirectActionCreator,\n ) {}\n\n public checkThreeDs(params: SubmitResponse): void {\n /*\n At this moment we support only 3ds 2.0 version.\n 3ds 1.0 currently working by our redirect logic (Redirect NextAction).\n If in future we will get new version of 3ds, we should add 3ds determination logic to this service\n */\n void this.threeDs20Service.checkThreeDs20(params.parameters.threeDSForm);\n\n this.statusSubscription?.unsubscribe();\n this.statusSubscription = this.threeDs20Service.statusUpdates$.subscribe(\n (statusUpdate) => {\n switch (statusUpdate.type) {\n case 'complete':\n return this.nextActionService.emitFlowUpdates(\n this.checkStatusActionCreator.getActionData(),\n );\n case 'challenge':\n return this.nextActionService.emitFlowUpdates(\n this.threeDsActionCreator.getActionData(statusUpdate),\n );\n case 'checkout':\n return this.nextActionService.emitFlowUpdates(\n this.threeDsRedirectActionCreator.getActionData(statusUpdate),\n );\n }\n },\n );\n }\n\n public stopChecking(): void {\n this.statusSubscription?.unsubscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { EmitDataService } from '../emit-data.service.abstract';\nimport { XpsMessage } from '../xps-message.interface';\nimport { UnescapeHtmlPipe } from '../../../shared/pipes/unescape-html/unescape-html.pipe';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormMessagesService extends EmitDataService<string[]> {\n public constructor(private readonly unescapeHtmlPipe: UnescapeHtmlPipe) {\n super();\n }\n\n public emitOnResponse(messages?: XpsMessage[]): void {\n const mapInfoMessages = (infoMessage: XpsMessage): string =>\n this.unescapeHtmlPipe.transform(infoMessage.message);\n\n super.emit(messages?.map(mapInfoMessages) ?? []);\n }\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { PrintInstructionRequestInterface } from './print-instruction-request.interface';\n\nexport class PrintInstructionRequest {\n public readonly xsolla_num: string;\n public readonly public_id: string;\n public readonly payment_name: string;\n public readonly pid: number;\n\n public constructor(parameters: PrintInstructionRequestInterface) {\n this.xsolla_num = parameters.xsollaNumber;\n this.public_id = parameters.publicId;\n this.payment_name = parameters.title;\n this.pid = parameters.pid;\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { PrintInstructionRequest } from './print-instruction-request.class';\n\ntype RequestParameters = ConstructorParameters<typeof PrintInstructionRequest>;\n\nexport type PrintInstructionRequestFactory = (\n ...args: RequestParameters\n) => PrintInstructionRequest;\n\nexport const printInstructionRequestFactoryToken: InjectionToken<PrintInstructionRequestFactory> =\n new InjectionToken<PrintInstructionRequestFactory>(\n 'PrintInstructionResponse',\n );\n\nexport const printInstructionRequestFactoryProvider: ValueProvider = {\n provide: printInstructionRequestFactoryToken,\n useValue: (...args: RequestParameters) =>\n new PrintInstructionRequest(...args),\n};\n","import { Inject, Injectable } from '@angular/core';\nimport {\n printInstructionRequestFactoryToken,\n PrintInstructionRequestFactory,\n} from './request/print-instruction-request.token';\nimport { PrintInstructionRequestInterface } from './request/print-instruction-request.interface';\nimport { SecureApiClient } from '../../../http/secure-api/secure-api.service';\nimport { SettingsService } from '../../../settings/settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PrintInstructionService {\n private readonly apiRoute = 'xsollanumber';\n\n public constructor(\n private readonly settingsService: SettingsService,\n private readonly secureApi: SecureApiClient,\n @Inject(printInstructionRequestFactoryToken)\n private readonly printInstructionRequestFactory: PrintInstructionRequestFactory,\n ) {}\n\n public getPrintInstructionUrl(\n parameters: PrintInstructionRequestInterface,\n ): string {\n const printUrlParameters = {\n ...this.printInstructionRequestFactory(parameters),\n access_token: this.settingsService.token,\n };\n\n const printInstructionUrl = new URL(\n `${this.secureApi.baseUrl}${this.apiRoute}/printNumber`,\n );\n\n Object.entries(printUrlParameters).forEach(([key, parameter]) =>\n printInstructionUrl.searchParams.append(key, String(parameter)),\n );\n\n return printInstructionUrl.toString();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { InitializeResponse } from '../../requests/initialize/response/initialize-response.class';\nimport { SubmitResponse } from '../../requests/submit/response/submit-response.class';\nimport { PaymentConfiguration } from '../../payment-configuration.interface';\n\n@Injectable()\nexport abstract class BehaviourStrategy {\n public abstract name: string;\n\n protected paymentData!: InitializeResponse | SubmitResponse | null;\n protected paymentConfig!: PaymentConfiguration;\n\n public isSuitable(): boolean {\n return false;\n }\n\n public onInit(): void {}\n\n public onDestroy(): void {}\n\n public canAutoSubmit(): boolean {\n return false;\n }\n\n public setPaymentData(\n paymentData: InitializeResponse | SubmitResponse | null,\n ): void {\n this.paymentData = paymentData;\n }\n\n public setPaymentConfig(config: PaymentConfiguration): void {\n this.paymentConfig = config;\n }\n}\n","import { InitializeResponse } from './response/initialize-response.class';\n\nexport const isInitializeResponse = (\n value: unknown,\n): value is InitializeResponse => {\n return value instanceof InitializeResponse;\n};\n","import { Injectable } from '@angular/core';\nimport { BehaviourStrategy } from '../behaviour-strategy.abstract';\nimport { isInitializeResponse } from '../../../requests/initialize/is-initialize-response.function';\nimport { applePayId } from '../../../actions/redirect/ps4-pages/pages-payment-methods-id.const';\nimport { FieldNames } from '../../../field-names.enum';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\nimport { isSubmitResponse } from '../../../requests/submit/is-submit-response.function';\nimport { InitializeResponse } from '../../../requests/initialize/response/initialize-response.class';\n\n@Injectable()\nexport class ApplePayWithShippingAddressStrategy extends BehaviourStrategy {\n public name = 'ApplePayWithShippingAddressStrategy';\n\n public constructor() {\n super();\n }\n\n public isSuitable(): boolean {\n if (isInitializeResponse(this.paymentData)) {\n return this.paymentData.paymentForm?.pid === applePayId;\n }\n\n if (isSubmitResponse(this.paymentData)) {\n return this.paymentData.pid === applePayId;\n }\n\n return false;\n }\n\n public onInit(): void {\n this.hideField(FieldNames.zip);\n this.hideField(FieldNames.email);\n }\n\n private hideField(fieldName: FieldNames): void {\n if (\n !isInitializeResponse(this.paymentData) &&\n !isSubmitResponse(this.paymentData)\n ) {\n return;\n }\n\n const fields =\n this.paymentData instanceof InitializeResponse\n ? this.paymentData.paymentForm?.fields\n : this.paymentData.fields;\n\n const fieldForHide = fields?.find((field) => {\n return field.name === fieldName;\n });\n\n if (fieldForHide) {\n fieldForHide.isVisible = XpsBoolean.false;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviourStrategy } from '../behaviour-strategy.abstract';\nimport { isInitializeResponse } from '../../../requests/initialize/is-initialize-response.function';\nimport { googlePay } from '../../../actions/redirect/ps4-pages/pages-payment-methods-id.const';\nimport { FieldNames } from '../../../field-names.enum';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\n\n@Injectable()\nexport class GooglePayInstantFlowStrategy extends BehaviourStrategy {\n public name = 'GooglePayInstantFlowStrategy';\n\n public constructor() {\n super();\n }\n\n public isSuitable(): boolean {\n if (!isInitializeResponse(this.paymentData)) {\n return false;\n }\n\n const isInstantPayFlow = this.paymentData.paymentForm?.fields.some(\n (field) => {\n return field.name === FieldNames.googlePayInitData;\n },\n );\n\n return (\n this.paymentData.paymentForm?.pid === googlePay && !!isInstantPayFlow\n );\n }\n\n public onInit(): void {\n this.hideField(FieldNames.zip);\n this.hideField(FieldNames.email);\n }\n\n private hideField(fieldName: FieldNames): void {\n if (!isInitializeResponse(this.paymentData)) {\n return;\n }\n\n const fieldForHide = this.paymentData.paymentForm?.fields.find((field) => {\n return field.name === fieldName;\n });\n\n if (fieldForHide) {\n fieldForHide.isVisible = XpsBoolean.false;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviourStrategy } from '../behaviour-strategy.abstract';\nimport { isInitializeResponse } from '../../../requests/initialize/is-initialize-response.function';\nimport { googlePay } from '../../../actions/redirect/ps4-pages/pages-payment-methods-id.const';\nimport { FieldNames } from '../../../field-names.enum';\nimport { XpsBoolean } from '../../../../xps-boolean.enum';\nimport { Field } from '../../../field.interface';\n\n@Injectable()\nexport class GooglePayRegularFlowStrategy extends BehaviourStrategy {\n public name = 'GooglePayRegularFlowStrategy';\n\n public constructor() {\n super();\n }\n\n public isSuitable(): boolean {\n if (!isInitializeResponse(this.paymentData)) {\n return false;\n }\n\n const isInstantPayFlow = this.paymentData.paymentForm?.fields.some(\n (field) => {\n return field.name === FieldNames.googlePayInitData;\n },\n );\n\n return this.paymentData.paymentForm?.pid === googlePay && !isInstantPayFlow;\n }\n\n public canAutoSubmit(): boolean {\n const visibleFields = this.getVisibleFields();\n\n return visibleFields.length === 0;\n }\n\n private getVisibleFields(): Field[] {\n if (!isInitializeResponse(this.paymentData)) {\n return [];\n }\n\n return (\n this.paymentData.paymentForm?.fields.filter(\n (field) => field.isVisible === XpsBoolean.true && field.isMandatory,\n ) ?? []\n );\n }\n}\n","import { InjectionToken, ProviderToken } from '@angular/core';\nimport { BehaviourStrategy } from './strategies/behaviour-strategy.abstract';\nimport { ApplePayWithShippingAddressStrategy } from './strategies/apple-pay-with-shipping-address/apple-pay-with-shipping-address.strategy';\nimport { GooglePayInstantFlowStrategy } from './strategies/google-pay-instant-flow/google-pay-instant-flow.strategy';\nimport { GooglePayRegularFlowStrategy } from './strategies/google-pay-regular-flow/google-pay-regular-flow.strategy';\n\nexport type BehaviourStrategyTokens = Array<ProviderToken<BehaviourStrategy>>;\n\nexport const behaviourStrategiesToken =\n new InjectionToken<BehaviourStrategyTokens>('BehaviourStrategies');\n\nexport const behaviourStrategies: BehaviourStrategyTokens = [\n ApplePayWithShippingAddressStrategy,\n GooglePayInstantFlowStrategy,\n GooglePayRegularFlowStrategy,\n];\n","import { Inject, Injectable, Injector, ProviderToken } from '@angular/core';\nimport { BehaviourStrategy } from './strategies/behaviour-strategy.abstract';\nimport {\n behaviourStrategiesToken,\n BehaviourStrategyTokens,\n} from './behaviour-strategies';\nimport { InitializeResponse } from '../requests/initialize/response/initialize-response.class';\nimport { SubmitResponse } from '../requests/submit/response/submit-response.class';\nimport { PaymentConfiguration } from '../payment-configuration.interface';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable()\nexport class PaymentBehaviourService {\n public constructor(\n @Inject(behaviourStrategiesToken)\n private readonly behaviourStrategyTokens: BehaviourStrategyTokens,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly injector: Injector,\n ) {}\n\n public getApplicableBehaviourStrategies(\n paymentData: InitializeResponse | SubmitResponse | null,\n config: PaymentConfiguration,\n ): BehaviourStrategy[] {\n const strategies = this.getBehaviourStrategies();\n\n const applicableStrategies = strategies.filter(\n (behaviourStrategy: BehaviourStrategy) => {\n behaviourStrategy.setPaymentData(paymentData);\n behaviourStrategy.setPaymentConfig(config);\n return behaviourStrategy.isSuitable();\n },\n );\n\n this.logApplicableStrategies(applicableStrategies);\n return applicableStrategies;\n }\n\n private getBehaviourStrategies(): BehaviourStrategy[] {\n return this.behaviourStrategyTokens.map(\n (behaviourStrategyToken: ProviderToken<BehaviourStrategy>) =>\n this.injector.get<BehaviourStrategy>(behaviourStrategyToken),\n );\n }\n\n private logApplicableStrategies(strategies: BehaviourStrategy[]): void {\n if (!strategies.length) return;\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applicablePaymentStrategies,\n 'manual',\n { value: strategies.map((strategy) => strategy.name) },\n );\n }\n}\n","import {\n BehaviorSubject,\n filter,\n Observable,\n Subject,\n take,\n takeUntil,\n} from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { FormControlStatus, FormGroup, UntypedFormGroup } from '@angular/forms';\nimport { SubmitResponse } from './requests/submit/response/submit-response.class';\nimport { FormService } from './form/form.service';\nimport { InitializeResponse } from './requests/initialize/response/initialize-response.class';\nimport { InitializeService } from './requests/initialize/initialize.service';\nimport { Status } from './status/status.interface';\nimport { SubmitService } from './requests/submit/submit.service';\nimport { SyncService } from './requests/sync/sync.service';\nimport { StatusService } from './status/status.service';\nimport { NextActionService } from './actions/next-action.service';\nimport { InitializeNextActionService } from './initialize-actions/initialize-next-action.service';\nimport { ControlConfig } from './form/controls/control-config';\nimport { ControlConfigService } from './form/controls/control-config.service';\nimport { FinanceDetails } from './finance-details/finance-details.interface';\nimport { FinanceDetailsService } from './finance-details/finance-details.service';\nimport { NextAction } from './actions/next-action.interface';\nimport { UserBehaviourAnalyticsService } from '../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { eventCategories } from '../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-categories';\nimport { XpsSummary } from './xps-summary.interface';\nimport { Field } from './field.interface';\nimport { PaymentConfiguration } from './payment-configuration.interface';\nimport { isSubmitResponse } from './requests/submit/is-submit-response.function';\nimport { XpsBoolean } from '../xps-boolean.enum';\nimport { StatusRequestParams } from './status/status-request/status-request-params.interface';\nimport { ValidationErrors } from './form/validators/validation-errors.interface';\nimport { InputEventName } from './form/input-event.enum';\nimport { FormFieldsStatus } from './form/form-fields-status.interface';\nimport { ThreeDsService } from './three-ds/three-ds.service';\nimport { XpsCommand } from './xps-comand.enum';\nimport { CreditCardStateService } from './credit-card-state/credit-card-state.service';\nimport { FieldNames } from './field-names.enum';\nimport { FormState } from './form/form-state.interface';\nimport { FormMessagesService } from './form-messages/form-messages.service';\nimport { XpsMessage } from './xps-message.interface';\nimport { SettingsService } from '../settings/settings.service';\nimport { CountryService } from '../country/country.service';\nimport { SdkPaymentSystemsInitialData } from '../sdk-payment-systems/sdk-payment-systems-initial-data.interface';\nimport { FormResponse } from './form-response.interface';\nimport { CheckStatusActionCreator } from './actions/check-status/check-status.action.class';\nimport { ControlStatus } from './form/control-status.interface';\nimport { InitializedForm } from './initialized-form.inteface';\nimport { CashPaymentData } from './cash-payment-data.interface';\nimport { PrintInstructionService } from '../xsolla-number/api/print-instruction/print-instruction.service';\nimport { SyncResponse } from './requests/sync/response/sync-response.class';\nimport { ErrorTags } from '../exceptions-handling/errors/elk-error-types.enum';\nimport { BehaviourStrategy } from './payment-behaviour/strategies/behaviour-strategy.abstract';\nimport { PaymentBehaviourService } from './payment-behaviour/payment-behaviour.service';\nimport { fieldsAllowedToOverride } from './form/overrided-fields/fields-allowed-to-override';\nimport { overrideFieldConfigs } from './form/overrided-fields/override-field-config';\nimport { LoggerService } from '../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../exceptions-handling/errors';\nimport { updateAfterErrorRules } from './update-submit-response/update-after-error-rules.const';\nimport { fieldsAllowedToExternalChange } from './external-change-fields.const';\nimport { TranslateService } from '@ngx-translate/core';\nimport { isGooglePaySettingsGuard } from './payment-configurations/types/is-google-pay-settings.guard';\nimport { isCreditCardSettingsGuard } from './payment-configurations/types/is-credit-card-settings.guard';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentService {\n public form: UntypedFormGroup | null = null;\n\n public get formFieldsStatus$(): Observable<FormFieldsStatus> {\n return this.formFieldsStatusSubject.asObservable().pipe(filter(Boolean));\n }\n\n public get paymentForm$(): Observable<FormControlStatus | null> {\n return this._paymentForm$.asObservable();\n }\n\n public get formResponse$(): Observable<FormResponse | null> {\n return this._formResponse$.asObservable();\n }\n\n public get formResponseValue(): FormResponse | null {\n return this._formResponse$.getValue();\n }\n\n private data: InitializeResponse | SubmitResponse | null = null;\n private financeDetails: FinanceDetails | null = null;\n private focusFieldName: string | null = null;\n private fields: Field[] = [];\n private isSubmitAttempted = false;\n private config!: PaymentConfiguration;\n\n private destroy$ = new Subject<void>();\n private formDestroy$ = new Subject<void>();\n private readonly _paymentForm$ =\n new BehaviorSubject<FormControlStatus | null>(null);\n private readonly formFieldsStatusSubject =\n new BehaviorSubject<FormFieldsStatus | null>(null);\n private readonly _formResponse$ = new BehaviorSubject<FormResponse | null>(\n null,\n );\n\n private isSavingMethodMode = false;\n\n public constructor(\n private readonly loggerService: LoggerService,\n private readonly initializeService: InitializeService,\n private readonly submitService: SubmitService,\n private readonly syncService: SyncService,\n private readonly formService: FormService,\n private readonly statusService: StatusService,\n private readonly financeDetailsService: FinanceDetailsService,\n private readonly creditCardStateService: CreditCardStateService,\n private readonly nextActionService: NextActionService,\n private readonly initializeNextActionService: InitializeNextActionService,\n private readonly controlConfigService: ControlConfigService,\n private readonly threeDsService: ThreeDsService,\n private readonly formMessagesService: FormMessagesService,\n private readonly settingsService: SettingsService,\n private readonly countryService: CountryService,\n private readonly checkStatusActionCreator: CheckStatusActionCreator,\n private readonly printInstructionService: PrintInstructionService,\n private readonly paymentBehaviourService: PaymentBehaviourService,\n private readonly translateService: TranslateService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {}\n\n public async initialize(\n config: PaymentConfiguration,\n ): Promise<InitializedForm> {\n this.destroy$ = new Subject<void>();\n this.formDestroy$ = new Subject<void>();\n this.isSubmitAttempted = false;\n\n this.listenFinanceDetails();\n\n this.config = config;\n\n if (config.country) {\n this.countryService.setCountry(config.country);\n }\n\n this.data = await this.initializeService.request(config);\n\n this.initializeBehaviourStrategies();\n\n this.emitFormResponse(this.data);\n\n this.fields = this.getFields();\n this.setupInitialFieldValues();\n\n this.form = this.formService.createForm(this.fields);\n\n this.updatePidConfig();\n this.setupSyncService(this.form, this.fields, config);\n this.listenFormStatusChanges(this.form);\n\n const isNeedAutoSubmit = this.canAutoSubmit();\n\n if (isNeedAutoSubmit) {\n const nextAction = await this.submit();\n\n if (nextAction) {\n this.nextActionService.emitFlowUpdates(nextAction);\n }\n }\n\n this.emitFinanceDetails(this.data.paymentForm?.summary);\n this.emitFormFieldsStatus(this.form);\n\n this.emitFormMessages(this.getInitializeMessages());\n\n const excludedFields = [\n FieldNames.koreaLimitsInstruction,\n FieldNames.koreaCashReceiptInstruction,\n ];\n\n return {\n fields: this.fields.filter(\n (field: Field) =>\n field?.isVisible === XpsBoolean.true &&\n !excludedFields.includes(field?.name as FieldNames),\n ),\n isFormAutoSubmitted: isNeedAutoSubmit,\n nextAction: this.initializeNextActionService.getNextAction(this.data),\n };\n }\n\n public async submit(): Promise<NextAction | null | void> {\n if (!this.form) {\n throw new Error('form is empty!');\n }\n\n if (!this.form.valid) {\n this.logSubmitAttempt();\n this.isSubmitAttempted = true;\n this.form.markAllAsTouched();\n this.emitFormFieldsStatus(this.form);\n return;\n }\n\n this.logSubmit();\n\n this.isSavingMethodMode = this.fields.some(\n ({ name, value }) =>\n name === 'savePsAccountOnly' && value === XpsBoolean.true,\n );\n const submitResponse = await this.submitService.request(\n this.fields,\n this.form,\n this.config,\n );\n\n this.handleSubmitWithErrors(submitResponse);\n\n this.data = submitResponse;\n this.initializeBehaviourStrategies();\n\n this.emitFormResponse(this.data);\n\n if (!this.isSavingMethodMode) {\n this.emitFinanceDetails(submitResponse.summary, false);\n }\n this.emitFormMessages(submitResponse.messages);\n\n // Handle 3ds flow\n if (\n submitResponse.currentCommand === XpsCommand.create &&\n submitResponse.parameters.threeDSForm\n ) {\n this.runThreeDs();\n return;\n }\n\n const nextAction = this.nextActionService.getNextAction(submitResponse);\n\n this.fields = this.getFields();\n this.form = this.formService.createForm(this.fields);\n\n this.listenFormStatusChanges(this.form);\n this.syncService.setup(this.form, this.fields, this.config);\n\n return nextAction;\n }\n\n public async submitWithFields(fields?: Field[]): Promise<{\n response: SubmitResponse;\n nextAction: NextAction | null | void;\n }> {\n if (!this.form) {\n this.loggerService.error(\n new TaggedError('submit error: trying to submit with no form', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n throw new Error('form is empty!');\n }\n\n this.isSavingMethodMode = this.fields.some(\n ({ name, value }) =>\n name === 'savePsAccountOnly' && value === XpsBoolean.true,\n );\n const submitResponse = await this.submitService.request(\n fields ?? this.fields,\n this.form,\n this.config,\n );\n\n this.data = submitResponse;\n this.emitFormResponse(this.data);\n\n if (!this.isSavingMethodMode) {\n this.emitFinanceDetails(submitResponse.summary, false);\n }\n this.emitFormMessages(submitResponse.messages);\n\n this.fields = this.getFields();\n this.form = this.formService.createForm(this.fields);\n\n this.syncService.setup(this.form, this.fields, this.config);\n\n return {\n response: submitResponse,\n nextAction: this.nextActionService.getNextAction(submitResponse),\n };\n }\n\n public setupInitialFieldValues(): void {\n const fieldsToOverride = this.config.overrideFormFields;\n if (!fieldsToOverride) return;\n\n const overridableNames = new Set(\n Object.keys(fieldsToOverride).filter((name) =>\n fieldsAllowedToOverride.has(name as FieldNames),\n ),\n );\n\n for (const field of this.fields) {\n const fieldName = field.name;\n if (!overridableNames.has(fieldName)) continue;\n\n const config = overrideFieldConfigs[fieldName];\n if (!config) continue;\n\n const overriddenValue = fieldsToOverride[fieldName]?.initialValue;\n\n field.value = String(\n config.validator(overriddenValue)\n ? overriddenValue\n : config.defaultValue,\n );\n }\n }\n\n public getFields(): Field[] {\n if (this.data instanceof SubmitResponse) {\n return this.data.fields ?? [];\n }\n\n return this.data?.paymentForm?.fields ?? [];\n }\n\n public getControlStatus(name: FieldNames): ControlStatus | null {\n const control = this.form?.get(name);\n if (!control) {\n return null;\n }\n\n return {\n name,\n errors: control.errors,\n status: control.status,\n };\n }\n\n public async getInitialDataForSdkPaymentSystems(): Promise<SdkPaymentSystemsInitialData> {\n if (!this.data) {\n throw new Error('Should submit form first');\n }\n\n const sdkPaymentData = this.getSdkPaymentDataFromResponse(this.data);\n\n const shouldHandleUserBackRedirectOnSdkSide = isGooglePaySettingsGuard(\n this.config,\n )\n ? !!this.config.paymentMethodSettings?.useSdkHandlerForUserBackRedirect\n : false;\n\n return Promise.resolve({\n data: sdkPaymentData.checkoutData,\n sandbox: this.settingsService.isSandboxMode()\n ? XpsBoolean.true\n : XpsBoolean.false,\n country: this.countryService.getCountry(),\n fields: sdkPaymentData.fields,\n submitResponse: isSubmitResponse(this.data) ? this.data : null,\n summary: sdkPaymentData.summary,\n locale: this.translateService.getCurrentLang(),\n shouldHandleUserBackRedirectOnSdkSide,\n isThreeDsIndependentWindows:\n this.settingsService.settings.is_three_ds_independent_windows ?? false,\n });\n }\n\n public getQrCode(): string {\n if (!isSubmitResponse(this.data)) {\n throw new Error('Should submit form first');\n }\n\n return this.data.parameters.form.qr.title;\n }\n\n public getCashPaymentData(): CashPaymentData {\n if (!isSubmitResponse(this.data)) {\n throw new Error('Should submit form first');\n }\n\n const cashInstructionField = this.data.fields.find(\n (field) => field.name === 'payment_instruction',\n );\n\n const params = {\n isCashPaymentMethod: !!cashInstructionField,\n xsollaNumber: this.data.xsollaNumber.accountXsolla,\n pid: this.data.parameters.pid,\n publicId: this.data.parameters.public_id,\n title: this.data.parameters.title,\n projectName: this.settingsService.project.name,\n instruction: cashInstructionField?.title,\n };\n return {\n ...params,\n printUrl: this.printInstructionService.getPrintInstructionUrl(params),\n };\n }\n\n public getPid(): number | null {\n if (this.data instanceof SubmitResponse) {\n return this.data.parameters.pid;\n }\n\n if (this.data instanceof InitializeResponse) {\n return this.data.paymentForm?.pid ?? null;\n }\n\n return null;\n }\n\n public getSubmitButtonText(): string | null {\n if (this.data instanceof SubmitResponse) {\n return this.data.parameters.buyData.value;\n }\n\n if (this.data instanceof InitializeResponse) {\n return this.data.paymentForm?.buyData.value ?? null;\n }\n\n return null;\n }\n\n public async validate(field: Field): Promise<ValidationErrors | null> {\n const syncErrors = this.syncService.getSyncValidationErrors(field);\n\n if (syncErrors) {\n return Promise.resolve(syncErrors);\n }\n\n return this.syncService.validate(field);\n }\n\n public async calculateField(\n changedField: Field,\n fields: Field[],\n ): Promise<SyncResponse> {\n return this.syncService.request(changedField, fields, new FormGroup({}));\n }\n\n public runThreeDs(): void {\n if (!isSubmitResponse(this.data)) {\n throw new Error('Should submit form first');\n }\n\n this.threeDsService.checkThreeDs(this.data);\n }\n\n public getFinanceDetails(): FinanceDetails | null {\n return this.financeDetails;\n }\n\n public updateFieldFormState(fieldName: string, formState: FormState): void {\n if (this.form) {\n this.formService.updateFieldFormState(\n this.form,\n this.fields,\n fieldName,\n formState,\n );\n }\n }\n\n public getFieldFormState(fieldName: FieldNames): FormState | null {\n return this.formService.getFieldFormState(fieldName);\n }\n\n public async getStatus(): Promise<Status> {\n if (!isSubmitResponse(this.data)) {\n throw new Error('Should submit form first');\n }\n\n const params: StatusRequestParams = {\n pid: this.config.paymentMethodId,\n invoice: parseInt(this.data.fixInvoice ?? ''),\n signature: this.data.signature ?? '',\n locale:\n this.data.fields.find((field) => field.name === 'locale')?.value ??\n 'en',\n isSavePaymentAccount: this.isSavingMethodMode\n ? XpsBoolean.true\n : XpsBoolean.false,\n };\n return this.statusService.getStatus(params);\n }\n\n public async listenFinalStatus(): Promise<void> {\n const { invoice } = await this.getStatus();\n\n this.statusService\n .listenFinalStatus(invoice as unknown as number)\n .pipe(take(1))\n .subscribe(() => {\n this.nextActionService.emitFlowUpdates(\n this.checkStatusActionCreator.getActionData(),\n );\n });\n }\n\n public getFieldConfig(field: Field): ControlConfig | null {\n return this.controlConfigService.getConfig(field);\n }\n\n public changeFieldValue(name: string, value: string): void {\n const formControl = this.form?.get(name);\n formControl?.setValue(value);\n }\n\n public externalChangeFieldValue(name: FieldNames, value: string): void {\n const isFieldAllowedForExternalChange =\n fieldsAllowedToExternalChange.has(name);\n\n const isExternalVault =\n isCreditCardSettingsGuard(this.config) &&\n this.config.paymentMethodSettings?.useExternalVault;\n\n if (!isFieldAllowedForExternalChange || !isExternalVault) return;\n\n const formControl = this.form?.get(name);\n formControl?.setValue(value);\n }\n\n public changeFieldState(name: string, state: InputEventName): void {\n const formControl = this.form?.get(name);\n\n if (!this.form || !formControl) {\n return;\n }\n\n switch (state) {\n case InputEventName.blur: {\n formControl.markAsTouched();\n this.focusFieldName = null;\n break;\n }\n case InputEventName.focus: {\n formControl.markAsUntouched();\n this.focusFieldName = name;\n break;\n }\n }\n\n this.emitFormFieldsStatus(this.form);\n }\n\n public addExtraField(name: string, value: string): void {\n const isHaveField = this.fields.find((field) => {\n return field.name === name;\n });\n\n if (isHaveField) {\n this.fields = this.fields.map((field) => {\n if (field.name === name) {\n field.value = value;\n }\n\n return field;\n });\n return;\n }\n\n const field = {\n name: name,\n value: value,\n title: '',\n type: 'text',\n example: '',\n isMandatory: XpsBoolean.true,\n isVisible: XpsBoolean.false,\n } as Field;\n\n this.fields.push(field);\n }\n\n public destroy(): void {\n this.destroyBehaviourStrategies(this.config);\n\n this.data = null;\n this.financeDetails = null;\n this.form = null;\n this.fields = [];\n this.formDestroy$.next();\n this.destroy$.next();\n\n this.threeDsService.stopChecking();\n }\n\n private emitFinanceDetails(summary?: XpsSummary, needLogCart = true): void {\n this.financeDetailsService.emitWithSummary(summary, needLogCart);\n }\n\n private emitCreditCardState({\n idCardType,\n cardBinCountry,\n }: {\n idCardType: string;\n cardBinCountry?: string;\n }): void {\n this.creditCardStateService.emit({ idCardType, cardBinCountry });\n }\n\n private emitFormFieldsStatus(form: UntypedFormGroup): void {\n const formFieldsStatus: FormFieldsStatus = {};\n\n Object.keys(form.controls).forEach((name) => {\n const control = form.controls[name];\n formFieldsStatus[name] = {\n name: name,\n validationStatus: control.status,\n errors: control.errors,\n isFocused: this.focusFieldName === name,\n isTouched: control.touched,\n };\n });\n\n this.formFieldsStatusSubject.next(formFieldsStatus);\n }\n\n private emitFormMessages(messages?: XpsMessage[]): void {\n this.formMessagesService.emitOnResponse(messages);\n }\n\n private setupSyncService(\n form: UntypedFormGroup,\n fields: Field[],\n config: PaymentConfiguration,\n ): void {\n this.syncService.setup(form, fields, config);\n this.syncService.data$\n .pipe(takeUntil(this.destroy$))\n .subscribe((response) => {\n this.emitFinanceDetails(response.summary);\n this.emitFormMessages(response.messages);\n this.emitFormResponse(response);\n });\n\n this.syncService.fieldAsyncValidation$\n .pipe(takeUntil(this.destroy$))\n .subscribe((fieldAsyncValidation) => {\n switch (fieldAsyncValidation.field.name) {\n case FieldNames.cardNumber:\n this.emitCreditCardState({\n idCardType: fieldAsyncValidation.response.parameters.idCardType,\n cardBinCountry:\n fieldAsyncValidation.response.parameters.cardBinCountry,\n });\n }\n });\n }\n\n private listenFinanceDetails(): void {\n this.financeDetailsService.data$\n .pipe(takeUntil(this.destroy$))\n .subscribe((financeDetails) => (this.financeDetails = financeDetails));\n }\n\n private listenFormStatusChanges(form: UntypedFormGroup): void {\n form.statusChanges\n .pipe(takeUntil(this.formDestroy$))\n .subscribe((status: FormControlStatus) => {\n this.emitFormFieldsStatus(form);\n this._paymentForm$.next(status);\n });\n }\n\n /**\n * In case the form pid changes despite the one passed during initialization\n */\n private updatePidConfig(): void {\n const currentPid = this.getPid();\n if (currentPid) {\n this.config.paymentMethodId = currentPid;\n }\n }\n\n private emitFormResponse(data: FormResponse['data']): void {\n let type: FormResponse['type'];\n if (data instanceof InitializeResponse) {\n type = 'initialize';\n } else if (data instanceof SubmitResponse) {\n type = 'submit';\n } else {\n type = 'sync';\n }\n this._formResponse$.next({\n type,\n data,\n token: this.settingsService.token,\n isSandbox: this.settingsService.isSandboxMode(),\n });\n }\n\n private getInitializeMessages(): XpsMessage[] {\n const messages = (this.data as InitializeResponse).paymentForm?.messages;\n\n return messages ?? [];\n }\n\n private canAutoSubmit(): boolean {\n const response = this.data as InitializeResponse;\n if (!response.paymentForm) {\n return false;\n }\n\n const isRedirectMethod = response.paymentForm.isCheckout;\n const canSkipForm = response.paymentForm.skipForm;\n\n const isSuitableByStrategy = this.autoSubmitBehaviourStrategies(\n this.config,\n );\n\n return (!isRedirectMethod && canSkipForm) || isSuitableByStrategy;\n }\n\n private getSdkPaymentDataFromResponse(\n data: SubmitResponse | InitializeResponse,\n ): {\n checkoutData: string | null;\n fields: Field[];\n summary: XpsSummary | null;\n } {\n if (isSubmitResponse(data)) {\n return {\n checkoutData: data.parameters?.checkout.data.data,\n fields: data.fields,\n summary: data.summary,\n };\n }\n\n return {\n checkoutData: null,\n fields: data.paymentForm?.fields ?? [],\n summary: data.paymentForm?.summary ?? null,\n };\n }\n\n private initializeBehaviourStrategies(): void {\n const behaviourStrategies =\n this.paymentBehaviourService.getApplicableBehaviourStrategies(\n this.data,\n this.config,\n );\n\n behaviourStrategies.forEach((strategy: BehaviourStrategy) => {\n strategy.onInit();\n });\n }\n\n private destroyBehaviourStrategies(config: PaymentConfiguration): void {\n const behaviourStrategies =\n this.paymentBehaviourService.getApplicableBehaviourStrategies(\n this.data,\n config,\n );\n\n behaviourStrategies.forEach((strategy: BehaviourStrategy) => {\n strategy.onDestroy();\n });\n }\n\n private autoSubmitBehaviourStrategies(config: PaymentConfiguration): boolean {\n const behaviourStrategies =\n this.paymentBehaviourService.getApplicableBehaviourStrategies(\n this.data,\n config,\n );\n\n return behaviourStrategies.some((strategy: BehaviourStrategy) => {\n return strategy.canAutoSubmit();\n });\n }\n\n private handleSubmitWithErrors(submitResponse: SubmitResponse): void {\n if (!submitResponse.errors?.length) return;\n\n const fieldsMap = this.fields.reduce((map, field) => {\n if (field.value !== null) {\n const fieldValue = this.form?.get(field.name)?.value ?? field.value;\n map.set(field.name, fieldValue);\n }\n return map;\n }, new Map<string, string>());\n\n updateAfterErrorRules.forEach((rule) =>\n rule.apply(submitResponse, fieldsMap),\n );\n }\n\n private logSubmitAttempt(): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.attemptBuyNow,\n userBehaviourEventTypes.click,\n );\n }\n\n private logSubmit(): void {\n if (this.isSubmitAttempted) {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.attemptContinue,\n userBehaviourEventTypes.click,\n {\n eventCategory: eventCategories.withInvoice,\n },\n );\n }\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.clickBtnPay,\n userBehaviourEventTypes.click,\n {\n eventCategory: eventCategories.withInvoice,\n },\n );\n }\n}\n","export const euCountries = new Set([\n 'AT',\n 'BE',\n 'BG',\n 'HR',\n 'CY',\n 'CZ',\n 'DK',\n 'EE',\n 'FI',\n 'FR',\n 'DE',\n 'GR',\n 'HU',\n 'IE',\n 'IT',\n 'LV',\n 'LT',\n 'LU',\n 'MT',\n 'NL',\n 'PL',\n 'PT',\n 'RO',\n 'SK',\n 'SI',\n 'ES',\n 'SE',\n]);\n","import {\n auEasyPaymentId,\n auPayId,\n docomoId,\n linePayId,\n payPayId,\n softbankId,\n yMobileId,\n} from '../../shared/payment-methods-id.variable';\n\nconst sctlLinkUsa = 'https://xsolla.com/ja/sctl/xsolla-usa';\nconst sctlLinkJapan = 'https://xsolla.com/ja/sctl/xsolla-japan';\n\nconst sctlLinkMap = new Map<number, string>([\n [payPayId, sctlLinkJapan],\n [linePayId, sctlLinkJapan],\n [auPayId, sctlLinkJapan],\n [docomoId, sctlLinkJapan],\n [softbankId, sctlLinkJapan],\n [auEasyPaymentId, sctlLinkJapan],\n [yMobileId, sctlLinkJapan],\n]);\n\nexport const getSctlLink = (pid?: number): string => {\n if (!pid) {\n return sctlLinkUsa;\n }\n\n return sctlLinkMap.get(pid) ?? sctlLinkUsa;\n};\n","import { Injectable } from '@angular/core';\nimport { SettingsService } from '../settings/settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RefundPolicyService {\n public readonly defaultVersionId = 2;\n public readonly defaultUrl = 'https://xsolla.com/refund-policy-ps';\n\n public constructor(private readonly settingsService: SettingsService) {}\n\n public get url(): string {\n if (!this.settingsService.token) {\n return 'https://xsolla.com/refundpolicy/en-us';\n }\n const language = this.settingsService.user.local ?? 'en';\n const versionId =\n this.settingsService.project.refundPolicySettings?.policy_version_id ??\n this.defaultVersionId;\n const countryIso = this.settingsService.user.country.value ?? '';\n const projectId = this.settingsService.project.id;\n return `${this.defaultUrl}?policy_version_id=${versionId}&language=${language}&country=${countryIso}&project_id=${projectId}`;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DisclaimerService {\n public readonly disclaimer = 'disclaimer';\n}\n","import { Injectable } from '@angular/core';\nimport { LegalArea, LegalComponentConfig } from './legal.component.config';\nimport { SettingsService } from '../settings/settings.service';\nimport { RefundPolicyService } from './refund-policy.service';\nimport { DisclaimerService } from './disclaimer.service';\nimport { CountryService } from '../country/country.service';\nimport { euCountries } from '../country/eu-countries.const';\nimport { getSctlLink } from './get-sctl-link.function';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LegalService {\n private get isJapanUser(): boolean {\n return this.settingsService.user?.local === 'ja';\n }\n\n private get legalArea(): LegalArea {\n const userCountry =\n this.countryService.getCountry() || this.countryService.userIpCountry;\n\n switch (true) {\n case userCountry === 'US':\n return 'US';\n case userCountry === 'KR':\n return 'KR';\n case euCountries.has(userCountry):\n return 'EU';\n default:\n return 'other';\n }\n }\n\n public constructor(\n private readonly countryService: CountryService,\n private readonly settingsService: SettingsService,\n private readonly refundPolicyService: RefundPolicyService,\n private readonly disclaimerService: DisclaimerService,\n ) {}\n\n public getLegalComponentConfig(pid?: number): LegalComponentConfig {\n return {\n legalArea: this.legalArea,\n isJapanUser: this.isJapanUser,\n refundPolicyUrl: this.refundPolicyService.url,\n sctlPolicyUrl: getSctlLink(pid),\n disclaimer: this.disclaimerService.disclaimer,\n };\n }\n}\n","import { lastValueFrom } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { SettingsService } from '../settings/settings.service';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\nimport { SavedMethodsService } from '../saved-methods/saved-methods.service';\nimport { DeleteMethodResponse } from './delete-method-response.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EditSavedMethodsService {\n private readonly deleteRoute = 'savedmethods/delete';\n\n public constructor(\n private readonly savedMethodsService: SavedMethodsService,\n private readonly settingsService: SettingsService,\n private readonly secureApi: SecureApiClient,\n ) {}\n\n public async deleteSavedMethodRequest(\n id: number,\n type: string,\n ): Promise<boolean> {\n const token = this.settingsService.token;\n\n const parameters: {\n access_token: string;\n id: number;\n type: string;\n } = {\n access_token: token,\n id,\n type,\n };\n\n return lastValueFrom(\n this.secureApi.post<DeleteMethodResponse>(\n this.deleteRoute,\n new URLSearchParams(parameters as unknown as { [key: string]: string }),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n ),\n )\n .then(async () => {\n await this.savedMethodsService.getList(true);\n return true;\n })\n .catch(() => {\n return false;\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { interval, Observable, of, Subject } from 'rxjs';\nimport { debounce, filter, map } from 'rxjs/operators';\nimport { XhrAction } from './xhr-action.interface';\nimport { ExtendedWindow } from '../extended-window.interface';\nimport { windowToken } from '../window.token';\nimport { defaultApiUrl, sandboxApiUrl } from '../http/secure-api/api-url.const';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class XhrActionService {\n private readonly pauseTime = 1000;\n private readonly userInputEventNames: string[] = ['click', 'change'];\n private isXhrActionStarted = false;\n private apiRequestEntries: PerformanceResourceTiming[] = [];\n private cdnRequestEntries: PerformanceResourceTiming[] = [];\n private readonly entriesSubject = new Subject<PerformanceResourceTiming>();\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {}\n\n public getXhrAction(): Observable<XhrAction> {\n if (!this.window.performance || !this.window.PerformanceObserver) {\n return of();\n }\n\n this.getUserInput().subscribe(() =>\n this.window.performance.mark('userInput'),\n );\n\n this.getPerformance().subscribe((entry: PerformanceResourceTiming) =>\n this.processEntry(entry),\n );\n\n return this.getPauseEvent().pipe(\n map<PerformanceResourceTiming, XhrAction>(() => {\n const event: XhrAction = {\n name: this.getApiRequestName(),\n duration: this.getDuration([\n ...this.apiRequestEntries,\n ...this.cdnRequestEntries,\n ]),\n apiRequestCount: this.apiRequestEntries.length,\n apiRequestDuration: this.getDuration(this.apiRequestEntries),\n cdnRequestCount: this.cdnRequestEntries.length,\n cdnRequestDuration: this.getDuration(this.cdnRequestEntries),\n };\n\n this.stopXhrAction();\n\n return event;\n }),\n );\n }\n\n private processEntry(entry: PerformanceResourceTiming): void {\n const isApiRequest: boolean = entry.name.includes(\n defaultApiUrl || sandboxApiUrl,\n );\n\n const cdnUrl = '';\n const isCdnRequest: boolean =\n !isApiRequest && entry.name.startsWith(cdnUrl);\n\n if (this.isXhrActionStarted && isApiRequest) {\n this.apiRequestEntries.push(entry);\n }\n\n if (this.isXhrActionStarted && isCdnRequest) {\n this.cdnRequestEntries.push(entry);\n }\n\n if (isApiRequest && !this.isXhrActionStarted) {\n const userInputEntries: PerformanceEntry[] =\n this.window.performance.getEntriesByName('userInput', 'mark');\n const userInputEntry: PerformanceEntry =\n userInputEntries[userInputEntries.length - 1];\n\n if (userInputEntry) {\n this.startXhrAction(entry);\n }\n }\n\n if (isApiRequest || isCdnRequest) {\n this.entriesSubject.next(entry);\n }\n }\n\n private startXhrAction(xhrEntry: PerformanceResourceTiming): void {\n this.isXhrActionStarted = true;\n this.apiRequestEntries.push(xhrEntry);\n }\n\n private stopXhrAction(): void {\n this.isXhrActionStarted = false;\n this.apiRequestEntries = [];\n this.cdnRequestEntries = [];\n }\n\n private getUserInput(): Subject<void> {\n const userInputSubject: Subject<void> = new Subject();\n\n this.userInputEventNames.forEach((eventName: string) => {\n this.window.addEventListener(eventName, () => userInputSubject.next());\n });\n\n return userInputSubject;\n }\n\n private getPerformance(): Subject<PerformanceResourceTiming> {\n const performanceSubject: Subject<PerformanceResourceTiming> =\n new Subject();\n\n if (this.window.PerformanceObserver) {\n const observer = new this.window.PerformanceObserver(\n (list: PerformanceObserverEntryList) => {\n list.getEntries().forEach((entry: PerformanceEntry): void => {\n return performanceSubject.next(entry as PerformanceResourceTiming);\n });\n },\n );\n\n observer.observe({ entryTypes: ['resource'] });\n }\n\n return performanceSubject;\n }\n\n private getApiRequestName(): string {\n return this.apiRequestEntries[0].name.split(defaultApiUrl)[1].split('?')[0];\n }\n\n private getDuration(entries: PerformanceResourceTiming[]): number {\n if (!entries.length) {\n return 0;\n }\n\n const firstApiRequestEntry: PerformanceResourceTiming = entries.reduce(\n (prev, current) => (prev.startTime < current.startTime ? prev : current),\n );\n const lastApiRequestEntry: PerformanceResourceTiming = entries.reduce(\n (prev, current) =>\n prev.responseEnd > current.responseEnd ? prev : current,\n );\n\n return Math.round(\n lastApiRequestEntry.responseEnd - firstApiRequestEntry.startTime,\n );\n }\n\n private getPauseEvent(): Observable<PerformanceResourceTiming> {\n return this.entriesSubject.pipe(\n debounce(() => interval(this.pauseTime)),\n filter(() => this.isXhrActionStarted),\n );\n }\n}\n","import { Inject, Injectable, NgZone } from '@angular/core';\nimport { UserBehaviourAnalyticsService } from '../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { XhrActionService } from './xhr-action.service';\nimport { XhrAction } from './xhr-action.interface';\nimport { userBehaviourEventTypes } from '../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { eventCategories } from '../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-categories';\nimport { Observable } from 'rxjs';\nimport { ExtendedWindow } from '../extended-window.interface';\nimport { windowToken } from '../window.token';\nimport { defaultApiUrl, sandboxApiUrl } from '../http/secure-api/api-url.const';\nimport { SendEventMethodOptionsInterface } from '../user-behaviour-analytics/user-behaviour-analytics.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PerformanceService {\n private readonly navigationPerformance =\n this.window.performance?.getEntriesByType('navigation')?.[0] as\n | PerformanceNavigationTiming\n | undefined;\n\n private get resourcesPerformance(): PerformanceResourceTiming[] | undefined {\n return this.window.performance?.getEntriesByType('resource') as\n | PerformanceResourceTiming[]\n | undefined;\n }\n\n private get network(): number | undefined {\n return this.navigationPerformance?.responseEnd;\n }\n\n private get runApp(): number | null {\n const domComplete = this.navigationPerformance?.domComplete;\n\n if (domComplete == null || this.network == null) {\n return null;\n }\n\n return domComplete - this.network;\n }\n\n public constructor(\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly xhrActionService: XhrActionService,\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n private readonly zone: NgZone,\n ) {}\n\n public init(): undefined | void {\n if (!this.window?.performance) {\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n this.measureInitialValues();\n this.listenXhrActions();\n });\n }\n\n private getInitRequest(): {\n duration: number;\n timeReserve: number;\n utilsDuration: number;\n } | null {\n if (!this.navigationPerformance || !this.resourcesPerformance) {\n return null;\n }\n\n const utilsTiming: PerformanceResourceTiming | undefined =\n this.resourcesPerformance.find(\n (performance: PerformanceResourceTiming) =>\n performance.name.includes(`${defaultApiUrl}utils`) ||\n performance.name.includes(`${sandboxApiUrl}utils`),\n );\n\n if (!utilsTiming) {\n return null;\n }\n\n return {\n duration: utilsTiming.responseEnd - utilsTiming.fetchStart,\n timeReserve:\n this.navigationPerformance.domComplete - utilsTiming.responseEnd,\n utilsDuration: utilsTiming.duration,\n };\n }\n\n private sendMeasurement(\n name: string,\n value: number | null | undefined,\n additional?: {\n extraValue?: number | null | undefined;\n dimension1?: number | null | undefined;\n dimension2?: number | null | undefined;\n },\n ): void {\n if (value == null) {\n return;\n }\n\n const eventOptions: SendEventMethodOptionsInterface = {\n value: value.toString(),\n };\n\n if (additional) {\n Object.keys(additional).forEach((optionName: string): void => {\n const optionValue: number | null | undefined =\n additional[optionName as keyof typeof additional];\n if (optionValue != null) {\n eventOptions[optionName as keyof typeof additional] =\n optionValue.toString();\n }\n });\n }\n\n void this.userBehaviourAnalyticsService.send(\n name,\n userBehaviourEventTypes.manual,\n eventOptions,\n );\n }\n\n private measureRunApp(): void {\n const sendRunApp = (): void =>\n void setTimeout(() => this.sendMeasurement('run-app', this.runApp));\n\n if (document.readyState === 'complete') {\n sendRunApp();\n } else {\n this.window.addEventListener('load', () => sendRunApp());\n }\n }\n\n private measureInitialValues(): void {\n const initRequest = this.getInitRequest();\n if (initRequest) {\n this.sendMeasurement('utils', initRequest.duration, {\n extraValue: initRequest.timeReserve,\n dimension1: initRequest.utilsDuration,\n });\n }\n this.sendMeasurement('network', this.network);\n this.measureRunApp();\n }\n\n private listenXhrActions(): void {\n const xhrAction: Observable<XhrAction> =\n this.xhrActionService.getXhrAction();\n\n xhrAction.subscribe((event: XhrAction) => {\n void this.userBehaviourAnalyticsService.send(\n `xhr-action:${event.name}`,\n userBehaviourEventTypes.manual,\n {\n value: event.duration.toString(),\n eventCategory: eventCategories.withoutInvoice,\n extraValue: JSON.stringify(event),\n },\n );\n });\n }\n}\n","import { SavedMethodsService } from '../saved-methods/saved-methods.service';\nimport { PaymentMethodsService } from '../payment-methods/payment-methods.service';\nimport { Injectable } from '@angular/core';\nimport { CombinedPaymentMethods } from './combined-payment-methods.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CombinedPaymentMethodsService {\n public constructor(\n private readonly paymentMethodsService: PaymentMethodsService,\n private readonly savedMethodsService: SavedMethodsService,\n ) {}\n\n public async getCombinedPaymentMethods(): Promise<CombinedPaymentMethods> {\n const [paymentMethods, savedMethods] = await Promise.all([\n this.paymentMethodsService.getAllMethods(),\n this.savedMethodsService.getList(),\n ]);\n\n return {\n paymentMethods: {\n quick: paymentMethods.especial,\n remained: paymentMethods.remained,\n },\n savedMethods,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { map, tap } from 'rxjs/operators';\nimport { CountryResponse } from './country-response.interface';\nimport { BehaviorSubject, lastValueFrom } from 'rxjs';\nimport { SettingsService } from '../settings/settings.service';\nimport { SecureApiClient } from '../http/secure-api/secure-api.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CountriesApiService {\n public countries$: BehaviorSubject<CountryResponse['countryList'] | null> =\n new BehaviorSubject<CountryResponse['countryList'] | null>(null);\n\n private readonly apiRoute = 'country';\n\n public constructor(\n private readonly secureApi: SecureApiClient,\n private readonly settingsService: SettingsService,\n ) {}\n\n public async request(): Promise<CountryResponse['countryList']> {\n const token = this.settingsService.token;\n\n return lastValueFrom(\n this.secureApi\n .post<CountryResponse>(\n this.apiRoute,\n { access_token: token },\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(\n map((response: CountryResponse) => {\n return response.countryList;\n }),\n tap((value) => {\n this.countries$.next(value);\n return value;\n }),\n ),\n );\n }\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { SendInstructionRequestInterface } from './send-instruction-request.interface';\nimport { isNull } from '../../../../type-guards/is-null.function';\nimport { TokenError } from '../../../../exceptions-handling/errors/token-error.class';\n\nexport class SendInstructionRequest {\n public readonly access_token: string;\n public readonly xsolla_num: string;\n public readonly public_id: string;\n public readonly recipient: string;\n public readonly payment_name: string;\n public readonly pid: number;\n public readonly purchase?: string;\n\n public constructor(parameters: SendInstructionRequestInterface) {\n if (isNull(parameters.accessToken)) {\n throw new TokenError();\n }\n\n this.access_token = parameters.accessToken;\n this.xsolla_num = parameters.xsollaNumber;\n this.public_id = parameters.publicId;\n this.recipient = parameters.recipient;\n this.payment_name = parameters.title;\n this.pid = parameters.pid;\n\n if (parameters.purchase) {\n this.purchase = JSON.stringify(parameters.purchase);\n }\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SendInstructionRequest } from './send-instruction-request.class';\n\ntype RequestParameters = ConstructorParameters<typeof SendInstructionRequest>;\n\nexport type SendInstructionRequestFactory = (\n ...args: RequestParameters\n) => SendInstructionRequest;\n\nexport const sendInstructionRequestFactoryToken: InjectionToken<SendInstructionRequestFactory> =\n new InjectionToken<SendInstructionRequestFactory>('SendInstructionRequest');\n\nexport const sendInstructionRequestFactoryProvider: ValueProvider = {\n provide: sendInstructionRequestFactoryToken,\n useValue: (...args: RequestParameters) => new SendInstructionRequest(...args),\n};\n","export enum ShippingMethodsEnum {\n sms = 'sms',\n email = 'email',\n print = 'print',\n}\n","export enum SendStatus {\n succeed = 'succeed',\n failed = 'failed',\n}\n","import { SendInstructionResponseInterface } from './send-instruction-response.interface';\nimport { ShippingMethodsEnum } from '../../../shipping-methods.enum';\nimport { SendError } from '../send-error.interface';\nimport { SendStatus } from './send-status.enum';\n\nexport class SendInstructionStatusResponse {\n public readonly type: SendInstructionResponseInterface['type'];\n public readonly status: SendInstructionResponseInterface['status'];\n public readonly errors: string[] = [];\n\n public constructor(\n sendResponse: SendInstructionResponseInterface | SendError,\n sendInstructionRoute: 'sendSms' | 'sendEmail',\n ) {\n this.type =\n sendInstructionRoute === 'sendSms'\n ? ShippingMethodsEnum.sms\n : ShippingMethodsEnum.email;\n\n if ((sendResponse as SendError).errors) {\n this.errors = (sendResponse as SendError).errors.map(\n ({ message }) => message,\n );\n }\n\n if ((sendResponse as SendInstructionResponseInterface).status) {\n this.status =\n (sendResponse as SendInstructionResponseInterface)?.status ===\n SendStatus.succeed\n ? SendStatus.succeed\n : SendStatus.failed;\n } else {\n this.status = SendStatus.failed;\n }\n }\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport { SendInstructionStatusResponse } from './send-instruction-response.class';\n\ntype RequestParameters = ConstructorParameters<\n typeof SendInstructionStatusResponse\n>;\n\nexport type SendInstructionStatusResponseFactory = (\n ...args: RequestParameters\n) => SendInstructionStatusResponse;\n\nexport const sendInstructionStatusResponseFactoryToken: InjectionToken<SendInstructionStatusResponseFactory> =\n new InjectionToken<SendInstructionStatusResponseFactory>(\n 'SendInstructionStatusResponse',\n );\n\nexport const sendInstructionStatusResponseFactoryProvider: ValueProvider = {\n provide: sendInstructionStatusResponseFactoryToken,\n useValue: (...args: RequestParameters) =>\n new SendInstructionStatusResponse(...args),\n};\n","export enum SendInstructionApiRoutesEnum {\n sendSms = 'sendSms',\n sendEmail = 'sendEmail',\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { lastValueFrom, map } from 'rxjs';\nimport { SendInstructionRequest } from './request/send-instruction-request.class';\nimport {\n SendInstructionRequestFactory,\n sendInstructionRequestFactoryToken,\n} from './request/send-instruction-request.token';\nimport {\n SendInstructionStatusResponseFactory,\n sendInstructionStatusResponseFactoryToken,\n} from './response/send-instruction-response.token';\nimport { SendInstructionResponseInterface } from './response/send-instruction-response.interface';\nimport { SendInstructionApiRoutesEnum } from './send-instruction-api-routes.enum';\nimport { SendInstructionParametersInterface } from './send-instruction-parameters.interface';\nimport { SecureApiClient } from '../../../http/secure-api/secure-api.service';\nimport { SettingsService } from '../../../settings/settings.service';\nimport { SendError } from './send-error.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SendInstructionService {\n private readonly apiRoute = 'xsollanumber';\n\n public constructor(\n private readonly secureApi: SecureApiClient,\n private readonly settingsService: SettingsService,\n @Inject(sendInstructionRequestFactoryToken)\n private readonly sendInstructionRequestFactory: SendInstructionRequestFactory,\n @Inject(sendInstructionStatusResponseFactoryToken)\n private readonly sendInstructionStatusResponseFactory: SendInstructionStatusResponseFactory,\n ) {}\n\n public async sendInstructionWithEmail(\n parameters: SendInstructionParametersInterface,\n ): Promise<SendInstructionResponseInterface> {\n return this.request(\n SendInstructionApiRoutesEnum.sendEmail,\n this.sendInstructionRequestFactory({\n accessToken: this.settingsService.token,\n ...parameters,\n }),\n );\n }\n\n public async sendInstructionWithSms(\n parameters: SendInstructionParametersInterface,\n ): Promise<SendInstructionResponseInterface> {\n return this.request(\n SendInstructionApiRoutesEnum.sendSms,\n this.sendInstructionRequestFactory({\n accessToken: this.settingsService.token,\n ...parameters,\n }),\n );\n }\n\n private async request(\n route: SendInstructionApiRoutesEnum,\n parameters: SendInstructionRequest,\n ): Promise<SendInstructionResponseInterface> {\n return lastValueFrom(\n this.secureApi\n .post<SendInstructionResponseInterface | SendError>(\n `${this.apiRoute}/${route}`,\n new URLSearchParams(\n parameters as unknown as { [key: string]: string },\n ),\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/x-www-form-urlencoded; charset=utf-8',\n ),\n responseType: 'json',\n },\n )\n .pipe(\n map((response: SendInstructionResponseInterface | SendError) =>\n this.sendInstructionStatusResponseFactory(response, route),\n ),\n ),\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { UserBehaviourAnalyticsService } from '../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { UserBehaviourEventName } from '../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { userBehaviourEventTypes } from '../user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { EventParameterType } from '../user-behaviour-analytics/event-builder/event-parameter-types';\nimport { Environment } from '../environment.interface';\nimport { ExtendedWindow } from '../extended-window.interface';\nimport { windowToken } from '../window.token';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScriptTrackerService {\n private readonly currentScripts: Set<string> = new Set();\n\n private readonly scriptHostBlacklist = [\n 'https://cdn.xsolla.net/headless-checkout-prod',\n ];\n\n private readonly SCRIPT_DEBOUNCE_TIME_MS = 1000;\n\n private readonly scriptTracked$ = new Subject<void>();\n\n public constructor(\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n ) {}\n\n public initScriptTracking(environment: Environment): void {\n if (environment !== 'production') {\n return;\n }\n\n this.scriptTracked$\n .pipe(debounceTime(this.SCRIPT_DEBOUNCE_TIME_MS))\n .subscribe(() => this.handleScriptData());\n\n this.checkCurrentScripts();\n this.setupScriptObserver();\n }\n\n private handleScriptData(): void {\n const scriptsData = this.getTrackedScripts();\n\n if (!scriptsData.length) {\n return;\n }\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.sysTrackedScripts,\n userBehaviourEventTypes.manual,\n {\n value: JSON.stringify(scriptsData),\n valueType: EventParameterType.string,\n },\n );\n }\n\n private getTrackedScripts(): string[] {\n return Array.from(this.currentScripts.values());\n }\n\n private checkCurrentScripts(): void {\n const resources = this.window.performance.getEntriesByType('resource');\n const scripts = resources.filter(\n // @ts-expect-error wrong type\n (resource) => resource?.initiatorType === 'script',\n );\n\n scripts.forEach((script) => {\n this.trackScript(script.name);\n });\n }\n\n private setupScriptObserver(): void {\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type !== 'childList') {\n return;\n }\n\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'SCRIPT') {\n const script = node as HTMLScriptElement;\n const scriptLoadHandler = (): void => {\n this.trackScript(script.src);\n\n script.removeEventListener('load', scriptLoadHandler);\n };\n\n script.addEventListener('load', scriptLoadHandler);\n }\n });\n });\n });\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n }\n\n private trackScript(script: string): void {\n if (!script || this.currentScripts.has(script)) {\n return;\n }\n\n const isScriptInBlacklist = this.scriptHostBlacklist.some((host) => {\n return script.includes(host);\n });\n\n if (isScriptInBlacklist) {\n return;\n }\n\n this.currentScripts.add(script);\n this.scriptTracked$.next();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { InitConfiguration } from './core/settings/configuration.interface';\nimport { SettingsService } from './core/settings/settings.service';\nimport { CountryService } from './core/country/country.service';\nimport { PaymentMethodsService } from './core/payment-methods/payment-methods.service';\nimport { PaymentMethod } from './core/payment-methods/payment-method.interface';\nimport { SavedMethodsService } from './core/saved-methods/saved-methods.service';\nimport { SavedMethod } from './core/saved-methods/saved-method.interface';\nimport { UserBalanceResponse } from './core/user-balance/user-balance-response.class';\nimport { UserBalanceService } from './core/user-balance/user-balance.service';\nimport { PaymentConfiguration } from './core/payment/payment-configuration.interface';\nimport { PaymentService } from './core/payment/payment.service';\nimport { Payment } from './core/payment/payment.interface';\nimport { Field } from './core/payment/field.interface';\nimport { DeviceFingerPrintService } from './core/device-finger-print/device-finger-print.service';\nimport { LegalService } from './core/legal/legal.service';\nimport { LegalComponentConfig } from './core/legal/legal.component.config';\nimport { NextActionService } from './core/payment/actions/next-action.service';\nimport { FinanceDetailsService } from './core/payment/finance-details/finance-details.service';\nimport { PaymentConfigService } from './core/payment/config/config.service';\nimport { Status } from './core/payment/status/status.interface';\nimport { StatusService } from './core/payment/status/status.service';\nimport { CreditCardService } from './core/credit-card/credit-card.service';\nimport { CreditCardTypes } from './core/credit-card/credit-card-types.enum';\nimport { CreditCard } from './core/credit-card/credit-card.interface';\nimport { InputEventName } from './core/payment/form/input-event.enum';\nimport { CreditCardStateService } from './core/payment/credit-card-state/credit-card-state.service';\nimport { Observable } from 'rxjs';\nimport { CreditCardState } from './core/payment/credit-card-state/credit-card-state.interface';\nimport { FormState } from './core/payment/form/form-state.interface';\nimport { FinanceDetails } from './core/payment/finance-details/finance-details.interface';\nimport { NextAction } from './core/payment/actions/next-action.interface';\nimport { Balance } from './core/settings/balance.interface';\nimport { FormMessagesService } from './core/payment/form-messages/form-messages.service';\nimport { EditSavedMethodsService } from './core/edit-saved-methods/edit-saved-methods.service';\nimport { FormControlStatus } from '@angular/forms';\nimport { SdkPaymentSystems } from './core/sdk-payment-systems/sdk-payment-systems.interface';\nimport { FormResponse } from './core/payment/form-response.interface';\nimport { UserBehaviourAnalyticsService } from './core/user-behaviour-analytics/user-behaviour-analytics.service';\nimport { userBehaviourEventTypes } from './core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nimport { SendEventMethodOptionsInterface } from './core/user-behaviour-analytics/user-behaviour-analytics.interface';\nimport { PerformanceService } from './core/performance/performance.service';\nimport { FieldNames } from './core/payment/field-names.enum';\nimport { CombinedPaymentMethods } from './core/combined-payment-methods/combined-payment-methods.interface';\nimport { CombinedPaymentMethodsService } from './core/combined-payment-methods/combined-payment-methods.service';\nimport { CountriesApiService } from './core/countries-api/countries-api.service';\nimport { CountryResponse } from './core/countries-api/country-response.interface';\nimport { CashPaymentData } from './core/payment/cash-payment-data.interface';\nimport { SendInstructionService } from './core/xsolla-number/api/send-instruction/send-instruction.service';\nimport { SendInstructionResponseInterface } from './core/xsolla-number/api/send-instruction/response/send-instruction-response.interface';\nimport { SendInstructionParametersInterface } from './core/xsolla-number/api/send-instruction/send-instruction-parameters.interface';\nimport { ScriptTrackerService } from './core/script-tracker/script-tracker.service';\nimport { SyncResponse } from './core/payment/requests/sync/response/sync-response.class';\nimport { XpsSummary } from './core/payment/xps-summary.interface';\nimport { SubmitResponse } from './core/payment/requests/submit/response/submit-response.class';\nimport { TranslateService } from '@ngx-translate/core';\nimport { TranslateHelper } from './shared/translate/translate.helper';\nimport { CommonLogAttributesService } from './core/exceptions-handling/common-log-attributes/common-log-attributes.service';\nimport { CommonLogAttributes } from './core/exceptions-handling/common-log-attributes/common-log-attributes.interface';\nimport { LogHandler } from './core/exceptions-handling/logger/log-handler.interface';\nimport { LoggerService } from './core/exceptions-handling/logger/logger.service';\nimport { XpsError } from './core/payment/xps-error.interface';\nimport { CapabilitiesService } from './core/capabilities/capabilities.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CoreLibraryService {\n public paymentMethods = {\n getList: async (isSaveMethodMode?: boolean): Promise<PaymentMethod[]> =>\n this.paymentMethodsService.getList(isSaveMethodMode),\n\n getQuickMethods: async (): Promise<PaymentMethod[]> =>\n this.paymentMethodsService.getQuickMethods(),\n getSavedMethods: async (): Promise<SavedMethod[]> =>\n this.savedMethodsService.getList(),\n getCombinedPaymentMethods: async (): Promise<CombinedPaymentMethods> =>\n this.combinedPaymentMethodsService.getCombinedPaymentMethods(),\n getUserBalance: async (): Promise<UserBalanceResponse> =>\n this.userBalanceService.getUserBalance(),\n deleteSavedMethod: async (id: number, type: string): Promise<boolean> =>\n this.editSavedMethodsService.deleteSavedMethodRequest(id, type),\n };\n\n public sdkPaymentSystems: SdkPaymentSystems = {\n getInitialData: async () =>\n this.paymentService.getInitialDataForSdkPaymentSystems(),\n };\n\n public finance = {\n getDetailsFromSummary: (summary: XpsSummary): FinanceDetails => {\n return this.financeDetailsService.getDetailsFromSummary(summary);\n },\n };\n\n public constructor(\n private readonly settingsService: SettingsService,\n private readonly loggerService: LoggerService,\n private readonly countryService: CountryService,\n private readonly paymentMethodsService: PaymentMethodsService,\n private readonly savedMethodsService: SavedMethodsService,\n private readonly userBalanceService: UserBalanceService,\n private readonly paymentConfigService: PaymentConfigService,\n private readonly paymentService: PaymentService,\n private readonly deviceFingerPrintService: DeviceFingerPrintService,\n private readonly financeDetailsService: FinanceDetailsService,\n private readonly legalService: LegalService,\n private readonly statusService: StatusService,\n private readonly nextActionService: NextActionService,\n private readonly creditCardService: CreditCardService,\n private readonly creditCardStateService: CreditCardStateService,\n private readonly formMessagesService: FormMessagesService,\n private readonly editSavedMethodsService: EditSavedMethodsService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly performanceService: PerformanceService,\n private readonly combinedPaymentMethodsService: CombinedPaymentMethodsService,\n private readonly countriesApiService: CountriesApiService,\n private readonly sendInstructionService: SendInstructionService,\n private readonly scriptTrackerService: ScriptTrackerService,\n private readonly translateService: TranslateService,\n private readonly commonLogAttributesService: CommonLogAttributesService,\n private readonly capabilitiesService: CapabilitiesService,\n ) {}\n\n public async init(configuration: InitConfiguration): Promise<void> {\n await this.settingsService.init(configuration);\n this.capabilitiesService.set(configuration.capabilities);\n this.paymentConfigService.setActiveConfig(null);\n this.performanceService.init();\n this.userBehaviourAnalyticsService.init();\n this.deviceFingerPrintService.init();\n this.scriptTrackerService.initScriptTracking(configuration.environment);\n TranslateHelper.init(this.translateService);\n this.translateService.use(TranslateHelper.getLocale(configuration.locale));\n }\n\n public async getStatus(url?: string): Promise<Status> {\n return this.statusService.getStatusWithUrlSearchParams(url);\n }\n\n public async calculateField(\n changedField: Field,\n fields: Field[],\n ): Promise<SyncResponse> {\n return this.paymentService.calculateField(changedField, fields);\n }\n\n public async submit(fields: Field[]): Promise<{\n response: SubmitResponse;\n nextAction: NextAction | null | void;\n }> {\n return this.paymentService.submitWithFields(fields);\n }\n\n public sendAnalytics(\n action: string,\n type: keyof typeof userBehaviourEventTypes,\n options?: SendEventMethodOptionsInterface,\n ): void {\n this.userBehaviourAnalyticsService.send(action, type, options);\n }\n\n public getQrCodeInitialData(): {\n qrCode: string;\n pid: number | null;\n } {\n return {\n qrCode: this.paymentService.getQrCode(),\n pid: this.paymentService.getPid(),\n };\n }\n\n public getCashPaymentData(): CashPaymentData {\n return this.paymentService.getCashPaymentData();\n }\n\n public async sendXsollaNumberWithEmail(\n params: SendInstructionParametersInterface,\n ): Promise<SendInstructionResponseInterface> {\n return this.sendInstructionService.sendInstructionWithEmail(params);\n }\n\n public async sendXsollaNumberWithSms(\n params: SendInstructionParametersInterface,\n ): Promise<SendInstructionResponseInterface> {\n return this.sendInstructionService.sendInstructionWithSms(params);\n }\n\n public async getCountries(): Promise<CountryResponse['countryList']> {\n return this.countriesApiService.request();\n }\n\n public setCountry(country: string): void {\n this.countryService.setCountry(country);\n }\n\n public getCountry(): string {\n return this.countryService.getCountry();\n }\n\n public createPayment(config: PaymentConfiguration): Payment {\n const enrichedConfig = this.paymentConfigService.enrich(config);\n\n this.paymentConfigService.updateReferByPaymentConfiguration(enrichedConfig);\n this.paymentConfigService.setActiveConfig(enrichedConfig);\n\n return {\n initialize: async () => this.paymentService.initialize(enrichedConfig),\n submit: async () => this.paymentService.submit(),\n getFields: () => this.paymentService.getFields(),\n getPid: () => this.paymentService.getPid(),\n getSubmitButtonText: () => this.paymentService.getSubmitButtonText(),\n validate: async (field: Field) => this.paymentService.validate(field),\n getFinanceDetails: () => this.paymentService.getFinanceDetails(),\n runThreeDs: () => this.paymentService.runThreeDs(),\n getStatus: async () => this.paymentService.getStatus(),\n listenFinalStatus: async () => this.paymentService.listenFinalStatus(),\n financeDetailsUpdates$: this.financeDetailsService.data$,\n form: {\n fieldsStatus$: this.paymentService.formFieldsStatus$,\n getControlConfig: (field: Field) =>\n this.paymentService.getFieldConfig(field),\n changeFieldValue: (name: string, value: string) =>\n this.paymentService.changeFieldValue(name, value),\n externalChangeFieldValue: (name: FieldNames, value: string) =>\n this.paymentService.externalChangeFieldValue(name, value),\n changeFieldState: (name: string, state: InputEventName) =>\n this.paymentService.changeFieldState(name, state),\n updateFieldFormState: (fieldName: string, formState: FormState) =>\n this.paymentService.updateFieldFormState(fieldName, formState),\n getFieldFormState: (fieldName: FieldNames) =>\n this.paymentService.getFieldFormState(fieldName),\n formMessages$: this.formMessagesService.data$,\n cardTypeUpdates$: this.creditCardStateService.data$,\n getFormStatus: () => this.paymentService.form?.status,\n getControlStatus: (name: FieldNames) =>\n this.paymentService.getControlStatus(name),\n },\n addExtraField: (name: string, value: string): void =>\n this.paymentService.addExtraField(name, value),\n };\n }\n\n public getCreditCardService(): CreditCard {\n return {\n getTypeByNumber: (cardNumber: string) =>\n this.creditCardService.getTypeByNumber(cardNumber),\n getCreditCardSettings: (cardType: CreditCardTypes) =>\n this.creditCardService.getCreditCardSettings(cardType),\n cardTypeUpdates$: this.creditCardStateService.data$,\n };\n }\n\n public get flowUpdates$(): Observable<NextAction> {\n return this.nextActionService.flowUpdates$;\n }\n\n public get financeDetailsUpdates$(): Observable<FinanceDetails> {\n return this.financeDetailsService.data$;\n }\n\n public get cardTypeUpdates$(): Observable<CreditCardState> {\n return this.creditCardStateService.data$;\n }\n\n public getLegalComponentConfig(pid?: number): LegalComponentConfig {\n return this.legalService.getLegalComponentConfig(pid);\n }\n\n public getUserBalanceValue(): Balance | null {\n return this.userBalanceService.getUserBalanceValue();\n }\n\n public registerLogHandler(handler: LogHandler): void {\n this.loggerService.register(handler);\n }\n\n public emitFlowErrors(errors: XpsError[]): void {\n this.nextActionService.emitFlowErrors(errors);\n }\n\n public get paymentForm$(): Observable<FormControlStatus | null> {\n return this.paymentService.paymentForm$;\n }\n\n public get formResponse$(): Observable<FormResponse | null> {\n return this.paymentService.formResponse$;\n }\n\n public get formResponseValue(): FormResponse | null {\n return this.paymentService.formResponseValue;\n }\n\n public get topLevelDomain(): string | undefined {\n return this.settingsService.topLevelDomain;\n }\n\n public get isApplePayInstantFlowEnabled(): boolean {\n return this.settingsService.isApplePayInstantFlowEnabled;\n }\n\n public get isGooglePayInstantFlowEnabled(): boolean | null {\n return this.settingsService.isGooglePayInstantFlowEnabled;\n }\n\n public get commonLogAttributes(): CommonLogAttributes {\n return this.commonLogAttributesService.getAttributes();\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\n\nimport { catchError } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { Observable, throwError } from 'rxjs';\nimport { HttpError } from '../errors/http-error.class';\n@Injectable()\nexport class HttpExceptionsInterceptor implements HttpInterceptor {\n public constructor(public router: Router) {}\n\n public intercept(\n req: HttpRequest<unknown>,\n next: HttpHandler,\n ): Observable<HttpEvent<unknown>> {\n return next.handle(req).pipe(\n catchError((error: HttpErrorResponse) => {\n return throwError(() => new HttpError(error, req));\n }),\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CreditCardMaxLengthValidator } from './credit-card-length/credit-card-max-length.validator';\nimport { CreditCardMinLengthValidator } from './credit-card-length/credit-card-min-length.validator';\n\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n providers: [CreditCardMinLengthValidator, CreditCardMaxLengthValidator],\n})\nexport class ValidatorsModule {}\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ControlConfigService } from './controls/control-config.service';\nimport { convertersMap, convertersMapToken } from './converters/converters-map';\nimport { EmailConverter } from './converters/email/email.converter';\nimport { ZipConverter } from './converters/zip/zip.converter';\nimport { FormService } from './form.service';\nimport { CardNumberConverter } from './converters/card-number/card-number.converter';\nimport { CardMonthConverter } from './converters/card-month/card-month.converter';\nimport { CvvConverter } from './converters/cvv/cvv.converter';\nimport { ValidatorsModule } from './validators/validators.module';\nimport { BirthDateConverter } from './converters/birth-date/birth-date.converter';\nimport { CardholderNameConverter } from './converters/cardholder-name/cardholder-name.converter';\nimport { CpfNameConverter } from './converters/cpf-name/cpf-name.converter';\nimport { CpfNumberConverter } from './converters/cpf-number/cpf-number.converter';\nimport { StreetNumberConverter } from './converters/street-number/street-number.converter';\nimport { TextConverter } from './converters/text/text.converter';\nimport { CardYearConverter } from './converters/card-year/card-year.converter';\nimport { CheckboxConverter } from './converters/checkbox/checkbox.converter';\nimport { SelectConverter } from './converters/select/select.converter';\nimport { PinConverter } from './converters/pin/pin.converter';\nimport { RadioGroupConverter } from './converters/radio-group/radio-group.converter';\nimport { PricepointConverter } from './converters/pricepoint/pricepoint.converter';\nimport { CouponConverter } from './converters/coupon/coupon.converter';\nimport { PhoneConverter } from './converters/phone/phone.converter';\nimport { CardExpirationConverter } from './converters/card-expiration/card-expiration.converter';\n\n@NgModule({\n imports: [ReactiveFormsModule, ValidatorsModule],\n providers: [\n FormService,\n ControlConfigService,\n CardNumberConverter,\n CardMonthConverter,\n CardYearConverter,\n CardExpirationConverter,\n CvvConverter,\n CvvConverter,\n ZipConverter,\n CardholderNameConverter,\n CpfNumberConverter,\n CpfNameConverter,\n BirthDateConverter,\n TextConverter,\n CheckboxConverter,\n SelectConverter,\n PinConverter,\n RadioGroupConverter,\n EmailConverter,\n EmailConverter,\n EmailConverter,\n StreetNumberConverter,\n PricepointConverter,\n PricepointConverter,\n CouponConverter,\n TextConverter,\n PhoneConverter,\n { provide: convertersMapToken, useValue: convertersMap },\n ],\n})\nexport class FormModule {}\n","import { NgModule } from '@angular/core';\nimport { UnescapeHtmlPipe } from './unescape-html/unescape-html.pipe';\n\n@NgModule({\n declarations: [UnescapeHtmlPipe],\n providers: [UnescapeHtmlPipe],\n exports: [UnescapeHtmlPipe],\n})\nexport class PipesModule {}\n","export const applePayVersion = 3;\n","export enum ApplePayErrors {\n paymentError = 'Apple Pay: payment error',\n deviceIsNotCapableError = 'Apple Pay: device is not capable',\n cancelled = 'Apple Pay: payment cancelled',\n merchantValidationError = 'Apple Pay: merchant validation error',\n braintreeInitializeError = 'Apple Pay: Braintree library is not initialized',\n}\n","import { Observable, Subject } from 'rxjs';\nimport { ApplePayParams } from '../apple-pay-params.interface';\nimport { ApplePayErrors } from '../apple-pay.errors.enum';\nimport { ApplePayPaymentRequest } from './apple-pay-session.interface';\nimport { StartSessionParams } from './start-session-params.interface';\n\nexport abstract class ApplePaySessionHandlerAbstract {\n protected readonly payment: Subject<string> = new Subject();\n private readonly _errorSubject = new Subject<ApplePayErrors>();\n\n public get error$(): Observable<ApplePayErrors> {\n return this._errorSubject.asObservable();\n }\n\n public get payment$(): Observable<string> {\n return this.payment.asObservable();\n }\n\n public abstract startSession(\n params: ApplePayParams,\n additionalParams: StartSessionParams,\n applePayFinallyCallback: () => void,\n ): void;\n\n protected emitError(error: ApplePayErrors): void {\n this._errorSubject.next(error);\n }\n\n protected buildPaymentRequest(\n params: ApplePayParams,\n ): ApplePayPaymentRequest {\n return {\n total: {\n label: params.totalLabel,\n amount: params.totalAmount,\n },\n currencyCode: params.currencyCode,\n countryCode: params.countryCode,\n merchantCapabilities: params.merchantCapabilities,\n requiredBillingContactFields: params.requiredBillingContactFields,\n requiredShippingContactFields: params.requiredShippingContactFields,\n supportedNetworks: params.supportedNetworks,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, share, Subject } from 'rxjs';\nimport {\n ApplePayError,\n ApplePayShippingContact,\n ApplePayShippingContactUpdate,\n} from '../session-handlers/apple-pay-session.interface';\nimport { ApplePayParams } from '../apple-pay-params.interface';\nimport { UpdatedPrice } from '../updated-price.interface';\nimport { ShippingAddress } from '../shipping-address.interface';\nimport { ApplePayLineItem } from 'braintree-web';\nimport { CartLine } from '../../../payment/finance-details/cart-line.interface';\nimport { XpsResponse } from '../../../payment/xps-response.interface';\nimport { SummaryFinanceDetailsAdapterService } from '../../../payment/finance-details/summary/summary-finance-details-adapter.service';\nimport { XpsFinance } from '../../../payment/xps-finance.interface';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplePayCartService {\n private readonly cartSuccessfulRecalculated = new Subject<UpdatedPrice>();\n private readonly cartErrorRecalculated = new Subject<ApplePayError>();\n\n private readonly cartRecalculationRequest = new Subject<ShippingAddress>();\n\n public get cartSuccessfulRecalculated$(): Observable<UpdatedPrice> {\n return this.cartSuccessfulRecalculated.asObservable().pipe(share());\n }\n\n public get cartErrorRecalculated$(): Observable<ApplePayError> {\n return this.cartErrorRecalculated.asObservable();\n }\n\n public get cartRecalculationRequest$(): Observable<ShippingAddress> {\n return this.cartRecalculationRequest.asObservable();\n }\n\n public constructor(\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly summaryFinanceDetailsAdapterService: SummaryFinanceDetailsAdapterService,\n ) {}\n\n public recalculateCartTaxes(shippingContact: ApplePayShippingContact): void {\n const zip = shippingContact.postalCode;\n const parsedZip = zip?.replace(/\\s/g, '');\n let country = shippingContact.countryCode?.toUpperCase() ?? '';\n\n // Converting all United Kingdom country codes to GB\n if (country === 'UK') {\n country = 'GB';\n }\n\n this.cartRecalculationRequest.next({\n zip: parsedZip,\n country,\n });\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayRecalculateCartTaxes,\n 'manual',\n {\n dimension1: country,\n dimension2: parsedZip || '',\n },\n );\n }\n\n public buildShippingContactUpdate(\n paymentParams: ApplePayParams,\n updatedPrice: UpdatedPrice,\n ): ApplePayShippingContactUpdate {\n return {\n status: 'STATUS_SUCCESS',\n newTotal: {\n label: paymentParams.totalLabel,\n amount: updatedPrice.total.toString(),\n },\n newLineItems: this.getLineItems(updatedPrice),\n };\n }\n\n public sendSuccessfulRecalculatedCart(xpsResponse: XpsResponse): void {\n const financeDetails =\n this.summaryFinanceDetailsAdapterService.getFinanceDetails(\n xpsResponse.summary,\n );\n\n const updatedPrice: UpdatedPrice = {\n // @ts-expect-error finance exist\n total: this.getTotalAmount(xpsResponse.summary.finance),\n subtotalDetails: financeDetails.cartSummary.subtotalDetails,\n totalDetails: financeDetails.cartSummary.totalDetails,\n subtotalPayment: financeDetails.cartSummary.subtotalPayment,\n };\n\n this.cartSuccessfulRecalculated.next(updatedPrice);\n }\n\n public sendErrorRecalculatedCart(error: ApplePayError): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayRecalculateCartError,\n 'manual',\n );\n\n this.cartErrorRecalculated.next(error);\n }\n\n public isZipCountry(country: string): boolean {\n return ['US', 'CA'].includes(country);\n }\n\n private getLineItems(updatedPrice: UpdatedPrice): ApplePayLineItem[] {\n const newLineItems: ApplePayLineItem[] = [];\n\n if (updatedPrice.subtotalPayment?.money?.amount) {\n newLineItems.push({\n label: updatedPrice.subtotalPayment.title ?? 'Subtotal',\n amount: updatedPrice.subtotalPayment.money?.amount.toString(),\n });\n }\n\n let paymentsDetails: CartLine[] = [];\n\n if (updatedPrice.subtotalDetails?.length) {\n paymentsDetails = updatedPrice.subtotalDetails;\n }\n\n if (updatedPrice.totalDetails?.length) {\n paymentsDetails = paymentsDetails.concat(updatedPrice.totalDetails);\n }\n\n paymentsDetails.forEach((cartItem) => {\n if (!cartItem.title || !cartItem.money?.amount) {\n return;\n }\n\n newLineItems.push({\n label: cartItem.title,\n amount: cartItem.money.amount.toString(),\n });\n });\n\n return newLineItems;\n }\n\n private getTotalAmount(finance: XpsFinance): number {\n return finance?.grand_total?.amount ?? finance?.total?.amount;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ApplePay } from 'braintree-web';\nimport { ErrorTags } from '../../../exceptions-handling/errors/elk-error-types.enum';\nimport { ExtendedWindow } from '../../../extended-window.interface';\nimport { windowToken } from '../../../window.token';\nimport { ApplePayParams } from '../apple-pay-params.interface';\nimport { applePayVersion } from '../apple-pay.const';\nimport { ApplePayErrors } from '../apple-pay.errors.enum';\nimport { ApplePaySessionHandlerAbstract } from './session-handler.abstract';\nimport { StartSessionParams } from './start-session-params.interface';\nimport { ApplePayCartService } from '../apple-pay-cart/apple-pay-cart.service';\nimport { take } from 'rxjs';\nimport { ApplePayError } from './apple-pay-session.interface';\nimport { LoggerService } from '../../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../../exceptions-handling/errors/tagged-error.class';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable()\nexport class BraintreeHandler extends ApplePaySessionHandlerAbstract {\n private paymentClient: ApplePay | null = null;\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly loggerService: LoggerService,\n private readonly applePayCartService: ApplePayCartService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {\n super();\n }\n\n public setClient(client: ApplePay): void {\n this.paymentClient = client;\n }\n\n public startSession(\n params: ApplePayParams,\n additionalParams: StartSessionParams,\n applePayFinallyCallback: () => void,\n ): void {\n if (!this.paymentClient) {\n console.error(ApplePayErrors.braintreeInitializeError);\n this.loggerService.error(\n new TaggedError(ApplePayErrors.braintreeInitializeError, [\n ErrorTags.APPLEPAY,\n ]),\n );\n return;\n }\n\n const request = this.buildPaymentRequest(params);\n const applePayRequest = this.paymentClient.createPaymentRequest(request);\n\n const session = new this.window.ApplePaySession(\n applePayVersion,\n applePayRequest,\n );\n\n const { isApplePayInstantFlowEnabled, topLevelDomain } = additionalParams;\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeStartSession,\n 'manual',\n );\n\n session.onshippingcontactselected = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeSelectShipping,\n 'manual',\n );\n\n this.applePayCartService.cartSuccessfulRecalculated$\n .pipe(take(1))\n .subscribe((updatedPrice) => {\n const contactUpdate =\n this.applePayCartService.buildShippingContactUpdate(\n params,\n updatedPrice,\n );\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeCartSuccessfulRecalculated,\n 'manual',\n );\n\n session.completeShippingContactSelection(contactUpdate);\n });\n\n this.applePayCartService.cartErrorRecalculated$.subscribe(\n (error: ApplePayError) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeCartErrorRecalculated,\n 'manual',\n );\n\n session.completeShippingContactSelection({\n errors: [error],\n newTotal: {\n label: params.totalLabel,\n amount: params.totalAmount?.toString(),\n },\n status: 'STATUS_FAILURE',\n });\n },\n );\n\n this.applePayCartService.recalculateCartTaxes(event.shippingContact);\n };\n\n session.onvalidatemerchant = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeValidateMerchant,\n 'manual',\n {\n value: event.validationURL,\n extraValue: params.totalLabel,\n },\n );\n\n const validationParams = {\n validationURL: event.validationURL,\n displayName: params.totalLabel,\n };\n\n if (isApplePayInstantFlowEnabled && topLevelDomain) {\n // @ts-expect-error unknown property\n validationParams.domainName = topLevelDomain;\n }\n\n this.paymentClient\n ?.performValidation(validationParams)\n .then((merchantSession) => {\n session.completeMerchantValidation(merchantSession);\n })\n .catch((error) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreeValidateMerchantError,\n 'manual',\n );\n console.error(ApplePayErrors.merchantValidationError, error);\n session.abort();\n applePayFinallyCallback();\n });\n };\n\n session.onpaymentauthorized = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreePaymentAuthorized,\n 'manual',\n );\n\n this.paymentClient\n ?.tokenize({ token: event.payment.token })\n .then((response) => {\n this.payment.next(\n JSON.stringify({\n token: response?.nonce ?? '',\n email: event.payment.billingContact?.emailAddress ?? null,\n postalCode: event.payment.billingContact?.postalCode ?? null,\n shippingEmail:\n event.payment.shippingContact?.emailAddress ?? null,\n }),\n );\n session.completePayment(this.window.ApplePaySession.STATUS_SUCCESS);\n })\n .catch((error) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreePaymentTokenizationError,\n 'manual',\n );\n\n console.error('Apple Pay: Tokenization error', error);\n session.completePayment(this.window.ApplePaySession.STATUS_FAILURE);\n applePayFinallyCallback();\n });\n };\n\n session.oncancel = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayBraintreePaymentCancel,\n 'manual',\n );\n\n console.error(ApplePayErrors.cancelled, event);\n this.emitError(ApplePayErrors.cancelled);\n applePayFinallyCallback();\n };\n\n session.begin();\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { ExtendedWindow } from '../../../extended-window.interface';\nimport { windowToken } from '../../../window.token';\nimport { ApplePayParams } from '../apple-pay-params.interface';\nimport {\n ApplePayError,\n GetMerchantSessionResponse,\n} from './apple-pay-session.interface';\nimport { applePayVersion } from '../apple-pay.const';\nimport { ApplePayErrors } from '../apple-pay.errors.enum';\nimport { ApplePaySessionHandlerAbstract } from './session-handler.abstract';\nimport { StartSessionParams } from './start-session-params.interface';\nimport { take } from 'rxjs';\nimport { ApplePayCartService } from '../apple-pay-cart/apple-pay-cart.service';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable()\nexport class CheckoutHandler extends ApplePaySessionHandlerAbstract {\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly http: HttpClient,\n private readonly applePayCartService: ApplePayCartService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {\n super();\n }\n\n public startSession(\n params: ApplePayParams,\n additionalParams: StartSessionParams,\n applePayFinallyCallback: () => void,\n ): void {\n const request = this.buildPaymentRequest(params);\n\n const session = new this.window.ApplePaySession(applePayVersion, request);\n\n session.onshippingcontactselected = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutSelectShipping,\n 'manual',\n );\n\n this.applePayCartService.cartSuccessfulRecalculated$\n .pipe(take(1))\n .subscribe((updatedPrice) => {\n const contactUpdate =\n this.applePayCartService.buildShippingContactUpdate(\n params,\n updatedPrice,\n );\n\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutCartSuccessfulRecalculated,\n 'manual',\n );\n\n session.completeShippingContactSelection(contactUpdate);\n });\n\n this.applePayCartService.cartErrorRecalculated$.subscribe(\n (error: ApplePayError) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutCartErrorRecalculated,\n 'manual',\n );\n\n session.completeShippingContactSelection({\n errors: [error],\n newTotal: {\n label: params.totalLabel,\n amount: params.totalAmount?.toString(),\n },\n status: 'STATUS_FAILURE',\n });\n },\n );\n\n this.applePayCartService.recalculateCartTaxes(event.shippingContact);\n };\n\n session.onvalidatemerchant = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutValidateMerchant,\n 'manual',\n {\n value: event.validationURL,\n extraValue: params.totalLabel,\n },\n );\n\n const validationParams = {\n validationURL: event.validationURL,\n accountId: params.payInstanceAccountId,\n isSandbox: params.isSandbox,\n };\n\n const { isApplePayInstantFlowEnabled, topLevelDomain } = additionalParams;\n\n if (isApplePayInstantFlowEnabled && topLevelDomain) {\n // @ts-expect-error unknown property\n validationParams.domainName = topLevelDomain;\n }\n\n this.http\n .post<GetMerchantSessionResponse>(\n params.getApplePaySessionUrl,\n JSON.stringify(validationParams),\n {\n headers: new HttpHeaders().set('Content-Type', 'application/json'),\n },\n )\n .subscribe({\n next: (response) => {\n session.completeMerchantValidation(response.merchantSession);\n },\n error: (error) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutValidateMerchantError,\n 'manual',\n );\n console.error(ApplePayErrors.merchantValidationError, error);\n session.abort();\n applePayFinallyCallback();\n },\n });\n };\n\n session.onpaymentauthorized = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutPaymentAuthorized,\n 'manual',\n );\n\n this.payment.next(\n JSON.stringify({\n token: event.payment.token ?? '',\n email: event.payment.billingContact?.emailAddress ?? null,\n postalCode: event.payment.billingContact?.postalCode ?? null,\n shippingEmail: event.payment.shippingContact?.emailAddress ?? null,\n }),\n );\n\n session.completePayment(this.window.ApplePaySession.STATUS_SUCCESS);\n };\n\n session.oncancel = (event) => {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayCheckoutPaymentCancel,\n 'manual',\n );\n\n console.error(ApplePayErrors.cancelled, event);\n this.emitError(ApplePayErrors.cancelled);\n applePayFinallyCallback();\n };\n\n session.begin();\n }\n}\n","import { NgModule, TypeProvider } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PaymentBehaviourService } from './payment-behaviour.service';\nimport {\n behaviourStrategies,\n behaviourStrategiesToken,\n} from './behaviour-strategies';\n\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n providers: [\n PaymentBehaviourService,\n {\n provide: behaviourStrategiesToken,\n useValue: behaviourStrategies,\n },\n ...(behaviourStrategies as TypeProvider[]),\n ],\n})\nexport class PaymentBehaviourModule {}\n","import { NgModule, TypeProvider } from '@angular/core';\nimport {\n HTTP_INTERCEPTORS,\n HttpClientModule,\n provideHttpClient,\n} from '@angular/common/http';\nimport { HttpExceptionsInterceptor } from './core/exceptions-handling/http-interceptor/http-exceptions.interceptor';\nimport { windowToken } from './core/window.token';\nimport { paymentMethodsResponseFactoryProvider } from './core/payment-methods/payment-methods-response.token';\nimport { savedMethodsResponseFactoryProvider } from './core/saved-methods/saved-methods-response.token';\nimport { userBalanceResponseFactoryProvider } from './core/user-balance/user-balance-response.token';\nimport { initializeResponseFactoryProvider } from './core/payment/requests/initialize/response/initialize-response.token';\nimport { submitRequestFactoryProvider } from './core/payment/requests/submit/request/submit-request.token';\nimport { submitResponseFactoryProvider } from './core/payment/requests/submit/response/submit-response.token';\nimport {\n flowUpdateNextActions,\n nextActions,\n nextActionsToken,\n} from './core/payment/actions/next-actions';\nimport { syncRequestFactoryProvider } from './core/payment/requests/sync/request/sync-request.token';\nimport { syncResponseFactoryProvider } from './core/payment/requests/sync/response/sync-response.token';\nimport { FormModule } from './core/payment/form/form.module';\nimport { statusRequestFactoryProvider } from './core/payment/status/status-request/request/status-request.token';\nimport { statusResponseFactoryProvider } from './core/payment/status/status-request/response/status-response.token';\nimport { checkStatusRequestFactoryProvider } from './core/payment/status/check-status/request/check-status-request.token';\nimport { checkStatusResponseFactoryProvider } from './core/payment/status/check-status/response/check-status-response.token';\nimport { statusThreeDsRequestFactoryProvider } from './core/payment/three-ds/api/status-three-ds/request/status-three-ds-request.token';\nimport { statusThreeDsResponseFactoryProvider } from './core/payment/three-ds/api/status-three-ds/response/status-three-ds-response.token';\nimport { notifyDfpStatusRequestFactoryProvider } from './core/payment/three-ds/api/notify-dfp-status/request/notify-dfp-status-request.token';\nimport { PipesModule } from './shared/pipes/pipes.module';\nimport { sendInstructionRequestFactoryProvider } from './core/xsolla-number/api/send-instruction/request/send-instruction-request.token';\nimport { sendInstructionStatusResponseFactoryProvider } from './core/xsolla-number/api/send-instruction/response/send-instruction-response.token';\nimport { printInstructionRequestFactoryProvider } from './core/xsolla-number/api/print-instruction/request/print-instruction-request.token';\nimport {\n initializeNextActions,\n initializeNextActionsToken,\n} from './core/payment/initialize-actions/initialize-next-actions';\nimport { BraintreeHandler } from './core/sdk-payment-systems/apple-pay/session-handlers/braintree.handler';\nimport { CheckoutHandler } from './core/sdk-payment-systems/apple-pay/session-handlers/checkout.handler';\nimport { PaymentBehaviourModule } from './core/payment/payment-behaviour/payment-behaviour.module';\nimport {\n MissingTranslationHandler,\n provideTranslateService,\n} from '@ngx-translate/core';\nimport { provideTranslateHttpLoader } from '@ngx-translate/http-loader';\n\n@NgModule({\n imports: [HttpClientModule, FormModule, PipesModule, PaymentBehaviourModule],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: HttpExceptionsInterceptor,\n multi: true,\n },\n { provide: windowToken, useValue: window },\n paymentMethodsResponseFactoryProvider,\n savedMethodsResponseFactoryProvider,\n userBalanceResponseFactoryProvider,\n initializeResponseFactoryProvider,\n submitRequestFactoryProvider,\n submitResponseFactoryProvider,\n syncRequestFactoryProvider,\n syncResponseFactoryProvider,\n statusRequestFactoryProvider,\n statusResponseFactoryProvider,\n checkStatusRequestFactoryProvider,\n checkStatusResponseFactoryProvider,\n statusThreeDsRequestFactoryProvider,\n statusThreeDsResponseFactoryProvider,\n notifyDfpStatusRequestFactoryProvider,\n {\n provide: nextActionsToken,\n useValue: nextActions,\n },\n {\n provide: initializeNextActionsToken,\n useValue: initializeNextActions,\n },\n ...(nextActions as TypeProvider[]),\n ...(initializeNextActions as TypeProvider[]),\n ...(flowUpdateNextActions as TypeProvider[]),\n printInstructionRequestFactoryProvider,\n sendInstructionRequestFactoryProvider,\n sendInstructionStatusResponseFactoryProvider,\n BraintreeHandler,\n CheckoutHandler,\n provideHttpClient(),\n provideTranslateService({\n loader: provideTranslateHttpLoader({\n prefix: './i18n/',\n suffix: '.json',\n }),\n fallbackLang: 'en',\n missingTranslationHandler: {\n provide: MissingTranslationHandler,\n useValue: {\n handle: () => null,\n },\n },\n }),\n ],\n})\nexport class CoreLibraryModule {}\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { GooglePayCheckout } from '../google-pay/google-pay-checkout.interface';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { windowToken } from '../../window.token';\nimport { AppError } from '../../exceptions-handling/errors/app-error.class';\n\nexport type CommonCheckout = GooglePayCheckout;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PaymentSystemProcessingService {\n private readonly statusUrl: BehaviorSubject<string> = new BehaviorSubject('');\n private readonly initialize: BehaviorSubject<boolean> =\n new BehaviorSubject<boolean>(false);\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n ) {}\n\n public get initialize$(): Observable<boolean> {\n return this.initialize.asObservable();\n }\n\n public get status$(): Observable<string> {\n return this.statusUrl.asObservable().pipe(filter((status) => !!status));\n }\n\n public emitStatusUrl(statusUrl: string): void {\n this.statusUrl.next(statusUrl);\n }\n\n public emitInitialize(isInitialized: boolean): void {\n this.initialize.next(isInitialized);\n }\n\n public getDecodedCheckout<T extends CommonCheckout>(\n base64checkoutData: string,\n ): T {\n try {\n return JSON.parse(atob(base64checkoutData)) as T;\n } catch (error: unknown) {\n throw new AppError('load script service: decode error');\n }\n }\n\n public loadScript(\n url: string,\n onLoad: () => void,\n addScriptCustomAttributes?: (\n script: HTMLScriptElement,\n ) => HTMLScriptElement,\n ): void {\n this.initialize.next(false);\n let script: HTMLScriptElement =\n this.window.document.createElement('script');\n\n script.async = true;\n script.src = url;\n\n if (addScriptCustomAttributes) {\n script = addScriptCustomAttributes(script);\n }\n\n this.window.document.body.append(script);\n\n script.onload = () => {\n try {\n onLoad();\n } catch (error: unknown) {\n let message = error;\n\n if (error instanceof Error) {\n message = error.message;\n }\n throw new AppError(\n `Pages: error during script onload handler: ${\n message as string\n }, url - ${url}`,\n );\n }\n };\n\n script.onerror = (\n event: Event | string,\n source?: string,\n lineno?: number,\n colno?: number,\n error?: Error,\n ) => {\n const errorMessage = error ? error.message : '';\n\n let eventMessage = event as string;\n\n if (typeof event === 'object') {\n eventMessage = JSON.stringify(event);\n }\n\n throw new AppError(\n `Pages: error during script onerror handler:\n url - ${url},\n event - ${eventMessage},\n source - ${source ?? ''},\n lineno - ${lineno ?? ''},\n colno - ${colno ?? ''},\n error - ${errorMessage}`,\n );\n };\n }\n\n public isInitialized(): boolean {\n return this.initialize.getValue();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PaymentSystemProcessingService } from '../../payment-systems/payment-system-processing.service';\nimport { GooglePayCheckout } from '../google-pay-checkout.interface';\nimport { GooglePayInitParams } from '../google-pay-init-params.interface';\nimport {\n AllowedPaymentMethod,\n GoogleInitData,\n GooglePayPaymentRequest,\n PaymentDataResponse,\n} from '../google-pay-library.interface';\nimport {\n GooglePayPaymentService,\n PreparePaymentParams,\n} from './google-pay-payment-service.interface';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\nimport { LoggerService } from '../../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../../exceptions-handling/errors';\nimport { ErrorTags } from '../../../exceptions-handling/errors/elk-error-types.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GooglePayCheckoutPaymentService\n implements GooglePayPaymentService\n{\n private initParams!: GooglePayInitParams;\n private checkout: GooglePayCheckout | null = null;\n\n public constructor(\n public readonly paymentSystemProcessingService: PaymentSystemProcessingService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly loggerService: LoggerService,\n ) {}\n\n public preparePayment({\n initParams,\n checkDeviceData,\n }: PreparePaymentParams): GoogleInitData | null {\n if (!initParams || !checkDeviceData.base64checkoutData) {\n this.loggerService.error(\n new TaggedError(\n 'Google Pay checkout: missing initParams or base64checkoutData',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n return null;\n }\n\n this.initParams = initParams;\n this.checkout =\n this.paymentSystemProcessingService.getDecodedCheckout<GooglePayCheckout>(\n checkDeviceData.base64checkoutData,\n );\n\n if (!this.checkout) {\n this.loggerService.error(\n new TaggedError('Google Pay checkout: failed to decode checkout data', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n return null;\n }\n\n const checkoutData = this.checkout.request.form.fields;\n const paymentDataRequest = JSON.parse(checkoutData.paymentDataRequest);\n const isReadyToPayRequest = JSON.parse(checkoutData.isReadyToPayRequest);\n\n const result: GoogleInitData = { paymentDataRequest, isReadyToPayRequest };\n\n if (checkoutData.amexCardNotification) {\n result.amexCardNotification = JSON.parse(\n checkoutData.amexCardNotification,\n );\n }\n\n return result;\n }\n\n public getPaymentRequest(): GooglePayPaymentRequest | null {\n if (!this.checkout) return null;\n\n const checkoutData = this.checkout.request.form.fields;\n const paymentDataRequest = JSON.parse(\n checkoutData.paymentDataRequest,\n ) as GooglePayPaymentRequest;\n\n paymentDataRequest.transactionInfo = {\n currencyCode: checkoutData.currency,\n totalPriceStatus: 'FINAL',\n totalPrice: checkoutData.sum?.toString(),\n countryCode: this.initParams.country.toUpperCase(),\n };\n\n return paymentDataRequest;\n }\n\n public getAllowedPaymentMethods(): AllowedPaymentMethod[] {\n if (!this.checkout) return [];\n\n const paymentDataRequest = JSON.parse(\n this.checkout.request.form.fields.paymentDataRequest,\n ) as GooglePayPaymentRequest;\n\n return paymentDataRequest.allowedPaymentMethods;\n }\n\n public handleSuccessfulPayment(response: PaymentDataResponse): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.googlePayHandleSuccessfulPayment,\n 'manual',\n { value: this.checkout?.request?.form?.fields?.returnSuccessUrl ?? '' },\n );\n\n if (!this.checkout) return;\n\n let returnUrl = this.checkout.request.form.fields.returnSuccessUrl;\n\n const data = this.checkout.request.form.fields;\n returnUrl += `&cpf_number=${data.cpf_number}&descriptor=${\n data.descriptor\n }&paymentData=${JSON.stringify(response)}`;\n\n this.paymentSystemProcessingService.emitStatusUrl(returnUrl);\n }\n\n public handleFailedPayment(error: unknown): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.googlePayHandleFailedPayment,\n 'manual',\n { value: this.checkout?.request?.form?.fields?.returnFailUrl ?? '' },\n );\n\n if (!this.checkout) return;\n\n const statusCode = (error as { statusCode?: string })?.statusCode;\n const isStatusCanceled = statusCode && this.isCancelledStatus(statusCode);\n\n if (isStatusCanceled) return;\n\n const returnUrl = this.checkout.request.form.fields.returnFailUrl;\n this.paymentSystemProcessingService.emitStatusUrl(returnUrl);\n }\n\n private isCancelledStatus(statusCode: string): boolean {\n return statusCode.toLowerCase() === 'canceled';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FieldNames } from '../../../payment/field-names.enum';\nimport { Field } from '../../../payment/field.interface';\nimport { CartLine } from '../../../payment/finance-details/cart-line.interface';\nimport { SummaryFinanceDetailsAdapterService } from '../../../payment/finance-details/summary/summary-finance-details-adapter.service';\nimport { XpsFinance } from '../../../payment/xps-finance.interface';\nimport { XpsSummary } from '../../../payment/xps-summary.interface';\nimport { GooglePayInitParams } from '../google-pay-init-params.interface';\nimport {\n AllowedPaymentMethod,\n DisplayItems,\n GoogleInitData,\n GooglePayPaymentRequest,\n} from '../google-pay-library.interface';\nimport { UpdatedPrice } from '../updated-price.interface';\nimport {\n GooglePayPaymentService,\n PreparePaymentParams,\n} from './google-pay-payment-service.interface';\nimport { LoggerService } from '../../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../../exceptions-handling/errors';\nimport { ErrorTags } from '../../../exceptions-handling/errors/elk-error-types.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GooglePayInstantPaymentService implements GooglePayPaymentService {\n private initParams!: GooglePayInitParams;\n private googleInitData: GoogleInitData | null = null;\n\n public constructor(\n private readonly summaryFinanceDetailsAdapterService: SummaryFinanceDetailsAdapterService,\n private readonly loggerService: LoggerService,\n ) {}\n\n public preparePayment({\n initParams,\n checkDeviceData,\n }: PreparePaymentParams): GoogleInitData | null {\n if (!initParams) {\n this.loggerService.error(\n new TaggedError('Google Pay instant: missing initParams', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n return null;\n }\n this.initParams = initParams;\n\n this.googleInitData = this.extractGoogleInitData(initParams.fields);\n\n if (!this.googleInitData) {\n this.loggerService.error(\n new TaggedError(\n 'Google Pay instant: failed to extract google init data from fields',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n return null;\n }\n\n const displayItems: DisplayItems = checkDeviceData.summary\n ? this.getItemsTaxes(checkDeviceData.summary)\n : [];\n\n this.googleInitData.paymentDataRequest = {\n ...this.googleInitData.paymentDataRequest,\n transactionInfo: {\n ...this.googleInitData.paymentDataRequest.transactionInfo,\n totalPriceStatus: 'ESTIMATED',\n totalPrice:\n this.googleInitData.paymentDataRequest.transactionInfo.totalPrice?.toString(),\n countryCode:\n initParams.country.toUpperCase() ??\n this.googleInitData.paymentDataRequest.transactionInfo.countryCode?.toUpperCase(),\n totalPriceLabel:\n this.googleInitData.paymentDataRequest.transactionInfo\n .totalPriceLabel ?? 'Total',\n displayItems,\n },\n shippingAddressRequired: true,\n callbackIntents: ['SHIPPING_ADDRESS', 'PAYMENT_AUTHORIZATION'],\n };\n\n return this.googleInitData;\n }\n\n public getPaymentRequest(): GooglePayPaymentRequest | null {\n if (!this.googleInitData) return null;\n\n return {\n ...this.googleInitData.paymentDataRequest,\n transactionInfo: {\n ...this.googleInitData.paymentDataRequest.transactionInfo,\n totalPriceStatus: 'ESTIMATED',\n totalPrice:\n this.googleInitData.paymentDataRequest.transactionInfo.totalPrice?.toString(),\n countryCode:\n this.initParams.country.toUpperCase() ??\n this.googleInitData.paymentDataRequest.transactionInfo.countryCode?.toUpperCase(),\n },\n shippingAddressRequired: true,\n callbackIntents: ['SHIPPING_ADDRESS', 'PAYMENT_AUTHORIZATION'],\n };\n }\n\n public getAllowedPaymentMethods(): AllowedPaymentMethod[] {\n if (!this.googleInitData) return [];\n return this.googleInitData.paymentDataRequest.allowedPaymentMethods;\n }\n\n private extractGoogleInitData(fields: Field[]): GoogleInitData | null {\n try {\n const googlePayInitData = fields.filter(\n (field) => field.name === FieldNames.googlePayInitData,\n )[0]?.value;\n const data: GoogleInitData | null = JSON.parse(googlePayInitData ?? null);\n return data;\n } catch (error) {\n this.loggerService.error(\n new TaggedError(\n `Google Pay instant: failed to parse googlePayInitData, ${(error as Error).message}`,\n [ErrorTags.GOOGLEPAY],\n ),\n );\n return null;\n }\n }\n\n private getItemsTaxes(summary: XpsSummary): DisplayItems {\n const financeResponse =\n this.summaryFinanceDetailsAdapterService.getFinanceDetails(summary);\n\n const newCartPricing = financeResponse.cartSummary;\n\n if (!newCartPricing.total?.money?.amount || !financeResponse.finance) {\n return [];\n }\n\n const newPrice: UpdatedPrice = {\n total: this.getTotalAmount(financeResponse.finance),\n subtotalDetails: newCartPricing.subtotalDetails,\n subtotalPayment: newCartPricing.subtotalPayment,\n totalDetails: newCartPricing.totalDetails,\n };\n\n const displayItems = [];\n\n if (newPrice.subtotalPayment?.money?.amount) {\n displayItems.push({\n label: newPrice.subtotalPayment.title || 'Subtotal',\n amount: newPrice.subtotalPayment.money?.amount.toString(),\n });\n }\n\n let paymentsDetails: CartLine[] = [];\n\n if (newPrice.subtotalDetails?.length) {\n paymentsDetails = newPrice.subtotalDetails;\n }\n\n if (newPrice.totalDetails?.length) {\n paymentsDetails = paymentsDetails.concat(newPrice.totalDetails);\n }\n\n paymentsDetails.forEach((cartItem) => {\n if (!cartItem.title || !cartItem.money?.amount) {\n return;\n }\n\n displayItems.push({\n label: cartItem.title,\n amount: cartItem.money.amount.toString(),\n });\n });\n\n return displayItems.map((item) => ({\n label: item.label ?? '',\n type: 'TAX',\n price: item.amount,\n }));\n }\n\n private getTotalAmount(finance: XpsFinance): number {\n return finance?.grand_total?.amount ?? finance?.total?.amount;\n }\n}\n","import { Inject, Injectable, Injector } from '@angular/core';\nimport { BehaviorSubject, filter, Observable, Subject, take } from 'rxjs';\nimport { AppError } from '../../exceptions-handling/errors/app-error.class';\nimport { ErrorTags } from '../../exceptions-handling/errors/elk-error-types.enum';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { CheckStatusActionCreator } from '../../payment/actions/check-status/check-status.action.class';\nimport { CheckStatusAction } from '../../payment/actions/check-status/check-status.action.type';\nimport { NextAction } from '../../payment/actions/next-action.interface';\nimport { windowToken } from '../../window.token';\nimport { PaymentSystemProcessingService } from '../payment-systems/payment-system-processing.service';\nimport { CheckPaymentDeviceData } from './check-payment-device-data.interface';\nimport { GooglePayInitParams } from './google-pay-init-params.interface';\nimport {\n GooglePayClient,\n GooglePayClientInitData,\n PaymentAuthorizedHandler,\n PaymentDataChangedHandler,\n} from './google-pay-library.interface';\nimport { GooglePayCheckoutPaymentService } from './payment/google-pay-checkout-payment.service';\nimport { GooglePayInstantPaymentService } from './payment/google-pay-instant-payment.service';\nimport { GooglePayPaymentService } from './payment/google-pay-payment-service.interface';\nimport { LoggerService } from '../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../exceptions-handling/errors';\nimport { GooglePayButtonConfiguration } from './google-pay-button-configuration.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GooglePayService {\n private readonly googlePayScriptUrl = 'https://pay.google.com/gp/p/js/pay.js';\n\n private readonly readyToPay = new BehaviorSubject<boolean | null>(null);\n private readonly paymentWindowIsReady = new Subject<void>();\n private readonly paymentWindowIsClose = new Subject<void>();\n private readonly error = new Subject<unknown>();\n\n private paymentInProgress = false;\n\n private googlePaymentClient: GooglePayClient | null = null;\n private initParams!: GooglePayInitParams;\n private paymentService: GooglePayPaymentService | null = null;\n\n private onPaymentDataChanged!: PaymentDataChangedHandler;\n private onPaymentAuthorized!: PaymentAuthorizedHandler;\n\n private get libraryWasInitialized(): boolean {\n return !!this.window.google;\n }\n\n private get googlePaymentClientWasInitialized(): boolean {\n return !!this.googlePaymentClient;\n }\n\n public constructor(\n @Inject(windowToken)\n private readonly window: ExtendedWindow,\n private readonly loggerService: LoggerService,\n private readonly paymentSystemProcessingService: PaymentSystemProcessingService,\n private readonly googlePayCheckoutPaymentService: GooglePayCheckoutPaymentService,\n private readonly googlePayInstantPaymentService: GooglePayInstantPaymentService,\n private readonly injector: Injector,\n ) {}\n\n public get readyToPay$(): Observable<boolean | null> {\n return this.readyToPay.asObservable();\n }\n\n public get paymentWindowIsReady$(): Observable<void> {\n return this.paymentWindowIsReady.asObservable();\n }\n\n public get paymentWindowIsClose$(): Observable<void> {\n return this.paymentWindowIsClose.asObservable();\n }\n\n public get error$(): Observable<unknown> {\n return this.error.asObservable();\n }\n\n public isReadyToPay(): boolean | null {\n return this.readyToPay.getValue();\n }\n\n public initGooglePayLibrary(data: GooglePayInitParams): void {\n this.initParams = data;\n this.onPaymentDataChanged = data.onPaymentDataChanged;\n this.onPaymentAuthorized = data.onPaymentAuthorized;\n\n if (this.libraryWasInitialized && this.googlePaymentClientWasInitialized) {\n return;\n }\n\n if (this.libraryWasInitialized && !this.googlePaymentClientWasInitialized) {\n this.setupGooglePayClient();\n return;\n }\n\n this.paymentSystemProcessingService.loadScript(\n this.googlePayScriptUrl,\n this.onLoadScript.bind(this),\n );\n }\n\n public checkPaymentDevice(data: CheckPaymentDeviceData): void {\n this.paymentSystemProcessingService.initialize$\n .pipe(filter(Boolean), take(1))\n .subscribe(() => {\n if (!this.googlePaymentClient) {\n this.loggerService.error(\n new TaggedError('Google payment client is not initialized', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n throw new AppError(\n `Google Pay: Google payment client is not initialized`,\n );\n }\n\n this.paymentService = this.getPaymentService();\n const initData = this.paymentService.preparePayment({\n initParams: this.initParams,\n checkDeviceData: data,\n });\n\n if (!initData) {\n this.loggerService.error(\n new TaggedError('No initialization data', [ErrorTags.GOOGLEPAY]),\n );\n throw new AppError('Google Pay: no initialization data');\n }\n\n this.googlePaymentClient\n .isReadyToPay(initData.isReadyToPayRequest)\n .then((response) => {\n if (response.result && this.googlePaymentClient) {\n this.googlePaymentClient.prefetchPaymentData(\n initData.paymentDataRequest,\n );\n\n return this.readyToPay.next(true);\n }\n\n this.readyToPay.next(false);\n const result = response.result?.toString() ?? '';\n const isHavePaymentClient = Boolean(\n this.googlePaymentClient,\n ).toString();\n\n const message = `Google Pay: possibly no response.result or googlePaymentClient is missing, result - ${result}, isHavePaymentClient - ${isHavePaymentClient}`;\n this.loggerService.error(\n new TaggedError(message, [ErrorTags.GOOGLEPAY]),\n );\n })\n .catch((error) => {\n this.readyToPay.next(false);\n\n let message = (error as string) ?? '';\n\n if (error instanceof Error) {\n message = error.message;\n }\n\n this.loggerService.error(\n new TaggedError(\n `Google Pay: device is not ready to pay, ${message}`,\n [ErrorTags.GOOGLEPAY],\n ),\n );\n });\n });\n }\n\n public async proceedCheckout(): Promise<CheckStatusAction | null> {\n if (!this.googlePaymentClient) {\n this.loggerService.error(\n new TaggedError(\n 'Google payment client is not initialized to proceed checkout',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n throw new AppError(\n `Google Pay. proceedCheckout: no google payment client`,\n );\n }\n\n if (!this.paymentService) {\n this.loggerService.error(\n new TaggedError(\n 'Google payment service is not initialized to proceed checkout',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n throw new AppError(\n `Google Pay. proceedCheckout: no google payment service`,\n );\n }\n\n // google support only one payment in time\n if (this.paymentInProgress) {\n return Promise.resolve(null);\n }\n\n const paymentDataRequest = this.paymentService.getPaymentRequest();\n\n if (!paymentDataRequest) {\n this.loggerService.error(\n new TaggedError('No data for payment data request', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n throw new AppError(`Google Pay: No data for payment data request`);\n }\n\n const checkStatusAction: NextAction = this.injector\n .get<CheckStatusActionCreator>(CheckStatusActionCreator)\n .getActionData();\n\n try {\n this.paymentInProgress = true;\n\n this.paymentWindowIsReady.next();\n\n const paymentData =\n await this.googlePaymentClient.loadPaymentData(paymentDataRequest);\n\n if (!paymentData?.paymentMethodData?.tokenizationData?.token) {\n this.loggerService.error(\n new TaggedError('Token is missing', [ErrorTags.GOOGLEPAY]),\n );\n throw new AppError('Google Pay: token is missing');\n }\n\n this.paymentService.handleSuccessfulPayment?.(paymentData);\n\n this.paymentWindowIsClose.next();\n\n this.paymentInProgress = false;\n\n return checkStatusAction;\n } catch (error: unknown) {\n this.paymentInProgress = false;\n\n this.paymentService.handleFailedPayment?.(error);\n this.paymentWindowIsClose.next();\n this.error.next(error);\n\n const errorMessage = (error as { message: string })?.message ?? '';\n const errorStatusCode =\n (error as { statusCode: string })?.statusCode ?? '';\n\n const isClosedByUser = this.isClosedByUser(errorMessage);\n const isCanceledStatus = this.isCanceledStatus(errorStatusCode);\n\n if (isClosedByUser || isCanceledStatus) return null;\n\n this.loggerService.error(\n new TaggedError(`Google Pay: proceedCheckout failed, ${errorMessage}`, [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n\n return checkStatusAction;\n }\n }\n\n public createButton(\n onClickHandler: () => void,\n configuration: GooglePayButtonConfiguration,\n ): HTMLButtonElement | null {\n if (!this.googlePaymentClient) {\n this.loggerService.error(\n new TaggedError(\n 'Google payment client is not initialized to create button',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n return null;\n }\n\n const allowedPaymentMethods =\n this.paymentService?.getAllowedPaymentMethods() || [];\n\n return this.googlePaymentClient.createButton({\n onClick: onClickHandler,\n allowedPaymentMethods: allowedPaymentMethods,\n buttonSizeMode: 'fill',\n buttonType: 'buy',\n buttonColor: configuration.color ?? 'default',\n buttonLocale: this.getLocaleForButton(configuration.locale),\n });\n }\n\n private setupGooglePayClient(): void {\n if (!this.window.google) {\n this.loggerService.error(\n new TaggedError('Google Pay library is not available on window', [\n ErrorTags.GOOGLEPAY,\n ]),\n );\n return;\n }\n\n const environment = this.initParams.isSandbox ? 'TEST' : 'PRODUCTION';\n const googlePaymentClientData: GooglePayClientInitData = {\n environment,\n };\n\n if (this.initParams.isInstantPayFlow) {\n googlePaymentClientData.paymentDataCallbacks = {\n onPaymentDataChanged: this.onPaymentDataChanged,\n onPaymentAuthorized: this.onPaymentAuthorized,\n };\n }\n\n this.googlePaymentClient =\n new this.window.google.payments.api.PaymentsClient(\n googlePaymentClientData,\n );\n }\n\n private onLoadScript(): void {\n if (!this.window.google) {\n const retryTimeout = 1000;\n\n this.loggerService.error(\n new TaggedError(\n 'Google Pay: library not available after script load, retrying',\n [ErrorTags.GOOGLEPAY],\n ),\n );\n\n setTimeout(() => {\n const isAvailableGoogleClient = !!this.window.google;\n\n if (isAvailableGoogleClient) {\n this.setupGooglePayClient();\n\n this.paymentSystemProcessingService.emitInitialize(true);\n }\n }, retryTimeout);\n\n throw new AppError('Google Pay: google library now is available');\n } else {\n this.setupGooglePayClient();\n\n this.paymentSystemProcessingService.emitInitialize(true);\n }\n }\n\n private getPaymentService(): GooglePayPaymentService {\n if (this.initParams.isInstantPayFlow)\n return this.googlePayInstantPaymentService;\n return this.googlePayCheckoutPaymentService;\n }\n\n private isClosedByUser(message: string): boolean {\n return message.toLowerCase().includes('user closed the payment request ui');\n }\n\n private isCanceledStatus(statusCode: string): boolean {\n return statusCode.toLowerCase() === 'canceled';\n }\n\n private getLocaleForButton(userLocale: string): string {\n const allowedLocales = [\n 'en',\n 'ar',\n 'bg',\n 'ca',\n 'cs',\n 'da',\n 'de',\n 'el',\n 'es',\n 'et',\n 'fi',\n 'fr',\n 'hr',\n 'id',\n 'it',\n 'ja',\n 'ko',\n 'ms',\n 'nl',\n 'no',\n 'pl',\n 'pt',\n 'ru',\n 'sk',\n 'sl',\n 'sr',\n 'sv',\n 'th',\n 'tr',\n 'uk',\n 'zh',\n ];\n\n if (['cn', 'zh_HANT'].includes(userLocale)) {\n return 'zh';\n }\n\n if (['zh_HANS'].includes(userLocale)) {\n return 'tw';\n }\n\n return allowedLocales.find((locale) => locale === userLocale) ?? 'en';\n }\n}\n","export enum ApplePayIntegrationType {\n redirect = 'redirect',\n native = 'native',\n}\n\nexport type ApplePayIntegration = ApplePayIntegrationType;\n","import { ApplePayShippingContact } from './session-handlers/apple-pay-session.interface';\nimport { ShippingAddress } from './shipping-address.interface';\n\nexport const mapShippingAddressToContact = (\n shippingAddress: ShippingAddress,\n): ApplePayShippingContact => {\n return {\n postalCode: shippingAddress.zip,\n country: shippingAddress.country,\n countryCode: shippingAddress.country,\n administrativeArea: '',\n locality: '',\n newLineItems: [],\n };\n};\n","import { FieldNames } from './payment/field-names.enum';\n\nexport const agreementsGroup = [\n FieldNames.licenseDisclaimer,\n FieldNames.termsAndConditions,\n FieldNames.termsAndConditionsHtcEula,\n FieldNames.termsAndConditionsAtariTc,\n FieldNames.termsAndConditionsAtariPp,\n FieldNames.termsAndConditionsRolandEula,\n FieldNames.termsAndConditionsRobloxEula,\n FieldNames.termsAndConditionsDeusLoVultEula,\n FieldNames.termsAndConditionsOnzenga,\n FieldNames.take2Taxes,\n FieldNames.rockstarTaxes,\n FieldNames.omnibusDirective,\n FieldNames.koreaLimitsInstruction,\n FieldNames.koreaCashReceiptInstruction,\n];\n","import { Injectable } from '@angular/core';\nimport { agreementsGroup } from '../../../agreements-group.const';\nimport { FieldNames } from '../../../payment/field-names.enum';\nimport { Field } from '../../../payment/field.interface';\nimport { PaymentForm } from '../../../payment/payment-form.interface';\nimport { XpsSummary } from '../../../payment/xps-summary.interface';\nimport { ApplePayParams } from '../apple-pay-params.interface';\nimport { XpsBoolean } from '../../../xps-boolean.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplePayParamsBuilderService {\n private readonly agreementFieldsNames: string[] = agreementsGroup;\n\n public buildParams(paymentForm: PaymentForm): ApplePayParams | null {\n const { fields, summary } = paymentForm;\n\n if (!fields || !summary) return null;\n\n const formFields = fields.reduce(\n (acc: { [key: string]: string }, field) => {\n if (\n this.agreementFieldsNames.includes(field.name) &&\n field.isVisible === XpsBoolean.true\n ) {\n acc[field.name] = field.title;\n } else {\n acc[field.name] = field.value;\n }\n\n return acc;\n },\n {},\n );\n\n const agreements = this.agreementFieldsNames\n .map((fieldName) => [fieldName, formFields[fieldName]])\n .filter((fieldEntry) => {\n const [, value] = fieldEntry;\n return !!value;\n });\n\n return {\n tokenKey: this.getAppleToken(fields),\n totalLabel: formFields[FieldNames.labelApplePay] ?? '',\n totalAmount: this.getTotalAmount(summary),\n currencyCode: this.getTotalCurrency(summary),\n countryCode: formFields[FieldNames.countryCode] ?? '',\n merchantCapabilities: this.getJsonValueFromField(\n formFields,\n FieldNames.merchantCapabilities,\n ),\n requiredBillingContactFields: this.getJsonValueFromField(\n formFields,\n FieldNames.requiredBillingContactFields,\n ),\n requiredShippingContactFields: this.getJsonValueFromField(\n formFields,\n FieldNames.requiredShippingContactFields,\n ),\n supportedNetworks: this.getJsonValueFromField(\n formFields,\n FieldNames.supportedNetworks,\n ),\n agreements,\n acquirer: formFields[FieldNames.acquirer] ?? '',\n isSandbox: formFields[FieldNames.isSandbox] ?? '',\n payInstanceAccountId: formFields[FieldNames.payInstanceAccountId] ?? '',\n getApplePaySessionUrl: formFields[FieldNames.getApplePaySessionUrl] ?? '',\n payViaCheckoutUrl: formFields[FieldNames.payViaCheckoutUrl] ?? '',\n };\n }\n\n public updateParams(\n params: ApplePayParams,\n summary: XpsSummary,\n ): ApplePayParams {\n return {\n ...params,\n totalAmount: this.getTotalAmount(summary),\n currencyCode: this.getTotalCurrency(summary),\n };\n }\n\n private getJsonValueFromField(\n fields: {\n [key: string]: string;\n },\n fieldName: string,\n ): string[] | undefined {\n const field = fields[fieldName];\n\n try {\n return field ? (JSON.parse(field) as string[]) : undefined;\n } catch (error: unknown) {\n return undefined;\n }\n }\n\n private getAppleToken(fields: Field[]): string {\n const appleTokenField = fields.find((field) => {\n return field.name === 'token_key';\n });\n\n if (!appleTokenField) {\n return '';\n }\n\n return appleTokenField.value;\n }\n\n private getTotalAmount(summary: XpsSummary): string {\n const finance = summary?.finance;\n const total = finance?.grand_total?.amount ?? finance?.total.amount;\n\n return total?.toString() ?? '';\n }\n\n private getTotalCurrency(summary: XpsSummary): string {\n const finance = summary?.finance;\n return finance?.grand_total?.currency ?? finance?.total?.currency ?? '';\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { windowToken } from '../../window.token';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport { ErrorTags } from '../../exceptions-handling/errors/elk-error-types.enum';\nimport { Observable, Subject } from 'rxjs';\nimport { LoggerService } from '../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../exceptions-handling/errors';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplePaySdkService {\n public readonly needToAddApplePayJs: boolean;\n public sdkLoaded = false;\n\n private readonly jsSdk =\n 'https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js';\n private readonly sdkSuccessfulPayment: Subject<void> = new Subject();\n private readonly windowClosing: Subject<void> = new Subject();\n private readonly successPaymentType = 'successClose';\n private readonly windowClosingType = 'windowclosing';\n\n private applePaySdkPostMessagesListener!: (event: MessageEvent) => void;\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly loggerService: LoggerService,\n ) {\n this.needToAddApplePayJs = !this.window.ApplePaySession;\n }\n\n public get windowClosing$(): Observable<void> {\n return this.windowClosing.asObservable();\n }\n\n public emitWindowClosing(): void {\n return this.windowClosing.next();\n }\n\n public addApplePaySdkJs(): void {\n const isApplePayJsAdded = this.isAppleSdkExist();\n\n if (!this.needToAddApplePayJs) {\n if (isApplePayJsAdded) {\n this.sdkLoaded = true;\n }\n\n return;\n }\n\n const listenApplePayPostMessages = (): void => {\n this.applePaySdkPostMessagesListener = (\n event: MessageEvent<{ messageType: string }>,\n ) => {\n /* istanbul ignore if */\n if (!event.origin.includes('apple')) {\n return;\n }\n\n /* istanbul ignore if */\n if (event.data.messageType === this.windowClosingType) {\n this.emitWindowClosing();\n }\n\n /* istanbul ignore if */\n if (event.data.messageType === this.successPaymentType) {\n this.sdkSuccessfulPayment.next();\n }\n };\n\n this.window.addEventListener(\n 'message',\n this.applePaySdkPostMessagesListener,\n );\n };\n\n if (isApplePayJsAdded && this.window.ApplePaySession) {\n this.sdkLoaded = true;\n listenApplePayPostMessages();\n return;\n }\n\n const firstScriptElement =\n this.window.document.getElementsByTagName('script')[0];\n const script = this.window.document.createElement('script');\n script.async = true;\n script.crossOrigin = 'anonymous';\n script.src = `${this.jsSdk}`;\n firstScriptElement?.parentNode?.insertBefore(script, firstScriptElement);\n script.onload = () => {\n this.sdkLoaded = true;\n listenApplePayPostMessages();\n };\n script.onerror = (error: unknown) => {\n this.loggerService.error(\n new TaggedError(\n 'Apple pay: script sdk loading error',\n [ErrorTags.APPLEPAY],\n // @ts-expect-error error type\n { error: error?.message ? error.toString() : JSON.stringify(error) },\n ),\n );\n console.error('Apple pay: script sdk loading error', error);\n };\n }\n\n /* istanbul ignore next */\n public removeListeners(): void {\n if (!this.applePaySdkPostMessagesListener) {\n return;\n }\n this.window.removeEventListener(\n 'message',\n this.applePaySdkPostMessagesListener,\n );\n }\n\n private isAppleSdkExist(): boolean {\n const scriptsElements = this.window.document.querySelectorAll('script');\n\n return Array.from(scriptsElements).some(\n (element) => element.src === this.jsSdk,\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { SecureApiClient } from '../../http/secure-api/secure-api.service';\nimport { BridgeConnectionChannel } from './bridge-connection-channel.interface';\nimport { BridgeRequestMessagePayload } from './bridge-request-payload.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SocketBridgeService {\n private readonly apiUrl = 'socket_bridge';\n private token!: string;\n\n public constructor(private readonly secureApiClient: SecureApiClient) {}\n\n public async getBridgeConnectionChannel(\n token: string,\n ): Promise<BridgeConnectionChannel> {\n this.token = token;\n const params = new HttpParams().set('access_token', token);\n\n return firstValueFrom(\n this.secureApiClient.get<BridgeConnectionChannel>(\n `${this.apiUrl}/socket_url`,\n {\n params,\n },\n ),\n );\n }\n\n public async publishMessage<P = { [key: string]: unknown }>(\n message: string,\n messagePayload?: P,\n ): Promise<void> {\n const requestPayload: BridgeRequestMessagePayload<P> = {\n message: {\n command: message,\n data: messagePayload,\n },\n };\n\n const endpointUrl = `${this.apiUrl}/message?access_token=${this.token}`;\n\n return firstValueFrom(\n this.secureApiClient.post<void, BridgeRequestMessagePayload<P>>(\n endpointUrl.toString(),\n requestPayload,\n {\n headers: new HttpHeaders().set(\n 'Content-Type',\n 'application/json; charset=utf-8',\n ),\n responseType: 'json',\n },\n ),\n );\n }\n}\n","import { Observable } from 'rxjs';\nimport { filter, map, tap } from 'rxjs/operators';\nimport { Inject, Injectable } from '@angular/core';\nimport { WebSocketFactory } from '../../../web-socket/web-socket.factory';\nimport { WebSocketClient } from '../../../web-socket/web-socket.interface';\nimport { windowToken } from '../../../window.token';\nimport { ExtendedWindow } from '../../../extended-window.interface';\nimport { SocketBridgeService } from '../../../web-socket/socket-bridge/socket-bridge.service';\nimport { WindowCloseMessage } from '../socket-messages/window-close-message.interface';\nimport { WindowCommand } from '../../../window-command.interface';\nimport { CommandsForPages } from '../commands-for-pages.enum';\nimport { BridgeCommand } from '../../../web-socket/socket-bridge/bridge-command.interface';\nimport { RecalculateCartMessage } from '../socket-messages/recalculate-cart-message.interface';\nimport { ApplePaySendTokenMessage } from '../socket-messages/send-token-message.interface';\nimport { ReturnMessage } from '../socket-messages/return-message.interface';\nimport { UserBehaviourAnalyticsService } from '../../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplePayExternalWindowCommunicationService {\n private websocketClient!: WebSocketClient;\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly webSocketFactory: WebSocketFactory,\n private readonly socketBridgeService: SocketBridgeService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n ) {}\n\n public getWindowClose$(): Observable<WindowCloseMessage> {\n const isWindowCloseMessage = (\n message: WindowCommand,\n ): message is WindowCloseMessage =>\n message.command === CommandsForPages.APPLE_PAY_WINDOW_CLOSE;\n\n const eventSource$ =\n this.getEventSource<WindowCloseMessage>(isWindowCloseMessage);\n\n return eventSource$.pipe(\n tap(() => {\n this.window.focus();\n }),\n );\n }\n\n public getWindowReturnMessage$(): Observable<ReturnMessage> {\n const isReturnMessage = (\n message: WindowCommand,\n ): message is ReturnMessage =>\n message.command === CommandsForPages.APPLE_PAY_RETURN;\n\n const eventSource$ = this.getEventSource<ReturnMessage>(isReturnMessage);\n\n return eventSource$.pipe(\n tap(() => {\n // TODO: send close event to sdk\n }),\n );\n }\n\n public getWindowSendTokenMessage$(): Observable<ApplePaySendTokenMessage> {\n const isSendTokenMessage = (\n message: WindowCommand,\n ): message is ApplePaySendTokenMessage =>\n message.command === CommandsForPages.APPLE_PAY_SEND_TOKEN;\n\n return this.getEventSource<ApplePaySendTokenMessage>(isSendTokenMessage);\n }\n\n public getCartRecalculationMessage$(): Observable<RecalculateCartMessage> {\n const isRecalculateCartMessage = (\n message: WindowCommand,\n ): message is RecalculateCartMessage =>\n message.command === CommandsForPages.APPLE_PAY_RECALCULATE_CART;\n\n return this.getEventSource<RecalculateCartMessage>(\n isRecalculateCartMessage,\n );\n }\n\n public async openWebSocketConnection(token: string): Promise<void> {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayOpenWebSocketConnection,\n 'manual',\n );\n\n const bridgeInfo =\n await this.socketBridgeService.getBridgeConnectionChannel(token);\n\n if (this.websocketClient) {\n this.websocketClient.close();\n }\n\n this.websocketClient = this.webSocketFactory.createWebSocketClient(\n bridgeInfo.subscribeUrl,\n bridgeInfo.clientType,\n );\n\n await this.websocketClient.open(\n bridgeInfo.subscribeUrl,\n bridgeInfo.channelName,\n );\n }\n\n public async sendMessageToAnotherWindow<P extends { [key: string]: unknown }>(\n command: CommandsForPages,\n payload?: P,\n ): Promise<void> {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePaySendMessageToAnotherWindow,\n 'manual',\n { value: command },\n );\n\n await this.socketBridgeService.publishMessage<P>(command, payload);\n }\n\n private getEventSource<T extends WindowCommand>(\n eventHandler: (message: WindowCommand) => message is T,\n ): Observable<T> {\n return this.websocketClient.messages$.pipe(\n map<string, BridgeCommand>((message) => {\n console.info('websocket message', message);\n return JSON.parse(message) as BridgeCommand;\n }),\n filter<BridgeCommand, T>(eventHandler),\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { ApplePay, applePay, client } from 'braintree-web';\nimport { ExtendedWindow } from '../../extended-window.interface';\nimport {\n payStation4Url,\n sandboxPayStationUrl,\n} from '../../payment/actions/redirect/pay-station4-url.const';\nimport { applePayId } from '../../payment/actions/redirect/ps4-pages/pages-payment-methods-id.const';\nimport { pagesRoutes } from '../../payment/actions/redirect/ps4-pages/pages-routes.const';\nimport { FieldNames } from '../../payment/field-names.enum';\nimport { SummaryFinanceDetailsAdapterService } from '../../payment/finance-details/summary/summary-finance-details-adapter.service';\nimport { XpsResponse } from '../../payment/xps-response.interface';\nimport { windowToken } from '../../window.token';\nimport {\n ApplePayIntegration,\n ApplePayIntegrationType,\n} from './apple-pay-integration.type';\nimport { ApplePayParams } from './apple-pay-params.interface';\nimport { applePayVersion } from './apple-pay.const';\nimport { ApplePayErrors } from './apple-pay.errors.enum';\nimport { BraintreeHandler } from './session-handlers/braintree.handler';\nimport { CheckoutHandler } from './session-handlers/checkout.handler';\nimport { ApplePaySessionHandler } from './session-handlers/session-handler.type';\nimport { PaymentForm } from '../../payment/payment-form.interface';\nimport { ApplePayParamsBuilderService } from './params-builder/apple-pay-params-builder.service';\nimport { ErrorTags } from '../../exceptions-handling/errors/elk-error-types.enum';\nimport { StartSessionParams } from './session-handlers/start-session-params.interface';\nimport { ApplePaySdkService } from './apple-pay-sdk.service';\nimport { ApplePayExternalWindowCommunicationService } from './external-window-communication/external-window-communication.service';\nimport { mapShippingAddressToContact } from './map-shipping-address-to-contact.function';\nimport { RecalculateCartMessage } from './socket-messages/recalculate-cart-message.interface';\nimport { ApplePaySendTokenMessage } from './socket-messages/send-token-message.interface';\nimport { WindowCloseMessage } from './socket-messages/window-close-message.interface';\nimport { ReturnMessage } from './socket-messages/return-message.interface';\nimport { SettingsService } from '../../settings/settings.service';\nimport { ShippingAddress } from './shipping-address.interface';\nimport { ApplePayShippingContact } from './session-handlers/apple-pay-session.interface';\nimport { UpdatedPrice } from './updated-price.interface';\nimport { UpdatePriceMessage } from './socket-messages/update-price-message.interface';\nimport { CommandsForPages } from './commands-for-pages.enum';\nimport { LoggerService } from '../../exceptions-handling/logger/logger.service';\nimport { TaggedError } from '../../exceptions-handling/errors/tagged-error.class';\nimport { UserBehaviourAnalyticsService } from '../../user-behaviour-analytics/user-behaviour-analytics.service';\nimport { UserBehaviourEventName } from '../../user-behaviour-analytics/user-behaviour-event-name.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplePayService {\n private readonly payment: Subject<string> = new Subject();\n private readonly error: Subject<ApplePayErrors> = new Subject();\n private readonly integrationType: Subject<ApplePayIntegration> =\n new Subject();\n private readonly applePayQrOpened: Subject<void> = new Subject();\n private readonly destroy$ = new Subject<void>();\n\n private paymentClient: ApplePay | null = null;\n\n private readonly api: Promise<{\n applePay: typeof applePay;\n client: typeof client;\n }>;\n private applePayParams: ApplePayParams | null = null;\n private order?: string | null = null;\n\n public get paymentParameters(): ApplePayParams | null {\n return this.applePayParams;\n }\n\n public get payment$(): Observable<string> {\n return this.payment.asObservable();\n }\n\n public get error$(): Observable<ApplePayErrors> {\n return this.error.asObservable();\n }\n\n /* istanbul ignore next */\n public get applePayQrOpened$(): Observable<void> {\n return this.applePayQrOpened.asObservable();\n }\n\n /* istanbul ignore next */\n public get windowClosing$(): Observable<void> {\n return this.applePaySdkService.windowClosing$;\n }\n\n public get integrationType$(): Observable<ApplePayIntegration> {\n return this.integrationType.asObservable();\n }\n\n public get getCartRecalculationMessage$(): Observable<RecalculateCartMessage> {\n return this.externalWindowCommunicationService\n .getCartRecalculationMessage$()\n .pipe(takeUntil(this.destroy$));\n }\n\n public get getWindowSendTokenMessage$(): Observable<ApplePaySendTokenMessage> {\n return this.externalWindowCommunicationService\n .getWindowSendTokenMessage$()\n .pipe(takeUntil(this.destroy$));\n }\n\n public get getWindowClose$(): Observable<WindowCloseMessage> {\n return this.externalWindowCommunicationService\n .getWindowClose$()\n .pipe(takeUntil(this.destroy$));\n }\n\n public get getWindowReturnMessage$(): Observable<ReturnMessage> {\n return this.externalWindowCommunicationService\n .getWindowReturnMessage$()\n .pipe(takeUntil(this.destroy$));\n }\n\n public constructor(\n @Inject(windowToken) private readonly window: ExtendedWindow,\n private readonly summaryFinanceDetailsAdapterService: SummaryFinanceDetailsAdapterService,\n private readonly braintreeHandler: BraintreeHandler,\n private readonly checkoutHandler: CheckoutHandler,\n private readonly appleParamsBuilder: ApplePayParamsBuilderService,\n private readonly loggerService: LoggerService,\n private readonly applePaySdkService: ApplePaySdkService,\n private readonly externalWindowCommunicationService: ApplePayExternalWindowCommunicationService,\n private readonly userBehaviourAnalyticsService: UserBehaviourAnalyticsService,\n private readonly settingsService: SettingsService,\n ) {\n this.api = this.loadBraintree();\n\n this.subscribeToHandlers();\n }\n\n /* istanbul ignore next */\n public addApplePaySdkJs(): void {\n this.applePaySdkService.addApplePaySdkJs();\n }\n\n /* istanbul ignore next */\n public removeListeners(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.applePaySdkService.removeListeners();\n }\n\n public setApplePayParams(data: { paymentForm: PaymentForm }): void {\n const paymentForm = data?.paymentForm;\n const formFields = paymentForm?.fields;\n const summary = paymentForm?.summary;\n\n if (!formFields || !summary) {\n return;\n }\n\n this.applePayParams = this.appleParamsBuilder.buildParams(paymentForm);\n }\n\n public async initBraintreeLibrary(tokenKey: string): Promise<void> {\n try {\n const api = await this.api;\n const clientInstance = await api.client.create({\n authorization: tokenKey,\n });\n\n this.paymentClient = await api.applePay.create({\n client: clientInstance,\n });\n this.braintreeHandler.setClient(this.paymentClient);\n } catch (error: unknown) {\n console.error(ApplePayErrors.braintreeInitializeError, error);\n this.loggerService.error(\n new TaggedError(ApplePayErrors.braintreeInitializeError, [\n ErrorTags.APPLEPAY,\n ]),\n );\n }\n\n if (!this.paymentClient || !this.isDeviceCapable) {\n this.emitError(ApplePayErrors.deviceIsNotCapableError);\n }\n }\n\n public async initApplePay(\n tokenKey: string,\n isApplePayInstantFlowEnabled: boolean,\n ): Promise<void> {\n if (this.applePayParams?.acquirer === 'braintree') {\n await this.initBraintreeLibrary(tokenKey);\n }\n\n this.emitIntegrationType(isApplePayInstantFlowEnabled);\n }\n\n public async startWindowCommunication(): Promise<void> {\n await this.externalWindowCommunicationService.openWebSocketConnection(\n this.settingsService.token,\n );\n }\n\n public sendUpdatedPriceViaWindowCommunication(\n updatedPrice: UpdatedPrice,\n ): void {\n void this.externalWindowCommunicationService.sendMessageToAnotherWindow<\n UpdatePriceMessage['data']\n >(CommandsForPages.APPLE_PAY_UPDATE_PRICE, {\n newCartPricing: updatedPrice,\n });\n }\n\n public redirectToPaymentPage(\n parameters: ApplePayParams,\n token: string,\n isSandbox?: boolean,\n ): string | undefined {\n const route = pagesRoutes.get(applePayId);\n if (!route) {\n return;\n }\n\n const query = new URLSearchParams({\n ...parameters,\n merchantCapabilities: JSON.stringify(parameters.merchantCapabilities),\n supportedNetworks: JSON.stringify(parameters.supportedNetworks),\n requiredBillingContactFields: JSON.stringify(\n parameters?.requiredBillingContactFields,\n ),\n requiredShippingContactFields: JSON.stringify(\n parameters?.requiredShippingContactFields,\n ),\n agreements: JSON.stringify(parameters.agreements),\n token,\n });\n\n if (this.order) {\n query.append('order', this.order);\n }\n\n const payStationUrl = isSandbox ? sandboxPayStationUrl : payStation4Url;\n return `${payStationUrl}/en${route}?${query.toString()}`;\n }\n\n public setOrder(data: { paymentForm: PaymentForm }): void {\n const summary = data?.paymentForm?.summary;\n if (!summary) {\n return;\n }\n\n const financeDetails =\n this.summaryFinanceDetailsAdapterService.getFinanceDetails(summary);\n\n if (financeDetails?.purchase && financeDetails?.finance) {\n const cartItems = financeDetails.cartItems;\n this.order = cartItems?.reduce((curr, item) => {\n if (curr) {\n return curr + `; ${item.title}`;\n }\n\n return curr + item.title;\n }, '');\n }\n }\n\n public get isDeviceCapable(): boolean {\n if (this.applePaySdkService.needToAddApplePayJs) {\n return true;\n }\n\n try {\n return Boolean(\n this.window.ApplePaySession?.supportsVersion(applePayVersion) &&\n this.window.ApplePaySession?.canMakePayments(),\n );\n } catch (error: unknown) {\n return false;\n }\n }\n\n public getTokenNonceFieldData(tokenNonce: string): {\n name: string;\n value: string;\n } {\n const name = FieldNames.tokenApplePay;\n const value = btoa(tokenNonce);\n return { name, value };\n }\n\n public updateApplePayParams(data: unknown): void {\n const summary = (data as XpsResponse)?.summary;\n if (!this.applePayParams || !summary) {\n return;\n }\n\n this.applePayParams = this.appleParamsBuilder.updateParams(\n this.applePayParams,\n summary,\n );\n }\n\n public proceedCheckout(\n parameters: ApplePayParams,\n additionalParams: StartSessionParams,\n ): void {\n this.userBehaviourAnalyticsService.send(\n UserBehaviourEventName.applePayAcquirer,\n 'manual',\n { value: parameters.acquirer },\n );\n\n const sessionHandler = this.getSessionHandler(parameters.acquirer);\n\n if (!sessionHandler) {\n console.error('Apple Pay: Unsupported acquirer:', parameters.acquirer);\n return;\n }\n\n sessionHandler.startSession(parameters, additionalParams, () =>\n this.applePaySdkService.emitWindowClosing(),\n );\n this.emitApplePayOpened(\n additionalParams.isApplePayInstantFlowEnabled ?? false,\n );\n }\n\n public mapShippingAddressToContact(\n shippingAddress: ShippingAddress,\n ): ApplePayShippingContact {\n return mapShippingAddressToContact(shippingAddress);\n }\n\n public setToken(token: string): void {\n this.payment.next(token);\n }\n\n private getSessionHandler(\n acquirer: string,\n ): ApplePaySessionHandler | undefined {\n switch (acquirer) {\n case 'braintree':\n return this.braintreeHandler;\n case 'checkout':\n return this.checkoutHandler;\n default:\n return undefined;\n }\n }\n\n private async loadBraintree(): Promise<{\n applePay: typeof applePay;\n client: typeof client;\n }> {\n const api = await import('braintree-web');\n return api;\n }\n\n private emitError(error: ApplePayErrors): void {\n this.error.next(error);\n }\n\n private emitIntegrationType(isApplePayInstantFlowEnabled: boolean): void {\n this.integrationType.next(\n this.getIntegrationType(isApplePayInstantFlowEnabled),\n );\n }\n\n private subscribeToHandlers(): void {\n const handlers = [this.braintreeHandler, this.checkoutHandler];\n\n handlers.forEach((handler) => {\n handler.error$.subscribe((error) => this.emitError(error));\n handler.payment$.subscribe((token) => {\n this.payment.next(token);\n });\n });\n }\n\n private getIntegrationType(\n isApplePayInstantFlowEnabled: boolean,\n ): ApplePayIntegrationType {\n /* istanbul ignore next */\n return this.isDeviceCapable && isApplePayInstantFlowEnabled\n ? ApplePayIntegrationType.native\n : ApplePayIntegrationType.redirect;\n }\n\n private emitApplePayOpened(isApplePayInstantFlowEnabled: boolean): void {\n /* istanbul ignore next */\n if (\n this.getIntegrationType(isApplePayInstantFlowEnabled) ===\n ApplePayIntegrationType.native &&\n this.applePaySdkService.needToAddApplePayJs\n ) {\n this.applePayQrOpened.next();\n }\n }\n}\n","/*\n * Public API Surface of core-library\n */\n\nexport * from './lib/core-library.service';\nexport * from './lib/core-library.module';\nexport * from './lib/core/legal/legal.component.config';\n\nexport * from './lib/core/sdk-payment-systems/payment-systems/payment-system-processing.service';\nexport * from './lib/core/sdk-payment-systems/google-pay/google-pay.service';\n\nexport * from './lib/core/sdk-payment-systems/apple-pay/apple-pay.service';\nexport * from './lib/core/sdk-payment-systems/apple-pay/apple-pay-cart/apple-pay-cart.service';\nexport * from './lib/core/sdk-payment-systems/apple-pay/apple-pay-params.interface';\n\nexport * from './lib/core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types';\nexport * from './lib/core/payment/form/control-status.interface';\nexport * from './lib/core/payment/field-names.enum';\n\nexport * from './lib/core/credit-card/credit-card-types.enum';\nexport * from './lib/core/countries-api/country-response.interface';\nexport * from './lib/core/transaction-initiation-type.enum';\n\nexport * from './lib/core/sdk-payment-systems/google-pay/google-pay-button-color.type';\n\nexport * from './lib/core/xsolla-number/api/send-instruction/response/send-instruction-response.interface';\n\nexport * from './lib/core/exceptions-handling/errors';\nexport * from './lib/core/exceptions-handling/messages';\nexport * from './lib/core/exceptions-handling/logger';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SecureApiClient","i1.SettingsService","i2.UserAgentService","i1.CommonLogAttributesService","i2","i1.ElkLoggerService","i2.CountryService","i3.SecureApiClient","i2.SecureApiClient","i1.UrlService","i2.SettingsService","i3.CountryService","i4.UserAgentService","i1.PaymentConfigService","i2.CapabilitiesService","i2.EventBuilderService","i3.SettingsService","i1.ShowErrorsActionCreator","i2.UserBehaviourAnalyticsService","i1.UnescapeHtmlPipe","i1.CreditCardService","i1.XpsApiService","i4.NextActionService","i5.XpsResponseErrorsMappingService","i6.EncryptCreditCardService","i7.ShowErrorsActionCreator","i8.UserBehaviourAnalyticsService","i9.PaymentSettingsService","i10.SessionService","i11.ServerErrorActionCreator","i2.DeviceFingerPrintService","i3.XpsApiService","i4.XpsResponseErrorsMappingService","i5.EncryptCreditCardService","i6.UserBehaviourAnalyticsService","i7.PaymentSettingsService","i8.NextActionService","i9.ServerErrorActionCreator","i2.NextActionService","i6.ShowErrorsActionCreator","i7.UserBehaviourAnalyticsService","i8.PaymentSettingsService","i9.SessionService","i10.ServerErrorActionCreator","i1.SyncService","i3.SessionService","i2.CreditCardMaxLengthValidator","i3.CreditCardMinLengthValidator","maxMonths","getMinMonth","sendErrMessage","getLastCharactersInYear","maxYearsCount","i1.ControlConfigService","i1.SummaryFinanceDetailsAdapterService","i1.SessionService","i2.SummaryFinanceDetailsAdapterService","i3.StatusFinanceDetailsAdapterService","i4.UserBehaviourAnalyticsService","i3.XpsResponseErrorsMappingService","map","i1.LoggerService","i1.NchanWebSocketService","i2.CentrifugoWebSocketService","i1.WebSocketFactory","filter","i1.StatusRequestService","i2.CheckStatusService","i3.WebsocketStatusService","i2.ListenStatusService","i3.SavedPaymentAccountChangesService","i5.CheckStatusService","i6.StatusUpdatedActionCreator","i2.StatusRequestService","i3.FinanceDetailsService","i4.ListenStatusService","i5.NextActionService","i6.SavePaymentMethodStatusService","i7.StatusUpdatedActionCreator","i1.UserBehaviourAnalyticsService","i1.NotifyDfpStatusService","i1.StatusThreeDsService","i2.NotifyDfpStatusService","i3.WebSocketFactory","i4.DfpCollectService","i5.ReinsuranceCheckService","i1.ThreeDs20Service","i3.CheckStatusActionCreator","i4.ThreeDsActionCreator","i5.ThreeDsRedirectActionCreator","i2.InitializeService","i3.SubmitService","i4.SyncService","i5.FormService","i6.StatusService","i7.FinanceDetailsService","i8.CreditCardStateService","i9.NextActionService","i10.InitializeNextActionService","i11.ControlConfigService","i12.ThreeDsService","i13.FormMessagesService","i14.SettingsService","i15.CountryService","i16.CheckStatusActionCreator","i17.PrintInstructionService","i18.PaymentBehaviourService","i20.UserBehaviourAnalyticsService","i1.CountryService","i3.RefundPolicyService","i4.DisclaimerService","i1.SavedMethodsService","i1.PaymentMethodsService","i2.SavedMethodsService","i2.LoggerService","i4.PaymentMethodsService","i5.SavedMethodsService","i6.UserBalanceService","i7.PaymentConfigService","i8.PaymentService","i9.DeviceFingerPrintService","i10.FinanceDetailsService","i11.LegalService","i12.StatusService","i13.NextActionService","i14.CreditCardService","i15.CreditCardStateService","i16.FormMessagesService","i17.EditSavedMethodsService","i18.UserBehaviourAnalyticsService","i19.PerformanceService","i20.CombinedPaymentMethodsService","i21.CountriesApiService","i22.SendInstructionService","i23.ScriptTrackerService","i24","i25.CommonLogAttributesService","i26.CapabilitiesService","i1","i2.ApplePayCartService","i3.UserBehaviourAnalyticsService","i1.PaymentSystemProcessingService","i3.LoggerService","i2.PaymentSystemProcessingService","i3.GooglePayCheckoutPaymentService","i4.GooglePayInstantPaymentService","i2.SocketBridgeService","i2.BraintreeHandler","i3.CheckoutHandler","i4.ApplePayParamsBuilderService","i5.LoggerService","i6.ApplePaySdkService","i7.ApplePayExternalWindowCommunicationService","i9.SettingsService"],"mappings":";;;;;;;;;;;;;;MAGa,eAAe,CAAA;IAGnB,OAAO,IAAI,CAAC,OAAyB,EAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;AAGjB,IAAA,OAAO,CAAC,CACb,GAAW,EACX,YAAoB,EACpB,iBAA2C,EAAA;QAE3C,QACG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAmB;AAC/D,YAAA,YAAY;;IAIT,OAAO,SAAS,CAAC,MAAc,EAAA;AACpC,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;AACjC,YAAA,OAAO,SAAS;;AAGlB,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;AACjC,YAAA,OAAO,SAAS;;AAGlB,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;AACjC,YAAA,OAAO,KAAK;;AAGd,QAAA,OAAO,MAAM,CAAC,WAAW,EAAE;;AAE9B;;ACpCK,MAAO,QAAS,SAAQ,KAAK,CAAA;AACjC,IAAA,WAAA,CAAmB,OAAe,EAAA;QAChC,KAAK,CAAC,OAAO,CAAC;;AAEjB;;ACFK,MAAO,uBAAwB,SAAQ,QAAQ,CAAA;AACnD,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,6DAA6D,CAAC;;AAEvE;;ACHM,MAAM,WAAW,GAAmC,IAAI,cAAc,CAC3E,QAAQ,CACT;;ACLM,MAAM,aAAa,GAAG,4CAA4C;AAClE,MAAM,aAAa,GACxB,oDAAoD;;MCSzC,eAAe,CAAA;IAG1B,WACmB,CAAA,UAAsB,EAEtB,MAAsB,EAAA;QAFtB,IAAU,CAAA,UAAA,GAAV,UAAU;QAEV,IAAM,CAAA,MAAA,GAAN,MAAM;QALjB,IAAa,CAAA,aAAA,GAAG,KAAK;;AAQtB,IAAA,cAAc,CAAC,aAAsB,EAAA;AAC1C,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;;IAG7B,GAAG,CAAI,GAAW,EAAE,OAAwB,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAI,CAAG,EAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAA,CAAE,EAAE,OAAO,CAAC;;AAG1D,IAAA,IAAI,CACT,GAAW,EACX,IAAqD,EACrD,OAAwB,EAAA;AAExB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAI,GAAG,IAAI,CAAC,OAAO,CAAA,EAAG,GAAG,CAAE,CAAA,EAAE,IAAI,EAAE,OAAO,CAAC;;AAGjE,IAAA,KAAK,CACV,GAAW,EACX,IAAoB,EACpB,OAAwB,EAAA;AAExB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAI,GAAG,IAAI,CAAC,OAAO,CAAA,EAAG,GAAG,CAAE,CAAA,EAAE,IAAI,EAAE,OAAO,CAAC;;AAGlE,IAAA,GAAG,CACR,GAAW,EACX,IAAoB,EACpB,OAAwB,EAAA;AAExB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAI,GAAG,IAAI,CAAC,OAAO,CAAA,EAAG,GAAG,CAAE,CAAA,EAAE,IAAI,EAAE,OAAO,CAAC;;IAGhE,MAAM,CAAI,GAAW,EAAE,OAAwB,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAI,CAAG,EAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAA,CAAE,EAAE,OAAO,CAAC;;AAGpE,IAAA,IAAW,OAAO,GAAA;QAChB,IAAI,iBAAiB,GAAkB,IAAI;AAE3C,QAAA,IAAI;YACF,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;;QACjE,OAAO,CAAU,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC;;QAG/C,IAAI,iBAAiB,EAAE;AACrB,YAAA,OAAO,iBAAiB;;QAG1B,OAAO,IAAI,CAAC,aAAa,GAAG,aAAa,GAAG,aAAa;;AA1DhD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,4CAKhB,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AALV,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAMI,MAAM;2BAAC,WAAW;;;MCCV,eAAe,CAAA;AAC1B,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,uBAAuB,EAAE;;AAGrC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO;;AAG9B,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,uBAAuB,EAAE;;AAGrC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ;;AAG/B,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,uBAAuB,EAAE;;AAGrC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,oBAAoB,EAAE;YACvC,OAAO;AACL,gBAAA,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ;AACzB,gBAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB;aACzD;;AAGH,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ;;AAGhC,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,uBAAuB,EAAE;;AAGrC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;;AAG3B,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,uBAAuB,EAAE;;QAGrC,OAAO,IAAI,CAAC,QAAQ;;AAGtB,IAAA,IAAW,mBAAmB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI;;AAG9B,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI;;AAGpC,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI;;AAGvC,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI;;AAGxC,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ;;AAGvB,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,MAAM;;AAGpB,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ;;AAexB,IAAA,WAAA,CAAoC,SAA0B,EAAA;QAA1B,IAAS,CAAA,SAAA,GAAT,SAAS;QAZtC,IAAa,CAAA,aAAA,GAAG,KAAK;QAIpB,IAAM,CAAA,MAAA,GAAG,EAAE;QAGX,IAA6B,CAAA,6BAAA,GAAG,KAAK;QACrC,IAA8B,CAAA,8BAAA,GAAmB,IAAI;QACrD,IAAW,CAAA,WAAA,GAAG,KAAK;;IAKpB,MAAM,IAAI,CAAC,aAAgC,EAAA;AAChD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AACxB,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC;;AAG3C,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,KAAK;QACjC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO;AAC1C,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,KAAK;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,cAAc;AACnD,QAAA,IAAI,CAAC,6BAA6B;AAChC,YAAA,CAAC,CAAC,aAAa,CAAC,4BAA4B;AAC9C,QAAA,IAAI,CAAC,8BAA8B;AACjC,YAAA,aAAa,CAAC,6BAA6B,IAAI,IAAI;AAErD,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;QAEvC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAElC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;IAGpB,aAAa,GAAA;QAClB,OAAO,IAAI,CAAC,WAAW;;AAGjB,IAAA,YAAY,CAAC,MAA0B,EAAA;QAC7C,IAAI,CAAC,MAAM,EAAE;YACX;;AAGF,QAAA,IAAI;YACF,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;;AAChD,QAAA,MAAM;AACN,YAAA,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC;;;AAI3D,IAAA,IAAW,cAAc,GAAA;QACvB,OAAO,IAAI,CAAC,eAAe;;AAG7B,IAAA,IAAW,4BAA4B,GAAA;QACrC,OAAO,IAAI,CAAC,6BAA6B;;AAG3C,IAAA,IAAW,6BAA6B,GAAA;QACtC,OAAO,IAAI,CAAC,8BAA8B;;AAG5C,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,MAAM;;IAGpB,IAAW,KAAK,CAAC,KAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;IAGb,MAAM,WAAW,CAAC,KAAa,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC;QAE1D,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAEnD,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,cAAc,CAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAgB,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CACvD;;+GA1JQ,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;IChBW;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,UAAgB;AAChB,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,WAAkB;AAClB,IAAA,SAAA,CAAA,IAAA,CAAA,GAAA,SAAc;AACd,IAAA,SAAA,CAAA,IAAA,CAAA,GAAA,WAAgB;AAChB,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;AAC1B,IAAA,SAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAVW,SAAS,KAAT,SAAS,GAUpB,EAAA,CAAA,CAAA;;ACPK,MAAO,WAAY,SAAQ,KAAK,CAAA;AASpC,IAAA,WAAA,CAAmB,OAAe,EAAE,IAAkB,EAAE,KAAc,EAAA;QACpE,KAAK,CAAC,OAAO,CAAC;QAPT,IAAI,CAAA,IAAA,GAAgB,EAAE;AAIZ,QAAA,IAAA,CAAA,SAAS,GAAc,SAAS,CAAC,WAAW;AAK3D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;cACb,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ;AAChC,cAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QAEpB,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CACzB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAC7D;AACD,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC;;AAGxC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;;AAE3B;;AC5BM,MAAM,YAAY,GAAG,SAAkB;AAgCvC,MAAM,QAAQ,GAAuB;AAC1C,IAAA;AACE,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,4BAA4B,EAAE,kBAAkB;AACjD,KAAA;AACD,IAAA;AACE,QAAA,QAAQ,EAAE,kBAAkB;AAC5B,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,4BAA4B,EAAE,4BAA4B;AAC3D,KAAA;AACD,IAAA;AACE,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,4BAA4B,EAAE,gBAAgB;AAC/C,KAAA;AACD,IAAA;AACE,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,4BAA4B,EAAE,cAAc;AAC7C,KAAA;AACD,IAAA;AACE,QAAA,QAAQ,EAAE,yBAAyB;AACnC,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,4BAA4B,EAAE,eAAe;AAC9C,KAAA;AACD,IAAA;AACE,QAAA,QAAQ,EAAE,2BAA2B;AACrC,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,4BAA4B,EAAE,cAAc;AAC7C,KAAA;AACD,IAAA;AACE,QAAA,QAAQ,EAAE,2BAA2B;AACrC,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,4BAA4B,EAAE,oBAAoB;AACnD,KAAA;AACD,IAAA;AACE,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,4BAA4B,EAAE,iBAAiB;AAChD,KAAA;CACF;;ACzED,IAAY,MAGX;AAHD,CAAA,UAAY,MAAM,EAAA;AAChB,IAAA,MAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,MAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAHW,MAAM,KAAN,MAAM,GAGjB,EAAA,CAAA,CAAA;;ACMM,MAAM,MAAM,GAAW;AAC5B,IAAA;AACE,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,MAAM,EAAE,YAAY;AACrB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,MAAM,EAAE,8BAA8B;AACvC,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,MAAM,EAAE,gBAAgB;AACzB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,MAAM,EAAE,gBAAgB;AACzB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,MAAM,EAAE,gBAAgB;AACzB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,MAAM,EAAE,gBAAgB;AACzB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,MAAM,EAAE,iBAAiB;AAC1B,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,MAAM,EAAE,YAAY;AACrB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,QAAQ;AACjB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,MAAM;AACf,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,MAAM;AACf,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,6CAA6C;AACtD,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,MAAM,EAAE,YAAY;AACrB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,OAAO;AAChB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,MAAM,EAAE,eAAe;AACxB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,MAAM,EAAE,aAAa;AACtB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,MAAM,EAAE,gBAAgB;AACzB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,MAAM,EAAE,aAAa;AACtB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,iCAAiC;AAC1C,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,sBAAsB;AAC/B,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,oCAAoC;AAC7C,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,OAAO;AAChB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,8CAA8C;AACvD,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,0CAA0C;AACnD,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,MAAM;AACf,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,MAAM,EAAE,UAAU;AACnB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,iBAAiB;AAC1B,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,MAAM,EAAE,uCAAuC;AAChD,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,sCAAsC;AAC/C,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,oCAAoC;AAC7C,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,QAAQ;AACjB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,MAAM;AACf,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,MAAM,EAAE,OAAO;AAChB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,MAAM,EAAE,KAAK;AACd,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,MAAM,EAAE,KAAK;AACd,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,MAAM,EAAE,UAAU;AACnB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,gBAAgB;AACtB,QAAA,MAAM,EAAE,UAAU;AACnB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,MAAM,EAAE,WAAW;AACpB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,gBAAgB;AACtB,QAAA,MAAM,EAAE,UAAU;AACnB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,gBAAgB;AACtB,QAAA,MAAM,EAAE,UAAU;AACnB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,gBAAgB;AACtB,QAAA,MAAM,EAAE,UAAU;AACnB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,MAAM,EAAE,yDAAyD;AAClE,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,MAAM,EAAE,qDAAqD;AAC9D,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,oCAAoC;AAC1C,QAAA,MAAM,EAAE,YAAY;AACrB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,MAAM,EAAE,YAAY;AACrB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,MAAM,EAAE,WAAW;AACpB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,oCAAoC;AAC7C,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,YAAY;AACrB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,MAAM,EAAE,OAAO;AAChB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,MAAM,EAAE,mCAAmC;AAC5C,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,MAAM,EAAE,WAAW;AACpB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,MAAM;AACf,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,MAAM;AACf,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,+BAA+B;AACxC,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,aAAa;AACtB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,MAAM,EAAE,YAAY;AACrB,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;CACF;;MC1PY,gBAAgB,CAAA;AAO3B,IAAA,WAAA,CAEmB,MAAsB,EAAA;QAAtB,IAAM,CAAA,MAAA,GAAN,MAAM;QARjB,IAAY,CAAA,YAAA,GAAgB,IAAI;QAChC,IAAe,CAAA,eAAA,GAAkB,IAAI;QACrC,IAAW,CAAA,WAAA,GAAe,IAAI;QAC9B,IAAS,CAAA,SAAA,GAAkB,IAAI;QAC/B,IAAG,CAAA,GAAA,GAAkB,IAAI;QAM/B,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,gBAAgB,EAAE;;AAGzB,IAAA,IAAW,cAAc,GAAA;QACvB,OAAO,IAAI,CAAC,eAAe;;AAG7B,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW;;AAGzB,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,EAAE;YACnC,OAAO,IAAI,CAAC,MAAM;;QAGpB,OAAO,IAAI,CAAC,SAAS;;AAGvB,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS;;AAGxC,IAAA,IAAW,kBAAkB,GAAA;AAG3B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;YAClE,OAAO,IAAI,CAAC,SAAS;;QAGvB,OAAO,IAAI,CAAC,WAAW;;AAGzB,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,YAAY,KAAK,cAAc;;AAG7C,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC;QACvD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGzC,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;AACzB,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CACjC;QAED,OAAO,OAAO,GAAG,CAAA,EAAG,OAAO,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,OAAO,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,CAAE,GAAG,IAAI;;AAG1E,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,MAAM,WAAW,GAAgB;YAC/B,IAAI,EAAE,IAAI,CAAC,kBAAkB;YAC7B,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,YAAY,GAAG,IAAI;YACtD,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,IAAI;AACxC,YAAA,UAAU,EAAE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO;YAChE,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ;AAED,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,WAAW,CAAC,MAAM,GAAG,IAAI;;AAG3B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;;YAEf,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI;;AAG/C,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACtD,YAAA,WAAW,CAAC,MAAM,GAAG,IAAI;;AAG3B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpD,YAAA,WAAW,CAAC,IAAI,GAAG,IAAI;;AAGzB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpD,YAAA,WAAW,CAAC,IAAI,GAAG,IAAI;AACvB,YAAA,WAAW,CAAC,MAAM,GAAG,IAAI;;AAG3B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,WAAW,CAAC,OAAO,GAAG,IAAI;;AAG5B,QAAA,OAAO,WAAW;;AAGpB,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,MAAM,YAAY,GAAG;YACnB,SAAS;YACT,OAAO;YACP,QAAQ;YACR,MAAM;YACN,MAAM;YACN,YAAY;YACZ,UAAU;YACV,YAAY;YACZ,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,UAAU;YACV,MAAM;YACN,QAAQ;YACR,OAAO;SACR;AACD,QAAA,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGrE,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;;IAG5D,eAAe,GAAA;QACrB,MAAM,uBAAuB,GAC3B,IAAI,CAAC,MAAM,CAAC,SAGb,EAAE,aAAa;AAEhB,QAAA,MAAM,QAAQ,GACZ,uBAAuB,EAAE,QAAQ;AACjC,YAAA,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ;AAChC,YAAA,YAAY;AAEd,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE;;IAGjC,qBAAqB,GAAA;AAC3B,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC;YACtE,MAAM,sBAAsB,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAEjE,YAAA,IAAI,sBAAsB,KAAK,IAAI,EAAE;AACnC,gBAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,QAAQ;AACpC,gBAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS;AACpC,gBAAA,IAAI,CAAC,eAAe,GAAG,sBAAsB,CAAC,CAAC,CAAC;gBAChD;;AAGF,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,YAAY;AAC/B,YAAA,IAAI,CAAC,eAAe,GAAG,YAAY;;;IAI/B,gBAAgB,GAAA;AACtB,QAAA,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE;YACvB,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;YACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAE5C,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,gBAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI;gBAClB;;AAGF,YAAA,IAAI,CAAC,GAAG,GAAG,YAAY;;;AAI3B,IAAA,IAAY,WAAW,GAAA;QACrB,OAAO,IAAI,CAAC,YAAY;;AAG1B,IAAA,IAAY,SAAS,GAAA;QACnB,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGlD,IAAA,IAAY,MAAM,GAAA;QAChB,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGrC,IAAA,IAAY,OAAO,GAAA;QACjB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGtC,IAAA,IAAY,SAAS,GAAA;QACnB,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGxC,IAAA,IAAY,aAAa,GAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAqB;YAC1C,CAAC,SAAS,EAAE,OAAO,CAAC;YACpB,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACpB,CAAC,eAAe,EAAE,UAAU,CAAC;YAC7B,CAAC,QAAQ,EAAE,OAAO,CAAC;YACnB,CAAC,OAAO,EAAE,OAAO,CAAC;YAClB,CAAC,QAAQ,EAAE,OAAO,CAAC;YACnB,CAAC,gBAAgB,EAAE,OAAO,CAAC;AAC5B,SAAA,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,YAAY;;AAGrD,IAAA,IAAY,EAAE,GAAA;QACZ,OAAO,IAAI,CAAC,GAAG;;AAGjB,IAAA,IAAY,MAAM,GAAA;AAChB,QAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AACvE,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;AACxD,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,OAAO,MAAM;;AAEf,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,SAAS;;AAGlB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,SAAS;;AAGlB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,OAAO,OAAO;;AAGhB,QAAA,OAAO,IAAI;;AAzPF,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBAQjB,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AARV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BASI,MAAM;2BAAC,WAAW;;;MCVV,0BAA0B,CAAA;AACrC,IAAA,WAAA,CACwC,MAAsB,EAC3C,eAAgC,EAChC,gBAAkC,EAAA;QAFb,IAAM,CAAA,MAAA,GAAN,MAAM;QAC3B,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;;IAG5B,aAAa,GAAA;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc;QAEpD,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;YACjC,MAAM,EAAE,IAAI,EAAE,IAAI;AAClB,YAAA,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK;YAC7B,SAAS,EAAE,OAAO,EAAE,EAAE;YACtB,UAAU,EAAE,OAAO,EAAE,UAAU;AAC/B,YAAA,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;AACtC,YAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS;AAC1C,YAAA,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ;YAC1C,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW;YAC/D,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY;YACjE,UAAU,EAAE,QAAQ,EAAE;kBAClB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM;AACrC,kBAAE,MAAM;AACV,YAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK;AAC7B,YAAA,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc;AACpC,YAAA,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW;SAC/C;;AAGK,IAAA,cAAc,CAAC,GAAW,EAAA;QAChC,OAAO,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;;AAjC5C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,kBAE3B,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAFV,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAGI,MAAM;2BAAC,WAAW;;;MCMV,gBAAgB,CAAA;AAM3B,IAAA,WAAA,CACmB,0BAAsD,EACtD,IAAgB,EAChB,MAAc,EAAA;QAFd,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAC1B,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAM,CAAA,MAAA,GAAN,MAAM;AAPR,QAAA,IAAA,CAAA,OAAO,GAAW,IAAI,MAAM,CAC3C,sCAAsC,CACvC;AAOC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;;AAGlC,IAAA,WAAW,CAAC,KAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YACjC,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;gBACpB;;AAGF,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3C,SAAC,CAAC;;AAGG,IAAA,GAAG,CAAC,OAAe,EAAE,IAAe,EAAE,KAAc,EAAA;QACzD,MAAM,OAAO,GAAc,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;QAE3D,IAAI,SAAS,EAAE,EAAE;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;YAC1B;;AAGF,QAAA,MAAM,UAAU,GAAe;AAC7B,YAAA,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACxC,KAAK;YACL,OAAO;SACR;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC;;IAG3B,MAAM,UAAU,CAAC,KAAY,EAAA;AACnC,QAAA,MAAM,QAAQ,GACZ,KAAK,YAAY;AACf,cAAE;AACF,cAAE,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAExD,QAAQ,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AACnD,QAAA,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAElD,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ;QAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AAEvD,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AAC9B,QAAA,OAAO,QAAQ;;AAGT,IAAA,MAAM,cAAc,GAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,eAAe,CAAC;QAC7C,OAAO,OAAO,CAAC,OAAO;;IAGhB,MAAM,aAAa,CAAC,KAAY,EAAA;AACtC,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU;QAExC,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;QAExD,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAC7C,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC3D;AAED,QAAA,OAAO;aACJ,GAAG,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,QAAQ,EAAE;aACzC,IAAI,CAAC,IAAI,CAAC;;IAGP,iBAAiB,GAAA;QACvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE;QAE3E,OAAO;YACL,KAAK,EAAE,mBAAmB,CAAC,KAAK;AAChC,YAAA,QAAQ,EAAE;AACR,gBAAA,GAAG,EAAE,mBAAmB,CAAC,WAAW,IAAI,EAAE;AAC3C,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,EAAE,mBAAmB,CAAC,SAAS,IAAI,IAAI;AAC1C,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,GAAG,EAAE,mBAAmB,CAAC,WAAW,IAAI,EAAE;AAC3C,aAAA;AACD,YAAA,QAAQ,EAAE;gBACR,KAAK,EAAE,mBAAmB,CAAC,aAAa;gBACxC,MAAM,EAAE,mBAAmB,CAAC,cAAc;AAC3C,aAAA;YACD,WAAW,EAAE,mBAAmB,CAAC,UAAU;AAC3C,YAAA,OAAO,EAAE,mBAAmB,CAAC,OAAO,IAAI,EAAE;AAC1C,YAAA,KAAK,EAAE,mBAAmB,CAAC,KAAK,IAAI,EAAE;SACvC;;AAGK,IAAA,qBAAqB,CAAC,KAAkB,EAAA;AAC9C,QAAA,MAAM,YAAY,GAAG;YACnB,WAAW;YACX,UAAU;YACV,wBAAwB;YACxB,MAAM;SACP;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACjC,YAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAC,GAAwB,CAAC;AACxE,SAAC,CAAC;;QAGF,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;;IAGrC,OAAO,CACb,OAA4C,EAC5C,IAAe,EAAA;QAEf,MAAM,GAAG,GAAG,CAAA,+BAAA,EAAkC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;QAE9D,cAAc,CACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;YAC3B,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC;AAC5D,YAAA,YAAY,EAAE,MAAM;AACrB,SAAA,CAAC,CACH,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;;+GAjIxD,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCRY,aAAa,CAAA;AAGxB,IAAA,WAAA,CAAoC,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAFnC,IAAQ,CAAA,QAAA,GAAiB,EAAE;;AAIrC,IAAA,QAAQ,CAAC,OAAmB,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;;AAGtB,IAAA,KAAK,CAAC,KAA0B,EAAA;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;AAGzD,IAAA,IAAI,CAAC,IAAmB,EAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;AAC9D,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;;+GAhBrD,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCFY,cAAc,CAAA;AACzB,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI;QACtC,OAAO,IAAI,EAAE,UAAU,IAAI,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;;AAKtD,IAAA,WAAA,CAAoC,eAAgC,EAAA;QAAhC,IAAe,CAAA,eAAA,GAAf,eAAe;QAF3C,IAAkB,CAAA,kBAAA,GAAkB,IAAI;;AAIzC,IAAA,UAAU,CAAC,OAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO;;IAG5B,UAAU,GAAA;QACf,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE;;IAGlD,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;;+GAnBrC,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACHK,MAAO,aAAc,SAAQ,QAAQ,CAAA;AACzC,IAAA,WAAA,CAAmB,OAAgB,EAAA;AACjC,QAAA,KAAK,CAAC,iBAAiB,IAAI,OAAO,GAAG,CAAM,GAAA,EAAA,OAAO,IAAI,GAAG,GAAG,CAAC,CAAC;;AAEjE;;ACND,IAAY,aAGX;AAHD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACV,CAAC,EAHW,aAAa,KAAb,aAAa,GAGxB,EAAA,CAAA,CAAA;;MCEY,sBAAsB,CAAA;AAMjC,IAAA,WAAA,CAAmB,cAAiC,EAAA;QAClD,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KACjD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAC9B;QACD,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,KACvC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAC9B;QACD,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KACjD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAC9B;QACD,IAAI,CAAC,aAAa,GAAG;AACnB,YAAA,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,KAAK;AAC1C,YAAA,OAAO,EAAE,cAAc,CAAC,cAAc,CAAC,OAAO;SAC/C;;AAGK,IAAA,gBAAgB,CAAC,MAAwB,EAAA;QAC/C,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,GAAG;AACtB,YAAA,WAAW,EAAE,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC,IAAI;YACtD,kBAAkB,EAAE,MAAM,CAAC,oBAAoB;YAC/C,QAAQ,EAAE,MAAM,CAAC,gBAAgB;SAClC;;AAEJ;;AC9BM,MAAM,kCAAkC,GAC7C,IAAI,cAAc,CAAgC,wBAAwB,CAAC;AAEtE,MAAM,qCAAqC,GAAkB;AAClE,IAAA,OAAO,EAAE,kCAAkC;AAC3C,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAwB,KACpC,IAAI,sBAAsB,CAAC,GAAG,IAAI,CAAC;CACtC;;MCIY,qBAAqB,CAAA;AAKhC,IAAA,WAAA,CAEmB,eAA8C,EAC9C,eAAgC,EAChC,cAA8B,EAC9B,SAA0B,EAAA;QAH1B,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAS,CAAA,SAAA,GAAT,SAAS;QATX,IAAQ,CAAA,QAAA,GAAG,0BAA0B;AAErC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA2C;;AAUpE,IAAA,MAAM,aAAa,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;;IAGhB,MAAM,OAAO,CAAC,gBAA0B,EAAA;QAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAErD,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,OAAO,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC,QAAQ,CAAC;;QAGlE,OAAO,QAAQ,CAAC,QAAQ;;AAGnB,IAAA,MAAM,eAAe,GAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;QACrC,OAAO,QAAQ,CAAC,QAAQ;;IAGlB,MAAM,OAAO,CACnB,gBAA0B,EAAA;AAE1B,QAAA,MAAM,aAAa,GAAgC;AACjD,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACxC,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AACzC,YAAA,yBAAyB,EAAE;kBACxB,GAAA;AACD,kBAAkB,GAAA;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;SAClC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QAE9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CACZ,QAAQ,EACR,aAAa,CACX,IAAI,CAAC;AACF,iBAAA,IAAI,CACH,IAAI,CAAC,QAAQ,EACb,IAAI,eAAe,CAAC;AAClB,gBAAA,GAAG,aAAa;AAChB,gBAAA,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;AACnC,aAAA,CAAC,EACF;gBACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,gBAAA,YAAY,EAAE,MAAM;aACrB;iBAEF,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAClE,CACJ,CAAC,KAAK,CAAC,CAAC,KAAY,KAAI;AACvB,gBAAA,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;aACvC,CAAC,CACH;;;QAIH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAGzB,IAAA,iCAAiC,CACvC,OAAwB,EAAA;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE;AAClE,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC;QAEtE,OAAO,aAAa,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE;;AAG7C,IAAA,IAAY,oBAAoB,GAAA;QAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE;;AAvFjD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,kBAMtB,kCAAkC,EAAA,EAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAK,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANjC,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAOI,MAAM;2BAAC,kCAAkC;;;MCtBjC,oBAAoB,CAAA;AAG/B,IAAA,WAAA,CAAmB,YAAqC,EAAA;QACtD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;;AAGpE,IAAA,cAAc,CAAC,MAAsB,EAAA;QAC3C,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,YAAY;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,cAAc;YACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,cAAc,EAAE,MAAM,CAAC,gBAAgB;YACvC,UAAU,EAAE,MAAM,CAAC,WAAW;YAC9B,cAAc,EAAE,MAAM,CAAC,gBAAgB;YACvC,QAAQ,EAAE,MAAM,CAAC,gBAAgB;YACjC,SAAS,EAAE,MAAM,CAAC,UAAU;YAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB;;AAEJ;;ACvBM,MAAM,gCAAgC,GAC3C,IAAI,cAAc,CAA8B,sBAAsB,CAAC;AAElE,MAAM,mCAAmC,GAAkB;AAChE,IAAA,OAAO,EAAE,gCAAgC;AACzC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAwB,KAAK,IAAI,oBAAoB,CAAC,GAAG,IAAI,CAAC;CAC7E;;MCGY,mBAAmB,CAAA;AAK9B,IAAA,WAAA,CAEmB,eAA4C,EAC5C,eAAgC,EAChC,SAA0B,EAAA;QAF1B,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAS,CAAA,SAAA,GAAT,SAAS;QARX,IAAQ,CAAA,QAAA,GAAG,cAAc;AAEzB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAyC;;AASlE,IAAA,MAAM,OAAO,CAAC,cAAc,GAAG,KAAK,EAAA;QACzC,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;;AAGpB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;QACrC,OAAO,QAAQ,CAAC,IAAI;;AAGd,IAAA,MAAM,OAAO,GAAA;AACnB,QAAA,MAAM,aAAa,GAA8B;AAC/C,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;SACzC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QAE9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CACZ,QAAQ,EACR,aAAa,CACX,IAAI,CAAC;AACF,iBAAA,IAAI,CACH,IAAI,CAAC,QAAQ,EACb,IAAI,eAAe,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC,EACzC;gBACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,gBAAA,YAAY,EAAE,MAAM;aACrB;iBAEF,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC3D,CAAC,KAAK,CAAC,CAAC,KAAY,KAAI;AACvB,gBAAA,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;aACvC,CAAC,CACH;;;QAIH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAnDtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,kBAMpB,gCAAgC,EAAA,EAAA,EAAA,KAAA,EAAAN,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAN/B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAOI,MAAM;2BAAC,gCAAgC;;;MCtB/B,mBAAmB,CAAA;AAI9B,IAAA,WAAA,CAAmB,WAA2B,EAAA;QAC5C,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,sBAAsB,IAAI,KAAK;AACtE,QAAA,IAAI,CAAC,4BAA4B;AAC/B,YAAA,WAAW,CAAC,gCAAgC,IAAI,KAAK;;AAE1D;;ACFM,MAAM,+BAA+B,GAC1C,IAAI,cAAc,CAA6B,qBAAqB,CAAC;AAEhE,MAAM,kCAAkC,GAAkB;AAC/D,IAAA,OAAO,EAAE,+BAA+B;AACxC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAwB,KAAK,IAAI,mBAAmB,CAAC,GAAG,IAAI,CAAC;CAC5E;;MCGY,kBAAkB,CAAA;AAK7B,IAAA,WAAA,CAEmB,eAA2C,EAC3C,eAAgC,EAChC,SAA0B,EAAA;QAF1B,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAS,CAAA,SAAA,GAAT,SAAS;QARX,IAAQ,CAAA,QAAA,GAAG,qBAAqB;AAEhC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAwC;;AASjE,IAAA,MAAM,cAAc,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;;IAGhB,mBAAmB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY;;AAGvC,IAAA,MAAM,OAAO,GAAA;AACnB,QAAA,MAAM,aAAa,GAA6B;AAC9C,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;SACzC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QAE9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CACZ,QAAQ,EACR,aAAa,CACX,IAAI,CAAC;AACF,iBAAA,IAAI,CACH,IAAI,CAAC,QAAQ,EACb,IAAI,eAAe,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC,EACzC;gBACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,gBAAA,YAAY,EAAE,MAAM;aACrB;iBAEF,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC3D,CAAC,KAAK,CAAC,CAAC,KAAY,KAAI;AACvB,gBAAA,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;aACvC,CAAC,CACH;;;QAIH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAlDtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBAMnB,+BAA+B,EAAA,EAAA,EAAA,KAAA,EAAAP,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAN9B,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAOI,MAAM;2BAAC,+BAA+B;;;ACxBpC,MAAM,gCAAgC,GAAG,EAAE;AAC3C,MAAM,sBAAsB,GAAG,GAAG;AACzC;AACO,MAAM,yBAAyB,GAAG,IAAa;AAC/C,MAAM,uBAAuB,GAAG,GAAG;AAEnC,MAAM,YAAY,GAAa;IACpC,sBAAsB;IACtB,gCAAgC;IAChC,uBAAuB;CACxB;AAEM,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS;IAC1C,gCAAgC;IAChC,sBAAsB;IACtB,yBAAyB;AAC1B,CAAA,CAAC;;ACZK,MAAM,yBAAyB,GAAG,CACvC,QAA8B,KACwB;AACtD,IAAA,OAAO,QAAQ,CAAC,eAAe,KAAK,yBAAyB;AAC/D,CAAC;;ACRM,MAAM,YAAY,GAAG,EAAE;AAEvB,MAAM,kBAAkB,GAAG,EAAE;;MCIvB,UAAU,CAAA;AACd,IAAA,eAAe,CAAC,GAAW,EAAE,MAAA,GAAuB,EAAE,EAAA;QAC3D,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,EAAE;;AAGX,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC9B,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACjD,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;;AAGxC,QAAA,OAAO,SAAS,CAAC,QAAQ,EAAE;;AAGtB,IAAA,eAAe,CAAC,GAAW,EAAA;QAChC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,EAAE;;AAGX,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;QAC9B,MAAM,YAAY,GAAiB,EAAE;QAErC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,YAAY,EAAE;AACjD,YAAA,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK;;AAG3B,QAAA,OAAO,YAAY;;+GA1BV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA;;4FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCMY,oBAAoB,CAAA;IAG/B,WACmB,CAAA,UAAsB,EACtB,eAAgC,EAAA;QADhC,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAe,CAAA,eAAA,GAAf,eAAe;QAJ1B,IAAa,CAAA,aAAA,GAAgC,IAAI;;AAOzD,IAAA,IAAW,YAAY,GAAA;QACrB,OAAO,IAAI,CAAC,aAAa;;AAGpB,IAAA,eAAe,CAAC,MAAmC,EAAA;AACxD,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;;AAGtB,IAAA,MAAM,CAAC,MAA4B,EAAA;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;;QAG1D,OAAO;AACL,YAAA,GAAG,MAAM;AACT,YAAA,SAAS,EAAE,IAAI,CAAC,eAAe,CAC7B,MAAM,CAAC,SAAS,EAChB,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAC3B;SACF;;AAGI,IAAA,iCAAiC,CAAC,MAA4B,EAAA;QACnE,IACE,yBAAyB,CAAC,MAAM,CAAC;AACjC,YAAA,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,EAC9C;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,kBAAkB;;;IAI3C,eAAe,CACrB,SAAiB,EACjB,iBAA0B,EAAA;QAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,EAAE;AAC7D,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACjC,YAAA,oBAAoB,EAAE;kBACnB,GAAA;AACD,kBAAkB,GAAA;AACrB,SAAA,CAAC;AACF,QAAA,OAAO,WAAW;;+GAjDT,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACVD,IAAY,UAOX;AAPD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAPW,UAAU,KAAV,UAAU,GAOrB,EAAA,CAAA,CAAA;;ICPW;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,4BAAA,CAAA,GAAA,4BAAyD;AACzD,IAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,sBAA2C;AAC3C,IAAA,UAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,UAAA,CAAA,8BAAA,CAAA,GAAA,iCAAgE;AAChE,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AACxB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AACxB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,UAAoB;AACpB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AACxB,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,UAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,UAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,UAAoB;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,UAAA,CAAA,iBAAA,CAAA,GAAA,mBAAqC;AACrC,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,iBAAiC;AACjC,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,QAAgB;AAChB,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,QAAgB;AAChB,IAAA,UAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,cAA2B;AAC3B,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,cAA2B;AAC3B,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC;AAChC,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC;AAChC,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,UAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,UAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,UAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,UAAA,CAAA,8BAAA,CAAA,GAAA,8BAA6D;AAC7D,IAAA,UAAA,CAAA,8BAAA,CAAA,GAAA,8BAA6D;AAC7D,IAAA,UAAA,CAAA,kCAAA,CAAA,GAAA,kCAAqE;AACrE,IAAA,UAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,UAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,UAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,UAAA,CAAA,wBAAA,CAAA,GAAA,0BAAmD;AACnD,IAAA,UAAA,CAAA,6BAAA,CAAA,GAAA,gCAA8D;AAC9D,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC;AAChC,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,SAAkB;AAClB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,UAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,SAAkB;AAClB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,QAAgB;AAChB,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,uBAA2C;AAC3C,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,UAAoB;AACpB,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,UAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,UAAA,CAAA,kBAAA,CAAA,GAAA,mBAAsC;AACtC,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC;AAChC,IAAA,UAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,UAAA,CAAA,8BAAA,CAAA,GAAA,8BAA6D;AAC7D,IAAA,UAAA,CAAA,+BAAA,CAAA,GAAA,+BAA+D;AAC/D,IAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,UAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,qBAA0C;AAC1C,IAAA,UAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,UAAA,CAAA,0BAAA,CAAA,GAAA,gCAA2D;AAC3D,IAAA,UAAA,CAAA,uBAAA,CAAA,GAAA,0BAAkD;AAClD,IAAA,UAAA,CAAA,uBAAA,CAAA,GAAA,6BAAqD;AACrD,IAAA,UAAA,CAAA,2BAAA,CAAA,GAAA,6BAAyD;AACzD,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,SAAkB;AAClB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,UAAoB;AACpB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,UAAoB;AACpB,IAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,UAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,OAAc;AAChB,CAAC,EA9GW,UAAU,KAAV,UAAU,GA8GrB,EAAA,CAAA,CAAA;;MCvGY,cAAc,CAAA;IAuBzB,WACE,CAAA,UAAuB,EACP,cAAA,GAAyB,CAAC,EAAA;QAA1B,IAAc,CAAA,cAAA,GAAd,cAAc;;AAG9B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAC5C,CAAC,GAAW,KAAY,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAC7C;AAED,QAAA,IAAI,UAAU,CAAC,aAAa,EAAE;YAC5B,IAAI,CAAC,aAAa,GAAG;AACnB,gBAAA,GAAG,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK;aACpC;;AAGH,QAAA,IAAI,CAAC,cAAc;AACjB,YAAA,UAAU,CAAC,cAAc,KAAK,UAAU,CAAC,OAAO;AAChD,iBAAC,UAAU,CAAC,cAAc,KAAK,UAAU,CAAC,QAAQ;AAChD,oBAAA,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAEjC,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO;QAEjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC;QAC3D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC;QAEzD,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK;AAE/C,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW;AACzC,QAAA,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ;QAEnC,IAAI,CAAC,YAAY,GAAG;YAClB,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB;;IAGI,aAAa,CAAC,SAAqB,EAAE,KAAa,EAAA;QACvD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE;QAEtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,KAAK;AAE7C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;AAC3E,QAAA,IAAI,CAAC,aAAa;YAAE;AAEpB,QAAA,aAAa,CAAC,KAAK,GAAG,KAAK;;AAGtB,IAAA,aAAa,CAAC,SAAiB,EAAA;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK;;AAEhD;;MClFY,kBAAkB,CAAA;AAG7B,IAAA,WAAA,CAAmB,QAAqB,EAAA;QAFxB,IAAW,CAAA,WAAA,GAAuB,IAAI;QAGpD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;;AAG9C,IAAA,kBAAkB,CAAC,QAAqB,EAAA;QAC9C,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI;;QAGb,OAAO;AACL,YAAA,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG;AACjC,YAAA,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ;YACnC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CACpC,CAAC,GAAW,KAAa,QAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAC5D;YACD,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,GAAG,EAAE,QAAQ,CAAC,GAAG;AACjB,YAAA,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;YACjC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;AAC3B,YAAA,oBAAoB,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe;YACtD,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;YAClD,QAAQ,EAAE,QAAQ,CAAC,SAAS;YAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY;AACnC,YAAA,iBAAiB,EAAE,QAAQ,CAAC,IAAI,CAAC,wBAAwB;YACzD,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;AAC/B,YAAA,cAAc,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK;YACvC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,UAAU,EAAG,QAAQ,CAAC,MAAoB,EAAE,UAAU,EAAE,SAAS,IAAI,IAAI;AACzE,YAAA,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI;SACxD;;AAEJ;;AClDD,IAAY,sBAiDX;AAjDD,CAAA,UAAY,sBAAsB,EAAA;AAChC,IAAA,sBAAA,CAAA,gBAAA,CAAA,GAAA,iBAAkC;AAClC,IAAA,sBAAA,CAAA,kBAAA,CAAA,GAAA,oBAAuC;AACvC,IAAA,sBAAA,CAAA,iBAAA,CAAA,GAAA,mBAAqC;AACrC,IAAA,sBAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,sBAAA,CAAA,mBAAA,CAAA,GAAA,qBAAyC;AACzC,IAAA,sBAAA,CAAA,mBAAA,CAAA,GAAA,qBAAyC;AACzC,IAAA,sBAAA,CAAA,kBAAA,CAAA,GAAA,oBAAuC;AACvC,IAAA,sBAAA,CAAA,eAAA,CAAA,GAAA,iBAAiC;AACjC,IAAA,sBAAA,CAAA,iBAAA,CAAA,GAAA,kBAAoC;AACpC,IAAA,sBAAA,CAAA,aAAA,CAAA,GAAA,eAA6B;AAC7B,IAAA,sBAAA,CAAA,sBAAA,CAAA,GAAA,wBAA+C;AAC/C,IAAA,sBAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,sBAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,sBAAA,CAAA,6BAAA,CAAA,GAAA,+BAA6D;AAC7D,IAAA,sBAAA,CAAA,mBAAA,CAAA,GAAA,oBAAwC;AACxC,IAAA,sBAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC;AAChC,IAAA,sBAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,sBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,sBAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,sBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,sBAAA,CAAA,oBAAA,CAAA,GAAA,qBAA0C;;AAG1C,IAAA,sBAAA,CAAA,8BAAA,CAAA,GAAA,kCAAiE;AACjE,IAAA,sBAAA,CAAA,8BAAA,CAAA,GAAA,kCAAiE;AACjE,IAAA,sBAAA,CAAA,iCAAA,CAAA,GAAA,sCAAwE;AACxE,IAAA,sBAAA,CAAA,oCAAA,CAAA,GAAA,0CAA+E;AAC/E,IAAA,sBAAA,CAAA,+BAAA,CAAA,GAAA,mCAAmE;AACnE,IAAA,sBAAA,CAAA,iCAAA,CAAA,GAAA,qCAAuE;AACvE,IAAA,sBAAA,CAAA,6CAAA,CAAA,GAAA,kDAAgG;AAChG,IAAA,sBAAA,CAAA,wCAAA,CAAA,GAAA,6CAAsF;AACtF,IAAA,sBAAA,CAAA,mCAAA,CAAA,GAAA,uCAA2E;AAC3E,IAAA,sBAAA,CAAA,wCAAA,CAAA,GAAA,6CAAsF;AACtF,IAAA,sBAAA,CAAA,oCAAA,CAAA,GAAA,wCAA6E;AAC7E,IAAA,sBAAA,CAAA,2CAAA,CAAA,GAAA,gDAA4F;AAC5F,IAAA,sBAAA,CAAA,gCAAA,CAAA,GAAA,oCAAqE;AACrE,IAAA,sBAAA,CAAA,gCAAA,CAAA,GAAA,oCAAqE;AACrE,IAAA,sBAAA,CAAA,4CAAA,CAAA,GAAA,iDAA8F;AAC9F,IAAA,sBAAA,CAAA,uCAAA,CAAA,GAAA,4CAAoF;AACpF,IAAA,sBAAA,CAAA,kCAAA,CAAA,GAAA,sCAAyE;AACzE,IAAA,sBAAA,CAAA,uCAAA,CAAA,GAAA,4CAAoF;AACpF,IAAA,sBAAA,CAAA,mCAAA,CAAA,GAAA,uCAA2E;AAC3E,IAAA,sBAAA,CAAA,+BAAA,CAAA,GAAA,mCAAmE;AACnE,IAAA,sBAAA,CAAA,kBAAA,CAAA,GAAA,oBAAuC;;AAGvC,IAAA,sBAAA,CAAA,8BAAA,CAAA,GAAA,kCAAiE;AACjE,IAAA,sBAAA,CAAA,kCAAA,CAAA,GAAA,sCAAyE;AAC3E,CAAC,EAjDW,sBAAsB,KAAtB,sBAAsB,GAiDjC,EAAA,CAAA,CAAA;;ACjDY,MAAA,uBAAuB,GAAG;AACrC,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,KAAK,EAAE,OAAO;;;ACLT,MAAM,eAAe,GAAG;AAC7B,IAAA,cAAc,EAAE,gBAAgB;AAChC,IAAA,WAAW,EAAE,aAAa;CAClB;;ACDH,MAAM,gBAAgB,GAAG,CAAC,KAAc,KAA6B;IAC1E,OAAO,KAAK,YAAY,cAAc;AACxC,CAAC;;ACJD,IAAY,cAGX;AAHD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA;;ACDM,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAa;AACzD,IAAA,UAAU,CAAC,iBAAiB;AAC5B,IAAA,UAAU,CAAC,SAAS;AACpB,IAAA,UAAU,CAAC,KAAK;AAChB,IAAA,UAAU,CAAC,GAAG;AACf,CAAA,CAAC;;ACLI,SAAU,YAAY,CAAC,KAAc,EAAA;AACzC,IAAA,OAAO,KAAK,KAAA,GAAA,0BAAwB,KAAK;AAC3C;;ACJO,MAAM,cAAc,GAAG,MAAe,IAAI;;ACYjD;;;AAGG;AACI,MAAM,oBAAoB,GAA2C;AAC1E,IAAA,CAAC,UAAU,CAAC,iBAAiB,GAAG;AAC9B,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,YAAY,EAAkB,GAAA;AAC/B,KAAA;AACD,IAAA,CAAC,UAAU,CAAC,SAAS,GAAG;AACtB,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,YAAY,EAAkB,GAAA;AAC/B,KAAA;AACD,IAAA,CAAC,UAAU,CAAC,KAAK,GAAG;AAClB,QAAA,SAAS,EAAE,cAAc;AACzB,QAAA,YAAY,EAAE,EAAE;AACjB,KAAA;AACD,IAAA,CAAC,UAAU,CAAC,GAAG,GAAG;AAChB,QAAA,SAAS,EAAE,cAAc;AACzB,QAAA,YAAY,EAAE,EAAE;AACjB,KAAA;CACF;;ACtBD,MAAM,uBAAuB,GAAG,CAC9B,SAAqB,MACK;IAC1B,WAAW,EAAE,CAAW,QAAA,EAAA,SAAS,CAA4C,0CAAA,CAAA;AAC7E,IAAA,KAAK,EAAE,CACL,cAA8B,EAC9B,aAAkC,KAC1B;QACR,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,SAAS;YAAE;AAE1D,QAAA,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC;KAC/C;AACF,CAAA,CAAC;AAEK,MAAM,qBAAqB,GAA2B;AAC3D,IAAA,uBAAuB,CAAC,UAAU,CAAC,SAAS,CAAC;AAC7C,IAAA,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,CAAC;AACrD,IAAA,uBAAuB,CAAC,UAAU,CAAC,0BAA0B,CAAC;AAC9D,IAAA;AACE,QAAA,WAAW,EACT,mFAAmF;AACrF,QAAA,KAAK,EAAE,CACL,cAA8B,EAC9B,aAAkC,KAC1B;YACR,MAAM,eAAe,GAAG,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC;AACpE,YAAA,IAAI,eAAe;gBAAE;YAErB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;AAC/C,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,SAAS;gBAAE;YAE/D,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;SACpD;AACF,KAAA;AACD,IAAA;AACE,QAAA,WAAW,EACT,oEAAoE;AACtE,QAAA,KAAK,EAAE,CAAC,cAA8B,KAAU;YAC9C,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC;SACxD;AACF,KAAA;CACF;;ACnDM,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAa;AAC/D,IAAA,UAAU,CAAC,KAAK;AAChB,IAAA,UAAU,CAAC,yBAAyB;AACpC,IAAA,UAAU,CAAC,IAAI;AAChB,CAAA,CAAC;;ACNK,MAAM,YAAY,GAAG,IAAI;;ACIzB,MAAM,wBAAwB,GAAG,CACtC,QAA8B,KACuB;AACrD,IAAA,OAAO,QAAQ,CAAC,eAAe,KAAK,YAAY;AAClD,CAAC;;ACGM,MAAM,8BAA8B,GACzC,IAAI,cAAc,CAA4B,oBAAoB,CAAC;AAE9D,MAAM,iCAAiC,GAAkB;AAC9D,IAAA,OAAO,EAAE,8BAA8B;AACvC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAwB,KAAK,IAAI,kBAAkB,CAAC,GAAG,IAAI,CAAC;CAC3E;;ACZK,MAAO,SAAU,SAAQ,QAAQ,CAAA;IAOrC,WAAmB,CAAA,KAAwB,EAAE,GAAyB,EAAA;AACpE,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QAPL,IAAsB,CAAA,sBAAA,GAAG,IAAI,MAAM,CAClD,qFAAqF,EACrF,GAAG,CACJ;QAMC,IAAI,CAAC,aAAa,GAAG;AACnB,YAAA,OAAO,EAAE;gBACP,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;AACrB,aAAA;AACD,YAAA,QAAQ,EAAE;gBACR,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;AACvB,aAAA;SACF;AAED,QAAA,IAAI,GAAG,CAAC,IAAI,EAAE;AACZ,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CACtD,GAAG,CAAC,IAAkC,CACvC;;AAGH,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AACpB,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,KAA8B;AAEtD,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,GAAG;gBACjC,UAAU,EAAE,KAAK,CAAC,UAAU;AAC5B,gBAAA,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE;aAChC;;;IAIE,gBAAgB,GAAA;QACrB,OAAO,IAAI,CAAC,aAAa;;AAGnB,IAAA,iBAAiB,CAAC,IAAgC,EAAA;AAGxD,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAI;YACrD,OAAO;AACL,gBAAA,GAAG,GAAG;AACN,gBAAA,CAAC,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG;aAC3D;SACF,EAAE,EAAE,CAAC;;AAET;;MCvCY,aAAa,CAAA;IAGxB,WAEmB,CAAA,MAAsB,EACtB,eAAgC,EAChC,eAAgC,EAChC,cAA8B,EAC9B,gBAAkC,EAAA;QAJlC,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QARlB,IAAqB,CAAA,qBAAA,GAAG,eAAe;;IAWjD,MAAM,oBAAoB,CAC/B,UAAsB,EAAA;AAEtB,QAAA,MAAM,GAAG,GACP,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE;AACzB,YAAA,UAAU,CAAC,WAAkC;AAC9C,YAAA,EAAE;AACJ,QAAA,MAAM,sBAAsB,GAC1B,UAAU,CAAC,sBAAsB;AAChC,YAAA,UAAU,CAAC,0BAAiD;AAC7D,YAAA,EAAE;AAEJ,QAAA,MAAM,aAAa,GAAqB;AACtC,YAAA,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,sBAAsB,CAAC;YAC/D,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC9B,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AACzC,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACjC,YAAA,GAAG,UAAU;SACd;AAED,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;YACxC,aAAa,CAAC,MAAM,GAAA,GAAA;;QAGtB,OAAO,aAAa,CAClB,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,IAAI,CAAC,qBAAqB,EAC1B,IAAI,eAAe,CAAC,EAAE,GAAG,aAAa,EAErC,CAAC,EACF;YACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,YAAA,YAAY,EAAE,MAAM;AACrB,SAAA,CACF,CACF;;IAGK,0BAA0B,CAChC,eAAwB,EACxB,sBAA4C,EAAA;QAI5C,MAAM,UAAU,GAAqB,EAAE;QAEvC,UAAU,CAAC,sBAAsB,GAAG;AAClC,cAAE;AACF;QAEF,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,UAAU;;;QAInB,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE;AAC7C,YAAA,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;gBACvC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;AACvD,gBAAA,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ;AAC/C,gBAAA,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU;AAChD,gBAAA,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW;AACnD,gBAAA,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU;AACjD,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,iBAAiB,EAAE;AACzC,gBAAA,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO;AAC7C,gBAAA,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE;gBACvC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE;AACrD,gBAAA,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa;AAC3D,aAAA,CAAC;;AAGJ,QAAA,OAAO,UAAU;;IAGX,oBAAoB,GAAA;QAC1B,MAAM,UAAU,GAAqB,EAAE;AAEvC,QAAA,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;AACzE,QAAA,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;AAEvE,QAAA,OAAO,UAAU;;AA9FR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,kBAId,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAV,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAKI,MAAM;2BAAC,WAAW;;;ACtBhB,MAAM,KAAK,GAAG,IAAI;AAClB,MAAM,SAAS,GAAG,IAAI;AACtB,MAAM,UAAU,GAAG,IAAI;AACvB,MAAM,YAAY,GAAG,IAAI;AACzB,MAAM,QAAQ,GAAG,IAAI;AACrB,MAAM,QAAQ,GAAG,IAAI;;ACGrB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,CAAC,KAAK,EAAE,gCAAgC,CAAC;IACzC,CAAC,UAAU,EAAE,mCAAmC,CAAC;IACjD,CAAC,YAAY,EAAE,uCAAuC,CAAC;IACvD,CAAC,QAAQ,EAAE,mCAAmC,CAAC;IAC/C,CAAC,QAAQ,EAAE,mCAAmC,CAAC;AAChD,CAAA,CAAC;;ACdK,MAAM,cAAc,GAAG,uCAAuC;AAC9D,MAAM,oBAAoB,GAC/B,+CAA+C;;ACF1C,MAAM,eAAe,GAAG,IAAI;AAC5B,MAAM,cAAc,GAAG,IAAI;AAC3B,MAAM,cAAc,GAAG,IAAI;AAC3B,MAAM,iBAAiB,GAAG,IAAI;AAE9B,MAAM,gCAAgC,GAAG,IAAI,GAAG,CAAS;IAC9D,eAAe;IACf,cAAc;IACd,cAAc;IACd,iBAAiB;AAClB,CAAA,CAAC;;MCOW,qBAAqB,CAAA;AAGhC,IAAA,WAAA,CAAoC,eAAgC,EAAA;QAAhC,IAAe,CAAA,eAAA,GAAf,eAAe;QAFnC,IAAI,CAAA,IAAA,GAAuB,UAAU;;AAI9C,IAAA,aAAa,CAAC,cAA8B,EAAA;QACjD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE;gBACJ,MAAM,EAAE,cAAc,CAAC,MAAM;gBAC7B,MAAM,EAAE,cAAc,CAAC,MAAM;gBAC7B,QAAQ,EAAE,cAAc,CAAC,QAAQ;gBACjC,KAAK,EAAE,cAAc,CAAC,OAAO;gBAC7B,SAAS,EAAE,cAAc,CAAC,UAAU;AACpC,gBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AAC3C,aAAA;SACF;;AAGI,IAAA,UAAU,CAAC,QAAwB,EAAA;AACxC,QAAA,QACE,QAAQ,CAAC,cAAc,KAAK,UAAU,CAAC,QAAQ;YAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;;AAI/B,IAAA,cAAc,CAAC,cAA8B,EAAA;QACrD,MAAM,mBAAmB,GAAG,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;QAErE,MAAM,GAAG,GAAG,cAAc,EAAE,MAAM,EAAE,IAAI,CACtC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,SAAS,CACjC,EAAE,KAAK;QACR,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,mBAAmB;;QAG5B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,mBAAmB;;AAG5B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;;AAGhC,IAAA,WAAW,CACjB,cAA8B,EAAA;QAE9B,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM;QAEzD,OAAO;AACL,YAAA,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;AAChD,YAAA,mBAAmB,EAAE,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC;AAChE,YAAA,oBAAoB,EAAE,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC;YAClE,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;YACpD,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;SAC5B;;AAGK,IAAA,sBAAsB,CAAC,cAA8B,EAAA;AAC3D,QAAA,MAAM,GAAG,GAAG,cAAc,EAAE,UAAU,EAAE,GAAG;AAE3C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,YAAY,EAAE;AAClD,YAAA,OAAO,KAAK;;QAGd,MAAM,QAAQ,GACZ,cAAc,EAAE,WAAW,EAAE,uBAAuB,IAAI,IAAI;QAC9D,MAAM,iCAAiC,GACrC,QAAQ,IAAI,gCAAgC,CAAC,GAAG,CAAC,QAAQ,CAAC;AAE5D,QAAA,MAAM,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,cAAc;AAC/D,QAAA,MAAM,WAAW,GAAG,cAAc,KAAK,IAAI;QAE3C,MAAM,0BAA0B,GAC9B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,+BAA+B,IAAI,KAAK;AAExE,QAAA,QACE,iCAAiC;YACjC,WAAW;AACX,YAAA,0BAA0B;;AAItB,IAAA,uBAAuB,CAAC,cAA8B,EAAA;AAC5D,QAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE;AAC/C,YAAA,OAAO,KAAK;;AAGd,QAAA,MAAM,GAAG,GAAG,cAAc,EAAE,UAAU,EAAE,GAAG;AAC3C,QAAA,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,KAAK,GAAG;;AAGnE,QAAA,QACE,aAAa;YACb,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,+BAA+B;;AAI1D,IAAA,eAAe,CAAC,SAAiB,EAAA;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AACtD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;QAExC,MAAM,aAAa,GAAG,SAAS,GAAG,oBAAoB,GAAG,cAAc;AACvE,QAAA,OAAO,GAAG,aAAa,CAAA,GAAA,EAAM,SAAS,CAAU,OAAA,EAAA,KAAK,EAAE;;+GAvG9C,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAX,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;MCJY,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;QAES,IAAI,CAAA,IAAA,GAAyB,aAAa;AAiClD;AA/BQ,IAAA,aAAa,CAAC,cAA8B,EAAA;AACjD,QAAA,MAAM,IAAI,GAAyB;AACjC,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,KAAK,EAAE,EAAE;SACV;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CACxC,CAAC,KAAK,KAAK,KAAK,EAAE,SAAS,KAAA,GAAA,uBAC5B;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,OAAO;QACnC,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK;QAErD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI;SACL;;AAGI,IAAA,UAAU,CAAC,QAAwB,EAAA;AACxC,QAAA,QACE,QAAQ,CAAC,cAAc,KAAK,UAAU,CAAC,KAAK;AAC5C,YAAA,QAAQ,CAAC,cAAc,KAAK,UAAU,CAAC,IAAI;AAC3C,aAAC,QAAQ,CAAC,cAAc,KAAK,UAAU,CAAC,QAAQ;AAC9C,gBAAA,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ;gBAC7B,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;;+GA/B1B,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;MCDY,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;QAES,IAAI,CAAA,IAAA,GAA0B,cAAc;AAYpD;IAVQ,aAAa,GAAA;QAClB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE,IAAI;SACX;;AAGI,IAAA,UAAU,CAAC,QAAwB,EAAA;AACxC,QAAA,OAAO,QAAQ,CAAC,cAAc,KAAK,UAAU,CAAC,MAAM;;+GAX3C,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;MCEY,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;QAES,IAAI,CAAA,IAAA,GAAyB,aAAa;AAalD;AAVQ,IAAA,aAAa,CAAC,MAAkB,EAAA;QACrC,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,EAAE,MAAM,EAAE;SACjB;;AAGI,IAAA,UAAU,CAAC,QAAwB,EAAA;QACxC,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;;+GAZ9B,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACVD;;;;AAIG;AACH;AACO,MAAM,yBAAyB,GAAG,uBAAuB;;MCDnD,mBAAmB,CAAA;AAHhC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAU;AAazC;IAXQ,GAAG,CAAC,OAAiB,EAAE,EAAA;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;;AAG5B,IAAA,GAAG,CAAC,UAAkB,EAAA;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;;IAGnC,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;;+GAZhB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCaY,yBAAyB,CAAA;IAGpC,WACmB,CAAA,oBAA0C,EAC1C,mBAAwC,EAAA;QADxC,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QAJ/B,IAAI,CAAA,IAAA,GAA2B,gBAAgB;;AAO/C,IAAA,aAAa,CAAC,cAA8B,EAAA;AACjD,QAAA,MAAM,IAAI,GAA2B;AACnC,YAAA,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAClC,CAAC,KAAK,KAAK,KAAK,EAAE,SAAS,+BAC5B;YACD,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,QAAQ,EAAE,cAAc,CAAC,QAAQ;SAClC;QAED,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI;SACL;;AAGI,IAAA,UAAU,CAAC,QAAwB,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE;AAC5D,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE;AACjC,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,QAAQ,CAAC,GAAG,KAAK,yBAAyB,EAAE;AAC9C,YAAA,OAAO,KAAK;;QAGd,IAAI,QAAQ,CAAC,cAAc,KAAK,UAAU,CAAC,IAAI,EAAE;AAC/C,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE;AAC5B,YAAA,OAAO,KAAK;;AAGd,QAAA,OAAO,IAAI;;IAGL,qBAAqB,GAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY;QAErD,OAAO,OAAO,CACZ,MAAM;YACJ,yBAAyB,CAAC,MAAM,CAAC;AACjC,YAAA,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,CACjD;;+GAtDQ,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAY,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAzB,yBAAyB,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACdK,MAAO,aAAc,SAAQ,QAAQ,CAAA;IAGzC,WAAmB,CAAA,OAAe,EAAE,IAAY,EAAA;QAC9C,KAAK,CAAC,OAAO,CAAC;AAEd,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;AAEnB;;ACVD,IAAY,YAIX;AAJD,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAJW,YAAY,KAAZ,YAAY,GAIvB,EAAA,CAAA,CAAA;;ACJD,IAAY,UASX;AATD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EATW,UAAU,KAAV,UAAU,GASrB,EAAA,CAAA,CAAA;;MCHY,cAAc,CAAA;AAIzB,IAAA,WAAA,CAAmB,UAKlB,EAAA;QACC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC,KAAK,GAAG;gBACX,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC1C,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;aACtC;;AAGH,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,aAAa,CACrB,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EACzB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAClC;;QAGH,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS;AACnD,YAAA,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK;AACzC,YAAA,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB;AAC9D,YAAA,oBAAoB,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB;AACvE,YAAA,mBAAmB,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB;AACrE,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;YACxC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;kBAClC,IAAI,CAAC,GAAG,CACN,MAAM,CAAC,UAAU,CACf,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAClD;AAEL,kBAAE,IAAI;AACR,YAAA,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY;AAC5C,YAAA,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC;kBACjC,YAAY,CAAC;AACf,kBAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AAC3B,YAAA,qBAAqB,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;AACvD,YAAA,eAAe,EAAE;AACf,gBAAA,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;AACvC,gBAAA,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc;AACpD,gBAAA,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe;AACtD,gBAAA,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,aAAa;AAC9C,aAAA;YACD,oBAAoB,EAAE,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,MAAM,CAAC;AACrE,YAAA,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AAC9B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW;AAC1C,YAAA,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY;AAC5C,YAAA,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK;AAC3C,YAAA,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AACvC,YAAA,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO;AAC7C,YAAA,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;YACrC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC;AACvD,YAAA,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW;AACzC,YAAA,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB;AACnE,YAAA,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK;SACpC;QAED,IAAI,CAAC,MAAM,CAAC,gBAAgB;AAC1B,YAAA,UAAU,CAAC,cAAc,EAAE,iBAAiB,KAAK,KAAK;AAExD,QAAA,IAAI,UAAU,CAAC,IAAI,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC;;QAG1E,IACE,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC,IAAI;YAC3C,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC,UAAU,EACjD;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI;;QAG9B,IACE,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC,QAAQ;AAC/C,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI;;;AAIzB,IAAA,mBAAmB,CAAC,IAAyB,EAAA;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,EAAE,KAAK;QACjD,IAAI,KAAK,KAAK,WAAW;AAAE,YAAA,OAAO,SAAS;AAE3C,QAAA,OAAO,KAAK;;AAGN,IAAA,gBAAgB,CAAC,MAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE;YACpC;;AAGF,QAAA,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;QACrE,OAAO;YACL,MAAM;YACN,QAAQ;SACT;;AAGK,IAAA,uBAAuB,CAC7B,MAAiB,EAAA;AAEjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;YAC/C,OAAO;AACL,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,SAAS,EAAE,KAAK;aACjB;;QAGH,OAAO;AACL,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB,IAAI,EAAE;AAChD,YAAA,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,IAAI,EAAE;AACpD,YAAA,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,EAAE;AAClD,YAAA,MAAM,EAAE,MAAM,CAAC,+BAA+B,IAAI,EAAE;AACpD,YAAA,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B;SACtD;;AAEJ;;MCxHY,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;QAES,IAAI,CAAA,IAAA,GAA4B,gBAAgB;AAqCxD;AAnCQ,IAAA,aAAa,CAAC,EACnB,cAAc,EACd,uBAAuB,EACvB,uBAAuB,GAKxB,EAAA;AACC,QAAA,IAAI,MAAc;AAElB,QAAA,IAAI,cAAc,YAAY,cAAc,EAAE;AAC5C,YAAA,MAAM,GAAG,cAAc,CAAC,MAAM;;aACzB;YACL,MAAM,GAAG,cAAc;;QAGzB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE;gBACJ,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,gBAAA,uBAAuB,EAAE,OAAO,CAAC,uBAAuB,CAAC;gBACzD,uBAAuB;AACxB,aAAA;SACF;;IAGI,UAAU,GAAA;AACf,QAAA,OAAO,KAAK;;+GApCH,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA1B,0BAA0B,EAAA,CAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;MCHY,oBAAoB,CAAA;AAG/B,IAAA,WAAA,CAAoC,eAAgC,EAAA;QAAhC,IAAe,CAAA,eAAA,GAAf,eAAe;QAF5C,IAAI,CAAA,IAAA,GAAsB,KAAK;;AAI/B,IAAA,aAAa,CAAC,UAA2B,EAAA;QAC9C,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;SAChD;;IAGI,UAAU,GAAA;AACf,QAAA,OAAO,KAAK;;AAGN,IAAA,wBAAwB,CAC9B,UAA2B,EAAA;QAE3B,OAAO;AACL,YAAA,GAAG,UAAU;AACb,YAAA,IAAI,EAAE;gBACJ,GAAG,UAAU,CAAC,IAAI;AAClB,gBAAA,QAAQ,EAAE;AACR,oBAAA,mBAAmB,EACjB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,+BAA+B;wBAC7D,KAAK;oBACP,oBAAoB,EAClB,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,+BAA+B;AACjE,iBAAA;AACF,aAAA;SACF;;+GA/BQ,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAb,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAApB,oBAAoB,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;MCKY,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;QAES,IAAI,CAAA,IAAA,GAA4B,gBAAgB;AACtC,QAAA,IAAA,CAAA,IAAI,GAAa,CAAC,YAAY,CAAC;QAC/B,IAAqB,CAAA,qBAAA,GAAG,IAAI,GAAG,CAAiB;YAC/D,CAAC,YAAY,EAAE,YAAY,CAAC;AAC7B,SAAA,CAAC;AA8BH;AA5BQ,IAAA,aAAa,CAAC,cAA8B,EAAA;QACjD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE;gBACJ,MAAM,EAAE,cAAc,CAAC,MAAM;gBAC7B,QAAQ,EAAE,cAAc,CAAC,QAAQ;gBACjC,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,GAAG,CAAC;AAC1D,aAAA;SACF;;AAGI,IAAA,UAAU,CAAC,QAAwB,EAAA;AACxC,QAAA,QACE,QAAQ,CAAC,cAAc,KAAK,UAAU,CAAC,QAAQ;AAC/C,YAAA,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;;AAI5B,IAAA,oBAAoB,CAAC,GAAW,EAAA;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;QAEtD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;;AAG7C,QAAA,OAAO,UAAoB;;+GAjClB,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA1B,0BAA0B,EAAA,CAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;MCAY,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;QAEkB,IAAI,CAAA,IAAA,GAAyB,cAAc;AAmB5D;AAjBQ,IAAA,aAAa,CAAC,QAAwB,EAAA;QAC3C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;AAC1D,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CACnC,CAAC,KAAK,KAAK,KAAK,EAAE,SAAS,KAAA,GAAA,uBAC5B;QACD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE;gBACJ,MAAM;gBACN,gBAAgB;AACjB,aAAA;SACF;;AAGI,IAAA,UAAU,CAAC,QAAwB,EAAA;QACxC,OAAO,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;;+GAlBpC,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACTM,MAAM,QAAQ,GAAG,IAAI;AACrB,MAAM,SAAS,GAAG,IAAI;AACtB,MAAM,OAAO,GAAG,IAAI;AACpB,MAAM,QAAQ,GAAG,IAAI;AACrB,MAAM,UAAU,GAAG,IAAI;AACvB,MAAM,eAAe,GAAG,IAAI;AAC5B,MAAM,SAAS,GAAG,IAAI;AACtB,MAAM,qBAAqB,GAAG,IAAI;AAClC,MAAM,sBAAsB,GAAG,IAAI;;MCM7B,oCAAoC,CAAA;AADjD,IAAA,WAAA,GAAA;QAES,IAAI,CAAA,IAAA,GAAsC,4BAA4B;AAC5D,QAAA,IAAA,CAAA,IAAI,GAAG,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;AAoBxE;AAlBQ,IAAA,aAAa,CAClB,QAAwB,EAAA;QAExB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;QAC1D,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE;gBACJ,gBAAgB;AACjB,aAAA;SACF;;AAGI,IAAA,UAAU,CAAC,QAAwB,EAAA;AACxC,QAAA,QACE,QAAQ,CAAC,cAAc,KAAK,UAAU,CAAC,MAAM;YAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;;+GAnBzB,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAApC,oCAAoC,EAAA,CAAA,CAAA;;4FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD;;;MCJY,6BAA6B,CAAA;AAD1C,IAAA,WAAA,GAAA;QAEkB,IAAI,CAAA,IAAA,GAClB,+BAA+B;AAgClC;IA9BQ,aAAa,GAAA;QAClB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE,IAAI;SACX;;AAGI,IAAA,UAAU,CAAC,QAAwB,EAAA;QACxC,QACE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;AACnD,YAAA,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;;IAInC,aAAa,CAAC,aAAuB,EAAE,EAAA;QAC7C,MAAM,mBAAmB,GAAG,CAAC;AAC7B;;;AAGG;AACH,QAAA,QACE,CAAC,CAAC,UAAU,EAAE,MAAM;AACpB,YAAA,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACxC,YAAA,UAAU,CAAC,KAAK,CAAC,CAAC,QAAgB,KAAK,QAAQ,IAAI,mBAAmB,CAAC;;AAInE,IAAA,uBAAuB,CAAC,cAA8B,EAAA;AAC5D,QAAA,OAAO,cAAc,CAAC,UAAU,CAAC,UAAU,IAAI,KAAK;;+GAhC3C,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA7B,6BAA6B,EAAA,CAAA,CAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC;;;MCCY,uCAAuC,CAAA;AADpD,IAAA,WAAA,GAAA;QAEkB,IAAI,CAAA,IAAA,GAClB,+BAA+B;AAclC;IAZQ,aAAa,GAAA;QAClB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE,IAAI;SACX;;AAGI,IAAA,UAAU,CAAC,QAAwB,EAAA;QACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CACjC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAChD;;+GAdQ,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvC,uCAAuC,EAAA,CAAA,CAAA;;4FAAvC,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD;;;ACFK,MAAO,kCAAmC,SAAQ,qBAAqB,CAAA;AACpE,IAAA,UAAU,CAAC,QAAwB,EAAA;AACxC,QAAA,QACE,QAAQ,CAAC,cAAc,KAAK,UAAU,CAAC,QAAQ;AAC/C,YAAA,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ;AAC7B,YAAA,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,CAAC;;AAIxD,IAAA,cAAc,CAAC,cAA8B,EAAA;AACrD,QAAA,QACE,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,CAAC,IAAI,EAAE;;+GAXlE,kCAAkC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAlC,kCAAkC,EAAA,CAAA,CAAA;;4FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C;;;MCIY,4BAA4B,CAAA;AADzC,IAAA,WAAA,GAAA;QAES,IAAI,CAAA,IAAA,GAA8B,UAAU;AAwBpD;AAtBQ,IAAA,aAAa,CAAC,UAA0B,EAAA;QAC7C,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE;AACJ,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,QAAQ,EAAE;AACR,oBAAA,mBAAmB,EAAE,KAAK;AAC1B,oBAAA,oBAAoB,EAAE,KAAK;AAC3B,oBAAA,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE;AAC1C,oBAAA,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE;AACpC,iBAAA;AACF,aAAA;SACF;;IAGI,UAAU,GAAA;AACf,QAAA,OAAO,KAAK;;+GAvBH,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA5B,4BAA4B,EAAA,CAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;MCCY,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;QAKS,IAAI,CAAA,IAAA,GAA0B,cAAc;AAYpD;AAVQ,IAAA,aAAa,CAAC,IAA2B,EAAA;QAC9C,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI;SACL;;IAGI,UAAU,GAAA;AACf,QAAA,OAAO,KAAK;;+GAdH,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;ACYM,MAAM,gBAAgB,GAAG,IAAI,cAAc,CAAgB,QAAQ,CAAC;AAEpE,MAAM,WAAW,GAAqB;IAC3C,yBAAyB;IACzB,kCAAkC;IAClC,uBAAuB;IACvB,wBAAwB;IACxB,0BAA0B;IAC1B,uBAAuB;IACvB,qBAAqB;IACrB,uCAAuC;IACvC,oCAAoC;IACpC,6BAA6B;CAC9B;AAEM,MAAM,qBAAqB,GAAqB;IACrD,uBAAuB;IACvB,0BAA0B;IAC1B,oBAAoB;IACpB,4BAA4B;IAC5B,wBAAwB;CACzB;;ACvCM,MAAM,oCAAoC,GAA4B,CAC3E,UAAU,KACR;AACF,IAAA,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB;AAAE,QAAA,OAAO,IAAI;AAErD,IAAA,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,IAAI;IACrE,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,IAAI;AACtB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,SAAS,GAAG,YAAY,GAAG,IAAI;QAC3C,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;KAC3C;AACH,CAAC;;ACZM,MAAM,0BAA0B,GACrC,IAAI,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,oCAAoC,CAAC,CAAC,CAAC;;ACJ9D,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAS,EAAE,CAAC;;ACAzD,IAAY,kBAOX;AAPD,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,GAAY;AACZ,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,GAAS;AACT,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,GAAW;AACX,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,GAAU;AACV,IAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,GAAc;AACd,IAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,GAAiB;AACnB,CAAC,EAPW,kBAAkB,KAAlB,kBAAkB,GAO7B,EAAA,CAAA,CAAA;;MCQY,mBAAmB,CAAA;AAC9B,IAAA,WAAA,CACmB,eAAgC,EAChC,gBAAkC,EAElC,MAAsB,EAAA;QAHtB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAEhB,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGlB,WAAW,CAChB,OAA0C,EAC1C,kBAAsC,EAAA;QAEtC,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,YAAA,KAAK,EAAE,IAAI,CAAC,2BAA2B,CACrC,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC,MAAM,CAC/C;YACD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AAChC,YAAA,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;YACpC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;YACxC,UAAU,EACR,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI;AACpE,YAAA,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;AAC7C,YAAA,UAAU,EAAE,IAAI,CAAC,2BAA2B,CAC1C,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,OAAO,EAAE,EAAE,EACrD,kBAAkB,CAAC,GAAG,CACvB;YACD,eAAe,EAAE,IAAI,CAAC,2BAA2B,CAC/C,OAAO,CAAC,OAAO,EAAE,eAAe;AAC9B,gBAAA,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAChE,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,UAAU,EAAE,IAAI,CAAC,2BAA2B,CAC1C,OAAO,CAAC,OAAO,EAAE,UAAU,EAC3B,kBAAkB,CAAC,GAAG,CACvB;AACD,YAAA,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAC3C,OAAO,CAAC,UAAU;gBAChB,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,UAAU,CAAC,EACxD,kBAAkB,CAAC,GAAG,CACvB;AACD,YAAA,uBAAuB,EAAE,IAAI,CAAC,2BAA2B,CACvD,OAAO,CAAC,OAAO,EAAE,uBAAuB,EACxC,kBAAkB,CAAC,GAAG,CACvB;AACD,YAAA,OAAO,EAAE,IAAI,CAAC,2BAA2B,CACvC,OAAO,CAAC,OAAO,EAAE,OAAO,EACxB,kBAAkB,CAAC,GAAG,CACvB;AACD,YAAA,wBAAwB,EAAE,IAAI,CAAC,2BAA2B,CACxD,kBAAkB,CAAC,oBAAoB,EACvC,kBAAkB,CAAC,IAAI,CACxB;AACD,YAAA,mBAAmB,EAAE,IAAI,CAAC,2BAA2B,CACnD,OAAO,CAAC,OAAO,EAAE,mBAAmB,EACpC,kBAAkB,CAAC,GAAG,CACvB;AACD,YAAA,oBAAoB,EAAE,IAAI,CAAC,2BAA2B,CACpD,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,oBAAoB,EAC9D,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;AACvD,kBAAE,aAAyB;AAC7B,YAAA,YAAY,EAAE,IAAI,CAAC,2BAA2B,CAC5C,OAAO,CAAC,OAAO,EAAE,YAAY,EAC7B,kBAAkB,CAAC,KAAK,CACzB;AACD,YAAA,iBAAiB,EAAE,IAAI,CAAC,2BAA2B,CACjD,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAClC,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,YAAY,EAAE,IAAI,CAAC,2BAA2B,CAC5C,OAAO,CAAC,OAAO,EAAE,YAAY,EAC7B,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,4BAA4B,EAAE,IAAI;AAClC,YAAA,oBAAoB,EAAE,IAAI,CAAC,2BAA2B,CACpD,OAAO,CAAC,OAAO,EAAE,oBAAoB,EACrC,kBAAkB,CAAC,MAAM,CAC1B;YACD,uBAAuB,EAAE,IAAI;AAC7B,YAAA,uBAAuB,EAAE,IAAI,CAAC,2BAA2B,CACvD,OAAO,CAAC,OAAO,EAAE,uBAAuB,EACxC,kBAAkB,CAAC,GAAG,CACvB;AACD,YAAA,oBAAoB,EAAE,IAAI,CAAC,2BAA2B,CACpD,OAAO,CAAC,OAAO,EAAE,oBAAoB,EACrC,kBAAkB,CAAC,GAAG,CACvB;AACD,YAAA,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAC3C,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC;kBACjC,MAAM,CAAC;kBACP,MAAM,CAAC,OAAO;AAClB,YAAA,uBAAuB,EAAE,IAAI,CAAC,2BAA2B,CACvD,kBAAkB,CAAC,qBAAqB,EACxC,kBAAkB,CAAC,GAAG,CACvB;AACD,YAAA,uBAAuB,EAAE,IAAI,CAAC,2BAA2B,CACvD,kBAAkB,CAAC,qBAAqB,EACxC,kBAAkB,CAAC,GAAG,CACvB;AACD,YAAA,yBAAyB,EAAE,IAAI,CAAC,2BAA2B,CACzD,kBAAkB,CAAC,uBAAuB,EAC1C,kBAAkB,CAAC,GAAG,CACvB;YACD,OAAO,EAAE,IAAI,CAAC,2BAA2B,CACvC,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAC9D,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;YAC7C,SAAS,EAAE,IAAI,CAAC,2BAA2B,CACzC,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAC9D,kBAAkB,CAAC,MAAM,CAC1B;YACD,UAAU,EAAE,IAAI,CAAC,2BAA2B,CAC1C,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAC5D,kBAAkB,CAAC,MAAM,CAC1B;YACD,YAAY,EAAE,IAAI,CAAC,2BAA2B,CAC5C,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAC9D,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,OAAO,EAAE,IAAI,CAAC,2BAA2B,CACvC,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAClD,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,yBAAyB,EAAE,IAAI,CAAC,2BAA2B,CACzD,kBAAkB,CAAC,sBAAsB,EACzC,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ;AACrD,YAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,kBAAkB;AACtD,YAAA,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc;AAC1D,YAAA,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS;AAC3C,YAAA,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAC3C,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,IAAI,EAAE,KAAK,EACrD,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,QAAQ,EAAE,IAAI,CAAC,2BAA2B,CACxC,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,IAAI,EAAE,cAAc,EAC9D,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,kBAAkB,EAAE,IAAI,CAAC,2BAA2B,CAClD,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,kBAAkB,EAC5D,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,CAAC,SAAS,EAAE;AAC7B,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAC3C,OAAO,EAAE,UAAU,EACnB,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,eAAe,EAAE,IAAI,CAAC,2BAA2B,CAC/C,IAAI,CAAC,cAAc,EAAE,EACrB,kBAAkB,CAAC,IAAI,CACxB;AACD,YAAA,SAAS,EAAE,IAAI,CAAC,2BAA2B,CACzC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAClC,kBAAkB,CAAC,IAAI,CACxB;YACD,UAAU,EAAE,IAAI;AAChB,YAAA,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAC3C,OAAO,EAAE,UAAU,EACnB,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAC3C,OAAO,EAAE,UAAU,EACnB,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAC3C,OAAO,EAAE,UAAU,EACnB,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAC3C,OAAO,EAAE,UAAU,EACnB,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAC3C,OAAO,EAAE,UAAU,EACnB,kBAAkB,CAAC,MAAM,CAC1B;AACD,YAAA,cAAc,EAAE,mBAAmB;SACpC;;AAGK,IAAA,OAAO,CAAC,IAAU,EAAA;QACxB,MAAM,SAAS,GAAG,CAAC;QACnB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CACrE,SAAS,CACV;;AAGK,IAAA,WAAW,CAAC,IAAU,EAAA;QAC5B,MAAM,IAAI,GAAG,EAAE;QACf,MAAM,QAAQ,GAAG,CAAC;QAClB,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI;AAEnD,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAC3B,YAAA,OAAO,GAAG;;AAGZ,QAAA,OAAO,UAAU,GAAG,QAAQ,GAAG,CAAI,CAAA,EAAA,UAAU,CAAE,CAAA,GAAG,UAAU,CAAC,QAAQ,EAAE;;IAGjE,2BAA2B,CACjC,KAAyE,EACzE,IAAwB,EAAA;QAGxB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC9B,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;;QAGvB,QAAQ,IAAI;YACV,KAAK,kBAAkB,CAAC,MAAM;AAC5B,gBAAA,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,KAAK,kBAAkB,CAAC,GAAG;gBACzB,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACnC,gBAAA,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK;YACjC,KAAK,kBAAkB,CAAC,WAAW;YACnC,KAAK,kBAAkB,CAAC,QAAQ;AAC9B,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC1C,KAAK,kBAAkB,CAAC,KAAK;gBAC3B,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjC,gBAAA,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK;YACjC,KAAK,kBAAkB,CAAC,IAAI;gBAC1B,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC;;;AAIlB,IAAA,0BAA0B,CAChC,KAA+B,EAAA;QAE/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;;IAGd,cAAc,GAAA;QACpB,QACE,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,QAAQ,EAAE,aAAa;AACjE,YAAA,cAAc;;AAIV,IAAA,kBAAkB,CAAC,UAAyB,EAAA;QAClD,QACE,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,QAAQ,EAAE,cAAc;AAClE,YAAA,UAAU;;AApQH,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,2EAIpB,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAKI,MAAM;2BAAC,WAAW;;;MCGV,6BAA6B,CAAA;IACxC,IAAW,oBAAoB,CAAC,KAAc,EAAA;AAC5C,QAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,GAAG,KAAK;;IAGtD,IAAW,qBAAqB,CAAC,KAAa,EAAA;AAC5C,QAAA,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,GAAG,KAAK;;IAGvD,IAAW,UAAU,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,KAAK;;IAG5C,IAAW,aAAa,CAAC,KAAa,EAAA;AACpC,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,GAAG,KAAK;;AAG/C,IAAA,IAAW,cAAc,GAAA;QACvB,OAAO,IAAI,CAAC,kBAAkB;;AAGhC,IAAA,IAAY,YAAY,GAAA;QACtB,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,QAAQ,EAAE;AACzD,cAAE;cACA,IAAI;;AAyBV,IAAA,WAAA,CACmB,IAAgB,EAChB,mBAAwC,EACxC,eAAgC,EAAA;QAFhC,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAe,CAAA,eAAA,GAAf,eAAe;QAzBjB,IAAM,CAAA,MAAA,GACrB,wDAAwD;AAEzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAsB;AAE5C,QAAA,IAAA,CAAA,kBAAkB,GAAuB;AACxD,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,uBAAuB,EAAE,IAAI;AAC7B,YAAA,sBAAsB,EAAE,IAAI;AAC5B,YAAA,oBAAoB,EAAE,KAAK;AAC3B,YAAA,qBAAqB,EAAE,IAAI;AAC3B,YAAA,qBAAqB,EAAE,IAAI;AAC3B,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,aAAa,EAAE,IAAI;SACpB;AAEgB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAAE;;IAQhC,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CACT,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,CACvE;QACD,IAAI,CAAC,gBAAgB,EAAE;;AAGlB,IAAA,MAAM,CAAC,GAAmB,EAAA;QAC/B,IAAI,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,GAAG;;;AAIrC,IAAA,eAAe,CAAC,WAQtB,EAAA;AACC,QAAA,IAAI,WAAW,CAAC,uBAAuB,EAAE;YACvC,IAAI,CAAC,kBAAkB,CAAC,uBAAuB;gBAC7C,WAAW,CAAC,uBAAuB;;AAGvC,QAAA,MAAM,QAAQ,GAAsB,WAAW,CAAC,MAAM,CAAC,IAAI,CACzD,CAAC,KAAY,KAAK,KAAK,CAAC,IAAI,KAAK,UAAU,CAC5C;QACD,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,GAAG,QAAQ,CAAC,KAAK;;AAGjE,QAAA,IAAI,WAAW,CAAC,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;;AAG9B,QAAA,IAAI,WAAW,CAAC,WAAW,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,WAAW,CAAC,WAAW;AACzD,YAAA,MAAM,oBAAoB,GAAG;gBAC3B,aAAa,EAAE,eAAe,CAAC,WAAW;aAC3C;YACD,IAAI,CAAC,IAAI,CACP,gBAAgB,EAChB,uBAAuB,CAAC,MAAM,EAC9B,oBAAoB,CACrB;AAED,YAAA,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE;gBAC9B,IAAI,CAAC,YAAY,EAAE;;;QAIvB,MAAM,KAAK,GAAG,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK;QAClD,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,kBAAkB,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM;YAC/C,IAAI,CAAC,kBAAkB,CAAC,aAAa,GAAG,KAAK,CAAC,QAAQ;;AAGxD,QAAA,IAAI,WAAW,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,GAAG,WAAW,CAAC,KAAK;;;AAI5D,IAAA,IAAI,CACT,MAAc,EACd,IAA0C,EAC1C,OAAyC,EAAA;AAEzC,QAAA,IAAI,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACrE;;AAGF,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE;QACvB,MAAM,OAAO,GACX,OAAO,EAAE,aAAa,KAAK,eAAe,CAAC;AACzC,cAAE,IAAI,CAAC,kBAAkB,CAAC;cACxB,IAAI;AACV,QAAA,MAAM,YAAY,GAAsC;YACtD,MAAM;YACN,IAAI;AACJ,YAAA,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;AAC7B,YAAA,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;YACrC,IAAI;YACJ,OAAO;AACP,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;AACvC,YAAA,aAAa,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI;AAC5C,YAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;AACvC,YAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;AACvC,YAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;AACvC,YAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;AACvC,YAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;AACvC,YAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI;SACxC;QAED,MAAM,SAAS,GAAG,MAAW;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3B,YAAA,MAAM,KAAK,GAAuB,IAAI,CAAC,mBAAmB,CAAC,WAAW,CACpE,YAAY,EACZ,IAAI,CAAC,kBAAkB,CACxB;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,SAAS,CAAC,UAAU,EAAE;gBACxB,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC;;iBACzC;AACL,gBAAA,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,SAAS,EAAE;;AAE7D,SAAC;AAED,QAAA,IAAI,OAAO,EAAE,WAAW,EAAE;AACxB,YAAA,SAAS,EAAE;YACX;;AAGF,QAAA,UAAU,CAAC,MAAM,SAAS,EAAE,CAAC;;IAGvB,gBAAgB,GAAA;QACtB,IAAI,CAAC,IAAI,CACP,sBAAsB,CAAC,cAAc,EACrC,uBAAuB,CAAC,IAAI,EAC5B;AACE,YAAA,KAAK,EAAE,IAAI;YACX,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,SAAA,CACF;;IAGK,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI;;IAGhC,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,IAAI;;+GA/LhC,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAc,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cAF5B,MAAM,EAAA,CAAA,CAAA;;4FAEP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCLY,iBAAiB,CAAA;AAK5B,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;;AAG/C,IAAA,WAAA,CAEmB,gBAAkC,EAClC,QAAkB,EAClB,uBAAgD,EAChD,6BAA4D,EAAA;QAH5D,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACvB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;AAb/B,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAc;QAE9C,IAAe,CAAA,eAAA,GAAoB,EAAE;QAapD,IAAI,CAAC,mBAAmB,EAAE;;AAGrB,IAAA,aAAa,CAAC,cAA8B,EAAA;AACjD,QAAA,IAAI,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC;;AAG5C,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE;AAClC,YAAA,OAAO,IAAI;;QAGb,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC;QAEpE,IAAI,iBAAiB,EAAE;YACrB,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC;AAClE,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9B,YAAA,OAAO,UAAU;;AAGnB,QAAA,MAAM,IAAI,WAAW,CACnB,2BAA2B,EAC3B,CAAC,SAAS,CAAC,GAAG,CAAC,EACf,cAAc,CACf;;AAGI,IAAA,eAAe,CAAC,MAAkB,EAAA;AACvC,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;;AAGrB,IAAA,cAAc,CAAC,MAAkB,EAAA;AACtC,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;;IAGlE,mBAAmB,GAAA;QACzB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC3B,CAAC,UAAwC,KAAI;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAgB,UAAU,CAAC;AACzD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,SAAC,CACF;;AAGK,IAAA,qBAAqB,CAC3B,cAA8B,EAAA;QAE9B,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAC1C,CAAC,UAAyB,KAAI;AAC5B,YAAA,OAAO,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC;AAC9C,SAAC,CACF;QAED,IAAI,CAAC,UAAU,EAAE;YACf;;AAGF,QAAA,OAAO,UAAU;;AAGX,IAAA,aAAa,CAAC,UAAsB,EAAA;QAC1C,MAAM,uBAAuB,GAAG,0BAA0B,CAAC,GAAG,CAC5D,UAAU,CAAC,IAAI,CAChB;AACD,QAAA,MAAM,OAAO,GAAG,uBAAuB,GAAG,UAAU,CAAC,IAAI;YACvD,KAAK,EAAE,UAAU,CAAC,IAAI;SACvB;AAED,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,UAAU,EACjC,QAAQ,EACR,OAAO,CACR;;AA1FQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,kBAUlB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAVf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAWI,MAAM;2BAAC,gBAAgB;;;AC1B5B;AACO,MAAM,4BAA4B,GAAG;IAC1C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACnC;;ACAM,MAAM,qBAAqB,GAAG;AACnC,IAAA;AACE,QAAA,UAAU,EAAE,IAAI,GAAG,CAAC,4BAA4B,CAAC;QACjD,SAAS,EAAE,UAAU,CAAC,UAAU;AACjC,KAAA;CACF;;MCHY,gBAAgB,CAAA;AACpB,IAAA,SAAS,CAAC,IAAa,EAAA;QAC5B,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE;;AAGX,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,MAAM,eAAe,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CACrD,IAAI,EACJ,WAAW,CACZ;AACD,YAAA,OAAO,eAAe,EAAE,eAAe,EAAE,WAAW,IAAI,EAAE;;AAG5D,QAAA,OAAO,IAAI;;+GAdF,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAhB,gBAAgB,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,cAAc;AACrB,iBAAA;;;MCGY,+BAA+B,CAAA;AAC1C,IAAA,WAAA,CAAoC,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;;AAE7C,IAAA,SAAS,CAAC,QAAqB,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE;AAC5B,YAAA,OAAO,QAAQ;;QAGjB,IAAI,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9D,QAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;QAEpD,OAAO;AACL,YAAA,GAAG,QAAQ;AACX,YAAA,MAAM,EAAE,YAAY;SACrB;;AAGK,IAAA,qBAAqB,CAAC,MAAkB,EAAA;AAC9C,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AAC1B,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;gBACvB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,GAAG,KAC9C,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAC/B;gBAED,IAAI,QAAQ,EAAE;oBACZ,OAAO;AACL,wBAAA,GAAG,KAAK;wBACR,YAAY,EAAE,QAAQ,CAAC,SAAS;qBACjC;;;AAIL,YAAA,OAAO,KAAK;AACd,SAAC,CAAC;;AAGI,IAAA,kBAAkB,CAAC,MAAkB,EAAA;AAC3C,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AAC1B,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAClB,gBAAA,OAAO,KAAK;;YAGd,OAAO;AACL,gBAAA,GAAG,KAAK;gBACR,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;aACxD;AACH,SAAC,CAAC;;+GA9CO,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,cADlB,MAAM,EAAA,CAAA,CAAA;;4FACnB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACH5B,MAAO,sBAAuB,SAAQ,WAAW,CAAA;IACrD,WAAmB,CAAA,OAAe,EAAE,IAAkB,EAAA;QACpD,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;AAEhE,QAAA,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;;AAEvB;;ACTM,MAAM,aAAa,GAAG,qBAAqB;;ICAtC;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,GAAa;AACb,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,GAAU;AACV,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,GAAgB;AAChB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,GAAa;AACb,IAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,GAAsB;AACtB,IAAA,eAAA,CAAA,cAAA,CAAA,GAAA,GAAkB;AAClB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,GAAc;AACd,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,GAAS;AACT,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,IAAc;AACd,IAAA,eAAA,CAAA,WAAA,CAAA,GAAA,IAAgB;AAChB,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,IAAU;AACV,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,IAAW;AACX,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,IAAc;AACd,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,IAAU;AACV,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,IAAsB;AACtB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,IAAe;AACjB,CAAC,EAjBW,eAAe,KAAf,eAAe,GAiB1B,EAAA,CAAA,CAAA;;ACbM,MAAM,IAAI,GAAuB;IACtC,EAAE,EAAE,eAAe,CAAC,IAAI;AACxB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,WAAW,CAAC,MAAc,EAAA;AACxB,QAAA,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;KAC9B;CACF;;ACTM,MAAM,UAAU,GAAuB;IAC5C,EAAE,EAAE,eAAe,CAAC,UAAU;AAC9B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,MAAM,SAAS,GAAG,CAAC;QACnB,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;QACpD,QACE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;aACjC,aAAa,IAAI,QAAQ,IAAI,aAAa,IAAI,QAAQ,CAAC;KAE3D;CACF;;AClBM,MAAM,WAAW,GAAG,yBAAyB;;ACI7C,MAAM,OAAO,GAAuB;IACzC,EAAE,EAAE,eAAe,CAAC,OAAO;AAC3B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,OAAO,IAAI,MAAM,CACf,yGAAyG,CAC1G,CAAC,IAAI,CAAC,MAAM,CAAC;KACf;AACD,IAAA,YAAY,EAAE,CAAC;CAChB;;ACbM,MAAM,eAAe,GAAuB;IACjD,EAAE,EAAE,eAAe,CAAC,gBAAgB;AACpC,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,kBAAkB;AAC5B,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,OAAO,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;KAC9C;AACD,IAAA,YAAY,EAAE,CAAC;CAChB;;ACVM,MAAM,WAAW,GAAuB;IAC7C,EAAE,EAAE,eAAe,CAAC,YAAY;AAChC,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,MAAM,KAAK,GAAG,wCAAwC;AACtD,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;KAC1B;CACF;;ACTM,MAAM,QAAQ,GAAuB;IAC1C,EAAE,EAAE,eAAe,CAAC,QAAQ;AAC5B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,OAAO,IAAI,MAAM,CACf,uFAAuF,CACxF,CAAC,IAAI,CAAC,MAAM,CAAC;KACf;CACF;;ACXM,MAAM,GAAG,GAAuB;IACrC,EAAE,EAAE,eAAe,CAAC,GAAG;AACvB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,OAAO,IAAI,MAAM,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;KACxD;CACF;;ACTM,MAAM,OAAO,GAAuB;IACzC,EAAE,EAAE,eAAe,CAAC,OAAO;AAC3B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,MAAM,SAAS,GAAG,CAAC;QACnB,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;QACpD,OAAO,aAAa,KAAK,MAAM;KAChC;CACF;;ACXM,MAAM,SAAS,GAAuB;IAC3C,EAAE,EAAE,eAAe,CAAC,SAAS;AAC7B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,OAAO,IAAI,MAAM,CAAC,+CAA+C,CAAC,CAAC,IAAI,CACrE,MAAM,CACP;KACF;CACF;;ACXM,MAAM,GAAG,GAAuB;IACrC,EAAE,EAAE,eAAe,CAAC,GAAG;AACvB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,OAAO,IAAI,MAAM,CACf,kXAAkX,CACnX,CAAC,IAAI,CAAC,MAAM,CAAC;KACf;CACF;;ACXM,MAAM,IAAI,GAAuB;IACtC,EAAE,EAAE,eAAe,CAAC,IAAI;AACxB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,MAAM,SAAS,GAAG,CAAC;QACnB,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;AACpD,QAAA,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;KACpE;CACF;;ACXM,MAAM,OAAO,GAAuB;IACzC,EAAE,EAAE,eAAe,CAAC,OAAO;AAC3B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,MAAM,SAAS,GAAG,CAAC;QACnB,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;QACpD,OAAO,aAAa,KAAK,QAAQ;KAClC;CACF;;ACXM,MAAM,GAAG,GAAuB;IACrC,EAAE,EAAE,eAAe,CAAC,GAAG;AACvB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,MAAM,SAAS,GAAG,CAAC;QACnB,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;AACpD,QAAA,OAAO,aAAa,IAAI,MAAM,IAAI,aAAa,IAAI,MAAM;KAC1D;CACF;;ACZM,MAAM,aAAa,GAAuB;IAC/C,EAAE,EAAE,eAAe,CAAC,eAAe;AACnC,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,IAAI,EAAE,wBAAwB;AAC9B,IAAA,WAAW,CAAC,MAAc,EAAA;AACxB,QAAA,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;KAC/B;CACF;;ACRM,MAAM,WAAW,GAAuB;IAC7C,EAAE,EAAE,eAAe,CAAC,OAAO;AAC3B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,IAAI,EAAE,WAAW;IACjB,WAAW,GAAA;AACT,QAAA,OAAO,KAAK;KACb;CACF;;ACVM,MAAM,QAAQ,GAAuB;IAC1C,EAAE,EAAE,eAAe,CAAC,QAAQ;AAC5B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,IAAI,EAAE,yBAAyB;AAC/B,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,MAAM,KAAK,GACT,yGAAyG;AAC3G,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;KAC1B;CACF;;ACID;;;;;;;;;AASG;AACI,MAAM,mBAAmB,GAAyB;IACvD,IAAI;IACJ,OAAO;IACP,OAAO;IACP,QAAQ;IACR,GAAG;IACH,QAAQ;IACR,OAAO;IACP,SAAS;IACT,GAAG;IACH,GAAG;IACH,WAAW;IACX,eAAe;IACf,UAAU;IACV,aAAa;IACb,IAAI;IACJ,WAAW;CACZ;;AC1BM,MAAM,cAAc,GAEvB;AACF,IAAA,CAAC,eAAe,CAAC,OAAO,GAAG,WAAW;AACtC,IAAA,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI;AAC5B,IAAA,CAAC,eAAe,CAAC,UAAU,GAAG,UAAU;AACxC,IAAA,CAAC,eAAe,CAAC,OAAO,GAAG,OAAO;AAClC,IAAA,CAAC,eAAe,CAAC,gBAAgB,GAAG,eAAe;AACnD,IAAA,CAAC,eAAe,CAAC,YAAY,GAAG,WAAW;AAC3C,IAAA,CAAC,eAAe,CAAC,QAAQ,GAAG,QAAQ;AACpC,IAAA,CAAC,eAAe,CAAC,GAAG,GAAG,GAAG;AAC1B,IAAA,CAAC,eAAe,CAAC,OAAO,GAAG,OAAO;AAClC,IAAA,CAAC,eAAe,CAAC,SAAS,GAAG,SAAS;AACtC,IAAA,CAAC,eAAe,CAAC,GAAG,GAAG,GAAG;AAC1B,IAAA,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI;AAC5B,IAAA,CAAC,eAAe,CAAC,OAAO,GAAG,OAAO;AAClC,IAAA,CAAC,eAAe,CAAC,GAAG,GAAG,GAAG;AAC1B,IAAA,CAAC,eAAe,CAAC,eAAe,GAAG,aAAa;AAChD,IAAA,CAAC,eAAe,CAAC,QAAQ,GAAG,QAAQ;CACrC;;MC5BY,iBAAiB,CAAA;AACrB,IAAA,YAAY,CAAC,UAAkB,EAAA;QACpC,MAAM,eAAe,GAAG,CAAC;AACzB,QAAA,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,eAAe,CAAC;;AAG9D,IAAA,gBAAgB,CAAC,UAAkB,EAAA;QACxC,MAAM,mBAAmB,GAAG,CAAC;AAC7B,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,MAAM,EAAE,EAAE;AAClB,aAAA,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,mBAAmB,CAAC;;AAGhD,IAAA,eAAe,CAAC,UAAkB,EAAA;QACvC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAE3C,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;YACzD,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC;YACxD,OAAO,eAAe,GAAG,QAAQ,CAAC,EAAE,GAAG,KAAK;AAC9C,SAAC,CAAC;AAEF,QAAA,OAAO,YAAY,GAAG,YAAY,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE;;AAGjD,IAAA,qBAAqB,CAAC,QAAyB,EAAA;AACpD,QAAA,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC;QAE3C,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,WAAW;;AAGpB,QAAA,OAAO,UAAU;;+GA/BR,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACTD;MAUa,wBAAwB,CAAA;AAWnC,IAAA,WAAA,CAAoC,iBAAoC,EAAA;QAApC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;AARpC,QAAA,IAAA,CAAA,gBAAgB,GAA2B;YAC1D,iBAAiB;YACjB,SAAS;YACT,eAAe;YACf,eAAe;YACf,gBAAgB;SACjB;AAGC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE;;AAG3B,IAAA,YAAY,CAAC,SAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC;;AAGjC,IAAA,iBAAiB,CACtB,OAA0B,EAAA;AAE1B,QAAA,IAAI,OAAO,CAAC,eAAe,EAAE;YAC3B,MAAM,QAAQ,GAAa,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACvD,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;QAGlD,MAAM,aAAa,GAAkB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAEtE,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,qBAAqB,EAAE;AAC5D,YAAA,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;;QAG1E,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,eAAgC,KAAI;AACjE,YAAA,OAAO,OAAO,CAAC,eAAe,CAAC;AACjC,SAAC,CAAC;AAEF,QAAA,OAAO,OAAY;;AAGb,IAAA,OAAO,CAAC,KAAa,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,sBAAsB,CAAC,kBAAkB,CAAC;;QAGtD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;QAEpD,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,MAAM,IAAI,sBAAsB,CAC9B,sDAAsD,CACvD;;AAGH,QAAA,OAAO,cAAc;;AAGf,IAAA,mBAAmB,CAAC,OAA0B,EAAA;AACpD,QAAA,MAAM,aAAa,GAAkB;YACnC,WAAW,EAAE,OAAO,CAAC,eAAyB;YAC9C,SAAS,EAAE,OAAO,CAAC,aAAuB;YAC1C,UAAU,EAAE,OAAO,CAAC,cAAwB;YAC5C,GAAG,EAAE,OAAO,CAAC,OAAiB;SAC/B;AAED,QAAA,IAAI,OAAO,CAAC,aAAa,EAAE;AACzB,YAAA,aAAa,CAAC,GAAG,GAAG,OAAO,CAAC,aAAuB;;AAGrD,QAAA,OAAO,aAAa;;AAGd,IAAA,cAAc,CAAC,OAA0B,EAAA;QAC/C,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAC3C,OAAO,CAAC,eAAyB,CAClC;YACD,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAClD,OAAO,CAAC,eAAyB,CAClC;YACD,SAAS,EAAE,OAAO,CAAC,aAAuB;YAC1C,UAAU,EAAE,OAAO,CAAC,cAAwB;SAC7C;;+GAjFQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA,CAAA;;4FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,sBAAsB,CAAA;AAC1B,IAAA,wBAAwB,CAC7B,MAAmC,EAAA;AAEnC,QAAA,IAAI,CAAC,MAAM,EAAE,qBAAqB,EAAE;AAClC,YAAA,OAAO,EAAE;;QAGX,MAAM,MAAM,GAAiC,EAAE;AAE/C,QAAA,IAAI,yBAAyB,CAAC,MAAM,CAAC,EAAE;AACrC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB;YAE7C,MAAM,CAAC,4BAA4B,GAAG,IAAI,CAAC,KAAK,CAC9C,QAAQ,CAAC,4BAA4B,CACtC;YACD,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AAE/D,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gCAAgC,CAC3D,QAAQ,CAAC,yBAAyB,EAClC,QAAQ,CAAC,uBAAuB,EAChC,QAAQ,CAAC,gBAAgB,CAC1B;YAED,IAAI,eAAe,EAAE;AACnB,gBAAA,MAAM,CAAC,yBAAyB,GAAG,eAAe;;;AAItD,QAAA,OAAO,MAAM;;AAGP,IAAA,KAAK,CAAC,KAA0B,EAAA;AACtC,QAAA,OAAO,KAAK,GAAmB,GAAA;;AAGzB,IAAA,gCAAgC,CACtC,yBAAqD,EACrD,uBAAiC,EACjC,gBAA0B,EAAA;QAE1B,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,SAAS;;QAElB,IAAI,yBAAyB,EAAE;AAC7B,YAAA,OAAO,yBAAyB;;AAGlC,QAAA,OAAO;cACJ,KAAA;AACD;;+GAlDO,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACTK,SAAU,MAAM,CAAC,KAAc,EAAA;IACnC,OAAO,KAAK,KAAK,IAAI;AACvB;;ACFM,SAAU,WAAW,CAAC,KAAc,EAAA;AACxC,IAAA,OAAO,OAAO,KAAK,KAAK,WAAW;AACrC;;MCQa,cAAc,CAAA;IAGzB,WACwC,CAAA,MAAsB,EAC3C,eAAgC,EAAA;QADX,IAAM,CAAA,MAAA,GAAN,MAAM;QAC3B,IAAe,CAAA,eAAA,GAAf,eAAe;QAJ1B,IAAK,CAAA,KAAA,GAA+B,EAAE;;AAO9C;;;AAGG;IACI,GAAG,CAAC,GAAW,EAAE,KAAc,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK;AAEvB,QAAA,IAAI;YACF,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAChC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EACvB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACtB;;QACD,OAAO,KAAc,EAAE;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC;;;AAI3C,IAAA,GAAG,CAAI,GAAW,EAAA;QACvB,MAAM,UAAU,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAE3C,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;AAC5B,YAAA,OAAO,UAAe;;AAGxB,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CACrD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CACxB;AAED,YAAA,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE;AACxB,gBAAA,OAAO,IAAI;;AAGb,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAM;;QACpC,OAAO,KAAc,EAAE;AACvB,YAAA,OAAO,IAAI;;;AAIP,IAAA,aAAa,CAAC,GAAW,EAAA;QAC/B,OAAO,CAAA,EAAG,GAAG,CAAG,EAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAA,CAAE;;AAhDnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,kBAIf,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAnB,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAKI,MAAM;2BAAC,WAAW;;;MCgBV,iBAAiB,CAAA;IAC5B,WAEqB,CAAA,eAA0C,EAC5C,aAA4B,EAC5B,eAAgC,EAChC,cAA8B,EAC9B,iBAAoC,EACpC,+BAAgE,EAChE,wBAAkD,EAClD,uBAAgD,EAChD,6BAA4D,EAC5D,sBAA8C,EAC9C,cAA8B,EAC9B,wBAAkD,EAAA;QAXhD,IAAe,CAAA,eAAA,GAAf,eAAe;QACjB,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAA+B,CAAA,+BAAA,GAA/B,+BAA+B;QAC/B,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACxB,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACvB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;;IAGpC,MAAM,OAAO,CAClB,MAA4B,EAAA;QAE5B,MAAM,qBAAqB,GACzB,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,MAAM,CAAC;QAE9D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC;AAElD,QAAA,MAAM,aAAa,GAA4B;AAC7C,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACxC,YAAA,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;AACnC,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YACzC,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,YAAA,sBAAsB,EACpB,MAAM,CAAC,sBAAsB,KAAK;kBAC/B,GAAA;AACD,kBAAkB,GAAA;YACtB,yBAAyB,EAAE,MAAM,CAAC;kBAC/B,GAAA;AACD,kBAAkB,GAAA;AACpB,YAAA,GAAG,qBAAqB;SACzB;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,6BAA6B,KAAK,IAAI,EAAE;AAC/D,YAAA,aAAa,CAAC,uBAAuB,GAAG,IAAI,CAAC;iBAC1C;kBACA,GAAA;AACD;;AAGJ,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,YAAA,aAAa,CAAC,eAAe,GAAG,MAAM,CAAC,aAAa;;QAGtD,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,iBAAiB,EACxC,uBAAuB,CAAC,MAAM,EAC9B,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,CAC7B;QAED,OAAO,IAAI,CAAC;aACT,oBAAoB,CAAC,aAAa;AAClC,aAAA,IAAI,CAAC,CAAC,WAAW,KAAI;YACpB,MAAM,QAAQ,GACZ,IAAI,CAAC,+BAA+B,CAAC,SAAS,CAAC,WAAW,CAAC;YAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAEzD,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;AACnC,gBAAA,OAAO,kBAAkB;;AAG3B,YAAA,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,WAAW,CAAC;YAC5D,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAChD,kBAAkB,CAAC,WAAW,CAC/B;YAED,IAAI,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE;AAClD,gBAAA,MAAM,QAAQ,GAAG,CAAC,KAAwC,KAAU;AAClE,oBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,gBAAgB,EACvC,uBAAuB,CAAC,MAAM,EAC9B,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,CACzD;AACH,iBAAC;gBAED,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;AAEvD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpC,IAAI,CAAC,uBAAuB,CAAC,aAAa,CACxC,kBAAkB,CAAC,WAAW,CAAC,MAAM,CACtC,CACF;;AAGH,YAAA,OAAO,kBAAkB;AAC3B,SAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAY,KAAI;AACtB,YAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AAC9B,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,EAAE;gBAC9C,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpC,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;AAC1C,oBAAA,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM;oBACrC,OAAO,EAAE,KAAK,CAAC,OAAO;AACvB,iBAAA,CAAC,CACH;;AAGH,YAAA,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;AACxC,SAAC,CAAC;;AAGE,IAAA,uBAAuB,CAAC,WAAwB,EAAA;AACtD,QAAA,MAAM,cAAc,GAAsB,WAAW,CAAC,MAAM,CAAC,IAAI,CAC/D,CAAC,KAAY,KAAK,KAAK,CAAC,IAAI,KAAK,YAAY,CAC9C;QAED,IAAI,CAAC,cAAc,EAAE;YACnB;;AAGF,QAAA,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;;AArH7D,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,kBAElB,8BAA8B,EAAA,EAAA,EAAA,KAAA,EAAAoB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAX,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,+BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAF7B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAGI,MAAM;2BAAC,8BAA8B;;;MChCpB,iBAAiB,CAAA;AAG3B,IAAA,gBAAgB,CAAC,UAAsC,EAAA;AAC/D,QAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC5B,IAAI,CAAC,CAAO,IAAA,EAAA,GAAG,CAAE,CAAA,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;;;AAI9B,IAAA,aAAa,CAAC,UAAsC,EAAA;AAC5D,QAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;;;AAGhC;;ACZK,MAAO,UAAW,SAAQ,QAAQ,CAAA;AACtC,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,sBAAsB,CAAC;;AAEhC;;ACCK,MAAO,aAAc,SAAQ,iBAAiB,CAAA;AAIlD,IAAA,WAAA,CAAmB,UAOlB,EAAA;AACC,QAAA,KAAK,EAAE;AAEP,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,UAAU;AAEtE,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,UAAU,EAAE;;AAGxB,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;AAElC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAEzB,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO;;AAG7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;IAGnD,eAAe,CACrB,MAAe,EACf,IAAsB,EAAA;QAEtB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC/B,CAAC,SAAoC,EAAE,KAAY,KAAI;YACrD,MAAM,WAAW,GAA2B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAEhE,YAAA,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,GAAG,WAAW,CAAC,KAAK,GAAG,KAAK,EAAE,KAAK;AAEtE,YAAA,OAAO,SAAS;SACjB,EACD,EAAE,CACH;AAED,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC;;AAG5C,IAAA,yBAAyB,CAAC,YAAwC,EAAA;QAGxE,MAAM,oBAAoB,GAAW,YAAY,CAC/C,UAAU,CAAC,UAAU,CACZ;QAEX,IAAI,oBAAoB,EAAE;AACxB,YAAA,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC;AACrD,YAAA,YAAY,CAAC,YAAY,CAAC,GAAG,KAAK;AAClC,YAAA,YAAY,CAAC,WAAW,CAAC,GAAG,IAAI;;AAGlC,QAAA,OAAO,YAAY;;AAEtB;;AC5DM,MAAM,yBAAyB,GACpC,IAAI,cAAc,CAAuB,eAAe,CAAC;AAEpD,MAAM,4BAA4B,GAAkB;AACzD,IAAA,OAAO,EAAE,yBAAyB;AAClC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAA6B,KAAK,IAAI,aAAa,CAAC,GAAG,IAAI,CAAC;CAC3E;;ACNM,MAAM,0BAA0B,GACrC,IAAI,cAAc,CAAwB,gBAAgB,CAAC;AAEtD,MAAM,6BAA6B,GAAkB;AAC1D,IAAA,OAAO,EAAE,0BAA0B;AACnC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAA8B,KAAK,IAAI,cAAc,CAAC,GAAG,IAAI,CAAC;CAC7E;;MCRY,wBAAwB,CAAA;AAMnC,IAAA,WAAA,CAAoC,eAAgC,EAAA;QAAhC,IAAe,CAAA,eAAA,GAAf,eAAe;;IAE5C,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;YACvC;;AAEF,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,+BAA+B,EAAE;AACzE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;;AAGvB,IAAA,MAAM,OAAO,GAAA;QAClB,OAAO,IAAI,CAAC,IAAI;;AAGV,IAAA,MAAM,+BAA+B,GAAA;AAG3C,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,+BAA+B,CAAC;QAE7D,OAAO,OAAO,CAAC,oBAAyD;;AAGlE,IAAA,MAAM,SAAS,GAAA;AACrB,QAAA,MAAM,IAAI,GAAS,MAAM,IAAI,CAAC,QAAQ,EAAE;AACxC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;AAGrB,IAAA,MAAM,QAAQ,GAAA;AACpB,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE;QACzD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7D,QAAA,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE;AAExC,QAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;;AAGnB,IAAA,MAAM,wBAAwB,GAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC/B,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,oBAAoB,GACxB,MAAM,IAAI,CAAC,2BAA2B;AAExC,QAAA,IAAI;YACF,OAAO,IAAI,oBAAoB,CAAC;AAC9B,gBAAA,GAAG,EAAE;AACH,oBAAA,GAAG,EAAE,oCAAoC;AACzC,oBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACjC,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA;AACD,gBAAA,KAAK,EAAE;AACL,oBAAA,GAAG,EAAE,CAAC;AACN,oBAAA,OAAO,EAAE,GAAG;AACb,iBAAA;AACF,aAAA,CAAC;;QACF,OAAO,KAAc,EAAE;AACvB,YAAA,OAAO,IAAI;;;+GAnEJ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA5B,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA,CAAA;;4FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCsBY,aAAa,CAAA;IACxB,WAEmB,CAAA,cAAoC,EAEpC,eAAsC,EACtC,eAAgC,EAChC,wBAAkD,EAClD,aAA4B,EAC5B,+BAAgE,EAChE,wBAAkD,EAClD,6BAA4D,EAC5D,sBAA8C,EAC9C,iBAAoC,EACpC,wBAAkD,EAAA;QAXlD,IAAc,CAAA,cAAA,GAAd,cAAc;QAEd,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACxB,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAA+B,CAAA,+BAAA,GAA/B,+BAA+B;QAC/B,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACxB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;;;;;;AAQpC,IAAA,OAAO,CACZ,MAAe,EACf,IAAsB,EACtB,MAA4B,EAAA;QAE5B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,aAAa,EACpC,uBAAuB,CAAC,MAAM,EAC9B,EAAE,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,CAClC;QAED,QACE,IAAI,CAAC;AACF,aAAA,OAAO;;AAEP,aAAA,IAAI,CAAC,CAAC,OAAO,KAAI;YAChB,MAAM,qBAAqB,GACzB,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,MAAM,CAAC;AAE9D,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;AACxC,gBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;gBACjC,MAAM;gBACN,IAAI;gBACJ,OAAO;AACP,gBAAA,GAAG,qBAAqB;AACzB,aAAA,CAAC;YAEF,MAAM,gBAAgB,GACpB,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAC7C,aAAa,CACd;YAEH,OAAO,IAAI,CAAC;iBACT,oBAAoB,CAAC,gBAAgB;AACrC,iBAAA,IAAI,CAAC,CAAC,WAAwB,KAAI;gBACjC,MAAM,QAAQ,GACZ,IAAI,CAAC,+BAA+B,CAAC,SAAS,CAAC,WAAW,CAAC;AAE7D,gBAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AAEjC,gBAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,oBAAA,MAAM,QAAQ,GAAG,CAAC,KAGjB,KAAU;AACT,wBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,gBAAgB,EACvC,uBAAuB,CAAC,MAAM,EAC9B,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,CACzD;AACH,qBAAC;AAED,oBAAA,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAGnC,gBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AACvC,aAAC;AACA,iBAAA,KAAK,CAAC,CAAC,KAAY,KAAI;AACtB,gBAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AAC9B,oBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,EAAE;oBAC9C,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpC,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;AAC1C,wBAAA,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM;wBACrC,OAAO,EAAE,KAAK,CAAC,OAAO;AACvB,qBAAA,CAAC,CACH;;AAEH,gBAAA,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;AACxC,aAAC,CAAC;SACL,CAAC;;AAIA,IAAA,eAAe,CAAC,WAAwB,EAAA;AAC9C,QAAA,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC;AACjD,YAAA,GAAG,WAAW;YACd,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CACvC,CAAC,GAAW,KAAa,WAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,CAC/D;AACF,SAAA,CAAC;;+GArGO,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAEd,yBAAyB,EAAA,EAAA,EAAA,KAAA,EAEzB,0BAA0B,EAAA,EAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA6B,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,+BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJzB,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAG7B,MAAM;2BAAC,yBAAyB;;0BAEhC,MAAM;2BAAC,0BAA0B;;;MChChB,eAAe,CAAA;AAKnC,IAAA,WAAA,GAAA;AAFiB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ;QAGhD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;;AAGvC,IAAA,IAAI,CAAC,IAAU,EAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE9B;;ACVD;AACM,MAAO,WAAY,SAAQ,iBAAiB,CAAA;IAIhD,WAAmB,CAAA,EACjB,KAAK,EACL,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,GAAG,UAAU,EAOd,EAAA;AACC,QAAA,KAAK,EAAE;QAfO,IAAe,CAAA,eAAA,GAAG,WAAW;AAiB3C,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AAEzB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC;AAErE,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;QAE9B,IAAI,CAAC,gBAAgB,CAAC;AACpB,YAAA,GAAG,YAAY;YACf,cAAc,EAAE,YAAY,CAAC,IAAI;YACjC,WAAW,EACT,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW;AAC1D,gBAAA,IAAI,CAAC,eAAe;AACvB,SAAA,CAAC;;AAGI,IAAA,eAAe,CACrB,YAAmB,EACnB,MAAe,EACf,IAAsB,EAAA;QAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAC3C,QAAA,OAAO,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CACnD,CAAC,SAAoC,EAAE,SAAiB,KAAI;YAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YACvC,MAAM,KAAK,GAAsB,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAEzD,YAAA,IAAI,WAAW,IAAI,KAAK,EAAE;gBACxB,SAAS,CAAC,SAAS,CAAC,GAAG,WAAW,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK;;AAG3D,YAAA,OAAO,SAAS;SACjB,EACD,EAAE,CACH;;AAGK,IAAA,YAAY,CAAC,MAAe,EAAA;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiB;AACpC,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACrD,QAAA,OAAO,GAAG;;AAEb;;ACxDM,MAAM,uBAAuB,GAClC,IAAI,cAAc,CAAqB,aAAa,CAAC;AAEhD,MAAM,0BAA0B,GAAkB;AACvD,IAAA,OAAO,EAAE,uBAAuB;AAChC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAA2B,KAAK,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC;CACvE;;MCXY,YAAY,CAAA;IAKvB,WAAmB,CAAA,YAAmB,EAAE,QAAqB,EAAA;QAJ7C,IAAK,CAAA,KAAA,GAA4B,IAAI;QAKnD,MAAM,UAAU,GAAG,QAAQ,EAAE,MAAM,EAAE,IAAI,CACvC,CAAC,KAAK,KAAK,KAAK,CAAC,YAAY,KAAK,YAAY,CAAC,IAAI,CACpD;QAED,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,KAAK,GAAG;AACX,gBAAA,UAAU,EAAE;oBACV,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,OAAO,EAAE,UAAU,CAAC,OAAO;AAC5B,iBAAA;aACF;;QAGH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAC1C,CAAC,GAAW,KAAY,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAC3C;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;;AAE7B;;ACpBM,MAAM,wBAAwB,GACnC,IAAI,cAAc,CAAsB,cAAc,CAAC;AAElD,MAAM,2BAA2B,GAAkB;AACxD,IAAA,OAAO,EAAE,wBAAwB;AACjC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAA4B,KAAK,IAAI,YAAY,CAAC,GAAG,IAAI,CAAC;CACzE;;AC0BK,MAAO,WAAY,SAAQ,eAA4B,CAAA;IAQ3D,WAEmB,CAAA,cAAkC,EAElC,eAAoC,EACpC,aAA4B,EAC5B,iBAAoC,EACpC,eAAgC,EAChC,+BAAgE,EAChE,wBAAkD,EAClD,uBAAgD,EAChD,6BAA4D,EAC5D,sBAA8C,EAC9C,cAA8B,EAC9B,wBAAkD,EAAA;AAEnE,QAAA,KAAK,EAAE;QAdU,IAAc,CAAA,cAAA,GAAd,cAAc;QAEd,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAA+B,CAAA,+BAAA,GAA/B,+BAA+B;QAC/B,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACxB,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACvB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QArBnC,IAAmB,CAAA,mBAAA,GAA4C,EAAE;AACjE,QAAA,IAAA,CAAA,IAAI,GAAqB,IAAI,gBAAgB,CAAC,EAAE,CAAC;QACjD,IAAoB,CAAA,oBAAA,GAAgC,IAAI;QACxD,IAAM,CAAA,MAAA,GAAY,EAAE;QACpB,IAAe,CAAA,eAAA,GAAoC,EAAE;AAC5C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAwB;;AAqB3E,IAAA,IAAW,qBAAqB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;;AAG1C,IAAA,KAAK,CACV,IAAsB,EACtB,MAAe,EACf,MAA4B,EAAA;QAE5B,IAAI,CAAC,KAAK,EAAE;AAEZ,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM;;IAG7B,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;IAG3B,MAAM,QAAQ,CACnB,KAAY,EACZ,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAA;QAErB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;;AAG9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACzC,QAAA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK;QAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAExD,MAAM,cAAc,GAAG,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,cAAc;QAE/D,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;;QAG9B,IAAI,cAAc,IAAI,KAAK,KAAK,cAAc,CAAC,KAAK,EAAE;AACpD,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;AAC9D,gBAAA,OAAO,QAAQ,EAAE,KAAK,IAAI,IAAI;AAChC,aAAC,CAAC;;AAGJ,QAAA,MAAM,gBAAgB,GAAG,YAErB;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAE1C,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC;AAExD,YAAA,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,QAAsB,KAAI;AACpD,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;oBAC7B,KAAK;oBACL,KAAK;oBACL,QAAQ;AACT,iBAAA,CAAC;AAEF,gBAAA,OAAO,QAAQ,CAAC,KAAK,IAAI,IAAI;AAC/B,aAAC,CAAC;AACJ,SAAC;AAED,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;AAC9B,oBAAA,IAAI,KAAK,KAAK,OAAO,EAAE,KAAK,EAAE;AAC5B,wBAAA,OAAO,OAAO,CAAC,IAAI,CAAC;;AAGtB,oBAAA,KAAK,gBAAgB,EAAE,CAAC,IAAI,CAC1B,CAAC,MAAwC,KACvC,OAAO,CAAC,MAA0B,CAAC,CACtC;iBACF,EAAE,KAAK,CAAC;gBAET,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;;iBAC3C;AACL,gBAAA,KAAK,gBAAgB,EAAE,CAAC,IAAI,CAC1B,CAAC,MAAwC,KACvC,OAAO,CAAC,MAA0B,CAAC,CACtC;;AAEL,SAAC,CAAC;;IAGG,MAAM,aAAa,CAAC,KAAY,EAAA;AACrC,QAAA,MAAM,OAAO,GAA2B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACjE,QAAA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK;QAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAClC,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CACjD;QAED,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGzB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAI;AAC/C,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvE,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC7B,KAAK;gBACL,KAAK;AACL,gBAAA,QAAQ,EAAE,YAAY;AACvB,aAAA,CAAC;AAEF,YAAA,OAAO,YAAY;AACrB,SAAC,CAAC;;AAGG,IAAA,WAAW,CAAC,SAAiB,EAAA;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;;AAGhE,IAAA,uBAAuB,CAAC,KAAY,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACzC,QAAA,OAAO,OAAO,EAAE,MAAM,IAAI,IAAI;;AAGzB,IAAA,MAAM,OAAO,CAClB,KAAY,EACZ,MAAgB,EAChB,IAAuB,EAAA;AAEvB,QAAA,MAAM,qBAAqB,GACzB,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CAClD,IAAI,CAAC,oBAAoB,CAC1B;AAEH,QAAA,MAAM,uBAAuB,GAMzB;AACF,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACjC,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM;AAC7B,YAAA,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI;AACvB,YAAA,GAAG,qBAAqB;SACzB;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,6BAA6B,KAAK,IAAI,EAAE;AAC/D,YAAA,uBAAuB,CAAC,uBAAuB,GAAG,IAAI,CAAC;iBACpD;kBACA,GAAA;AACD;;QAGJ,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC;QAElE,MAAM,gBAAgB,GACpB,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAC7C,aAAa,CACd;QAEH,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,WAAW,EAClC,uBAAuB,CAAC,MAAM,EAC9B,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAClC;QAED,OAAO,IAAI,CAAC;aACT,oBAAoB,CAAC,gBAAgB;AACrC,aAAA,IAAI,CAAC,CAAC,WAAwB,KAAI;YACjC,MAAM,QAAQ,GACZ,IAAI,CAAC,+BAA+B,CAAC,SAAS,CAAC,WAAW,CAAC;YAE7D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC;AAErE,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnB,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC9C,SAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAY,KAAI;AACtB,YAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AAC9B,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,EAAE;gBAC9C,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpC,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;AAC1C,oBAAA,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM;oBACrC,OAAO,EAAE,KAAK,CAAC,OAAO;AACvB,iBAAA,CAAC,CACH;;AAEH,YAAA,MAAM,KAAK;AACb,SAAC,CAAC;;AAGE,IAAA,YAAY,CAAC,KAAY,EAAA;QAC/B,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM;AAChD,QAAA,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAEnD,OAAO,aAAa,IAAI,cAAc;;AAGhC,IAAA,qBAAqB,CAAC,KAAY,EAAA;QACxC,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;;AAGrC,IAAA,qBAAqB,CAC3B,KAAY,EACZ,KAAc,EACd,MAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;;AAGlD,IAAA,cAAc,CAAC,QAAqB,EAAA;AAC1C,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,YAAA,MAAM,QAAQ,GAAG,CAAC,KAAwC,KAAU;AAClE,gBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,gBAAgB,EACvC,uBAAuB,CAAC,MAAM,EAC9B,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,CACzD;AACH,aAAC;AAED,YAAA,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAGnC,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;AAE1E,QAAA,IAAI,UAAU,EAAE,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpC,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,UAAU,CAAC,CACvD;;;IAIG,mBAAmB,CAAC,KAAY,EAAE,OAAe,EAAA;QACvD,MAAM,WAAW,GAAW,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;QAE5D,IAAI,WAAW,EAAE;YACf,YAAY,CAAC,WAAW,CAAC;;QAG3B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO;;+GA1QjC,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EASZ,uBAAuB,EAAA,EAAA,EAAA,KAAA,EAEvB,wBAAwB,EAAA,EAAA,EAAA,KAAA,EAAAhB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAgB,+BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAXvB,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAUI,MAAM;2BAAC,uBAAuB;;0BAE9B,MAAM;2BAAC,wBAAwB;;;ACpD9B,SAAU,QAAQ,CAAC,KAAc,EAAA;AACrC,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7E;;SCKgB,OAAO,CACrB,SAAsB,EACtB,OAAe,EACf,MAA8B,EAAA;IAE9B,OAAO,CAAC,OAAwB,KAAsC;AACpE,QAAA,MAAM,MAAM,GAA4B,SAAS,CAAC,OAAO,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QAExB,MAAM,aAAa,GAAW,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,QAAA,MAAM,UAAU,GAA6B,MAAM,CAAC,aAAa,CAAC;AAClE,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,EAAE;AAEpD,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO;AACvB,QAAA,KAAK,CAAC,MAAM,GAAG,MAAM;AAErB,QAAA,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK;AAE7B,QAAA,OAAO,MAAmC;AAC5C,KAAC;AACH;;ACtBA,MAAM,WAAW,GACf,0EAA0E;SAE5D,uBAAuB,GAAA;IACrC,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAC/B,iCAAiC,EACjC,qBAAqB,CACtB;IAED,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;AAC1D;;SCXgB,0BAA0B,GAAA;AACxC,IAAA,OAAO,OAAO,CACZ,UAAU,CAAC,QAAQ,EACnB,eAAe,CAAC,CAAC,CAAC,4BAA4B,EAAE,UAAU,CAAC,CAC5D;AACH;;MCGsB,SAAS,CAAA;AAC7B,IAAA,WAAA,CAAgC,WAAwB,EAAA;QAAxB,IAAW,CAAA,WAAA,GAAX,WAAW;;IAEpC,eAAe,CAAC,KAAY,EAAE,SAAqB,EAAA;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC;AAEzD,QAAA,IAAI,SAAS,EAAE,QAAQ,EAAE;AACvB,YAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;;AAGxB,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACf,YAAA,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK;;AAGnC,QAAA,OAAO,MAAM;;AAGR,IAAA,oBAAoB,CAAC,KAAY,EAAA;QACtC,OAAO,IAAI,kBAAkB,CAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EACpB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EACzB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAC/B;;;IAII,aAAa,CAAC,KAAY,EAAE,SAAqB,EAAA;QACtD,MAAM,UAAU,GAAkB,EAAE;AAEpC,QAAA,IAAI,KAAK,CAAC,WAAW,KAAA,GAAA,wBAAsB;AACzC,YAAA,UAAU,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;;AAG/C,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAEpD,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,gBAAA,MAAM,YAAY,GAAG,KAAK,CAAC;sBACvB,KAAK,CAAC;sBACN,kBAAkB;AACtB,gBAAA,UAAU,CAAC,IAAI,CACb,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE;oBACjD,cAAc,EAAE,KAAK,CAAC,oBAAoB;AAC3C,iBAAA,CAAC,CACH;;;AAIL,QAAA,OAAO,UAAU;;AAGZ,IAAA,kBAAkB,CACvB,KAAY,EAAA;AAEZ,QAAA,OAAO,YAAY,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;;IAG9C,0BAA0B,CAC/B,kBAA+B,EAC/B,KAAY,EAAA;AAEZ,QAAA,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE;AAEvC,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC;AAErC,QAAA,OAAO,MAAM;;AAGR,IAAA,QAAQ,CAAC,KAAY,EAAA;QAC1B,OAAO,KAAK,CAAC,KAAK;;IAQV,WAAW,GAAA;AACnB,QAAA,OAAO,MAAM;;IAGL,eAAe,GAAA;AACvB,QAAA,OAAO,KAAK;;IAGJ,mBAAmB,GAAA;AAC3B,QAAA,OAAO,KAAK;;AAGN,IAAA,sBAAsB,CAAC,KAAY,EAAA;QACzC,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC,UAAU;AAC3B,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;AAC5B,YAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,KAAoB,GAAA;YAC9C,WAAW,EAAE,KAAK,CAAC,OAAO;AAC1B,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;SACrC;;IAGK,iBAAiB,CACvB,MAAc,EACd,KAAY,EAAA;QAEZ,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAE9D,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,SAAiB,KAAI;AAC7D,YAAA,IAAI,EAAE,SAAS,IAAI,MAAM,CAAC,EAAE;gBACzB,MAAqC,CAAC,SAAS,CAAC,GAC/C,mBACD,CAAC,SAAS,CAAC;;AAEhB,SAAC,CAAC;;AAEL;;MC7HY,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;QAKS,IAAmB,CAAA,mBAAA,GAAoB,KAAK;;AACpD;;ACNK,MAAO,kBAAmB,SAAQ,aAAa,CAAA;AAArD,IAAA,WAAA,GAAA;;QACS,IAAW,CAAA,WAAA,GAAG,OAAO;QACrB,IAAQ,CAAA,QAAA,GAAG,OAAO;QAIlB,IAAI,CAAA,IAAA,GAAG,MAAM;;AAErB;;ACFK,MAAO,cAAe,SAAQ,SAAS,CAAA;AAC3C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGb,IAAA,aAAa,CAAC,KAAY,EAAA;AAC/B,QAAA,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC;;AAG7D,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,EAAE,KAAK,CAAC;AAEzE,QAAA,MAAM,CAAC,YAAY,GAAG,OAAO;AAC7B,QAAA,MAAM,CAAC,IAAI,GAAG,MAAM;AAEpB,QAAA,OAAO,MAAM;;IAGL,WAAW,GAAA;AACnB,QAAA,OAAO,OAAO;;+GAnBL,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAd,cAAc,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;ACNK,MAAO,iBAAkB,SAAQ,aAAa,CAAA;AAApD,IAAA,WAAA,GAAA;;QACS,IAAW,CAAA,WAAA,GAAG,MAAM;;AAQ5B;;ACNM,MAAM,wBAAwB,GAAG,CACtC,eAAwB,KACT;AACf,IAAA,OAAO,CAAC,EAAE,KAAK,EAAmB,KAA6B;QAC7D,OAAO,KAAK,KAAK;AACf,cAAE;AACF,cAAE;AACE,gBAAA,YAAY,EAAE;oBACZ,OAAO,EAAE,eAAe,CAAC,CAAC,CACxB,mCAAmC,EACnC,2BAA2B,CAC5B;oBACD,MAAM,EAAE,EAAE,eAAe,EAAE;AAC5B,iBAAA;aACF;AACP,KAAC;AACH,CAAC;;ACRK,MAAO,YAAa,SAAQ,SAAS,CAAA;AAKzC,IAAA,WAAA,CACE,WAAwB,EACP,cAA8B,EAC9B,cAA8B,EAAA;QAE/C,KAAK,CAAC,WAAW,CAAC;QAHD,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAc,CAAA,cAAA,GAAd,cAAc;QAPhB,IAAS,CAAA,SAAA,GAAG,CAAC;QACb,IAAS,CAAA,SAAA,GAAG,EAAE;QACd,IAAe,CAAA,eAAA,GAAG,CAAC;;AAUpC,IAAA,IAAY,WAAW,GAAA;QACrB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAEtE,QAAA,OAAO,CAAC,iBAAiB,IAAI,cAAc,MAAM,IAAI;;AAGvD,IAAA,IAAY,eAAe,GAAA;QACzB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAEtE,QAAA,OAAO,CAAC,iBAAiB,IAAI,cAAc,MAAM,IAAI;;AAGhD,IAAA,aAAa,CAAC,KAAY,EAAA;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS;AAC1E,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS;QAC1E,MAAM,UAAU,GAAkB;aAC/B,aAAa,CAAC,KAAK;AACnB,aAAA,MAAM,CAAC;YACN,OAAO,CACL,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EAC/B,eAAe,CAAC,CAAC,CACf,8BAA8B,EAC9B,kBAAkB,SAAS,CAAA,WAAA,CAAa,EACxC,EAAE,SAAS,EAAE,CACd,CACF;YAED,OAAO,CACL,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EAC/B,eAAe,CAAC,CAAC,CACf,8BAA8B,EAC9B,sBAAsB,SAAS,CAAA,WAAA,CAAa,EAC5C,EAAE,SAAS,EAAE,CACd,CACF;AACF,SAAA,CAAC;AAEJ,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,UAAU,CAAC,IAAI,CACb,OAAO,CACL,wBAAwB,CAAC,OAAO,CAAC,EACjC,eAAe,CAAC,CAAC,CACf,+BAA+B,EAC/B,wBAAwB,CACzB,CACF,CACF;;AAGH,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,UAAU,CAAC,IAAI,CACb,OAAO,CACL,UAAU,CAAC,OAAO,CAAC,qCAAqC,CAAC,EACzD,eAAe,CAAC,CAAC,CACf,sCAAsC,EACtC,2BAA2B,CAC5B,CACF,CACF;;AAGH,QAAA,OAAO,UAAU;;AAGT,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;AACxE,QAAA,MAAM,CAAC,IAAI,GAAG,UAAU;QACxB,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CACpC,2BAA2B,EAC3B,UAAU,CACX;AAED,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,CAAC,UAAU,GAAG;AAClB,gBAAA,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACxD,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,gBAAgB,EAAE,IAAI;AACtB,gBAAA,QAAQ,EAAE,IAAI;aACf;YACD,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CACpC,2BAA2B,EAC3B,UAAU,CACX;AACD,YAAA,MAAM,CAAC,SAAS,GAAG,SAAS;;aACvB;AACL,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;YACjC,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CACpC,kCAAkC,EAClC,aAAa,CACd;;AAGH,QAAA,OAAO,MAAM;;IAGL,eAAe,GAAA;AACvB,QAAA,OAAO,aAAa;;IAGZ,WAAW,GAAA;AACnB,QAAA,OAAO,MAAM;;+GAnHJ,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAtC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAuC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAZ,YAAY,EAAA,CAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;;ACZK,SAAU,iBAAiB,CAAC,KAAgC,EAAA;IAChE,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAC5C;;ACFM,SAAU,QAAQ,CAAC,KAAc,EAAA;AACrC,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ;AAClC;;ACIA;;;AAGG;AACI,MAAM,oBAAoB,GAAgB,CAAC,EAAE,KAAK,EAAE,KAAI;IAC7D,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAChD,QAAA,OAAO,IAAI;;AAGb,IAAA,MAAM,KAAK,GAAqB;AAC9B,QAAA,eAAe,EAAE;YACf,OAAO,EAAE,eAAe,CAAC,CAAC,CACxB,8BAA8B,EAC9B,2BAA2B,CAC5B;AACF,SAAA;KACF;AAED,IAAA,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;;AAE3B,QAAA,OAAO,KAAK;;IAGd,IAAI,SAAS,GAAG,CAAC;IACjB,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,MAAM,GAAG,KAAK;IAElB,MAAM,OAAO,GAAG,EAAE;IAClB,MAAM,UAAU,GAAG,EAAE;IACrB,MAAM,SAAS,GAAG,CAAC;IACnB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;;;AAIvC,IAAA,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACjC,QAAA,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;QAElC,IAAI,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE;YACtC,KAAK,IAAI,SAAS;;QAGpB,SAAS,IAAI,KAAK;QAClB,MAAM,GAAG,CAAC,MAAM;;AAGlB,IAAA,OAAO,SAAS,GAAG,OAAO,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK;AACjD,CAAC;;ACjDK,MAAO,gBAAiB,SAAQ,aAAa,CAAA;AAAnD,IAAA,WAAA,GAAA;;QACS,IAAW,CAAA,WAAA,GAAG,aAAa;QAG3B,IAAkB,CAAA,kBAAA,GAAsB,EAAE;QAE1C,IAAW,CAAA,WAAA,GAAG,EAAE;;AACxB;;MCHY,4BAA4B,CAAA;AACvC,IAAA,WAAA,CAAoC,aAAgC,EAAA;QAAhC,IAAa,CAAA,aAAA,GAAb,aAAa;AAE1C,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,KAElB,KAAsC;AACrC,YAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC5D,gBAAA,OAAO,IAAI;;AAGb,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;AACjC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;AAChE,YAAA,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC;YAExE,IAAI,MAAM,IAAI,SAAS;AAAE,gBAAA,OAAO,IAAI;YAEpC,OAAO;AACL,gBAAA,eAAe,EAAE;AACf,oBAAA,OAAO,EAAE,eAAe,CAAC,CAAC,CACxB,8BAA8B,EAC9B,CAAsB,mBAAA,EAAA,SAAS,CAAa,WAAA,CAAA,EAC5C,EAAE,SAAS,EAAE,CACd;AACD,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,MAAM,EAAE;wBACN,SAAS;AACV,qBAAA;AACF,iBAAA;aACF;AACH,SAAC;;+GA7BU,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAzB,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA5B,4BAA4B,EAAA,CAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;MCCY,4BAA4B,CAAA;AACvC,IAAA,WAAA,CAAoC,aAAgC,EAAA;QAAhC,IAAa,CAAA,aAAA,GAAb,aAAa;AAE1C,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,KAElB,KAAsC;AACrC,YAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC5D,gBAAA,OAAO,IAAI;;AAGb,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;AACjC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;AAChE,YAAA,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC;YAExE,IAAI,MAAM,IAAI,SAAS;AAAE,gBAAA,OAAO,IAAI;YAEpC,OAAO;AACL,gBAAA,eAAe,EAAE;AACf,oBAAA,OAAO,EAAE,eAAe,CAAC,CAAC,CACxB,8BAA8B,EAC9B,CAAkB,eAAA,EAAA,SAAS,CAAa,WAAA,CAAA,EACxC,EAAE,SAAS,EAAE,CACd;AACD,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,MAAM,EAAE;wBACN,SAAS;AACV,qBAAA;AACF,iBAAA;aACF;AACH,SAAC;;+GA7BU,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA5B,4BAA4B,EAAA,CAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;ACMK,MAAO,mBAAoB,SAAQ,SAAS,CAAA;AAChD,IAAA,WAAA,CACE,WAAwB,EACP,kBAAgD,EAChD,kBAAgD,EAAA;QAEjE,KAAK,CAAC,WAAW,CAAC;QAHD,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;;AAK9B,IAAA,aAAa,CAAC,KAAY,EAAA;AAC/B,QAAA,OAAO;aACJ,aAAa,CAAC,KAAK;AACnB,aAAA,MAAM,CAAC;YACN,oBAAoB;YACpB,IAAI,CAAC,kBAAkB,CAAC,QAAQ;YAChC,IAAI,CAAC,kBAAkB,CAAC,QAAQ;AACjC,SAAA,CAAC;;IAGI,mBAAmB,CAC3B,KAAY,EACZ,SAAoB,EAAA;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAEvE,QAAA,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK;AAEjC,QAAA,MAAM,CAAC,kBAAkB;AACtB,YAAA,SAAS,EAAE,kBAAwC,IAAI,EAAE;AAE5D,QAAA,MAAM,CAAC,cAAc,GAAG,SAAS,EAAE,cAAiC;AAEpE,QAAA,MAAM,CAAC,WAAW,GAAG,SAAS,EAAE,WAAqB;QACrD,MAAM,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,IAAI,KAAK;AAE9C,QAAA,OAAO,MAAM;;IAGL,eAAe,GAAA;AACvB,QAAA,OAAO,WAAW;;IAGV,WAAW,GAAA;AACnB,QAAA,OAAO,MAAM;;+GA3CJ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAwB,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,4BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;ACLM,MAAMC,WAAS,GAAG,EAAE;AACpB,MAAMC,aAAW,GAAG,CAAC,UAAkB,KAAY;IACxD,IAAI,QAAQ,GAAG,CAAC;AAEhB,IAAA,MAAM,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,IAAI;AAC1D,IAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;IACxB,QAAQ,GAAG,IAAI,KAAK,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC;AAElE,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED,MAAMC,gBAAc,GAAG,CACrB,OAAe,EACf,MAA6B,MAE5B;AACC,IAAA,mBAAmB,EAAE;QACnB,OAAO;QACP,MAAM;AACP,KAAA;AACF,CAAA,CAAqB;AAElB,SAAU,kBAAkB,CAAC,SAAqB,EAAA;IACtD,OAAO,CAAC,OAAwB,KAA6B;AAC3D,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO;QAEzB,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;QAE1C,MAAM,QAAQ,GAAGD,aAAW,CAAE,SAAS,EAAE,aAAwB,IAAI,IAAI,CAAC;AAE1E,QAAA,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC;QAC5C,MAAM,iBAAiB,GAAG,CAAC;AAE3B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;AACtC,YAAA,OAAOC,gBAAc,CACnB,eAAe,CAAC,CAAC,CACf,qCAAqC,EACrC,CAAA,MAAA,EAAS,iBAAiB,CAAA,WAAA,CAAa,EACvC,EAAE,cAAc,EAAE,iBAAiB,EAAE,CACtC,EACD;AACE,gBAAA,cAAc,EAAE,iBAAiB;AAClC,aAAA,CACF;;QAGH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,OAAOA,gBAAc,CACnB,eAAe,CAAC,CAAC,CACf,4CAA4C,EAC5C,gCAAgC,CACjC,EACD,EAAE,CACH;;AAGH,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,EAAE;AAC5B,YAAA,OAAOA,gBAAc,CACnB,eAAe,CAAC,CAAC,CACf,wCAAwC,EACxC,CAA8C,2CAAA,EAAA,QAAQ,EAAE,EACxD,EAAE,QAAQ,EAAE,CACb,EACD;gBACE,QAAQ;AACT,aAAA,CACF;;AAGH,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAGF,WAAS,EAAE;AAC7B,YAAA,OAAOE,gBAAc,CACnB,eAAe,CAAC,CAAC,CACf,wCAAwC,EACxC,CAAA,4CAAA,EAA+CF,WAAS,CAAA,CAAE,EAC1D,EAAE,QAAQ,EAAEA,WAAS,EAAE,CACxB,EACD;AACE,gBAAA,QAAQ,EAAEA,WAAS;AACpB,aAAA,CACF;;AAGH,QAAA,OAAO,IAAI;AACb,KAAC;AACH;;AChFM,MAAO,kBAAmB,SAAQ,SAAS,CAAA;AAC/C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;IAGb,aAAa,CAAC,KAAY,EAAE,SAAoB,EAAA;AACrD,QAAA,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;;IAGjE,mBAAmB,CAC3B,KAAY,EACZ,SAAoB,EAAA;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAExE,MAAM,CAAC,UAAU,GAAG;AAClB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,KAAK;SACb;AACD,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS;QAE5B,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CACpC,kCAAkC,EAClC,IAAI,CACL;QAED,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,4BAA4B,EAAE,IAAI,CAAC;QAEpE,MAAM,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,IAAI,KAAK;AAE9C,QAAA,OAAO,MAAM;;IAGL,eAAe,GAAA;AACvB,QAAA,OAAO,cAAc;;IAGb,WAAW,GAAA;AACnB,QAAA,OAAO,MAAM;;+GAtCJ,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;ACIK,MAAO,YAAa,SAAQ,SAAS,CAAA;AAIzC,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;QAHZ,IAAc,CAAA,cAAA,GAAG,CAAC;;IAMnB,aAAa,CAAC,KAAY,EAAE,SAAwB,EAAA;QACzD,MAAM,UAAU,GAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AAC5D,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,cAAc,GAAG,IAAI;QAClE,MAAM,mBAAmB,GAAG,CAAC,OAAe,KAC1C,OAAO,CACL,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAC3B,eAAe,CAAC,CAAC,CACf,+BAA+B,EAC/B,uBAAuB,CACxB,EACD,EAAE,CACH;QAEH,QAAQ,cAAc;AACpB,YAAA,KAAK,eAAe,CAAC,gBAAgB,EAAE;AACrC,gBAAA,IAAI,CAAC,cAAc,GAAG,CAAC;gBACvB,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBAC/C;;AAEF,YAAA,KAAK,eAAe,CAAC,OAAO,EAAE;AAC5B,gBAAA,IAAI,CAAC,cAAc,GAAG,CAAC;gBACvB,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;gBACtD;;YAEF,SAAS;AACP,gBAAA,IAAI,CAAC,cAAc,GAAG,CAAC;gBACvB,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;;;AAInD,QAAA,OAAO,UAAU;;IAGT,mBAAmB,CAC3B,KAAY,EACZ,SAAoB,EAAA;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAExE,MAAM,CAAC,UAAU,GAAG;AAClB,YAAA,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACvD,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,KAAK,EAAE,KAAK;SACb;QAED,MAAM,CAAC,OAAO,GAAG;YACf,IAAI,EAAE,eAAe,CAAC,CAAC,CACrB,4BAA4B,EAC5B,4BAA4B,CAC7B;AACD,YAAA,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,UAAU,CAAC,GAAG;AAC3B,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,eAAe,EAAE,kBAAkB;SACpC;QAED,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CACpC,2BAA2B,EAC3B,WAAW,CACZ;AAED,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS;AAC5B,QAAA,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACvD,MAAM,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,IAAI,KAAK;AAE9C,QAAA,OAAO,MAAM;;IAGL,eAAe,GAAA;AACvB,QAAA,OAAO,QAAQ;;IAGP,WAAW,GAAA;AACnB,QAAA,OAAO,MAAM;;IAGL,mBAAmB,GAAA;AAC3B,QAAA,OAAO,IAAI;;+GArFF,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAZ,YAAY,EAAA,CAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;;ACTM,MAAM,kBAAkB,GAAgB,CAAC,EAAE,KAAK,EAAE,KAAI;IAC3D,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACzD,QAAA,OAAO,IAAI;;AAGb,IAAA,MAAM,KAAK,GAAqB;AAC9B,QAAA,gBAAgB,EAAE;YAChB,OAAO,EAAE,eAAe,CAAC,CAAC,CACxB,6BAA6B,EAC7B,0BAA0B,CAC3B;AACD,YAAA,MAAM,EAAE,EAAE;AACX,SAAA;KACF;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC;IACxB,MAAM,QAAQ,GAAG,CAAC;IAClB,MAAM,UAAU,GAAG,CAAC;IACpB,MAAM,SAAS,GAAG,CAAC;IACnB,MAAM,SAAS,GAAG,EAAE;IACpB,MAAM,OAAO,GAAG,EAAE;IAClB,MAAM,MAAM,GAAG,EAAE;IACjB,MAAM,MAAM,GAAG,GAAG;AAElB,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,cAAc,EAAE;AACnC,QAAA,OAAO,IAAI;;AAGb,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE;AACpE,QAAA,OAAO,KAAK;;IAGd,MAAM,WAAW,GAAG,IAAI,IAAI,CAC1B,CAAC,OAAO,CAAC,SAAS,CAAC,EACnB,CAAC,OAAO,CAAC,UAAU,CAAC,EACpB,CAAC,OAAO,CAAC,QAAQ,CAAC,CACnB;AACD,IAAA,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE;AAE1B,IAAA,IACE,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,IAAI,MAAM;QAC3D,OAAO,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,MAAM,EAC1D;AACA,QAAA,OAAO,KAAK;;SACP;AACL,QAAA,OAAO,IAAI;;AAEf,CAAC;;ACzCK,MAAO,kBAAmB,SAAQ,SAAS,CAAA;AAC/C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGb,IAAA,aAAa,CAAC,KAAY,EAAA;AAC/B,QAAA,OAAO;aACJ,aAAa,CAAC,KAAK;AACnB,aAAA,MAAM,CAAC;AACN,YAAA,OAAO,CACL,UAAU,CAAC,OAAO,CAAC,oCAAoC,CAAC,EACxD,eAAe,CAAC,CAAC,CACf,yCAAyC,EACzC,0BAA0B,CAC3B,CACF;YACD,kBAAkB;AACnB,SAAA,CAAC;;AAGI,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAExE,MAAM,CAAC,UAAU,GAAG;AAClB,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,KAAK,EAAE,KAAK;SACb;QAED,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CACpC,kCAAkC,EAClC,YAAY,CACb;AAED,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS;AAE5B,QAAA,OAAO,MAAM;;+GApCJ,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;ACHK,MAAO,uBAAwB,SAAQ,SAAS,CAAA;AACpD,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGV,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,OAAO,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;;IAGxD,eAAe,GAAA;AACvB,QAAA,OAAO,SAAS;;IAGR,WAAW,GAAA;AACnB,QAAA,OAAO,MAAM;;+GAdJ,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACNM,MAAM,YAAY,GACvB,yJAAyJ,CAAC;;ACUtJ,MAAO,gBAAiB,SAAQ,SAAS,CAAA;AAC7C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGb,IAAA,aAAa,CAAC,KAAY,EAAA;AAC/B,QAAA,OAAO;aACJ,aAAa,CAAC,KAAK;AACnB,aAAA,MAAM,CAAC;AACN,YAAA,OAAO,CACL,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,EAChC,eAAe,CAAC,CAAC,CACf,uCAAuC,EACvC,oBAAoB,CACrB,EACD,EAAE,CACH;AACF,SAAA,CAAC;;AAGI,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAExE,MAAM,CAAC,OAAO,GAAG;YACf,IAAI,EAAE,eAAe,CAAC,CAAC,CACrB,iCAAiC,EACjC,yBAAyB,CAC1B;AACD,YAAA,KAAK,EAAE,UAAU;SAClB;AAED,QAAA,OAAO,MAAM;;+GA/BJ,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAhB,gBAAgB,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;ACJD,MAAM,SAAS,GAAG,EAAE;AACpB,MAAM,uBAAuB,GAAG,CAAC;AACjC,MAAM,wBAAwB,GAAG,EAAE;AACnC,MAAM,aAAa,GAAG,EAAE;AACxB,MAAM,mBAAmB,GAAG,WAAW;AACvC,MAAM,sBAAsB,GAAG,YAAY;AAC3C,MAAM,aAAa,GAAG,EAAE;AACxB;;;AAGG;AACI,MAAM,mBAAmB,GAAgB,CAAC,EAAE,KAAK,EAAE,KAAI;IAC5D,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAChD,QAAA,OAAO,IAAI;;AAGb,IAAA,MAAM,KAAK,GAAqB;AAC9B,QAAA,eAAe,EAAE;YACf,OAAO,EAAE,eAAe,CAAC,CAAC,CACxB,yCAAyC,EACzC,0BAA0B,CAC3B;AACF,SAAA;KACF;AAED,IAAA,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;;AAEtC,QAAA,OAAO,KAAK;;;IAId,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;;AAGpC,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE;AAC5B,QAAA,OAAO,KAAK;;;AAId,IAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACjC,QAAA,OAAO,KAAK;;AAGd,IAAA,SAAS,mBAAmB,CAC1B,SAAiB,EACjB,kBAA0B,EAAA;QAE1B,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC;;QAErE,MAAM,UAAU,GAAG,CAAC,GAAG,GAAG,aAAa,IAAI,aAAa;QACxD,OAAO,UAAU,IAAI,aAAa,GAAG,CAAC,GAAG,UAAU;;;IAIrD,KAAK,MAAM,QAAQ,IAAI,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,EAAE;QAC1E,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC;AACrD,QAAA,IAAI,UAAU,KAAK,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;AACjD,YAAA,OAAO,KAAK;;;AAIhB,IAAA,OAAO,IAAI;AACb,CAAC;;AC5DK,MAAO,kBAAmB,SAAQ,SAAS,CAAA;AAC/C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGb,IAAA,aAAa,CAAC,KAAY,EAAA;AAC/B,QAAA,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;;AAGvD,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAExE,MAAM,CAAC,UAAU,GAAG;AAClB,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,KAAK,EAAE,KAAK;SACb;AAED,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS;QAE5B,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CACpC,kCAAkC,EAClC,gBAAgB,CACjB;QAED,MAAM,CAAC,OAAO,GAAG;YACf,IAAI,EAAE,eAAe,CAAC,CAAC,CACrB,mCAAmC,EACnC,wCAAwC,CACzC;AACD,YAAA,KAAK,EAAE,YAAY;SACpB;AAED,QAAA,OAAO,MAAM;;+GAjCJ,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;ACGK,MAAO,qBAAsB,SAAQ,SAAS,CAAA;AAClD,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;IAGb,aAAa,CAClB,KAAY,EACZ,SAAiC,EAAA;QAEjC,MAAM,UAAU,GAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AAE5D,QAAA,IAAI,SAAS,EAAE,OAAO,KAAK,IAAI,EAAE;YAC/B,UAAU,CAAC,IAAI,CACb,OAAO,CACL,wBAAwB,CAAC,GAAG,CAAC,EAC7B,eAAe,CAAC,CAAC,CACf,mCAAmC,EACnC,+BAA+B,CAChC,EACD,EAAE,CACH,CACF;;AAGH,QAAA,OAAO,UAAU;;AAGT,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,OAAO,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;;+GA5BvD,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACJK,MAAO,aAAc,SAAQ,SAAS,CAAA;AAC1C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGV,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,OAAO,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;;+GANvD,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAb,aAAa,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;ACHK,MAAO,qBAAsB,SAAQ,aAAa,CAAA;AAAxD,IAAA,WAAA,GAAA;;QACS,IAAW,CAAA,WAAA,GAAG,UAAU;;AAEhC;;ACMK,MAAO,iBAAkB,SAAQ,SAAS,CAAA;AAI9C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;AAJD,QAAA,IAAA,CAAA,YAAY,GAAmB,GAAA;AAC/B,QAAA,IAAA,CAAA,cAAc,GAAoB,GAAA;;AAM9C,IAAA,aAAa,CAAC,KAAY,EAAA;QAC/B,MAAM,UAAU,GAAkB,EAAE;QAEpC,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,YAAY,EAAE;AAC3C,YAAA,UAAU,CAAC,IAAI,CACb,OAAO,CACL,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,EAC7C,KAAK,CAAC,oBAAoB;gBACxB,eAAe,CAAC,CAAC,CACf,wCAAwC,EACxC,UAAU,CACX,CACJ,CACF;;AAGH,QAAA,OAAO,UAAU;;AAGT,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAC5C,qBAAqB,EACrB,KAAK,CACN;AAED,QAAA,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK;AACjC,QAAA,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,KAAmB;AAE5C,QAAA,OAAO,MAAM;;+GApCJ,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACNK,MAAO,mBAAoB,SAAQ,aAAa,CAAA;AAAtD,IAAA,WAAA,GAAA;;QACS,IAAW,CAAA,WAAA,GAAG,eAAe;;AAKrC;;ACHK,MAAO,eAAgB,SAAQ,SAAS,CAAA;AAC5C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGV,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,EAAE,KAAK,CAAC;AAC1E,QAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAyB;AAChD,QAAA,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;AAE9B,QAAA,OAAO,MAAM;;+GAVJ,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACAK,MAAO,YAAa,SAAQ,SAAS,CAAA;AACzC,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGV,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,OAAO,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;;+GANvD,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAZ,YAAY,EAAA,CAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;;ACHK,MAAO,kBAAmB,SAAQ,aAAa,CAAA;AAArD,IAAA,WAAA,GAAA;;QACS,IAAW,CAAA,WAAA,GAAG,OAAO;QACrB,IAAO,CAAA,OAAA,GAAkB,EAAE;;AACnC;;ACEK,MAAO,mBAAoB,SAAQ,SAAS,CAAA;AAChD,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGV,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,EAAE,KAAK,CAAC;AAEzE,QAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAwB;AAC/C,QAAA,OAAO,MAAM;;+GATJ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;ACCK,MAAO,mBAAoB,SAAQ,SAAS,CAAA;AAIhD,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;QAHH,IAAc,CAAA,cAAA,GAAG,EAAE;;AAM7B,IAAA,aAAa,CAAC,KAAY,EAAA;AAC/B,QAAA,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;;AAGzB,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAExE,MAAM,CAAC,UAAU,GAAG;AAClB,YAAA,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACvD,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,KAAK,EAAE,KAAK;SACb;AAED,QAAA,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK;AAChC,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS;AAE5B,QAAA,OAAO,MAAM;;+GAxBJ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;ACJK,MAAO,mBAAoB,SAAQ,aAAa,CAAA;AAAtD,IAAA,WAAA,GAAA;;QACS,IAAW,CAAA,WAAA,GAAG,QAAQ;;AAI9B;;ACHK,SAAU,eAAe,CAAC,OAAgB,EAAA;IAC9C,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CACtC,kCAAkC,EAClC,0BAA0B,CAC3B;AACD,IAAA,OAAO,OAAO,CACZ,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,EACpC,OAAO,IAAI,cAAc,CAC1B;AACH;;ACJM,MAAO,eAAgB,SAAQ,SAAS,CAAA;AAC5C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;IAGb,aAAa,GAAA;AAClB,QAAA,OAAO,CAAC,eAAe,EAAE,CAAC;;AAGlB,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,EAAE,KAAK,CAAC;QAE1E,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CACpC,8BAA8B,EAC9B,kBAAkB,CACnB;AAED,QAAA,OAAO,MAAM;;+GAjBJ,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACJD,MAAMM,gBAAc,GAAG,CACrB,OAAe,EACf,MAA6B,MAE5B;AACC,IAAA,kBAAkB,EAAE;QAClB,OAAO;QACP,MAAM;AACP,KAAA;AACF,CAAA,CAAqB;AAEjB,MAAMC,yBAAuB,GAAG,CACrC,MAAc,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,KACvC;;IAEV,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAED;AACO,MAAMC,eAAa,GAAG,EAAE;AAEzB,SAAU,iBAAiB,CAC/B,OAAwB,EAAA;AAExB,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO;IAEzB,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,IAAI;IAE1C,MAAM,OAAO,GAAG,QAAQ,CAACD,yBAAuB,EAAE,EAAE,EAAE,CAAC;AAEvD,IAAA,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC;IAE5C,MAAM,iBAAiB,GAAG,CAAC;AAE3B,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;AACtC,QAAA,OAAOD,gBAAc,CACnB,eAAe,CAAC,CAAC,CACf,qCAAqC,EACrC,CAAA,MAAA,EAAS,iBAAiB,CAAA,WAAA,CAAa,EACvC,EAAE,cAAc,EAAE,iBAAiB,EAAE,CACtC,EACD;AACE,YAAA,cAAc,EAAE,iBAAiB;AAClC,SAAA,CACF;;IAGH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC/B,QAAA,OAAOA,gBAAc,CACnB,eAAe,CAAC,CAAC,CACf,2CAA2C,EAC3C,+BAA+B,CAChC,EACD,EAAE,CACH;;AAGH,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,EAAE;AAC3B,QAAA,OAAOA,gBAAc,CACnB,eAAe,CAAC,CAAC,CACf,uCAAuC,EACvC,CAA6C,0CAAA,EAAA,OAAO,EAAE,EACtD,EAAE,OAAO,EAAE,CACZ,EACD;YACE,OAAO;AACR,SAAA,CACF;;AAGH,IAAA,MAAM,YAAY,GAAG,OAAO,GAAGE,eAAa;AAE5C,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,EAAE;AAChC,QAAA,OAAOF,gBAAc,CACnB,eAAe,CAAC,CAAC,CACf,uCAAuC,EACvC,CAAA,2CAAA,EAA8C,YAAY,CAAA,CAAE,EAC5D,EAAE,OAAO,EAAE,YAAY,EAAE,CAC1B,EACD;AACE,YAAA,OAAO,EAAE,YAAY;AACtB,SAAA,CACF;;AAGH,IAAA,OAAO,IAAI;AACb;;AChFM,MAAO,iBAAkB,SAAQ,SAAS,CAAA;AAC9C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGb,IAAA,aAAa,CAAC,KAAY,EAAA;AAC/B,QAAA,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;;IAGrD,mBAAmB,CAC3B,KAAY,EACZ,SAAoB,EAAA;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAExE,MAAM,CAAC,UAAU,GAAG;AAClB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,KAAK;SACb;AACD,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS;QAE5B,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CACpC,iCAAiC,EACjC,IAAI,CACL;QAED,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,2BAA2B,EAAE,IAAI,CAAC;QAEnE,MAAM,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,IAAI,KAAK;AAE9C,QAAA,OAAO,MAAM;;IAGL,eAAe,GAAA;AACvB,QAAA,OAAO,aAAa;;IAGZ,WAAW,GAAA;AACnB,QAAA,OAAO,MAAM;;+GAtCJ,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;SCLe,cAAc,GAAA;AAC5B,IAAA,OAAO,OAAO,CACZ,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAC3B,eAAe,CAAC,CAAC,CAAC,iCAAiC,EAAE,qBAAqB,CAAC,CAC5E;AACH;;ACNM,SAAU,kBAAkB,CAAC,SAAiB,EAAA;IAClD,OAAO,OAAO,CACZ,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EAC/B,eAAe,CAAC,CAAC,CACf,8BAA8B,EAC9B,CAAA,eAAA,EAAkB,SAAS,CAAA,WAAA,CAAa,EACxC,EAAE,SAAS,EAAE,CACd,EACD;QACE,SAAS;AACV,KAAA,CACF;AACH;;ACXM,SAAU,kBAAkB,CAAC,SAAiB,EAAA;IAClD,OAAO,OAAO,CACZ,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EAC/B,eAAe,CAAC,CAAC,CACf,8BAA8B,EAC9B,CAAA,mBAAA,EAAsB,SAAS,CAAA,WAAA,CAAa,EAC5C,EAAE,SAAS,EAAE,CACd,EACD;QACE,SAAS;AACV,KAAA,CACF;AACH;;ACfM,MAAO,kBAAmB,SAAQ,aAAa,CAAA;AAArD,IAAA,WAAA,GAAA;;QACS,IAAW,CAAA,WAAA,GAAG,OAAO;;AAG7B;;ACOK,MAAO,cAAe,SAAQ,SAAS,CAAA;AAC3C,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGb,IAAA,aAAa,CAAC,KAAY,EAAA;QAC/B,IAAI,KAAK,CAAC,WAAW,KAAqB,GAAA;AAAE,YAAA,OAAO,EAAE;QAErD,MAAM,SAAS,GAAG,EAAE;QACpB,MAAM,SAAS,GAAG,EAAE;AAEpB,QAAA,OAAO;aACJ,aAAa,CAAC,KAAK;AACnB,aAAA,MAAM,CAAC;AACN,YAAA,0BAA0B,EAAE;AAC5B,YAAA,cAAc,EAAE;YAChB,kBAAkB,CAAC,SAAS,CAAC;YAC7B,kBAAkB,CAAC,SAAS,CAAC;AAC9B,SAAA,CAAC;;AAGI,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,EAAE,KAAK,CAAC;AACzE,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS;AAE5B,QAAA,OAAO,MAAM;;+GAzBJ,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAd,cAAc,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;ACNM,MAAM,WAAW,GAAG,CAAC,UAAkB,KAAY;IACxD,IAAI,QAAQ,GAAG,CAAC;IAEhB,IAAI,UAAU,EAAE;AACd,QAAA,MAAM,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,IAAI;AAC1D,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;QACxB,QAAQ,GAAG,IAAI,KAAK,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC;;AAGpE,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED,MAAM,cAAc,GAAG,CACrB,OAAe,EACf,MAA6B,MAE5B;AACC,IAAA,eAAe,EAAE;QACf,OAAO;QACP,MAAM;AACP,KAAA;AACF,CAAA,CAAqB;AAEjB,MAAM,uBAAuB,GAAG,CACrC,MAAc,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,KACvC;;IAEV,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAEM,MAAM,SAAS,GAAG,CAAC,KAAa,KAAqC;IAC1E,MAAM,UAAU,GAAG,CAAC;IAEpB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAW;IAClD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,CAAW;AAE/C,IAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;AACxB,CAAC;AAEM,MAAM,aAAa,GAAG,EAAE;AAEzB,SAAU,gBAAgB,CAC9B,OAAwB,EAAA;AAExB,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO;IAEzB,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,IAAI;IAE1C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;AAExC,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;IAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,uBAAuB,EAAE,EAAE,EAAE,CAAC;AAEvD,IAAA,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC;IAC5C,MAAM,iBAAiB,GAAG,CAAC;AAE3B,IAAA,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,CAAC;AAE/C,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;AACtC,QAAA,OAAO,cAAc,CACnB,eAAe,CAAC,CAAC,CACf,qCAAqC,EACrC,CAAA,MAAA,EAAS,iBAAiB,CAAA,WAAA,CAAa,EACvC,EAAE,cAAc,EAAE,iBAAiB,EAAE,CACtC,EACD;AACE,YAAA,cAAc,EAAE,iBAAiB;AAClC,SAAA,CACF;;IAGH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC/B,QAAA,OAAO,cAAc,CACnB,eAAe,CAAC,CAAC,CACf,4CAA4C,EAC5C,gCAAgC,CACjC,EACD,EAAE,CACH;;AAGH,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,EAAE;AAC5B,QAAA,OAAO,cAAc,CACnB,eAAe,CAAC,CAAC,CACf,wCAAwC,EACxC,CAA8C,2CAAA,EAAA,QAAQ,EAAE,EACxD,EAAE,QAAQ,EAAE,CACb,EACD;YACE,QAAQ;AACT,SAAA,CACF;;AAGH,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE;AAC7B,QAAA,OAAO,cAAc,CACnB,eAAe,CAAC,CAAC,CACf,wCAAwC,EACxC,CAAA,4CAAA,EAA+C,SAAS,CAAA,CAAE,EAC1D,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,EACD;AACE,YAAA,QAAQ,EAAE,SAAS;AACpB,SAAA,CACF;;IAGH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC9B,QAAA,OAAO,cAAc,CACnB,eAAe,CAAC,CAAC,CACf,2CAA2C,EAC3C,+BAA+B,CAChC,EACD,EAAE,CACH;;AAGH,IAAA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE;AAC1B,QAAA,OAAO,cAAc,CACnB,eAAe,CAAC,CAAC,CACf,uCAAuC,EACvC,CAA6C,0CAAA,EAAA,OAAO,EAAE,EACtD,EAAE,OAAO,EAAE,CACZ,EACD;YACE,OAAO;AACR,SAAA,CACF;;AAGH,IAAA,MAAM,YAAY,GAAG,OAAO,GAAG,aAAa;AAE5C,IAAA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,EAAE;AAC/B,QAAA,OAAO,cAAc,CACnB,eAAe,CAAC,CAAC,CACf,uCAAuC,EACvC,CAAA,2CAAA,EAA8C,YAAY,CAAA,CAAE,EAC5D,EAAE,OAAO,EAAE,YAAY,EAAE,CAC1B,EACD;AACE,YAAA,OAAO,EAAE,YAAY;AACtB,SAAA,CACF;;AAGH,IAAA,OAAO,IAAI;AACb;;AC9IO,MAAM,SAAS,GAAG,EAAE;AAGrB,MAAO,uBAAwB,SAAQ,SAAS,CAAA;AACpD,IAAA,WAAA,CAAmB,WAAwB,EAAA;QACzC,KAAK,CAAC,WAAW,CAAC;;AAGb,IAAA,aAAa,CAAC,KAAY,EAAA;AAC/B,QAAA,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;;IAGpD,mBAAmB,CAC3B,KAAY,EACZ,SAAoB,EAAA;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAExE,MAAM,CAAC,UAAU,GAAG;AAClB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,KAAK;SACb;AACD,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS;QAE5B,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CACpC,uCAAuC,EACvC,OAAO,CACR;QAED,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAC9B,iCAAiC,EACjC,OAAO,CACR;QAED,MAAM,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,IAAI,KAAK;AAE9C,QAAA,OAAO,MAAM;;IAGL,eAAe,GAAA;AACvB,QAAA,OAAO,QAAQ;;IAGP,WAAW,GAAA;AACnB,QAAA,OAAO,MAAM;;+GAzCJ,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACWM,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAClD,qBAAqB,CACtB;AAEM,MAAM,aAAa,GAAkB;AAC1C,IAAA,WAAW,EAAE,mBAAmB;AAChC,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,WAAW,EAAE,uBAAuB;AACpC,IAAA,GAAG,EAAE,YAAY;AACjB,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,GAAG,EAAE,YAAY;AACjB,IAAA,cAAc,EAAE,uBAAuB;AACvC,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,QAAQ,EAAE,gBAAgB;AAC1B,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,KAAK,EAAE,iBAAiB;AACxB,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,GAAG,EAAE,YAAY;AACjB,IAAA,UAAU,EAAE,mBAAmB;AAC/B,IAAA,KAAK,EAAE,cAAc;AACrB,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,aAAa,EAAE,qBAAqB;AACpC,IAAA,GAAG,EAAE,mBAAmB;AACxB,IAAA,GAAG,EAAE,mBAAmB;AACxB,IAAA,UAAU,EAAE,eAAe;AAC3B,IAAA,KAAK,EAAE,cAAc;CACtB;;MC3CY,oBAAoB,CAAA;IAC/B,WAEmB,CAAA,aAA4B,EAC5B,QAAkB,EAAA;QADlB,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAQ,CAAA,QAAA,GAAR,QAAQ;;AAGpB,IAAA,cAAc,CAAC,KAAY,EAAA;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAE1C,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,SAAS,CAAC,oBAAoB,CAAC,KAAK,CAAC;;AAGvC,IAAA,SAAS,CAAC,KAAY,EAAA;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAE1C,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC;;AAGlC,IAAA,YAAY,CAAC,KAAmB,EAAA;QACrC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QACtD,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QAEjD,IAAI,CAAC,SAAS,EAAE;YACd,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;;QAG5C,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,IAAI;;QAGb,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAY,SAAS,CAAC;;AA3CrC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kBAErB,kBAAkB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAFjB,oBAAoB,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;0BAGI,MAAM;2BAAC,kBAAkB;;;MCCjB,WAAW,CAAA;IAGtB,WACmB,CAAA,oBAA0C,EAC1C,6BAA4D,EAAA;QAD5D,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAJzC,IAAe,CAAA,eAAA,GAAoB,EAAE;;AAOrC,IAAA,UAAU,CAAC,MAAe,EAAA;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QACnD,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;AAE/D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACxC,YAAA,GAAG,aAAa;AAChB,YAAA,GAAG,mBAAmB;AACvB,SAAA,CAAC;QACF,MAAM,QAAQ,GAA2C,UAAU,CAAC,MAAM,CACxE,CAAC,MAA6C,EAAE,KAAY,KAAI;YAC9D,MAAM,WAAW,GACf,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,CAAC;YAEjD,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW;;AAGlC,YAAA,OAAO,MAAM;SACd,EACD,EAAE,CACH;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAE9B,QAAA,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC;;AAGhC,IAAA,iBAAiB,CAAC,SAAqB,EAAA;QAC5C,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,IAAI;;AAGzC,IAAA,oBAAoB,CACzB,IAAsB,EACtB,MAAe,EACf,SAAiB,EACjB,SAAoB,EAAA;AAEpB,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,SAAgB,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,CACnD;QAED,IAAI,CAAC,KAAK,EAAE;YACV;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,KAAK,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAExC,IAAI,CAAC,OAAO,EAAE;YACZ;;AAGF,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG;AAChC,YAAA,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AAClC,YAAA,GAAG,SAAS;SACb;AACD,QAAA,OAAO,CAAC,aAAa,CACnB,SAAS,EAAE,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CACvE;QACD,OAAO,CAAC,sBAAsB,EAAE;;AAG1B,IAAA,gBAAgB,CAAC,MAAe,EAAA;AACtC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,SAAS,KAAA,GAAA,uBAAqB;;AAGhE,IAAA,sBAAsB,CAAC,MAAe,EAAA;QAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,KAC5B,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAC9D,IAAkB,CACnB,CACF;;AAGK,IAAA,iBAAiB,CAAC,MAAe,EAAA;AACvC,QAAA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAiB;AAChD,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;;AAGrC,IAAA,aAAa,CAAC,MAAe,EAAA;AACnC,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,UAAU,EACjC,QAAQ,EACR,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAC7C;;+GA7FQ,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAS,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAnC,6BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAX,WAAW,EAAA,CAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB;;;ACXD,IAAY,iBAWX;AAXD,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,iBAAA,CAAA,KAAA,CAAA,GAAA,SAAe;AACf,IAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,aAAuB;AACvB,IAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,iBAAA,CAAA,aAAA,CAAA,GAAA,iBAA+B;AAC/B,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,YAAqB;AACrB,IAAA,iBAAA,CAAA,YAAA,CAAA,GAAA,gBAA6B;AAC7B,IAAA,iBAAA,CAAA,kBAAA,CAAA,GAAA,sBAAyC;AACzC,IAAA,iBAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC/C,CAAC,EAXW,iBAAiB,KAAjB,iBAAiB,GAW5B,EAAA,CAAA,CAAA;;ACTM,MAAM,0BAA0B,GAAG;AACxC,IAAA,iBAAiB,CAAC,KAAK;AACvB,IAAA,iBAAiB,CAAC,MAAM;AACxB,IAAA,iBAAiB,CAAC,SAAS;AAC3B,IAAA,iBAAiB,CAAC,GAAG;AACrB,IAAA,iBAAiB,CAAC,OAAO;CAC1B;;ACED,MAAM,eAAe,GAAyB,CAAC,KAAa,KAAa,KAAK;AAC9E,MAAM,eAAe,GAAyB,CAAC,KAAa,KAAY;AACtE,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,IAAA,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW;AAC7C,CAAC;AAEM,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAG1C;AACA,IAAA;AACE,QAAA,iBAAiB,CAAC,KAAK;AACvB,QAAA;AACE,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,iBAAiB,CAAC,SAAS;AAC3B,QAAA;AACE,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,iBAAiB,CAAC,MAAM;AACxB,QAAA;AACE,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,iBAAiB,CAAC,gBAAgB;AAClC,QAAA;AACE,YAAA,GAAG,EAAE,kBAAkB;AACvB,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,iBAAiB,CAAC,GAAG;AACrB,QAAA;AACE,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,iBAAiB,CAAC,OAAO;AACzB,QAAA;AACE,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,iBAAiB,CAAC,WAAW;AAC7B,QAAA;AACE,YAAA,GAAG,EAAE,aAAa;AAClB,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,iBAAiB,CAAC,MAAM;AACxB,QAAA;AACE,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,iBAAiB,CAAC,UAAU;AAC5B,QAAA;AACE,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,iBAAiB,CAAC,oBAAoB;AACtC,QAAA;AACE,YAAA,GAAG,EAAE,sBAAsB;AAC3B,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA;AACF,KAAA;AACF,CAAA,CAAC;;MCvFoB,UAAU,CAAA;AAAhC,IAAA,WAAA,GAAA;AAYmB,QAAA,IAAA,CAAA,QAAQ,GACvB,IAAI,eAAe,CAAkB,IAAI,CAAC;;AAZ5C,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC;AACT,aAAA,YAAY;AACZ,aAAA,IAAI,CACH,MAAM,CACJ,CAAC,QAAyB,KACxB,QAAQ,KAAK,IAAI,CACpB,CACF;;AAME,IAAA,YAAY,CAAC,QAAyB,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAG9B,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;AAMlC;;ACzBD;AACM,MAAO,aAAc,SAAQ,iBAAiB,CAAA;AAYlD,IAAA,WAAA,CAAmB,UAA+B,EAAA;AAChD,QAAA,KAAK,EAAE;QAXO,IAAe,CAAA,eAAA,GAAG,QAAQ;AAaxC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACrB,MAAM,IAAI,UAAU,EAAE;;AAGxB,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,KAAK;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,OAAO;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,SAAS;AACzC,QAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,WAAW;AACjD,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,UAAU;AAC/C,QAAA,IAAI,CAAC,wBAAwB,GAAG,UAAU,CAAC,gBAAgB;AAC3D,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM;;AAEtC;;ACvBM,MAAM,yBAAyB,GACpC,IAAI,cAAc,CAAuB,eAAe,CAAC;AAEpD,MAAM,4BAA4B,GAAkB;AACzD,IAAA,OAAO,EAAE,yBAAyB;AAClC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAA6B,KAAK,IAAI,aAAa,CAAC,GAAG,IAAI,CAAC;CAC3E;;ACRM,MAAM,0BAA0B,GACrC,IAAI,cAAc,CAAwB,gBAAgB,CAAC;AAEtD,MAAM,6BAA6B,GAAkB;AAC1D,IAAA,OAAO,EAAE,0BAA0B;AACnC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAwB,KAAK,IAAI,cAAc,CAAC,GAAG,IAAI,CAAC;CACvE;;ACOK,MAAO,oBAAqB,SAAQ,UAA0B,CAAA;AAGlE,IAAA,WAAA,CACmB,eAAgC,EAChC,eAAgC,EAEhC,cAAoC,EAEpC,eAAsC,EAAA;AAEvD,QAAA,KAAK,EAAE;QAPU,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAe,CAAA,eAAA,GAAf,eAAe;QAEf,IAAc,CAAA,cAAA,GAAd,cAAc;QAEd,IAAe,CAAA,eAAA,GAAf,eAAe;QARjB,IAAQ,CAAA,QAAA,GAAG,eAAe;;AAapC,IAAA,gBAAgB,CAAC,MAA2B,EAAA;QACjD,IAAI,CAAC,aAAa,GAAG;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B;;IAGI,OAAO,GAAA;AACZ,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;AACxC,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;YACjC,GAAG,IAAI,CAAC,aAAa;AACtB,SAAA,CAAC;AAEF,QAAA,aAAa,CACX,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,IAAI,CAAC,QAAQ,EACb,IAAI,eAAe,CACjB,aAAqD,CACtD,EACD;YACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,YAAA,YAAY,EAAE,MAAM;AACrB,SAAA,CACF;AAEA,aAAA,IAAI,CAAC,CAAC,QAAqB,KAAI;AAC9B,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC1C,MAAM,EAAE,QAAQ,CAAC,MAA0B;gBAC3C,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,cAAc,EAAE,QAAQ,CAAC,cAAc;AACxC,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;AACnC,SAAC;AACA,aAAA,KAAK,CAAC,CAAC,CAAgB,KAAI;YAC1B,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC;AAC5C,SAAC,CAAC;;+GA5DK,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlB,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,eAAA,EAAA,EAAA,EAAA,KAAA,EAMrB,yBAAyB,EAAA,EAAA,EAAA,KAAA,EAEzB,0BAA0B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AARzB,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAOI,MAAM;2BAAC,yBAAyB;;0BAEhC,MAAM;2BAAC,0BAA0B;;;SC5BtB,oBAAoB,CAClC,KAAsE,EACtE,SAAS,GAAG,IAAI,EAAA;IAEhB,OAAO;AACL,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC;AAC/C,QAAA,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,EAAE;KAChC;AACH;AAEgB,SAAA,sBAAsB,CACpC,MAAiC,EACjC,QAA4B,EAAA;IAE5B,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,QAAQ,KAAK;AAC7D,UAAE;YACE,MAAM;YACN,QAAQ;AACT;UACD,SAAS;AACf;;ACtBA;;;;AAIG;AACI,MAAM,oBAAoB,GAAG;IAClC,iGAAiG;IACjG,4BAA4B;CAC7B;;ACRD,IAAY,aAaX;AAbD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,uBAA6C;AAE7C,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,mBAAqC;AACrC,IAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,qBAAyC;AACzC,IAAA,aAAA,CAAA,0BAAA,CAAA,GAAA,6BAAwD;AAExD,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,qBAAyC;AAC3C,CAAC,EAbW,aAAa,KAAb,aAAa,GAaxB,EAAA,CAAA,CAAA;;ACbD,IAAY,kBAIX;AAJD,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,kBAAA,CAAA,iBAAA,CAAA,GAAA,mBAAqC;AACrC,IAAA,kBAAA,CAAA,mBAAA,CAAA,GAAA,qBAAyC;AAC3C,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,GAI7B,EAAA,CAAA,CAAA;;MCWY,mCAAmC,CAAA;AACvC,IAAA,iBAAiB,CAAC,OAAmB,EAAA;AAC1C,QAAA,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO;QACrC,OAAO;AACL,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC/C,YAAA,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzC,YAAA,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;SAChD;;AAGK,IAAA,6BAA6B,CAAC,OAA0B,EAAA;AAC9D,QAAA,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;;AAGxD,IAAA,YAAY,CAAC,OAA0B,EAAA;AAC7C,QAAA,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC;;IAGlE,YAAY,CAClB,QAAqB,EACrB,OAA0B,EAAA;QAE1B,MAAM,SAAS,GAA2B,QAAQ,CAAC,cAAc,EAAE,GAAG,CACpE,CAAC,IAAI,KAAI;YACP,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,SAAS;gBACtB,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClD,KAAK,EAAE,IAAI,CAAC,IAAI;AAChB,gBAAA,KAAK,EAAE,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;gBACxC,mBAAmB,EAAE,sBAAsB,CACzC,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,QAAQ,CACd;gBACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC;gBACxD,OAAO,EAAE,IAAI,CAAC,QAAQ;aACvB;AACH,SAAC,CACF;QAED,MAAM,iBAAiB,GACrB,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,IAAI,KAAI;YACtC,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,SAAS;gBACtB,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClD,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,IAAI,CAAE,CAAA;AACtC,gBAAA,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC;gBACjC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,OAAO,EAAE,IAAI,CAAC,QAAQ;aACvB;AACH,SAAC,CAAC;QAEJ,MAAM,YAAY,GAA2B,QAAQ,CAAC,aAAa,EAAE,GAAG,CACtE,CAAC,IAAI,KAAI;YACP,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,SAAS;gBACtB,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClD,KAAK,EAAE,IAAI,CAAC,IAAI;AAChB,gBAAA,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC;gBACjC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,QAAQ;aACvB;AACH,SAAC,CACF;QAED,IAAI,aAAa,GAA2B,SAAS;AACrD,QAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACrB,YAAA,aAAa,GAAG;AACd,gBAAA;AACE,oBAAA,GAAG,EAAE,UAAU;AACf,oBAAA,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW;AACpC,oBAAA,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC9C,oBAAA,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,KAAK;AAC7C,iBAAA;aACF;;QAGH,OAAO;AACL,YAAA,IAAI,SAAS,IAAI,EAAE,CAAC;AACpB,YAAA,IAAI,iBAAiB,IAAI,EAAE,CAAC;AAC5B,YAAA,IAAI,YAAY,IAAI,EAAE,CAAC;AACvB,YAAA,IAAI,aAAa,IAAI,EAAE,CAAC;SACzB;;AAGK,IAAA,cAAc,CAAC,OAA0B,EAAA;QAC/C,OAAO;AACL,YAAA,QAAQ,EAAE;AACR,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,sBAAsB,CAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,EAC1B,OAAO,EAAE,SAAS,EAAE,QAAQ,CAC7B;AACF,aAAA;AACD,YAAA,eAAe,EAAE;AACf,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,sBAAsB,CAC3B,OAAO,EAAE,SAAS,EAAE,cAAc,EAClC,OAAO,EAAE,SAAS,EAAE,gBAAgB,CACrC;AACF,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC;AAC5C,aAAA;AACD,YAAA,YAAY,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;AACnD,YAAA,eAAe,EAAE;AACf,gBAAA,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;AACnC,gBAAA,GAAG,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;AAC5C,aAAA;SACF;;AAGK,IAAA,iBAAiB,CAAC,OAA0B,EAAA;AAClD,QAAA,OAAO,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,EAAE;;IAGpC,aAAa,CACnB,OAA0B,EAC1B,eAAwB,EAAA;AAExB,QAAA,IACE,eAAe;AACf,aAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,IAAI,eAAe,KAAK,CAAC,CAAC,EACtE;AACA,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;gBAC9B,OAAO;oBACL,GAAG,EAAE,kBAAkB,CAAC,eAAe;oBACvC,OAAO,EAAE,CAAa,UAAA,EAAA,eAAe,CAAG,CAAA,CAAA;AACxC,oBAAA,IAAI,EAAE,eAAe;iBACtB;;AAGH,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,OAAO;oBACL,GAAG,EAAE,aAAa,CAAC,eAAe;oBAClC,OAAO,EAAE,CAAO,IAAA,EAAA,eAAe,CAAG,CAAA,CAAA;AAClC,oBAAA,IAAI,EAAE,eAAe;iBACtB;;AAGH,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,OAAO;oBACL,GAAG,EAAE,aAAa,CAAC,QAAQ;AAC3B,oBAAA,OAAO,EAAE,4CAA4C;AACrD,oBAAA,IAAI,EAAE,eAAe;iBACtB;;YAGH,OAAO;gBACL,GAAG,EAAE,aAAa,CAAC,UAAU;gBAC7B,OAAO,EAAE,CAAO,IAAA,EAAA,eAAe,CAAG,CAAA,CAAA;AAClC,gBAAA,IAAI,EAAE,eAAe;aACtB;;AAEH,QAAA,OAAO,IAAI;;AAGL,IAAA,kBAAkB,CAAC,OAA0B,EAAA;QACnD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE;;;AAIX,QAAA,MAAM,sBAAsB,GAAG;AAC7B,YAAA;AACE,gBAAA,GAAG,EAAE,UAAU;AACf,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,KAAK,EAAE,UAAU;AAClB,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,KAAK;AACV,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,KAAK,EAAE,oBAAoB;AAC5B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,cAAc;AACnB,gBAAA,WAAW,EAAE,cAAc;AAC3B,gBAAA,KAAK,EAAE,SAAS;AACjB,aAAA;SACF;AAED,QAAA,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;YAC5C,MAAM,KAAK,GAAI,OAAiD,CAC9D,OAAO,CAAC,WAAW,CACX;YAEV,IAAI,KAAK,EAAE;gBACT,OAAO;oBACL,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,oBAAA,KAAK,EAAE;wBACL,MAAM,EACJ,OAAO,CAAC,GAAG,KAAK,UAAU,IAAI,KAAK,CAAC;AAClC,8BAAE,CAAC,KAAK,CAAC;8BACP,KAAK,CAAC,MAAM;wBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACzB,qBAAA;iBACF;;AAEH,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;;AAGI,IAAA,0BAA0B,CAAC,OAA0B,EAAA;QAC3D,MAAM,GAAG,GAAG,EAAE;;QAGd,IACE,OAAO,EAAE,QAAQ;AACjB,aAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EACzD;YACA,GAAG,CAAC,IAAI,CAAC;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC;AAClD,gBAAA,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC/C,aAAA,CAAC;;AAGJ,QAAA,IAAI,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE;YACnC,GAAG,CAAC,IAAI,CAAC;gBACP,GAAG,EAAE,kBAAkB,CAAC,QAAQ;AAChC,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC;AACrD,aAAA,CAAC;;AAGJ,QAAA,OAAO,GAAG;;AAGJ,IAAA,6BAA6B,CAAC,OAA0B,EAAA;AAC9D,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,CAAA,IAAA,EAAO,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAA,CAAA,CAAG;;AAGnD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzB,YAAA,OAAO,4CAA4C;;QAGrD,OAAO,CAAA,IAAA,EAAO,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAA,CAAA,CAAG;;AAG3C,IAAA,uBAAuB,CAAC,OAA0B,EAAA;QACxD,MAAM,GAAG,GAAG,EAAE;;AAGd,QAAA,IACE,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,OAAO,EAAE,GAAG,EAAE,OAAO;AAC9C,YAAA,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAC1B;YACA,GAAG,CAAC,IAAI,CAAC;AACP,gBAAA,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC;AAC/C,gBAAA,KAAK,EAAE,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;AAC/C,gBAAA,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC;AAC1C,aAAA,CAAC;;AAGJ,QAAA,IAAI,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE;YAClE,GAAG,CAAC,IAAI,CAAC;gBACP,GAAG,EAAE,kBAAkB,CAAC,iBAAiB;AACzC,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC;AAChD,aAAA,CAAC;;AAGJ,QAAA,OAAO,GAAG;;AAGJ,IAAA,+BAA+B,CAAC,OAA0B,EAAA;AAChE,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,aAAa,CAAC,eAAe;;AAGtC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,aAAa,CAAC,QAAQ;;QAG/B,OAAO,aAAa,CAAC,UAAU;;AAGzB,IAAA,4BAA4B,CAAC,OAA0B,EAAA;AAC7D,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,aAAa,CAAC,wBAAwB;;AAG/C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,aAAa,CAAC,iBAAiB;;QAGxC,OAAO,aAAa,CAAC,mBAAmB;;AAGlC,IAAA,0BAA0B,CAAC,OAA0B,EAAA;AAC3D,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,CAAA,UAAA,EAAa,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAA,KAAA,CAAO;;AAGvD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzB,YAAA,OAAO,sDAAsD;;QAG/D,OAAO,CAAA,UAAA,EAAa,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAA,KAAA,CAAO;;AAG/C,IAAA,OAAO,CAAC,OAA0B,EAAA;AACxC,QAAA,OAAO,OAAO,EAAE,eAAe,CAAC,GAAG,KAAK,IAAI;;AAGtC,IAAA,OAAO,CAAC,OAA0B,EAAA;AACxC,QAAA,OAAO,OAAO,EAAE,eAAe,CAAC,GAAG,KAAK,IAAI;;AAGtC,IAAA,cAAc,CAAC,GAAW,EAAA;AAChC,QAAA,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;+GA7TnD,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,cADtB,MAAM,EAAA,CAAA,CAAA;;4FACnB,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACd3B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACxC,KAAK;IACL,sBAAsB;IACtB,oBAAoB;IACpB,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;IAClB,UAAU;IACV,YAAY;IACZ,UAAU;IACV,iCAAiC;IACjC,YAAY;IACZ,wBAAwB;IACxB,gBAAgB;AACjB,CAAA,CAAC;;ACdF,IAAY,cAGX;AAHD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,IAAY;AACZ,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,IAAY;AACd,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA;;MCkBY,kCAAkC,CAAA;AAC7C,IAAA,WAAA,CACmB,kCAAuE,EAAA;QAAvE,IAAkC,CAAA,kCAAA,GAAlC,kCAAkC;;IAG9C,iBAAiB,CACtB,MAAc,EACd,QAA4B,EAAA;QAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC;AAC5D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,iBAAiB;AACxC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI;AAElC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oCAAoC,CAC9D,QAAQ,EACR,KAAK,EACL,OAAO,CACR;QAED,OAAO;YACL,QAAQ;AACR,YAAA,OAAO,EAAE,cAAc;YACvB,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC;YACtD,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC;AAC9D,YAAA,cAAc,EAAE,OAAO;SACxB;;AAGK,IAAA,eAAe,CACrB,WAA8B,EAAA;AAE9B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CACpC,CACE,gCAAkE,EAClE,GAAW,KACT;AACF,YAAA,MAAM,KAAK,GAAqB,WAAW,CAAC,GAAG,CAAC;AAEhD,YAAA,IAAI,KAAK,EAAE,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;AACpD,gBAAA,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;;YAEzC,OAAO,EAAE,GAAG,gCAAgC,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE;SAC7D,EACD,EAAE,CACH;;AAGK,IAAA,2BAA2B,CAAC,KAMnC,EAAA;QACC,MAAM,iBAAiB,GAAG,wBAAwB;AAClD,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAElE,IAAI,aAAa,EAAE;YACjB,MAAM,cAAc,GAAG,CAAC;YACxB,MAAM,gBAAgB,GAAG,CAAC;YAC1B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AACpD,YAAA,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC,gBAAgB,CAAC;;;IAI5C,YAAY,CAClB,QAA4B,EAC5B,cAAiC,EAAA;QAEjC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,cAAc,GAClB,IAAI,CAAC,kCAAkC,CAAC,iBAAiB,CAAC;YACxD,QAAQ;AACR,YAAA,OAAO,EAAE,cAAc;AACxB,SAAA,CAAC;QAEJ,OAAO,cAAc,CAAC,SAAS;;AAGzB,IAAA,oCAAoC,CAC1C,QAA4B,EAC5B,KAAyB,EACzB,OAAe,EAAA;QAEf,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE;AAC/C,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,eAAe,EAAE;AACf,gBAAA,GAAG,EAAE,OAAO;AACb,aAAA;SACY;QAEf,MAAM,iBAAiB,GAAG,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;AACrD,QAAA,MAAM,uBAAuB,GAAG,iBAAiB,EAAE,MAAM,IAAI,CAAC;QAC9D,MAAM,iBAAiB,GAAG,GAAG;QAC7B,MAAM,SAAS,GACb,CAAC,uBAAuB,GAAG,iBAAiB,EAAE,iBAAiB;AAC/D,YAAA,iBAAiB;AAEnB,QAAA,IAAI,KAAK,CAAC,eAAe,EAAE,SAAS,EAAE;YACpC,OAAO,CAAC,SAAS,GAAG;AAClB,gBAAA,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB;AAC7C,gBAAA,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE;aAC7C;;AAGH,QAAA,IAAI,KAAK,CAAC,eAAe,EAAE,QAAQ,EAAE;YACnC,OAAO,CAAC,GAAG,GAAG;AACZ,gBAAA,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB;AAC7C,gBAAA,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE;AAC5C,gBAAA,OAAO,EAAE,IAAI;aACd;;AAGH,QAAA,OAAO,OAAO;;AAGR,IAAA,cAAc,CACpB,MAAc,EACd,WAA6C,EAC7C,OAAe,EAAA;AAEf,QAAA,MAAM,IAAI,GAAgB;AACxB,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YACjC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC;AACxD,YAAA,eAAe,EAAE;AACf,gBAAA,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;AACvC,gBAAA,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC;AACzD,aAAA;YACD,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC;YACnE,QAAQ,EAAE,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,IAAI,IAAI;YAC9D,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,IAAI;SAC9D;AAED,QAAA,OAAO,IAAI;;AAGL,IAAA,QAAQ,CAAC,WAA6C,EAAA;QAC5D,OAAO;AACL,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,KAAK,EAAE,oBAAoB,CACzB,WAAW,CAAC,GAAiC,CAC9C;SACF;;AAGK,IAAA,kBAAkB,CACxB,WAA6C,EAAA;AAE7C,QAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE;AAC1B,YAAA,OAAO,IAAI;;QAGb,OAAO;AACL,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,KAAK,EAAE,oBAAoB,CACzB,WAAW,CAAC,QAAsC,CACnD;SACF;;AAGK,IAAA,0BAA0B,CAChC,WAA6C,EAAA;AAE7C,QAAA,IAAI,CAAC,WAAW,EAAE,+BAA+B,EAAE;YACjD,OAAO;AACL,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC;aAClD;;QAGH,OAAO;AACL,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,+BAA+B,CAAC;SACzE;;IAGK,eAAe,CACrB,WAA6C,EAC7C,OAAe,EAAA;QAEf,MAAM,YAAY,GAAe,EAAE;AAEnC,QAAA,MAAM,uBAAuB,GAAG,WAAW,CACzC,oBAAoB,CACS;QAC/B,IAAI,uBAAuB,EAAE;YAC3B,YAAY,CAAC,IAAI,CAAC;gBAChB,KAAK,EAAE,uBAAuB,CAAC,IAAI;AACnC,gBAAA,KAAK,EAAE;AACL,oBAAA,MAAM,EAAE,uBAAuB,CAAC,MAAM,IAAI,IAAI;AAC9C,oBAAA,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,IAAI,EAAE;AACjD,iBAAA;AACF,aAAA,CAAC;;AAGJ,QAAA,MAAM,yBAAyB,GAAG,WAAW,CAC3C,sBAAsB,CACO;AAE/B,QAAA,IAAI,yBAAyB,EAAE,IAAI,EAAE;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC;YAEjE,YAAY,CAAC,IAAI,CAAC;gBAChB,GAAG,EAAE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC;gBACtD,KAAK,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC;AACzD,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,KAAK,EAAE;AACL,oBAAA,MAAM,EAAE,yBAAyB,CAAC,MAAM,IAAI,IAAI;AAChD,oBAAA,QAAQ,EAAE,yBAAyB,CAAC,QAAQ,IAAI,EAAE;AACnD,iBAAA;AACF,aAAA,CAAC;;AAEJ,QAAA,OAAO,YAAY;;AAGb,IAAA,kBAAkB,CACxB,WAA6C,EAAA;AAE7C,QAAA,MAAM,sBAAsB,GAAG;AAC7B,YAAA;AACE,gBAAA,GAAG,EAAE,UAAU;AACf,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,KAAK,EAAE,UAAU;AAClB,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,KAAK;AACV,gBAAA,WAAW,EAAE,kBAAkB;AAC/B,gBAAA,KAAK,EAAE,oBAAoB;AAC5B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,cAAc;AACnB,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,KAAK,EAAE,SAAS;AACjB,aAAA;SACF;AAED,QAAA,MAAM,cAAc,GAAG,WAAW,CAAC,gBAAgB,CAAC;AAEpD,QAAA,IAAI,cAAc,EAAE,IAAI,EAAE;YACxB,sBAAsB,CAAC,IAAI,CAAC;AAC1B,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,WAAW,EAAE,gBAAgB;gBAC7B,KAAK,EAAE,cAAc,CAAC,IAAI;AAC3B,aAAA,CAAC;;QAGJ,OAAO,sBAAsB,CAAC,MAAM,CAClC,CACE,eAA2B,EAC3B,OAA+C,KAC7C;YACF,MAAM,KAAK,GAAG,WAAW,CACvB,OAAO,CAAC,WAAW,CACU;YAC/B,IAAI,KAAK,EAAE;gBACT,eAAe,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,oBAAA,KAAK,EAAE;AACL,wBAAA,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;AAC5B,wBAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;AAC/B,qBAAA;AACF,iBAAA,CAAC;;AAEJ,YAAA,OAAO,eAAe;SACvB,EACD,EAAE,CACH;;IAGK,0BAA0B,CAChC,WAA6C,EAC7C,OAAe,EAAA;QAEf,MAAM,uBAAuB,GAAe,EAAE;AAC9C,QAAA,MAAM,uBAAuB,GAAG,WAAW,CACzC,oBAAoB,CACS;AAC/B,QAAA,IAAI,uBAAuB,EAAE,IAAI,EAAE;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC;YAC/D,uBAAuB,CAAC,IAAI,CAAC;gBAC3B,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,OAAO,CAAC;gBACzD,KAAK,EAAE,IAAI,CAAC,8BAA8B,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC7D,gBAAA,KAAK,EAAE;AACL,oBAAA,MAAM,EAAE,uBAAuB,CAAC,MAAM,IAAI,IAAI;AAC9C,oBAAA,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,IAAI,EAAE;AACjD,iBAAA;AACF,aAAA,CAAC;;AAGJ,QAAA,OAAO,uBAAuB;;IAGxB,4BAA4B,CAClC,QAAuB,EACvB,OAAe,EAAA;AAEf,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzB,YAAA,OAAO,QAAQ,GAAG,aAAa,CAAC,eAAe,GAAG,aAAa,CAAC,QAAQ;;AAG1E,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,aAAa,CAAC,QAAQ;;AAG/B,QAAA,OAAO,QAAQ,GAAG,aAAa,CAAC,UAAU,GAAG,aAAa,CAAC,GAAG;;IAGxD,8BAA8B,CACpC,QAAuB,EACvB,OAAe,EAAA;AAEf,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,QAAQ,GAAG,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAA,CAAG,GAAG,KAAK;;AAG9C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzB,YAAA,OAAO,4CAA4C;;QAGrD,OAAO,QAAQ,GAAG,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAA,CAAG,GAAG,KAAK;;IAGtC,yBAAyB,CAC/B,QAAuB,EACvB,OAAe,EAAA;AAEf,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzB,YAAA,OAAO;kBACH,aAAa,CAAC;AAChB,kBAAE,aAAa,CAAC,iBAAiB;;AAGrC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,aAAa,CAAC,iBAAiB;;AAGxC,QAAA,OAAO;cACH,aAAa,CAAC;AAChB,cAAE,aAAa,CAAC,YAAY;;IAGxB,0BAA0B,CAChC,QAAuB,EACvB,OAAe,EAAA;AAEf,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,QAAQ,GAAG,CAAA,UAAA,EAAa,QAAQ,CAAA,KAAA,CAAO,GAAG,eAAe;;AAGlE,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzB,YAAA,OAAO,sDAAsD;;QAG/D,OAAO,QAAQ,GAAG,CAAA,UAAA,EAAa,QAAQ,CAAA,KAAA,CAAO,GAAG,CAAA,aAAA,CAAe;;AAG1D,IAAA,OAAO,CAAC,OAAe,EAAA;AAC7B,QAAA,OAAO,OAAO,KAAK,cAAc,CAAC,KAAK;;AAGjC,IAAA,OAAO,CAAC,OAAe,EAAA;AAC7B,QAAA,OAAO,OAAO,KAAK,cAAc,CAAC,KAAK;;IAGjC,qBAAqB,CAC3B,MAAc,EACd,WAA6C,EAAA;QAE7C,MAAM,kBAAkB,GAAe,EAAE;AACzC,QAAA,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE;YAC9B,kBAAkB,CAAC,IAAI,CAAC;AACtB,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK;AACnC,aAAA,CAAC;;AAGJ,QAAA,MAAM,WAAW,GACf,MAAM,CAAC,YAAY;AACnB,aAAC,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC,UAAU;AAC3C,gBAAA,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC,OAAO;AACzC,gBAAA,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC,IAAI,CAAC;QAC3C,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;YAC1C,kBAAkB,CAAC,IAAI,CAAC;AACtB,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK;AAC/B,gBAAA,UAAU,EAAE,IAAI;AACjB,aAAA,CAAC;;AAEJ,QAAA,OAAO,kBAAkB;;AAGnB,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,MAAM,gBAAgB,GAAG,cAAc;QACvC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QAExD,IAAI,CAAC,mBAAmB,EAAE;AACxB,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,mBAAmB,CAAC,CAAC,CAAC;;+GAzZpB,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA4C,mCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cADrB,MAAM,EAAA,CAAA,CAAA;;4FACnB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACN5B,MAAO,qBAAsB,SAAQ,eAA+B,CAAA;AAGxE,IAAA,WAAA,CACmB,cAA8B,EAC9B,mCAAwE,EACxE,kCAAsE,EACtE,6BAA4D,EAAA;AAE7E,QAAA,KAAK,EAAE;QALU,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAmC,CAAA,mCAAA,GAAnC,mCAAmC;QACnC,IAAkC,CAAA,kCAAA,GAAlC,kCAAkC;QAClC,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAN/B,IAAkB,CAAA,kBAAA,GAAG,UAAU;;AAWzC,IAAA,eAAe,CAAC,OAAoB,EAAE,WAAW,GAAG,IAAI,EAAA;QAC7D,IAAI,OAAO,EAAE;YACX,MAAM,cAAc,GAClB,IAAI,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAErE,YAAA,IAAI,cAAc,CAAC,QAAQ,EAAE;AAC3B,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,IAAI,CAAC,kBAAkB,EACvB,cAAc,CAAC,QAAQ,CACxB;;AAGH,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;YAE1B,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;;;;AAKhC,IAAA,cAAc,CAAC,MAAe,EAAA;QACnC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CACtC,IAAI,CAAC,kBAAkB,CACxB;AACD,YAAA,MAAM,cAAc,GAClB,IAAI,CAAC,kCAAkC,CAAC,iBAAiB,CACvD,MAAM,EACN,QAAQ,CACT;AACH,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;;;AAIvB,IAAA,qBAAqB,CAAC,OAAmB,EAAA;QAC9C,OAAO,IAAI,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,OAAO,CAAC;;AAGpE,IAAA,YAAY,CAAC,cAA8B,EAAA;AACjD,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,gBAAgB,EACvC,uBAAuB,CAAC,IAAI,EAC5B;YACE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,SAAS,GAAG,MAAM;AACnD,SAAA,CACF;;+GAzDQ,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA;;4FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACVlC;AACM,MAAO,kBAAmB,SAAQ,iBAAiB,CAAA;IAMvD,WAAmB,CAAA,KAAoB,EAAE,OAAe,EAAA;AACtD,QAAA,KAAK,EAAE;QALO,IAAe,CAAA,eAAA,GAAG,QAAQ;QAE1B,IAAO,CAAA,OAAA,GAAG,WAAW;AAKnC,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,UAAU,EAAE;;AAGxB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;AAEzB;;ACTM,MAAM,8BAA8B,GACzC,IAAI,cAAc,CAA4B,oBAAoB,CAAC;AAE9D,MAAM,iCAAiC,GAAkB;AAC9D,IAAA,OAAO,EAAE,8BAA8B;AACvC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAkC,KAC9C,IAAI,kBAAkB,CAAC,GAAG,IAAI,CAAC;CAClC;;ACfD;MACa,mBAAmB,CAAA;AAK9B,IAAA,WAAA,CAAmB,UAA2C,EAAA;AAC5D,QAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK;AAC7B,QAAA,IAAI,CAAC,wBAAwB,GAAG,UAAU,CAAC,wBAAwB;;AAEtE;;ACLM,MAAM,+BAA+B,GAC1C,IAAI,cAAc,CAA6B,qBAAqB,CAAC;AAEhE,MAAM,kCAAkC,GAAkB;AAC/D,IAAA,OAAO,EAAE,+BAA+B;AACxC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAwB,KAAK,IAAI,mBAAmB,CAAC,GAAG,IAAI,CAAC;CAC5E;;ACMK,MAAO,kBAAmB,SAAQ,UAA+B,CAAA;IAGrE,WACmB,CAAA,aAA4B,EAC5B,eAAgC,EAChC,+BAAgE,EAEhE,cAAyC,EAEzC,eAA2C,EAAA;AAE5D,QAAA,KAAK,EAAE;QARU,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAA+B,CAAA,+BAAA,GAA/B,+BAA+B;QAE/B,IAAc,CAAA,cAAA,GAAd,cAAc;QAEd,IAAe,CAAA,eAAA,GAAf,eAAe;;AAK3B,IAAA,gBAAgB,CAAC,OAAe,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;IAGjB,OAAO,GAAA;AACZ,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CACvC,IAAI,CAAC,eAAe,CAAC,KAAK,EAC1B,IAAI,CAAC,OAAO,CACb;AAED,QAAA,IAAI,CAAC;aACF,oBAAoB,CAAC,aAAa;AAClC,aAAA,IAAI,CAAC,CAAC,WAAwB,KAAI;YACjC,MAAM,QAAQ,GACZ,IAAI,CAAC,+BAA+B,CAAC,SAAS,CAAC,WAAW,CAAC;AAC7D,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC/C,MAAM,EAAE,QAAQ,CAAC,MAAoB;gBACrC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,wBAAwB,EAAE,QAAQ,CAAC,2BAA2B;AAC/D,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;AACxC,SAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAY,KAAI;AACtB,YAAA,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;AACxC,SAAC,CAAC;;+GAxCK,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAArC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAX,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAiD,+BAAA,EAAA,EAAA,EAAA,KAAA,EAOnB,8BAA8B,EAAA,EAAA,EAAA,KAAA,EAE9B,+BAA+B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAT9B,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAQI,MAAM;2BAAC,8BAA8B;;0BAErC,MAAM;2BAAC,+BAA+B;;;AC9B3C,IAAY,eAGX;AAHD,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC;AAChC,IAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,iBAAkC;AACpC,CAAC,EAHW,eAAe,KAAf,eAAe,GAG1B,EAAA,CAAA,CAAA;;ACHD,IAAY,mBAGX;AAHD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC3B,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,GAG9B,EAAA,CAAA,CAAA;;ICHW;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,IAAA,CAAA,GAAA,WAAgB;AAChB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,YAA0B;AAC5B,CAAC,EAHW,WAAW,KAAX,WAAW,GAGtB,EAAA,CAAA,CAAA;;MCDY,aAAa,CAAA;AAQxB,IAAA,WAAA,CAAmB,OAAe,EAAE,IAAoB,EAAE,KAAc,EAAA;QAPjE,IAAI,CAAA,IAAA,GAAG,eAAe;QAEtB,IAAI,CAAA,IAAA,GAAkB,EAAE;AAGd,QAAA,IAAA,CAAA,SAAS,GAAgB,WAAW,CAAC,WAAW;AAG/D,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QAEtB,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QAE5B,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CACzB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAC9D;AACD,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC;;AAGxC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;;AAE3B;;MCbY,qBAAqB,CAAA;aACT,IAAkC,CAAA,kCAAA,GAAG,CAAH,CAAK;AAMtC,IAAA,SAAA,IAAA,CAAA,UAAU,GAAG;AACnC,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,wBAAwB,EAAE,IAAI;AAC/B,KAHiC,CAGhC;AAgBF,IAAA,WAAA,CAAoC,aAA4B,EAAA;QAA5B,IAAa,CAAA,aAAA,GAAb,aAAa;AArB1C,QAAA,IAAA,CAAA,IAAI,GAAG,mBAAmB,CAAC,KAAK;QAO/B,IAAW,CAAA,WAAA,GAA4B,IAAI;QAG3C,IAAmB,CAAA,mBAAA,GAAyC,IAAI;AAMvD,QAAA,IAAA,CAAA,iBAAiB,GAChC,IAAI,OAAO,EAAgB;AACZ,QAAA,IAAA,CAAA,kCAAkC,GACjD,IAAI,OAAO,EAAQ;;IAId,MAAM,IAAI,CAAC,GAAW,EAAA;AAC3B,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,KAAK,EAAE;;QAGd,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACxE,IAAI,CAAC,KAAK,EAAE;;QAGd,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACxC,OAAO,IAAI,CAAC,WAAW;;AAGzB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AAEd,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB;aACrC,KAAK,CAAC,YAAW;AAChB,YAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE;AACrC,SAAC;aACA,IAAI,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACtD,SAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,WAAW;;IAGlB,KAAK,GAAA;QACV,IAAI,CAAC,sBAAsB,EAAE;AAE7B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;;AAGF,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AAEvB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE;;AAGf,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC;AACT,aAAA,YAAY;AACZ,aAAA,IAAI,CAACC,KAAG,CAAC,CAAC,KAA2B,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;;AAGpD,IAAA,iCAAiC,CAAC,IAAiB,EAAA;QACxD,OAAO,IAAI,CAAC;AACT,aAAA,YAAY;aACZ,SAAS,CAAC,IAAI,CAAC;;IAGb,QAAQ,GAAA;AACb,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;;IAGjB,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAO,IAAI;;QAGb,OACE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CACjD,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;;;IAIhC,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACtC,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;;;;IAK3B,2BAA2B,GAAA;AACjC,QAAA,MAAM,GAAG,GACP,qBAAqB,CAAC,UAAU,CAAC,YAAY;AAC7C,YAAA,qBAAqB,CAAC,UAAU,CAAC,wBAAwB;AAC3D,QAAA,MAAM,GAAG,GACP,qBAAqB,CAAC,UAAU,CAAC,YAAY;AAC7C,YAAA,qBAAqB,CAAC,UAAU,CAAC,wBAAwB;AAC3D,QAAA,IAAI,CAAC,qBAAqB;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;;;IAI7C,4BAA4B,GAAA;AAClC,QAAA,IAAI,CAAC,qBAAqB;AACxB,YAAA,IAAI,CAAC,qBAAqB;gBAC1B,qBAAqB,CAAC,kCAAkC;;;AAIpD,IAAA,MAAM,gBAAgB,GAAA;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,KAAmB,KAAI;AAClD,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAc;YACpC,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,aAAa,CAAC,CAAA,4BAAA,EAA+B,OAAO,CAAA,CAAE,EAAE;AAC1D,gBAAA,WAAW,CAAC,EAAE;AACf,aAAA,CAAC,CACH;AACD,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,SAAC;QAED,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAK;AAC5B,gBAAA,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACxC,gBAAA,OAAO,EAAE;AACX,aAAC;AAED,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,MAAK;AAC7B,gBAAA,MAAM,EAAE;AACV,aAAC;AACH,SAAC,CAAC;;;AAII,IAAA,MAAM,SAAS,GAAA;QACrB,IAAI,CAAC,sBAAsB,EAAE;AAE7B,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,MAAK;gBACzC,IAAI,CAAC,gBAAgB;qBAClB,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC;qBACxB,KAAK,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,4BAA4B,EAAE;AACrC,aAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC;AAChC,SAAC,CAAC;;;AAII,IAAA,MAAM,qBAAqB,GAAA;QACjC,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,2BAA2B,EAAE;QAElC,IAAI,WAAW,GAAG,KAAK;QAEvB,OAAO,CAAC,WAAW,EAAE;AACnB,YAAA,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;;AAGtC,QAAA,IAAI,CAAC,kCAAkC,CAAC,IAAI,EAAE;;+GA5KrC,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACNK,MAAO,OAAQ,SAAQ,WAAW,CAAA;AACtC,IAAA,WAAA,CAAmB,OAAe,EAAE,WAAmB,EAAE,IAAkB,EAAA;QACzE,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;AAEtD,QAAA,MAAM,kBAAkB,GAAG,CAAA,EAAG,OAAO,CAAmB,gBAAA,EAAA,WAAW,EAAE;AAErE,QAAA,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC;;AAElC;;MCSY,0BAA0B,CAAA;aACd,IAAkC,CAAA,kCAAA,GAAG,CAAH,CAAK;AAItC,IAAA,SAAA,IAAA,CAAA,UAAU,GAAG;AACnC,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,wBAAwB,EAAE,IAAI;AAC/B,KAHiC,CAGhC;AAsBF,IAAA,WAAA,CAAoC,aAA4B,EAAA;QAA5B,IAAa,CAAA,aAAA,GAAb,aAAa;AA3B1C,QAAA,IAAA,CAAA,IAAI,GAAG,mBAAmB,CAAC,UAAU;QAQpC,IAAmB,CAAA,mBAAA,GAAyC,IAAI;QAOhE,IAAgB,CAAA,gBAAA,GAAG,KAAK;QACxB,IAAY,CAAA,YAAA,GAAG,KAAK;AAKX,QAAA,IAAA,CAAA,iBAAiB,GAChC,IAAI,OAAO,EAAsB;AAElB,QAAA,IAAA,CAAA,kCAAkC,GACjD,IAAI,OAAO,EAAQ;;AAId,IAAA,MAAM,IAAI,CAAC,GAAW,EAAE,OAAe,EAAA;AAC5C,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;YAChD,IAAI,CAAC,KAAK,EAAE;;AAGd,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;YACtB,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC;;QACzC,OAAO,KAAc,EAAE;;YAEvB,MAAM,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,KAAK,CAAW;YACnD,MAAM,OAAO,GAAG,IAAI,OAAO,CACzB,CAA4B,yBAAA,EAAA,OAAO,CAAE,CAAA,EACrC,OAAO,CACR;AAED,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;;;IAI9B,KAAK,GAAA;QACV,IAAI,CAAC,sBAAsB,EAAE;AAE7B,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B;;AAGF,QAAA,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE;AAE7B,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;;IAGZ,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,YAAY;;AAGnD,IAAA,IAAW,SAAS,GAAA;QAClB,QACE,IAAI,CAAC;AACF,aAAA,YAAY;;;AAGZ,aAAA,IAAI,CAACD,KAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;;AAIhC,IAAA,iCAAiC,CAAC,IAAiB,EAAA;QACxD,OAAO,IAAI,CAAC;AACT,aAAA,YAAY;aACZ,SAAS,CAAC,IAAI,CAAC;;;IAIZ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACtC,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;;;;IAK3B,2BAA2B,GAAA;AACjC,QAAA,MAAM,GAAG,GACP,0BAA0B,CAAC,UAAU,CAAC,YAAY;AAClD,YAAA,0BAA0B,CAAC,UAAU,CAAC,wBAAwB;AAChE,QAAA,MAAM,GAAG,GACP,0BAA0B,CAAC,UAAU,CAAC,YAAY;AAClD,YAAA,0BAA0B,CAAC,UAAU,CAAC,wBAAwB;AAChE,QAAA,IAAI,CAAC,qBAAqB;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;;;IAI7C,4BAA4B,GAAA;AAClC,QAAA,IAAI,CAAC,qBAAqB;AACxB,YAAA,IAAI,CAAC,qBAAqB;gBAC1B,0BAA0B,CAAC,kCAAkC;;;AAIzD,IAAA,MAAM,mBAAmB,GAAA;AAC/B,QAAA,OAAO,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC;;;AAIzD,IAAA,MAAM,gBAAgB,CAC5B,GAAY,EACZ,OAAgB,EAAA;QAEhB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,YAAY,EAAE;YAC9C;;;AAIF,QAAA,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE;AAEzD,QAAA,MAAM,YAAY,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG;AACpC,QAAA,MAAM,gBAAgB,GAAG,OAAO,IAAI,IAAI,CAAC,OAAO;AAEhD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC,YAAY,EAAE;AACnD,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,kBAAkB,EAAE,IAAI;AACzB,SAAA,CAAC;QAEF,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,IAAI,CAAC;AACF,iBAAA,EAAE,CAAC,YAAY,EAAE,MAAK;AACrB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAC1B,aAAC;AACA,iBAAA,EAAE,CAAC,WAAW,EAAE,MAAK;gBACpB,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,OAAO,EAAE;AACX,aAAC;AACA,iBAAA,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,KAAI;AAC1B,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,gBAAgB,CAAC;AACxC,gBAAA,MAAM,EAAE;AACV,aAAC;AACA,iBAAA,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAI;AACnB,gBAAA,MAAM,OAAO,GAAG,CAAQ,KAAA,EAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAA,GAAA,EAAM,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE;AAE/D,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,CAAqB,kBAAA,EAAA,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;AAC9D,oBAAA,OAAO,EAAE,gBAAgB;AAC1B,iBAAA,CAAC,CACH;AACH,aAAC;AACA,iBAAA,OAAO,EAAE;AAEZ,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CACjD,gBAAgB,EAChB,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAC9C;AAED,YAAA,IAAI,CAAC;AACF,iBAAA,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,KAAI;AACxB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC,cAAc;AAC9C,gBAAA,IAAI,CAAC,qBAAqB,GAAG,gBAAgB;AAC/C,aAAC;AACA,iBAAA,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,KAAI;AACzB,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAc;gBAElC,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,aAAa,CACf,CAA+B,4BAAA,EAAA,OAAO,CAAE,CAAA,EACxC,CAAC,WAAW,CAAC,EAAE,CAAC,EAChB,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAC9B,CACF;AAED,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,aAAC;AACA,iBAAA,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAI;AACnB,gBAAA,MAAM,OAAO,GAAG,CAAQ,KAAA,EAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAA,GAAA,EAAM,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE;AAE/D,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,CAAuB,oBAAA,EAAA,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;AAChE,oBAAA,OAAO,EAAE,gBAAgB;AAC1B,iBAAA,CAAC,CACH;AACH,aAAC;AACA,iBAAA,SAAS,EAAE;AAChB,SAAC,CAAC;;IAGI,SAAS,GAAA;AACf,QAAA,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACxC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;IAGtB,YAAY,CAClB,GAAwB,EACxB,gBAAwB,EAAA;AAExB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;AAG7B,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE;YAClB,MAAM,OAAO,GAAG,CAAA,KAAA,EAAQ,GAAG,CAAC,IAAI,CAAA,GAAA,EAAM,GAAG,CAAC,MAAM,CAAA,CAAE;AAElD,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,CAAuB,oBAAA,EAAA,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;AAChE,gBAAA,OAAO,EAAE,gBAAgB;AAC1B,aAAA,CAAC,CACH;YAED,CAAC,YAAW;AACV,gBAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE;aACnC,GAAG;;;AAIA,IAAA,MAAM,SAAS,GAAA;QACrB,IAAI,CAAC,sBAAsB,EAAE;AAE7B,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,MAAK;gBACzC,IAAI,CAAC,gBAAgB;qBAClB,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC;qBACxB,KAAK,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,4BAA4B,EAAE;AACrC,aAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC;AAChC,SAAC,CAAC;;AAGI,IAAA,MAAM,qBAAqB,GAAA;QACjC,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,2BAA2B,EAAE;QAElC,IAAI,WAAW,GAAG,KAAK;AAEvB,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QAErC,OAAO,CAAC,WAAW,EAAE;AACnB,YAAA,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;;AAGtC,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;AAEpC,QAAA,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW;AAE9C,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,CAA4C,yCAAA,EAAA,aAAa,IAAI,EAC7D,CAAC,SAAS,CAAC,EAAE,CAAC,EACd;YACE,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CACF,CACF;AAED,QAAA,IAAI,CAAC,kCAAkC,CAAC,IAAI,EAAE;;AAGxC,IAAA,sBAAsB,CAC5B,gBAAwB,EAAA;AAExB,QAAA,MAAM,OAAO,GAAiC;AAC5C,YAAA,WAAW,EAAE,IAAI;SAClB;AAED,QAAA,IACE,gBAAgB,KAAK,IAAI,CAAC,qBAAqB;YAC/C,IAAI,CAAC,oBAAoB,EACzB;AACA,YAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB;;AAG3C,QAAA,OAAO,OAAO;;+GA5RL,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACdD;MAIa,gBAAgB,CAAA;IAC3B,WACmB,CAAA,cAAqC,EACrC,mBAA+C,EAAA;QAD/C,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;;IAG/B,qBAAqB,CAC1B,GAAW,EACX,UAA+B,EAAA;AAE/B,QAAA,IAAI,UAAU,KAAK,mBAAmB,CAAC,UAAU,EAAE;YACjD,OAAO,IAAI,CAAC,mBAAmB;;QAGjC,OAAO,IAAI,CAAC,cAAc;;+GAdjB,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCCY,sBAAsB,CAAA;AAgBjC,IAAA,IAAW,gBAAgB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE;;AAEnD,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;;AAGjD,IAAA,IAAW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,KAAK;;AAGlD,IAAA,WAAA,CAAoC,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;AAxBnC,QAAA,IAAA,CAAA,sBAAsB,GAGnC;AACF,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,MAAM;SAClB;AAEgB,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,OAAO,EAAQ;AAC5C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAQ;QAEnD,IAAe,CAAA,eAAA,GAA2B,IAAI;;AAe/C,IAAA,MAAM,wBAAwB,CACnC,YAAoB,EACpB,oBAA4B,EAC5B,mBAAwC,EAAA;AAExC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAChE,YAAY,EACZ,mBAAmB,CACpB;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC;AAEnE,QAAA,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE;QACzC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CACnE,CAAC,OAAO,KAAK,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAC5C;AAED,QAAA,IAAI,CAAC,iCAAiC;AACpC,YAAA,IAAI,CAAC,eAAe,CAAC,iCAAiC,CAAC,MAAK;AAC1D,gBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;AACpC,aAAC,CAAC;AACJ,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;QAClC,IAAI,CAAC,4BAA4B,EAAE;;IAG9B,cAAc,GAAA;QACnB,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;QAC7B,IAAI,CAAC,4BAA4B,EAAE;;IAG9B,4BAA4B,GAAA;QACjC,IAAI,CAAC,4BAA4B,EAAE;QACnC,IAAI,CAAC,sBAAsB,CAAC,SAAS,GAAG,UAAU,CAAC,MAAK;AACtD,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;AACpC,SAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;;IAGnC,4BAA4B,GAAA;AAClC,QAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE;AACzC,YAAA,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;AACnD,YAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,GAAG,IAAI;;;AAIxC,IAAA,gBAAgB,CAAC,OAAe,EAAA;AACtC,QAAA,IAAI,OAAO,KAAK,eAAe,CAAC,aAAa,EAAE;AAC7C,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;YAChC,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,4BAA4B,EAAE;;AAErC,QAAA,IAAI,OAAO,KAAK,eAAe,CAAC,cAAc,EAAE;YAC9C,IAAI,CAAC,4BAA4B,EAAE;YACnC,IAAI,CAAC,cAAc,EAAE;;;IAIjB,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE;AACzC,QAAA,IAAI,CAAC,iCAAiC,EAAE,WAAW,EAAE;;+GAxF5C,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCQY,mBAAmB,CAAA;AAU9B,IAAA,IAAW,gBAAgB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE;;AAGnD,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;;AAGjD,IAAA,WAAA,CACmB,aAAmC,EACnC,kBAAsC,EACtC,sBAA8C,EAC9C,6BAA4D,EAAA;QAH5D,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QArBzC,IAAW,CAAA,WAAA,GAAG,KAAK;AAET,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,OAAO,EAAkB;AACtD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAiB;AACnD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAkB;AAC1D,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;QAC9B,IAAa,CAAA,aAAA,GAAkB,IAAI;QACnC,IAAgB,CAAA,gBAAA,GAAkB,IAAI;;AAiBvC,IAAA,MAAM,CAAC,OAAe,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE;;AAGtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,EAAQ;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO;AAE5B,QAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,uBAAuB,EAAE;AAE9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAEjD,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;IAGvC,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE;AAC5C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;AAGnB,IAAA,kBAAkB,CAAC,OAAe,EAAA;QACvC,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO;;AAGnD,IAAA,qBAAqB,CAAC,OAAe,EAAA;QAC3C,IAAI,CAAC,aAAa,CAAC;AAChB,aAAA,IAAI,CACHC,QAAM,CAAC,CAAC,cAAc,KAAI;YACxB,OAAO,cAAc,EAAE,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC;SAC3D,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEzB,aAAA,SAAS,CAAC,CAAC,cAAqC,KAAI;AACnD,YAAA,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE;gBAC3B;;AAGF,YAAA,MAAM,cAAc,GAAG;AACrB,gBAAA,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,WAAW;AAC9C,gBAAA,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,YAAY;AAChD,gBAAA,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,WAAW;AAChD,gBAAA,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,eAAe;AACtD,gBAAA,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,YAAY;AAChD,gBAAA,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,YAAY;AAChD,gBAAA,oBAAoB,EAAE,cAAc,CAAC,MAAM,CAAC,oBAAoB;AAChE,gBAAA,mBAAmB,EAAE,cAAc,CAAC,MAAM,CAAC,mBAAmB;aAC/D;AAED,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC7B,gBAAA,cAAc,EAAE,cAAc;AAC9B,gBAAA,cAAc,EAAE,cAAc;AAC/B,aAAA,CAAC;YAEF,MAAM,aAAa,GACjB,cAAc,CAAC,WAAW,KAAK,UAAU,CAAC,QAAQ;AAClD,gBAAA,cAAc,CAAC,WAAW,KAAK,UAAU,CAAC,KAAK;gBAC/C,cAAc,CAAC,YAAY;AAE7B,YAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,YAAY,EACnC,uBAAuB,CAAC,MAAM,EAC9B;AACE,gBAAA,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG;AACrC,gBAAA,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,WAAW;AACzC,aAAA,CACF;YAED,IAAI,aAAa,EAAE;AACjB,gBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,eAAe,EACtC,uBAAuB,CAAC,MAAM,EAC9B;AACE,oBAAA,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG;AACtC,iBAAA,CACF;;AAGH,YAAA,IAAI,cAAc,CAAC,aAAa,EAAE;AAChC,gBAAA,IACE,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ;AACrC,oBAAA,IAAI,CAAC,gBAAgB,KAAK,OAAO,EACjC;AACA,oBAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO;AAC/B,oBAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;;gBAEpC;;YAGF,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC;AAC7C,SAAC,CAAC;;IAGE,0BAA0B,GAAA;QAChC,IAAI,CAAC,kBAAkB,CAAC;AACrB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,mBAA+C,KAAI;YAC7D,IAAI,CAAC,mBAAmB,EAAE,MAAM;gBAAE;AAElC,YAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,iBAAiB,EACxC,uBAAuB,CAAC,MAAM,EAC9B;AACE,gBAAA,KAAK,EAAE,mBAAmB,CAAC,MAAM,IAAI,EAAE;AACxC,aAAA,CACF;YAED,IAAI,mBAAmB,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,EAAE;AAClD,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC5B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE;gBAC5C;;AAGF,YAAA,IAAI,mBAAmB,CAAC,KAAK,KAAK,KAAK,EAAE;AACvC,gBAAA,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,EAAE;gBAC1D;;AAEJ,SAAC,CAAC;;IAGE,uBAAuB,GAAA;QAC7B,IAAI,CAAC,sBAAsB,CAAC;AACzB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC7B,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAErD,IAAI,CAAC,sBAAsB,CAAC;AACzB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC7B,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;;AAG1C,IAAA,aAAa,CAAC,cAA8B,EAAA;AAClD,QAAA,KAAK,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CACvD,cAAc,CAAC,YAAY,EAC3B,cAAc,CAAC,oBAAoB,EACnC,cAAc,CAAC,mBAAmB,CACnC;AACD,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC;;+GAtKvC,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,6BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;AChBD,IAAY,UAIX;AAJD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC3B,CAAC,EAJW,UAAU,KAAV,UAAU,GAIrB,EAAA,CAAA,CAAA;;ACJD,IAAY,uBAGX;AAHD,CAAA,UAAY,uBAAuB,EAAA;AACjC,IAAA,uBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,uBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,GAGlC,EAAA,CAAA,CAAA;;ACDK,MAAO,gBAAiB,SAAQ,QAAQ,CAAA;AAC5C,IAAA,WAAA,CAAmB,OAAgB,EAAA;AACjC,QAAA,KAAK,CAAC,qBAAqB,IAAI,OAAO,GAAG,CAAM,GAAA,EAAA,OAAO,IAAI,GAAG,GAAG,CAAC,CAAC;;AAErE;;MCMY,iCAAiC,CAAA;IAI5C,WACmB,CAAA,eAAgC,EAChC,SAA0B,EAAA;QAD1B,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAS,CAAA,SAAA,GAAT,SAAS;QALX,IAAQ,CAAA,QAAA,GAAG,6BAA6B;AACxC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAqC;;AAO5E,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;;IAG9B,MAAM,OAAO,CAAC,OAAe,EAAA;AAClC,QAAA,MAAM,iBAAiB,GAAG;AACxB,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACxC,YAAA,UAAU,EAAE,OAAO;SACpB;AAED,QAAA,OAAO,aAAa,CAClB,IAAI,CAAC;aACF,IAAI,CACH,IAAI,CAAC,QAAQ,EACb,IAAI,eAAe,CACjB,iBAAyD,CAC1D,EACD;YACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,YAAA,YAAY,EAAE,MAAM;SACrB;AAEF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,KAAiC,KAAI;AACxC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;SAC1B,CAAC,CACH,CACJ,CAAC,KAAK,CAAC,CAAC,KAAY,KAAI;AACvB,YAAA,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3C,SAAC,CAAC;;+GAzCO,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAzD,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cAFhC,MAAM,EAAA,CAAA,CAAA;;4FAEP,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCQY,8BAA8B,CAAA;IAOzC,WACmB,CAAA,oBAA0C,EAC1C,mBAAwC,EACxC,iCAAoE,EACpE,iBAAoC,EACpC,kBAAsC,EACtC,0BAAsD,EAAA;QALtD,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAiC,CAAA,iCAAA,GAAjC,iCAAiC;QACjC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAVrC,IAAa,CAAA,aAAA,GAAG,KAAK;;IAatB,MAAM,SAAS,CAAC,MAA2B,EAAA;QAChD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACrC,YAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAClD,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE;YAEnC,MAAM,cAAc,GAAG,MAAM,cAAc,CACzC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CACpC;AAED,YAAA,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM;AACnC,YAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,GAAG,IAAI;AAEvC,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC;;AAGrE,QAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,aAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAC1E;YACA,OAAO,IAAI,CAAC,MAAM;;AAGpB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,UAAU;YAC/C,OAAO,IAAI,CAAC,MAAM;;AAGpB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,KAAK;QAC1C,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACpC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,OAAO,SAAS;;AAGV,IAAA,WAAW,CAAC,MAA2B,EAAA;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAE3B,QAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE;;AAG7B,IAAA,oBAAoB,CAAC,MAAsB,EAAA;AACjD,QAAA,QACE,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC,MAAM;AACxC,YAAA,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC,UAAU;;AAIxC,IAAA,gBAAgB,CACtB,WAAuC,EACvC,MAAsB,EACtB,WAAiC,EAAA;QAEjC,OAAO,CAAC,EACN,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC,IAAI;aACrC,WAAW,EAAE,WAAW,IAAI,WAAW,EAAE,wBAAwB,CAAC,CACpE;;;AAIK,IAAA,qBAAqB,CAC3B,OAAe,EAAA;QAEf,OAAO,IAAI,CAAC,iCAAiC,CAAC,OAAO,CAAC,OAAO,CAAC;;AAGxD,IAAA,yBAAyB,CAAC,OAAe,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,YAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;AAC3C,YAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;;AAG1C,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC;AAExC,QAAA,IAAI,CAAC,wBAAwB;AAC3B,YAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,SAAS,CAC/C,CAAC,EAAE,cAAc,EAAE,KAAI;AACrB,gBAAA,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE;oBAC3B;;AAEF,gBAAA,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM;AAEnC,gBAAA,KAAK,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,IAAI,CACzD,CAAC,mBAAmB,KAAI;oBACtB,IAAI,mBAAmB,EAAE,KAAK,IAAI,cAAc,CAAC,MAAM,EAAE;wBACvD,IAAI,CAAC,yBAAyB,CAC5B,cAAc,CAAC,MAAM,EACrB,mBAAmB,CACpB;;AAEL,iBAAC,CACF;AACH,aAAC,CACF;;IAGG,yBAAyB,CAC/B,MAAc,EACd,WAAgC,EAAA;AAEhC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACnB;;AAEF,QAAA,KAAK,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAClD,CAAC,cAA0C,KAAI;YAC7C,IAAI,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,WAAW,GAAG,cAAc;gBACjC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC;;AAEhE,SAAC,CACF;;AAGK,IAAA,kBAAkB,CACxB,MAAc,EACd,OAAmC,EACnC,WAAgC,EAAA;QAEhC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC,OAAO;;aACzD;AACL,YAAA,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC,MAAM;;AAG/D,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AACxC,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;QAE3C,MAAM,mBAAmB,GAAG,IAAI;QAEhC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpC,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC;AAC5C,YAAA,cAAc,EAAE,MAAM;AACtB,YAAA,uBAAuB,EAAE,mBAAmB;YAC5C,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;AACtD,SAAA,CAAC,CACH;;+GAzJQ,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA0D,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iCAAA,EAAA,EAAA,EAAA,KAAA,EAAAhD,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAiD,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,cAF7B,MAAM,EAAA,CAAA,CAAA;;4FAEP,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCCY,aAAa,CAAA;AAGxB,IAAA,WAAA,CACmB,UAAsB,EACtB,oBAA0C,EAC1C,qBAA4C,EAC5C,mBAAwC,EACxC,iBAAoC,EACpC,8BAA8D,EAC9D,0BAAsD,EAAA;QANtD,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAA8B,CAAA,8BAAA,GAA9B,8BAA8B;QAC9B,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QATrC,IAAwB,CAAA,wBAAA,GAAwB,IAAI;;IAYrD,MAAM,SAAS,CAAC,MAA2B,EAAA;AAChD,QAAA,MAAM,uBAAuB,GAC3B,MAAM,EAAE,oBAAoB;QAC9B,IAAI,uBAAuB,EAAE;YAC3B,OAAO,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC,MAAM,CAAC;;AAG9D,QAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAElD,QAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC;AAE9C,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE;QAEnC,MAAM,cAAc,GAAG,MAAM,cAAc,CACzC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CACpC;QAED,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC;QAEhE,OAAO,cAAc,CAAC,MAAM;;IAGvB,MAAM,4BAA4B,CAAC,GAAY,EAAA;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;QAEtD,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;;AAG5D,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;;AAG9B,IAAA,iBAAiB,CAAC,OAAe,EAAA;QACtC,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC;;AAGzC,IAAA,uBAAuB,CAAC,GAAY,EAAA;AAC1C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,IAAI,EAAE,CAAC;AAC/D,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAE/C,QAAA,IACE,0BAA0B,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EACxE;AACA,YAAA,OAAO,IAAI;;QAGb,MAAM,MAAM,GAAuC,EAAE;QACrD,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAI;AAC9C,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC9D,SAAC,CAAC;AAEF,QAAA,OAAO,MAAwC;;AAGzC,IAAA,yBAAyB,CAAC,OAAe,EAAA;QAC/C,IAAI,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE;YACxD;;AAGF,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC;AAExC,QAAA,IAAI,CAAC,wBAAwB,EAAE,WAAW,EAAE;AAC5C,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACtD,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,EAAE,cAAc,EAAE,KAAI;YAChC,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC;AAEhE,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpC,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC,CAClE;AACH,SAAC,CAAC;;+GAnFK,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA/D,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAgE,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,8BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACXK,MAAO,sBAAuB,SAAQ,eAAgC,CAAA;+GAA/D,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCQY,oCAAoC,CAAA;AAS/C,IAAA,WAAA,CAAoC,aAA4B,EAAA;QAA5B,IAAa,CAAA,aAAA,GAAb,aAAa;QAN1C,IAAI,CAAA,IAAA,GAA4B,gBAAgB;AACtC,QAAA,IAAA,CAAA,IAAI,GAAa,CAAC,YAAY,CAAC;QAC/B,IAAqB,CAAA,qBAAA,GAAG,IAAI,GAAG,CAAiB;YAC/D,CAAC,YAAY,EAAE,YAAY,CAAC;AAC7B,SAAA,CAAC;;AAIK,IAAA,aAAa,CAClB,QAA4B,EAAA;QAE5B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE;gBACJ,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;AACjE,aAAA;SACF;;AAGI,IAAA,UAAU,CAAC,QAA4B,EAAA;QAC5C,IAAI,CAAC,QAAQ,CAAC,WAAW;AAAE,YAAA,OAAO,KAAK;QAEvC,MAAM,yBAAyB,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAChE,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,iBAAiB,CACvD;AAED,QAAA,QACE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,yBAAyB;;IAIrE,oBAAoB,CAAC,GAAG,GAAG,CAAC,EAAA;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;QAEtD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,oCAAoC,EACpC,CAAC,SAAS,CAAC,SAAS,CAAC,EACrB;gBACE,GAAG;AACJ,aAAA,CACF,CACF;AACD,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;;AAG7C,QAAA,OAAO,UAAU;;+GAlDR,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAjB,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAApC,oCAAoC,EAAA,CAAA,CAAA;;4FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD;;;ACLM,MAAM,0BAA0B,GACrC,IAAI,cAAc,CAA0B,uBAAuB,CAAC;AAE/D,MAAM,qBAAqB,GAA+B;IAC/D,oCAAoC;CACrC;;MCCY,2BAA2B,CAAA;AAGtC,IAAA,WAAA,CAEmB,0BAAsD,EACtD,6BAA4D,EAC5D,QAAkB,EAAA;QAFlB,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAC1B,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAQ,CAAA,QAAA,GAAR,QAAQ;QANV,IAAyB,CAAA,yBAAA,GAA8B,EAAE;QAQxE,IAAI,CAAC,mBAAmB,EAAE;;AAGrB,IAAA,aAAa,CAClB,QAA4B,EAAA;QAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAEhD,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI;AAE5B,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9B,QAAA,OAAO,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC;;IAGnC,mBAAmB,GAAA;QACzB,IAAI,CAAC,0BAA0B,CAAC,OAAO,CACrC,CAAC,UAAkD,KAAI;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAA0B,UAAU,CAAC;AACnE,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,SAAC,CACF;;AAGK,IAAA,cAAc,CACpB,QAA4B,EAAA;QAE5B,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACxC,CAAC,UAAmC,KAAI;AACtC,YAAA,OAAO,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;AACxC,SAAC,CACF;;AAGK,IAAA,aAAa,CAAC,UAAmC,EAAA;AACvD,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,oBAAoB,EAC3C,QAAQ,EACR,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,CAC3B;;AA/CQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,kBAI5B,0BAA0B,EAAA,EAAA,EAAA,KAAA,EAAAkB,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cAF1B,MAAM,EAAA,CAAA,CAAA;;4FAEP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAKI,MAAM;2BAAC,0BAA0B;;;AClBtC,IAAY,2BAEX;AAFD,CAAA,UAAY,2BAA2B,EAAA;AACrC,IAAA,2BAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACzC,CAAC,EAFW,2BAA2B,KAA3B,2BAA2B,GAEtC,EAAA,CAAA,CAAA;;ACFD,IAAY,kBAKX;AALD,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,kBAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC5B,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,GAK7B,EAAA,CAAA,CAAA;;MCLY,oBAAoB,CAAA;IAO/B,WAAmB,CAAA,KAAa,EAAE,SAAiB,EAAA;AACjD,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;;AAEhC;;ACAM,MAAM,gCAAgC,GAC3C,IAAI,cAAc,CAA8B,sBAAsB,CAAC;AAElE,MAAM,mCAAmC,GAAkB;AAChE,IAAA,OAAO,EAAE,gCAAgC;AACzC,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAoC,KAChD,IAAI,oBAAoB,CAAC,GAAG,IAAI,CAAC;CACpC;;MCdY,qBAAqB,CAAA;AAKhC,IAAA,WAAA,CAAmB,MAAyC,EAAA;AAC1D,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;AACvC,QAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB;;AAE1D;;ACHM,MAAM,iCAAiC,GAC5C,IAAI,cAAc,CAA+B,uBAAuB,CAAC;AAEpE,MAAM,oCAAoC,GAAkB;AACjE,IAAA,OAAO,EAAE,iCAAiC;AAC1C,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAqC,KACjD,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC;CACrC;;MCKY,oBAAoB,CAAA;AAC/B,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;;AAMrC,IAAA,WAAA,CACmB,SAA0B,EAC1B,eAAgC,EAEhC,cAA2C,EAE3C,eAA6C,EAAA;QAL7C,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAe,CAAA,eAAA,GAAf,eAAe;QAEf,IAAc,CAAA,cAAA,GAAd,cAAc;QAEd,IAAe,CAAA,eAAA,GAAf,eAAe;QATjB,IAAQ,CAAA,QAAA,GAAG,gBAAgB;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAgC;;AAWhE,IAAA,OAAO,CAAC,IAAiB,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;QAExC,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,UAAU,EAAE;;AAExB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AAEnE,QAAA,KAAK,aAAa,CAChB,IAAI,CAAC;AACF,aAAA,IAAI,CACH,IAAI,CAAC,QAAQ,EACb,IAAI,eAAe,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC,EACzC;YACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,YAAA,YAAY,EAAE,MAAM;SACrB;AAEF,aAAA,IAAI,CACHnB,KAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;AAC1C,gBAAA,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;AAChC,gBAAA,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa;AAC7C,gBAAA,oBAAoB,EAAE,QAAQ,CAAC,QAAQ,CAAC,sBAAsB;AAC/D,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;SACnC,CAAC,CACH,CACJ,CAAC,KAAK,CAAC,CAAC,KAAY,KAAI;AACvB,YAAA,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3C,SAAC,CAAC;;+GAnDO,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA5D,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,eAAA,EAAA,EAAA,EAAA,KAAA,EAWrB,gCAAgC,EAAA,EAAA,EAAA,KAAA,EAEhC,iCAAiC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAbhC,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAYI,MAAM;2BAAC,gCAAgC;;0BAEvC,MAAM;2BAAC,iCAAiC;;;MCpChC,sBAAsB,CAAA;AASjC,IAAA,WAAA,CAAmB,MAIlB,EAAA;AACC,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;AACvC,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG;;AAEtD;;ACPM,MAAM,kCAAkC,GAC7C,IAAI,cAAc,CAAgC,wBAAwB,CAAC;AAEtE,MAAM,qCAAqC,GAAkB;AAClE,IAAA,OAAO,EAAE,kCAAkC;AAC3C,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAsC,KAClD,IAAI,sBAAsB,CAAC,GAAG,IAAI,CAAC;CACtC;;MCHY,sBAAsB,CAAA;AAGjC,IAAA,WAAA,CACmB,SAA0B,EAC1B,eAAgC,EAEhC,cAA6C,EAAA;QAH7C,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAe,CAAA,eAAA,GAAf,eAAe;QAEf,IAAc,CAAA,cAAA,GAAd,cAAc;QANhB,IAAgB,CAAA,gBAAA,GAAG,iBAAiB;;AASrD;;AAEG;IACI,OAAO,CAAC,SAAiB,EAAE,SAAkB,EAAA;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;QAExC,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,UAAU,EAAE;;AAGxB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;AACxC,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,YAAY,EAAE,SAAS;YACvB,SAAS;AACV,SAAA,CAAC;AAEF,QAAA,aAAa,CACX,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,IAAI,CAAC,gBAAgB,EACrB,IAAI,eAAe,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC,EACzC;YACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,YAAA,YAAY,EAAE,MAAM;AACrB,SAAA,CACF,CACF,CAAC,KAAK,CAAC,CAAC,KAAY,KAAI;AACvB,YAAA,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3C,SAAC,CAAC;;AAxCO,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,0EAMvB,kCAAkC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANjC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAOI,MAAM;2BAAC,kCAAkC;;;MCZjC,iBAAiB,CAAA;IAI5B,WAEmB,CAAA,MAAsB,EACtB,sBAA8C,EAAA;QAD9C,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QANxB,IAAU,CAAA,UAAA,GAAG,WAAW;QACxB,IAAQ,CAAA,QAAA,GAAG,SAAS;;AAQ9B,IAAA,gBAAgB,CAAC,WAAwB,EAAA;AAC9C,QAAA,IAAI,WAAW,CAAC,YAAY,EAAE;AAC5B,YAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,KAAK,CAAC;;aAC7C;AACL,YAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,IAAI,CAAC;;;AAIrD;;AAEK;IACG,yBAAyB,CAC/B,WAAwB,EACxB,qBAA8B,EAAA;AAE9B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE;AAC9D,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE;QAC5D,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,WAAW,CAAC,YAAY,CAAC;QAClE,IAAI,CAAC,gBAAgB,CACnB,WAAW,CAAC,aAAa,EACzB,WAAW,CAAC,iBAAiB,CAC9B;;AAGH;;AAEK;IACG,YAAY,CAClB,qBAA8B,EAC9B,YAAoB,EAAA;AAEpB,QAAA,MAAM,UAAU,GAA8B;YAC5C,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,EAAE,EAAE,IAAI,CAAC,UAAU;AACnB,YAAA,GAAG,EAAE,aAAa;AAClB,YAAA,KAAK,EAAE,cAAc;SACtB;AAED,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC3D,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;;QAG7C,IAAI,aAAa,GAAG,KAAK;QAEzB,IAAI,qBAAqB,EAAE;AAEvB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CACjC,IAAI,CAAC,UAAU,CAElB,CAAC,MAAM,GAAG,MAAK;AACd,gBAAA,IAAI,aAAa;oBAAE;gBAEnB,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;gBACvD,aAAa,GAAG,IAAI;AACtB,aAAC;;;AAIL;;AAEK;IACG,gBAAgB,CAAC,GAAW,EAAE,aAAqB,EAAA;AACzD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAE3C,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;AAC5C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,EAAE;;AAGf;;AAEG;IACK,UAAU,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACvD,QAAA,MAAM,cAAc,GAA8B;YAChD,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,EAAE,EAAE,IAAI,CAAC,QAAQ;AACjB,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,mCAAmC;SAC7C;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC;AAExC,QAAA,OAAO,IAAI;;IAGL,WAAW,CAAC,IAAY,EAAE,KAAa,EAAA;AAC7C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACzD,QAAA,KAAK,CAAC,IAAI,GAAG,QAAQ;AACrB,QAAA,KAAK,CAAC,IAAI,GAAG,IAAI;AACjB,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;AACnB,QAAA,OAAO,KAAK;;AAGd;;AAEK;IACG,aAAa,CACnB,OAAoB,EACpB,UAAqC,EAAA;QAErC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACvC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9C,SAAC,CAAC;;AAtHO,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,kBAKlB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAsE,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AALV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAMI,MAAM;2BAAC,WAAW;;;MCNV,uBAAuB,CAAA;AAGlC,IAAA,WAAA,CAEmB,MAAsB,EAAA;QAAtB,IAAM,CAAA,MAAA,GAAN,MAAM;QAJjB,IAAM,CAAA,MAAA,GAAW,EAAE;;AAOpB,IAAA,QAAQ,CAAC,KAAY,EAAA;QAC1B,IAAI,CAAC,KAAK,EAAE;YACV;;AAGF,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK;QAE7B,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAqB;QAEhE,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAK;YACtD,cAAc,CAAC,QAAQ,EAAE;YAEzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI;AAC9B,SAAC,EAAE,cAAc,CAAC,SAAS,CAAsB;;AAG5C,IAAA,WAAW,CAAC,EAAU,EAAA;QAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAEtC,IAAI,CAAC,cAAc,EAAE;YACnB;;QAGF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,UAAU,CAAC;AACnD,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI;;AAlCb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,kBAIxB,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAKI,MAAM;2BAAC,WAAW;;;MCOV,gBAAgB,CAAA;AAC3B,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;;IAkB1C,WACmB,CAAA,oBAA0C,EAC1C,sBAA8C,EAC9C,gBAAkC,EAClC,iBAAoC,EACpC,uBAAgD,EAChD,6BAA4D,EAAA;QAL5D,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACvB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAnBxC,IAAe,CAAA,eAAA,GAA2B,IAAI;AAErC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAgB;QAEpD,IAAyB,CAAA,yBAAA,GAAwB,IAAI;QACrD,IAAmB,CAAA,mBAAA,GAAuB,IAAI;QAErC,IAAgB,CAAA,gBAAA,GAAG,YAAY;QAC/B,IAAkB,CAAA,kBAAA,GAAG,KAAK;QAE1B,IAAoB,CAAA,oBAAA,GAAG,iBAAiB;QACxC,IAAsB,CAAA,sBAAA,GAAG,MAAM;;IAWzC,MAAM,cAAc,CAAC,WAA+B,EAAA;QACzD,IAAI,CAAC,WAAW,EAAE;YAChB;;QAGF,IAAI,CAAC,wBAAwB,EAAE;AAE/B,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;YACpC,EAAE,EAAE,IAAI,CAAC,gBAAgB;YACzB,SAAS,EAAE,IAAI,CAAC,kBAAkB;YAClC,QAAQ,EAAE,MAAK;gBACb,MAAM,oBAAoB,GACxB,IAAI,CAAC,mBAAmB,EAAE,YAAY,IAAI,WAAW,CAAC,YAAY;gBACpE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC;aACjE;AACF,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAChE,WAAW,CAAC,mBAAmB,EAC/B,WAAW,CAAC,mBAAmB,CAChC;AAED,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAC7B,WAAW,CAAC,mBAAmB,EAC/B,WAAW,CAAC,mBAAmB,CAChC;AACD,QAAA,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE;AAEzC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CACnE,CAAC,OAAO,KAAI;AACV,YAAA,IAAI,OAAO,KAAK,2BAA2B,CAAC,iBAAiB,EAAE;gBAC7D;;AAGF,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;AACxC,SAAC,CACF;AAED,QAAA,IAAI,CAAC,iCAAiC,EAAE,WAAW,EAAE;AACrD,QAAA,IAAI,CAAC,iCAAiC;AACpC,YAAA,IAAI,CAAC,eAAe,CAAC,iCAAiC,CAAC,MAAK;AAC1D,gBAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;AACxC,aAAC,CAAC;AAEJ,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;AACtC,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;AAEtC,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;YACpC,EAAE,EAAE,IAAI,CAAC,oBAAoB;YAC7B,SAAS,EAAE,IAAI,CAAC,sBAAsB;YACtC,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;aACvC;AACF,SAAA,CAAC;;AAGI,IAAA,oBAAoB,CAAC,WAAwB,EAAA;QACnD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,WAAW,CAAC;;AAGpE,IAAA,oBAAoB,CAAC,WAAwB,EAAA;AACnD,QAAA,IAAI,CAAC,yBAAyB,EAAE,WAAW,EAAE;AAC7C,QAAA,IAAI,CAAC,yBAAyB;YAC5B,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,aAAa,KAAI;gBAC9D,IAAI,CAAC,aAAa,EAAE;oBAClB;;AAGF,gBAAA,IAAI,aAAa,CAAC,oBAAoB,EAAE;AACtC,oBAAA,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC,oBAAoB;;gBAG/D,IAAI,aAAa,CAAC,MAAM,KAAK,kBAAkB,CAAC,SAAS,EAAE;oBACzD,IAAI,CAAC,sBAAsB,EAAE;AAE7B,oBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,gBAAgB,EACvC,uBAAuB,CAAC,MAAM,CAC/B;AAED,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,IAAI,EAAE;4BACJ,SAAS,EAAE,WAAW,CAAC,SAAS;AACjC,yBAAA;AACF,qBAAA,CAAC;oBACF;;AAGF,gBAAA,IACE,aAAa,CAAC,MAAM,KAAK,kBAAkB,CAAC,SAAS;oBACrD,aAAa,CAAC,YAAY,EAC1B;oBACA,IAAI,CAAC,sBAAsB,EAAE;AAE7B,oBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,iBAAiB,EACxC,uBAAuB,CAAC,MAAM,CAC/B;AAED,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,wBAAA,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,aAAa,CAAC,YAAY;AACjC,qBAAA,CAAC;;gBAGJ,IAAI,aAAa,CAAC,MAAM,KAAK,kBAAkB,CAAC,UAAU,EAAE;oBAC1D,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CACrC,IAAI,CAAC,mBAAmB,IAAI,WAAW,CACxC;AACD,oBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,kBAAkB,EACzC,uBAAuB,CAAC,MAAM,CAC/B;;AAGH,gBAAA,IACE,aAAa,CAAC,MAAM,KAAK,kBAAkB,CAAC,QAAQ;oBACpD,aAAa,CAAC,YAAY,EAC1B;oBACA,IAAI,CAAC,sBAAsB,EAAE;AAE7B,oBAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,gBAAgB,EACvC,uBAAuB,CAAC,MAAM,CAC/B;AAED,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,wBAAA,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,aAAa,CAAC,YAAY;AACjC,qBAAA,CAAC;;AAEN,aAAC,CAAC;;IAGE,sBAAsB,GAAA;QAC5B,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC/D,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACnE,QAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,yBAAyB,EAAE,WAAW,EAAE;;IAGvC,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;;+GA5KtB,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAnD,6BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCNY,cAAc,CAAA;IAGzB,WACmB,CAAA,gBAAkC,EAClC,iBAAoC,EACpC,wBAAkD,EAClD,oBAA0C,EAC1C,4BAA0D,EAAA;QAJ1D,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACxB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAA4B,CAAA,4BAAA,GAA5B,4BAA4B;QAPvC,IAAkB,CAAA,kBAAA,GAAwB,IAAI;;AAU/C,IAAA,YAAY,CAAC,MAAsB,EAAA;AACxC;;;;AAIE;AACF,QAAA,KAAK,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;AAExE,QAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;AACtC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,CACtE,CAAC,YAAY,KAAI;AACf,YAAA,QAAQ,YAAY,CAAC,IAAI;AACvB,gBAAA,KAAK,UAAU;AACb,oBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAC3C,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,CAC9C;AACH,gBAAA,KAAK,WAAW;AACd,oBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAC3C,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,YAAY,CAAC,CACtD;AACH,gBAAA,KAAK,UAAU;AACb,oBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAC3C,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,YAAY,CAAC,CAC9D;;AAEP,SAAC,CACF;;IAGI,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;;+GAzC7B,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAoD,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAhD,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAiD,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,4BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACHK,MAAO,mBAAoB,SAAQ,eAAyB,CAAA;AAChE,IAAA,WAAA,CAAoC,gBAAkC,EAAA;AACpE,QAAA,KAAK,EAAE;QAD2B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;;AAI7C,IAAA,cAAc,CAAC,QAAuB,EAAA;AAC3C,QAAA,MAAM,eAAe,GAAG,CAAC,WAAuB,KAC9C,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC;AAEtD,QAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;;+GATvC,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAtE,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCJY,uBAAuB,CAAA;AAMlC,IAAA,WAAA,CAAmB,UAA4C,EAAA;AAC7D,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,YAAY;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,QAAQ;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,KAAK;AACpC,QAAA,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG;;AAE5B;;ACNM,MAAM,mCAAmC,GAC9C,IAAI,cAAc,CAChB,0BAA0B,CAC3B;AAEI,MAAM,sCAAsC,GAAkB;AACnE,IAAA,OAAO,EAAE,mCAAmC;AAC5C,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAuB,KACnC,IAAI,uBAAuB,CAAC,GAAG,IAAI,CAAC;CACvC;;MCNY,uBAAuB,CAAA;AAGlC,IAAA,WAAA,CACmB,eAAgC,EAChC,SAA0B,EAE1B,8BAA8D,EAAA;QAH9D,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAS,CAAA,SAAA,GAAT,SAAS;QAET,IAA8B,CAAA,8BAAA,GAA9B,8BAA8B;QANhC,IAAQ,CAAA,QAAA,GAAG,cAAc;;AASnC,IAAA,sBAAsB,CAC3B,UAA4C,EAAA;AAE5C,QAAA,MAAM,kBAAkB,GAAG;AACzB,YAAA,GAAG,IAAI,CAAC,8BAA8B,CAAC,UAAU,CAAC;AAClD,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;SACzC;AAED,QAAA,MAAM,mBAAmB,GAAG,IAAI,GAAG,CACjC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAG,EAAA,IAAI,CAAC,QAAQ,CAAA,YAAA,CAAc,CACxD;AAED,QAAA,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,KAC1D,mBAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAChE;AAED,QAAA,OAAO,mBAAmB,CAAC,QAAQ,EAAE;;AA1B5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,0EAMxB,mCAAmC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANlC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAOI,MAAM;2BAAC,mCAAmC;;;MCZzB,iBAAiB,CAAA;IAM9B,UAAU,GAAA;AACf,QAAA,OAAO,KAAK;;AAGP,IAAA,MAAM;AAEN,IAAA,SAAS;IAET,aAAa,GAAA;AAClB,QAAA,OAAO,KAAK;;AAGP,IAAA,cAAc,CACnB,WAAuD,EAAA;AAEvD,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;AAGzB,IAAA,gBAAgB,CAAC,MAA4B,EAAA;AAClD,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;;+GAzBT,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACHM,MAAM,oBAAoB,GAAG,CAClC,KAAc,KACiB;IAC/B,OAAO,KAAK,YAAY,kBAAkB;AAC5C,CAAC;;ACIK,MAAO,mCAAoC,SAAQ,iBAAiB,CAAA;AAGxE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAHF,IAAI,CAAA,IAAA,GAAG,qCAAqC;;IAM5C,UAAU,GAAA;AACf,QAAA,IAAI,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,KAAK,UAAU;;AAGzD,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,UAAU;;AAG5C,QAAA,OAAO,KAAK;;IAGP,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;;AAG1B,IAAA,SAAS,CAAC,SAAqB,EAAA;AACrC,QAAA,IACE,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvC,YAAA,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EACnC;YACA;;AAGF,QAAA,MAAM,MAAM,GACV,IAAI,CAAC,WAAW,YAAY;AAC1B,cAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAChC,cAAE,IAAI,CAAC,WAAW,CAAC,MAAM;QAE7B,MAAM,YAAY,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAI;AAC1C,YAAA,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS;AACjC,SAAC,CAAC;QAEF,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,SAAS,GAAA,GAAA;;;+GA1Cf,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAnC,mCAAmC,EAAA,CAAA,CAAA;;4FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C;;;ACDK,MAAO,4BAA6B,SAAQ,iBAAiB,CAAA;AAGjE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAHF,IAAI,CAAA,IAAA,GAAG,8BAA8B;;IAMrC,UAAU,GAAA;QACf,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC3C,YAAA,OAAO,KAAK;;AAGd,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAChE,CAAC,KAAK,KAAI;AACR,YAAA,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,iBAAiB;AACpD,SAAC,CACF;AAED,QAAA,QACE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,gBAAgB;;IAIlE,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;;AAG1B,IAAA,SAAS,CAAC,SAAqB,EAAA;QACrC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC3C;;AAGF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AACvE,YAAA,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS;AACjC,SAAC,CAAC;QAEF,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,SAAS,GAAA,GAAA;;;+GAtCf,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA5B,4BAA4B,EAAA,CAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;ACEK,MAAO,4BAA6B,SAAQ,iBAAiB,CAAA;AAGjE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAHF,IAAI,CAAA,IAAA,GAAG,8BAA8B;;IAMrC,UAAU,GAAA;QACf,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC3C,YAAA,OAAO,KAAK;;AAGd,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAChE,CAAC,KAAK,KAAI;AACR,YAAA,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,iBAAiB;AACpD,SAAC,CACF;AAED,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,KAAK,SAAS,IAAI,CAAC,gBAAgB;;IAGtE,aAAa,GAAA;AAClB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAE7C,QAAA,OAAO,aAAa,CAAC,MAAM,KAAK,CAAC;;IAG3B,gBAAgB,GAAA;QACtB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC3C,YAAA,OAAO,EAAE;;AAGX,QAAA,QACE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CACzC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAA,GAAA,0BAAwB,KAAK,CAAC,WAAW,CACpE,IAAI,EAAE;;+GAnCA,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA5B,4BAA4B,EAAA,CAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;ACAM,MAAM,wBAAwB,GACnC,IAAI,cAAc,CAA0B,qBAAqB,CAAC;AAE7D,MAAM,mBAAmB,GAA4B;IAC1D,mCAAmC;IACnC,4BAA4B;IAC5B,4BAA4B;CAC7B;;MCFY,uBAAuB,CAAA;AAClC,IAAA,WAAA,CAEmB,uBAAgD,EAChD,6BAA4D,EAC5D,QAAkB,EAAA;QAFlB,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACvB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAQ,CAAA,QAAA,GAAR,QAAQ;;IAGpB,gCAAgC,CACrC,WAAuD,EACvD,MAA4B,EAAA;AAE5B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAEhD,MAAM,oBAAoB,GAAG,UAAU,CAAC,MAAM,CAC5C,CAAC,iBAAoC,KAAI;AACvC,YAAA,iBAAiB,CAAC,cAAc,CAAC,WAAW,CAAC;AAC7C,YAAA,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC1C,YAAA,OAAO,iBAAiB,CAAC,UAAU,EAAE;AACvC,SAAC,CACF;AAED,QAAA,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAAC;AAClD,QAAA,OAAO,oBAAoB;;IAGrB,sBAAsB,GAAA;QAC5B,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CACrC,CAAC,sBAAwD,KACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAoB,sBAAsB,CAAC,CAC/D;;AAGK,IAAA,uBAAuB,CAAC,UAA+B,EAAA;QAC7D,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE;AAExB,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,2BAA2B,EAClD,QAAQ,EACR,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,CACvD;;AAxCQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,kBAExB,wBAAwB,EAAA,EAAA,EAAA,KAAA,EAAA4D,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAFvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;0BAGI,MAAM;2BAAC,wBAAwB;;;MCwDvB,cAAc,CAAA;AAGzB,IAAA,IAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,CAAC,IAAI,CAACd,QAAM,CAAC,OAAO,CAAC,CAAC;;AAG1E,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;;AAG1C,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;;AAG3C,IAAA,IAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;;AAsBvC,IAAA,WAAA,CACmB,aAA4B,EAC5B,iBAAoC,EACpC,aAA4B,EAC5B,WAAwB,EACxB,WAAwB,EACxB,aAA4B,EAC5B,qBAA4C,EAC5C,sBAA8C,EAC9C,iBAAoC,EACpC,2BAAwD,EACxD,oBAA0C,EAC1C,cAA8B,EAC9B,mBAAwC,EACxC,eAAgC,EAChC,cAA8B,EAC9B,wBAAkD,EAClD,uBAAgD,EAChD,uBAAgD,EAChD,gBAAkC,EAClC,6BAA4D,EAAA;QAnB5D,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAA2B,CAAA,2BAAA,GAA3B,2BAA2B;QAC3B,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACxB,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACvB,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACvB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAzDzC,IAAI,CAAA,IAAA,GAA4B,IAAI;QAkBnC,IAAI,CAAA,IAAA,GAA+C,IAAI;QACvD,IAAc,CAAA,cAAA,GAA0B,IAAI;QAC5C,IAAc,CAAA,cAAA,GAAkB,IAAI;QACpC,IAAM,CAAA,MAAA,GAAY,EAAE;QACpB,IAAiB,CAAA,iBAAA,GAAG,KAAK;AAGzB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAC9B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AACzB,QAAA,IAAA,CAAA,aAAa,GAC5B,IAAI,eAAe,CAA2B,IAAI,CAAC;AACpC,QAAA,IAAA,CAAA,uBAAuB,GACtC,IAAI,eAAe,CAA0B,IAAI,CAAC;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CACnD,IAAI,CACL;QAEO,IAAkB,CAAA,kBAAA,GAAG,KAAK;;IAyB3B,MAAM,UAAU,CACrB,MAA4B,EAAA;AAE5B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,EAAQ;AACnC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,EAAQ;AACvC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAE9B,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AAEpB,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;;AAGhD,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC;QAExD,IAAI,CAAC,6BAA6B,EAAE;AAEpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAEhC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QAC9B,IAAI,CAAC,uBAAuB,EAAE;AAE9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAEpD,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AACrD,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;AAEvC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE;QAE7C,IAAI,gBAAgB,EAAE;AACpB,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE;YAEtC,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC;;;QAItD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;AACvD,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;QAEpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAEnD,QAAA,MAAM,cAAc,GAAG;AACrB,YAAA,UAAU,CAAC,sBAAsB;AACjC,YAAA,UAAU,CAAC,2BAA2B;SACvC;QAED,OAAO;AACL,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CACxB,CAAC,KAAY,KACX,KAAK,EAAE,SAAS,KAAoB,GAAA;gBACpC,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAkB,CAAC,CACtD;AACD,YAAA,mBAAmB,EAAE,gBAAgB;YACrC,UAAU,EAAE,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;SACtE;;AAGI,IAAA,MAAM,MAAM,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;;AAGnC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC5B,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YACpC;;QAGF,IAAI,CAAC,SAAS,EAAE;QAEhB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CACxC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KACd,IAAI,KAAK,mBAAmB,IAAI,KAAK,KAAoB,GAAA,uBAC5D;QACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CACrD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CACZ;AAED,QAAA,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC;AAE3C,QAAA,IAAI,CAAC,IAAI,GAAG,cAAc;QAC1B,IAAI,CAAC,6BAA6B,EAAE;AAEpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAEhC,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC;;AAExD,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC;;AAG9C,QAAA,IACE,cAAc,CAAC,cAAc,KAAK,UAAU,CAAC,MAAM;AACnD,YAAA,cAAc,CAAC,UAAU,CAAC,WAAW,EACrC;YACA,IAAI,CAAC,UAAU,EAAE;YACjB;;QAGF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC;AAEvE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AAEpD,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AAE3D,QAAA,OAAO,UAAU;;IAGZ,MAAM,gBAAgB,CAAC,MAAgB,EAAA;AAI5C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,6CAA6C,EAAE;AAC7D,gBAAA,SAAS,CAAC,SAAS;AACpB,aAAA,CAAC,CACH;AACD,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;;QAGnC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CACxC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KACd,IAAI,KAAK,mBAAmB,IAAI,KAAK,KAAoB,GAAA,uBAC5D;QACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CACrD,MAAM,IAAI,IAAI,CAAC,MAAM,EACrB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CACZ;AAED,QAAA,IAAI,CAAC,IAAI,GAAG,cAAc;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAEhC,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC;;AAExD,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAE9C,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AAEpD,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAE3D,OAAO;AACL,YAAA,QAAQ,EAAE,cAAc;YACxB,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC;SACjE;;IAGI,uBAAuB,GAAA;AAC5B,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB;AACvD,QAAA,IAAI,CAAC,gBAAgB;YAAE;QAEvB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KACxC,uBAAuB,CAAC,GAAG,CAAC,IAAkB,CAAC,CAChD,CACF;AAED,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC/B,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE;AAEtC,YAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM;gBAAE;YAEb,MAAM,eAAe,GAAG,gBAAgB,CAAC,SAAS,CAAC,EAAE,YAAY;YAEjE,KAAK,CAAC,KAAK,GAAG,MAAM,CAClB,MAAM,CAAC,SAAS,CAAC,eAAe;AAC9B,kBAAE;AACF,kBAAE,MAAM,CAAC,YAAY,CACxB;;;IAIE,SAAS,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,IAAI,YAAY,cAAc,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;;QAG/B,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,IAAI,EAAE;;AAGtC,IAAA,gBAAgB,CAAC,IAAgB,EAAA;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;;QAGb,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB;;AAGI,IAAA,MAAM,kCAAkC,GAAA;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;;QAG7C,MAAM,cAAc,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC;AAEpE,QAAA,MAAM,qCAAqC,GAAG,wBAAwB,CACpE,IAAI,CAAC,MAAM;cAET,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;cACrC,KAAK;QAET,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,cAAc,CAAC,YAAY;AACjC,YAAA,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa;kBACxC,GAAA;AACD,kBAAkB,GAAA;AACpB,YAAA,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YACzC,MAAM,EAAE,cAAc,CAAC,MAAM;AAC7B,YAAA,cAAc,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI;YAC9D,OAAO,EAAE,cAAc,CAAC,OAAO;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;YAC9C,qCAAqC;YACrC,2BAA2B,EACzB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,+BAA+B,IAAI,KAAK;AACzE,SAAA,CAAC;;IAGG,SAAS,GAAA;QACd,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;;QAG7C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK;;IAGpC,kBAAkB,GAAA;QACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;;QAG7C,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAChD,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAChD;AAED,QAAA,MAAM,MAAM,GAAG;YACb,mBAAmB,EAAE,CAAC,CAAC,oBAAoB;AAC3C,YAAA,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa;AAClD,YAAA,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS;AACxC,YAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK;AACjC,YAAA,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI;YAC9C,WAAW,EAAE,oBAAoB,EAAE,KAAK;SACzC;QACD,OAAO;AACL,YAAA,GAAG,MAAM;YACT,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,MAAM,CAAC;SACtE;;IAGI,MAAM,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,IAAI,YAAY,cAAc,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG;;AAGjC,QAAA,IAAI,IAAI,CAAC,IAAI,YAAY,kBAAkB,EAAE;YAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,IAAI;;AAG3C,QAAA,OAAO,IAAI;;IAGN,mBAAmB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,YAAY,cAAc,EAAE;YACvC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;;AAG3C,QAAA,IAAI,IAAI,CAAC,IAAI,YAAY,kBAAkB,EAAE;YAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;;AAGrD,QAAA,OAAO,IAAI;;IAGN,MAAM,QAAQ,CAAC,KAAY,EAAA;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,KAAK,CAAC;QAElE,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;;QAGpC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGlC,IAAA,MAAM,cAAc,CACzB,YAAmB,EACnB,MAAe,EAAA;AAEf,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;;IAGnE,UAAU,GAAA;QACf,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;;QAG7C,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGtC,iBAAiB,GAAA;QACtB,OAAO,IAAI,CAAC,cAAc;;IAGrB,oBAAoB,CAAC,SAAiB,EAAE,SAAoB,EAAA;AACjE,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CACnC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,SAAS,EACT,SAAS,CACV;;;AAIE,IAAA,iBAAiB,CAAC,SAAqB,EAAA;QAC5C,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,SAAS,CAAC;;AAG/C,IAAA,MAAM,SAAS,GAAA;QACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;;AAG7C,QAAA,MAAM,MAAM,GAAwB;AAClC,YAAA,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;YAChC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;AAC7C,YAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;YACpC,MAAM,EACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,KAAK;gBAChE,IAAI;YACN,oBAAoB,EAAE,IAAI,CAAC;kBACxB,GAAA;AACD,kBAAkB,GAAA;SACrB;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;;AAGtC,IAAA,MAAM,iBAAiB,GAAA;QAC5B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;AAE1C,QAAA,IAAI,CAAC;aACF,iBAAiB,CAAC,OAA4B;AAC9C,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aACZ,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpC,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,CAC9C;AACH,SAAC,CAAC;;AAGC,IAAA,cAAc,CAAC,KAAY,EAAA;QAChC,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC;;IAG5C,gBAAgB,CAAC,IAAY,EAAE,KAAa,EAAA;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;AACxC,QAAA,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC;;IAGvB,wBAAwB,CAAC,IAAgB,EAAE,KAAa,EAAA;QAC7D,MAAM,+BAA+B,GACnC,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC;AAEzC,QAAA,MAAM,eAAe,GACnB,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,gBAAgB;AAErD,QAAA,IAAI,CAAC,+BAA+B,IAAI,CAAC,eAAe;YAAE;QAE1D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;AACxC,QAAA,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC;;IAGvB,gBAAgB,CAAC,IAAY,EAAE,KAAqB,EAAA;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;YAC9B;;QAGF,QAAQ,KAAK;AACX,YAAA,KAAK,cAAc,CAAC,IAAI,EAAE;gBACxB,WAAW,CAAC,aAAa,EAAE;AAC3B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;gBAC1B;;AAEF,YAAA,KAAK,cAAc,CAAC,KAAK,EAAE;gBACzB,WAAW,CAAC,eAAe,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;gBAC1B;;;AAIJ,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;;IAG/B,aAAa,CAAC,IAAY,EAAE,KAAa,EAAA;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AAC7C,YAAA,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI;AAC5B,SAAC,CAAC;QAEF,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AACtC,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;AACvB,oBAAA,KAAK,CAAC,KAAK,GAAG,KAAK;;AAGrB,gBAAA,OAAO,KAAK;AACd,aAAC,CAAC;YACF;;AAGF,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,WAAW,EAAiB,GAAA;AAC5B,YAAA,SAAS,EAAkB,GAAA;SACnB;AAEV,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGlB,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAEpB,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;;AAG5B,IAAA,kBAAkB,CAAC,OAAoB,EAAE,WAAW,GAAG,IAAI,EAAA;QACjE,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC;;AAG1D,IAAA,mBAAmB,CAAC,EAC1B,UAAU,EACV,cAAc,GAIf,EAAA;QACC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;;AAG1D,IAAA,oBAAoB,CAAC,IAAsB,EAAA;QACjD,MAAM,gBAAgB,GAAqB,EAAE;AAE7C,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnC,gBAAgB,CAAC,IAAI,CAAC,GAAG;AACvB,gBAAA,IAAI,EAAE,IAAI;gBACV,gBAAgB,EAAE,OAAO,CAAC,MAAM;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gBAAA,SAAS,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI;gBACvC,SAAS,EAAE,OAAO,CAAC,OAAO;aAC3B;AACH,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC;;AAG7C,IAAA,gBAAgB,CAAC,QAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,QAAQ,CAAC;;AAG3C,IAAA,gBAAgB,CACtB,IAAsB,EACtB,MAAe,EACf,MAA4B,EAAA;QAE5B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC;AACd,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC;AACzC,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxC,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AACjC,SAAC,CAAC;QAEJ,IAAI,CAAC,WAAW,CAAC;AACd,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,oBAAoB,KAAI;AAClC,YAAA,QAAQ,oBAAoB,CAAC,KAAK,CAAC,IAAI;gBACrC,KAAK,UAAU,CAAC,UAAU;oBACxB,IAAI,CAAC,mBAAmB,CAAC;AACvB,wBAAA,UAAU,EAAE,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU;AAC/D,wBAAA,cAAc,EACZ,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc;AAC1D,qBAAA,CAAC;;AAER,SAAC,CAAC;;IAGE,oBAAoB,GAAA;QAC1B,IAAI,CAAC,qBAAqB,CAAC;AACxB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,cAAc,MAAM,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC;;AAGlE,IAAA,uBAAuB,CAAC,IAAsB,EAAA;AACpD,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;AACjC,aAAA,SAAS,CAAC,CAAC,MAAyB,KAAI;AACvC,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC/B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,SAAC,CAAC;;AAGN;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE;QAChC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,UAAU;;;AAIpC,IAAA,gBAAgB,CAAC,IAA0B,EAAA;AACjD,QAAA,IAAI,IAA0B;AAC9B,QAAA,IAAI,IAAI,YAAY,kBAAkB,EAAE;YACtC,IAAI,GAAG,YAAY;;AACd,aAAA,IAAI,IAAI,YAAY,cAAc,EAAE;YACzC,IAAI,GAAG,QAAQ;;aACV;YACL,IAAI,GAAG,MAAM;;AAEf,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,IAAI;YACJ,IAAI;AACJ,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACjC,YAAA,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AAChD,SAAA,CAAC;;IAGI,qBAAqB,GAAA;QAC3B,MAAM,QAAQ,GAAI,IAAI,CAAC,IAA2B,CAAC,WAAW,EAAE,QAAQ;QAExE,OAAO,QAAQ,IAAI,EAAE;;IAGf,aAAa,GAAA;AACnB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAA0B;AAChD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AACzB,YAAA,OAAO,KAAK;;AAGd,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU;AACxD,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ;QAEjD,MAAM,oBAAoB,GAAG,IAAI,CAAC,6BAA6B,CAC7D,IAAI,CAAC,MAAM,CACZ;QAED,OAAO,CAAC,CAAC,gBAAgB,IAAI,WAAW,KAAK,oBAAoB;;AAG3D,IAAA,6BAA6B,CACnC,IAAyC,EAAA;AAMzC,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC1B,OAAO;gBACL,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;gBACjD,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;;QAGH,OAAO;AACL,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,EAAE;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,IAAI;SAC3C;;IAGK,6BAA6B,GAAA;AACnC,QAAA,MAAM,mBAAmB,GACvB,IAAI,CAAC,uBAAuB,CAAC,gCAAgC,CAC3D,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CACZ;AAEH,QAAA,mBAAmB,CAAC,OAAO,CAAC,CAAC,QAA2B,KAAI;YAC1D,QAAQ,CAAC,MAAM,EAAE;AACnB,SAAC,CAAC;;AAGI,IAAA,0BAA0B,CAAC,MAA4B,EAAA;AAC7D,QAAA,MAAM,mBAAmB,GACvB,IAAI,CAAC,uBAAuB,CAAC,gCAAgC,CAC3D,IAAI,CAAC,IAAI,EACT,MAAM,CACP;AAEH,QAAA,mBAAmB,CAAC,OAAO,CAAC,CAAC,QAA2B,KAAI;YAC1D,QAAQ,CAAC,SAAS,EAAE;AACtB,SAAC,CAAC;;AAGI,IAAA,6BAA6B,CAAC,MAA4B,EAAA;AAChE,QAAA,MAAM,mBAAmB,GACvB,IAAI,CAAC,uBAAuB,CAAC,gCAAgC,CAC3D,IAAI,CAAC,IAAI,EACT,MAAM,CACP;AAEH,QAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,QAA2B,KAAI;AAC9D,YAAA,OAAO,QAAQ,CAAC,aAAa,EAAE;AACjC,SAAC,CAAC;;AAGI,IAAA,sBAAsB,CAAC,cAA8B,EAAA;AAC3D,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM;YAAE;AAEpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAClD,YAAA,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;AACxB,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,KAAK;gBACnE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC;;AAEjC,YAAA,OAAO,GAAG;AACZ,SAAC,EAAE,IAAI,GAAG,EAAkB,CAAC;AAE7B,QAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,KACjC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,SAAS,CAAC,CACtC;;IAGK,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,aAAa,EACpC,uBAAuB,CAAC,KAAK,CAC9B;;IAGK,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,eAAe,EACtC,uBAAuB,CAAC,KAAK,EAC7B;gBACE,aAAa,EAAE,eAAe,CAAC,WAAW;AAC3C,aAAA,CACF;;AAGH,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,WAAW,EAClC,uBAAuB,CAAC,KAAK,EAC7B;YACE,aAAa,EAAE,eAAe,CAAC,WAAW;AAC3C,SAAA,CACF;;+GAvuBQ,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA6B,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACtEM,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;AACL,CAAA,CAAC;;AClBF,MAAM,WAAW,GAAG,uCAAuC;AAC3D,MAAM,aAAa,GAAG,yCAAyC;AAE/D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAiB;IAC1C,CAAC,QAAQ,EAAE,aAAa,CAAC;IACzB,CAAC,SAAS,EAAE,aAAa,CAAC;IAC1B,CAAC,OAAO,EAAE,aAAa,CAAC;IACxB,CAAC,QAAQ,EAAE,aAAa,CAAC;IACzB,CAAC,UAAU,EAAE,aAAa,CAAC;IAC3B,CAAC,eAAe,EAAE,aAAa,CAAC;IAChC,CAAC,SAAS,EAAE,aAAa,CAAC;AAC3B,CAAA,CAAC;AAEK,MAAM,WAAW,GAAG,CAAC,GAAY,KAAY;IAClD,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,OAAO,WAAW;;IAGpB,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW;AAC5C,CAAC;;MCvBY,mBAAmB,CAAA;AAI9B,IAAA,WAAA,CAAoC,eAAgC,EAAA;QAAhC,IAAe,CAAA,eAAA,GAAf,eAAe;QAHnC,IAAgB,CAAA,gBAAA,GAAG,CAAC;QACpB,IAAU,CAAA,UAAA,GAAG,qCAAqC;;AAIlE,IAAA,IAAW,GAAG,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC/B,YAAA,OAAO,uCAAuC;;QAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI;QACxD,MAAM,SAAS,GACb,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,oBAAoB,EAAE,iBAAiB;YACpE,IAAI,CAAC,gBAAgB;AACvB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;AACjD,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,UAAU,CAAsB,mBAAA,EAAA,SAAS,CAAa,UAAA,EAAA,QAAQ,CAAY,SAAA,EAAA,UAAU,CAAe,YAAA,EAAA,SAAS,EAAE;;+GAhBpH,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA1G,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCAY,iBAAiB,CAAA;AAH9B,IAAA,WAAA,GAAA;QAIkB,IAAU,CAAA,UAAA,GAAG,YAAY;AAC1C;+GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCQY,YAAY,CAAA;AACvB,IAAA,IAAY,WAAW,GAAA;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI;;AAGlD,IAAA,IAAY,SAAS,GAAA;AACnB,QAAA,MAAM,WAAW,GACf,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa;QAEvE,QAAQ,IAAI;YACV,KAAK,WAAW,KAAK,IAAI;AACvB,gBAAA,OAAO,IAAI;YACb,KAAK,WAAW,KAAK,IAAI;AACvB,gBAAA,OAAO,IAAI;AACb,YAAA,KAAK,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AAC/B,gBAAA,OAAO,IAAI;AACb,YAAA;AACE,gBAAA,OAAO,OAAO;;;AAIpB,IAAA,WAAA,CACmB,cAA8B,EAC9B,eAAgC,EAChC,mBAAwC,EACxC,iBAAoC,EAAA;QAHpC,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;;AAG7B,IAAA,uBAAuB,CAAC,GAAY,EAAA;QACzC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,YAAA,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG;AAC7C,YAAA,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC;AAC/B,YAAA,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,UAAU;SAC9C;;+GAnCQ,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA2G,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAlG,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAmG,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCAY,uBAAuB,CAAA;AAGlC,IAAA,WAAA,CACmB,mBAAwC,EACxC,eAAgC,EAChC,SAA0B,EAAA;QAF1B,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAS,CAAA,SAAA,GAAT,SAAS;QALX,IAAW,CAAA,WAAA,GAAG,qBAAqB;;AAQ7C,IAAA,MAAM,wBAAwB,CACnC,EAAU,EACV,IAAY,EAAA;AAEZ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;AAExC,QAAA,MAAM,UAAU,GAIZ;AACF,YAAA,YAAY,EAAE,KAAK;YACnB,EAAE;YACF,IAAI;SACL;AAED,QAAA,OAAO,aAAa,CAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,IAAI,CAAC,WAAW,EAChB,IAAI,eAAe,CAAC,UAAkD,CAAC,EACvE;YACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,YAAA,YAAY,EAAE,MAAM;AACrB,SAAA,CACF;aAEA,IAAI,CAAC,YAAW;YACf,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5C,YAAA,OAAO,IAAI;AACb,SAAC;aACA,KAAK,CAAC,MAAK;AACV,YAAA,OAAO,KAAK;AACd,SAAC,CAAC;;+GA5CK,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAArG,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCCY,gBAAgB,CAAA;AAQ3B,IAAA,WAAA,CAEmB,MAAsB,EAAA;QAAtB,IAAM,CAAA,MAAA,GAAN,MAAM;QATR,IAAS,CAAA,SAAA,GAAG,IAAI;AAChB,QAAA,IAAA,CAAA,mBAAmB,GAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC5D,IAAkB,CAAA,kBAAA,GAAG,KAAK;QAC1B,IAAiB,CAAA,iBAAA,GAAgC,EAAE;QACnD,IAAiB,CAAA,iBAAA,GAAgC,EAAE;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAA6B;;IAOnE,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;YAChE,OAAO,EAAE,EAAE;;QAGb,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,MAC5B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAC1C;AAED,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC,KAAgC,KAC/D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CACzB;QAED,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAC9BqD,KAAG,CAAuC,MAAK;AAC7C,YAAA,MAAM,KAAK,GAAc;AACvB,gBAAA,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC9B,gBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;oBACzB,GAAG,IAAI,CAAC,iBAAiB;oBACzB,GAAG,IAAI,CAAC,iBAAiB;iBAC1B,CAAC;AACF,gBAAA,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM;gBAC9C,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC5D,gBAAA,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM;gBAC9C,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC;aAC7D;YAED,IAAI,CAAC,aAAa,EAAE;AAEpB,YAAA,OAAO,KAAK;SACb,CAAC,CACH;;AAGK,IAAA,YAAY,CAAC,KAAgC,EAAA;AACnD,QAAA,MAAM,YAAY,GAAY,KAAK,CAAC,IAAI,CAAC,QAAQ,CAC/C,aAAa,IAAI,aAAa,CAC/B;QAED,MAAM,MAAM,GAAG,EAAE;AACjB,QAAA,MAAM,YAAY,GAChB,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AAEhD,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,YAAY,EAAE;AAC3C,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGpC,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,YAAY,EAAE;AAC3C,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGpC,QAAA,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5C,YAAA,MAAM,gBAAgB,GACpB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC;YAC/D,MAAM,cAAc,GAClB,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;YAE/C,IAAI,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;;AAI9B,QAAA,IAAI,YAAY,IAAI,YAAY,EAAE;AAChC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAI3B,IAAA,cAAc,CAAC,QAAmC,EAAA;AACxD,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAG/B,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;;IAGrB,YAAY,GAAA;AAClB,QAAA,MAAM,gBAAgB,GAAkB,IAAI,OAAO,EAAE;QAErD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,SAAiB,KAAI;AACrD,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;AACxE,SAAC,CAAC;AAEF,QAAA,OAAO,gBAAgB;;IAGjB,cAAc,GAAA;AACpB,QAAA,MAAM,kBAAkB,GACtB,IAAI,OAAO,EAAE;AAEf,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;AACnC,YAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAClD,CAAC,IAAkC,KAAI;gBACrC,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,KAAuB,KAAU;AAC1D,oBAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAkC,CAAC;AACpE,iBAAC,CAAC;AACJ,aAAC,CACF;YAED,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;;AAGhD,QAAA,OAAO,kBAAkB;;IAGnB,iBAAiB,GAAA;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;AAGrE,IAAA,WAAW,CAAC,OAAoC,EAAA;AACtD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,CAAC;;AAGV,QAAA,MAAM,oBAAoB,GAA8B,OAAO,CAAC,MAAM,CACpE,CAAC,IAAI,EAAE,OAAO,MAAM,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,CACzE;AACD,QAAA,MAAM,mBAAmB,GAA8B,OAAO,CAAC,MAAM,CACnE,CAAC,IAAI,EAAE,OAAO,KACZ,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,OAAO,CAC1D;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CACf,mBAAmB,CAAC,WAAW,GAAG,oBAAoB,CAAC,SAAS,CACjE;;IAGK,aAAa,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAC7B,QAAQ,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EACxC,MAAM,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,CACtC;;AAlJQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBASjB,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AATV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAUI,MAAM;2BAAC,WAAW;;;MCLV,kBAAkB,CAAA;AAM7B,IAAA,IAAY,oBAAoB,GAAA;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC,UAAU,CAE9C;;AAGf,IAAA,IAAY,OAAO,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE,WAAW;;AAGhD,IAAA,IAAY,MAAM,GAAA;AAChB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,WAAW;QAE3D,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;AAC/C,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,WAAW,GAAG,IAAI,CAAC,OAAO;;AAGnC,IAAA,WAAA,CACmB,6BAA4D,EAC5D,gBAAkC,EAElC,MAAsB,EACtB,IAAY,EAAA;QAJZ,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAEhB,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAI,CAAA,IAAA,GAAJ,IAAI;AA9BN,QAAA,IAAA,CAAA,qBAAqB,GACpC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAE9C;;IA8BR,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;YAC7B;;AAGF,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAC/B,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,gBAAgB,EAAE;AACzB,SAAC,CAAC;;IAGI,cAAc,GAAA;QAKpB,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC7D,YAAA,OAAO,IAAI;;QAGb,MAAM,WAAW,GACf,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC5B,CAAC,WAAsC,KACrC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,EAAG,aAAa,CAAA,KAAA,CAAO,CAAC;YAClD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAA,KAAA,CAAO,CAAC,CACrD;QAEH,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,IAAI;;QAGb,OAAO;AACL,YAAA,QAAQ,EAAE,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,UAAU;YAC1D,WAAW,EACT,IAAI,CAAC,qBAAqB,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;YAClE,aAAa,EAAE,WAAW,CAAC,QAAQ;SACpC;;AAGK,IAAA,eAAe,CACrB,IAAY,EACZ,KAAgC,EAChC,UAIC,EAAA;AAED,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB;;AAGF,QAAA,MAAM,YAAY,GAAoC;AACpD,YAAA,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;SACxB;QAED,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,UAAkB,KAAU;AAC3D,gBAAA,MAAM,WAAW,GACf,UAAU,CAAC,UAAqC,CAAC;AACnD,gBAAA,IAAI,WAAW,IAAI,IAAI,EAAE;oBACvB,YAAY,CAAC,UAAqC,CAAC;wBACjD,WAAW,CAAC,QAAQ,EAAE;;AAE5B,aAAC,CAAC;;AAGJ,QAAA,KAAK,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAC1C,IAAI,EACJ,uBAAuB,CAAC,MAAM,EAC9B,YAAY,CACb;;IAGK,aAAa,GAAA;QACnB,MAAM,UAAU,GAAG,MACjB,KAAK,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAErE,QAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE;AACtC,YAAA,UAAU,EAAE;;aACP;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,UAAU,EAAE,CAAC;;;IAIpD,oBAAoB,GAAA;AAC1B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;QACzC,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE;gBAClD,UAAU,EAAE,WAAW,CAAC,WAAW;gBACnC,UAAU,EAAE,WAAW,CAAC,aAAa;AACtC,aAAA,CAAC;;QAEJ,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;QAC7C,IAAI,CAAC,aAAa,EAAE;;IAGd,gBAAgB,GAAA;QACtB,MAAM,SAAS,GACb,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AAEtC,QAAA,SAAS,CAAC,SAAS,CAAC,CAAC,KAAgB,KAAI;AACvC,YAAA,KAAK,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAC1C,CAAA,WAAA,EAAc,KAAK,CAAC,IAAI,CAAE,CAAA,EAC1B,uBAAuB,CAAC,MAAM,EAC9B;AACE,gBAAA,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBAChC,aAAa,EAAE,eAAe,CAAC,cAAc;AAC7C,gBAAA,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAClC,aAAA,CACF;AACH,SAAC,CAAC;;AAjJO,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,yFA6BnB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA7BV,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BA8BI,MAAM;2BAAC,WAAW;;;MCpCV,6BAA6B,CAAA;IACxC,WACmB,CAAA,qBAA4C,EAC5C,mBAAwC,EAAA;QADxC,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;;AAG/B,IAAA,MAAM,yBAAyB,GAAA;QACpC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACvD,YAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;AAC1C,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;AACnC,SAAA,CAAC;QAEF,OAAO;AACL,YAAA,cAAc,EAAE;gBACd,KAAK,EAAE,cAAc,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,cAAc,CAAC,QAAQ;AAClC,aAAA;YACD,YAAY;SACb;;+GAlBQ,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAoD,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cAF5B,MAAM,EAAA,CAAA,CAAA;;4FAEP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCIY,mBAAmB,CAAA;IAM9B,WACmB,CAAA,SAA0B,EAC1B,eAAgC,EAAA;QADhC,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAe,CAAA,eAAA,GAAf,eAAe;AAP3B,QAAA,IAAA,CAAA,UAAU,GACf,IAAI,eAAe,CAAwC,IAAI,CAAC;QAEjD,IAAQ,CAAA,QAAA,GAAG,SAAS;;AAO9B,IAAA,MAAM,OAAO,GAAA;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;AAExC,QAAA,OAAO,aAAa,CAClB,IAAI,CAAC;aACF,IAAI,CACH,IAAI,CAAC,QAAQ,EACb,EAAE,YAAY,EAAE,KAAK,EAAE,EACvB;YACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,YAAA,YAAY,EAAE,MAAM;SACrB;AAEF,aAAA,IAAI,CACHrD,KAAG,CAAC,CAAC,QAAyB,KAAI;YAChC,OAAO,QAAQ,CAAC,WAAW;AAC7B,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,YAAA,OAAO,KAAK;SACb,CAAC,CACH,CACJ;;+GApCQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA5D,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCLY,sBAAsB,CAAA;AASjC,IAAA,WAAA,CAAmB,UAA2C,EAAA;AAC5D,QAAA,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YAClC,MAAM,IAAI,UAAU,EAAE;;AAGxB,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,WAAW;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,YAAY;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,QAAQ;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,KAAK;AACpC,QAAA,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG;AAEzB,QAAA,IAAI,UAAU,CAAC,QAAQ,EAAE;YACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;;;AAGxD;;ACrBM,MAAM,kCAAkC,GAC7C,IAAI,cAAc,CAAgC,wBAAwB,CAAC;AAEtE,MAAM,qCAAqC,GAAkB;AAClE,IAAA,OAAO,EAAE,kCAAkC;AAC3C,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAuB,KAAK,IAAI,sBAAsB,CAAC,GAAG,IAAI,CAAC;CAC9E;;ACfD,IAAY,mBAIX;AAJD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,GAI9B,EAAA,CAAA,CAAA;;ACJD,IAAY,UAGX;AAHD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAHW,UAAU,KAAV,UAAU,GAGrB,EAAA,CAAA,CAAA;;MCEY,6BAA6B,CAAA;IAKxC,WACE,CAAA,YAA0D,EAC1D,oBAA6C,EAAA;QAJ/B,IAAM,CAAA,MAAA,GAAa,EAAE;AAMnC,QAAA,IAAI,CAAC,IAAI;AACP,YAAA,oBAAoB,KAAK;kBACrB,mBAAmB,CAAC;AACtB,kBAAE,mBAAmB,CAAC,KAAK;AAE/B,QAAA,IAAK,YAA0B,CAAC,MAAM,EAAE;AACtC,YAAA,IAAI,CAAC,MAAM,GAAI,YAA0B,CAAC,MAAM,CAAC,GAAG,CAClD,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CACzB;;AAGH,QAAA,IAAK,YAAiD,CAAC,MAAM,EAAE;AAC7D,YAAA,IAAI,CAAC,MAAM;AACR,gBAAA,YAAiD,EAAE,MAAM;AAC1D,oBAAA,UAAU,CAAC;sBACP,UAAU,CAAC;AACb,sBAAE,UAAU,CAAC,MAAM;;aAClB;AACL,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;;;AAGpC;;ACxBM,MAAM,yCAAyC,GACpD,IAAI,cAAc,CAChB,+BAA+B,CAChC;AAEI,MAAM,4CAA4C,GAAkB;AACzE,IAAA,OAAO,EAAE,yCAAyC;AAClD,IAAA,QAAQ,EAAE,CAAC,GAAG,IAAuB,KACnC,IAAI,6BAA6B,CAAC,GAAG,IAAI,CAAC;CAC7C;;ACpBD,IAAY,4BAGX;AAHD,CAAA,UAAY,4BAA4B,EAAA;AACtC,IAAA,4BAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,4BAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACzB,CAAC,EAHW,4BAA4B,KAA5B,4BAA4B,GAGvC,EAAA,CAAA,CAAA;;MCmBY,sBAAsB,CAAA;AAGjC,IAAA,WAAA,CACmB,SAA0B,EAC1B,eAAgC,EAEhC,6BAA4D,EAE5D,oCAA0E,EAAA;QAL1E,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAe,CAAA,eAAA,GAAf,eAAe;QAEf,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAE7B,IAAoC,CAAA,oCAAA,GAApC,oCAAoC;QARtC,IAAQ,CAAA,QAAA,GAAG,cAAc;;IAWnC,MAAM,wBAAwB,CACnC,UAA8C,EAAA;QAE9C,OAAO,IAAI,CAAC,OAAO,CACjB,4BAA4B,CAAC,SAAS,EACtC,IAAI,CAAC,6BAA6B,CAAC;AACjC,YAAA,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACvC,YAAA,GAAG,UAAU;AACd,SAAA,CAAC,CACH;;IAGI,MAAM,sBAAsB,CACjC,UAA8C,EAAA;QAE9C,OAAO,IAAI,CAAC,OAAO,CACjB,4BAA4B,CAAC,OAAO,EACpC,IAAI,CAAC,6BAA6B,CAAC;AACjC,YAAA,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACvC,YAAA,GAAG,UAAU;AACd,SAAA,CAAC,CACH;;AAGK,IAAA,MAAM,OAAO,CACnB,KAAmC,EACnC,UAAkC,EAAA;AAElC,QAAA,OAAO,aAAa,CAClB,IAAI,CAAC;AACF,aAAA,IAAI,CACH,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA,EAC3B,IAAI,eAAe,CACjB,UAAkD,CACnD,EACD;YACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,kDAAkD,CACnD;AACD,YAAA,YAAY,EAAE,MAAM;SACrB;AAEF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAsD,KACzD,IAAI,CAAC,oCAAoC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAC3D,CACF,CACJ;;+GA5DQ,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAV,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,eAAA,EAAA,EAAA,EAAA,KAAA,EAMvB,kCAAkC,EAAA,EAAA,EAAA,KAAA,EAElC,yCAAyC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AARxC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAOI,MAAM;2BAAC,kCAAkC;;0BAEzC,MAAM;2BAAC,yCAAyC;;;MChBxC,oBAAoB,CAAA;IAW/B,WACmB,CAAA,6BAA4D,EAE5D,MAAsB,EAAA;QAFtB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAE7B,IAAM,CAAA,MAAA,GAAN,MAAM;AAbR,QAAA,IAAA,CAAA,cAAc,GAAgB,IAAI,GAAG,EAAE;AAEvC,QAAA,IAAA,CAAA,mBAAmB,GAAG;YACrC,+CAA+C;SAChD;QAEgB,IAAuB,CAAA,uBAAA,GAAG,IAAI;AAE9B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;;AAQ9C,IAAA,kBAAkB,CAAC,WAAwB,EAAA;AAChD,QAAA,IAAI,WAAW,KAAK,YAAY,EAAE;YAChC;;AAGF,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC;aAC/C,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE3C,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,mBAAmB,EAAE;;IAGpB,gBAAgB,GAAA;AACtB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAE5C,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACvB;;AAGF,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,iBAAiB,EACxC,uBAAuB,CAAC,MAAM,EAC9B;AACE,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;YAClC,SAAS,EAAE,kBAAkB,CAAC,MAAM;AACrC,SAAA,CACF;;IAGK,iBAAiB,GAAA;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;;IAGzC,mBAAmB,GAAA;AACzB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACtE,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM;;QAE9B,CAAC,QAAQ,KAAK,QAAQ,EAAE,aAAa,KAAK,QAAQ,CACnD;AAED,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACzB,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;AAC/B,SAAC,CAAC;;IAGI,mBAAmB,GAAA;AACzB,QAAA,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;YAC3C;;QAGF,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAI;AAClD,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC7B,gBAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE;oBACjC;;gBAGF,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACnC,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;wBAC9B,MAAM,MAAM,GAAG,IAAyB;wBACxC,MAAM,iBAAiB,GAAG,MAAW;AACnC,4BAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;AAE5B,4BAAA,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,CAAC;AACvD,yBAAC;AAED,wBAAA,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC;;AAEtD,iBAAC,CAAC;AACJ,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE;AACzC,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC;;AAGI,IAAA,WAAW,CAAC,MAAc,EAAA;AAChC,QAAA,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC9C;;QAGF,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AACjE,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC9B,SAAC,CAAC;QAEF,IAAI,mBAAmB,EAAE;YACvB;;AAGF,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;AA7GjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,4DAarB,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAbV,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAcI,MAAM;2BAAC,WAAW;;;MCwCV,kBAAkB,CAAA;IA4B7B,WACmB,CAAA,eAAgC,EAChC,aAA4B,EAC5B,cAA8B,EAC9B,qBAA4C,EAC5C,mBAAwC,EACxC,kBAAsC,EACtC,oBAA0C,EAC1C,cAA8B,EAC9B,wBAAkD,EAClD,qBAA4C,EAC5C,YAA0B,EAC1B,aAA4B,EAC5B,iBAAoC,EACpC,iBAAoC,EACpC,sBAA8C,EAC9C,mBAAwC,EACxC,uBAAgD,EAChD,6BAA4D,EAC5D,kBAAsC,EACtC,6BAA4D,EAC5D,mBAAwC,EACxC,sBAA8C,EAC9C,oBAA0C,EAC1C,gBAAkC,EAClC,0BAAsD,EACtD,mBAAwC,EAAA;QAzBxC,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACxB,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB;QACvB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB;QACtB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAA0B,CAAA,0BAAA,GAA1B,0BAA0B;QAC1B,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;AArD/B,QAAA,IAAA,CAAA,cAAc,GAAG;AACtB,YAAA,OAAO,EAAE,OAAO,gBAA0B,KACxC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAEtD,eAAe,EAAE,YACf,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE;YAC9C,eAAe,EAAE,YACf,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;YACpC,yBAAyB,EAAE,YACzB,IAAI,CAAC,6BAA6B,CAAC,yBAAyB,EAAE;YAChE,cAAc,EAAE,YACd,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE;AAC1C,YAAA,iBAAiB,EAAE,OAAO,EAAU,EAAE,IAAY,KAChD,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC;SAClE;AAEM,QAAA,IAAA,CAAA,iBAAiB,GAAsB;YAC5C,cAAc,EAAE,YACd,IAAI,CAAC,cAAc,CAAC,kCAAkC,EAAE;SAC3D;AAEM,QAAA,IAAA,CAAA,OAAO,GAAG;AACf,YAAA,qBAAqB,EAAE,CAAC,OAAmB,KAAoB;gBAC7D,OAAO,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,OAAO,CAAC;aACjE;SACF;;IA+BM,MAAM,IAAI,CAAC,aAAgC,EAAA;QAChD,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC;QAC9C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC;AACxD,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/C,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;AAC9B,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE;AACzC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE;QACpC,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC;AACvE,QAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;;IAGrE,MAAM,SAAS,CAAC,GAAY,EAAA;QACjC,OAAO,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,GAAG,CAAC;;AAGtD,IAAA,MAAM,cAAc,CACzB,YAAmB,EACnB,MAAe,EAAA;QAEf,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC;;IAG1D,MAAM,MAAM,CAAC,MAAe,EAAA;QAIjC,OAAO,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC;;AAG9C,IAAA,aAAa,CAClB,MAAc,EACd,IAA0C,EAC1C,OAAyC,EAAA;QAEzC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;;IAGzD,oBAAoB,GAAA;QAIzB,OAAO;AACL,YAAA,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;AACvC,YAAA,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;SAClC;;IAGI,kBAAkB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE;;IAG1C,MAAM,yBAAyB,CACpC,MAA0C,EAAA;QAE1C,OAAO,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,MAAM,CAAC;;IAG9D,MAAM,uBAAuB,CAClC,MAA0C,EAAA;QAE1C,OAAO,IAAI,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,MAAM,CAAC;;AAG5D,IAAA,MAAM,YAAY,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;;AAGpC,IAAA,UAAU,CAAC,OAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC;;IAGlC,UAAU,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;;AAGlC,IAAA,aAAa,CAAC,MAA4B,EAAA;QAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC;AAE/D,QAAA,IAAI,CAAC,oBAAoB,CAAC,iCAAiC,CAAC,cAAc,CAAC;AAC3E,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,cAAc,CAAC;QAEzD,OAAO;AACL,YAAA,UAAU,EAAE,YAAY,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC;YACtE,MAAM,EAAE,YAAY,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAChD,SAAS,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;YAChD,MAAM,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAC1C,mBAAmB,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE;AACpE,YAAA,QAAQ,EAAE,OAAO,KAAY,KAAK,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrE,iBAAiB,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;YAChE,UAAU,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YAClD,SAAS,EAAE,YAAY,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;YACtD,iBAAiB,EAAE,YAAY,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;AACtE,YAAA,sBAAsB,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK;AACxD,YAAA,IAAI,EAAE;AACJ,gBAAA,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,iBAAiB;AACpD,gBAAA,gBAAgB,EAAE,CAAC,KAAY,KAC7B,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC;AAC3C,gBAAA,gBAAgB,EAAE,CAAC,IAAY,EAAE,KAAa,KAC5C,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;AACnD,gBAAA,wBAAwB,EAAE,CAAC,IAAgB,EAAE,KAAa,KACxD,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC3D,gBAAA,gBAAgB,EAAE,CAAC,IAAY,EAAE,KAAqB,KACpD,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;AACnD,gBAAA,oBAAoB,EAAE,CAAC,SAAiB,EAAE,SAAoB,KAC5D,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC;AAChE,gBAAA,iBAAiB,EAAE,CAAC,SAAqB,KACvC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC;AAClD,gBAAA,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK;AAC7C,gBAAA,gBAAgB,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK;gBACnD,aAAa,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM;AACrD,gBAAA,gBAAgB,EAAE,CAAC,IAAgB,KACjC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC7C,aAAA;AACD,YAAA,aAAa,EAAE,CAAC,IAAY,EAAE,KAAa,KACzC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;SACjD;;IAGI,oBAAoB,GAAA;QACzB,OAAO;AACL,YAAA,eAAe,EAAE,CAAC,UAAkB,KAClC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC;AACpD,YAAA,qBAAqB,EAAE,CAAC,QAAyB,KAC/C,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AACxD,YAAA,gBAAgB,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK;SACpD;;AAGH,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY;;AAG5C,IAAA,IAAW,sBAAsB,GAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK;;AAGzC,IAAA,IAAW,gBAAgB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK;;AAGnC,IAAA,uBAAuB,CAAC,GAAY,EAAA;QACzC,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,GAAG,CAAC;;IAGhD,mBAAmB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE;;AAG/C,IAAA,kBAAkB,CAAC,OAAmB,EAAA;AAC3C,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;;AAG/B,IAAA,cAAc,CAAC,MAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC;;AAG/C,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY;;AAGzC,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa;;AAG1C,IAAA,IAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,iBAAiB;;AAG9C,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc;;AAG5C,IAAA,IAAW,4BAA4B,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,4BAA4B;;AAG1D,IAAA,IAAW,6BAA6B,GAAA;AACtC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,6BAA6B;;AAG3D,IAAA,IAAW,mBAAmB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE;;+GA/O7C,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAT,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAiH,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAvG,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAwG,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,GAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCpDY,yBAAyB,CAAA;AACpC,IAAA,WAAA,CAA0B,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM;;IAEzB,SAAS,CACd,GAAyB,EACzB,IAAiB,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAC1B,UAAU,CAAC,CAAC,KAAwB,KAAI;AACtC,YAAA,OAAO,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACnD,CAAC,CACH;;+GAXQ,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAzB,yBAAyB,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;MCHY,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAHjB,YAAY,CAAA,EAAA,CAAA,CAAA;AAGX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,aAFhB,CAAC,4BAA4B,EAAE,4BAA4B,CAAC,YAD7D,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAGX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,SAAS,EAAE,CAAC,4BAA4B,EAAE,4BAA4B,CAAC;AACxE,iBAAA;;;MCmDY,UAAU,CAAA;+GAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAV,UAAU,EAAA,OAAA,EAAA,CAhCX,mBAAmB,EAAE,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAgCpC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,EA/BV,SAAA,EAAA;YACT,WAAW;YACX,oBAAoB;YACpB,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,uBAAuB;YACvB,YAAY;YACZ,YAAY;YACZ,YAAY;YACZ,uBAAuB;YACvB,kBAAkB;YAClB,gBAAgB;YAChB,kBAAkB;YAClB,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,YAAY;YACZ,mBAAmB;YACnB,cAAc;YACd,cAAc;YACd,cAAc;YACd,qBAAqB;YACrB,mBAAmB;YACnB,mBAAmB;YACnB,eAAe;YACf,aAAa;YACb,cAAc;AACd,YAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE;SACzD,EA9BS,OAAA,EAAA,CAAA,mBAAmB,EAAE,gBAAgB,CAAA,EAAA,CAAA,CAAA;;4FAgCpC,UAAU,EAAA,UAAA,EAAA,CAAA;kBAjCtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;AAChD,oBAAA,SAAS,EAAE;wBACT,WAAW;wBACX,oBAAoB;wBACpB,mBAAmB;wBACnB,kBAAkB;wBAClB,iBAAiB;wBACjB,uBAAuB;wBACvB,YAAY;wBACZ,YAAY;wBACZ,YAAY;wBACZ,uBAAuB;wBACvB,kBAAkB;wBAClB,gBAAgB;wBAChB,kBAAkB;wBAClB,aAAa;wBACb,iBAAiB;wBACjB,eAAe;wBACf,YAAY;wBACZ,mBAAmB;wBACnB,cAAc;wBACd,cAAc;wBACd,cAAc;wBACd,qBAAqB;wBACrB,mBAAmB;wBACnB,mBAAmB;wBACnB,eAAe;wBACf,aAAa;wBACb,cAAc;AACd,wBAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE;AACzD,qBAAA;AACF,iBAAA;;;MCnDY,WAAW,CAAA;+GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAX,WAAW,EAAA,YAAA,EAAA,CAJP,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAErB,gBAAgB,CAAA,EAAA,CAAA,CAAA;gHAEf,WAAW,EAAA,SAAA,EAHX,CAAC,gBAAgB,CAAC,EAAA,CAAA,CAAA;;4FAGlB,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,gBAAgB,CAAC;oBAChC,SAAS,EAAE,CAAC,gBAAgB,CAAC;oBAC7B,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC5B,iBAAA;;;ACPM,MAAM,eAAe,GAAG,CAAC;;ACAhC,IAAY,cAMX;AAND,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,0BAAyC;AACzC,IAAA,cAAA,CAAA,yBAAA,CAAA,GAAA,kCAA4D;AAC5D,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,8BAA0C;AAC1C,IAAA,cAAA,CAAA,yBAAA,CAAA,GAAA,sCAAgE;AAChE,IAAA,cAAA,CAAA,0BAAA,CAAA,GAAA,iDAA4E;AAC9E,CAAC,EANW,cAAc,KAAd,cAAc,GAMzB,EAAA,CAAA,CAAA;;MCAqB,8BAA8B,CAAA;AAApD,IAAA,WAAA,GAAA;AACqB,QAAA,IAAA,CAAA,OAAO,GAAoB,IAAI,OAAO,EAAE;AAC1C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAkB;;AAE9D,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;;AAG1C,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;;AAS1B,IAAA,SAAS,CAAC,KAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGtB,IAAA,mBAAmB,CAC3B,MAAsB,EAAA;QAEtB,OAAO;AACL,YAAA,KAAK,EAAE;gBACL,KAAK,EAAE,MAAM,CAAC,UAAU;gBACxB,MAAM,EAAE,MAAM,CAAC,WAAW;AAC3B,aAAA;YACD,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,4BAA4B,EAAE,MAAM,CAAC,4BAA4B;YACjE,6BAA6B,EAAE,MAAM,CAAC,6BAA6B;YACnE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;SAC5C;;AAEJ;;MCvBY,mBAAmB,CAAA;AAM9B,IAAA,IAAW,2BAA2B,GAAA;AACpC,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;;AAGrE,IAAA,IAAW,sBAAsB,GAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;;AAGlD,IAAA,IAAW,yBAAyB,GAAA;AAClC,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE;;IAGrD,WACmB,CAAA,6BAA4D,EAC5D,mCAAwE,EAAA;QADxE,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAmC,CAAA,mCAAA,GAAnC,mCAAmC;AAnBrC,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,OAAO,EAAgB;AACxD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,OAAO,EAAiB;AAEpD,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,OAAO,EAAmB;;AAmBnE,IAAA,oBAAoB,CAAC,eAAwC,EAAA;AAClE,QAAA,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU;QACtC,MAAM,SAAS,GAAG,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACzC,IAAI,OAAO,GAAG,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;;AAG9D,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,OAAO,GAAG,IAAI;;AAGhB,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACjC,YAAA,GAAG,EAAE,SAAS;YACd,OAAO;AACR,SAAA,CAAC;QAEF,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,4BAA4B,EACnD,QAAQ,EACR;AACE,YAAA,UAAU,EAAE,OAAO;YACnB,UAAU,EAAE,SAAS,IAAI,EAAE;AAC5B,SAAA,CACF;;IAGI,0BAA0B,CAC/B,aAA6B,EAC7B,YAA0B,EAAA;QAE1B,OAAO;AACL,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,QAAQ,EAAE;gBACR,KAAK,EAAE,aAAa,CAAC,UAAU;AAC/B,gBAAA,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE;AACtC,aAAA;AACD,YAAA,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;SAC9C;;AAGI,IAAA,8BAA8B,CAAC,WAAwB,EAAA;AAC5D,QAAA,MAAM,cAAc,GAClB,IAAI,CAAC,mCAAmC,CAAC,iBAAiB,CACxD,WAAW,CAAC,OAAO,CACpB;AAEH,QAAA,MAAM,YAAY,GAAiB;;YAEjC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;AACvD,YAAA,eAAe,EAAE,cAAc,CAAC,WAAW,CAAC,eAAe;AAC3D,YAAA,YAAY,EAAE,cAAc,CAAC,WAAW,CAAC,YAAY;AACrD,YAAA,eAAe,EAAE,cAAc,CAAC,WAAW,CAAC,eAAe;SAC5D;AAED,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,YAAY,CAAC;;AAG7C,IAAA,yBAAyB,CAAC,KAAoB,EAAA;QACnD,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,4BAA4B,EACnD,QAAQ,CACT;AAED,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGjC,IAAA,YAAY,CAAC,OAAe,EAAA;QACjC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;;AAG/B,IAAA,YAAY,CAAC,YAA0B,EAAA;QAC7C,MAAM,YAAY,GAAuB,EAAE;QAE3C,IAAI,YAAY,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/C,YAAY,CAAC,IAAI,CAAC;AAChB,gBAAA,KAAK,EAAE,YAAY,CAAC,eAAe,CAAC,KAAK,IAAI,UAAU;gBACvD,MAAM,EAAE,YAAY,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;AAC9D,aAAA,CAAC;;QAGJ,IAAI,eAAe,GAAe,EAAE;AAEpC,QAAA,IAAI,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE;AACxC,YAAA,eAAe,GAAG,YAAY,CAAC,eAAe;;AAGhD,QAAA,IAAI,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE;YACrC,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC;;AAGrE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;gBAC9C;;YAGF,YAAY,CAAC,IAAI,CAAC;gBAChB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;AACzC,aAAA,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,OAAO,YAAY;;AAGb,IAAA,cAAc,CAAC,OAAmB,EAAA;QACxC,OAAO,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,EAAE,MAAM;;+GA/HpD,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA3D,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAAvB,mCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACDK,MAAO,gBAAiB,SAAQ,8BAA8B,CAAA;AAGlE,IAAA,WAAA,CACwC,MAAsB,EAC3C,aAA4B,EAC5B,mBAAwC,EACxC,6BAA4D,EAAA;AAE7E,QAAA,KAAK,EAAE;QAL+B,IAAM,CAAA,MAAA,GAAN,MAAM;QAC3B,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QANxC,IAAa,CAAA,aAAA,GAAoB,IAAI;;AAWtC,IAAA,SAAS,CAAC,MAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;;AAGtB,IAAA,YAAY,CACjB,MAAsB,EACtB,gBAAoC,EACpC,uBAAmC,EAAA;AAEnC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,wBAAwB,CAAC;YACtD,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,cAAc,CAAC,wBAAwB,EAAE;AACvD,gBAAA,SAAS,CAAC,QAAQ;AACnB,aAAA,CAAC,CACH;YACD;;QAGF,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAExE,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAC7C,eAAe,EACf,eAAe,CAChB;AAED,QAAA,MAAM,EAAE,4BAA4B,EAAE,cAAc,EAAE,GAAG,gBAAgB;QAEzE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,6BAA6B,EACpD,QAAQ,CACT;AAED,QAAA,OAAO,CAAC,yBAAyB,GAAG,CAAC,KAAK,KAAI;YAC5C,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,+BAA+B,EACtD,QAAQ,CACT;YAED,IAAI,CAAC,mBAAmB,CAAC;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,YAAY,KAAI;AAC1B,gBAAA,MAAM,aAAa,GACjB,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CACjD,MAAM,EACN,YAAY,CACb;gBAEH,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,2CAA2C,EAClE,QAAQ,CACT;AAED,gBAAA,OAAO,CAAC,gCAAgC,CAAC,aAAa,CAAC;AACzD,aAAC,CAAC;YAEJ,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,SAAS,CACvD,CAAC,KAAoB,KAAI;gBACvB,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,sCAAsC,EAC7D,QAAQ,CACT;gBAED,OAAO,CAAC,gCAAgC,CAAC;oBACvC,MAAM,EAAE,CAAC,KAAK,CAAC;AACf,oBAAA,QAAQ,EAAE;wBACR,KAAK,EAAE,MAAM,CAAC,UAAU;AACxB,wBAAA,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE;AACvC,qBAAA;AACD,oBAAA,MAAM,EAAE,gBAAgB;AACzB,iBAAA,CAAC;AACJ,aAAC,CACF;YAED,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,eAAe,CAAC;AACtE,SAAC;AAED,QAAA,OAAO,CAAC,kBAAkB,GAAG,CAAC,KAAK,KAAI;YACrC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,iCAAiC,EACxD,QAAQ,EACR;gBACE,KAAK,EAAE,KAAK,CAAC,aAAa;gBAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;AAC9B,aAAA,CACF;AAED,YAAA,MAAM,gBAAgB,GAAG;gBACvB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,WAAW,EAAE,MAAM,CAAC,UAAU;aAC/B;AAED,YAAA,IAAI,4BAA4B,IAAI,cAAc,EAAE;;AAElD,gBAAA,gBAAgB,CAAC,UAAU,GAAG,cAAc;;AAG9C,YAAA,IAAI,CAAC;kBACD,iBAAiB,CAAC,gBAAgB;AACnC,iBAAA,IAAI,CAAC,CAAC,eAAe,KAAI;AACxB,gBAAA,OAAO,CAAC,0BAA0B,CAAC,eAAe,CAAC;AACrD,aAAC;AACA,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAI;gBACf,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,sCAAsC,EAC7D,QAAQ,CACT;gBACD,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,uBAAuB,EAAE,KAAK,CAAC;gBAC5D,OAAO,CAAC,KAAK,EAAE;AACf,gBAAA,uBAAuB,EAAE;AAC3B,aAAC,CAAC;AACN,SAAC;AAED,QAAA,OAAO,CAAC,mBAAmB,GAAG,CAAC,KAAK,KAAI;YACtC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,kCAAkC,EACzD,QAAQ,CACT;AAED,YAAA,IAAI,CAAC;kBACD,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;AACxC,iBAAA,IAAI,CAAC,CAAC,QAAQ,KAAI;gBACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,CAAC,SAAS,CAAC;AACb,oBAAA,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;oBAC5B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,IAAI,IAAI;oBACzD,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,IAAI,IAAI;oBAC5D,aAAa,EACX,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,IAAI,IAAI;AACtD,iBAAA,CAAC,CACH;gBACD,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC;AACrE,aAAC;AACA,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAI;gBACf,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,yCAAyC,EAChE,QAAQ,CACT;AAED,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;gBACrD,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC;AACnE,gBAAA,uBAAuB,EAAE;AAC3B,aAAC,CAAC;AACN,SAAC;AAED,QAAA,OAAO,CAAC,QAAQ,GAAG,CAAC,KAAK,KAAI;YAC3B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,8BAA8B,EACrD,QAAQ,CACT;YAED,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC;AACxC,YAAA,uBAAuB,EAAE;AAC3B,SAAC;QAED,OAAO,CAAC,KAAK,EAAE;;AAzKN,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBAIjB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAK,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA8E,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAJV,gBAAgB,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;0BAKI,MAAM;2BAAC,WAAW;;;ACJjB,MAAO,eAAgB,SAAQ,8BAA8B,CAAA;AACjE,IAAA,WAAA,CACwC,MAAsB,EAC3C,IAAgB,EAChB,mBAAwC,EACxC,6BAA4D,EAAA;AAE7E,QAAA,KAAK,EAAE;QAL+B,IAAM,CAAA,MAAA,GAAN,MAAM;QAC3B,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;;AAKzC,IAAA,YAAY,CACjB,MAAsB,EACtB,gBAAoC,EACpC,uBAAmC,EAAA;QAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;AAEhD,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,eAAe,EAAE,OAAO,CAAC;AAEzE,QAAA,OAAO,CAAC,yBAAyB,GAAG,CAAC,KAAK,KAAI;YAC5C,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,8BAA8B,EACrD,QAAQ,CACT;YAED,IAAI,CAAC,mBAAmB,CAAC;AACtB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,YAAY,KAAI;AAC1B,gBAAA,MAAM,aAAa,GACjB,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CACjD,MAAM,EACN,YAAY,CACb;gBAEH,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,0CAA0C,EACjE,QAAQ,CACT;AAED,gBAAA,OAAO,CAAC,gCAAgC,CAAC,aAAa,CAAC;AACzD,aAAC,CAAC;YAEJ,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,SAAS,CACvD,CAAC,KAAoB,KAAI;gBACvB,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,qCAAqC,EAC5D,QAAQ,CACT;gBAED,OAAO,CAAC,gCAAgC,CAAC;oBACvC,MAAM,EAAE,CAAC,KAAK,CAAC;AACf,oBAAA,QAAQ,EAAE;wBACR,KAAK,EAAE,MAAM,CAAC,UAAU;AACxB,wBAAA,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE;AACvC,qBAAA;AACD,oBAAA,MAAM,EAAE,gBAAgB;AACzB,iBAAA,CAAC;AACJ,aAAC,CACF;YAED,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,eAAe,CAAC;AACtE,SAAC;AAED,QAAA,OAAO,CAAC,kBAAkB,GAAG,CAAC,KAAK,KAAI;YACrC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,gCAAgC,EACvD,QAAQ,EACR;gBACE,KAAK,EAAE,KAAK,CAAC,aAAa;gBAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;AAC9B,aAAA,CACF;AAED,YAAA,MAAM,gBAAgB,GAAG;gBACvB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,SAAS,EAAE,MAAM,CAAC,oBAAoB;gBACtC,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B;AAED,YAAA,MAAM,EAAE,4BAA4B,EAAE,cAAc,EAAE,GAAG,gBAAgB;AAEzE,YAAA,IAAI,4BAA4B,IAAI,cAAc,EAAE;;AAElD,gBAAA,gBAAgB,CAAC,UAAU,GAAG,cAAc;;AAG9C,YAAA,IAAI,CAAC;iBACF,IAAI,CACH,MAAM,CAAC,qBAAqB,EAC5B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAChC;gBACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;aACnE;AAEF,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,OAAO,CAAC,0BAA0B,CAAC,QAAQ,CAAC,eAAe,CAAC;iBAC7D;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;oBACf,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,qCAAqC,EAC5D,QAAQ,CACT;oBACD,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,uBAAuB,EAAE,KAAK,CAAC;oBAC5D,OAAO,CAAC,KAAK,EAAE;AACf,oBAAA,uBAAuB,EAAE;iBAC1B;AACF,aAAA,CAAC;AACN,SAAC;AAED,QAAA,OAAO,CAAC,mBAAmB,GAAG,CAAC,KAAK,KAAI;YACtC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,iCAAiC,EACxD,QAAQ,CACT;YAED,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,CAAC,SAAS,CAAC;AACb,gBAAA,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;gBAChC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,IAAI,IAAI;gBACzD,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,IAAI,IAAI;gBAC5D,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,IAAI,IAAI;AACnE,aAAA,CAAC,CACH;YAED,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC;AACrE,SAAC;AAED,QAAA,OAAO,CAAC,QAAQ,GAAG,CAAC,KAAK,KAAI;YAC3B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,6BAA6B,EACpD,QAAQ,CACT;YAED,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC;AACxC,YAAA,uBAAuB,EAAE;AAC3B,SAAC;QAED,OAAO,CAAC,KAAK,EAAE;;AA3IN,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,kBAEhB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,6BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAFV,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;0BAGI,MAAM;2BAAC,WAAW;;;MCDV,sBAAsB,CAAA;+GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAVvB,YAAY,CAAA,EAAA,CAAA,CAAA;AAUX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EATtB,SAAA,EAAA;YACT,uBAAuB;AACvB,YAAA;AACE,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,QAAQ,EAAE,mBAAmB;AAC9B,aAAA;AACD,YAAA,GAAI,mBAAsC;AAC3C,SAAA,EAAA,OAAA,EAAA,CARS,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAUX,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAZlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,SAAS,EAAE;wBACT,uBAAuB;AACvB,wBAAA;AACE,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,QAAQ,EAAE,mBAAmB;AAC9B,yBAAA;AACD,wBAAA,GAAI,mBAAsC;AAC3C,qBAAA;AACF,iBAAA;;;MCmFY,iBAAiB,CAAA;+GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAvDlB,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAuDhE,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EAtDjB,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,yBAAyB;AACnC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE;YAC1C,qCAAqC;YACrC,mCAAmC;YACnC,kCAAkC;YAClC,iCAAiC;YACjC,4BAA4B;YAC5B,6BAA6B;YAC7B,0BAA0B;YAC1B,2BAA2B;YAC3B,4BAA4B;YAC5B,6BAA6B;YAC7B,iCAAiC;YACjC,kCAAkC;YAClC,mCAAmC;YACnC,oCAAoC;YACpC,qCAAqC;AACrC,YAAA;AACE,gBAAA,OAAO,EAAE,gBAAgB;AACzB,gBAAA,QAAQ,EAAE,WAAW;AACtB,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,0BAA0B;AACnC,gBAAA,QAAQ,EAAE,qBAAqB;AAChC,aAAA;AACD,YAAA,GAAI,WAA8B;AAClC,YAAA,GAAI,qBAAwC;AAC5C,YAAA,GAAI,qBAAwC;YAC5C,sCAAsC;YACtC,qCAAqC;YACrC,4CAA4C;YAC5C,gBAAgB;YAChB,eAAe;AACf,YAAA,iBAAiB,EAAE;AACnB,YAAA,uBAAuB,CAAC;gBACtB,MAAM,EAAE,0BAA0B,CAAC;AACjC,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,MAAM,EAAE,OAAO;iBAChB,CAAC;AACF,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,yBAAyB,EAAE;AACzB,oBAAA,OAAO,EAAE,yBAAyB;AAClC,oBAAA,QAAQ,EAAE;AACR,wBAAA,MAAM,EAAE,MAAM,IAAI;AACnB,qBAAA;AACF,iBAAA;aACF,CAAC;AACH,SAAA,EAAA,OAAA,EAAA,CArDS,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;;4FAuDhE,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAxD7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,sBAAsB,CAAC;AAC5E,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,yBAAyB;AACnC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE;wBAC1C,qCAAqC;wBACrC,mCAAmC;wBACnC,kCAAkC;wBAClC,iCAAiC;wBACjC,4BAA4B;wBAC5B,6BAA6B;wBAC7B,0BAA0B;wBAC1B,2BAA2B;wBAC3B,4BAA4B;wBAC5B,6BAA6B;wBAC7B,iCAAiC;wBACjC,kCAAkC;wBAClC,mCAAmC;wBACnC,oCAAoC;wBACpC,qCAAqC;AACrC,wBAAA;AACE,4BAAA,OAAO,EAAE,gBAAgB;AACzB,4BAAA,QAAQ,EAAE,WAAW;AACtB,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,0BAA0B;AACnC,4BAAA,QAAQ,EAAE,qBAAqB;AAChC,yBAAA;AACD,wBAAA,GAAI,WAA8B;AAClC,wBAAA,GAAI,qBAAwC;AAC5C,wBAAA,GAAI,qBAAwC;wBAC5C,sCAAsC;wBACtC,qCAAqC;wBACrC,4CAA4C;wBAC5C,gBAAgB;wBAChB,eAAe;AACf,wBAAA,iBAAiB,EAAE;AACnB,wBAAA,uBAAuB,CAAC;4BACtB,MAAM,EAAE,0BAA0B,CAAC;AACjC,gCAAA,MAAM,EAAE,SAAS;AACjB,gCAAA,MAAM,EAAE,OAAO;6BAChB,CAAC;AACF,4BAAA,YAAY,EAAE,IAAI;AAClB,4BAAA,yBAAyB,EAAE;AACzB,gCAAA,OAAO,EAAE,yBAAyB;AAClC,gCAAA,QAAQ,EAAE;AACR,oCAAA,MAAM,EAAE,MAAM,IAAI;AACnB,iCAAA;AACF,6BAAA;yBACF,CAAC;AACH,qBAAA;AACF,iBAAA;;;MCxFY,8BAA8B,CAAA;AAKzC,IAAA,WAAA,CACwC,MAAsB,EAAA;QAAtB,IAAM,CAAA,MAAA,GAAN,MAAM;AAL7B,QAAA,IAAA,CAAA,SAAS,GAA4B,IAAI,eAAe,CAAC,EAAE,CAAC;AAC5D,QAAA,IAAA,CAAA,UAAU,GACzB,IAAI,eAAe,CAAU,KAAK,CAAC;;AAMrC,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;;AAGvC,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;;AAGlE,IAAA,aAAa,CAAC,SAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGzB,IAAA,cAAc,CAAC,aAAsB,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;;AAG9B,IAAA,kBAAkB,CACvB,kBAA0B,EAAA;AAE1B,QAAA,IAAI;YACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAM;;QAChD,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,IAAI,QAAQ,CAAC,mCAAmC,CAAC;;;AAIpD,IAAA,UAAU,CACf,GAAW,EACX,MAAkB,EAClB,yBAEsB,EAAA;AAEtB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,MAAM,GACR,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAE9C,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,QAAA,MAAM,CAAC,GAAG,GAAG,GAAG;QAEhB,IAAI,yBAAyB,EAAE;AAC7B,YAAA,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC;;QAG5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAExC,QAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,YAAA,IAAI;AACF,gBAAA,MAAM,EAAE;;YACR,OAAO,KAAc,EAAE;gBACvB,IAAI,OAAO,GAAG,KAAK;AAEnB,gBAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,oBAAA,OAAO,GAAG,KAAK,CAAC,OAAO;;gBAEzB,MAAM,IAAI,QAAQ,CAChB,CAAA,2CAAA,EACE,OACF,CAAW,QAAA,EAAA,GAAG,CAAE,CAAA,CACjB;;AAEL,SAAC;AAED,QAAA,MAAM,CAAC,OAAO,GAAG,CACf,KAAqB,EACrB,MAAe,EACf,MAAe,EACf,KAAc,EACd,KAAa,KACX;AACF,YAAA,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,EAAE;YAE/C,IAAI,YAAY,GAAG,KAAe;AAElC,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,gBAAA,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;YAGtC,MAAM,IAAI,QAAQ,CAChB,CAAA;gBACQ,GAAG,CAAA;kBACD,YAAY,CAAA;AACX,iBAAA,EAAA,MAAM,IAAI,EAAE,CAAA;AACZ,iBAAA,EAAA,MAAM,IAAI,EAAE,CAAA;AACb,gBAAA,EAAA,KAAK,IAAI,EAAE,CAAA;kBACX,YAAY,CAAA,CAAE,CACzB;AACH,SAAC;;IAGI,aAAa,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;;AApGxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,kBAM/B,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,cAF7B,MAAM,EAAA,CAAA,CAAA;;4FAEP,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAOI,MAAM;2BAAC,WAAW;;;MCIV,+BAA+B,CAAA;AAM1C,IAAA,WAAA,CACkB,8BAA8D,EAC7D,6BAA4D,EAC5D,aAA4B,EAAA;QAF7B,IAA8B,CAAA,8BAAA,GAA9B,8BAA8B;QAC7B,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAa,CAAA,aAAA,GAAb,aAAa;QALxB,IAAQ,CAAA,QAAA,GAA6B,IAAI;;AAQ1C,IAAA,cAAc,CAAC,EACpB,UAAU,EACV,eAAe,GACM,EAAA;QACrB,IAAI,CAAC,UAAU,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;AACtD,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,+DAA+D,EAC/D,CAAC,SAAS,CAAC,SAAS,CAAC,CACtB,CACF;AACD,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,QAAQ;YACX,IAAI,CAAC,8BAA8B,CAAC,kBAAkB,CACpD,eAAe,CAAC,kBAAkB,CACnC;AAEH,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,qDAAqD,EAAE;AACrE,gBAAA,SAAS,CAAC,SAAS;AACpB,aAAA,CAAC,CACH;AACD,YAAA,OAAO,IAAI;;QAGb,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM;QACtD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC;QACtE,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,mBAAmB,CAAC;AAExE,QAAA,MAAM,MAAM,GAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE;AAE1E,QAAA,IAAI,YAAY,CAAC,oBAAoB,EAAE;YACrC,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CACtC,YAAY,CAAC,oBAAoB,CAClC;;AAGH,QAAA,OAAO,MAAM;;IAGR,iBAAiB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;QAE/B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM;QACtD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CACnC,YAAY,CAAC,kBAAkB,CACL;QAE5B,kBAAkB,CAAC,eAAe,GAAG;YACnC,YAAY,EAAE,YAAY,CAAC,QAAQ;AACnC,YAAA,gBAAgB,EAAE,OAAO;AACzB,YAAA,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE;YACxC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE;SACnD;AAED,QAAA,OAAO,kBAAkB;;IAGpB,wBAAwB,GAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;AAE7B,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CACnC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAC1B;QAE5B,OAAO,kBAAkB,CAAC,qBAAqB;;AAG1C,IAAA,uBAAuB,CAAC,QAA6B,EAAA;AAC1D,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,gCAAgC,EACvD,QAAQ,EACR,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,IAAI,EAAE,EAAE,CACxE;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB;QAElE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM;AAC9C,QAAA,SAAS,IAAI,CAAe,YAAA,EAAA,IAAI,CAAC,UAAU,eACzC,IAAI,CAAC,UACP,CAAA,aAAA,EAAgB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAE1C,QAAA,IAAI,CAAC,8BAA8B,CAAC,aAAa,CAAC,SAAS,CAAC;;AAGvD,IAAA,mBAAmB,CAAC,KAAc,EAAA;AACvC,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,4BAA4B,EACnD,QAAQ,EACR,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,IAAI,EAAE,EAAE,CACrE;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,MAAM,UAAU,GAAI,KAAiC,EAAE,UAAU;QACjE,MAAM,gBAAgB,GAAG,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AAEzE,QAAA,IAAI,gBAAgB;YAAE;AAEtB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa;AACjE,QAAA,IAAI,CAAC,8BAA8B,CAAC,aAAa,CAAC,SAAS,CAAC;;AAGtD,IAAA,iBAAiB,CAAC,UAAkB,EAAA;AAC1C,QAAA,OAAO,UAAU,CAAC,WAAW,EAAE,KAAK,UAAU;;+GA1HrC,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,8BAAA,EAAA,EAAA,EAAA,KAAA,EAAA3H,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAA4H,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,cAF9B,MAAM,EAAA,CAAA,CAAA;;4FAEP,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCIY,8BAA8B,CAAA;IAIzC,WACmB,CAAA,mCAAwE,EACxE,aAA4B,EAAA;QAD5B,IAAmC,CAAA,mCAAA,GAAnC,mCAAmC;QACnC,IAAa,CAAA,aAAA,GAAb,aAAa;QAJxB,IAAc,CAAA,cAAA,GAA0B,IAAI;;AAO7C,IAAA,cAAc,CAAC,EACpB,UAAU,EACV,eAAe,GACM,EAAA;QACrB,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,wCAAwC,EAAE;AACxD,gBAAA,SAAS,CAAC,SAAS;AACpB,aAAA,CAAC,CACH;AACD,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;QAE5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC;AAEnE,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,oEAAoE,EACpE,CAAC,SAAS,CAAC,SAAS,CAAC,CACtB,CACF;AACD,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,YAAY,GAAiB,eAAe,CAAC;cAC/C,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO;cAC1C,EAAE;AAEN,QAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,GAAG;AACvC,YAAA,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB;AACzC,YAAA,eAAe,EAAE;AACf,gBAAA,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,eAAe;AACzD,gBAAA,gBAAgB,EAAE,WAAW;AAC7B,gBAAA,UAAU,EACR,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE;AAC/E,gBAAA,WAAW,EACT,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE;oBAChC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE;AACnF,gBAAA,eAAe,EACb,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;AACpC,qBAAA,eAAe,IAAI,OAAO;gBAC/B,YAAY;AACb,aAAA;AACD,YAAA,uBAAuB,EAAE,IAAI;AAC7B,YAAA,eAAe,EAAE,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;SAC/D;QAED,OAAO,IAAI,CAAC,cAAc;;IAGrB,iBAAiB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,IAAI;QAErC,OAAO;AACL,YAAA,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB;AACzC,YAAA,eAAe,EAAE;AACf,gBAAA,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,eAAe;AACzD,gBAAA,gBAAgB,EAAE,WAAW;AAC7B,gBAAA,UAAU,EACR,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE;gBAC/E,WAAW,EACT,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE;oBACrC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE;AACpF,aAAA;AACD,YAAA,uBAAuB,EAAE,IAAI;AAC7B,YAAA,eAAe,EAAE,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;SAC/D;;IAGI,wBAAwB,GAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,EAAE;AACnC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,qBAAqB;;AAG7D,IAAA,qBAAqB,CAAC,MAAe,EAAA;AAC3C,QAAA,IAAI;YACF,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CACrC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,iBAAiB,CACvD,CAAC,CAAC,CAAC,EAAE,KAAK;YACX,MAAM,IAAI,GAA0B,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,IAAI,CAAC;AACzE,YAAA,OAAO,IAAI;;QACX,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,CAA2D,uDAAA,EAAA,KAAe,CAAC,OAAO,CAAA,CAAE,EACpF,CAAC,SAAS,CAAC,SAAS,CAAC,CACtB,CACF;AACD,YAAA,OAAO,IAAI;;;AAIP,IAAA,aAAa,CAAC,OAAmB,EAAA;QACvC,MAAM,eAAe,GACnB,IAAI,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAErE,QAAA,MAAM,cAAc,GAAG,eAAe,CAAC,WAAW;AAElD,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;AACpE,YAAA,OAAO,EAAE;;AAGX,QAAA,MAAM,QAAQ,GAAiB;YAC7B,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC;YACnD,eAAe,EAAE,cAAc,CAAC,eAAe;YAC/C,eAAe,EAAE,cAAc,CAAC,eAAe;YAC/C,YAAY,EAAE,cAAc,CAAC,YAAY;SAC1C;QAED,MAAM,YAAY,GAAG,EAAE;QAEvB,IAAI,QAAQ,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE;YAC3C,YAAY,CAAC,IAAI,CAAC;AAChB,gBAAA,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,IAAI,UAAU;gBACnD,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;AAC1D,aAAA,CAAC;;QAGJ,IAAI,eAAe,GAAe,EAAE;AAEpC,QAAA,IAAI,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE;AACpC,YAAA,eAAe,GAAG,QAAQ,CAAC,eAAe;;AAG5C,QAAA,IAAI,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE;YACjC,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;;AAGjE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;gBAC9C;;YAGF,YAAY,CAAC,IAAI,CAAC;gBAChB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;AACzC,aAAA,CAAC;AACJ,SAAC,CAAC;QAEF,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACjC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI,CAAC,MAAM;AACnB,SAAA,CAAC,CAAC;;AAGG,IAAA,cAAc,CAAC,OAAmB,EAAA;QACxC,OAAO,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,EAAE,MAAM;;+GA9JpD,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAxF,mCAAA,EAAA,EAAA,EAAA,KAAA,EAAA4D,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,cAF7B,MAAM,EAAA,CAAA,CAAA;;4FAEP,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCGY,gBAAgB,CAAA;AAiB3B,IAAA,IAAY,qBAAqB,GAAA;AAC/B,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;;AAG7B,IAAA,IAAY,iCAAiC,GAAA;AAC3C,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,mBAAmB;;IAGnC,WAEmB,CAAA,MAAsB,EACtB,aAA4B,EAC5B,8BAA8D,EAC9D,+BAAgE,EAChE,8BAA8D,EAC9D,QAAkB,EAAA;QALlB,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAA8B,CAAA,8BAAA,GAA9B,8BAA8B;QAC9B,IAA+B,CAAA,+BAAA,GAA/B,+BAA+B;QAC/B,IAA8B,CAAA,8BAAA,GAA9B,8BAA8B;QAC9B,IAAQ,CAAA,QAAA,GAAR,QAAQ;QA/BV,IAAkB,CAAA,kBAAA,GAAG,uCAAuC;AAE5D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAiB,IAAI,CAAC;AACtD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAQ;AAC1C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAQ;AAC1C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,OAAO,EAAW;QAEvC,IAAiB,CAAA,iBAAA,GAAG,KAAK;QAEzB,IAAmB,CAAA,mBAAA,GAA2B,IAAI;QAElD,IAAc,CAAA,cAAA,GAAmC,IAAI;;AAuB7D,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;;AAGvC,IAAA,IAAW,qBAAqB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;;AAGjD,IAAA,IAAW,qBAAqB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;;AAGjD,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;;IAG3B,YAAY,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;;AAG5B,IAAA,oBAAoB,CAAC,IAAyB,EAAA;AACnD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AACrD,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;QAEnD,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,iCAAiC,EAAE;YACxE;;QAGF,IAAI,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE;YACzE,IAAI,CAAC,oBAAoB,EAAE;YAC3B;;AAGF,QAAA,IAAI,CAAC,8BAA8B,CAAC,UAAU,CAC5C,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7B;;AAGI,IAAA,kBAAkB,CAAC,IAA4B,EAAA;QACpD,IAAI,CAAC,8BAA8B,CAAC;aACjC,IAAI,CAACjD,QAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;aAC7B,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,0CAA0C,EAAE;AAC1D,oBAAA,SAAS,CAAC,SAAS;AACpB,iBAAA,CAAC,CACH;AACD,gBAAA,MAAM,IAAI,QAAQ,CAChB,CAAA,oDAAA,CAAsD,CACvD;;AAGH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC9C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;gBAClD,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,gBAAA,eAAe,EAAE,IAAI;AACtB,aAAA,CAAC;YAEF,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,wBAAwB,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CACjE;AACD,gBAAA,MAAM,IAAI,QAAQ,CAAC,oCAAoC,CAAC;;AAG1D,YAAA,IAAI,CAAC;AACF,iBAAA,YAAY,CAAC,QAAQ,CAAC,mBAAmB;AACzC,iBAAA,IAAI,CAAC,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE;oBAC/C,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAC1C,QAAQ,CAAC,kBAAkB,CAC5B;oBAED,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGnC,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChD,MAAM,mBAAmB,GAAG,OAAO,CACjC,IAAI,CAAC,mBAAmB,CACzB,CAAC,QAAQ,EAAE;AAEZ,gBAAA,MAAM,OAAO,GAAG,CAAA,oFAAA,EAAuF,MAAM,CAA2B,wBAAA,EAAA,mBAAmB,EAAE;AAC7J,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAChD;AACH,aAAC;AACA,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAE3B,gBAAA,IAAI,OAAO,GAAI,KAAgB,IAAI,EAAE;AAErC,gBAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,oBAAA,OAAO,GAAG,KAAK,CAAC,OAAO;;AAGzB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,CAAA,wCAAA,EAA2C,OAAO,CAAE,CAAA,EACpD,CAAC,SAAS,CAAC,SAAS,CAAC,CACtB,CACF;AACH,aAAC,CAAC;AACN,SAAC,CAAC;;AAGC,IAAA,MAAM,eAAe,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,8DAA8D,EAC9D,CAAC,SAAS,CAAC,SAAS,CAAC,CACtB,CACF;AACD,YAAA,MAAM,IAAI,QAAQ,CAChB,CAAA,qDAAA,CAAuD,CACxD;;AAGH,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,+DAA+D,EAC/D,CAAC,SAAS,CAAC,SAAS,CAAC,CACtB,CACF;AACD,YAAA,MAAM,IAAI,QAAQ,CAChB,CAAA,sDAAA,CAAwD,CACzD;;;AAIH,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;;QAG9B,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;QAElE,IAAI,CAAC,kBAAkB,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,kCAAkC,EAAE;AAClD,gBAAA,SAAS,CAAC,SAAS;AACpB,aAAA,CAAC,CACH;AACD,YAAA,MAAM,IAAI,QAAQ,CAAC,CAAA,4CAAA,CAA8C,CAAC;;AAGpE,QAAA,MAAM,iBAAiB,GAAe,IAAI,CAAC;aACxC,GAAG,CAA2B,wBAAwB;AACtD,aAAA,aAAa,EAAE;AAElB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAE7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;YAEhC,MAAM,WAAW,GACf,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,kBAAkB,CAAC;YAEpE,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,EAAE;AAC5D,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,kBAAkB,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAC3D;AACD,gBAAA,MAAM,IAAI,QAAQ,CAAC,8BAA8B,CAAC;;YAGpD,IAAI,CAAC,cAAc,CAAC,uBAAuB,GAAG,WAAW,CAAC;AAE1D,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;AAEhC,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAE9B,YAAA,OAAO,iBAAiB;;QACxB,OAAO,KAAc,EAAE;AACvB,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;YAE9B,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,KAAK,CAAC;AAChD,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;AAChC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAEtB,YAAA,MAAM,YAAY,GAAI,KAA6B,EAAE,OAAO,IAAI,EAAE;AAClE,YAAA,MAAM,eAAe,GAClB,KAAgC,EAAE,UAAU,IAAI,EAAE;YAErD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;YACxD,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC;YAE/D,IAAI,cAAc,IAAI,gBAAgB;AAAE,gBAAA,OAAO,IAAI;YAEnD,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,CAAA,oCAAA,EAAuC,YAAY,CAAA,CAAE,EAAE;AACrE,gBAAA,SAAS,CAAC,SAAS;AACpB,aAAA,CAAC,CACH;AAED,YAAA,OAAO,iBAAiB;;;IAIrB,YAAY,CACjB,cAA0B,EAC1B,aAA2C,EAAA;AAE3C,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,2DAA2D,EAC3D,CAAC,SAAS,CAAC,SAAS,CAAC,CACtB,CACF;AACD,YAAA,OAAO,IAAI;;QAGb,MAAM,qBAAqB,GACzB,IAAI,CAAC,cAAc,EAAE,wBAAwB,EAAE,IAAI,EAAE;AAEvD,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAC3C,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,qBAAqB,EAAE,qBAAqB;AAC5C,YAAA,cAAc,EAAE,MAAM;AACtB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,WAAW,EAAE,aAAa,CAAC,KAAK,IAAI,SAAS;YAC7C,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5D,SAAA,CAAC;;IAGI,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,+CAA+C,EAAE;AAC/D,gBAAA,SAAS,CAAC,SAAS;AACpB,aAAA,CAAC,CACH;YACD;;AAGF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,MAAM,GAAG,YAAY;AACrE,QAAA,MAAM,uBAAuB,GAA4B;YACvD,WAAW;SACZ;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;YACpC,uBAAuB,CAAC,oBAAoB,GAAG;gBAC7C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;gBAC/C,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;aAC9C;;AAGH,QAAA,IAAI,CAAC,mBAAmB;AACtB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAChD,uBAAuB,CACxB;;IAGG,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACvB,MAAM,YAAY,GAAG,IAAI;AAEzB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,+DAA+D,EAC/D,CAAC,SAAS,CAAC,SAAS,CAAC,CACtB,CACF;YAED,UAAU,CAAC,MAAK;gBACd,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;gBAEpD,IAAI,uBAAuB,EAAE;oBAC3B,IAAI,CAAC,oBAAoB,EAAE;AAE3B,oBAAA,IAAI,CAAC,8BAA8B,CAAC,cAAc,CAAC,IAAI,CAAC;;aAE3D,EAAE,YAAY,CAAC;AAEhB,YAAA,MAAM,IAAI,QAAQ,CAAC,6CAA6C,CAAC;;aAC5D;YACL,IAAI,CAAC,oBAAoB,EAAE;AAE3B,YAAA,IAAI,CAAC,8BAA8B,CAAC,cAAc,CAAC,IAAI,CAAC;;;IAIpD,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB;YAClC,OAAO,IAAI,CAAC,8BAA8B;QAC5C,OAAO,IAAI,CAAC,+BAA+B;;AAGrC,IAAA,cAAc,CAAC,OAAe,EAAA;QACpC,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;;AAGrE,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACzC,QAAA,OAAO,UAAU,CAAC,WAAW,EAAE,KAAK,UAAU;;AAGxC,IAAA,kBAAkB,CAAC,UAAkB,EAAA;AAC3C,QAAA,MAAM,cAAc,GAAG;YACrB,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;SACL;QAED,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC1C,YAAA,OAAO,IAAI;;QAGb,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACpC,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,UAAU,CAAC,IAAI,IAAI;;AA1X5D,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBA0BjB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAJ,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAkF,8BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,+BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,8BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA1BV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BA2BI,MAAM;2BAAC,WAAW;;;ACtDvB,IAAY,uBAGX;AAHD,CAAA,UAAY,uBAAuB,EAAA;AACjC,IAAA,uBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,uBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,GAGlC,EAAA,CAAA,CAAA;;ACAM,MAAM,2BAA2B,GAAG,CACzC,eAAgC,KACL;IAC3B,OAAO;QACL,UAAU,EAAE,eAAe,CAAC,GAAG;QAC/B,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,WAAW,EAAE,eAAe,CAAC,OAAO;AACpC,QAAA,kBAAkB,EAAE,EAAE;AACtB,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,YAAY,EAAE,EAAE;KACjB;AACH,CAAC;;ACZM,MAAM,eAAe,GAAG;AAC7B,IAAA,UAAU,CAAC,iBAAiB;AAC5B,IAAA,UAAU,CAAC,kBAAkB;AAC7B,IAAA,UAAU,CAAC,yBAAyB;AACpC,IAAA,UAAU,CAAC,yBAAyB;AACpC,IAAA,UAAU,CAAC,yBAAyB;AACpC,IAAA,UAAU,CAAC,4BAA4B;AACvC,IAAA,UAAU,CAAC,4BAA4B;AACvC,IAAA,UAAU,CAAC,gCAAgC;AAC3C,IAAA,UAAU,CAAC,yBAAyB;AACpC,IAAA,UAAU,CAAC,UAAU;AACrB,IAAA,UAAU,CAAC,aAAa;AACxB,IAAA,UAAU,CAAC,gBAAgB;AAC3B,IAAA,UAAU,CAAC,sBAAsB;AACjC,IAAA,UAAU,CAAC,2BAA2B;CACvC;;MCLY,4BAA4B,CAAA;AAHzC,IAAA,WAAA,GAAA;QAImB,IAAoB,CAAA,oBAAA,GAAa,eAAe;AA8GlE;AA5GQ,IAAA,WAAW,CAAC,WAAwB,EAAA;AACzC,QAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW;AAEvC,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAEpC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAC9B,CAAC,GAA8B,EAAE,KAAK,KAAI;YACxC,IACE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9C,gBAAA,KAAK,CAAC,SAAS,KAAoB,GAAA,wBACnC;gBACA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK;;iBACxB;gBACL,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK;;AAG/B,YAAA,OAAO,GAAG;SACX,EACD,EAAE,CACH;AAED,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC;AACrB,aAAA,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;AACrD,aAAA,MAAM,CAAC,CAAC,UAAU,KAAI;AACrB,YAAA,MAAM,GAAG,KAAK,CAAC,GAAG,UAAU;YAC5B,OAAO,CAAC,CAAC,KAAK;AAChB,SAAC,CAAC;QAEJ,OAAO;AACL,YAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YACpC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE;AACtD,YAAA,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzC,YAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAC5C,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE;YACrD,oBAAoB,EAAE,IAAI,CAAC,qBAAqB,CAC9C,UAAU,EACV,UAAU,CAAC,oBAAoB,CAChC;YACD,4BAA4B,EAAE,IAAI,CAAC,qBAAqB,CACtD,UAAU,EACV,UAAU,CAAC,4BAA4B,CACxC;YACD,6BAA6B,EAAE,IAAI,CAAC,qBAAqB,CACvD,UAAU,EACV,UAAU,CAAC,6BAA6B,CACzC;YACD,iBAAiB,EAAE,IAAI,CAAC,qBAAqB,CAC3C,UAAU,EACV,UAAU,CAAC,iBAAiB,CAC7B;YACD,UAAU;YACV,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC/C,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE;YACjD,oBAAoB,EAAE,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE;YACvE,qBAAqB,EAAE,UAAU,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,EAAE;YACzE,iBAAiB,EAAE,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE;SAClE;;IAGI,YAAY,CACjB,MAAsB,EACtB,OAAmB,EAAA;QAEnB,OAAO;AACL,YAAA,GAAG,MAAM;AACT,YAAA,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACzC,YAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;SAC7C;;IAGK,qBAAqB,CAC3B,MAEC,EACD,SAAiB,EAAA;AAEjB,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;AAE/B,QAAA,IAAI;AACF,YAAA,OAAO,KAAK,GAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAc,GAAG,SAAS;;QAC1D,OAAO,KAAc,EAAE;AACvB,YAAA,OAAO,SAAS;;;AAIZ,IAAA,aAAa,CAAC,MAAe,EAAA;QACnC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AAC5C,YAAA,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW;AACnC,SAAC,CAAC;QAEF,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,EAAE;;QAGX,OAAO,eAAe,CAAC,KAAK;;AAGtB,IAAA,cAAc,CAAC,OAAmB,EAAA;AACxC,QAAA,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO;AAChC,QAAA,MAAM,KAAK,GAAG,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,CAAC,MAAM;AAEnE,QAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;;AAGxB,IAAA,gBAAgB,CAAC,OAAmB,EAAA;AAC1C,QAAA,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO;AAChC,QAAA,OAAO,OAAO,EAAE,WAAW,EAAE,QAAQ,IAAI,OAAO,EAAE,KAAK,EAAE,QAAQ,IAAI,EAAE;;+GA7G9D,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cAF3B,MAAM,EAAA,CAAA,CAAA;;4FAEP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCAY,kBAAkB,CAAA;IAa7B,WACwC,CAAA,MAAsB,EAC3C,aAA4B,EAAA;QADP,IAAM,CAAA,MAAA,GAAN,MAAM;QAC3B,IAAa,CAAA,aAAA,GAAb,aAAa;QAbzB,IAAS,CAAA,SAAA,GAAG,KAAK;QAEP,IAAK,CAAA,KAAA,GACpB,gEAAgE;AACjD,QAAA,IAAA,CAAA,oBAAoB,GAAkB,IAAI,OAAO,EAAE;AACnD,QAAA,IAAA,CAAA,aAAa,GAAkB,IAAI,OAAO,EAAE;QAC5C,IAAkB,CAAA,kBAAA,GAAG,cAAc;QACnC,IAAiB,CAAA,iBAAA,GAAG,eAAe;QAQlD,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe;;AAGzD,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;;IAGnC,iBAAiB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;;IAG3B,gBAAgB,GAAA;AACrB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE;AAEhD,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7B,IAAI,iBAAiB,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;YAGvB;;QAGF,MAAM,0BAA0B,GAAG,MAAW;AAC5C,YAAA,IAAI,CAAC,+BAA+B,GAAG,CACrC,KAA4C,KAC1C;;gBAEF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;oBACnC;;;gBAIF,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,iBAAiB,EAAE;oBACrD,IAAI,CAAC,iBAAiB,EAAE;;;gBAI1B,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,kBAAkB,EAAE;AACtD,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;;AAEpC,aAAC;YAED,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAC1B,SAAS,EACT,IAAI,CAAC,+BAA+B,CACrC;AACH,SAAC;QAED,IAAI,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AACpD,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,0BAA0B,EAAE;YAC5B;;AAGF,QAAA,MAAM,kBAAkB,GACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC3D,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,QAAA,MAAM,CAAC,WAAW,GAAG,WAAW;QAChC,MAAM,CAAC,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,EAAE;QAC5B,kBAAkB,EAAE,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC;AACxE,QAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,0BAA0B,EAAE;AAC9B,SAAC;AACD,QAAA,MAAM,CAAC,OAAO,GAAG,CAAC,KAAc,KAAI;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CACb,qCAAqC,EACrC,CAAC,SAAS,CAAC,QAAQ,CAAC;;YAEpB,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CACrE,CACF;AACD,YAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC;AAC7D,SAAC;;;IAII,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE;YACzC;;QAEF,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAC7B,SAAS,EACT,IAAI,CAAC,+BAA+B,CACrC;;IAGK,eAAe,GAAA;AACrB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAEvE,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CACrC,CAAC,OAAO,KAAK,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CACxC;;AA/GQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBAcnB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAApF,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAdV,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAeI,MAAM;2BAAC,WAAW;;;MCfV,mBAAmB,CAAA;AAI9B,IAAA,WAAA,CAAoC,eAAgC,EAAA;QAAhC,IAAe,CAAA,eAAA,GAAf,eAAe;QAHlC,IAAM,CAAA,MAAA,GAAG,eAAe;;IAKlC,MAAM,0BAA0B,CACrC,KAAa,EAAA;AAEb,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC;AAE1D,QAAA,OAAO,cAAc,CACnB,IAAI,CAAC,eAAe,CAAC,GAAG,CACtB,CAAG,EAAA,IAAI,CAAC,MAAM,aAAa,EAC3B;YACE,MAAM;AACP,SAAA,CACF,CACF;;AAGI,IAAA,MAAM,cAAc,CACzB,OAAe,EACf,cAAkB,EAAA;AAElB,QAAA,MAAM,cAAc,GAAmC;AACrD,YAAA,OAAO,EAAE;AACP,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,IAAI,EAAE,cAAc;AACrB,aAAA;SACF;QAED,MAAM,WAAW,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,sBAAA,EAAyB,IAAI,CAAC,KAAK,CAAA,CAAE;AAEvE,QAAA,OAAO,cAAc,CACnB,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,WAAW,CAAC,QAAQ,EAAE,EACtB,cAAc,EACd;YACE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAC5B,cAAc,EACd,iCAAiC,CAClC;AACD,YAAA,YAAY,EAAE,MAAM;AACrB,SAAA,CACF,CACF;;+GA/CQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA7D,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCYY,0CAA0C,CAAA;AAGrD,IAAA,WAAA,CACwC,MAAsB,EAC3C,gBAAkC,EAClC,mBAAwC,EACxC,6BAA4D,EAAA;QAHvC,IAAM,CAAA,MAAA,GAAN,MAAM;QAC3B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;;IAGzC,eAAe,GAAA;QACpB,MAAM,oBAAoB,GAAG,CAC3B,OAAsB,KAEtB,OAAO,CAAC,OAAO,KAAA,wBAAA;QAEjB,MAAM,YAAY,GAChB,IAAI,CAAC,cAAc,CAAqB,oBAAoB,CAAC;AAE/D,QAAA,OAAO,YAAY,CAAC,IAAI,CACtB,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;SACpB,CAAC,CACH;;IAGI,uBAAuB,GAAA;QAC5B,MAAM,eAAe,GAAG,CACtB,OAAsB,KAEtB,OAAO,CAAC,OAAO,KAAA,kBAAA;QAEjB,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAgB,eAAe,CAAC;AAExE,QAAA,OAAO,YAAY,CAAC,IAAI,CACtB,GAAG,CAAC,MAAK;;SAER,CAAC,CACH;;IAGI,0BAA0B,GAAA;QAC/B,MAAM,kBAAkB,GAAG,CACzB,OAAsB,KAEtB,OAAO,CAAC,OAAO,KAAA,sBAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,cAAc,CAA2B,kBAAkB,CAAC;;IAGnE,4BAA4B,GAAA;QACjC,MAAM,wBAAwB,GAAG,CAC/B,OAAsB,KAEtB,OAAO,CAAC,OAAO,KAAA,4BAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,cAAc,CACxB,wBAAwB,CACzB;;IAGI,MAAM,uBAAuB,CAAC,KAAa,EAAA;QAChD,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,+BAA+B,EACtD,QAAQ,CACT;QAED,MAAM,UAAU,GACd,MAAM,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,KAAK,CAAC;AAElE,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;;AAG9B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAChE,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,UAAU,CACtB;AAED,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAC7B,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,WAAW,CACvB;;AAGI,IAAA,MAAM,0BAA0B,CACrC,OAAyB,EACzB,OAAW,EAAA;AAEX,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,kCAAkC,EACzD,QAAQ,EACR,EAAE,KAAK,EAAE,OAAO,EAAE,CACnB;QAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAI,OAAO,EAAE,OAAO,CAAC;;AAG5D,IAAA,cAAc,CACpB,YAAsD,EAAA;AAEtD,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CACxC4D,KAAG,CAAwB,CAAC,OAAO,KAAI;AACrC,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC;AAC1C,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAkB;AAC7C,SAAC,CAAC,EACF,MAAM,CAAmB,YAAY,CAAC,CACvC;;AA3GQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0CAA0C,kBAI3C,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAI,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAkF,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,6BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0CAA0C,cAFzC,MAAM,EAAA,CAAA,CAAA;;4FAEP,0CAA0C,EAAA,UAAA,EAAA,CAAA;kBAHtD,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAKI,MAAM;2BAAC,WAAW;;;MCwBV,eAAe,CAAA;AAiB1B,IAAA,IAAW,iBAAiB,GAAA;QAC1B,OAAO,IAAI,CAAC,cAAc;;AAG5B,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;;AAGpC,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;;;AAIlC,IAAA,IAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;;;AAI7C,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc;;AAG/C,IAAA,IAAW,gBAAgB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;;AAG5C,IAAA,IAAW,4BAA4B,GAAA;QACrC,OAAO,IAAI,CAAC;AACT,aAAA,4BAA4B;aAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAGnC,IAAA,IAAW,0BAA0B,GAAA;QACnC,OAAO,IAAI,CAAC;AACT,aAAA,0BAA0B;aAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAGnC,IAAA,IAAW,eAAe,GAAA;QACxB,OAAO,IAAI,CAAC;AACT,aAAA,eAAe;aACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAGnC,IAAA,IAAW,uBAAuB,GAAA;QAChC,OAAO,IAAI,CAAC;AACT,aAAA,uBAAuB;aACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAGnC,IAAA,WAAA,CACwC,MAAsB,EAC3C,mCAAwE,EACxE,gBAAkC,EAClC,eAAgC,EAChC,kBAAgD,EAChD,aAA4B,EAC5B,kBAAsC,EACtC,kCAA8E,EAC9E,6BAA4D,EAC5D,eAAgC,EAAA;QATX,IAAM,CAAA,MAAA,GAAN,MAAM;QAC3B,IAAmC,CAAA,mCAAA,GAAnC,mCAAmC;QACnC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAClB,IAAkC,CAAA,kCAAA,GAAlC,kCAAkC;QAClC,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B;QAC7B,IAAe,CAAA,eAAA,GAAf,eAAe;AA5EjB,QAAA,IAAA,CAAA,OAAO,GAAoB,IAAI,OAAO,EAAE;AACxC,QAAA,IAAA,CAAA,KAAK,GAA4B,IAAI,OAAO,EAAE;AAC9C,QAAA,IAAA,CAAA,eAAe,GAC9B,IAAI,OAAO,EAAE;AACE,QAAA,IAAA,CAAA,gBAAgB,GAAkB,IAAI,OAAO,EAAE;AAC/C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;QAEvC,IAAa,CAAA,aAAA,GAAoB,IAAI;QAMrC,IAAc,CAAA,cAAA,GAA0B,IAAI;QAC5C,IAAK,CAAA,KAAA,GAAmB,IAAI;AAgElC,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE;QAE/B,IAAI,CAAC,mBAAmB,EAAE;;;IAIrB,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE;;;IAIrC,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE;;AAGpC,IAAA,iBAAiB,CAAC,IAAkC,EAAA;AACzD,QAAA,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW;AACrC,QAAA,MAAM,UAAU,GAAG,WAAW,EAAE,MAAM;AACtC,QAAA,MAAM,OAAO,GAAG,WAAW,EAAE,OAAO;AAEpC,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE;YAC3B;;QAGF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC;;IAGjE,MAAM,oBAAoB,CAAC,QAAgB,EAAA;AAChD,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG;YAC1B,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7C,gBAAA,aAAa,EAAE,QAAQ;AACxB,aAAA,CAAC;YAEF,IAAI,CAAC,aAAa,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7C,gBAAA,MAAM,EAAE,cAAc;AACvB,aAAA,CAAC;YACF,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;;QACnD,OAAO,KAAc,EAAE;YACvB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,wBAAwB,EAAE,KAAK,CAAC;YAC7D,IAAI,CAAC,aAAa,CAAC,KAAK,CACtB,IAAI,WAAW,CAAC,cAAc,CAAC,wBAAwB,EAAE;AACvD,gBAAA,SAAS,CAAC,QAAQ;AACnB,aAAA,CAAC,CACH;;QAGH,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAChD,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,uBAAuB,CAAC;;;AAInD,IAAA,MAAM,YAAY,CACvB,QAAgB,EAChB,4BAAqC,EAAA;QAErC,IAAI,IAAI,CAAC,cAAc,EAAE,QAAQ,KAAK,WAAW,EAAE;AACjD,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;;AAG3C,QAAA,IAAI,CAAC,mBAAmB,CAAC,4BAA4B,CAAC;;AAGjD,IAAA,MAAM,wBAAwB,GAAA;AACnC,QAAA,MAAM,IAAI,CAAC,kCAAkC,CAAC,uBAAuB,CACnE,IAAI,CAAC,eAAe,CAAC,KAAK,CAC3B;;AAGI,IAAA,sCAAsC,CAC3C,YAA0B,EAAA;AAE1B,QAAA,KAAK,IAAI,CAAC,kCAAkC,CAAC,0BAA0B,CAE5B,wBAAA,gDAAA;AACzC,YAAA,cAAc,EAAE,YAAY;AAC7B,SAAA,CAAC;;AAGG,IAAA,qBAAqB,CAC1B,UAA0B,EAC1B,KAAa,EACb,SAAmB,EAAA;QAEnB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE;YACV;;AAGF,QAAA,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC;AAChC,YAAA,GAAG,UAAU;YACb,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,oBAAoB,CAAC;YACrE,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAC/D,4BAA4B,EAAE,IAAI,CAAC,SAAS,CAC1C,UAAU,EAAE,4BAA4B,CACzC;YACD,6BAA6B,EAAE,IAAI,CAAC,SAAS,CAC3C,UAAU,EAAE,6BAA6B,CAC1C;YACD,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;YACjD,KAAK;AACN,SAAA,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;;QAGnC,MAAM,aAAa,GAAG,SAAS,GAAG,oBAAoB,GAAG,cAAc;QACvE,OAAO,CAAA,EAAG,aAAa,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,EAAE,CAAA,CAAE;;AAGnD,IAAA,QAAQ,CAAC,IAAkC,EAAA;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,EAAE,WAAW,EAAE,OAAO;QAC1C,IAAI,CAAC,OAAO,EAAE;YACZ;;QAGF,MAAM,cAAc,GAClB,IAAI,CAAC,mCAAmC,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAErE,IAAI,cAAc,EAAE,QAAQ,IAAI,cAAc,EAAE,OAAO,EAAE;AACvD,YAAA,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS;AAC1C,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;gBAC5C,IAAI,IAAI,EAAE;AACR,oBAAA,OAAO,IAAI,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,EAAE;;AAGjC,gBAAA,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK;aACzB,EAAE,EAAE,CAAC;;;AAIV,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE;AAC/C,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI;YACF,OAAO,OAAO,CACZ,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,eAAe,CAAC;gBAC3D,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,CACjD;;QACD,OAAO,KAAc,EAAE;AACvB,YAAA,OAAO,KAAK;;;AAIT,IAAA,sBAAsB,CAAC,UAAkB,EAAA;AAI9C,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa;AACrC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B,QAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;;AAGjB,IAAA,oBAAoB,CAAC,IAAa,EAAA;AACvC,QAAA,MAAM,OAAO,GAAI,IAAoB,EAAE,OAAO;QAC9C,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,EAAE;YACpC;;AAGF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CACxD,IAAI,CAAC,cAAc,EACnB,OAAO,CACR;;IAGI,eAAe,CACpB,UAA0B,EAC1B,gBAAoC,EAAA;AAEpC,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,sBAAsB,CAAC,gBAAgB,EACvC,QAAQ,EACR,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,CAC/B;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC;QAElE,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,UAAU,CAAC,QAAQ,CAAC;YACtE;;AAGF,QAAA,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,gBAAgB,EAAE,MACxD,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAC5C;QACD,IAAI,CAAC,kBAAkB,CACrB,gBAAgB,CAAC,4BAA4B,IAAI,KAAK,CACvD;;AAGI,IAAA,2BAA2B,CAChC,eAAgC,EAAA;AAEhC,QAAA,OAAO,2BAA2B,CAAC,eAAe,CAAC;;AAG9C,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGlB,IAAA,iBAAiB,CACvB,QAAgB,EAAA;QAEhB,QAAQ,QAAQ;AACd,YAAA,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,gBAAgB;AAC9B,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,eAAe;AAC7B,YAAA;AACE,gBAAA,OAAO,SAAS;;;AAId,IAAA,MAAM,aAAa,GAAA;AAIzB,QAAA,MAAM,GAAG,GAAG,MAAM,OAAO,eAAe,CAAC;AACzC,QAAA,OAAO,GAAG;;AAGJ,IAAA,SAAS,CAAC,KAAqB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGhB,IAAA,mBAAmB,CAAC,4BAAqC,EAAA;AAC/D,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,IAAI,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CACtD;;IAGK,mBAAmB,GAAA;QACzB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC;AAE9D,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC3B,YAAA,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACnC,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1B,aAAC,CAAC;AACJ,SAAC,CAAC;;AAGI,IAAA,kBAAkB,CACxB,4BAAqC,EAAA;;AAGrC,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI;cAC3B,uBAAuB,CAAC;AAC1B,cAAE,uBAAuB,CAAC,QAAQ;;AAG9B,IAAA,kBAAkB,CAAC,4BAAqC,EAAA;;AAE9D,QAAA,IACE,IAAI,CAAC,kBAAkB,CAAC,4BAA4B,CAAC;AACnD,YAAA,uBAAuB,CAAC,MAAM;AAChC,YAAA,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAC3C;AACA,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;;;AAtVrB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,kBAoEhB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAtF,mCAAA,EAAA,EAAA,EAAA,KAAA,EAAA6F,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,0CAAA,EAAA,EAAA,EAAA,KAAA,EAAA9H,6BAAA,EAAA,EAAA,EAAA,KAAA,EAAA+H,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AApEV,IAAA,SAAA,IAAA,CAAA,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,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAqEI,MAAM;2BAAC,WAAW;;;ACrHvB;;AAEG;;ACFH;;AAEG;;;;"}
|