{"version":3,"file":"index.cjs","sources":["../src/circuit-breaker.js","../src/retry-handler.js","../src/metrics-tracker.js","../src/middleware-manager.js","../src/presets.js","../src/config-manager.js","../src/request-handler.js","../src/request-executor.js","../src/client-core.js","../src/http-methods.js","../src/client.js","../src/middleware/auth.js","../src/middleware/logging.js","../src/middleware/caching.js","../src/middleware/rate-limiting.js","../src/middleware/utils.js","../src/middleware/stacks.js","../src/middleware/retry.js"],"sourcesContent":["/**\n * Circuit Breaker Implementation\n *\n * Implements the circuit breaker pattern to prevent cascading failures\n * and provide automatic recovery mechanisms.\n */\nexport class CircuitBreaker {\n    constructor(config = {}) {\n        Object.defineProperty(this, \"state\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: \"closed\"\n        });\n        Object.defineProperty(this, \"failureCount\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: 0\n        });\n        Object.defineProperty(this, \"lastFailureTime\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: 0\n        });\n        Object.defineProperty(this, \"config\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this.config = {\n            failureThreshold: config.failureThreshold ?? 5,\n            recoveryTimeout: config.recoveryTimeout ?? 60000, // 1 minute\n            enabled: config.enabled ?? true,\n        };\n    }\n    /**\n     * Check if the circuit breaker allows the request to proceed\n     */\n    canExecute() {\n        if (!this.config.enabled)\n            return true;\n        if (this.state === \"open\") {\n            const timeSinceLastFailure = Date.now() - this.lastFailureTime;\n            if (timeSinceLastFailure < this.config.recoveryTimeout) {\n                return false;\n            }\n            else {\n                this.state = \"half-open\";\n            }\n        }\n        return true;\n    }\n    /**\n     * Record a successful execution\n     */\n    recordSuccess() {\n        if (!this.config.enabled)\n            return;\n        if (this.state === \"half-open\") {\n            this.state = \"closed\";\n            this.failureCount = 0;\n        }\n    }\n    /**\n     * Record a failed execution\n     */\n    recordFailure() {\n        if (!this.config.enabled)\n            return;\n        this.failureCount++;\n        this.lastFailureTime = Date.now();\n        if (this.failureCount >= this.config.failureThreshold) {\n            this.state = \"open\";\n        }\n    }\n    /**\n     * Get current circuit breaker state\n     */\n    getState() {\n        return this.state;\n    }\n    /**\n     * Get circuit breaker metrics\n     */\n    getMetrics() {\n        return {\n            state: this.state,\n            failureCount: this.failureCount,\n            lastFailureTime: this.lastFailureTime,\n        };\n    }\n    /**\n     * Reset the circuit breaker\n     */\n    reset() {\n        this.state = \"closed\";\n        this.failureCount = 0;\n        this.lastFailureTime = 0;\n    }\n    /**\n     * Update configuration\n     */\n    updateConfig(newConfig) {\n        Object.assign(this.config, newConfig);\n    }\n}\n","/**\n * Retry Handler Implementation\n *\n * Handles retry logic with exponential backoff and jitter,\n * along with comprehensive error handling.\n */\nexport class RetryHandler {\n    constructor(config = {}) {\n        Object.defineProperty(this, \"config\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this.config = {\n            maxRetries: config.maxRetries ?? 3,\n            enabled: config.enabled ?? true,\n            baseDelay: config.baseDelay ?? 1000, // 1 second\n            maxDelay: config.maxDelay ?? 30000, // 30 seconds\n            jitterFactor: config.jitterFactor ?? 0.1, // 10% jitter\n        };\n    }\n    /**\n     * Check if an error should trigger a retry\n     */\n    shouldRetry(error) {\n        if (!this.config.enabled)\n            return false;\n        // Retry on network errors or 5xx status codes\n        return (error.status === 0 || // Network error\n            (error.status !== undefined && error.status >= 500 && error.status < 600) || // Server errors\n            error.status === 429 // Rate limiting\n        );\n    }\n    /**\n     * Calculate retry delay with exponential backoff and jitter\n     */\n    calculateRetryDelay(attempt) {\n        const delay = Math.min(this.config.baseDelay * Math.pow(2, attempt), this.config.maxDelay);\n        const jitter = Math.random() * this.config.jitterFactor * delay;\n        return delay + jitter;\n    }\n    /**\n     * Wait for the specified delay\n     */\n    async waitForRetry(delay) {\n        await new Promise(resolve => setTimeout(resolve, delay));\n    }\n    /**\n     * Create a standardized HTTP error\n     */\n    createError(message, config, status = 0, startTime, requestTime, retryCount = 0) {\n        const error = new Error(message);\n        error.status = status;\n        error.config = config;\n        error.requestTime = requestTime;\n        error.retryCount = retryCount;\n        return error;\n    }\n    /**\n     * Get retry configuration\n     */\n    getConfig() {\n        return { ...this.config };\n    }\n    /**\n     * Update retry configuration\n     */\n    updateConfig(newConfig) {\n        Object.assign(this.config, newConfig);\n    }\n}\n","/**\n * Metrics Tracker Implementation\n *\n * Tracks HTTP client performance metrics including request counts,\n * response times, and success/error rates.\n */\nexport class MetricsTracker {\n    constructor(config = {}) {\n        Object.defineProperty(this, \"metrics\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"config\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this.config = {\n            enabled: config.enabled ?? true,\n            trackResponseTime: config.trackResponseTime ?? true,\n            trackRequestCount: config.trackRequestCount ?? true,\n        };\n        this.metrics = {\n            requestCount: 0,\n            successCount: 0,\n            errorCount: 0,\n            averageResponseTime: 0,\n            circuitBreakerState: \"closed\",\n        };\n    }\n    /**\n     * Record a request start\n     */\n    recordRequestStart() {\n        if (!this.config.enabled) {\n            return { startTime: Date.now(), retryCount: 0 };\n        }\n        this.metrics.requestCount++;\n        this.metrics.lastRequestTime = Date.now();\n        return {\n            startTime: Date.now(),\n            retryCount: 0,\n        };\n    }\n    /**\n     * Record a successful request\n     */\n    recordSuccess(requestTime) {\n        if (!this.config.enabled)\n            return;\n        this.metrics.successCount++;\n        this.updateAverageResponseTime(requestTime);\n    }\n    /**\n     * Record a failed request\n     */\n    recordError(requestTime) {\n        if (!this.config.enabled)\n            return;\n        this.metrics.errorCount++;\n        this.updateAverageResponseTime(requestTime);\n    }\n    /**\n     * Update circuit breaker state in metrics\n     */\n    updateCircuitBreakerState(state) {\n        if (!this.config.enabled)\n            return;\n        this.metrics.circuitBreakerState = state;\n    }\n    /**\n     * Get current metrics\n     */\n    getMetrics() {\n        return { ...this.metrics };\n    }\n    /**\n     * Reset all metrics\n     */\n    reset() {\n        this.metrics = {\n            requestCount: 0,\n            successCount: 0,\n            errorCount: 0,\n            averageResponseTime: 0,\n            circuitBreakerState: \"closed\",\n        };\n    }\n    /**\n     * Update metrics configuration\n     */\n    updateConfig(newConfig) {\n        Object.assign(this.config, newConfig);\n    }\n    /**\n     * Calculate success rate\n     */\n    getSuccessRate() {\n        const totalRequests = this.metrics.successCount + this.metrics.errorCount;\n        return totalRequests > 0 ? this.metrics.successCount / totalRequests : 0;\n    }\n    /**\n     * Calculate error rate\n     */\n    getErrorRate() {\n        const totalRequests = this.metrics.successCount + this.metrics.errorCount;\n        return totalRequests > 0 ? this.metrics.errorCount / totalRequests : 0;\n    }\n    updateAverageResponseTime(requestTime) {\n        if (!this.config.trackResponseTime)\n            return;\n        const totalRequests = this.metrics.successCount + this.metrics.errorCount;\n        this.metrics.averageResponseTime =\n            (this.metrics.averageResponseTime * (totalRequests - 1) + requestTime) / totalRequests;\n    }\n}\n","/**\n * Middleware Manager Implementation\n *\n * Manages HTTP middleware execution for request/response processing,\n * error handling, and completion callbacks.\n */\nexport class MiddlewareManager {\n    constructor(initialMiddleware = []) {\n        Object.defineProperty(this, \"middleware\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: []\n        });\n        this.middleware = [...initialMiddleware];\n    }\n    /**\n     * Add middleware to the chain\n     */\n    addMiddleware(middleware) {\n        this.middleware.push(middleware);\n    }\n    /**\n     * Remove middleware from the chain\n     */\n    removeMiddleware(middleware) {\n        const index = this.middleware.indexOf(middleware);\n        if (index > -1) {\n            this.middleware.splice(index, 1);\n        }\n    }\n    /**\n     * Clear all middleware\n     */\n    clearMiddleware() {\n        this.middleware = [];\n    }\n    /**\n     * Get all middleware\n     */\n    getMiddleware() {\n        return [...this.middleware];\n    }\n    /**\n     * Apply request middleware\n     */\n    async processRequest(options) {\n        let processedOptions = options;\n        for (const middleware of this.middleware) {\n            if (middleware.request) {\n                processedOptions = await middleware.request(processedOptions);\n            }\n        }\n        return processedOptions;\n    }\n    /**\n     * Apply response middleware\n     */\n    async processResponse(response) {\n        let processedResponse = response;\n        for (const middleware of this.middleware) {\n            if (middleware.response) {\n                processedResponse = (await middleware.response(processedResponse));\n            }\n        }\n        return processedResponse;\n    }\n    /**\n     * Apply error middleware\n     */\n    async processError(error) {\n        let processedError = error;\n        for (const middleware of this.middleware) {\n            if (middleware.error) {\n                processedError = await middleware.error(processedError);\n            }\n        }\n        return processedError;\n    }\n    /**\n     * Notify middleware of request completion\n     */\n    async notifyCompletion(options, response, error) {\n        for (const middleware of this.middleware) {\n            if (middleware.complete) {\n                await middleware.complete(options, response, error);\n            }\n        }\n    }\n}\n","/**\n * HTTP Client Presets\n *\n * Pre-configured HTTP client settings for common use cases.\n */\nexport const HTTP_PRESETS = {\n    default: {\n        description: \"Standard HTTP client with balanced settings\",\n        config: {\n            baseUrl: \"\",\n            timeout: 30000,\n            retries: 3,\n            enableRetry: true,\n            enableCircuitBreaker: true,\n            enableMetrics: true,\n        },\n    },\n    fast: {\n        description: \"Fast HTTP client with minimal retries and short timeouts\",\n        config: {\n            baseUrl: \"\",\n            timeout: 10000,\n            retries: 1,\n            enableRetry: true,\n            enableCircuitBreaker: false,\n            enableMetrics: false,\n        },\n    },\n    reliable: {\n        description: \"Reliable HTTP client with extensive retries and circuit breaker\",\n        config: {\n            baseUrl: \"\",\n            timeout: 60000,\n            retries: 5,\n            enableRetry: true,\n            enableCircuitBreaker: true,\n            enableMetrics: true,\n        },\n    },\n    api: {\n        description: \"API client optimized for REST API calls\",\n        config: {\n            baseUrl: \"\",\n            timeout: 30000,\n            retries: 3,\n            enableRetry: true,\n            enableCircuitBreaker: true,\n            enableMetrics: true,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                Accept: \"application/json\",\n            },\n        },\n    },\n    upload: {\n        description: \"Upload client with extended timeouts for file uploads\",\n        config: {\n            baseUrl: \"\",\n            timeout: 300000, // 5 minutes\n            retries: 2,\n            enableRetry: true,\n            enableCircuitBreaker: false,\n            enableMetrics: true,\n        },\n    },\n    download: {\n        description: \"Download client optimized for file downloads\",\n        config: {\n            baseUrl: \"\",\n            timeout: 600000, // 10 minutes\n            retries: 2,\n            enableRetry: true,\n            enableCircuitBreaker: false,\n            enableMetrics: true,\n        },\n    },\n    testing: {\n        description: \"Testing client with minimal features for unit tests\",\n        config: {\n            baseUrl: \"\",\n            timeout: 5000,\n            retries: 0,\n            enableRetry: false,\n            enableCircuitBreaker: false,\n            enableMetrics: false,\n        },\n    },\n};\n","/**\n * Configuration Manager Implementation\n *\n * Handles HTTP client configuration management including authentication\n * and header management.\n */\nimport { HTTP_PRESETS } from \"./presets\";\nexport class ConfigManager {\n    constructor(config) {\n        Object.defineProperty(this, \"config\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"baseHeaders\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // Merge with default preset\n        const preset = HTTP_PRESETS[config.preset || \"default\"];\n        this.config = {\n            baseUrl: config.baseUrl,\n            timeout: config.timeout ?? preset.config.timeout ?? 30000,\n            retries: config.retries ?? preset.config.retries ?? 3,\n            apiKey: config.apiKey ?? \"\",\n            headers: config.headers ?? {},\n            authToken: config.authToken ?? \"\",\n            enableRetry: config.enableRetry ?? preset.config.enableRetry ?? true,\n            enableCircuitBreaker: config.enableCircuitBreaker ?? preset.config.enableCircuitBreaker ?? true,\n            enableMetrics: config.enableMetrics ?? preset.config.enableMetrics ?? true,\n            middleware: config.middleware ?? [],\n            preset: config.preset ?? \"default\",\n        };\n        this.baseHeaders = {\n            \"Content-Type\": \"application/json\",\n            Accept: \"application/json\",\n            \"X-Requested-With\": \"XMLHttpRequest\",\n            ...this.config.headers,\n        };\n        // Set up authentication\n        this.updateAuthHeaders();\n    }\n    /**\n     * Get the current configuration\n     */\n    getConfig() {\n        return { ...this.config };\n    }\n    /**\n     * Get the base headers\n     */\n    getBaseHeaders() {\n        return { ...this.baseHeaders };\n    }\n    /**\n     * Update configuration\n     */\n    updateConfig(newConfig) {\n        Object.assign(this.config, newConfig);\n        // Update headers if auth changed\n        if (newConfig.apiKey !== undefined || newConfig.authToken !== undefined) {\n            this.updateAuthHeaders();\n        }\n    }\n    /**\n     * Build URL from endpoint and base URL\n     */\n    buildUrl(endpoint, params) {\n        const url = new URL(endpoint, this.config.baseUrl);\n        if (params) {\n            Object.entries(params).forEach(([key, value]) => {\n                url.searchParams.append(key, String(value));\n            });\n        }\n        return url.toString();\n    }\n    updateAuthHeaders() {\n        if (this.config.apiKey && this.config.apiKey.length > 0) {\n            this.baseHeaders.Authorization = `Bearer ${this.config.apiKey}`;\n        }\n        else if (this.config.authToken && this.config.authToken.length > 0) {\n            this.baseHeaders.Authorization = `Bearer ${this.config.authToken}`;\n        }\n        else {\n            delete this.baseHeaders.Authorization;\n        }\n    }\n}\n","/**\n * Request Handler Implementation\n *\n * Handles the main request logic including retry loops, error handling,\n * and coordination between different components.\n */\nexport class RequestHandler {\n    constructor(circuitBreaker, retryHandler, metricsTracker, middlewareManager, requestExecutor) {\n        Object.defineProperty(this, \"circuitBreaker\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: circuitBreaker\n        });\n        Object.defineProperty(this, \"retryHandler\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: retryHandler\n        });\n        Object.defineProperty(this, \"metricsTracker\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: metricsTracker\n        });\n        Object.defineProperty(this, \"middlewareManager\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: middlewareManager\n        });\n        Object.defineProperty(this, \"requestExecutor\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: requestExecutor\n        });\n    }\n    /**\n     * Execute a request with full retry logic and error handling\n     */\n    async executeRequest(options, url, headers, timeout, retries) {\n        const requestMetrics = this.metricsTracker.recordRequestStart();\n        let lastError = null;\n        for (let attempt = 0; attempt <= retries; attempt++) {\n            try {\n                const response = await this.requestExecutor.executeRequest(options, url, headers, timeout);\n                const requestTime = Date.now() - requestMetrics.startTime;\n                // Update the response with the actual request time\n                response.requestTime = requestTime;\n                // Update metrics and circuit breaker\n                this.metricsTracker.recordSuccess(requestTime);\n                this.circuitBreaker.recordSuccess();\n                this.metricsTracker.updateCircuitBreakerState(this.circuitBreaker.getState());\n                // Apply response middleware\n                const processedResponse = await this.middlewareManager.processResponse(response);\n                // Notify middleware of completion\n                await this.middlewareManager.notifyCompletion(options, processedResponse);\n                return processedResponse;\n            }\n            catch (error) {\n                const requestTime = Date.now() - requestMetrics.startTime;\n                const httpError = this.retryHandler.createError(error instanceof Error ? error.message : \"Unknown error\", options, error instanceof Error && \"status\" in error ? error.status : 0, requestMetrics.startTime, requestTime, attempt);\n                // Apply error middleware\n                const processedError = await this.middlewareManager.processError(httpError);\n                lastError = processedError;\n                // Check if we should retry\n                if (attempt < retries && this.retryHandler.shouldRetry(processedError)) {\n                    const delay = this.retryHandler.calculateRetryDelay(attempt);\n                    await this.retryHandler.waitForRetry(delay);\n                    continue;\n                }\n                // Update circuit breaker and metrics on failure\n                this.circuitBreaker.recordFailure();\n                this.metricsTracker.recordError(requestTime);\n                this.metricsTracker.updateCircuitBreakerState(this.circuitBreaker.getState());\n                // Notify middleware of completion\n                await this.middlewareManager.notifyCompletion(options, undefined, processedError);\n                throw processedError;\n            }\n        }\n        throw lastError;\n    }\n}\n","/**\n * Request Executor Implementation\n *\n * Handles the actual HTTP request execution with proper error handling\n * and response processing.\n */\nexport class RequestExecutor {\n    /**\n     * Execute an HTTP request with proper error handling and response processing\n     */\n    async executeRequest(options, url, headers, timeout) {\n        const controller = new AbortController();\n        const timeoutId = setTimeout(() => controller.abort(), timeout);\n        const signal = options.signal || controller.signal;\n        const requestOptions = {\n            method: options.method,\n            headers,\n            signal,\n        };\n        // Add body for methods that support it\n        if (options.data &&\n            (options.method === \"POST\" ||\n                options.method === \"PUT\" ||\n                options.method === \"PATCH\")) {\n            if (options.data instanceof FormData) {\n                requestOptions.body = options.data;\n                // Remove Content-Type header for FormData (browser will set it with boundary)\n                delete requestOptions.headers[\"Content-Type\"];\n            }\n            else {\n                requestOptions.body = JSON.stringify(options.data);\n            }\n        }\n        const response = await fetch(url, requestOptions);\n        clearTimeout(timeoutId);\n        const responseHeaders = {};\n        response.headers.forEach((value, key) => {\n            responseHeaders[key] = value;\n        });\n        let data;\n        const contentType = response.headers.get(\"content-type\");\n        if (contentType?.includes(\"application/json\")) {\n            data = await response.json();\n        }\n        else if (contentType?.includes(\"text/\")) {\n            data = (await response.text());\n        }\n        else {\n            data = (await response.arrayBuffer());\n        }\n        return {\n            data,\n            status: response.status,\n            statusText: response.statusText,\n            headers: responseHeaders,\n            config: options,\n            requestTime: 0, // Will be calculated in the calling method\n        };\n    }\n}\n","/**\n * HTTP Client Core Implementation\n *\n * Core HTTP client functionality with modular architecture.\n * This is the main orchestrator that coordinates all components.\n */\nimport { CircuitBreaker } from \"./circuit-breaker\";\nimport { RetryHandler } from \"./retry-handler\";\nimport { MetricsTracker } from \"./metrics-tracker\";\nimport { MiddlewareManager } from \"./middleware-manager\";\nimport { ConfigManager } from \"./config-manager\";\nimport { RequestHandler } from \"./request-handler\";\nimport { RequestExecutor } from \"./request-executor\";\nexport class HTTPClientCore {\n    constructor(config) {\n        Object.defineProperty(this, \"configManager\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"circuitBreaker\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"retryHandler\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"metricsTracker\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"middlewareManager\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"requestHandler\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // Initialize configuration manager\n        this.configManager = new ConfigManager(config);\n        const configData = this.configManager.getConfig();\n        // Initialize components\n        this.circuitBreaker = new CircuitBreaker({\n            enabled: configData.enableCircuitBreaker,\n        });\n        this.retryHandler = new RetryHandler({\n            enabled: configData.enableRetry,\n            maxRetries: configData.retries,\n        });\n        this.metricsTracker = new MetricsTracker({\n            enabled: configData.enableMetrics,\n        });\n        this.middlewareManager = new MiddlewareManager(configData.middleware);\n        const requestExecutor = new RequestExecutor();\n        this.requestHandler = new RequestHandler(this.circuitBreaker, this.retryHandler, this.metricsTracker, this.middlewareManager, requestExecutor);\n    }\n    /**\n     * Make HTTP request with retry logic and middleware\n     */\n    async request(options) {\n        // Check circuit breaker\n        if (!this.circuitBreaker.canExecute()) {\n            throw this.retryHandler.createError(\"Circuit breaker is open\", options, 503, Date.now());\n        }\n        // Apply request middleware\n        const processedOptions = await this.middlewareManager.processRequest(options);\n        const url = this.configManager.buildUrl(processedOptions.endpoint, processedOptions.params);\n        const headers = { ...this.configManager.getBaseHeaders(), ...processedOptions.headers };\n        const configData = this.configManager.getConfig();\n        const timeout = processedOptions.timeout ?? configData.timeout;\n        const retries = processedOptions.retries ?? configData.retries;\n        return this.requestHandler.executeRequest(processedOptions, url, headers, timeout, retries);\n    }\n    /**\n     * Update configuration\n     */\n    updateConfig(newConfig) {\n        this.configManager.updateConfig(newConfig);\n    }\n    /**\n     * Get current metrics\n     */\n    getMetrics() {\n        return this.metricsTracker.getMetrics();\n    }\n    /**\n     * Reset metrics\n     */\n    resetMetrics() {\n        this.metricsTracker.reset();\n    }\n    /**\n     * Add middleware\n     */\n    addMiddleware(middleware) {\n        this.middlewareManager.addMiddleware(middleware);\n    }\n    /**\n     * Remove middleware\n     */\n    removeMiddleware(middleware) {\n        this.middlewareManager.removeMiddleware(middleware);\n    }\n    /**\n     * Clear all middleware\n     */\n    clearMiddleware() {\n        this.middlewareManager.clearMiddleware();\n    }\n}\n","/**\n * HTTP Methods Implementation\n *\n * Comprehensive convenience methods for all HTTP operations including\n * GET, POST, PUT, PATCH, DELETE, HEAD, and OPTIONS.\n */\nexport class HTTPMethods {\n    constructor(request) {\n        Object.defineProperty(this, \"request\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: request\n        });\n    }\n    // ============================================================================\n    // Standard HTTP Methods\n    // ============================================================================\n    async get(endpoint, options = {}) {\n        return this.request({ ...options, method: \"GET\", endpoint });\n    }\n    async post(endpoint, data, options = {}) {\n        return this.request({ ...options, method: \"POST\", endpoint, data });\n    }\n    async put(endpoint, data, options = {}) {\n        return this.request({ ...options, method: \"PUT\", endpoint, data });\n    }\n    async patch(endpoint, data, options = {}) {\n        return this.request({ ...options, method: \"PATCH\", endpoint, data });\n    }\n    async delete(endpoint, options = {}) {\n        return this.request({ ...options, method: \"DELETE\", endpoint });\n    }\n    async head(endpoint, options = {}) {\n        return this.request({ ...options, method: \"HEAD\", endpoint });\n    }\n    async options(endpoint, options = {}) {\n        return this.request({ ...options, method: \"OPTIONS\", endpoint });\n    }\n    // ============================================================================\n    // Convenience Methods with Common Patterns\n    // ============================================================================\n    /**\n     * GET request with query parameters\n     */\n    async getWithParams(endpoint, params, options = {}) {\n        return this.request({ ...options, method: \"GET\", endpoint, params });\n    }\n    /**\n     * POST request with JSON data\n     */\n    async postJson(endpoint, data, options = {}) {\n        return this.request({\n            ...options,\n            method: \"POST\",\n            endpoint,\n            data,\n            headers: { \"Content-Type\": \"application/json\", ...options.headers },\n        });\n    }\n    /**\n     * PUT request with JSON data\n     */\n    async putJson(endpoint, data, options = {}) {\n        return this.request({\n            ...options,\n            method: \"PUT\",\n            endpoint,\n            data,\n            headers: { \"Content-Type\": \"application/json\", ...options.headers },\n        });\n    }\n    /**\n     * PATCH request with JSON data\n     */\n    async patchJson(endpoint, data, options = {}) {\n        return this.request({\n            ...options,\n            method: \"PATCH\",\n            endpoint,\n            data,\n            headers: { \"Content-Type\": \"application/json\", ...options.headers },\n        });\n    }\n    /**\n     * POST request with FormData\n     */\n    async postForm(endpoint, formData, options = {}) {\n        return this.request({ ...options, method: \"POST\", endpoint, data: formData });\n    }\n    /**\n     * PUT request with FormData\n     */\n    async putForm(endpoint, formData, options = {}) {\n        return this.request({ ...options, method: \"PUT\", endpoint, data: formData });\n    }\n}\n","/**\n * HTTP Client Implementation\n *\n * Main HTTP client class with comprehensive functionality including\n * middleware support, retry logic, circuit breaker, and error handling.\n * This is the primary interface for the Reynard HTTP system.\n */\nimport { HTTPClientCore } from \"./client-core\";\nimport { HTTPMethods } from \"./http-methods\";\n// ============================================================================\n// HTTP Client Implementation\n// ============================================================================\nexport class HTTPClient {\n    constructor(config) {\n        Object.defineProperty(this, \"core\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"httpMethods\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // Initialize core functionality\n        this.core = new HTTPClientCore(config);\n        // Initialize HTTP methods with bound request method\n        this.httpMethods = new HTTPMethods(this.core.request.bind(this.core));\n    }\n    // ============================================================================\n    // Core Request Method\n    // ============================================================================\n    /**\n     * Make HTTP request with retry logic and middleware\n     */\n    async request(options) {\n        return this.core.request(options);\n    }\n    // ============================================================================\n    // Standard HTTP Methods\n    // ============================================================================\n    async get(endpoint, options = {}) {\n        return this.httpMethods.get(endpoint, options);\n    }\n    async post(endpoint, data, options = {}) {\n        return this.httpMethods.post(endpoint, data, options);\n    }\n    async put(endpoint, data, options = {}) {\n        return this.httpMethods.put(endpoint, data, options);\n    }\n    async patch(endpoint, data, options = {}) {\n        return this.httpMethods.patch(endpoint, data, options);\n    }\n    async delete(endpoint, options = {}) {\n        return this.httpMethods.delete(endpoint, options);\n    }\n    async head(endpoint, options = {}) {\n        return this.httpMethods.head(endpoint, options);\n    }\n    async options(endpoint, options = {}) {\n        return this.httpMethods.options(endpoint, options);\n    }\n    // ============================================================================\n    // Convenience Methods with Common Patterns\n    // ============================================================================\n    /**\n     * GET request with query parameters\n     */\n    async getWithParams(endpoint, params, options = {}) {\n        return this.httpMethods.getWithParams(endpoint, params, options);\n    }\n    /**\n     * POST request with JSON data\n     */\n    async postJson(endpoint, data, options = {}) {\n        return this.httpMethods.postJson(endpoint, data, options);\n    }\n    /**\n     * PUT request with JSON data\n     */\n    async putJson(endpoint, data, options = {}) {\n        return this.httpMethods.putJson(endpoint, data, options);\n    }\n    /**\n     * PATCH request with JSON data\n     */\n    async patchJson(endpoint, data, options = {}) {\n        return this.httpMethods.patchJson(endpoint, data, options);\n    }\n    /**\n     * POST request with FormData\n     */\n    async postForm(endpoint, formData, options = {}) {\n        return this.httpMethods.postForm(endpoint, formData, options);\n    }\n    /**\n     * PUT request with FormData\n     */\n    async putForm(endpoint, formData, options = {}) {\n        return this.httpMethods.putForm(endpoint, formData, options);\n    }\n    // ============================================================================\n    // Middleware Management\n    // ============================================================================\n    addMiddleware(middleware) {\n        this.core.addMiddleware(middleware);\n    }\n    removeMiddleware(middleware) {\n        this.core.removeMiddleware(middleware);\n    }\n    clearMiddleware() {\n        this.core.clearMiddleware();\n    }\n    // ============================================================================\n    // Configuration Management\n    // ============================================================================\n    updateConfig(newConfig) {\n        this.core.updateConfig(newConfig);\n    }\n    // ============================================================================\n    // Metrics and Monitoring\n    // ============================================================================\n    getMetrics() {\n        return this.core.getMetrics();\n    }\n    resetMetrics() {\n        this.core.resetMetrics();\n    }\n}\n","/**\n * Authentication Middleware\n *\n * Handles various authentication methods including bearer tokens,\n * basic auth, API keys, and token refresh functionality.\n */\n/**\n * Create authentication middleware\n */\nexport function createAuthMiddleware(authConfig) {\n    return {\n        request: config => {\n            const headers = { ...config.headers };\n            switch (authConfig.type) {\n                case \"bearer\":\n                    if (authConfig.token) {\n                        headers.Authorization = `Bearer ${authConfig.token}`;\n                    }\n                    break;\n                case \"basic\":\n                    if (authConfig.username && authConfig.password) {\n                        const credentials = btoa(`${authConfig.username}:${authConfig.password}`);\n                        headers.Authorization = `Basic ${credentials}`;\n                    }\n                    break;\n                case \"api-key\":\n                    if (authConfig.apiKey) {\n                        const headerName = authConfig.apiKeyHeader || \"X-API-Key\";\n                        headers[headerName] = authConfig.apiKey;\n                    }\n                    break;\n                case \"custom\":\n                    if (authConfig.customHeaders) {\n                        Object.assign(headers, authConfig.customHeaders);\n                    }\n                    break;\n            }\n            return { ...config, headers };\n        },\n    };\n}\n/**\n * Create token refresh middleware\n */\nexport function createTokenRefreshMiddleware(refreshConfig) {\n    let isRefreshing = false;\n    let refreshPromise = null;\n    return {\n        request: async (config) => {\n            // If we're already refreshing, wait for it\n            if (isRefreshing && refreshPromise) {\n                try {\n                    const newToken = await refreshPromise;\n                    return {\n                        ...config,\n                        headers: {\n                            ...config.headers,\n                            Authorization: `Bearer ${newToken}`,\n                        },\n                    };\n                }\n                catch (error) {\n                    refreshConfig.onTokenExpired();\n                    throw error;\n                }\n            }\n            return config;\n        },\n        error: async (error) => {\n            // Check if it's an authentication error\n            if (error.status === 401 && !isRefreshing) {\n                isRefreshing = true;\n                refreshPromise = refreshToken(refreshConfig);\n                try {\n                    const newToken = await refreshPromise;\n                    refreshConfig.onTokenRefresh(newToken);\n                    // Retry the original request with new token\n                    // This would need to be handled by the client\n                    return error;\n                }\n                catch (refreshError) {\n                    refreshConfig.onTokenExpired();\n                    throw refreshError;\n                }\n                finally {\n                    isRefreshing = false;\n                    refreshPromise = null;\n                }\n            }\n            return error;\n        },\n    };\n}\nasync function refreshToken(config) {\n    const response = await fetch(config.refreshEndpoint, {\n        method: \"POST\",\n        headers: {\n            \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({ refreshToken: config.refreshToken }),\n    });\n    if (!response.ok) {\n        throw new Error(\"Token refresh failed\");\n    }\n    const data = await response.json();\n    return data.accessToken || data.token;\n}\n","/**\n * Logging Middleware\n *\n * Provides configurable logging for HTTP requests, responses, and errors.\n */\n/**\n * Create logging middleware\n */\nexport function createLoggingMiddleware(config = {}) {\n    const { logRequests = true, logResponses = true, logErrors = true, logLevel = \"info\", logger = console.log } = config;\n    return {\n        request: config => {\n            if (logRequests) {\n                logger(logLevel, \"HTTP Request\", {\n                    method: config.method,\n                    endpoint: config.endpoint,\n                    headers: config.headers,\n                    data: config.data,\n                });\n            }\n            return config;\n        },\n        response: response => {\n            if (logResponses) {\n                logger(logLevel, \"HTTP Response\", {\n                    status: response.status,\n                    statusText: response.statusText,\n                    headers: response.headers,\n                    data: response.data,\n                    requestTime: response.requestTime,\n                });\n            }\n            return response;\n        },\n        error: error => {\n            if (logErrors) {\n                logger(\"error\", \"HTTP Error\", {\n                    message: error.message,\n                    status: error.status,\n                    config: error.config,\n                    requestTime: error.requestTime,\n                    retryCount: error.retryCount,\n                });\n            }\n            return error;\n        },\n    };\n}\n","/**\n * Caching Middleware\n *\n * Provides HTTP response caching with configurable TTL and size limits.\n */\n/**\n * Create caching middleware\n */\nexport function createCacheMiddleware(cacheConfig = {}) {\n    const cache = new Map();\n    const { ttl = 300000, // 5 minutes default\n    maxSize = 100, keyGenerator = config => `${config.method}:${config.endpoint}`, } = cacheConfig;\n    return {\n        request: config => {\n            // Only cache GET requests\n            if (config.method !== \"GET\") {\n                return config;\n            }\n            const key = keyGenerator(config);\n            const cached = cache.get(key);\n            if (cached && Date.now() - cached.timestamp < ttl) {\n                // Return cached response (this would need special handling in the client)\n                return config;\n            }\n            return config;\n        },\n        response: response => {\n            // Only cache GET requests\n            if (response.config.method !== \"GET\") {\n                return response;\n            }\n            const key = keyGenerator(response.config);\n            // Clean up old entries if cache is full\n            if (cache.size >= maxSize) {\n                const oldestKey = cache.keys().next().value;\n                if (oldestKey) {\n                    cache.delete(oldestKey);\n                }\n            }\n            cache.set(key, {\n                data: response,\n                timestamp: Date.now(),\n            });\n            return response;\n        },\n    };\n}\n","/**\n * Rate Limiting Middleware\n *\n * Provides request rate limiting with configurable requests per minute\n * and burst limit protection.\n */\n/**\n * Create rate limiting middleware\n */\nexport function createRateLimitMiddleware(rateConfig) {\n    const requests = [];\n    const { requestsPerMinute, burstLimit = requestsPerMinute * 2 } = rateConfig;\n    return {\n        request: config => {\n            const now = Date.now();\n            const oneMinuteAgo = now - 60000;\n            // Remove old requests\n            while (requests.length > 0 && requests[0] < oneMinuteAgo) {\n                requests.shift();\n            }\n            // Check rate limit\n            if (requests.length >= requestsPerMinute) {\n                const oldestRequest = requests[0];\n                const waitTime = oldestRequest + 60000 - now;\n                if (waitTime > 0) {\n                    throw new Error(`Rate limit exceeded. Wait ${waitTime}ms before retrying.`);\n                }\n            }\n            // Check burst limit\n            if (requests.length >= burstLimit) {\n                throw new Error(\"Burst limit exceeded. Too many requests in a short time.\");\n            }\n            requests.push(now);\n            return config;\n        },\n    };\n}\n","/**\n * Utility Middleware\n *\n * Common utility middleware for request/response transformation,\n * error handling, request ID generation, and user agent setting.\n */\n/**\n * Create request transformation middleware\n */\nexport function createRequestTransformMiddleware(transform) {\n    return {\n        request: transform,\n    };\n}\n/**\n * Create response transformation middleware\n */\nexport function createResponseTransformMiddleware(transform) {\n    return {\n        response: response => transform(response),\n    };\n}\n/**\n * Create error handling middleware\n */\nexport function createErrorHandlingMiddleware(errorHandler) {\n    return {\n        error: async (error) => {\n            await errorHandler(error);\n            return error;\n        },\n    };\n}\n/**\n * Create request ID middleware\n */\nexport function createRequestIdMiddleware() {\n    return {\n        request: config => {\n            const requestId = crypto.randomUUID();\n            return {\n                ...config,\n                headers: {\n                    ...config.headers,\n                    \"X-Request-ID\": requestId,\n                },\n            };\n        },\n    };\n}\n/**\n * Create user agent middleware\n */\nexport function createUserAgentMiddleware(userAgent) {\n    return {\n        request: config => {\n            return {\n                ...config,\n                headers: {\n                    ...config.headers,\n                    \"User-Agent\": userAgent,\n                },\n            };\n        },\n    };\n}\n","/**\n * Middleware Stacks\n *\n * Pre-configured middleware combinations for common use cases.\n */\nimport { createAuthMiddleware } from \"./auth\";\nimport { createLoggingMiddleware } from \"./logging\";\nimport { createRateLimitMiddleware } from \"./rate-limiting\";\nimport { createRequestIdMiddleware, createUserAgentMiddleware } from \"./utils\";\n/**\n * Create standard API middleware stack\n */\nexport function createApiMiddlewareStack(options) {\n    const middleware = [];\n    // Add request ID\n    middleware.push(createRequestIdMiddleware());\n    // Add user agent\n    middleware.push(createUserAgentMiddleware(\"Reynard-HTTP-Client/1.0\"));\n    // Add authentication\n    if (options.auth) {\n        middleware.push(createAuthMiddleware(options.auth));\n    }\n    // Add logging\n    if (options.logging) {\n        middleware.push(createLoggingMiddleware(options.logging));\n    }\n    // Add rate limiting\n    if (options.rateLimit) {\n        middleware.push(createRateLimitMiddleware(options.rateLimit));\n    }\n    return middleware;\n}\n/**\n * Create upload middleware stack\n */\nexport function createUploadMiddlewareStack(options) {\n    const middleware = [];\n    // Add request ID\n    middleware.push(createRequestIdMiddleware());\n    // Add authentication\n    if (options.auth) {\n        middleware.push(createAuthMiddleware(options.auth));\n    }\n    // Add logging (without request data for large uploads)\n    if (options.logging) {\n        middleware.push(createLoggingMiddleware({\n            ...options.logging,\n            logRequests: false, // Don't log large request bodies\n        }));\n    }\n    return middleware;\n}\n","/**\n * Retry and Circuit Breaker Middleware\n *\n * Placeholder implementations for retry and circuit breaker functionality.\n * The actual retry logic is implemented in the HTTP client.\n */\n/**\n * Create retry middleware with custom retry logic\n */\nexport function createRetryMiddleware(_retryConfig) {\n    return {\n        error: error => {\n            // This middleware would work with the client's retry logic\n            // The actual retry implementation is in the client\n            return error;\n        },\n    };\n}\n/**\n * Create circuit breaker middleware\n */\nexport function createCircuitBreakerMiddleware(_circuitConfig) {\n    return {\n        error: error => {\n            // Circuit breaker logic is implemented in the client\n            // This middleware can add additional monitoring\n            return error;\n        },\n    };\n}\n"],"names":["CircuitBreaker","config","newConfig","RetryHandler","error","attempt","delay","jitter","resolve","message","status","startTime","requestTime","retryCount","MetricsTracker","state","totalRequests","MiddlewareManager","initialMiddleware","middleware","index","options","processedOptions","response","processedResponse","processedError","HTTP_PRESETS","ConfigManager","preset","endpoint","params","url","key","value","RequestHandler","circuitBreaker","retryHandler","metricsTracker","middlewareManager","requestExecutor","headers","timeout","retries","requestMetrics","lastError","httpError","RequestExecutor","controller","timeoutId","signal","requestOptions","responseHeaders","data","contentType","HTTPClientCore","configData","HTTPMethods","request","formData","HTTPClient","createAuthMiddleware","authConfig","credentials","headerName","createTokenRefreshMiddleware","refreshConfig","isRefreshing","refreshPromise","newToken","refreshToken","refreshError","createLoggingMiddleware","logRequests","logResponses","logErrors","logLevel","logger","createCacheMiddleware","cacheConfig","cache","ttl","maxSize","keyGenerator","cached","oldestKey","createRateLimitMiddleware","rateConfig","requests","requestsPerMinute","burstLimit","now","oneMinuteAgo","waitTime","createRequestTransformMiddleware","transform","createResponseTransformMiddleware","createErrorHandlingMiddleware","errorHandler","createRequestIdMiddleware","requestId","createUserAgentMiddleware","userAgent","createApiMiddlewareStack","createUploadMiddlewareStack","createRetryMiddleware","_retryConfig","createCircuitBreakerMiddleware","_circuitConfig"],"mappings":"gFAMO,MAAMA,CAAe,CACxB,YAAYC,EAAS,GAAI,CACrB,OAAO,eAAe,KAAM,QAAS,CACjC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,QACnB,CAAS,EACD,OAAO,eAAe,KAAM,eAAgB,CACxC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,CACnB,CAAS,EACD,OAAO,eAAe,KAAM,kBAAmB,CAC3C,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,CACnB,CAAS,EACD,OAAO,eAAe,KAAM,SAAU,CAClC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,KAAK,OAAS,CACV,iBAAkBA,EAAO,kBAAoB,EAC7C,gBAAiBA,EAAO,iBAAmB,IAC3C,QAASA,EAAO,SAAW,EACvC,CACI,CAIA,YAAa,CACT,GAAI,CAAC,KAAK,OAAO,QACb,MAAO,GACX,GAAI,KAAK,QAAU,OAAQ,CAEvB,GAD6B,KAAK,IAAG,EAAK,KAAK,gBACpB,KAAK,OAAO,gBACnC,MAAO,GAGP,KAAK,MAAQ,WAErB,CACA,MAAO,EACX,CAIA,eAAgB,CACP,KAAK,OAAO,SAEb,KAAK,QAAU,cACf,KAAK,MAAQ,SACb,KAAK,aAAe,EAE5B,CAIA,eAAgB,CACP,KAAK,OAAO,UAEjB,KAAK,eACL,KAAK,gBAAkB,KAAK,IAAG,EAC3B,KAAK,cAAgB,KAAK,OAAO,mBACjC,KAAK,MAAQ,QAErB,CAIA,UAAW,CACP,OAAO,KAAK,KAChB,CAIA,YAAa,CACT,MAAO,CACH,MAAO,KAAK,MACZ,aAAc,KAAK,aACnB,gBAAiB,KAAK,eAClC,CACI,CAIA,OAAQ,CACJ,KAAK,MAAQ,SACb,KAAK,aAAe,EACpB,KAAK,gBAAkB,CAC3B,CAIA,aAAaC,EAAW,CACpB,OAAO,OAAO,KAAK,OAAQA,CAAS,CACxC,CACJ,CCtGO,MAAMC,CAAa,CACtB,YAAYF,EAAS,GAAI,CACrB,OAAO,eAAe,KAAM,SAAU,CAClC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,KAAK,OAAS,CACV,WAAYA,EAAO,YAAc,EACjC,QAASA,EAAO,SAAW,GAC3B,UAAWA,EAAO,WAAa,IAC/B,SAAUA,EAAO,UAAY,IAC7B,aAAcA,EAAO,cAAgB,EACjD,CACI,CAIA,YAAYG,EAAO,CACf,OAAK,KAAK,OAAO,QAGTA,EAAM,SAAW,GACpBA,EAAM,SAAW,QAAaA,EAAM,QAAU,KAAOA,EAAM,OAAS,KACrEA,EAAM,SAAW,IAJV,EAMf,CAIA,oBAAoBC,EAAS,CACzB,MAAMC,EAAQ,KAAK,IAAI,KAAK,OAAO,UAAY,KAAK,IAAI,EAAGD,CAAO,EAAG,KAAK,OAAO,QAAQ,EACnFE,EAAS,KAAK,OAAM,EAAK,KAAK,OAAO,aAAeD,EAC1D,OAAOA,EAAQC,CACnB,CAIA,MAAM,aAAaD,EAAO,CACtB,MAAM,IAAI,QAAQE,GAAW,WAAWA,EAASF,CAAK,CAAC,CAC3D,CAIA,YAAYG,EAASR,EAAQS,EAAS,EAAGC,EAAWC,EAAaC,EAAa,EAAG,CAC7E,MAAMT,EAAQ,IAAI,MAAMK,CAAO,EAC/B,OAAAL,EAAM,OAASM,EACfN,EAAM,OAASH,EACfG,EAAM,YAAcQ,EACpBR,EAAM,WAAaS,EACZT,CACX,CAIA,WAAY,CACR,MAAO,CAAE,GAAG,KAAK,MAAM,CAC3B,CAIA,aAAaF,EAAW,CACpB,OAAO,OAAO,KAAK,OAAQA,CAAS,CACxC,CACJ,CCjEO,MAAMY,CAAe,CACxB,YAAYb,EAAS,GAAI,CACrB,OAAO,eAAe,KAAM,UAAW,CACnC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,OAAO,eAAe,KAAM,SAAU,CAClC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,KAAK,OAAS,CACV,QAASA,EAAO,SAAW,GAC3B,kBAAmBA,EAAO,mBAAqB,GAC/C,kBAAmBA,EAAO,mBAAqB,EAC3D,EACQ,KAAK,QAAU,CACX,aAAc,EACd,aAAc,EACd,WAAY,EACZ,oBAAqB,EACrB,oBAAqB,QACjC,CACI,CAIA,oBAAqB,CACjB,OAAK,KAAK,OAAO,SAGjB,KAAK,QAAQ,eACb,KAAK,QAAQ,gBAAkB,KAAK,IAAG,EAChC,CACH,UAAW,KAAK,IAAG,EACnB,WAAY,CACxB,GAPmB,CAAE,UAAW,KAAK,IAAG,EAAI,WAAY,CAAC,CAQrD,CAIA,cAAcW,EAAa,CAClB,KAAK,OAAO,UAEjB,KAAK,QAAQ,eACb,KAAK,0BAA0BA,CAAW,EAC9C,CAIA,YAAYA,EAAa,CAChB,KAAK,OAAO,UAEjB,KAAK,QAAQ,aACb,KAAK,0BAA0BA,CAAW,EAC9C,CAIA,0BAA0BG,EAAO,CACxB,KAAK,OAAO,UAEjB,KAAK,QAAQ,oBAAsBA,EACvC,CAIA,YAAa,CACT,MAAO,CAAE,GAAG,KAAK,OAAO,CAC5B,CAIA,OAAQ,CACJ,KAAK,QAAU,CACX,aAAc,EACd,aAAc,EACd,WAAY,EACZ,oBAAqB,EACrB,oBAAqB,QACjC,CACI,CAIA,aAAab,EAAW,CACpB,OAAO,OAAO,KAAK,OAAQA,CAAS,CACxC,CAIA,gBAAiB,CACb,MAAMc,EAAgB,KAAK,QAAQ,aAAe,KAAK,QAAQ,WAC/D,OAAOA,EAAgB,EAAI,KAAK,QAAQ,aAAeA,EAAgB,CAC3E,CAIA,cAAe,CACX,MAAMA,EAAgB,KAAK,QAAQ,aAAe,KAAK,QAAQ,WAC/D,OAAOA,EAAgB,EAAI,KAAK,QAAQ,WAAaA,EAAgB,CACzE,CACA,0BAA0BJ,EAAa,CACnC,GAAI,CAAC,KAAK,OAAO,kBACb,OACJ,MAAMI,EAAgB,KAAK,QAAQ,aAAe,KAAK,QAAQ,WAC/D,KAAK,QAAQ,qBACR,KAAK,QAAQ,qBAAuBA,EAAgB,GAAKJ,GAAeI,CACjF,CACJ,CChHO,MAAMC,CAAkB,CAC3B,YAAYC,EAAoB,GAAI,CAChC,OAAO,eAAe,KAAM,aAAc,CACtC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,CAAA,CACnB,CAAS,EACD,KAAK,WAAa,CAAC,GAAGA,CAAiB,CAC3C,CAIA,cAAcC,EAAY,CACtB,KAAK,WAAW,KAAKA,CAAU,CACnC,CAIA,iBAAiBA,EAAY,CACzB,MAAMC,EAAQ,KAAK,WAAW,QAAQD,CAAU,EAC5CC,EAAQ,IACR,KAAK,WAAW,OAAOA,EAAO,CAAC,CAEvC,CAIA,iBAAkB,CACd,KAAK,WAAa,CAAA,CACtB,CAIA,eAAgB,CACZ,MAAO,CAAC,GAAG,KAAK,UAAU,CAC9B,CAIA,MAAM,eAAeC,EAAS,CAC1B,IAAIC,EAAmBD,EACvB,UAAWF,KAAc,KAAK,WACtBA,EAAW,UACXG,EAAmB,MAAMH,EAAW,QAAQG,CAAgB,GAGpE,OAAOA,CACX,CAIA,MAAM,gBAAgBC,EAAU,CAC5B,IAAIC,EAAoBD,EACxB,UAAWJ,KAAc,KAAK,WACtBA,EAAW,WACXK,EAAqB,MAAML,EAAW,SAASK,CAAiB,GAGxE,OAAOA,CACX,CAIA,MAAM,aAAapB,EAAO,CACtB,IAAIqB,EAAiBrB,EACrB,UAAWe,KAAc,KAAK,WACtBA,EAAW,QACXM,EAAiB,MAAMN,EAAW,MAAMM,CAAc,GAG9D,OAAOA,CACX,CAIA,MAAM,iBAAiBJ,EAASE,EAAUnB,EAAO,CAC7C,UAAWe,KAAc,KAAK,WACtBA,EAAW,UACX,MAAMA,EAAW,SAASE,EAASE,EAAUnB,CAAK,CAG9D,CACJ,CCpFY,MAACsB,EAAe,CACxB,QAAS,CACL,YAAa,8CACb,OAAQ,CACJ,QAAS,GACT,QAAS,IACT,QAAS,EACT,YAAa,GACb,qBAAsB,GACtB,cAAe,EAC3B,CACA,EACI,KAAM,CACF,YAAa,2DACb,OAAQ,CACJ,QAAS,GACT,QAAS,IACT,QAAS,EACT,YAAa,GACb,qBAAsB,GACtB,cAAe,EAC3B,CACA,EACI,SAAU,CACN,YAAa,kEACb,OAAQ,CACJ,QAAS,GACT,QAAS,IACT,QAAS,EACT,YAAa,GACb,qBAAsB,GACtB,cAAe,EAC3B,CACA,EACI,IAAK,CACD,YAAa,0CACb,OAAQ,CACJ,QAAS,GACT,QAAS,IACT,QAAS,EACT,YAAa,GACb,qBAAsB,GACtB,cAAe,GACf,QAAS,CACL,eAAgB,mBAChB,OAAQ,kBACxB,CACA,CACA,EACI,OAAQ,CACJ,YAAa,wDACb,OAAQ,CACJ,QAAS,GACT,QAAS,IACT,QAAS,EACT,YAAa,GACb,qBAAsB,GACtB,cAAe,EAC3B,CACA,EACI,SAAU,CACN,YAAa,+CACb,OAAQ,CACJ,QAAS,GACT,QAAS,IACT,QAAS,EACT,YAAa,GACb,qBAAsB,GACtB,cAAe,EAC3B,CACA,EACI,QAAS,CACL,YAAa,sDACb,OAAQ,CACJ,QAAS,GACT,QAAS,IACT,QAAS,EACT,YAAa,GACb,qBAAsB,GACtB,cAAe,EAC3B,CACA,CACA,EChFO,MAAMC,CAAc,CACvB,YAAY1B,EAAQ,CAChB,OAAO,eAAe,KAAM,SAAU,CAClC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,OAAO,eAAe,KAAM,cAAe,CACvC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EAED,MAAM2B,EAASF,EAAazB,EAAO,QAAU,SAAS,EACtD,KAAK,OAAS,CACV,QAASA,EAAO,QAChB,QAASA,EAAO,SAAW2B,EAAO,OAAO,SAAW,IACpD,QAAS3B,EAAO,SAAW2B,EAAO,OAAO,SAAW,EACpD,OAAQ3B,EAAO,QAAU,GACzB,QAASA,EAAO,SAAW,CAAA,EAC3B,UAAWA,EAAO,WAAa,GAC/B,YAAaA,EAAO,aAAe2B,EAAO,OAAO,aAAe,GAChE,qBAAsB3B,EAAO,sBAAwB2B,EAAO,OAAO,sBAAwB,GAC3F,cAAe3B,EAAO,eAAiB2B,EAAO,OAAO,eAAiB,GACtE,WAAY3B,EAAO,YAAc,CAAA,EACjC,OAAQA,EAAO,QAAU,SACrC,EACQ,KAAK,YAAc,CACf,eAAgB,mBAChB,OAAQ,mBACR,mBAAoB,iBACpB,GAAG,KAAK,OAAO,OAC3B,EAEQ,KAAK,kBAAiB,CAC1B,CAIA,WAAY,CACR,MAAO,CAAE,GAAG,KAAK,MAAM,CAC3B,CAIA,gBAAiB,CACb,MAAO,CAAE,GAAG,KAAK,WAAW,CAChC,CAIA,aAAaC,EAAW,CACpB,OAAO,OAAO,KAAK,OAAQA,CAAS,GAEhCA,EAAU,SAAW,QAAaA,EAAU,YAAc,SAC1D,KAAK,kBAAiB,CAE9B,CAIA,SAAS2B,EAAUC,EAAQ,CACvB,MAAMC,EAAM,IAAI,IAAIF,EAAU,KAAK,OAAO,OAAO,EACjD,OAAIC,GACA,OAAO,QAAQA,CAAM,EAAE,QAAQ,CAAC,CAACE,EAAKC,CAAK,IAAM,CAC7CF,EAAI,aAAa,OAAOC,EAAK,OAAOC,CAAK,CAAC,CAC9C,CAAC,EAEEF,EAAI,SAAQ,CACvB,CACA,mBAAoB,CACZ,KAAK,OAAO,QAAU,KAAK,OAAO,OAAO,OAAS,EAClD,KAAK,YAAY,cAAgB,UAAU,KAAK,OAAO,MAAM,GAExD,KAAK,OAAO,WAAa,KAAK,OAAO,UAAU,OAAS,EAC7D,KAAK,YAAY,cAAgB,UAAU,KAAK,OAAO,SAAS,GAGhE,OAAO,KAAK,YAAY,aAEhC,CACJ,CCpFO,MAAMG,CAAe,CACxB,YAAYC,EAAgBC,EAAcC,EAAgBC,EAAmBC,EAAiB,CAC1F,OAAO,eAAe,KAAM,iBAAkB,CAC1C,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAOJ,CACnB,CAAS,EACD,OAAO,eAAe,KAAM,eAAgB,CACxC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAOC,CACnB,CAAS,EACD,OAAO,eAAe,KAAM,iBAAkB,CAC1C,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAOC,CACnB,CAAS,EACD,OAAO,eAAe,KAAM,oBAAqB,CAC7C,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAOC,CACnB,CAAS,EACD,OAAO,eAAe,KAAM,kBAAmB,CAC3C,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAOC,CACnB,CAAS,CACL,CAIA,MAAM,eAAelB,EAASU,EAAKS,EAASC,EAASC,EAAS,CAC1D,MAAMC,EAAiB,KAAK,eAAe,mBAAkB,EAC7D,IAAIC,EAAY,KAChB,QAASvC,EAAU,EAAGA,GAAWqC,EAASrC,IACtC,GAAI,CACA,MAAMkB,EAAW,MAAM,KAAK,gBAAgB,eAAeF,EAASU,EAAKS,EAASC,CAAO,EACnF7B,EAAc,KAAK,IAAG,EAAK+B,EAAe,UAEhDpB,EAAS,YAAcX,EAEvB,KAAK,eAAe,cAAcA,CAAW,EAC7C,KAAK,eAAe,cAAa,EACjC,KAAK,eAAe,0BAA0B,KAAK,eAAe,SAAQ,CAAE,EAE5E,MAAMY,EAAoB,MAAM,KAAK,kBAAkB,gBAAgBD,CAAQ,EAE/E,aAAM,KAAK,kBAAkB,iBAAiBF,EAASG,CAAiB,EACjEA,CACX,OACOpB,EAAO,CACV,MAAMQ,EAAc,KAAK,IAAG,EAAK+B,EAAe,UAC1CE,EAAY,KAAK,aAAa,YAAYzC,aAAiB,MAAQA,EAAM,QAAU,gBAAiBiB,EAASjB,aAAiB,OAAS,WAAYA,EAAQA,EAAM,OAAS,EAAGuC,EAAe,UAAW/B,EAAaP,CAAO,EAE3NoB,EAAiB,MAAM,KAAK,kBAAkB,aAAaoB,CAAS,EAG1E,GAFAD,EAAYnB,EAERpB,EAAUqC,GAAW,KAAK,aAAa,YAAYjB,CAAc,EAAG,CACpE,MAAMnB,EAAQ,KAAK,aAAa,oBAAoBD,CAAO,EAC3D,MAAM,KAAK,aAAa,aAAaC,CAAK,EAC1C,QACJ,CAEA,WAAK,eAAe,cAAa,EACjC,KAAK,eAAe,YAAYM,CAAW,EAC3C,KAAK,eAAe,0BAA0B,KAAK,eAAe,SAAQ,CAAE,EAE5E,MAAM,KAAK,kBAAkB,iBAAiBS,EAAS,OAAWI,CAAc,EAC1EA,CACV,CAEJ,MAAMmB,CACV,CACJ,CC9EO,MAAME,CAAgB,CAIzB,MAAM,eAAezB,EAASU,EAAKS,EAASC,EAAS,CACjD,MAAMM,EAAa,IAAI,gBACjBC,EAAY,WAAW,IAAMD,EAAW,MAAK,EAAIN,CAAO,EACxDQ,EAAS5B,EAAQ,QAAU0B,EAAW,OACtCG,EAAiB,CACnB,OAAQ7B,EAAQ,OAChB,QAAAmB,EACA,OAAAS,CACZ,EAEY5B,EAAQ,OACPA,EAAQ,SAAW,QAChBA,EAAQ,SAAW,OACnBA,EAAQ,SAAW,WACnBA,EAAQ,gBAAgB,UACxB6B,EAAe,KAAO7B,EAAQ,KAE9B,OAAO6B,EAAe,QAAQ,cAAc,GAG5CA,EAAe,KAAO,KAAK,UAAU7B,EAAQ,IAAI,GAGzD,MAAME,EAAW,MAAM,MAAMQ,EAAKmB,CAAc,EAChD,aAAaF,CAAS,EACtB,MAAMG,EAAkB,CAAA,EACxB5B,EAAS,QAAQ,QAAQ,CAACU,EAAOD,IAAQ,CACrCmB,EAAgBnB,CAAG,EAAIC,CAC3B,CAAC,EACD,IAAImB,EACJ,MAAMC,EAAc9B,EAAS,QAAQ,IAAI,cAAc,EACvD,OAAI8B,GAAa,SAAS,kBAAkB,EACxCD,EAAO,MAAM7B,EAAS,KAAI,EAErB8B,GAAa,SAAS,OAAO,EAClCD,EAAQ,MAAM7B,EAAS,OAGvB6B,EAAQ,MAAM7B,EAAS,cAEpB,CACH,KAAA6B,EACA,OAAQ7B,EAAS,OACjB,WAAYA,EAAS,WACrB,QAAS4B,EACT,OAAQ9B,EACR,YAAa,CACzB,CACI,CACJ,CC9CO,MAAMiC,CAAe,CACxB,YAAYrD,EAAQ,CAChB,OAAO,eAAe,KAAM,gBAAiB,CACzC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,OAAO,eAAe,KAAM,iBAAkB,CAC1C,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,OAAO,eAAe,KAAM,eAAgB,CACxC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,OAAO,eAAe,KAAM,iBAAkB,CAC1C,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,OAAO,eAAe,KAAM,oBAAqB,CAC7C,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,OAAO,eAAe,KAAM,iBAAkB,CAC1C,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EAED,KAAK,cAAgB,IAAI0B,EAAc1B,CAAM,EAC7C,MAAMsD,EAAa,KAAK,cAAc,UAAS,EAE/C,KAAK,eAAiB,IAAIvD,EAAe,CACrC,QAASuD,EAAW,oBAChC,CAAS,EACD,KAAK,aAAe,IAAIpD,EAAa,CACjC,QAASoD,EAAW,YACpB,WAAYA,EAAW,OACnC,CAAS,EACD,KAAK,eAAiB,IAAIzC,EAAe,CACrC,QAASyC,EAAW,aAChC,CAAS,EACD,KAAK,kBAAoB,IAAItC,EAAkBsC,EAAW,UAAU,EACpE,MAAMhB,EAAkB,IAAIO,EAC5B,KAAK,eAAiB,IAAIZ,EAAe,KAAK,eAAgB,KAAK,aAAc,KAAK,eAAgB,KAAK,kBAAmBK,CAAe,CACjJ,CAIA,MAAM,QAAQlB,EAAS,CAEnB,GAAI,CAAC,KAAK,eAAe,aACrB,MAAM,KAAK,aAAa,YAAY,0BAA2BA,EAAS,IAAK,KAAK,KAAK,EAG3F,MAAMC,EAAmB,MAAM,KAAK,kBAAkB,eAAeD,CAAO,EACtEU,EAAM,KAAK,cAAc,SAAST,EAAiB,SAAUA,EAAiB,MAAM,EACpFkB,EAAU,CAAE,GAAG,KAAK,cAAc,iBAAkB,GAAGlB,EAAiB,OAAO,EAC/EiC,EAAa,KAAK,cAAc,UAAS,EACzCd,EAAUnB,EAAiB,SAAWiC,EAAW,QACjDb,EAAUpB,EAAiB,SAAWiC,EAAW,QACvD,OAAO,KAAK,eAAe,eAAejC,EAAkBS,EAAKS,EAASC,EAASC,CAAO,CAC9F,CAIA,aAAaxC,EAAW,CACpB,KAAK,cAAc,aAAaA,CAAS,CAC7C,CAIA,YAAa,CACT,OAAO,KAAK,eAAe,WAAU,CACzC,CAIA,cAAe,CACX,KAAK,eAAe,MAAK,CAC7B,CAIA,cAAciB,EAAY,CACtB,KAAK,kBAAkB,cAAcA,CAAU,CACnD,CAIA,iBAAiBA,EAAY,CACzB,KAAK,kBAAkB,iBAAiBA,CAAU,CACtD,CAIA,iBAAkB,CACd,KAAK,kBAAkB,gBAAe,CAC1C,CACJ,CCpHO,MAAMqC,CAAY,CACrB,YAAYC,EAAS,CACjB,OAAO,eAAe,KAAM,UAAW,CACnC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAOA,CACnB,CAAS,CACL,CAIA,MAAM,IAAI5B,EAAUR,EAAU,GAAI,CAC9B,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,OAAQ,MAAO,SAAAQ,EAAU,CAC/D,CACA,MAAM,KAAKA,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CACrC,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,OAAQ,OAAQ,SAAAQ,EAAU,KAAAuB,EAAM,CACtE,CACA,MAAM,IAAIvB,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CACpC,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,OAAQ,MAAO,SAAAQ,EAAU,KAAAuB,EAAM,CACrE,CACA,MAAM,MAAMvB,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CACtC,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,OAAQ,QAAS,SAAAQ,EAAU,KAAAuB,EAAM,CACvE,CACA,MAAM,OAAOvB,EAAUR,EAAU,GAAI,CACjC,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,OAAQ,SAAU,SAAAQ,EAAU,CAClE,CACA,MAAM,KAAKA,EAAUR,EAAU,GAAI,CAC/B,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,OAAQ,OAAQ,SAAAQ,EAAU,CAChE,CACA,MAAM,QAAQA,EAAUR,EAAU,GAAI,CAClC,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,OAAQ,UAAW,SAAAQ,EAAU,CACnE,CAOA,MAAM,cAAcA,EAAUC,EAAQT,EAAU,CAAA,EAAI,CAChD,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,OAAQ,MAAO,SAAAQ,EAAU,OAAAC,EAAQ,CACvE,CAIA,MAAM,SAASD,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CACzC,OAAO,KAAK,QAAQ,CAChB,GAAGA,EACH,OAAQ,OACR,SAAAQ,EACA,KAAAuB,EACA,QAAS,CAAE,eAAgB,mBAAoB,GAAG/B,EAAQ,OAAO,CAC7E,CAAS,CACL,CAIA,MAAM,QAAQQ,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CACxC,OAAO,KAAK,QAAQ,CAChB,GAAGA,EACH,OAAQ,MACR,SAAAQ,EACA,KAAAuB,EACA,QAAS,CAAE,eAAgB,mBAAoB,GAAG/B,EAAQ,OAAO,CAC7E,CAAS,CACL,CAIA,MAAM,UAAUQ,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CAC1C,OAAO,KAAK,QAAQ,CAChB,GAAGA,EACH,OAAQ,QACR,SAAAQ,EACA,KAAAuB,EACA,QAAS,CAAE,eAAgB,mBAAoB,GAAG/B,EAAQ,OAAO,CAC7E,CAAS,CACL,CAIA,MAAM,SAASQ,EAAU6B,EAAUrC,EAAU,CAAA,EAAI,CAC7C,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,OAAQ,OAAQ,SAAAQ,EAAU,KAAM6B,EAAU,CAChF,CAIA,MAAM,QAAQ7B,EAAU6B,EAAUrC,EAAU,CAAA,EAAI,CAC5C,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAS,OAAQ,MAAO,SAAAQ,EAAU,KAAM6B,EAAU,CAC/E,CACJ,CCpFO,MAAMC,CAAW,CACpB,YAAY1D,EAAQ,CAChB,OAAO,eAAe,KAAM,OAAQ,CAChC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EACD,OAAO,eAAe,KAAM,cAAe,CACvC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACnB,CAAS,EAED,KAAK,KAAO,IAAIqD,EAAerD,CAAM,EAErC,KAAK,YAAc,IAAIuD,EAAY,KAAK,KAAK,QAAQ,KAAK,KAAK,IAAI,CAAC,CACxE,CAOA,MAAM,QAAQnC,EAAS,CACnB,OAAO,KAAK,KAAK,QAAQA,CAAO,CACpC,CAIA,MAAM,IAAIQ,EAAUR,EAAU,GAAI,CAC9B,OAAO,KAAK,YAAY,IAAIQ,EAAUR,CAAO,CACjD,CACA,MAAM,KAAKQ,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CACrC,OAAO,KAAK,YAAY,KAAKQ,EAAUuB,EAAM/B,CAAO,CACxD,CACA,MAAM,IAAIQ,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CACpC,OAAO,KAAK,YAAY,IAAIQ,EAAUuB,EAAM/B,CAAO,CACvD,CACA,MAAM,MAAMQ,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CACtC,OAAO,KAAK,YAAY,MAAMQ,EAAUuB,EAAM/B,CAAO,CACzD,CACA,MAAM,OAAOQ,EAAUR,EAAU,GAAI,CACjC,OAAO,KAAK,YAAY,OAAOQ,EAAUR,CAAO,CACpD,CACA,MAAM,KAAKQ,EAAUR,EAAU,GAAI,CAC/B,OAAO,KAAK,YAAY,KAAKQ,EAAUR,CAAO,CAClD,CACA,MAAM,QAAQQ,EAAUR,EAAU,GAAI,CAClC,OAAO,KAAK,YAAY,QAAQQ,EAAUR,CAAO,CACrD,CAOA,MAAM,cAAcQ,EAAUC,EAAQT,EAAU,CAAA,EAAI,CAChD,OAAO,KAAK,YAAY,cAAcQ,EAAUC,EAAQT,CAAO,CACnE,CAIA,MAAM,SAASQ,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CACzC,OAAO,KAAK,YAAY,SAASQ,EAAUuB,EAAM/B,CAAO,CAC5D,CAIA,MAAM,QAAQQ,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CACxC,OAAO,KAAK,YAAY,QAAQQ,EAAUuB,EAAM/B,CAAO,CAC3D,CAIA,MAAM,UAAUQ,EAAUuB,EAAM/B,EAAU,CAAA,EAAI,CAC1C,OAAO,KAAK,YAAY,UAAUQ,EAAUuB,EAAM/B,CAAO,CAC7D,CAIA,MAAM,SAASQ,EAAU6B,EAAUrC,EAAU,CAAA,EAAI,CAC7C,OAAO,KAAK,YAAY,SAASQ,EAAU6B,EAAUrC,CAAO,CAChE,CAIA,MAAM,QAAQQ,EAAU6B,EAAUrC,EAAU,CAAA,EAAI,CAC5C,OAAO,KAAK,YAAY,QAAQQ,EAAU6B,EAAUrC,CAAO,CAC/D,CAIA,cAAcF,EAAY,CACtB,KAAK,KAAK,cAAcA,CAAU,CACtC,CACA,iBAAiBA,EAAY,CACzB,KAAK,KAAK,iBAAiBA,CAAU,CACzC,CACA,iBAAkB,CACd,KAAK,KAAK,gBAAe,CAC7B,CAIA,aAAajB,EAAW,CACpB,KAAK,KAAK,aAAaA,CAAS,CACpC,CAIA,YAAa,CACT,OAAO,KAAK,KAAK,WAAU,CAC/B,CACA,cAAe,CACX,KAAK,KAAK,aAAY,CAC1B,CACJ,CCzHO,SAAS0D,EAAqBC,EAAY,CAC7C,MAAO,CACH,QAAS5D,GAAU,CACf,MAAMuC,EAAU,CAAE,GAAGvC,EAAO,OAAO,EACnC,OAAQ4D,EAAW,KAAI,CACnB,IAAK,SACGA,EAAW,QACXrB,EAAQ,cAAgB,UAAUqB,EAAW,KAAK,IAEtD,MACJ,IAAK,QACD,GAAIA,EAAW,UAAYA,EAAW,SAAU,CAC5C,MAAMC,EAAc,KAAK,GAAGD,EAAW,QAAQ,IAAIA,EAAW,QAAQ,EAAE,EACxErB,EAAQ,cAAgB,SAASsB,CAAW,EAChD,CACA,MACJ,IAAK,UACD,GAAID,EAAW,OAAQ,CACnB,MAAME,EAAaF,EAAW,cAAgB,YAC9CrB,EAAQuB,CAAU,EAAIF,EAAW,MACrC,CACA,MACJ,IAAK,SACGA,EAAW,eACX,OAAO,OAAOrB,EAASqB,EAAW,aAAa,EAEnD,KACpB,CACY,MAAO,CAAE,GAAG5D,EAAQ,QAAAuC,CAAO,CAC/B,CACR,CACA,CAIO,SAASwB,EAA6BC,EAAe,CACxD,IAAIC,EAAe,GACfC,EAAiB,KACrB,MAAO,CACH,QAAS,MAAOlE,GAAW,CAEvB,GAAIiE,GAAgBC,EAChB,GAAI,CACA,MAAMC,EAAW,MAAMD,EACvB,MAAO,CACH,GAAGlE,EACH,QAAS,CACL,GAAGA,EAAO,QACV,cAAe,UAAUmE,CAAQ,EAC7D,CACA,CACgB,OACOhE,EAAO,CACV,MAAA6D,EAAc,eAAc,EACtB7D,CACV,CAEJ,OAAOH,CACX,EACA,MAAO,MAAOG,GAAU,CAEpB,GAAIA,EAAM,SAAW,KAAO,CAAC8D,EAAc,CACvCA,EAAe,GACfC,EAAiBE,EAAaJ,CAAa,EAC3C,GAAI,CACA,MAAMG,EAAW,MAAMD,EACvB,OAAAF,EAAc,eAAeG,CAAQ,EAG9BhE,CACX,OACOkE,EAAc,CACjB,MAAAL,EAAc,eAAc,EACtBK,CACV,QAChB,CACoBJ,EAAe,GACfC,EAAiB,IACrB,CACJ,CACA,OAAO/D,CACX,CACR,CACA,CACA,eAAeiE,EAAapE,EAAQ,CAChC,MAAMsB,EAAW,MAAM,MAAMtB,EAAO,gBAAiB,CACjD,OAAQ,OACR,QAAS,CACL,eAAgB,kBAC5B,EACQ,KAAM,KAAK,UAAU,CAAE,aAAcA,EAAO,aAAc,CAClE,CAAK,EACD,GAAI,CAACsB,EAAS,GACV,MAAM,IAAI,MAAM,sBAAsB,EAE1C,MAAM6B,EAAO,MAAM7B,EAAS,KAAI,EAChC,OAAO6B,EAAK,aAAeA,EAAK,KACpC,CClGO,SAASmB,EAAwBtE,EAAS,GAAI,CACjD,KAAM,CAAE,YAAAuE,EAAc,GAAM,aAAAC,EAAe,GAAM,UAAAC,EAAY,GAAM,SAAAC,EAAW,OAAQ,OAAAC,EAAS,QAAQ,GAAG,EAAK3E,EAC/G,MAAO,CACH,QAASA,IACDuE,GACAI,EAAOD,EAAU,eAAgB,CAC7B,OAAQ1E,EAAO,OACf,SAAUA,EAAO,SACjB,QAASA,EAAO,QAChB,KAAMA,EAAO,IACjC,CAAiB,EAEEA,GAEX,SAAUsB,IACFkD,GACAG,EAAOD,EAAU,gBAAiB,CAC9B,OAAQpD,EAAS,OACjB,WAAYA,EAAS,WACrB,QAASA,EAAS,QAClB,KAAMA,EAAS,KACf,YAAaA,EAAS,WAC1C,CAAiB,EAEEA,GAEX,MAAOnB,IACCsE,GACAE,EAAO,QAAS,aAAc,CAC1B,QAASxE,EAAM,QACf,OAAQA,EAAM,OACd,OAAQA,EAAM,OACd,YAAaA,EAAM,YACnB,WAAYA,EAAM,UACtC,CAAiB,EAEEA,EAEnB,CACA,CCvCO,SAASyE,EAAsBC,EAAc,GAAI,CACpD,MAAMC,EAAQ,IAAI,IACZ,CAAE,IAAAC,EAAM,IACd,QAAAC,EAAU,IAAK,aAAAC,EAAejF,GAAU,GAAGA,EAAO,MAAM,IAAIA,EAAO,QAAQ,EAAE,EAAM6E,EACnF,MAAO,CACH,QAAS7E,GAAU,CAEf,GAAIA,EAAO,SAAW,MAClB,OAAOA,EAEX,MAAM+B,EAAMkD,EAAajF,CAAM,EACzBkF,EAASJ,EAAM,IAAI/C,CAAG,EAC5B,OAAImD,GAAU,KAAK,IAAG,EAAKA,EAAO,UAAYH,EAEnC/E,CAGf,EACA,SAAUsB,GAAY,CAElB,GAAIA,EAAS,OAAO,SAAW,MAC3B,OAAOA,EAEX,MAAMS,EAAMkD,EAAa3D,EAAS,MAAM,EAExC,GAAIwD,EAAM,MAAQE,EAAS,CACvB,MAAMG,EAAYL,EAAM,KAAI,EAAG,KAAI,EAAG,MAClCK,GACAL,EAAM,OAAOK,CAAS,CAE9B,CACA,OAAAL,EAAM,IAAI/C,EAAK,CACX,KAAMT,EACN,UAAW,KAAK,IAAG,CACnC,CAAa,EACMA,CACX,CACR,CACA,CCrCO,SAAS8D,EAA0BC,EAAY,CAClD,MAAMC,EAAW,CAAA,EACX,CAAE,kBAAAC,EAAmB,WAAAC,EAAaD,EAAoB,CAAC,EAAKF,EAClE,MAAO,CACH,QAASrF,GAAU,CACf,MAAMyF,EAAM,KAAK,IAAG,EACdC,EAAeD,EAAM,IAE3B,KAAOH,EAAS,OAAS,GAAKA,EAAS,CAAC,EAAII,GACxCJ,EAAS,MAAK,EAGlB,GAAIA,EAAS,QAAUC,EAAmB,CAEtC,MAAMI,EADgBL,EAAS,CAAC,EACC,IAAQG,EACzC,GAAIE,EAAW,EACX,MAAM,IAAI,MAAM,6BAA6BA,CAAQ,qBAAqB,CAElF,CAEA,GAAIL,EAAS,QAAUE,EACnB,MAAM,IAAI,MAAM,0DAA0D,EAE9E,OAAAF,EAAS,KAAKG,CAAG,EACVzF,CACX,CACR,CACA,CC3BO,SAAS4F,EAAiCC,EAAW,CACxD,MAAO,CACH,QAASA,CACjB,CACA,CAIO,SAASC,EAAkCD,EAAW,CACzD,MAAO,CACH,SAAUvE,GAAYuE,EAAUvE,CAAQ,CAChD,CACA,CAIO,SAASyE,EAA8BC,EAAc,CACxD,MAAO,CACH,MAAO,MAAO7F,IACV,MAAM6F,EAAa7F,CAAK,EACjBA,EAEnB,CACA,CAIO,SAAS8F,GAA4B,CACxC,MAAO,CACH,QAASjG,GAAU,CACf,MAAMkG,EAAY,OAAO,WAAU,EACnC,MAAO,CACH,GAAGlG,EACH,QAAS,CACL,GAAGA,EAAO,QACV,eAAgBkG,CACpC,CACA,CACQ,CACR,CACA,CAIO,SAASC,EAA0BC,EAAW,CACjD,MAAO,CACH,QAASpG,IACE,CACH,GAAGA,EACH,QAAS,CACL,GAAGA,EAAO,QACV,aAAcoG,CAClC,CACA,EAEA,CACA,CCrDO,SAASC,EAAyBjF,EAAS,CAC9C,MAAMF,EAAa,CAAA,EAEnB,OAAAA,EAAW,KAAK+E,GAA2B,EAE3C/E,EAAW,KAAKiF,EAA0B,yBAAyB,CAAC,EAEhE/E,EAAQ,MACRF,EAAW,KAAKyC,EAAqBvC,EAAQ,IAAI,CAAC,EAGlDA,EAAQ,SACRF,EAAW,KAAKoD,EAAwBlD,EAAQ,OAAO,CAAC,EAGxDA,EAAQ,WACRF,EAAW,KAAKkE,EAA0BhE,EAAQ,SAAS,CAAC,EAEzDF,CACX,CAIO,SAASoF,EAA4BlF,EAAS,CACjD,MAAMF,EAAa,CAAA,EAEnB,OAAAA,EAAW,KAAK+E,GAA2B,EAEvC7E,EAAQ,MACRF,EAAW,KAAKyC,EAAqBvC,EAAQ,IAAI,CAAC,EAGlDA,EAAQ,SACRF,EAAW,KAAKoD,EAAwB,CACpC,GAAGlD,EAAQ,QACX,YAAa,EACzB,CAAS,CAAC,EAECF,CACX,CC1CO,SAASqF,EAAsBC,EAAc,CAChD,MAAO,CACH,MAAOrG,GAGIA,CAEnB,CACA,CAIO,SAASsG,EAA+BC,EAAgB,CAC3D,MAAO,CACH,MAAOvG,GAGIA,CAEnB,CACA"}