{"version":3,"sources":["node_modules/moment/moment.js","node_modules/events/events.js","node_modules/ngx-quill/fesm2022/ngx-quill-config.mjs","node_modules/@angular/core/fesm2022/rxjs-interop.mjs","node_modules/ngx-quill/fesm2022/ngx-quill.mjs","src/app/common/calculator/calculator-operations.enum.ts","src/app/common/calculator/calculator.ts","src/app/tool/calculator/calculator.component.ts","src/app/tool/calculator/calculator.component.html","src/app/tool/drawing-canvas/modes.ts","src/app/tool/drawing-canvas/controls/drawing-canvas-controls.component.ts","src/app/tool/drawing-canvas/controls/drawing-canvas-controls.component.html","src/app/model/answer/3d-shape/canvas-data-mapper.ts","src/app/tool/drawing-canvas/canvas-action.ts","src/app/tool/drawing-canvas/lines.ts","src/app/tool/drawing-canvas/services/line-drawing.service.ts","src/app/tool/drawing-canvas/services/text-drawing.service.ts","src/app/tool/drawing-canvas/drawing-canvas.component.ts","src/app/tool/drawing-canvas/drawing-canvas.component.html","src/app/tool/protractor/protractor.component.ts","src/app/tool/protractor/protractor.component.html","src/app/tool/reorder/reorder.component.ts","src/app/tool/reorder/reorder.component.html","src/app/tool/ruler/enum/ruler-length-type.enum.ts","src/app/tool/ruler/enum/ruler-row-type.enum.ts","src/app/tool/ruler/ruler.component.ts","src/app/tool/ruler/ruler.component.html","src/app/tool/table/table.component.ts","src/app/tool/table/table.component.html","src/app/model/answer/open-response/open-response-length.enum.ts","src/app/model/answer/open-response/open-response-type.enum.ts","src/app/model/answer/open-response/label-alignment.enum.ts","src/app/model/answer/open-response/label-position.enum.ts","src/app/tool/open-response/open-response-labelling.ts","src/app/tool/open-response/simple/simple-response.component.ts","src/app/tool/open-response/simple/simple-response.component.html","src/app/tool/open-response/advanced/advanced-response.component.ts","src/app/tool/open-response/advanced/advanced-response.component.html","src/app/tool/open-response/open-response.component.ts","src/app/tool/open-response/open-response.component.html","src/app/tool/scale/scale.component.ts","src/app/tool/scale/scale.component.html","src/app/tool/multi-choice/multi-choice.component.ts","src/app/tool/multi-choice/multi-choice.component.html","node_modules/@auth0/angular-jwt/fesm2020/auth0-angular-jwt.mjs","node_modules/@highfieldabc/angular-highfieldwebapi/fesm2022/highfieldabc-angular-highfieldwebapi.mjs","node_modules/@highfieldabc/angular-highfieldauth/fesm2022/highfieldabc-angular-highfieldauth.mjs","node_modules/@highfieldabc/angular-highfieldcommon/fesm2022/highfieldabc-angular-highfieldcommon.mjs","node_modules/@highfieldabc/angular-highfieldlayout/fesm2022/highfieldabc-angular-highfieldlayout.mjs","node_modules/@azure/core-http/dist-esm/src/httpHeaders.js","node_modules/@azure/core-http/dist-esm/src/util/base64.browser.js","node_modules/@azure/core-http/dist-esm/src/util/constants.js","node_modules/@azure/core-http/dist-esm/src/util/serializer.common.js","node_modules/uuid/dist/esm-browser/rng.js","node_modules/uuid/dist/esm-browser/regex.js","node_modules/uuid/dist/esm-browser/validate.js","node_modules/uuid/dist/esm-browser/stringify.js","node_modules/uuid/dist/esm-browser/v4.js","node_modules/@azure/core-http/dist-esm/src/util/utils.js","node_modules/@azure/core-http/dist-esm/src/serializer.js","node_modules/@azure/core-http/dist-esm/src/webResource.js","node_modules/@azure/abort-controller/dist-esm/src/AbortController.js","node_modules/@azure/core-http/dist-esm/src/url.js","node_modules/@azure/core-http/dist-esm/src/util/sanitizer.js","node_modules/@azure/core-http/dist-esm/src/util/inspect.browser.js","node_modules/@azure/core-http/src/restError.ts","node_modules/@azure/core-http/dist-esm/src/xhrHttpClient.js","node_modules/@azure/core-http/dist-esm/src/httpPipelineLogLevel.js","node_modules/@azure/core-http/dist-esm/src/operationOptions.js","node_modules/@azure/core-http/dist-esm/src/policies/requestPolicy.js","node_modules/@azure/core-http/dist-esm/src/util/xml.browser.js","node_modules/@azure/core-http/dist-esm/src/policies/deserializationPolicy.js","node_modules/@azure/core-http/dist-esm/src/policies/keepAlivePolicy.js","node_modules/@azure/core-http/dist-esm/src/policies/redirectPolicy.js","node_modules/@azure/core-http/dist-esm/src/util/exponentialBackoffStrategy.js","node_modules/@azure/core-util/node_modules/@azure/abort-controller/dist/browser/AbortError.js","node_modules/@azure/core-util/dist/browser/createAbortablePromise.js","node_modules/@azure/core-util/dist/browser/delay.js","node_modules/@azure/core-util/dist/browser/bytesEncoding.js","node_modules/@azure/core-util/dist/browser/uuidUtils.common.js","node_modules/@azure/core-util/dist/browser/uuidUtils.js","node_modules/@azure/core-util/dist/browser/checkEnvironment.js","node_modules/@azure/logger/dist/browser/log.js","node_modules/@azure/logger/dist/browser/debug.js","node_modules/@azure/logger/dist/browser/index.js","node_modules/@azure/core-http/dist-esm/src/log.js","node_modules/@azure/core-http/dist-esm/src/policies/exponentialRetryPolicy.js","node_modules/@azure/core-http/dist-esm/src/policies/logPolicy.js","node_modules/@azure/core-http/dist-esm/src/operationParameter.js","node_modules/@azure/core-http/dist-esm/src/operationSpec.js","node_modules/@azure/core-auth/dist/browser/tokenCredential.js","node_modules/@azure/core-http/dist-esm/src/policies/msRestUserAgentPolicy.browser.js","node_modules/@azure/core-http/dist-esm/src/policies/userAgentPolicy.js","node_modules/@azure/core-http/dist-esm/src/queryCollectionFormat.js","node_modules/@azure/core-http/dist-esm/src/policies/bearerTokenAuthenticationPolicy.js","node_modules/@azure/core-http/dist-esm/src/policies/disableResponseDecompressionPolicy.browser.js","node_modules/@azure/core-http/dist-esm/src/policies/generateClientRequestIdPolicy.js","node_modules/@azure/core-http/dist-esm/src/httpClientCache.js","node_modules/@azure/core-http/dist-esm/src/policies/proxyPolicy.browser.js","node_modules/@azure/core-http/dist-esm/src/policies/rpRegistrationPolicy.js","node_modules/@azure/core-http/dist-esm/src/policies/signingPolicy.js","node_modules/@azure/core-http/dist-esm/src/policies/systemErrorRetryPolicy.js","node_modules/@azure/core-http/dist-esm/src/policies/throttlingRetryPolicy.js","node_modules/@opentelemetry/api/build/esm/platform/browser/globalThis.js","node_modules/@opentelemetry/api/build/esm/version.js","node_modules/@opentelemetry/api/build/esm/internal/semver.js","node_modules/@opentelemetry/api/build/esm/internal/global-utils.js","node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js","node_modules/@opentelemetry/api/build/esm/diag/types.js","node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js","node_modules/@opentelemetry/api/build/esm/api/diag.js","node_modules/@opentelemetry/api/build/esm/context/context.js","node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js","node_modules/@opentelemetry/api/build/esm/api/context.js","node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js","node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js","node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js","node_modules/@opentelemetry/api/build/esm/trace/context-utils.js","node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js","node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js","node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js","node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js","node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js","node_modules/@opentelemetry/api/build/esm/context-api.js","node_modules/@opentelemetry/api/build/esm/api/trace.js","node_modules/@opentelemetry/api/build/esm/trace-api.js","node_modules/@azure/core-tracing/dist-esm/src/interfaces.js","node_modules/@azure/core-tracing/dist-esm/src/createSpan.js","node_modules/@azure/core-tracing/dist-esm/src/utils/traceParentHeader.js","node_modules/@azure/core-http/dist-esm/src/policies/tracingPolicy.js","node_modules/@azure/core-http/dist-esm/src/serviceClient.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/generated/src/models/mappers.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/generated/src/models/parameters.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/generated/src/operations/service.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/generated/src/operations/container.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/generated/src/operations/blob.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/generated/src/operations/pageBlob.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/generated/src/operations/appendBlob.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/generated/src/operations/blockBlob.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/log.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/utils/constants.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/utils/utils.common.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/policies/StorageBrowserPolicy.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/StorageBrowserPolicyFactory.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/policies/StorageRetryPolicy.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/StorageRetryPolicyFactory.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/policies/CredentialPolicy.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/policies/AnonymousCredentialPolicy.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/credentials/Credential.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/credentials/AnonymousCredential.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/TelemetryPolicyFactory.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/policies/TelemetryPolicy.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/utils/cache.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/policies/StorageBearerTokenChallengeAuthenticationPolicy.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/Pipeline.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/credentials/StorageSharedKeyCredential.browser.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/generated/src/storageClientContext.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/StorageClient.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/utils/tracing.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/sas/BlobSASPermissions.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/sas/ContainerSASPermissions.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/credentials/UserDelegationKeyCredential.browser.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/sas/SasIPRange.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/sas/SASQueryParameters.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/sas/BlobSASSignatureValues.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/BlobLeaseClient.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/BlobQueryResponse.browser.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/models.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/PageBlobRangeResponse.js","node_modules/@azure/core-lro/dist/browser/logger.js","node_modules/@azure/core-lro/dist/browser/legacy/poller.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/pollers/BlobStartCopyFromUrlPoller.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/Range.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/utils/Batch.js","node_modules/@azure/storage-blob/dist-esm/storage-common/src/BufferScheduler.browser.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/utils/utils.browser.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/Clients.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/BatchUtils.browser.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/BatchResponseParser.js","node_modules/@azure/storage-blob/src/utils/Mutex.ts","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/BlobBatch.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/BlobBatchClient.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/ContainerClient.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/sas/AccountSASPermissions.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/sas/AccountSASResourceTypes.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/sas/AccountSASServices.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/sas/AccountSASSignatureValues.js","node_modules/@azure/storage-blob/dist-esm/storage-blob/src/BlobServiceClient.js","node_modules/client-zip/index.js","node_modules/@angular/material/fesm2022/menu.mjs","node_modules/@angular/material/fesm2022/progress-bar.mjs","node_modules/@angular/cdk/fesm2022/clipboard.mjs","node_modules/@highfieldabc/angular-highfield-cdn/fesm2022/highfieldabc-angular-highfield-cdn.mjs","src/app/tool/document-upload/document-upload.component.ts","src/app/tool/document-upload/document-upload.component.html","src/app/model/answer/form/form-builder-element-type-identifier.ts","src/app/model/answer/form/form-builder-element-input-type-identifier.ts","src/app/tool/form/form.component.ts","src/app/tool/form/form.component.html","src/app/tool/tool.module.ts","node_modules/@ng-bootstrap/ng-bootstrap/fesm2022/ng-bootstrap.mjs","src/app/enum/exam-routes.ts","src/app/site/layout/exam-layout/mock-footer/exam-footer.component.ts","src/app/site/layout/exam-layout/mock-footer/exam-footer.component.html","src/app/site/layout/exam-layout/scroll-to/scroll-to.component.ts","src/app/site/layout/exam-layout/scroll-to/scroll-to.component.html","src/app/site/layout/exam-layout/mock-progress-bar/progress-bar.component.ts","src/app/site/layout/exam-layout/mock-progress-bar/progress-bar.component.html","src/app/site/layout/exam-layout/mock-header/exam-header.component.ts","src/app/site/layout/exam-layout/mock-header/exam-header.component.html","src/app/site/layout/layout.module.ts"],"sourcesContent":["//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.moment = factory();\n})(this, function () {\n 'use strict';\n\n var hookCallback;\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n function isUndefined(input) {\n return input === void 0;\n }\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n return a;\n }\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false\n };\n }\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n return false;\n };\n }\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid = flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);\n if (m._strict) {\n isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n }\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = hooks.momentProperties = [],\n updateInProgress = false;\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n function isMoment(obj) {\n return obj instanceof Moment || obj != null && obj._isAMomentObject != null;\n }\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n function deprecate(msg, fn) {\n var firstTime = true;\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + new Error().stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n var deprecations = {};\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n function isFunction(input) {\n return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\\d{1,2}/.source);\n }\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n var keys;\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L'\n };\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n return formatFunctions[format](m);\n }\n function expandFormat(format, locale) {\n var i = 5;\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n return format;\n }\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A'\n };\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n if (format || !formatUpper) {\n return format;\n }\n this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function (tok) {\n if (tok === 'MMMM' || tok === 'MM' || tok === 'DD' || tok === 'dddd') {\n return tok.slice(1);\n }\n return tok;\n }).join('');\n return this._longDateFormat[key];\n }\n var defaultInvalidDate = 'Invalid date';\n function invalidDate() {\n return this._invalidDate;\n }\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years'\n };\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);\n }\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year'\n };\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n return normalizedInput;\n }\n var priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1\n };\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({\n unit: u,\n priority: priorities[u]\n });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n var match1 = /\\d/,\n // 0 - 9\n match2 = /\\d\\d/,\n // 00 - 99\n match3 = /\\d{3}/,\n // 000 - 999\n match4 = /\\d{4}/,\n // 0000 - 9999\n match6 = /[+-]?\\d{6}/,\n // -999999 - 999999\n match1to2 = /\\d\\d?/,\n // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/,\n // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/,\n // 99999 - 999999\n match1to3 = /\\d{1,3}/,\n // 0 - 999\n match1to4 = /\\d{1,4}/,\n // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/,\n // -999999 - 999999\n matchUnsigned = /\\d+/,\n // 0 - inf\n matchSigned = /[+-]?\\d+/,\n // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi,\n // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi,\n // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/,\n // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/,\n // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/,\n // 0-99\n regexes;\n regexes = {};\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n return value;\n }\n var tokens = {};\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n function isLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n }\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n var d = mom._d,\n isUTC = mom._isUTC;\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN;\n // Just in case\n }\n }\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n d = mom._d;\n isUTC = mom._isUTC;\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC ? d.setUTCMilliseconds(value) : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break;\n // See below ...\n default:\n return;\n // Just in case\n }\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC ? d.setUTCFullYear(year, month, date) : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n function mod(n, x) {\n return (n % x + x) % x;\n }\n var indexOf;\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months) ? this._months : this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n var month = value,\n date = mom.date();\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC ? mom._d.setUTCMonth(month, date) : mom._d.setMonth(month, date));\n return mom;\n }\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;\n }\n }\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n }\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n return date;\n }\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var\n // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n return {\n week: resWeek,\n year: resYear\n };\n }\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n var defaultLocaleWeek = {\n dow: 0,\n // Sunday is the first day of the week.\n doy: 6 // The week that contains Jan 6th is the first week of the year.\n };\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n return null;\n }\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];\n return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;\n }\n function localeWeekdaysShort(m) {\n return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n function localeWeekdaysMin(m) {\n return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n function kFormat() {\n return this.hours() || 24;\n }\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n });\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n });\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n meridiem('a', true);\n meridiem('A', false);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n week: defaultLocaleWeek,\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n meridiemParse: defaultLocaleMeridiemParse\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (locales[name] === undefined && typeof module !== 'undefined' && module && module.exports && isLocaleNameSane(name)) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n return globalLocale._abbr;\n }\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n if (!key) {\n return globalLocale;\n }\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n return chooseLocale(key);\n }\n function listLocales() {\n return keys(locales);\n }\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n if (a && getParsingFlags(m).overflow === -2) {\n overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n getParsingFlags(m).overflow = overflow;\n }\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/], ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/], ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/], ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false], ['YYYY-DDD', /\\d{4}-\\d{3}/], ['YYYY-MM', /\\d{4}-\\d\\d/, false], ['YYYYYYMMDD', /[+-]\\d{10}/], ['YYYYMMDD', /\\d{8}/], ['GGGG[W]WWE', /\\d{4}W\\d{3}/], ['GGGG[W]WW', /\\d{4}W\\d{2}/, false], ['YYYYDDD', /\\d{7}/], ['YYYYMM', /\\d{6}/, false], ['YYYY', /\\d{4}/, false]],\n // iso time formats and regexes\n isoTimes = [['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/], ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/], ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/], ['HH:mm', /\\d\\d:\\d\\d/], ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/], ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/], ['HHmmss', /\\d\\d\\d\\d\\d\\d/], ['HHmm', /\\d\\d\\d\\d/], ['HH', /\\d\\d/]],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n return result;\n }\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^()]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n });\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n if (config._d) {\n return;\n }\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n curWeek = weekOfYear(createLocal(), dow, doy);\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n configFromArray(config);\n checkOverflow(config);\n }\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n getParsingFlags(tempConfig).score = currentScore;\n if (!bestFormatIsValid) {\n if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n extend(config, bestMoment || tempConfig);\n }\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map([i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n configFromArray(config);\n }\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n return res;\n }\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n config._locale = config._locale || getLocale(config._l);\n if (input === null || format === undefined && input === '') {\n return createInvalid({\n nullInput: true\n });\n }\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n if (!isValid(config)) {\n config._d = null;\n }\n return config;\n }\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n return createFromConfig(c);\n }\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }),\n prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n });\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n return pickBy('isBefore', args);\n }\n function max() {\n var args = [].slice.call(arguments, 0);\n return pickBy('isAfter', args);\n }\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n return true;\n }\n function isValid$1() {\n return this._isValid;\n }\n function createInvalid$1() {\n return createDuration(NaN);\n }\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds + seconds * 1e3 +\n // 1000\n minutes * 6e4 +\n // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n this._data = {};\n this._locale = getLocale();\n this._bubble();\n }\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);\n });\n }\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n if (matches === null) {\n return null;\n }\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n this.utcOffset(input, keepLocalTime);\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n return (this.utcOffset() - input) % 60 === 0;\n }\n function isDaylightSavingTime() {\n return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\n }\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n var c = {},\n other;\n copyConfig(c, this);\n c = prepareConfig(c);\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n return this._isDSTShifted;\n }\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if (match = aspNetRegex.exec(input)) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n };\n } else if (match = isoRegex.exec(input)) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign)\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n ret = new Duration(duration);\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n return ret;\n }\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n function positiveMomentsDifference(base, other) {\n var res = {};\n res.months = other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n return res;\n }\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return {\n milliseconds: 0,\n months: 0\n };\n }\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val;\n val = period;\n period = tmp;\n }\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n if (!mom.isValid()) {\n // No op\n return;\n }\n updateOffset = updateOffset == null ? true : updateOffset;\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === undefined;\n }\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = ['years', 'year', 'y', 'months', 'month', 'M', 'days', 'day', 'd', 'dates', 'date', 'D', 'hours', 'hour', 'h', 'minutes', 'minute', 'm', 'seconds', 'second', 's', 'milliseconds', 'millisecond', 'ms'],\n i,\n property,\n propertyLen = properties.length;\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n return objectTest && propertyTest;\n }\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest = input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = ['sameDay', 'nextDay', 'lastDay', 'nextWeek', 'lastWeek', 'sameElse'],\n i,\n property;\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n return objectTest && propertyTest;\n }\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';\n }\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n function clone() {\n return new Moment(this);\n }\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n }\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n if (!this.isValid()) {\n return NaN;\n }\n that = cloneWithOffset(input, this);\n if (!that.isValid()) {\n return NaN;\n }\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n units = normalizeUnits(units);\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break;\n // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break;\n // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break;\n // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break;\n // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break;\n // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n return asFloat ? output : absFloor(output);\n }\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n return this.format(prefix + year + datetime + suffix);\n }\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n function from(time, withoutSuffix) {\n if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n return createDuration({\n to: this,\n from: time\n }).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n function to(time, withoutSuffix) {\n if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n return createDuration({\n from: this,\n to: time\n }).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n });\n function localeData() {\n return this._locale;\n }\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return (dividend % divisor + divisor) % divisor;\n }\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n function toDate() {\n return new Date(this.valueOf());\n }\n function toArray() {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n function isValid$2() {\n return isValid(this);\n }\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n }\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n });\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n return '';\n }\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n return '';\n }\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n return '';\n }\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {\n return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;\n }\n }\n return this.year();\n }\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp('^(' + narrowPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(this, input, this.week(), this.weekday() + this.localeData()._week.dow, this.localeData()._week.dow, this.localeData()._week.doy);\n }\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;\n });\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n var proto = Moment.prototype;\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n function preParsePostFormat(string) {\n return string;\n }\n var proto$1 = Locale.prototype;\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n format = format || '';\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n format = format || '';\n }\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n getSetGlobalLocale('en', {\n eras: [{\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD'\n }, {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC'\n }],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n var mathAbs = Math.abs;\n function abs() {\n var data = this._data;\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n return this;\n }\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n data.days = days;\n data.months = months;\n data.years = years;\n return this;\n }\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n units = normalizeUnits(units);\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n function clone$1() {\n return createDuration(this);\n }\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n function weeks() {\n return absFloor(this.days() / 7);\n }\n var round = Math.round,\n thresholds = {\n ss: 44,\n // a few seconds to seconds\n s: 45,\n // seconds to minute\n m: 45,\n // minutes to hour\n h: 22,\n // hours to day\n d: 26,\n // days to month/week\n w: null,\n // weeks to month\n M: 11 // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days];\n if (thresholds.w != null) {\n a = a || weeks <= 1 && ['w'] || weeks < thresholds.w && ['ww', weeks];\n }\n a = a || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n return locale.postformat(output);\n }\n var abs$1 = Math.abs;\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n return totalSign + 'P' + (years ? ymSign + years + 'Y' : '') + (months ? ymSign + months + 'M' : '') + (days ? daysSign + days + 'D' : '') + (hours || minutes || seconds ? 'T' : '') + (hours ? hmsSign + hours + 'H' : '') + (minutes ? hmsSign + minutes + 'M' : '') + (seconds ? hmsSign + s + 'S' : '');\n }\n var proto$2 = Duration.prototype;\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.30.1';\n setHookCallback(createLocal);\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',\n // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',\n // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',\n // \n DATE: 'YYYY-MM-DD',\n // \n TIME: 'HH:mm',\n // \n TIME_SECONDS: 'HH:mm:ss',\n // \n TIME_MS: 'HH:mm:ss.SSS',\n // \n WEEK: 'GGGG-[W]WW',\n // \n MONTH: 'YYYY-MM' // \n };\n return hooks;\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n};\nvar ReflectOwnKeys;\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n};\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function () {\n return defaultMaxListeners;\n },\n set: function (arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\nEventEmitter.init = function () {\n if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = type === 'error';\n var events = this._events;\n if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0) er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n var handler = events[type];\n if (handler === undefined) return false;\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);\n }\n return true;\n};\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n checkListener(listener);\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type, listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n return target;\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\nEventEmitter.prototype.prependListener = function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n};\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0) return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\nfunction _onceWrap(target, type, listener) {\n var state = {\n fired: false,\n wrapFn: undefined,\n target: target,\n type: type,\n listener: listener\n };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\nEventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n};\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener = function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n checkListener(listener);\n events = this._events;\n if (events === undefined) return this;\n list = events[type];\n if (list === undefined) return this;\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0) this._events = Object.create(null);else {\n delete events[type];\n if (events.removeListener) this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n if (position < 0) return this;\n if (position === 0) list.shift();else {\n spliceOne(list, position);\n }\n if (list.length === 1) events[type] = list[0];\n if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);\n }\n return this;\n};\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {\n var listeners, events, i;\n events = this._events;\n if (events === undefined) return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n listeners = events[type];\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n return this;\n};\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n if (events === undefined) return [];\n var evlistener = events[type];\n if (evlistener === undefined) return [];\n if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\nEventEmitter.listenerCount = function (emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n if (events !== undefined) {\n var evlistener = events[type];\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n return 0;\n}\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i) copy[i] = arr[i];\n return copy;\n}\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++) list[index] = list[index + 1];\n list.pop();\n}\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n }\n ;\n eventTargetAgnosticAddListener(emitter, name, resolver, {\n once: true\n });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, {\n once: true\n });\n }\n });\n}\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}","import * as i0 from '@angular/core';\nimport { InjectionToken, NgModule, makeEnvironmentProviders } from '@angular/core';\nconst defaultModules = {\n toolbar: [['bold', 'italic', 'underline', 'strike'],\n // toggled buttons\n ['blockquote', 'code-block'], [{\n header: 1\n }, {\n header: 2\n }],\n // custom button values\n [{\n list: 'ordered'\n }, {\n list: 'bullet'\n }], [{\n script: 'sub'\n }, {\n script: 'super'\n }],\n // superscript/subscript\n [{\n indent: '-1'\n }, {\n indent: '+1'\n }],\n // outdent/indent\n [{\n direction: 'rtl'\n }],\n // text direction\n [{\n size: ['small', false, 'large', 'huge']\n }],\n // custom dropdown\n [{\n header: [1, 2, 3, 4, 5, 6, false]\n }], [{\n color: []\n }, {\n background: []\n }],\n // dropdown with defaults from theme\n [{\n font: []\n }], [{\n align: []\n }], ['clean'],\n // remove formatting button\n ['link', 'image', 'video'],\n // link and image, video\n ['table']]\n};\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst QUILL_CONFIG_TOKEN = new InjectionToken('config', {\n providedIn: 'root',\n factory: () => ({\n modules: defaultModules\n })\n});\n\n/**\n * This `NgModule` provides a global Quill config on the root level, e.g., in `AppModule`.\n * But this eliminates the need to import the entire `ngx-quill` library into the main bundle.\n * The `quill-editor` itself may be rendered in any lazy-loaded module, but importing `QuillModule`\n * into the `AppModule` will bundle the `ngx-quill` into the vendor.\n */\nlet QuillConfigModule = /*#__PURE__*/(() => {\n class QuillConfigModule {\n static forRoot(config) {\n return {\n ngModule: QuillConfigModule,\n providers: [{\n provide: QUILL_CONFIG_TOKEN,\n useValue: config\n }]\n };\n }\n static {\n this.ɵfac = function QuillConfigModule_Factory(t) {\n return new (t || QuillConfigModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: QuillConfigModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return QuillConfigModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Provides Quill configuration at the root level:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideQuillConfig(...)]\n * });\n * ```\n */\nconst provideQuillConfig = config => makeEnvironmentProviders([{\n provide: QUILL_CONFIG_TOKEN,\n useValue: config\n}]);\n\n/*\n * Public API Surface of ngx-quill/config\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { QUILL_CONFIG_TOKEN, QuillConfigModule, defaultModules, provideQuillConfig };\n","/**\n * @license Angular v17.2.4\n * (c) 2010-2022 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { assertInInjectionContext, inject, DestroyRef, Injector, effect, untracked, assertNotInReactiveContext, signal, ɵRuntimeError, computed } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Operator which completes the Observable when the calling context (component, directive, service,\n * etc) is destroyed.\n *\n * @param destroyRef optionally, the `DestroyRef` representing the current context. This can be\n * passed explicitly to use `takeUntilDestroyed` outside of an [injection\n * context](guide/dependency-injection-context). Otherwise, the current `DestroyRef` is injected.\n *\n * @developerPreview\n */\nfunction takeUntilDestroyed(destroyRef) {\n if (!destroyRef) {\n assertInInjectionContext(takeUntilDestroyed);\n destroyRef = inject(DestroyRef);\n }\n const destroyed$ = new Observable(observer => {\n const unregisterFn = destroyRef.onDestroy(observer.next.bind(observer));\n return unregisterFn;\n });\n return source => {\n return source.pipe(takeUntil(destroyed$));\n };\n}\n\n/**\n * Exposes the value of an Angular `Signal` as an RxJS `Observable`.\n *\n * The signal's value will be propagated into the `Observable`'s subscribers using an `effect`.\n *\n * `toObservable` must be called in an injection context unless an injector is provided via options.\n *\n * @developerPreview\n */\nfunction toObservable(source, options) {\n !options?.injector && assertInInjectionContext(toObservable);\n const injector = options?.injector ?? inject(Injector);\n const subject = new ReplaySubject(1);\n const watcher = effect(() => {\n let value;\n try {\n value = source();\n } catch (err) {\n untracked(() => subject.error(err));\n return;\n }\n untracked(() => subject.next(value));\n }, {\n injector,\n manualCleanup: true\n });\n injector.get(DestroyRef).onDestroy(() => {\n watcher.destroy();\n subject.complete();\n });\n return subject.asObservable();\n}\n\n/**\n * Get the current value of an `Observable` as a reactive `Signal`.\n *\n * `toSignal` returns a `Signal` which provides synchronous reactive access to values produced\n * by the given `Observable`, by subscribing to that `Observable`. The returned `Signal` will always\n * have the most recent value emitted by the subscription, and will throw an error if the\n * `Observable` errors.\n *\n * With `requireSync` set to `true`, `toSignal` will assert that the `Observable` produces a value\n * immediately upon subscription. No `initialValue` is needed in this case, and the returned signal\n * does not include an `undefined` type.\n *\n * By default, the subscription will be automatically cleaned up when the current [injection\n * context](/guide/dependency-injection-context) is destroyed. For example, when `toObservable` is\n * called during the construction of a component, the subscription will be cleaned up when the\n * component is destroyed. If an injection context is not available, an explicit `Injector` can be\n * passed instead.\n *\n * If the subscription should persist until the `Observable` itself completes, the `manualCleanup`\n * option can be specified instead, which disables the automatic subscription teardown. No injection\n * context is needed in this configuration as well.\n *\n * @developerPreview\n */\nfunction toSignal(source, options) {\n ngDevMode && assertNotInReactiveContext(toSignal, 'Invoking `toSignal` causes new subscriptions every time. ' + 'Consider moving `toSignal` outside of the reactive context and read the signal value where needed.');\n const requiresCleanup = !options?.manualCleanup;\n requiresCleanup && !options?.injector && assertInInjectionContext(toSignal);\n const cleanupRef = requiresCleanup ? options?.injector?.get(DestroyRef) ?? inject(DestroyRef) : null;\n // Note: T is the Observable value type, and U is the initial value type. They don't have to be\n // the same - the returned signal gives values of type `T`.\n let state;\n if (options?.requireSync) {\n // Initially the signal is in a `NoValue` state.\n state = signal({\n kind: 0 /* StateKind.NoValue */\n });\n } else {\n // If an initial value was passed, use it. Otherwise, use `undefined` as the initial value.\n state = signal({\n kind: 1 /* StateKind.Value */,\n value: options?.initialValue\n });\n }\n // Note: This code cannot run inside a reactive context (see assertion above). If we'd support\n // this, we would subscribe to the observable outside of the current reactive context, avoiding\n // that side-effect signal reads/writes are attribute to the current consumer. The current\n // consumer only needs to be notified when the `state` signal changes through the observable\n // subscription. Additional context (related to async pipe):\n // https://github.com/angular/angular/pull/50522.\n const sub = source.subscribe({\n next: value => state.set({\n kind: 1 /* StateKind.Value */,\n value\n }),\n error: error => {\n if (options?.rejectErrors) {\n // Kick the error back to RxJS. It will be caught and rethrown in a macrotask, which causes\n // the error to end up as an uncaught exception.\n throw error;\n }\n state.set({\n kind: 2 /* StateKind.Error */,\n error\n });\n }\n // Completion of the Observable is meaningless to the signal. Signals don't have a concept of\n // \"complete\".\n });\n if (ngDevMode && options?.requireSync && state().kind === 0 /* StateKind.NoValue */) {\n throw new ɵRuntimeError(601 /* ɵRuntimeErrorCode.REQUIRE_SYNC_WITHOUT_SYNC_EMIT */, '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n }\n // Unsubscribe when the current context is destroyed, if requested.\n cleanupRef?.onDestroy(sub.unsubscribe.bind(sub));\n // The actual returned signal is a `computed` of the `State` signal, which maps the various states\n // to either values or errors.\n return computed(() => {\n const current = state();\n switch (current.kind) {\n case 1 /* StateKind.Value */:\n return current.value;\n case 2 /* StateKind.Error */:\n throw current.error;\n case 0 /* StateKind.NoValue */:\n // This shouldn't really happen because the error is thrown on creation.\n // TODO(alxhub): use a RuntimeError when we finalize the error semantics\n throw new ɵRuntimeError(601 /* ɵRuntimeErrorCode.REQUIRE_SYNC_WITHOUT_SYNC_EMIT */, '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n }\n });\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { takeUntilDestroyed, toObservable, toSignal };\n","import { defaultModules, QUILL_CONFIG_TOKEN } from 'ngx-quill/config';\nexport * from 'ngx-quill/config';\nimport * as i0 from '@angular/core';\nimport { Injectable, Optional, Inject, input, EventEmitter, signal, inject, ElementRef, ChangeDetectorRef, PLATFORM_ID, Renderer2, NgZone, DestroyRef, SecurityContext, Directive, Output, forwardRef, Component, ViewEncapsulation, NgModule } from '@angular/core';\nimport { DOCUMENT, isPlatformServer, NgClass } from '@angular/common';\nimport * as i1 from '@angular/platform-browser';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, defer, isObservable, firstValueFrom, Subscription, fromEvent } from 'rxjs';\nimport { shareReplay, mergeMap, debounceTime } from 'rxjs/operators';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';\nfunction QuillEditorComponent_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n}\nfunction QuillEditorComponent_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n}\nconst _c0 = [[[\"\", \"above-quill-editor-toolbar\", \"\"]], [[\"\", \"quill-editor-toolbar\", \"\"]], [[\"\", \"below-quill-editor-toolbar\", \"\"]]];\nconst _c1 = [\"[above-quill-editor-toolbar]\", \"[quill-editor-toolbar]\", \"[below-quill-editor-toolbar]\"];\nconst getFormat = (format, configFormat) => {\n const passedFormat = format || configFormat;\n return passedFormat || 'html';\n};\nconst raf$ = () => {\n return new Observable(subscriber => {\n const rafId = requestAnimationFrame(() => {\n subscriber.next();\n subscriber.complete();\n });\n return () => cancelAnimationFrame(rafId);\n });\n};\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nlet QuillService = /*#__PURE__*/(() => {\n class QuillService {\n constructor(injector, config) {\n this.config = config;\n this.quill$ = defer(async () => {\n if (!this.Quill) {\n // Quill adds events listeners on import https://github.com/quilljs/quill/blob/develop/core/emitter.js#L8\n // We'd want to use the unpatched `addEventListener` method to have all event callbacks to be run outside of zone.\n // We don't know yet if the `zone.js` is used or not, just save the value to restore it back further.\n const maybePatchedAddEventListener = this.document.addEventListener;\n // There're 2 types of Angular applications:\n // 1) zone-full (by default)\n // 2) zone-less\n // The developer can avoid importing the `zone.js` package and tells Angular that he/she is responsible for running\n // the change detection by himself. This is done by \"nooping\" the zone through `CompilerOptions` when bootstrapping\n // the root module. We fallback to `document.addEventListener` if `__zone_symbol__addEventListener` is not defined,\n // this means the `zone.js` is not imported.\n // The `__zone_symbol__addEventListener` is basically a native DOM API, which is not patched by zone.js, thus not even going\n // through the `zone.js` task lifecycle. You can also access the native DOM API as follows `target[Zone.__symbol__('methodName')]`.\n this.document.addEventListener =\n // eslint-disable-next-line @typescript-eslint/dot-notation\n this.document['__zone_symbol__addEventListener'] || this.document.addEventListener;\n const quillImport = await import('quill');\n this.document.addEventListener = maybePatchedAddEventListener;\n this.Quill =\n // seems like esmodules have nested \"default\"\n quillImport.default?.default ?? quillImport.default ?? quillImport;\n }\n // Only register custom options and modules once\n this.config.customOptions?.forEach(customOption => {\n const newCustomOption = this.Quill.import(customOption.import);\n newCustomOption.whitelist = customOption.whitelist;\n this.Quill.register(newCustomOption, true, this.config.suppressGlobalRegisterWarning);\n });\n return await this.registerCustomModules(this.Quill, this.config.customModules, this.config.suppressGlobalRegisterWarning);\n }).pipe(shareReplay({\n bufferSize: 1,\n refCount: true\n }));\n this.document = injector.get(DOCUMENT);\n if (!this.config) {\n this.config = {\n modules: defaultModules\n };\n }\n }\n getQuill() {\n return this.quill$;\n }\n /**\n * Marked as internal so it won't be available for `ngx-quill` consumers, this is only\n * internal method to be used within the library.\n *\n * @internal\n */\n async registerCustomModules(Quill, customModules, suppressGlobalRegisterWarning) {\n if (Array.isArray(customModules)) {\n // eslint-disable-next-line prefer-const\n for (let {\n implementation,\n path\n } of customModules) {\n // The `implementation` might be an observable that resolves the actual implementation,\n // e.g. if it should be lazy loaded.\n if (isObservable(implementation)) {\n implementation = await firstValueFrom(implementation);\n }\n Quill.register(path, implementation, suppressGlobalRegisterWarning);\n }\n }\n // Return `Quill` constructor so we'll be able to re-use its return value except of using\n // `map` operators, etc.\n return Quill;\n }\n static {\n this.ɵfac = function QuillService_Factory(t) {\n return new (t || QuillService)(i0.ɵɵinject(i0.Injector), i0.ɵɵinject(QUILL_CONFIG_TOKEN, 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: QuillService,\n factory: QuillService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return QuillService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nlet QuillEditorBase = /*#__PURE__*/(() => {\n class QuillEditorBase {\n constructor() {\n this.format = input(undefined);\n this.theme = input(undefined);\n this.modules = input(undefined);\n this.debug = input(false);\n this.readOnly = input(false);\n this.placeholder = input(undefined);\n this.maxLength = input(undefined);\n this.minLength = input(undefined);\n this.required = input(false);\n this.formats = input(undefined);\n this.customToolbarPosition = input('top');\n this.sanitize = input(undefined);\n this.beforeRender = input(undefined);\n this.styles = input(null);\n this.registry = input(undefined);\n this.bounds = input(undefined);\n this.customOptions = input([]);\n this.customModules = input([]);\n this.trackChanges = input(undefined);\n this.classes = input(undefined);\n this.trimOnValidation = input(false);\n this.linkPlaceholder = input(undefined);\n this.compareValues = input(false);\n this.filterNull = input(false);\n this.debounceTime = input(undefined);\n /*\n https://github.com/KillerCodeMonkey/ngx-quill/issues/1257 - fix null value set\n provide default empty value\n by default null\n e.g. defaultEmptyValue=\"\" - empty string\n \n */\n this.defaultEmptyValue = input(null);\n this.onEditorCreated = new EventEmitter();\n this.onEditorChanged = new EventEmitter();\n this.onContentChanged = new EventEmitter();\n this.onSelectionChanged = new EventEmitter();\n this.onFocus = new EventEmitter();\n this.onBlur = new EventEmitter();\n this.onNativeFocus = new EventEmitter();\n this.onNativeBlur = new EventEmitter();\n this.disabled = false; // used to store initial value before ViewInit\n this.toolbarPosition = signal('top');\n this.subscription = null;\n this.quillSubscription = null;\n this.elementRef = inject(ElementRef);\n this.document = inject(DOCUMENT);\n this.cd = inject(ChangeDetectorRef);\n this.domSanitizer = inject(DomSanitizer);\n this.platformId = inject(PLATFORM_ID);\n this.renderer = inject(Renderer2);\n this.zone = inject(NgZone);\n this.service = inject(QuillService);\n this.destroyRef = inject(DestroyRef);\n this.valueGetter = input(quillEditor => {\n let html = quillEditor.getSemanticHTML();\n if (this.isEmptyValue(html)) {\n html = this.defaultEmptyValue();\n }\n let modelValue = html;\n const format = getFormat(this.format(), this.service.config.format);\n if (format === 'text') {\n modelValue = quillEditor.getText();\n } else if (format === 'object') {\n modelValue = quillEditor.getContents();\n } else if (format === 'json') {\n try {\n modelValue = JSON.stringify(quillEditor.getContents());\n } catch (e) {\n modelValue = quillEditor.getText();\n }\n }\n return modelValue;\n });\n this.valueSetter = input((quillEditor, value) => {\n const format = getFormat(this.format(), this.service.config.format);\n if (format === 'html') {\n const sanitize = [true, false].includes(this.sanitize()) ? this.sanitize() : this.service.config.sanitize || false;\n if (sanitize) {\n value = this.domSanitizer.sanitize(SecurityContext.HTML, value);\n }\n return quillEditor.clipboard.convert({\n html: value\n });\n } else if (format === 'json') {\n try {\n return JSON.parse(value);\n } catch (e) {\n return [{\n insert: value\n }];\n }\n }\n return value;\n });\n this.selectionChangeHandler = (range, oldRange, source) => {\n const trackChanges = this.trackChanges() || this.service.config.trackChanges;\n const shouldTriggerOnModelTouched = !range && !!this.onModelTouched && (source === 'user' || trackChanges && trackChanges === 'all');\n // only emit changes when there's any listener\n if (!this.onBlur.observed && !this.onFocus.observed && !this.onSelectionChanged.observed && !shouldTriggerOnModelTouched) {\n return;\n }\n this.zone.run(() => {\n if (range === null) {\n this.onBlur.emit({\n editor: this.quillEditor,\n source\n });\n } else if (oldRange === null) {\n this.onFocus.emit({\n editor: this.quillEditor,\n source\n });\n }\n this.onSelectionChanged.emit({\n editor: this.quillEditor,\n oldRange,\n range,\n source\n });\n if (shouldTriggerOnModelTouched) {\n this.onModelTouched();\n }\n this.cd.markForCheck();\n });\n };\n this.textChangeHandler = (delta, oldDelta, source) => {\n // only emit changes emitted by user interactions\n const text = this.quillEditor.getText();\n const content = this.quillEditor.getContents();\n let html = this.quillEditor.getSemanticHTML();\n if (this.isEmptyValue(html)) {\n html = this.defaultEmptyValue();\n }\n const trackChanges = this.trackChanges() || this.service.config.trackChanges;\n const shouldTriggerOnModelChange = (source === 'user' || trackChanges && trackChanges === 'all') && !!this.onModelChange;\n // only emit changes when there's any listener\n if (!this.onContentChanged.observed && !shouldTriggerOnModelChange) {\n return;\n }\n this.zone.run(() => {\n if (shouldTriggerOnModelChange) {\n const valueGetter = this.valueGetter();\n this.onModelChange(valueGetter(this.quillEditor));\n }\n this.onContentChanged.emit({\n content,\n delta,\n editor: this.quillEditor,\n html,\n oldDelta,\n source,\n text\n });\n this.cd.markForCheck();\n });\n };\n // eslint-disable-next-line max-len\n this.editorChangeHandler = (event, current, old, source) => {\n // only emit changes when there's any listener\n if (!this.onEditorChanged.observed) {\n return;\n }\n // only emit changes emitted by user interactions\n if (event === 'text-change') {\n const text = this.quillEditor.getText();\n const content = this.quillEditor.getContents();\n let html = this.quillEditor.getSemanticHTML();\n if (this.isEmptyValue(html)) {\n html = this.defaultEmptyValue();\n }\n this.zone.run(() => {\n this.onEditorChanged.emit({\n content,\n delta: current,\n editor: this.quillEditor,\n event,\n html,\n oldDelta: old,\n source,\n text\n });\n this.cd.markForCheck();\n });\n } else {\n this.zone.run(() => {\n this.onEditorChanged.emit({\n editor: this.quillEditor,\n event,\n oldRange: old,\n range: current,\n source\n });\n this.cd.markForCheck();\n });\n }\n };\n }\n static normalizeClassNames(classes) {\n const classList = classes.trim().split(' ');\n return classList.reduce((prev, cur) => {\n const trimmed = cur.trim();\n if (trimmed) {\n prev.push(trimmed);\n }\n return prev;\n }, []);\n }\n ngOnInit() {\n this.toolbarPosition.set(this.customToolbarPosition());\n }\n ngAfterViewInit() {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n // The `quill-editor` component might be destroyed before the `quill` chunk is loaded and its code is executed\n // this will lead to runtime exceptions, since the code will be executed on DOM nodes that don't exist within the tree.\n this.quillSubscription = this.service.getQuill().pipe(mergeMap(Quill => {\n const promises = [this.service.registerCustomModules(Quill, this.customModules())];\n const beforeRender = this.beforeRender() ?? this.service.config.beforeRender;\n if (beforeRender) {\n promises.push(beforeRender());\n }\n return Promise.all(promises).then(() => Quill);\n })).subscribe(Quill => {\n this.editorElem = this.elementRef.nativeElement.querySelector('[quill-editor-element]');\n const toolbarElem = this.elementRef.nativeElement.querySelector('[quill-editor-toolbar]');\n const modules = Object.assign({}, this.modules() || this.service.config.modules);\n if (toolbarElem) {\n modules.toolbar = toolbarElem;\n } else if (modules.toolbar === undefined) {\n modules.toolbar = defaultModules.toolbar;\n }\n let placeholder = this.placeholder() !== undefined ? this.placeholder() : this.service.config.placeholder;\n if (placeholder === undefined) {\n placeholder = 'Insert text here ...';\n }\n const styles = this.styles();\n if (styles) {\n Object.keys(styles).forEach(key => {\n this.renderer.setStyle(this.editorElem, key, styles[key]);\n });\n }\n if (this.classes()) {\n this.addClasses(this.classes());\n }\n this.customOptions().forEach(customOption => {\n const newCustomOption = Quill.import(customOption.import);\n newCustomOption.whitelist = customOption.whitelist;\n Quill.register(newCustomOption, true);\n });\n let bounds = this.bounds() && this.bounds() === 'self' ? this.editorElem : this.bounds();\n if (!bounds) {\n bounds = this.service.config.bounds ? this.service.config.bounds : this.document.body;\n }\n let debug = this.debug();\n if (!debug && debug !== false && this.service.config.debug) {\n debug = this.service.config.debug;\n }\n let readOnly = this.readOnly();\n if (!readOnly && this.readOnly() !== false) {\n readOnly = this.service.config.readOnly !== undefined ? this.service.config.readOnly : false;\n }\n let formats = this.formats();\n if (!formats && formats === undefined) {\n formats = this.service.config.formats ? [...this.service.config.formats] : this.service.config.formats === null ? null : undefined;\n }\n this.zone.runOutsideAngular(() => {\n this.quillEditor = new Quill(this.editorElem, {\n bounds,\n debug,\n formats,\n modules,\n placeholder,\n readOnly,\n registry: this.registry(),\n theme: this.theme() || (this.service.config.theme ? this.service.config.theme : 'snow')\n });\n if (this.onNativeBlur.observed) {\n // https://github.com/quilljs/quill/issues/2186#issuecomment-533401328\n this.quillEditor.scroll.domNode.addEventListener('blur', () => this.onNativeBlur.next({\n editor: this.quillEditor,\n source: 'dom'\n }));\n // https://github.com/quilljs/quill/issues/2186#issuecomment-803257538\n const toolbar = this.quillEditor.getModule('toolbar');\n toolbar.container?.addEventListener('mousedown', e => e.preventDefault());\n }\n if (this.onNativeFocus.observed) {\n this.quillEditor.scroll.domNode.addEventListener('focus', () => this.onNativeFocus.next({\n editor: this.quillEditor,\n source: 'dom'\n }));\n }\n // Set optional link placeholder, Quill has no native API for it so using workaround\n if (this.linkPlaceholder()) {\n const tooltip = this.quillEditor?.theme?.tooltip;\n const input = tooltip?.root?.querySelector('input[data-link]');\n if (input?.dataset) {\n input.dataset.link = this.linkPlaceholder();\n }\n }\n });\n if (this.content) {\n const format = getFormat(this.format(), this.service.config.format);\n if (format === 'text') {\n this.quillEditor.setText(this.content, 'silent');\n } else {\n const valueSetter = this.valueSetter();\n const newValue = valueSetter(this.quillEditor, this.content);\n this.quillEditor.setContents(newValue, 'silent');\n }\n const history = this.quillEditor.getModule('history');\n history.clear();\n }\n // initialize disabled status based on this.disabled as default value\n this.setDisabledState();\n this.addQuillEventListeners();\n // The `requestAnimationFrame` triggers change detection. There's no sense to invoke the `requestAnimationFrame` if anyone is\n // listening to the `onEditorCreated` event inside the template, for instance ``.\n if (!this.onEditorCreated.observed && !this.onValidatorChanged) {\n return;\n }\n // The `requestAnimationFrame` will trigger change detection and `onEditorCreated` will also call `markDirty()`\n // internally, since Angular wraps template event listeners into `listener` instruction. We're using the `requestAnimationFrame`\n // to prevent the frame drop and avoid `ExpressionChangedAfterItHasBeenCheckedError` error.\n raf$().pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.onValidatorChanged) {\n this.onValidatorChanged();\n }\n this.onEditorCreated.emit(this.quillEditor);\n });\n });\n }\n ngOnDestroy() {\n this.dispose();\n this.quillSubscription?.unsubscribe();\n this.quillSubscription = null;\n }\n ngOnChanges(changes) {\n if (!this.quillEditor) {\n return;\n }\n /* eslint-disable @typescript-eslint/dot-notation */\n if (changes.readOnly) {\n this.quillEditor.enable(!changes.readOnly.currentValue);\n }\n if (changes.placeholder) {\n this.quillEditor.root.dataset.placeholder = changes.placeholder.currentValue;\n }\n if (changes.styles) {\n const currentStyling = changes.styles.currentValue;\n const previousStyling = changes.styles.previousValue;\n if (previousStyling) {\n Object.keys(previousStyling).forEach(key => {\n this.renderer.removeStyle(this.editorElem, key);\n });\n }\n if (currentStyling) {\n Object.keys(currentStyling).forEach(key => {\n this.renderer.setStyle(this.editorElem, key, this.styles()[key]);\n });\n }\n }\n if (changes.classes) {\n const currentClasses = changes.classes.currentValue;\n const previousClasses = changes.classes.previousValue;\n if (previousClasses) {\n this.removeClasses(previousClasses);\n }\n if (currentClasses) {\n this.addClasses(currentClasses);\n }\n }\n // We'd want to re-apply event listeners if the `debounceTime` binding changes to apply the\n // `debounceTime` operator or vice-versa remove it.\n if (changes.debounceTime) {\n this.addQuillEventListeners();\n }\n /* eslint-enable @typescript-eslint/dot-notation */\n }\n addClasses(classList) {\n QuillEditorBase.normalizeClassNames(classList).forEach(c => {\n this.renderer.addClass(this.editorElem, c);\n });\n }\n removeClasses(classList) {\n QuillEditorBase.normalizeClassNames(classList).forEach(c => {\n this.renderer.removeClass(this.editorElem, c);\n });\n }\n writeValue(currentValue) {\n // optional fix for https://github.com/angular/angular/issues/14988\n if (this.filterNull() && currentValue === null) {\n return;\n }\n this.content = currentValue;\n if (!this.quillEditor) {\n return;\n }\n const format = getFormat(this.format(), this.service.config.format);\n const valueSetter = this.valueSetter();\n const newValue = valueSetter(this.quillEditor, currentValue);\n if (this.compareValues()) {\n const currentEditorValue = this.quillEditor.getContents();\n if (JSON.stringify(currentEditorValue) === JSON.stringify(newValue)) {\n return;\n }\n }\n if (currentValue) {\n if (format === 'text') {\n this.quillEditor.setText(currentValue);\n } else {\n this.quillEditor.setContents(newValue);\n }\n return;\n }\n this.quillEditor.setText('');\n }\n setDisabledState(isDisabled = this.disabled) {\n // store initial value to set appropriate disabled status after ViewInit\n this.disabled = isDisabled;\n if (this.quillEditor) {\n if (isDisabled) {\n this.quillEditor.disable();\n this.renderer.setAttribute(this.elementRef.nativeElement, 'disabled', 'disabled');\n } else {\n if (!this.readOnly()) {\n this.quillEditor.enable();\n }\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'disabled');\n }\n }\n }\n registerOnChange(fn) {\n this.onModelChange = fn;\n }\n registerOnTouched(fn) {\n this.onModelTouched = fn;\n }\n registerOnValidatorChange(fn) {\n this.onValidatorChanged = fn;\n }\n validate() {\n if (!this.quillEditor) {\n return null;\n }\n const err = {};\n let valid = true;\n const text = this.quillEditor.getText();\n // trim text if wanted + handle special case that an empty editor contains a new line\n const textLength = this.trimOnValidation() ? text.trim().length : text.length === 1 && text.trim().length === 0 ? 0 : text.length - 1;\n const deltaOperations = this.quillEditor.getContents().ops;\n const onlyEmptyOperation = !!deltaOperations && deltaOperations.length === 1 && ['\\n', ''].includes(deltaOperations[0].insert?.toString());\n if (this.minLength() && textLength && textLength < this.minLength()) {\n err.minLengthError = {\n given: textLength,\n minLength: this.minLength()\n };\n valid = false;\n }\n if (this.maxLength() && textLength > this.maxLength()) {\n err.maxLengthError = {\n given: textLength,\n maxLength: this.maxLength()\n };\n valid = false;\n }\n if (this.required() && !textLength && onlyEmptyOperation) {\n err.requiredError = {\n empty: true\n };\n valid = false;\n }\n return valid ? null : err;\n }\n addQuillEventListeners() {\n this.dispose();\n // We have to enter the `` zone when adding event listeners, so `debounceTime` will spawn the\n // `AsyncAction` there w/o triggering change detections. We still re-enter the Angular's zone through\n // `zone.run` when we emit an event to the parent component.\n this.zone.runOutsideAngular(() => {\n this.subscription = new Subscription();\n this.subscription.add(\n // mark model as touched if editor lost focus\n fromEvent(this.quillEditor, 'selection-change').subscribe(([range, oldRange, source]) => {\n this.selectionChangeHandler(range, oldRange, source);\n }));\n // The `fromEvent` supports passing JQuery-style event targets, the editor has `on` and `off` methods which\n // will be invoked upon subscription and teardown.\n let textChange$ = fromEvent(this.quillEditor, 'text-change');\n let editorChange$ = fromEvent(this.quillEditor, 'editor-change');\n if (typeof this.debounceTime() === 'number') {\n textChange$ = textChange$.pipe(debounceTime(this.debounceTime()));\n editorChange$ = editorChange$.pipe(debounceTime(this.debounceTime()));\n }\n this.subscription.add(\n // update model if text changes\n textChange$.subscribe(([delta, oldDelta, source]) => {\n this.textChangeHandler(delta, oldDelta, source);\n }));\n this.subscription.add(\n // triggered if selection or text changed\n editorChange$.subscribe(([event, current, old, source]) => {\n this.editorChangeHandler(event, current, old, source);\n }));\n });\n }\n dispose() {\n if (this.subscription !== null) {\n this.subscription.unsubscribe();\n this.subscription = null;\n }\n }\n isEmptyValue(html) {\n return html === '

' || html === '
' || html === '


' || html === '

';\n }\n static {\n this.ɵfac = function QuillEditorBase_Factory(t) {\n return new (t || QuillEditorBase)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: QuillEditorBase,\n inputs: {\n format: [i0.ɵɵInputFlags.SignalBased, \"format\"],\n theme: [i0.ɵɵInputFlags.SignalBased, \"theme\"],\n modules: [i0.ɵɵInputFlags.SignalBased, \"modules\"],\n debug: [i0.ɵɵInputFlags.SignalBased, \"debug\"],\n readOnly: [i0.ɵɵInputFlags.SignalBased, \"readOnly\"],\n placeholder: [i0.ɵɵInputFlags.SignalBased, \"placeholder\"],\n maxLength: [i0.ɵɵInputFlags.SignalBased, \"maxLength\"],\n minLength: [i0.ɵɵInputFlags.SignalBased, \"minLength\"],\n required: [i0.ɵɵInputFlags.SignalBased, \"required\"],\n formats: [i0.ɵɵInputFlags.SignalBased, \"formats\"],\n customToolbarPosition: [i0.ɵɵInputFlags.SignalBased, \"customToolbarPosition\"],\n sanitize: [i0.ɵɵInputFlags.SignalBased, \"sanitize\"],\n beforeRender: [i0.ɵɵInputFlags.SignalBased, \"beforeRender\"],\n styles: [i0.ɵɵInputFlags.SignalBased, \"styles\"],\n registry: [i0.ɵɵInputFlags.SignalBased, \"registry\"],\n bounds: [i0.ɵɵInputFlags.SignalBased, \"bounds\"],\n customOptions: [i0.ɵɵInputFlags.SignalBased, \"customOptions\"],\n customModules: [i0.ɵɵInputFlags.SignalBased, \"customModules\"],\n trackChanges: [i0.ɵɵInputFlags.SignalBased, \"trackChanges\"],\n classes: [i0.ɵɵInputFlags.SignalBased, \"classes\"],\n trimOnValidation: [i0.ɵɵInputFlags.SignalBased, \"trimOnValidation\"],\n linkPlaceholder: [i0.ɵɵInputFlags.SignalBased, \"linkPlaceholder\"],\n compareValues: [i0.ɵɵInputFlags.SignalBased, \"compareValues\"],\n filterNull: [i0.ɵɵInputFlags.SignalBased, \"filterNull\"],\n debounceTime: [i0.ɵɵInputFlags.SignalBased, \"debounceTime\"],\n defaultEmptyValue: [i0.ɵɵInputFlags.SignalBased, \"defaultEmptyValue\"],\n valueGetter: [i0.ɵɵInputFlags.SignalBased, \"valueGetter\"],\n valueSetter: [i0.ɵɵInputFlags.SignalBased, \"valueSetter\"]\n },\n outputs: {\n onEditorCreated: \"onEditorCreated\",\n onEditorChanged: \"onEditorChanged\",\n onContentChanged: \"onContentChanged\",\n onSelectionChanged: \"onSelectionChanged\",\n onFocus: \"onFocus\",\n onBlur: \"onBlur\",\n onNativeFocus: \"onNativeFocus\",\n onNativeBlur: \"onNativeBlur\"\n },\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return QuillEditorBase;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet QuillEditorComponent = /*#__PURE__*/(() => {\n class QuillEditorComponent extends QuillEditorBase {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵQuillEditorComponent_BaseFactory;\n return function QuillEditorComponent_Factory(t) {\n return (ɵQuillEditorComponent_BaseFactory || (ɵQuillEditorComponent_BaseFactory = i0.ɵɵgetInheritedFactory(QuillEditorComponent)))(t || QuillEditorComponent);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: QuillEditorComponent,\n selectors: [[\"quill-editor\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n useExisting: forwardRef(() => QuillEditorComponent)\n }, {\n multi: true,\n provide: NG_VALIDATORS,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n useExisting: forwardRef(() => QuillEditorComponent)\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c1,\n decls: 5,\n vars: 2,\n consts: [[\"quill-editor-element\", \"\"]],\n template: function QuillEditorComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c0);\n i0.ɵɵtemplate(0, QuillEditorComponent_Conditional_0_Template, 1, 0, \"div\", 0);\n i0.ɵɵprojection(1);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵprojection(3, 2);\n i0.ɵɵtemplate(4, QuillEditorComponent_Conditional_4_Template, 1, 0, \"div\", 0);\n }\n if (rf & 2) {\n i0.ɵɵconditional(0, ctx.toolbarPosition() !== \"top\" ? 0 : -1);\n i0.ɵɵadvance(4);\n i0.ɵɵconditional(4, ctx.toolbarPosition() === \"top\" ? 4 : -1);\n }\n },\n styles: [\"[_nghost-%COMP%]{display:inline-block}\"]\n });\n }\n }\n return QuillEditorComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet QuillViewHTMLComponent = /*#__PURE__*/(() => {\n class QuillViewHTMLComponent {\n constructor(sanitizer, service) {\n this.sanitizer = sanitizer;\n this.service = service;\n this.content = input('');\n this.theme = input(undefined);\n this.sanitize = input(undefined);\n this.innerHTML = signal('');\n this.themeClass = signal('ql-snow');\n }\n ngOnChanges(changes) {\n if (changes.theme) {\n const theme = changes.theme.currentValue || (this.service.config.theme ? this.service.config.theme : 'snow');\n this.themeClass.set(`ql-${theme} ngx-quill-view-html`);\n } else if (!this.theme()) {\n const theme = this.service.config.theme ? this.service.config.theme : 'snow';\n this.themeClass.set(`ql-${theme} ngx-quill-view-html`);\n }\n if (changes.content) {\n const content = changes.content.currentValue;\n const sanitize = [true, false].includes(this.sanitize()) ? this.sanitize() : this.service.config.sanitize || false;\n const innerHTML = sanitize ? content : this.sanitizer.bypassSecurityTrustHtml(content);\n this.innerHTML.set(innerHTML);\n }\n }\n static {\n this.ɵfac = function QuillViewHTMLComponent_Factory(t) {\n return new (t || QuillViewHTMLComponent)(i0.ɵɵdirectiveInject(i1.DomSanitizer), i0.ɵɵdirectiveInject(QuillService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: QuillViewHTMLComponent,\n selectors: [[\"quill-view-html\"]],\n inputs: {\n content: [i0.ɵɵInputFlags.SignalBased, \"content\"],\n theme: [i0.ɵɵInputFlags.SignalBased, \"theme\"],\n sanitize: [i0.ɵɵInputFlags.SignalBased, \"sanitize\"]\n },\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n decls: 2,\n vars: 2,\n consts: [[1, \"ql-container\", 3, \"ngClass\"], [1, \"ql-editor\", 3, \"innerHTML\"]],\n template: function QuillViewHTMLComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵelement(1, \"div\", 1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"ngClass\", ctx.themeClass());\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"innerHTML\", ctx.innerHTML(), i0.ɵɵsanitizeHtml);\n }\n },\n dependencies: [NgClass],\n styles: [\".ql-container.ngx-quill-view-html{border:0}\\n\"],\n encapsulation: 2\n });\n }\n }\n return QuillViewHTMLComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nlet QuillViewComponent = /*#__PURE__*/(() => {\n class QuillViewComponent {\n constructor(elementRef, renderer, zone, service, domSanitizer, platformId) {\n this.elementRef = elementRef;\n this.renderer = renderer;\n this.zone = zone;\n this.service = service;\n this.domSanitizer = domSanitizer;\n this.platformId = platformId;\n this.format = input(undefined);\n this.theme = input(undefined);\n this.modules = input(undefined);\n this.debug = input(false);\n this.formats = input(undefined);\n this.sanitize = input(undefined);\n this.beforeRender = input(undefined);\n this.strict = input(true);\n this.content = input();\n this.customModules = input([]);\n this.customOptions = input([]);\n this.onEditorCreated = new EventEmitter();\n this.quillSubscription = null;\n this.destroyRef = inject(DestroyRef);\n this.valueSetter = (quillEditor, value) => {\n const format = getFormat(this.format(), this.service.config.format);\n let content = value;\n if (format === 'text') {\n quillEditor.setText(content);\n } else {\n if (format === 'html') {\n const sanitize = [true, false].includes(this.sanitize()) ? this.sanitize() : this.service.config.sanitize || false;\n if (sanitize) {\n value = this.domSanitizer.sanitize(SecurityContext.HTML, value);\n }\n content = quillEditor.clipboard.convert({\n html: value\n });\n } else if (format === 'json') {\n try {\n content = JSON.parse(value);\n } catch (e) {\n content = [{\n insert: value\n }];\n }\n }\n quillEditor.setContents(content);\n }\n };\n }\n ngOnChanges(changes) {\n if (!this.quillEditor) {\n return;\n }\n if (changes.content) {\n this.valueSetter(this.quillEditor, changes.content.currentValue);\n }\n }\n ngAfterViewInit() {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n this.quillSubscription = this.service.getQuill().pipe(mergeMap(Quill => {\n const promises = [this.service.registerCustomModules(Quill, this.customModules())];\n const beforeRender = this.beforeRender() ?? this.service.config.beforeRender;\n if (beforeRender) {\n promises.push(beforeRender());\n }\n return Promise.all(promises).then(() => Quill);\n })).subscribe(Quill => {\n const modules = Object.assign({}, this.modules() || this.service.config.modules);\n modules.toolbar = false;\n this.customOptions().forEach(customOption => {\n const newCustomOption = Quill.import(customOption.import);\n newCustomOption.whitelist = customOption.whitelist;\n Quill.register(newCustomOption, true);\n });\n let debug = this.debug();\n if (!debug && debug !== false && this.service.config.debug) {\n debug = this.service.config.debug;\n }\n let formats = this.formats();\n if (!formats && formats === undefined) {\n formats = this.service.config.formats ? [...this.service.config.formats] : this.service.config.formats === null ? null : undefined;\n }\n const theme = this.theme() || (this.service.config.theme ? this.service.config.theme : 'snow');\n this.editorElem = this.elementRef.nativeElement.querySelector('[quill-view-element]');\n this.zone.runOutsideAngular(() => {\n this.quillEditor = new Quill(this.editorElem, {\n debug,\n formats,\n modules,\n readOnly: true,\n strict: this.strict(),\n theme\n });\n });\n this.renderer.addClass(this.editorElem, 'ngx-quill-view');\n if (this.content()) {\n this.valueSetter(this.quillEditor, this.content());\n }\n // The `requestAnimationFrame` triggers change detection. There's no sense to invoke the `requestAnimationFrame` if anyone is\n // listening to the `onEditorCreated` event inside the template, for instance ``.\n if (!this.onEditorCreated.observed) {\n return;\n }\n // The `requestAnimationFrame` will trigger change detection and `onEditorCreated` will also call `markDirty()`\n // internally, since Angular wraps template event listeners into `listener` instruction. We're using the `requestAnimationFrame`\n // to prevent the frame drop and avoid `ExpressionChangedAfterItHasBeenCheckedError` error.\n raf$().pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.onEditorCreated.emit(this.quillEditor);\n });\n });\n }\n ngOnDestroy() {\n this.quillSubscription?.unsubscribe();\n this.quillSubscription = null;\n }\n static {\n this.ɵfac = function QuillViewComponent_Factory(t) {\n return new (t || QuillViewComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(QuillService), i0.ɵɵdirectiveInject(i1.DomSanitizer), i0.ɵɵdirectiveInject(PLATFORM_ID));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: QuillViewComponent,\n selectors: [[\"quill-view\"]],\n inputs: {\n format: [i0.ɵɵInputFlags.SignalBased, \"format\"],\n theme: [i0.ɵɵInputFlags.SignalBased, \"theme\"],\n modules: [i0.ɵɵInputFlags.SignalBased, \"modules\"],\n debug: [i0.ɵɵInputFlags.SignalBased, \"debug\"],\n formats: [i0.ɵɵInputFlags.SignalBased, \"formats\"],\n sanitize: [i0.ɵɵInputFlags.SignalBased, \"sanitize\"],\n beforeRender: [i0.ɵɵInputFlags.SignalBased, \"beforeRender\"],\n strict: [i0.ɵɵInputFlags.SignalBased, \"strict\"],\n content: [i0.ɵɵInputFlags.SignalBased, \"content\"],\n customModules: [i0.ɵɵInputFlags.SignalBased, \"customModules\"],\n customOptions: [i0.ɵɵInputFlags.SignalBased, \"customOptions\"]\n },\n outputs: {\n onEditorCreated: \"onEditorCreated\"\n },\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"quill-view-element\", \"\"]],\n template: function QuillViewComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n },\n styles: [\".ql-container.ngx-quill-view{border:0}\\n\"],\n encapsulation: 2\n });\n }\n }\n return QuillViewComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet QuillModule = /*#__PURE__*/(() => {\n class QuillModule {\n static forRoot(config) {\n return {\n ngModule: QuillModule,\n providers: [{\n provide: QUILL_CONFIG_TOKEN,\n useValue: config\n }]\n };\n }\n static {\n this.ɵfac = function QuillModule_Factory(t) {\n return new (t || QuillModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: QuillModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return QuillModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/*\n * Public API Surface of ngx-quill\n */\n// Re-export everything from the secondary entry-point so we can be backwards-compatible\n// and don't introduce breaking changes for consumers.\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { QuillEditorBase, QuillEditorComponent, QuillModule, QuillService, QuillViewComponent, QuillViewHTMLComponent };\n","export enum Function {\r\n\tZero,\r\n\tOne,\r\n\tTwo,\r\n\tThree,\r\n\tFour,\r\n\tFive,\r\n\tSix,\r\n\tSeven,\r\n\tEight,\r\n\tNine,\r\n\tDecimal,\r\n\tEquals,\r\n\tAdd,\r\n\tSubtract,\r\n\tMultiply,\r\n\tDivide,\r\n\tPercentage,\r\n\tNegate,\r\n\tCE,\r\n\tC,\r\n\tParenthesisLeft,\r\n\tParenthesisRight,\r\n\tSquare,\r\n\tCube,\r\n\tPowerOf,\r\n\tPi,\r\n\tSquareRoot,\r\n\tBlank\r\n}\r\n\r\nexport enum Operation {\r\n\tAdd = 12,\r\n\tSubtract = 13,\r\n\tMultiply = 14,\r\n\tDivide = 15,\r\n\tPowerOf = 24,\r\n\tSquareRoot = 26\r\n}\r\n\r\nexport enum CalculationSide {\r\n\tLeft,\r\n\tRight\r\n}\r\n","import { CalculationSide, Operation } from './calculator-operations.enum';\r\n\r\nexport class Calculation {\r\n\tpublic left?: number | Calculation | null = null;\r\n\tpublic right?: number | Calculation | null = null;\r\n\tpublic operation?: Operation | null = null;\r\n\tpublic oneSidedOperation?: boolean;\r\n\tpublic parenthesis?: boolean;\r\n\tpublic result?: number;\r\n\tpublic pendingDecimal?: boolean;\r\n\tpublic trailingZeros: number = 0;\r\n\tpublic valueBeforeTrail?: number | null;\r\n\r\n\tpublic get operationApplied() { return !!this.operation; }\r\n\tpublic get isComplete() { return this.left != null && this.operationApplied && this.right != null; }\r\n\tpublic get notSquareRoot() { return this.operation !== Operation.SquareRoot; }\r\n\tpublic get isEmpty() { return !(this.left != null) && !(!!this.operationApplied) && !(this.right != null); }\r\n\r\n\tconstructor(left: number) {\r\n\t\tthis.left = left;\r\n\t}\r\n\r\n\tpublic getCurrentCalculationSide(): CalculationSide {\r\n\t\t// TODO: Refactor and improve the ways in which the calculator detects which side a calculation is currently on and whether that side is a decimal.\r\n\t\tif (this.operationApplied) {\r\n\t\t\treturn CalculationSide.Right;\r\n\t\t} else {\r\n\t\t\treturn CalculationSide.Left;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic addInputToCalculation(input: string): void {\r\n\t\tthis.addInputToCorrectSide(input, this.getCurrentCalculationSide());\r\n\t}\r\n\r\n\tpublic calculateResult(): number {\r\n\t\tconst left = Number(this.left);\r\n\t\tconst right = Number(this.right);\r\n\t\tlet result: number = 0;\r\n\t\tswitch (this.operation) {\r\n\t\t\tcase Operation.Add:\r\n\t\t\t\tresult = left + right;\r\n\t\t\t\tbreak;\r\n\t\t\tcase Operation.Subtract:\r\n\t\t\t\tresult = left - right;\r\n\t\t\t\tbreak;\r\n\t\t\tcase Operation.Multiply:\r\n\t\t\t\tresult = left * right;\r\n\t\t\t\tbreak;\r\n\t\t\tcase Operation.Divide:\r\n\t\t\t\tif (right === 0) {\r\n\t\t\t\t\tresult = 0;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult = left / right;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase Operation.PowerOf:\r\n\t\t\t\tresult = Math.pow(left, right);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Operation.SquareRoot:\r\n\t\t\t\tresult = Math.sqrt(left);\r\n\t\t}\r\n\r\n\t\tthis.result = Number(result.toFixed(9));\r\n\t\tthis.trailingZeros = 0;\r\n\t\tthis.valueBeforeTrail = null;\r\n\t\treturn this.result;\r\n\t}\r\n\r\n\tpublic renderCalculation(): string {\r\n\t\tconst left: string = String(this.left);\r\n\t\tconst right: string = this.right != null ? String(this.right) : '';\r\n\t\tconst operation: string = this.renderOperation();\r\n\t\tconst result = String(this.result);\r\n\t\treturn `${left} ${operation}${` ${right}`} = ${result}`;\r\n\t}\r\n\r\n\tpublic renderPartialCalculation(): string {\r\n\t\tconst left: string|null = this.left ? String(this.left) : null;\r\n\t\tconst operation: string = this.renderOperation();\r\n\t\treturn `${left ? left : ''}${operation ? ` ${operation}` : ''}`;\r\n\t}\r\n\r\n\tpublic CE(): void {\r\n\t\tif (this.operation) {\r\n\t\t\t// we use this.operation to check whether we're on the right side of the calculation.\r\n\t\t\t// If so, clear the right side, else clear the left.\r\n\t\t\tthis.right = null;\r\n\t\t} else {\r\n\t\t\tthis.left = null;\r\n\t\t}\r\n\t\tthis.trailingZeros = 0;\r\n\t\tthis.pendingDecimal = false;\r\n\t\tthis.valueBeforeTrail = null;\r\n\t}\r\n\r\n\tpublic C(): void {\r\n\t\tthis.left = null;\r\n\t\tthis.operation = null;\r\n\t\tthis.right = null;\r\n\t\tthis.trailingZeros = 0;\r\n\t\tthis.pendingDecimal = false;\r\n\t\tthis.valueBeforeTrail = null;\r\n\t}\r\n\r\n\tpublic negateCurrentValue(): number {\r\n\t\tif (this.operationApplied) {\r\n\t\t\treturn this.right = -this.right!;\r\n\t\t} else {\r\n\t\t\treturn this.left = -this.left!;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic convertToPercentage(): number {\r\n\t\tif (!this.operationApplied) {\r\n\t\t\treturn this.left = (Number(this.left) / 100);\r\n\t\t} else {\r\n\t\t\tif (this.operation == Operation.Add || this.operation == Operation.Subtract) {\r\n\t\t\t\treturn this.right ?\r\n\t\t\t\t\tthis.right = ((Number(this.left) / 100) * Number(this.right)) :\r\n\t\t\t\t\tthis.right = ((Number(this.left) / 100) * Number(this.left));\r\n\t\t\t} else {\r\n\t\t\t\treturn this.right = Number(this.right) / 100;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic renderOperation(): string {\r\n\t\tswitch (this.operation) {\r\n\t\t\tcase Operation.Add:\r\n\t\t\t\treturn '+';\r\n\t\t\tcase Operation.Subtract:\r\n\t\t\t\treturn '-';\r\n\t\t\tcase Operation.Multiply:\r\n\t\t\t\treturn 'x';\r\n\t\t\tcase Operation.Divide:\r\n\t\t\t\treturn '/';\r\n\t\t\tcase Operation.PowerOf:\r\n\t\t\t\treturn '^';\r\n\t\t\tcase Operation.SquareRoot:\r\n\t\t\t\treturn '√';\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprivate addInputToCorrectSide(input: string, side: CalculationSide): void {\r\n\t\tswitch (input) {\r\n\t\t\tcase '0' : {\r\n\t\t\t\tif (!this.trailingZeros && (side === CalculationSide.Left && this.left && this.left.toString().includes('.') || side === CalculationSide.Right && this.right && this.right.toString().includes('.'))) {\r\n\t\t\t\t\t// the number is already a decimal (e.g. n.123)\r\n\t\t\t\t\tthis.trailingZeros++;\r\n\t\t\t\t\tif (side === CalculationSide.Left) {\r\n\t\t\t\t\t\tthis.valueBeforeTrail = Number(this.left) ?? 0;\r\n\t\t\t\t\t\tconst zeros = '0'.repeat(this.trailingZeros);\r\n\t\t\t\t\t\tconst rightOfDecimal = this.left?.toString().split('.')[1];\r\n\t\t\t\t\t\tconst decimalsLength = rightOfDecimal ? rightOfDecimal.length : 0;\r\n\t\t\t\t\t\tthis.left = Number(Number(`${this.valueBeforeTrail}${zeros}`).toFixed(decimalsLength + this.trailingZeros));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.valueBeforeTrail = Number(this.right) ?? 0;\r\n\t\t\t\t\t\tconst zeros = '0'.repeat(this.trailingZeros);\r\n\t\t\t\t\t\tconst rightOfDecimal = this.right?.toString().split('.')[1];\r\n\t\t\t\t\t\tconst decimalsLength = rightOfDecimal ? rightOfDecimal.length : 0;\r\n\t\t\t\t\t\tthis.right = Number(Number(`${this.valueBeforeTrail}${zeros}`).toFixed(decimalsLength + this.trailingZeros));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.pendingDecimal = false;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t} else if (this.pendingDecimal || this.trailingZeros) {\r\n\t\t\t\t\t// If the last input was either a decimal (n.), a trailing 0 after a decimal (n.000)\r\n\t\t\t\t\tthis.trailingZeros++;\r\n\t\t\t\t\tif (side === CalculationSide.Left) {\r\n\t\t\t\t\t\tconst currentValue = this.left ? String(this.left) : 0;\r\n\t\t\t\t\t\tconst zeros = '0'.repeat(this.trailingZeros);\r\n\t\t\t\t\t\tconst shouldInsertDecimal = (this.pendingDecimal || (!this.left?.toString().includes('.') && zeros !== ''));\r\n\t\t\t\t\t\tthis.left = Number(Number(`${currentValue}${shouldInsertDecimal ? '.' : ''}${zeros}${input}`).toFixed(this.trailingZeros));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst currentValue = this.right ? String(this.right) : 0;\r\n\t\t\t\t\t\tconst zeros = '0'.repeat(this.trailingZeros);\r\n\t\t\t\t\t\tconst shouldInsertDecimal = (this.pendingDecimal || (!this.right?.toString().includes('.') && zeros !== ''));\r\n\t\t\t\t\t\tthis.right = Number(Number(`${currentValue}${shouldInsertDecimal ? '.' : ''}${zeros}${input}`).toFixed(this.trailingZeros));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.pendingDecimal = false;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\telse { \r\n\t\t\t\t\tif (side === CalculationSide.Left) {\r\n\t\t\t\t\t\tconst currentValue = this.left ? String(this.left) : 0;\r\n\t\t\t\t\t\tthis.left = Number(Number(`${currentValue}${input}`));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst currentValue = this.right ? String(this.right) : 0;\r\n\t\t\t\t\t\tthis.right = Number(Number(`${currentValue}${input}`));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tdefault : {\r\n\t\t\t\tif (!this.trailingZeros || this.pendingDecimal) {\r\n\t\t\t\t\t// First number after a DP or following a non-zero decimal number\r\n\t\t\t\t\tif (side === CalculationSide.Left) {\r\n\t\t\t\t\t\tconst currentValue = this.left ? String(this.left) : 0;\r\n\t\t\t\t\t\tthis.left = Number(`${currentValue}${this.pendingDecimal ? '.' : ''}${input}`);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst currentValue = this.right ? String(this.right) : 0;\r\n\t\t\t\t\t\tthis.right = Number(`${currentValue}${this.pendingDecimal ? '.' : ''}${input}`);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Follows the last decimal number\r\n\t\t\t\t\tconst zeros = '0'.repeat(this.trailingZeros);\r\n\r\n\t\t\t\t\tif (side === CalculationSide.Left) {\r\n\t\t\t\t\t\tconst currentValue = this.left ? String(this.left) : 0;\r\n\t\t\t\t\t\tif (this.valueBeforeTrail) {\r\n\t\t\t\t\t\t\t// If the last decimal number was a 0, use the valueBeforeTrail variable instead of currentValue\r\n\t\t\t\t\t\t\tthis.left = Number(`${this.valueBeforeTrail}${zeros}${input}`);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.left = Number(`${currentValue}.${zeros}${input}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst currentValue = this.right ? String(this.right) : 0;\r\n\t\t\t\t\t\tif (this.valueBeforeTrail) {\r\n\t\t\t\t\t\t\tthis.right = Number(`${this.valueBeforeTrail}${zeros}${input}`);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.right = Number(`${currentValue}.${zeros}${input}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.trailingZeros = 0;\r\n\t\t\t\t\tthis.valueBeforeTrail = null;\r\n\t\t\t\t}\r\n\t\t\t\tthis.pendingDecimal = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Calculation } from '../../common/calculator/calculator';\r\nimport { CalculationSide, Function, Operation } from '../../common/calculator/calculator-operations.enum';\r\nimport { CalculatorAnswerDto } from '../../model/answer/calculator/calculator-answer-dto';\r\n\r\n\r\n@Component({\r\n\tselector: 'app-calculator',\r\n\ttemplateUrl: './calculator.component.html',\r\n\tstyleUrls: ['./calculator.component.scss']\r\n})\r\nexport class CalculatorComponent implements OnInit {\r\n\r\n\t@Input() public answer!: CalculatorAnswerDto;\r\n\r\n\tpublic function: typeof Function = Function;\r\n\tpublic visorText: string = '0';\r\n\tpublic calculations: Calculation[] = [];\r\n\tpublic currentCalculation: Calculation = new Calculation(0);\r\n\tpublic clearOnNextNumber: boolean = false;\r\n\tpublic calculationEvaluated: boolean = false;\r\n\tpublic newNumberAfterEvaluation: boolean = false;\r\n\tpublic previousCalculationWasAutoCalculated: boolean = false; // This is a variable for calculations which auto complete e.g x^2, x^3 and square root.\r\n\tpublic operationPressedAfterCalculation: boolean = false;\r\n\tpublic maxDigits: number = 14;\r\n\r\n public ngOnInit(): void {\r\n\r\n\t\tif (this.answer && this.answer.answerJson) {\r\n\t\t\tconst prevCalculations = JSON.parse(this.answer.answerJson) as Calculation[];\r\n\r\n\t\t\t// Methods not transferred when deserialising\r\n\t\t\tthis.calculations = prevCalculations.map(c => Object.assign(new Calculation(c.result!), c));\r\n\t\t}\r\n }\r\n\r\n\tpublic input(func: Function): void {\r\n\t\tif (!this.isOperation(func)) {\r\n\t\t\tthis.operationPressedAfterCalculation = false;\r\n\t\t}\r\n\t\tswitch (func) {\r\n\t\t\tcase Function.Zero:\r\n\t\t\tcase Function.One:\r\n\t\t\tcase Function.Two:\r\n\t\t\tcase Function.Three:\r\n\t\t\tcase Function.Four:\r\n\t\t\tcase Function.Five:\r\n\t\t\tcase Function.Six:\r\n\t\t\tcase Function.Seven:\r\n\t\t\tcase Function.Eight:\r\n\t\t\tcase Function.Nine:\r\n\t\t\t\tthis.inputToVisor(String(func));\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function.Decimal:\r\n\t\t\t\tthis.tryAddDecimal();\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function.Add:\r\n\t\t\tcase Function.Multiply:\r\n\t\t\tcase Function.Subtract:\r\n\t\t\tcase Function.Divide:\r\n\t\t\tcase Function.PowerOf:\r\n\t\t\t\tthis.applyOperation(func);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function.Equals:\r\n\t\t\t\tthis.calculate();\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function.C:\r\n\t\t\tcase Function.CE:\r\n\t\t\t\tthis.clearCurrentCalculationBasedOnContext(func);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function.Negate:\r\n\t\t\t\tthis.negateInput();\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function.Percentage:\r\n\t\t\t\tthis.convertToPercentage();\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function.Square:\r\n\t\t\tcase Function.Cube:\r\n\t\t\t\tconst powerOfVal = func === Function.Square ? 2 : 3;\r\n\t\t\t\tthis.applyPowerOf(powerOfVal);\r\n\t\t\t\tthis.previousCalculationWasAutoCalculated = true;\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function.Pi:\r\n\t\t\t\tif (this.currentCalculation.left && this.currentCalculation.operation) {\r\n\t\t\t\t\tif (this.currentCalculation.right) {\r\n\t\t\t\t\t\tthis.currentCalculation.C();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.inputToVisor(String(3.14159265359), false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.currentCalculation.CE();\r\n\t\t\t\t\tthis.inputToVisor(String(3.14159265359), true);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function.SquareRoot:\r\n\t\t\t\tthis.calculateSquareRoot();\r\n\t\t\t\tthis.previousCalculationWasAutoCalculated = true;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic tryAddDecimal(): void {\r\n\t\tif (!this.currentCalculation.pendingDecimal &&\r\n\t\t\t((this.currentCalculation.getCurrentCalculationSide() === CalculationSide.Left && !String(this.currentCalculation.left).includes('.')) ||\r\n\t\t\t this.currentCalculation.getCurrentCalculationSide() === CalculationSide.Right && !String(this.currentCalculation.right).includes('.'))) {\r\n\t\t\tthis.inputToVisor('.');\r\n\t\t\tthis.currentCalculation.pendingDecimal = true;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic inputToVisor(input: string, reset: boolean = false): void {\r\n\t\tif (this.visorText.length <= this.maxDigits || this.clearOnNextNumber || this.calculationEvaluated) {\r\n\t\t\tif (this.calculationEvaluated) {\r\n\t\t\t\tthis.currentCalculation.left = null;\r\n\t\t\t\tthis.currentCalculation.operation = null;\r\n\t\t\t\tthis.currentCalculation.right = null;\r\n\t\t\t\tthis.calculationEvaluated = false;\r\n\t\t\t\tthis.newNumberAfterEvaluation = true;\r\n\t\t\t} else {\r\n\t\t\t\tthis.newNumberAfterEvaluation = false;\r\n\t\t\t}\r\n\t\t\tif (this.clearOnNextNumber || reset || this.visorText === '0') {\r\n\t\t\t\tthis.visorText = '';\r\n\t\t\t\tthis.clearOnNextNumber = false;\r\n\t\t\t}\r\n\t\t\tthis.visorText = `${this.visorText}${input}`;\r\n\t\t\tthis.currentCalculation.addInputToCalculation(input);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic applyOperation(func: Function): void {\r\n\t\tif (this.currentCalculation.left !== null) {\r\n\t\t\tlet operationSymbol: string;\r\n\t\t\tthis.currentCalculation.trailingZeros = 0; // Ensure trailing zeros are reset if the left side is complete (e.g 5.00 then * would cause the trailing zeros to carry to the right side).\r\n\t\t\tthis.currentCalculation.pendingDecimal = false; // Same as above.\r\n\t\t\tthis.currentCalculation.valueBeforeTrail = null; // Same as above.\r\n\r\n\t\t\tif (this.calculationEvaluated) {\r\n\t\t\t\t// If the last input was equals, flag that the following input was an operation change\r\n\r\n\t\t\t\tthis.operationPressedAfterCalculation = true;\r\n\t\t\t\tthis.currentCalculation.operation = func as Operation;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.currentCalculation.left && this.currentCalculation.right) {\r\n\t\t\t\tthis.calculate();\r\n\t\t\t}\r\n\t\t\tthis.currentCalculation.operation = func as Operation;\r\n\r\n\r\n\t\t\tthis.calculationEvaluated = false;\r\n\t\t\tthis.clearOnNextNumber = true;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic calculate(): number | void {\r\n\t\tif (((!this.newNumberAfterEvaluation || this.currentCalculation.oneSidedOperation) && (this.currentCalculation.right !== null || this.currentCalculation.oneSidedOperation)) || this.currentCalculation.operation == null) {\r\n\t\t\tif (!this.currentCalculation.isComplete && this.currentCalculation.notSquareRoot) {\r\n\t\t\t\tconst previousCalculation: Calculation = [this.calculations[this.calculations.length - 1]][0];\r\n\r\n\t\t\t\tif (!previousCalculation || this.currentCalculation.isEmpty || this.previousCalculationWasAutoCalculated) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.operationPressedAfterCalculation && !this.calculationEvaluated) {\r\n\t\t\t\t\tthis.currentCalculation.right = this.currentCalculation.left;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.currentCalculation.operation = previousCalculation.operation;\r\n\t\t\t\t\tthis.currentCalculation.right = previousCalculation.right;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst currentCalculationResult: number = this.currentCalculation.calculateResult();\r\n\t\t\tthis.calculations.push(this.currentCalculation);\r\n\t\t\tthis.currentCalculation = new Calculation(currentCalculationResult);\r\n\t\t\tthis.visorText = String(Number(currentCalculationResult.toFixed(9)));\r\n\t\t\tthis.clearOnNextNumber = true;\r\n\t\t\tthis.calculationEvaluated = true;\r\n\t\t\tthis.currentCalculation.oneSidedOperation = undefined;\r\n\t\t\tif (this.previousCalculationWasAutoCalculated) {\r\n\t\t\t\tthis.currentCalculation.operation = null;\r\n\t\t\t\tthis.previousCalculationWasAutoCalculated = false;\r\n\t\t\t}\r\n\t\t\tthis.setJSONAnswer();\r\n\t\t\treturn currentCalculationResult;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic clearCurrentCalculationBasedOnContext(func: Function): void {\r\n\t\tswitch (func) {\r\n\t\t\tcase Function.CE:\r\n\t\t\t\tthis.currentCalculation.CE();\r\n\t\t\t\tbreak;\r\n\t\t\tcase Function.C:\r\n\t\t\t\tthis.currentCalculation.C();\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tthis.currentCalculation.pendingDecimal = false;\r\n\t\tthis.visorText = '0';\r\n\t}\r\n\r\n\tpublic negateInput(): void {\r\n\t\tif (this.visorText !== '0' && !this.currentCalculation.pendingDecimal) {\r\n\t\t\tconst negatedValue = this.currentCalculation.negateCurrentValue();\r\n\t\t\tthis.visorText = String(negatedValue);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic convertToPercentage(): void {\r\n\t\tif (this.visorText !== '0' && !this.currentCalculation.pendingDecimal) {\r\n\t\t\tconst convertedPercentageValue = this.currentCalculation.convertToPercentage();\r\n\t\t\tthis.visorText = String(convertedPercentageValue);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic applyPowerOf(powerOfVal: number): void {\r\n\t\tif (this.currentCalculation.left !== 0) {\r\n\t\t\tthis.applyOperation(Function.PowerOf);\r\n\t\t\tthis.currentCalculation.right = powerOfVal;\r\n\t\t\tthis.currentCalculation.oneSidedOperation = true;\r\n\t\t\tthis.calculate();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic calculateSquareRoot(): void {\r\n\t\tthis.applyOperation(Function.SquareRoot);\r\n\t\tthis.currentCalculation.oneSidedOperation = true;\r\n\t\tthis.calculate();\r\n\t}\r\n\r\n\tprivate setJSONAnswer(): void {\r\n\r\n\t\tif (this.calculations.length && this.answer) {\r\n\t\t\tthis.answer.answerJson = JSON.stringify(this.calculations);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getCurrentPartialCalculation(): string {\r\n\t\treturn this.currentCalculation.renderPartialCalculation();\r\n\t}\r\n\r\n\tprivate isOperation(func: Function): boolean {\r\n\t\tif (func === Function.Equals) { return this.operationPressedAfterCalculation; }\r\n\r\n\t\treturn (func === Function.PowerOf ||\r\n\t\t\t\tfunc === Function.Multiply ||\r\n\t\t\t\tfunc === Function.Add ||\r\n\t\t\t\tfunc === Function.Divide ||\r\n\t\t\t\tfunc === Function.Subtract) ? true : false;\r\n\t}\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n
\r\n @for (calculation of calculations; track calculation; let i = $index) {\r\n

\r\n {{ i + 1 }}. {{ calculation.renderCalculation() }}\r\n

\r\n }\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","export enum CanvasMode {\r\n\tLineDrawing,\r\n\tText\r\n}\r\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { MatButtonToggleChange } from \"@angular/material/button-toggle\";\r\nimport { ThemePalette } from \"@angular/material/core\";\r\nimport { MatSelectChange } from \"@angular/material/select\";\r\nimport { MatSlideToggleChange } from \"@angular/material/slide-toggle\";\r\nimport { LineType } from \"../lines\";\r\nimport { CanvasMode } from \"../modes\";\r\nimport { IText } from \"../texts\";\r\n\r\n@Component({\r\n\tselector: 'app-drawing-canvas-controls',\r\n\ttemplateUrl: './drawing-canvas-controls.component.html',\r\n\tstyleUrls: ['./drawing-canvas-controls.component.scss']\r\n})\r\nexport class DrawingCanvasControlsComponent {\r\n\r\n\t@Input() public mode!: CanvasMode;\r\n\t@Input() public disableText!: boolean;\r\n\t@Output() public undo: EventEmitter = new EventEmitter();\r\n\t@Output() public redo: EventEmitter = new EventEmitter();\r\n\t@Output() public clear: EventEmitter = new EventEmitter();\r\n\t@Output() public lineTypeChange: EventEmitter = new EventEmitter();\r\n\t@Output() public magnetPointsChange: EventEmitter = new EventEmitter();\r\n\t@Output() public gridEnabledChange: EventEmitter = new EventEmitter();\r\n\t@Output() public gridRemoveEnabledChange: EventEmitter = new EventEmitter();\r\n\t@Output() public modeChange: EventEmitter = new EventEmitter();\r\n\t@Output() public textAdd: EventEmitter = new EventEmitter();\r\n\r\n\tpublic CanvasMode = CanvasMode;\r\n\tpublic selectedLineType: number = 0;\r\n\tpublic magneticPointsModeEnabled: boolean = false;\r\n\tpublic gridEnabled: boolean = false;\r\n\tpublic gridRemoveEnabled: boolean = false;\r\n\tpublic matSelectColor: ThemePalette = \"primary\";\r\n\tpublic selectedText!: string;\r\n\tpublic selectedFontSize: number = 32; //medium\r\n\tpublic readonly canvasCentrePoint: number = 275;\r\n\r\n\tpublic onUndo(): void {\r\n\t\tthis.undo.emit();\r\n\t}\r\n\r\n\tpublic onRedo(): void {\r\n\t\tthis.redo.emit();\r\n\t}\r\n\r\n\tpublic onClear(): void {\r\n\t\tthis.clear.emit();\r\n\t}\r\n\r\n\tpublic onModeChange(e: MatButtonToggleChange): void {\r\n\t\tconst mode = Number.parseInt(e.value);\r\n\t\tthis.modeChange.emit(mode as CanvasMode);\r\n\t}\r\n\r\n\tpublic onLineTypeChange(e: MatSelectChange): void {\r\n\t\tconst lineType = e.value as LineType;\r\n\t\tthis.lineTypeChange.emit(lineType);\r\n\t}\r\n\r\n\tpublic onFontSizeChange(e: MatSelectChange): void {\r\n\t\tthis.selectedFontSize = Number.parseInt(e.value);\r\n\t}\r\n\r\n\tpublic onMagnetPointsChange(e: MatSlideToggleChange): void {\r\n\t\tthis.magneticPointsModeEnabled = e.checked;\r\n\t\tthis.magnetPointsChange.emit(this.magneticPointsModeEnabled);\r\n\t}\r\n\r\n\tpublic onGridEnabledChange(e: MatSlideToggleChange): void {\r\n\t\tthis.gridEnabled = e.checked;\r\n\t\tthis.gridEnabledChange.emit(this.gridEnabled);\r\n\t}\r\n\r\n\tpublic onGridRemoveEnabledChanged(e: MatSlideToggleChange): void {\r\n\t\tthis.gridRemoveEnabled = e.checked;\r\n\t\tthis.gridRemoveEnabledChange.emit(this.gridRemoveEnabled);\r\n\t}\r\n\r\n\tpublic onTextAdd(): void {\r\n\t\tif (this.selectedText) {\r\n\t\t\tconst text: IText = {\r\n\t\t\t\tx: this.canvasCentrePoint,\r\n\t\t\t\ty: this.canvasCentrePoint,\r\n\t\t\t\twidth: 0, //needs canvas context to measure\r\n\t\t\t\tfontSize: this.selectedFontSize,\r\n\t\t\t\tvalue: this.selectedText\r\n\t\t\t};\r\n\r\n\t\t\tthis.textAdd.emit(text);\r\n\t\t\tthis.selectedText = \"\";\r\n\t\t}\r\n\t}\r\n}\r\n","
\r\n
\r\n \r\n \r\n draw\r\n \r\n \r\n text_fields\r\n \r\n \r\n
\r\n\r\n @if (mode == CanvasMode.LineDrawing) {\r\n
Line Style:
\r\n
\r\n \r\n Solid\r\n Dashed\r\n \r\n
\r\n
\r\n \r\n Magnetic Lines\r\n \r\n help_outline\r\n
\r\n
\r\n \r\n Enable Grid Lines\r\n \r\n help_outline\r\n
\r\n }\r\n\r\n @if (mode == CanvasMode.Text) {\r\n
Font size:
\r\n
\r\n \r\n Small\r\n Medium\r\n Large\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n }\r\n\r\n
\r\n \r\n Enable Remove\r\n \r\n help_outline\r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n","import { ICanvasSavedData } from \"./canvas-saved-data.interface\";\r\n\r\nexport class CanvasDataMapper {\r\n\r\n\t// Maps old format of array of lines into new type that can also hold text data\r\n\tpublic static mapToCanvasSaveData(obj: any): ICanvasSavedData {\r\n\t\tlet result: ICanvasSavedData;\r\n\r\n\t\tif (Array.isArray(obj)) {\r\n\t\t\tresult = {};\r\n\t\t\tresult.lines = obj;\r\n\t\t\tresult.texts = [];\r\n\t\t} else {\r\n\t\t\tresult = obj;\r\n\t\t\tresult.lines = result.lines || [];\r\n\t\t\tresult.texts = result.texts || [];\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n}\r\n","export enum CanvasAction {\r\n\tLine,\r\n\tText\r\n}\r\n","export interface ILine {\r\n\tstartX: number,\r\n\tstartY: number,\r\n\tendX: number,\r\n\tendY: number,\r\n\tlineType: LineType\r\n}\r\n\r\nexport interface ICircle {\r\n\tradius: number,\r\n\tstartX: number,\r\n\tstartY: number\r\n}\r\n\r\nexport enum LineType {\r\n\tSolid = 0,\r\n\tdashed = 1\r\n}\r\n\r\nexport interface ICanvasPoint {\r\n\tx: number,\r\n\ty: number\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { _3DShapeAnswerDto } from \"../../../model/answer/3d-shape/3d-shape-answer-dto\";\r\nimport { ICanvasPoint, ICircle, ILine, LineType } from \"../lines\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class LineDrawingService {\r\n\tpublic redoLines: ILine[] = [];\r\n\tpublic readonly circleRadii: number = 5;\r\n\tpublic dx: number = 0;\r\n\tpublic dy: number = 0;\r\n\tpublic reSizeHandles: ICircle[] = [];\r\n\r\n\tpublic addRedoLine(line: ILine): void {\r\n\t\tthis.redoLines.push(line);\r\n\t}\r\n\r\n\tpublic getLastRedoLine(): ILine {\r\n\t\treturn this.redoLines.pop()!;\r\n\t}\r\n\r\n\tpublic drawDefaultLines(answer: _3DShapeAnswerDto, context: CanvasRenderingContext2D): void {\r\n\t\tif (answer.defaultLines) {\r\n\t\t\tanswer.defaultLines.forEach((line) => {\r\n\t\t\t\tthis.setLineType(line.lineType, context);\r\n\t\t\t\tcontext.beginPath();\r\n\t\t\t\tcontext.moveTo(line.startX, line.startY);\r\n\t\t\t\tcontext.lineTo(line.endX, line.endY);\r\n\t\t\t\tcontext.strokeStyle = \"#000\";\r\n\t\t\t\tcontext.lineWidth = 1;\r\n\t\t\t\tcontext.stroke();\r\n\t\t\t\tcontext.closePath();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic drawLine(lineToDraw: ILine, context: CanvasRenderingContext2D, drawResizeHandles: boolean = false): void {\r\n\t\tthis.setLineType(lineToDraw.lineType, context);\r\n\t\tcontext.beginPath();\r\n\t\tcontext.moveTo(lineToDraw.startX, lineToDraw.startY);\r\n\t\tcontext.lineTo(lineToDraw.endX, lineToDraw.endY);\r\n\t\tcontext.strokeStyle = \"#000\";\r\n\t\tcontext.lineWidth = 1;\r\n\t\tcontext.stroke();\r\n\t\tcontext.closePath();\r\n\r\n\t\tif (drawResizeHandles) {\r\n\t\t\tthis.drawResizeHandles(context, lineToDraw);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic drawLineToBeRemoved(lineToDraw: ILine, context: CanvasRenderingContext2D): void {\r\n\t\tthis.setLineType(lineToDraw.lineType, context);\r\n\t\tcontext.beginPath();\r\n\t\tcontext.moveTo(lineToDraw.startX, lineToDraw.startY);\r\n\t\tcontext.lineTo(lineToDraw.endX, lineToDraw.endY);\r\n\t\tcontext.strokeStyle = \"#f00\";\r\n\t\tcontext.lineWidth = 1;\r\n\t\tcontext.stroke();\r\n\t\tcontext.closePath();\r\n\t}\r\n\r\n\tpublic checkCirclesHit(mousePos: ICanvasPoint): boolean {\r\n\r\n\t\treturn this.reSizeHandles.some((circle) => this.intersectsCircle(mousePos.x, mousePos.y, circle.startX, circle.startY, circle.radius));\r\n\t}\r\n\r\n\tpublic intersectsCircle(x: number, y: number, cx: number, cy: number, r: number): boolean {\r\n\t\tthis.dx = x - cx;\r\n\t\tthis.dy = y - cy;\r\n\r\n\t\treturn Math.pow(this.dx, 2) + Math.pow(this.dy, 2) <= Math.pow(r, 2);\r\n\t}\r\n\r\n\tpublic linePointsEqual(line: ILine): boolean {\r\n\r\n\t\tif (line) {\r\n\t\t\treturn line.startX === line.endX && line.startY === line.endY;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic calculateDistance(mousePoint: ICanvasPoint, dot: ICanvasPoint): number {\r\n\t\treturn Math.hypot(mousePoint.x - dot.x, mousePoint.y - dot.y);\r\n\t}\r\n\r\n\tpublic scaleCanvasCoords(screenX: number, screenY: number, hasPageZoomed: boolean, context: CanvasRenderingContext2D): ICanvasPoint {\r\n\t\tif (window.devicePixelRatio === 1 && !hasPageZoomed) {\r\n\t\t\t// If page is not zoomed, don't work out the scale as it will be 1.\r\n\t\t\t// However if the page has been scaled and is subsequently scaled back to 1, do the calculations\r\n\t\t\t// as there are some weird interactions when entering a question zoomed in and zooming out to 100%.\r\n\t\t\treturn { x: screenX, y: screenY };\r\n\t\t}\r\n\r\n\t\thasPageZoomed = true;\r\n\t\tconst matrix = context.getTransform();\r\n\t\tconst imatrix = matrix.invertSelf();\r\n\t\tconst x = screenX * imatrix.a + screenY * imatrix.c + imatrix.e;\r\n\t\tconst y = screenX * imatrix.b + screenY * imatrix.d + imatrix.f;\r\n\r\n\t\treturn { x, y };\r\n\t}\r\n\r\n\tprivate setLineType(lineType: LineType, context: CanvasRenderingContext2D): void {\r\n\t\tif (lineType === LineType.dashed) {\r\n\t\t\tcontext.setLineDash([5, 3]);\r\n\t\t} else {\r\n\t\t\tcontext.setLineDash([]);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawResizeHandles(context: CanvasRenderingContext2D, line: ILine): void {\r\n\t\tthis.reSizeHandles = [];\r\n\r\n\t\tcontext.beginPath();\r\n\t\tcontext.moveTo(line.startX, line.startY);\r\n\t\tcontext.arc(line.startX, line.startY, this.circleRadii, 0, (2 * Math.PI), false);\r\n\r\n\t\tthis.reSizeHandles.push({\r\n\t\t\tstartX: line.startX,\r\n\t\t\tstartY: line.startY,\r\n\t\t\tradius: this.circleRadii\r\n\t\t} as ICircle);\r\n\r\n\t\tcontext.moveTo(line.endX, line.endY);\r\n\t\tcontext.arc(line.endX, line.endY, this.circleRadii, 0, (2 * Math.PI), false);\r\n\r\n\t\tthis.reSizeHandles.push({\r\n\t\t\tstartX: line.endX,\r\n\t\t\tstartY: line.endY,\r\n\t\t\tradius: this.circleRadii\r\n\t\t} as ICircle);\r\n\r\n\t\tcontext.stroke();\r\n\t\tcontext.closePath();\r\n\t}\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { ICanvasPoint } from \"../lines\";\r\nimport { IText } from \"../texts\";\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class TextDrawingService {\r\n\r\n\tpublic readonly innerBoundDraggingPx: number = 5;\r\n\tpublic redoTexts: IText[] = [];\r\n\r\n\tpublic addRedoText(text: IText): void {\r\n\t\tthis.redoTexts.push(text);\r\n\t}\r\n\r\n\tpublic getLastRedoText(): IText {\r\n\t\treturn this.redoTexts.pop()!;\r\n\t}\r\n\r\n\tpublic drawText(colour: string, text: IText, context: CanvasRenderingContext2D): void {\r\n\t\tcontext.font = `${text.fontSize}px Helvetica`;\r\n\t\tcontext.fillStyle = colour;\r\n\t\tcontext.fillText(text.value, text.x, text.y);\r\n\t\ttext.width = context.measureText(text.value).width;\r\n\t}\r\n\r\n\tpublic insideText(text: IText, point: ICanvasPoint): boolean {\r\n\r\n\t\tif (!text || !point) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn (point.x >= text.x && point.x <= text.x + text.width && point.y >= text.y - text.fontSize && point.y <= text.y);\r\n\t}\r\n\r\n\tpublic keepOnCanvas(text: IText, ctx: CanvasRenderingContext2D): void {\r\n\t\ttext.x < this.innerBoundDraggingPx && (text.x = this.innerBoundDraggingPx);\r\n\t\ttext.y < this.innerBoundDraggingPx && (text.y = this.innerBoundDraggingPx);\r\n\t\ttext.x >= ctx.canvas.width && (text.x = ctx.canvas.width - this.innerBoundDraggingPx);\r\n\t\ttext.y >= ctx.canvas.height && (text.y = ctx.canvas.height - this.innerBoundDraggingPx);\r\n\t}\r\n}\r\n","import { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Inject, Input, Output, ViewChild } from \"@angular/core\";\r\nimport { _3DShapeAnswerDto } from \"../../model/answer/3d-shape/3d-shape-answer-dto\";\r\nimport { CanvasDataMapper } from \"../../model/answer/3d-shape/canvas-data-mapper\";\r\nimport { ICanvasSavedData } from \"../../model/answer/3d-shape/canvas-saved-data.interface\";\r\nimport { CanvasAction } from \"./canvas-action\";\r\nimport { ICanvasPoint, ILine, LineType } from \"./lines\";\r\nimport { CanvasMode } from \"./modes\";\r\nimport { LineDrawingService } from \"./services/line-drawing.service\";\r\nimport { TextDrawingService } from \"./services/text-drawing.service\";\r\nimport { IText } from \"./texts\";\r\n\r\n@Component({\r\n\tselector: 'app-drawing-canvas',\r\n\ttemplateUrl: './drawing-canvas.component.html',\r\n\tstyleUrls: ['./drawing-canvas.component.scss']\r\n})\r\nexport class DrawingCanvasComponent implements AfterViewInit {\r\n\t@ViewChild('drawingCanvas') public canvasEl!: ElementRef;\r\n\t@ViewChild('tempCanvas') public tempCanvasEl!: ElementRef;\r\n\t@ViewChild('assetCanvas') public assetCanvasEl!: ElementRef;\r\n\t@ViewChild('gridCanvas') public gridCanvasEl!: ElementRef;\r\n\t@Input() public answer: _3DShapeAnswerDto = new _3DShapeAnswerDto();\r\n\r\n\tpublic canvasSavedData: ICanvasSavedData = { lines: [], texts: [] };\r\n\tpublic drawingMode: CanvasMode = CanvasMode.LineDrawing;\r\n\tpublic context!: CanvasRenderingContext2D;\r\n\tpublic tempContext!: CanvasRenderingContext2D;\r\n\tpublic assetContext!: CanvasRenderingContext2D;\r\n\tpublic gridContext!: CanvasRenderingContext2D ;\r\n\tpublic startX: number = 0;\r\n\tpublic startY: number = 0;\r\n\tpublic isDown: boolean = false;\r\n\tpublic dots: ICanvasPoint[] = [];\r\n\tpublic selectedLineType: LineType = LineType.Solid;\r\n\tpublic magneticPointsEnabled: boolean = false;\r\n\tpublic distances: number[] = [];\r\n\tpublic pointPositionIndex: number = 0;\r\n\tpublic lineToCommit?: ILine;\r\n\tpublic textToCommit?: IText;\r\n\tpublic circleIntersected: boolean = false;\r\n\tpublic lineIntersected: boolean = false;\r\n\tpublic closestStart?: ICanvasPoint;\r\n\tpublic closestEnd?: ICanvasPoint;\r\n\tpublic currentTextIndex: number = -1;\r\n\tpublic hasPageZoomed?: boolean; // Used to fix issues for 3D canvas becoming uncalibrated when page is zoomed.\r\n\tpublic disableText: boolean = false;\r\n\tpublic gridEnabled: boolean = false;\r\n\tpublic gridRemove: boolean = false;\r\n\tpublic canvasActions: CanvasAction[] = [];\r\n\r\n\tconstructor(@Inject('CDNUrl') private cdnBaseUrl: string,\r\n\t\tprivate lineDrawingService: LineDrawingService,\r\n\t\tprivate textDrawingService: TextDrawingService) { }\r\n\r\n\tpublic ngAfterViewInit(): void {\r\n\t\tthis.initCanvases();\r\n\r\n\t\tif (this.answer.answerJSON) {\r\n\t\t\tthis.canvasSavedData = CanvasDataMapper.mapToCanvasSaveData(JSON.parse(this.answer.answerJSON));\r\n\t\t\tthis.canvasSavedData.lines = this.canvasSavedData?.lines?.filter(x => x);\r\n\t\t\tthis.loadSavedData();\r\n\t\t}\r\n\r\n\t\tthis.lineDrawingService.drawDefaultLines(this.answer, this.context);\r\n\t\tthis.drawAsset();\r\n\t}\r\n\r\n\tpublic onMouseDown(e: MouseEvent): void {\r\n\t\tlet mousePos = this.getMousePosition(e);\r\n\t\tmousePos = this.lineDrawingService.scaleCanvasCoords(mousePos.x, mousePos.y, this.hasPageZoomed!, this.tempContext);\r\n\r\n\t\tthis.startX = mousePos.x;\r\n\t\tthis.startY = mousePos.y;\r\n\r\n\t\tthis.isDown = true;\r\n\r\n\t\tif (this.gridRemove) {\r\n\t\t\tthis.performElementRemove(mousePos);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tswitch (this.drawingMode) {\r\n\t\t\t\tcase CanvasMode.LineDrawing: {\r\n\t\t\t\t\tthis.handleMouseDownLineDrawing(mousePos);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase CanvasMode.Text: {\r\n\t\t\t\t\tthis.handleMouseDownText(mousePos);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic onMouseUp(e: MouseEvent): void {\r\n\t\tthis.isDown = false;\r\n\t\tthis.circleIntersected = false;\r\n\t\tthis.currentTextIndex = -1;\r\n\t}\r\n\r\n\tpublic onMouseMove(e: MouseEvent): void {\r\n\t\tlet mousePos = this.getMousePosition(e);\r\n\t\tmousePos = this.lineDrawingService.scaleCanvasCoords(mousePos.x, mousePos.y, this.hasPageZoomed!, this.tempContext);\r\n\t\tif (!this.gridRemove) {\r\n\t\t\tswitch (this.drawingMode) {\r\n\t\t\t\tcase CanvasMode.LineDrawing: {\r\n\t\t\t\t\tthis.handleMouseMoveLineDrawing(e, mousePos);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase CanvasMode.Text: {\r\n\t\t\t\t\tthis.handleMouseMoveText(e, mousePos);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.drawRedCollidingRemoveLines(mousePos);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic onMouseLeave(e: MouseEvent): void {\r\n\t\te.preventDefault();\r\n\t\tthis.isDown = false;\r\n\r\n\t\tif (this.lineToCommit) {\r\n\t\t\tthis.commitLine();\r\n\t\t}\r\n\r\n\t\tif (this.textToCommit) {\r\n\t\t\tthis.commitText();\r\n\t\t}\r\n\r\n\t\tthis.lineDrawingService.reSizeHandles = [];\r\n\t\tthis.clearCanvas(this.tempContext);\r\n\t\tthis.currentTextIndex = -1;\r\n\t}\r\n\r\n\t@HostListener('window:resize')\r\n\tpublic onResize(): void {\r\n\t\tthis.initCanvases();\r\n\t\tif (this.canvasSavedData) {\r\n\t\t\tthis.loadSavedData();\r\n\t\t}\r\n\t\tthis.drawAsset();\r\n\t}\r\n\r\n\tpublic undoLastAction(): void {\r\n\r\n\t\tif (this.canvasActions.length > 0) {\r\n\r\n\t\t\tthis.clearCanvas(this.context);\r\n\t\t\tthis.drawDottedBackground(this.context);\r\n\r\n\t\t\tconst lastAction = this.canvasActions.pop();\r\n\r\n\t\t\tswitch (lastAction) {\r\n\t\t\t\tcase CanvasAction.Line: {\r\n\t\t\t\t\tthis.undoLastLine();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase CanvasAction.Text: {\r\n\t\t\t\t\tthis.undoLastText();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.loadSavedData();\r\n\t\t}\r\n\r\n\t\tthis.saveAnswer();\r\n\t}\r\n\r\n\tpublic redoLastAction(): void {\r\n\r\n\t\tconst lastAction = this.canvasActions.pop();\r\n\r\n\t\tswitch (lastAction) {\r\n\t\t\tcase CanvasAction.Line: {\r\n\t\t\t\tthis.redoLastLine();\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase CanvasAction.Text: {\r\n\t\t\t\tthis.redoLastText();\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.saveAnswer();\r\n\t}\r\n\r\n\tpublic clear(): void {\r\n\t\tthis.clearCanvas(this.context);\r\n\t\tthis.drawDottedBackground(this.context);\r\n\t\tthis.clearCanvas(this.tempContext);\r\n\t\tthis.lineDrawingService.drawDefaultLines(this.answer, this.context);\r\n\t\tthis.drawAsset();\r\n\t\tthis.canvasSavedData.lines = [];\r\n\t\tthis.canvasSavedData.texts = [];\r\n\t\tthis.lineDrawingService.redoLines = [];\r\n\t\tthis.lineToCommit = undefined;\r\n\t\tthis.lineDrawingService.reSizeHandles = [];\r\n\t\tthis.saveAnswer();\r\n\t}\r\n\r\n\tpublic drawText(text: IText): void {\r\n\r\n\t\tthis.disableText = true;\r\n\r\n\t\tif (!this.textToCommit) {\r\n\t\t\tthis.textDrawingService.drawText(\"#08f\", text, this.tempContext);\r\n\t\t\tthis.textToCommit = text;\r\n\t\t}\r\n\r\n\t\tthis.disableText = false;\r\n\t}\r\n\r\n\tprivate clearCanvas(context: CanvasRenderingContext2D): void {\r\n\t\tcontext.clearRect(0, 0, context.canvas.width / devicePixelRatio, context.canvas.height / devicePixelRatio);\r\n\t}\r\n\r\n\tprivate commitLine(): void {\r\n\t\tif (this.lineToCommit && !this.circleIntersected) {\r\n\t\t\tif (!(this.lineToCommit === this.canvasSavedData.lines![this.canvasSavedData.lines!.length - 1])) {\r\n\t\t\t\tif (this.magneticPointsEnabled) {\r\n\t\t\t\t\tthis.lineToCommit = this.getMagneticValuesForLine(this.lineToCommit);\r\n\t\t\t\t}\r\n\t\t\t\tthis.lineDrawingService.drawLine(this.lineToCommit, this.context);\r\n\t\t\t\tthis.canvasSavedData.lines?.push(this.lineToCommit);\r\n\t\t\t\tthis.lineDrawingService.reSizeHandles = [];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.canvasActions.push(CanvasAction.Line);\r\n\r\n\t\tthis.saveAnswer();\r\n\t}\r\n\r\n\tprivate getMagneticValuesForLine(line: ILine): ILine {\r\n\t\tthis.closestStart = this.getClosestDotToMouse({ x: line.startX, y: line.startY } as ICanvasPoint);\r\n\t\tthis.closestEnd = this.getClosestDotToMouse({ x: line.endX, y: line.endY } as ICanvasPoint);\r\n\r\n\t\treturn {\r\n\t\t\tstartX: this.closestStart.x,\r\n\t\t\tstartY: this.closestStart.y,\r\n\t\t\tendX: this.closestEnd.x,\r\n\t\t\tendY: this.closestEnd.y,\r\n\t\t\tlineType: this.selectedLineType ?? LineType.Solid\r\n\t\t} as ILine;\r\n\t}\r\n\r\n\tprivate loadSavedData(): void {\r\n\t\tthis.canvasSavedData.lines?.forEach((line) => {\r\n\t\t\tthis.lineDrawingService.drawLine(line, this.context);\r\n\t\t});\r\n\r\n\t\tthis.lineDrawingService.drawDefaultLines(this.answer, this.context);\r\n\t\tthis.drawAsset();\r\n\r\n\t\tthis.startX = 0;\r\n\t\tthis.startY = 0;\r\n\r\n\t\tthis.canvasSavedData.texts?.forEach(txt => this.textDrawingService.drawText(\"black\", txt, this.context));\r\n\t}\r\n\r\n\tprivate getMousePosition(e: MouseEvent): ICanvasPoint {\r\n\t\tvar rect = this.canvasEl.nativeElement.getBoundingClientRect(), // abs. size of element\r\n\t\t\tscaleX = this.canvasEl.nativeElement.width / rect.width, // relationship bitmap vs. element for X\r\n\t\t\tscaleY = this.canvasEl.nativeElement.height / rect.height; // relationship bitmap vs. element for Y\r\n\r\n\t\treturn {\r\n\t\t\tx: (e.clientX - rect.left) * scaleX,\r\n\t\t\ty: (e.clientY - rect.top) * scaleY\r\n\t\t};\r\n\t}\r\n\r\n\tprivate drawDottedBackground(context: CanvasRenderingContext2D): void {\r\n\t\tconst rectangleSize = 2;\r\n\r\n\t\tconst cellWidth = 37;\r\n\t\tconst cellHeight = 37;\r\n\r\n\t\tlet calcX: number = 0;\r\n\t\tlet calcY: number = 0;\r\n\r\n\t\tfor (let x = 20; x < this.canvasEl.nativeElement.clientWidth; x += cellWidth) {\r\n\t\t\tfor (let y = 20; y < this.canvasEl.nativeElement.clientHeight; y += cellHeight) {\r\n\t\t\t\tcontext.fillStyle = '#000000';\r\n\r\n\t\t\t\tcalcX = x - rectangleSize / 2;\r\n\t\t\t\tcalcY = y - rectangleSize / 2;\r\n\r\n\t\t\t\tcontext.fillRect(calcX, calcY, rectangleSize, rectangleSize);\r\n\r\n\t\t\t\tconst dot: ICanvasPoint = {\r\n\t\t\t\t\tx: calcX,\r\n\t\t\t\t\ty: calcY\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dots.push(dot);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleGrid() {\r\n\t\tthis.gridEnabled = !this.gridEnabled;\r\n\t\tif (this.gridEnabled) {\r\n\t\t\tthis.drawLinedBackground();\r\n\t\t} else {\r\n\t\t\tthis.clearCanvas(this.gridContext);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic toggleRemove() {\r\n\t\tthis.gridRemove = !this.gridRemove;\r\n\t}\r\n\r\n\tprivate drawLinedBackground(): void {\r\n\t\tconst context = this.gridContext;\r\n\r\n\t\tconst cellWidth = 37;\r\n\t\tconst cellHeight = 37;\r\n\t\tcontext.strokeStyle = '#8f8f8f';\r\n\r\n\t\tfor (let x = 20; x < this.gridCanvasEl.nativeElement.clientWidth; x += cellWidth) {\r\n\t\t\tcontext.beginPath();\r\n\t\t\tcontext.moveTo(x, 0);\r\n\t\t\tcontext.lineTo(x, this.gridCanvasEl.nativeElement.clientHeight);\r\n\t\t\tcontext.stroke();\r\n\t\t}\r\n\r\n\t\tfor (let y = 20; y < this.gridCanvasEl.nativeElement.clientHeight; y += cellHeight) {\r\n\t\t\tcontext.beginPath();\r\n\t\t\tcontext.moveTo(0, y);\r\n\t\t\tcontext.lineTo(this.gridCanvasEl.nativeElement.clientWidth, y);\r\n\t\t\tcontext.stroke();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getClosestDotToMouse(mousePoint: ICanvasPoint): ICanvasPoint {\r\n\t\tthis.distances = [];\r\n\r\n\t\tthis.dots.forEach((dot) => {\r\n\t\t\tthis.distances.push(this.lineDrawingService.calculateDistance(mousePoint, dot));\r\n\t\t});\r\n\r\n\t\tthis.pointPositionIndex = this.distances.indexOf(Math.min(...this.distances));\r\n\r\n\t\treturn this.dots[this.pointPositionIndex];\r\n\t}\r\n\r\n\tprivate getClosestLinePointToMouse(mousePoint: ICanvasPoint, line: ILine): number {\r\n\t\tthis.distances = [];\r\n\r\n\t\tconst points: ICanvasPoint[] = [\r\n\t\t\t{\r\n\t\t\t\tx: line.startX,\r\n\t\t\t\ty: line.startY\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tx: line.endX,\r\n\t\t\t\ty: line.endY\r\n\t\t\t}];\r\n\r\n\t\tpoints.forEach((point) => {\r\n\t\t\tthis.distances.push(this.lineDrawingService.calculateDistance(mousePoint, point));\r\n\t\t});\r\n\r\n\t\tthis.pointPositionIndex = this.distances.indexOf(Math.min(...this.distances));\r\n\r\n\t\treturn this.pointPositionIndex;\r\n\t}\r\n\r\n\tprivate initCanvases(): void {\r\n\t\tconst scale = window.devicePixelRatio;\r\n\r\n\t\tthis.initCanvasSizes([this.canvasEl.nativeElement, this.tempCanvasEl.nativeElement, this.assetCanvasEl.nativeElement, this.gridCanvasEl.nativeElement]);\r\n\r\n\t\tthis.context = this.canvasEl.nativeElement.getContext('2d')!;\r\n\t\tthis.context.scale(scale, scale);\r\n\r\n\t\tthis.tempContext = this.tempCanvasEl.nativeElement.getContext('2d')!;\r\n\t\tthis.tempContext.scale(scale, scale);\r\n\r\n\t\tthis.assetContext = this.assetCanvasEl.nativeElement.getContext('2d')!;\r\n\t\tthis.assetContext.scale(scale, scale);\r\n\r\n\t\tthis.gridContext = this.gridCanvasEl.nativeElement.getContext('2d')!;\r\n\t\tthis.gridContext.scale(scale, scale);\r\n\r\n\t\tthis.drawDottedBackground(this.context);\r\n\t\tif (this.gridEnabled) {\r\n\t\t\tthis.drawLinedBackground();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate initCanvasSizes(e: HTMLCanvasElement[]) {\r\n\t\tconst scale = window.devicePixelRatio;\r\n\t\tconst size = 550;\r\n\r\n\t\te.forEach(c => {\r\n\t\t\tc.style.width = size + \"px\";\r\n\t\t\tc.style.height = size + \"px\";\r\n\t\t\tc.width = size * scale;\r\n\t\t\tc.height = size * scale;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate drawAsset(): void {\r\n\t\tif (this.answer.assetInfo) {\r\n\t\t\tlet assetElement = new Image();\r\n\t\t\tlet asset = this.answer.assetInfo;\r\n\t\t\tassetElement.src = ((asset.url).includes(this.cdnBaseUrl) ? asset.url : this.cdnBaseUrl + \"assets/\" + asset.url);\r\n\t\t\tassetElement.onload = () => {\r\n\t\t\t\tthis.assetContext.drawImage(\r\n\t\t\t\t\tassetElement,\r\n\t\t\t\t\tasset.startX,\r\n\t\t\t\t\tasset.startY,\r\n\t\t\t\t\tasset.width,\r\n\t\t\t\t\tasset.height\r\n\t\t\t\t);\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tprivate saveAnswer(): void {\r\n\t\tif (this.canvasSavedData) {\r\n\t\t\tthis.answer.answerJSON = JSON.stringify(this.canvasSavedData);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawRedCollidingRemoveLines(mousePos: ICanvasPoint): void {\r\n\t\tlet intersectingLines = this.getIntersectedLines(mousePos);\r\n\t\t//tempContext used as no other function uses the temp canvas at the time of removing.\r\n\t\t//If that condition changes in the future then a new context / canvas will need to be made for this at a z-index higher than main.\r\n\t\tthis.clearCanvas(this.tempContext);\r\n\t\tif (intersectingLines && intersectingLines.length) {\r\n\t\t\tlet lineToBeRemoved = intersectingLines[intersectingLines.length - 1];\r\n\t\t\tthis.lineDrawingService.drawLineToBeRemoved(lineToBeRemoved, this.tempContext);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate performElementRemove(mousePos: ICanvasPoint): void {\r\n\t\tlet intersectedLines = this.getIntersectedLines(mousePos);\r\n\t\tlet intersectedText = this.getIntersectedText(mousePos);\r\n\t\tlet anyItemsRemoved = false;\r\n\r\n\t\tif (!(intersectedLines.length > 0 && intersectedText.length > 0)) {\r\n\r\n\t\t\tif (intersectedLines.length >= 1) {\r\n\t\t\t\tlet lineToRemove = intersectedLines[intersectedLines.length - 1];\r\n\r\n\t\t\t\tlet index = this.canvasSavedData.lines?.indexOf(lineToRemove);\r\n\r\n\t\t\t\tthis.lineToCommit = undefined;\r\n\t\t\t\tthis.canvasSavedData.lines?.splice(index!, 1);\r\n\t\t\t\tthis.canvasActions.push(CanvasAction.Line);\r\n\t\t\t\tthis.undoLine(lineToRemove);\r\n\t\t\t\tanyItemsRemoved = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (intersectedText.length >= 1) {\r\n\t\t\t\tlet textToRemove = intersectedText[0];\r\n\r\n\t\t\t\tlet index = this.canvasSavedData.texts?.indexOf(textToRemove);\r\n\r\n\t\t\t\tthis.textToCommit = undefined;\r\n\t\t\t\tthis.canvasSavedData.texts?.splice(index!, 1);\r\n\t\t\t\tthis.canvasActions.push(CanvasAction.Text);\r\n\t\t\t\tthis.undoText(textToRemove);\r\n\t\t\t\tanyItemsRemoved = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tif (anyItemsRemoved) {\r\n\t\t\tthis.clearCanvas(this.context);\r\n\t\t\tthis.clearCanvas(this.tempContext);\r\n\t\t\tthis.drawDottedBackground(this.context);\r\n\t\t\tthis.loadSavedData();\r\n\t\t\tthis.saveAnswer();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getIntersectedLines(mousePos: ICanvasPoint): ILine[] {\r\n\t\tlet intersectedLines: ILine[] = [];\r\n\t\tthis.canvasSavedData.lines?.forEach(line => {\r\n\t\t\tif (this.intersectsLine(mousePos.x, mousePos.y, line.startX, line.startY, line.endX, line.endY)) {\r\n\t\t\t\tintersectedLines.push(line);\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn intersectedLines;\r\n\t}\r\n\r\n\tpublic getIntersectedText(mousePos: ICanvasPoint): IText[] {\r\n\t\tlet intersectedText: IText[] = [];\r\n\t\tthis.canvasSavedData.texts?.forEach(text => {\r\n\t\t\tif (this.intersectsText(mousePos.x, mousePos.y, text.x, text.y, text.x + text.width, text.y + text.fontSize, text.width)) {\r\n\t\t\t\tintersectedText.push(text);\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn intersectedText;\r\n\r\n\t}\r\n\r\n\tpublic intersectsText(mouseX: number, mouseY: number, textX: number, textY: number, textEndX: number, textEndY: number, width: number): boolean {\r\n\t\treturn this.isPointOnElement(mouseX, mouseY, textX, textY, textEndX, textEndY, width);\r\n\t}\r\n\r\n\tpublic intersectsLine(mouseX: number, mouseY: number, lineStartX: number, lineStartY: number, lineEndX: number, lineEndY: number): boolean {\r\n\t\tif (lineStartX < lineEndX) {\r\n\t\t\tif (mouseX < lineStartX || mouseX > lineEndX) { return false; }\r\n\t\t} else if (lineStartX > lineEndX) {\r\n\t\t\tif (mouseX < lineEndX || mouseX > lineStartX) { return false; }\r\n\t\t}\r\n\t\t\r\n\t\treturn this.isPointOnElement(mouseX, mouseY, lineStartX, lineStartY, lineEndX, lineEndY, 5);\r\n\t}\r\n\r\n\tprivate isPointOnElement(mouseX: number, mouseY: number, lineStartX: number, lineStartY: number, lineEndX: number, lineEndY: number, width: number): boolean {\r\n\t\treturn this.distancePointFromElement(mouseX, mouseY, lineStartX, lineStartY, lineEndX, lineEndY) <= width / 2\r\n\t}\r\n\tprivate distancePointFromElement(mouseX: number, mouseY: number, lineStartX: number, lineStartY: number, lineEndX: number, lineEndY: number): number {\r\n\t\treturn Math.abs((lineEndX - lineStartX) * (lineStartY - mouseY) - (lineStartX - mouseX) * (lineEndY - lineStartY)) / Math.sqrt((lineEndX - lineStartX) ** 2 + (lineEndY - lineStartY) ** 2)\r\n\t}\r\n\r\n\tprivate handleMouseDownLineDrawing(mousePos: ICanvasPoint): void {\r\n\t\tthis.circleIntersected = this.lineDrawingService.checkCirclesHit(mousePos);\r\n\r\n\t\tif (this.circleIntersected && this.lineToCommit) {\r\n\r\n\t\t\tswitch (this.getClosestLinePointToMouse(mousePos, this.lineToCommit)) {\r\n\t\t\t\tcase 0: {\r\n\r\n\t\t\t\t\tthis.startX = this.lineToCommit.endX;\r\n\t\t\t\t\tthis.startY = this.lineToCommit.endY;\r\n\r\n\t\t\t\t\tthis.lineToCommit.startX = mousePos.x;\r\n\t\t\t\t\tthis.lineToCommit.startY = mousePos.y;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase 1: {\r\n\t\t\t\t\tthis.startX = this.lineToCommit.startX;\r\n\t\t\t\t\tthis.startY = this.lineToCommit.startY;\r\n\r\n\t\t\t\t\tthis.lineToCommit.endX = mousePos.x;\r\n\t\t\t\t\tthis.lineToCommit.endY = mousePos.y;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.commitLine();\r\n\t\tthis.clearCanvas(this.tempContext);\r\n\t}\r\n\r\n\tprivate handleMouseMoveLineDrawing(e: MouseEvent, mousePos: ICanvasPoint): void {\r\n\t\tthis.circleIntersected = this.lineDrawingService.checkCirclesHit(mousePos);\r\n\r\n\t\tif (this.circleIntersected) {\r\n\t\t\t(e.target as HTMLCanvasElement).style.cursor = \"grab\";\r\n\r\n\t\t\tif (this.isDown) {\r\n\t\t\t\t(e.target as HTMLCanvasElement).style.cursor = \"grabbing\";\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t(e.target as HTMLCanvasElement).style.cursor = \"crosshair\";\r\n\t\t}\r\n\r\n\t\tif (!this.isDown) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.lineToCommit = {\r\n\t\t\tstartX: this.startX,\r\n\t\t\tstartY: this.startY,\r\n\t\t\tendX: mousePos.x,\r\n\t\t\tendY: mousePos.y,\r\n\t\t\tlineType: this.selectedLineType\r\n\t\t};\r\n\r\n\t\tthis.clearCanvas(this.tempContext);\r\n\t\tthis.lineDrawingService.drawLine(this.lineToCommit, this.tempContext, true);\r\n\t\tthis.circleIntersected = false;\r\n\t}\r\n\r\n\tprivate commitText(): void {\r\n\t\tthis.textDrawingService.drawText(\"black\", this.textToCommit!, this.context);\r\n\t\tthis.canvasSavedData.texts?.push(this.textToCommit!);\r\n\t\tthis.clearCanvas(this.tempContext);\r\n\t\tthis.currentTextIndex = -1;\r\n\t\tthis.textToCommit = undefined;\r\n\t\tthis.canvasActions.push(CanvasAction.Text);\r\n\t\tthis.saveAnswer();\r\n\t}\r\n\r\n\tprivate handleMouseMoveText(e: MouseEvent, mousePos: ICanvasPoint): void {\r\n\r\n\t\tif (this.textDrawingService.insideText(this.textToCommit!, mousePos)) {\r\n\t\t\t(e.target as HTMLCanvasElement).style.cursor = \"move\";\r\n\t\t\tthis.currentTextIndex = 1;\r\n\t\t} else {\r\n\t\t\t(e.target as HTMLCanvasElement).style.cursor = \"default\";\r\n\t\t}\r\n\r\n\t\tif (this.isDown && this.currentTextIndex !== -1) {\r\n\t\t\t// check where the mouse is on canvas and minus where it was before, getting distance change\r\n\t\t\tconst dx = mousePos.x - this.startX;\r\n\t\t\tconst dy = mousePos.y - this.startY;\r\n\t\t\tthis.startX = mousePos.x;\r\n\t\t\tthis.startY = mousePos.y;\r\n\r\n\t\t\tthis.textToCommit!.x += dx;\r\n\t\t\tthis.textToCommit!.y += dy;\r\n\r\n\t\t\tthis.textDrawingService.keepOnCanvas(this.textToCommit!, this.tempContext);\r\n\r\n\t\t\tthis.clearCanvas(this.tempContext);\r\n\t\t\tthis.textDrawingService.drawText(\"#08f\", this.textToCommit!, this.tempContext);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate handleMouseDownText(mousePos: ICanvasPoint): void {\r\n\r\n\t\tif (this.textDrawingService.insideText(this.textToCommit!, mousePos)) {\r\n\t\t\tthis.currentTextIndex = 1;\r\n\t\t} else {\r\n\t\t\tthis.currentTextIndex = -1;\r\n\t\t}\r\n\r\n\t\tif (this.textToCommit && this.currentTextIndex === -1) {\r\n\t\t\tthis.commitText();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate undoLastText(): void {\r\n\t\tif (this.canvasSavedData.texts!.length > 0) {\r\n\t\t\tthis.textToCommit = undefined;\r\n\t\t\tthis.textDrawingService.addRedoText(this.canvasSavedData.texts!.pop()!);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate undoLine(lineToRemove: ILine): void {\r\n\t\tthis.lineDrawingService.addRedoLine(lineToRemove);\r\n\t}\r\n\tprivate undoText(textToRemove: IText): void {\r\n\t\tthis.textDrawingService.addRedoText(textToRemove);\r\n\t}\r\n\r\n\tprivate undoLastLine(): void {\r\n\t\tif (this.canvasSavedData.lines!.length > 0) {\r\n\t\t\tthis.lineToCommit = undefined;\r\n\t\t\tthis.lineDrawingService.addRedoLine(this.canvasSavedData.lines!.pop()!);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate redoLastLine(): void {\r\n\t\tif (this.lineDrawingService.redoLines.length) {\r\n\t\t\tconst redoLine = this.lineDrawingService.getLastRedoLine();\r\n\r\n\t\t\tif (redoLine) {\r\n\t\t\t\tthis.canvasSavedData.lines!.push(redoLine);\r\n\t\t\t\tthis.lineDrawingService.drawLine(redoLine, this.context);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate redoLastText(): void {\r\n\t\tif (this.textDrawingService.redoTexts.length) {\r\n\t\t\tconst redoText = this.textDrawingService.getLastRedoText();\r\n\r\n\t\t\tif (redoText) {\r\n\t\t\t\tthis.canvasSavedData.texts!.push(redoText);\r\n\t\t\t\tthis.textDrawingService.drawText(\"black\", redoText, this.context);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","
\r\n @if (answer.additionalText) {\r\n
\r\n
\r\n

NOTE: {{answer.additionalText}}

\r\n
\r\n
\r\n }\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n","import { Component, ViewChild, ElementRef, AfterViewInit, Input, OnInit, HostListener, OnChanges, AfterViewChecked, OnDestroy } from '@angular/core';\r\nimport { MatSliderChange } from '@angular/material/slider';\r\nimport { Subscription } from 'rxjs';\r\nimport { ProtractorService } from '../../service/protractor.service';\r\n\r\n@Component({\r\n selector: 'app-protractor',\r\n templateUrl: './protractor.component.html',\r\n styleUrls: ['./protractor.component.scss']\r\n})\r\nexport class ProtractorComponent implements AfterViewInit, OnInit, OnChanges, AfterViewChecked, OnDestroy {\r\n\r\n @ViewChild('protractorCanvas', { static: false }) public protractorCanvas!: ElementRef;\r\n @ViewChild('rotateHandle', { static: false }) public rotateHandle!: ElementRef;\r\n @ViewChild('rotateContainer', { static: false }) public rotateContainer!: ElementRef;\r\n @ViewChild('dragContainer', { static: false }) public dragContainer!: ElementRef;\r\n\r\n public sizeRatio: number = 1;\r\n\r\n @Input() public helix: boolean = true;\r\n @Input() public dottedAngleLines: boolean = true;\r\n get radius(): number { return 256 * this.sizeRatio; }\r\n @Input() public bigNumbers: boolean = true;\r\n\r\n public context!: CanvasRenderingContext2D;\r\n public height?: number;\r\n public width?: number;\r\n public dragContainerWidth?: number;\r\n public dragContainerHeight?: number;\r\n public radiansArc?: number;\r\n public angleStart: number = 0;\r\n public angleEnd?: number;\r\n public bigAngles: number[] = [90];\r\n public bigAnglesHelix: number[] = [90, 180, 270, 360];\r\n public dottedAngles: number[] = [45, 135, 225, 315];\r\n public thickAngleLinesIncrement: number = 45;\r\n public majorAngleIncrements: number = 10;\r\n public angleIncrements: number = 5;\r\n public minorAngleIncrements: number = 1;\r\n public canvasPadding: number = 1;\r\n public littleRadius?: number;\r\n public topInnerLineRadius?: number;\r\n public dashedLineRadius?: number;\r\n public littleDashedLineRadius?: number;\r\n public bottomAngleLineRadius?: number;\r\n public bottomMinorAngleLineRadius?: number;\r\n public innerTextRadius?: number;\r\n public outerTextRadius?: number;\r\n public bigTextRadius?: number;\r\n public redraw: boolean = false;\r\n\r\n // Dragging\r\n public dragging: boolean = false;\r\n public baseOriginX: number = 0;\r\n public baseOriginY: number = 0;\r\n public originX: number = 0;\r\n public originY: number = 0;\r\n public h_x: number = 0;\r\n public h_y: number = 0;\r\n public lastAngle: number = 0;\r\n\r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(private protractorService: ProtractorService) { }\r\n\r\n ngOnInit(): void {\r\n this.init();\r\n\r\n this.subscriptions.push(this.protractorService.protractorSizeRatioChange$.subscribe((newSizeRatio: number) => {\r\n this.sizeRatio = newSizeRatio;\r\n if (!this.context) { return; }\r\n this.init();\r\n this.redraw = true;\r\n }))\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.drawProtractor();\r\n }\r\n\r\n ngOnChanges(): void {\r\n if (!this.context) { return; }\r\n this.init();\r\n this.redraw = true;\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n if (!this.context || !this.redraw) { return; }\r\n this.redraw = false;\r\n this.resetCanvas();\r\n this.drawProtractor();\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.subscriptions.map(x => x && x.unsubscribe());\r\n }\r\n\r\n private init(): void {\r\n this.width = this.radius * (window.devicePixelRatio * 2) + (this.canvasPadding * 5);\r\n this.dragContainerWidth = this.width / window.devicePixelRatio;\r\n this.dragContainerHeight = this.dragContainerWidth / 1.9;\r\n this.height = this.radius * (window.devicePixelRatio) * 1.05;\r\n\r\n if (this.helix) {\r\n this.dragContainerHeight = Number(this.dragContainerWidth);\r\n this.height = Number(this.width);\r\n }\r\n\r\n this.angleEnd = !this.helix ? 180 : 360;\r\n this.radiansArc = !this.helix ? Math.PI : Math.PI * 2;\r\n\r\n this.littleRadius = this.radius * 0.125;\r\n this.topInnerLineRadius = this.radius * 0.78125;\r\n this.dashedLineRadius = this.radius * 0.859375;\r\n this.littleDashedLineRadius = this.radius * 0.05859375;\r\n this.bottomAngleLineRadius = this.radius * 0.8984375;\r\n this.bottomMinorAngleLineRadius = this.radius * 0.9375;\r\n this.innerTextRadius = this.radius * 0.80859375;\r\n this.outerTextRadius = this.radius * 0.84765625;\r\n this.bigTextRadius = this.radius * 0.8203125;\r\n }\r\n\r\n private resetCanvas(): void {\r\n this.context.setTransform(1, 0, 0, 1, 0, 0);\r\n this.context.clearRect(0, 0, this.protractorCanvas.nativeElement.width, this.protractorCanvas.nativeElement.height);\r\n this.context.resetTransform();\r\n\r\n this.protractorCanvas.nativeElement.style.width = `${this.width}px`;\r\n this.protractorCanvas.nativeElement.style.height = `${this.helix ? (this.height) : ((this.height!) / 2)}px`;\r\n this.context.scale(1, 1);\r\n\r\n this.context.closePath();\r\n }\r\n\r\n private drawProtractor(): void {\r\n const containerRect = this.protractorCanvas.nativeElement.getBoundingClientRect();\r\n this.baseOriginX = containerRect.left + (containerRect.width / 2);\r\n this.baseOriginY = containerRect.top + (containerRect.height);\r\n const dragContainerRect = this.dragContainer.nativeElement.getBoundingClientRect();\r\n this.rotateHandle.nativeElement.style.transform = `translate(-30px, -${(dragContainerRect.height / 2) + 20}px`;\r\n\r\n const onMouseDown = this.mouseDown;\r\n const dpr = (window.devicePixelRatio || 1);\r\n this.protractorCanvas.nativeElement.style.width = `${this.width! / dpr}px`;\r\n this.protractorCanvas.nativeElement.style.height = `${this.height! / dpr}px`;\r\n this.rotateHandle.nativeElement.onmousedown = e => { onMouseDown(this, e); };\r\n\r\n this.context = this.protractorCanvas.nativeElement.getContext('2d')!;\r\n this.context.scale(dpr, dpr);\r\n\r\n this.context.beginPath();\r\n // Draw top arc\r\n this.context.arc(this.radius + this.canvasPadding,\r\n this.radius + this.canvasPadding,\r\n this.radius, this.radiansArc!, 0, false);\r\n this.context.stroke();\r\n\r\n // Draw small arc\r\n this.context.beginPath();\r\n this.context.arc(this.radius + this.canvasPadding,\r\n this.radius + this.canvasPadding,\r\n this.littleRadius!, this.radiansArc!, 0, false);\r\n this.context.stroke();\r\n\r\n // Draw 0 degree baseline\r\n this.context.beginPath();\r\n this.context.moveTo(this.canvasPadding + this.topInnerLineRadius!,\r\n this.radius + this.canvasPadding);\r\n this.context.lineTo(this.canvasPadding + this.topInnerLineRadius! * 2 + this.canvasPadding,\r\n this.radius + this.canvasPadding);\r\n this.context.stroke();\r\n\r\n this.context.beginPath();\r\n\r\n this.context.moveTo(this.canvasPadding + this.radius,\r\n this.canvasPadding + this.radius - this.littleRadius!);\r\n this.context.lineTo(this.canvasPadding + this.radius,\r\n this.canvasPadding + this.radius + (!this.helix ? 0 : this.littleRadius!));\r\n\r\n this.context.stroke();\r\n\r\n for (let angle: number = this.angleStart; angle < this.angleEnd! + 1; ++angle) {\r\n this.context.beginPath();\r\n switch (true) {\r\n case this.bigNumbers && !this.helix && this.bigAngles.indexOf(angle) !== -1:\r\n this.drawBigAngleLine(angle);\r\n break;\r\n case this.bigNumbers && this.helix && this.bigAnglesHelix.indexOf(angle) !== -1:\r\n this.drawBigAngleLine(angle);\r\n break;\r\n case this.dottedAngleLines && this.dottedAngles.indexOf(angle) !== -1:\r\n this.drawDashedAngleLine(angle);\r\n break;\r\n case angle % this.majorAngleIncrements === 0:\r\n this.drawMajorAngleLine(angle);\r\n break;\r\n case angle % this.angleIncrements === 0:\r\n this.drawAngleLine(angle, angle % this.thickAngleLinesIncrement === 0);\r\n break;\r\n case angle % this.minorAngleIncrements === 0:\r\n this.drawMinorAngleLine(angle);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private getPoint(x: number, y: number, radius: number, angle: number): number[] {\r\n return [x - Math.cos(angle) * radius, y - Math.sin(angle) * radius];\r\n }\r\n\r\n private degreesToRadians(degrees: number): number {\r\n return (Math.PI / 180) * degrees;\r\n }\r\n\r\n private radiansToDegrees(radians: number): number {\r\n return (180 / Math.PI) * radians;\r\n }\r\n\r\n private getScaledTextSize(textSize: number): number {\r\n return textSize * (this.radius / 256);\r\n }\r\n\r\n private drawBigAngleLine(angle: number): void {\r\n const [littlex, littley] = this.getPoint(this.littleRadius! + this.canvasPadding,\r\n this.littleRadius! + this.canvasPadding, this.littleRadius!, this.degreesToRadians(angle));\r\n\r\n const [bigx, bigy] = this.getPoint(this.topInnerLineRadius! + this.canvasPadding,\r\n this.topInnerLineRadius! + this.canvasPadding, this.topInnerLineRadius!, this.degreesToRadians(angle));\r\n\r\n // Move down to the bottom center of the protractor\r\n this.context.moveTo(littlex + this.radius - (this.littleRadius!), this.radius + littley - this.littleRadius!);\r\n this.context.lineTo(bigx + this.radius - (this.topInnerLineRadius!), bigy + this.radius - this.topInnerLineRadius!);\r\n this.context.stroke();\r\n\r\n const [textx, texty] = this.getPoint(this.bigTextRadius! + this.canvasPadding,\r\n this.bigTextRadius! + this.canvasPadding, this.bigTextRadius!, this.degreesToRadians(angle));\r\n\r\n this.context.beginPath();\r\n this.context.save();\r\n\r\n const fontArgs = this.context.font.split(' ');\r\n const newSize = `${this.getScaledTextSize(20)}px`;\r\n this.context.font = newSize + ' ' + fontArgs[fontArgs.length - 1];\r\n\r\n this.context.translate(textx + this.radius - this.bigTextRadius!, texty + this.radius - this.bigTextRadius!);\r\n this.context.rotate(this.degreesToRadians(angle + 270));\r\n this.context.textAlign = 'center';\r\n this.context.fillText(String(angle), 0, 0);\r\n\r\n this.context.restore();\r\n\r\n this.drawAngleLine(angle, true);\r\n }\r\n\r\n private drawDashedAngleLine(angle: number): void {\r\n this.context.beginPath();\r\n this.context.setLineDash([5, 3]);\r\n\r\n const [littleDashedx, littleDashedy] = this.getPoint(this.littleRadius! + this.canvasPadding,\r\n this.littleRadius! + this.canvasPadding, this.littleRadius!, this.degreesToRadians(angle));\r\n\r\n const [bigDashedx, bigDashedy] = this.getPoint(this.dashedLineRadius! + this.canvasPadding,\r\n this.dashedLineRadius! + this.canvasPadding, this.dashedLineRadius!, this.degreesToRadians(angle));\r\n\r\n // Move down to the bottom center of the protractor\r\n this.context.moveTo(littleDashedx + this.radius - (this.littleRadius!), this.radius + littleDashedy - this.littleRadius!);\r\n this.context.lineTo(bigDashedx + this.radius - (this.dashedLineRadius!), bigDashedy + this.radius - this.dashedLineRadius!);\r\n this.context.stroke();\r\n\r\n this.context.setLineDash([]);\r\n\r\n this.context.beginPath();\r\n\r\n const [smallX, smallY] = this.getPoint(this.littleDashedLineRadius! + this.canvasPadding,\r\n this.littleDashedLineRadius! + this.canvasPadding, this.littleDashedLineRadius!, this.degreesToRadians(angle));\r\n\r\n this.context.moveTo(this.canvasPadding + this.radius, this.canvasPadding + this.radius);\r\n this.context.lineTo(smallX + this.radius - (this.littleDashedLineRadius!), smallY + this.radius - (this.littleDashedLineRadius!));\r\n\r\n this.context.stroke();\r\n\r\n this.context.beginPath();\r\n this.drawAngleLine(angle, true);\r\n }\r\n\r\n private drawMajorAngleLine(angle: number): void {\r\n const [littlex, littley] = this.getPoint(this.littleRadius! + this.canvasPadding,\r\n this.littleRadius! + this.canvasPadding, this.littleRadius!, this.degreesToRadians(angle));\r\n\r\n const [bigx, bigy] = this.getPoint(this.topInnerLineRadius! + this.canvasPadding,\r\n this.topInnerLineRadius! + this.canvasPadding, this.topInnerLineRadius!, this.degreesToRadians(angle));\r\n\r\n // Move down to the bottom center of the protractor\r\n this.context.moveTo(littlex + this.radius - (this.littleRadius!), this.radius + littley - this.littleRadius!);\r\n this.context.lineTo(bigx + this.radius - (this.topInnerLineRadius!), bigy + this.radius - this.topInnerLineRadius!);\r\n this.context.stroke();\r\n\r\n if (!(this.helix && angle === 0)) {\r\n this.drawAngleNumbers(angle);\r\n }\r\n this.drawAngleLine(angle, angle % this.thickAngleLinesIncrement === 0);\r\n }\r\n\r\n private drawAngleLine(angle: number, bigLine: boolean): void {\r\n const [littlex, littley] = this.getPoint(this.bottomAngleLineRadius! + this.canvasPadding,\r\n this.bottomAngleLineRadius! + this.canvasPadding, this.bottomAngleLineRadius!, this.degreesToRadians(angle));\r\n\r\n const [bigx, bigy] = this.getPoint(this.radius + this.canvasPadding,\r\n this.radius + this.canvasPadding, this.radius, this.degreesToRadians(angle));\r\n\r\n // Move down to the bottom center of the protractor\r\n this.context.beginPath();\r\n if (bigLine) {\r\n this.context.lineWidth = 2;\r\n }\r\n this.context.moveTo(littlex + this.radius - (this.bottomAngleLineRadius!), this.radius + littley - this.bottomAngleLineRadius!);\r\n this.context.lineTo(bigx, bigy);\r\n this.context.stroke();\r\n this.context.lineWidth = 1;\r\n this.context.beginPath();\r\n }\r\n\r\n private drawMinorAngleLine(angle: number): void {\r\n const [littlex, littley] = this.getPoint(this.bottomMinorAngleLineRadius! + this.canvasPadding,\r\n this.bottomMinorAngleLineRadius! + this.canvasPadding, this.bottomMinorAngleLineRadius!, this.degreesToRadians(angle));\r\n\r\n const [bigx, bigy] = this.getPoint(this.radius + this.canvasPadding,\r\n this.radius + this.canvasPadding, this.radius, this.degreesToRadians(angle));\r\n\r\n // Move down to the bottom center of the protractor\r\n this.context.moveTo(littlex + this.radius - (this.bottomMinorAngleLineRadius!), this.radius + littley - this.bottomMinorAngleLineRadius!);\r\n this.context.lineTo(bigx, bigy);\r\n this.context.stroke();\r\n }\r\n\r\n private drawAngleNumbers(angle: number): void {\r\n const innerNumber: number = this.angleEnd! - angle;\r\n const outerNumber: number = angle;\r\n\r\n const [innerx, innery] = this.getPoint(this.innerTextRadius! + this.canvasPadding,\r\n this.innerTextRadius! + this.canvasPadding, this.innerTextRadius!, this.degreesToRadians(angle));\r\n\r\n const [outerx, outery] = this.getPoint(this.outerTextRadius! + this.canvasPadding,\r\n this.outerTextRadius! + this.canvasPadding, this.outerTextRadius!, this.degreesToRadians(angle));\r\n\r\n this.context.save();\r\n\r\n let fontArgs = this.context.font.split(' ');\r\n let newSize = `${this.getScaledTextSize(11)}px`;\r\n this.context.font = newSize + ' ' + fontArgs[fontArgs.length - 1];\r\n\r\n this.context.translate(innerx + this.radius - this.innerTextRadius!, innery + this.radius - this.innerTextRadius!);\r\n this.context.rotate(this.degreesToRadians(angle + 270));\r\n this.context.textAlign = 'center';\r\n this.context.fillText(String(innerNumber), 0, 0);\r\n this.context.restore();\r\n\r\n this.context.save();\r\n\r\n fontArgs = this.context.font.split(' ');\r\n newSize = `${this.getScaledTextSize(11)}px`;\r\n this.context.font = newSize + ' ' + fontArgs[fontArgs.length - 1];\r\n\r\n this.context.translate(outerx + this.radius - this.outerTextRadius!, outery + this.radius - this.outerTextRadius!);\r\n this.context.rotate(this.degreesToRadians(angle + 270));\r\n this.context.textAlign = 'center';\r\n this.context.fillText(String(outerNumber), 0, 0);\r\n this.context.restore();\r\n }\r\n\r\n public mouseDown(scope: ProtractorComponent, e: MouseEvent): void {\r\n scope.h_x = e.pageX;\r\n scope.h_y = e.pageY;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n scope.dragging = true;\r\n\r\n const containerRect = scope.protractorCanvas.nativeElement.getBoundingClientRect();\r\n scope.baseOriginX = containerRect.left + (containerRect.width / 2);\r\n\r\n if (!scope.helix) {\r\n scope.baseOriginY = containerRect.top + (containerRect.height);\r\n } else {\r\n scope.baseOriginY = containerRect.top + (containerRect.height / 2);\r\n }\r\n\r\n scope.originX = Number(scope.baseOriginX);\r\n scope.originY = Number(scope.baseOriginY);\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n public mouseMove(e: MouseEvent): void {\r\n if (this.dragging) {\r\n const s_x = e.pageX;\r\n const s_y = e.pageY;\r\n if (s_x !== this.originX && s_y !== this.originY) {\r\n let s_rad = Math.atan2((s_y) - this.originY, (s_x) - this.originX);\r\n s_rad -= Math.atan2(this.h_y - this.originY, this.h_x - this.originX);\r\n s_rad += this.lastAngle;\r\n\r\n const degree = (s_rad * (360 / (2 * Math.PI)));\r\n this.rotateContainer.nativeElement.style.transform = `rotate(${degree}deg)`;\r\n\r\n if (!this.helix) {\r\n this.rotateContainer.nativeElement.style.transformOrigin = '50% 95%';\r\n } else {\r\n this.rotateContainer.nativeElement.style.transformOrigin = '50% 50%';\r\n }\r\n }\r\n }\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n public mouseUp(e: MouseEvent): void {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n const s_x = e.pageX;\r\n const s_y = e.pageY;\r\n\r\n let s_rad = Math.atan2((s_y) - this.originY, (s_x) - this.originX);\r\n s_rad -= Math.atan2(this.h_y - this.originY, this.h_x - this.originX);\r\n s_rad += this.lastAngle;\r\n\r\n this.lastAngle = s_rad;\r\n }\r\n }\r\n}\r\n","\r\n
\r\n\t
\r\n\t\t\r\n\t\t\r\n\t\trefresh\r\n\t
\r\n
\r\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ReorderAnswerDto } from '../../model/answer/reorder/reorder-answer-dto';\r\n\r\n@Component({\r\n\tselector: 'app-reorder',\r\n\ttemplateUrl: 'reorder.component.html',\r\n\tstyleUrls: ['reorder.component.scss'],\r\n})\r\nexport class ReorderComponent {\r\n\r\n\t@Input() public answer!: ReorderAnswerDto;\r\n\r\n\tpublic drop(event: CdkDragDrop): void {\r\n\t\tmoveItemInArray(this.answer.reorderAnswerRows, event.previousIndex, event.currentIndex);\r\n\r\n\t\tthis.answer.reorderAnswerRows.forEach((val, i) => {\r\n\t\t\tval.orderIndex = i;\r\n\t\t});\r\n\t}\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n @for (row of this.answer.reorderAnswerRows; track row) {\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n","export enum RulerLengthType {\r\n Inch,\r\n Centimeter,\r\n Feet\r\n}\r\n","export enum RulerRowType {\r\n Top,\r\n Bottom\r\n}\r\n","import { Component, OnInit, ViewChild, ElementRef, AfterViewInit, OnChanges, AfterViewChecked, Input, HostListener } from '@angular/core';\r\nimport { RulerLengthType } from './enum/ruler-length-type.enum';\r\nimport { RulerRowType } from './enum/ruler-row-type.enum';\r\n\r\n@Component({\r\n selector: 'app-ruler',\r\n templateUrl: './ruler.component.html',\r\n styleUrls: ['./ruler.component.scss']\r\n})\r\nexport class RulerComponent implements AfterViewInit, OnInit, OnChanges, AfterViewChecked {\r\n\r\n @ViewChild('rulerCanvas', { static: false }) public rulerCanvas!: ElementRef;\r\n @ViewChild('rotateHandle', { static: false }) public rotateHandle!: ElementRef;\r\n @ViewChild('rotateContainer', { static: false }) public rotateContainer!: ElementRef;\r\n @ViewChild('dragContainer', { static: false }) public dragContainer!: ElementRef;\r\n @ViewChild('ppi', { static: false }) public ppiElement!: ElementRef;\r\n\r\n @Input() public length: number = 12;\r\n @Input() public lengthType: RulerLengthType = RulerLengthType.Inch;\r\n @Input() public scaleMeasurementByResolution = true;\r\n @Input() public topRowUnitType: RulerLengthType = RulerLengthType.Inch;\r\n @Input() public bottomRowUnitType: RulerLengthType = RulerLengthType.Centimeter;\r\n\r\n public context!: CanvasRenderingContext2D;\r\n public height?: number;\r\n public width?: number;\r\n public drawHeight?: number;\r\n public drawWidth?: number;\r\n public dragContainerWidth?: number;\r\n public dragContainerHeight?: number;\r\n public canvasPadding: number = 2;\r\n public rowHeight: number = 50;\r\n public redraw: boolean = false;\r\n public monitorPpi: number = 96;\r\n public defaultPixelsPerInch: number = 96;\r\n public centimeterToInchRatio: number = 2.54;\r\n\r\n // Dragging\r\n public dragging: boolean = false;\r\n public baseOriginX: number = 0;\r\n public baseOriginY: number = 0;\r\n public originX: number = 0;\r\n public originY: number = 0;\r\n public h_x: number = 0;\r\n public h_y: number = 0;\r\n public lastAngle: number = 0;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.init();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.drawRuler();\r\n }\r\n\r\n ngOnChanges(): void {\r\n if (!this.context) { return; }\r\n this.redraw = true;\r\n this.init();\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n if (!this.context || !this.redraw) { return; }\r\n this.redraw = false;\r\n this.resetCanvas();\r\n this.drawRuler();\r\n }\r\n\r\n private init(): void {\r\n this.width = this.getTotalWidth();\r\n this.height = this.getTotalHeight();\r\n this.drawWidth = this.width / window.devicePixelRatio;\r\n this.drawHeight = this.height / window.devicePixelRatio;\r\n this.dragContainerWidth = Number(this.width / window.devicePixelRatio);\r\n this.dragContainerHeight = Number(this.height / window.devicePixelRatio);\r\n }\r\n\r\n private resetCanvas(): void {\r\n this.context.setTransform(1, 0, 0, 1, 0, 0);\r\n this.context.clearRect(0, 0, this.rulerCanvas.nativeElement.width, this.rulerCanvas.nativeElement.height);\r\n this.context.resetTransform();\r\n\r\n this.rulerCanvas.nativeElement.style.width = `${this.width}px`;\r\n this.rulerCanvas.nativeElement.style.height = `${this.height}px`;\r\n this.context.scale(1, 1);\r\n\r\n this.context.closePath();\r\n }\r\n\r\n private drawRuler(): void {\r\n this.monitorPpi = this.ppiElement.nativeElement.offsetHeight || this.ppiElement.nativeElement.offsetWidth;\r\n const containerRect = this.dragContainer.nativeElement.getBoundingClientRect();\r\n this.baseOriginX = containerRect.left + (containerRect.width / 2);\r\n this.baseOriginY = containerRect.top + (containerRect.height / 2);\r\n this.rotateHandle.nativeElement.style.transform = `translate(-30px, -${(containerRect.height / 2) + 20}px`;\r\n\r\n const onMouseDown = this.mouseDown;\r\n const dpr = window.devicePixelRatio || 1;\r\n this.rulerCanvas.nativeElement.style.width = `${this.width! / dpr}px`;\r\n this.rulerCanvas.nativeElement.style.height = `${this.height! / dpr}px`;\r\n this.rotateHandle.nativeElement.onmousedown = e => { onMouseDown(this, e); };\r\n\r\n this.context = this.rulerCanvas.nativeElement.getContext('2d')!;\r\n this.context.scale(dpr, dpr);\r\n\r\n this.context.beginPath();\r\n this.context.moveTo(this.canvasPadding, this.canvasPadding);\r\n this.context.lineTo(this.drawWidth! - this.canvasPadding, this.canvasPadding);\r\n this.context.stroke();\r\n this.context.lineTo(this.drawWidth! - this.canvasPadding, this.drawHeight! - this.canvasPadding);\r\n this.context.stroke();\r\n this.context.lineTo(this.canvasPadding, this.drawHeight! - this.canvasPadding);\r\n this.context.stroke();\r\n this.context.lineTo(this.canvasPadding, this.canvasPadding);\r\n this.context.stroke();\r\n this.context.closePath();\r\n\r\n this.context.beginPath();\r\n this.context.moveTo(this.canvasPadding, (this.canvasPadding + this.drawHeight!) / 2);\r\n this.context.lineTo(this.drawWidth! - this.canvasPadding, (this.canvasPadding + this.drawHeight!) / 2);\r\n this.context.stroke();\r\n this.context.closePath();\r\n\r\n const topRowOuterY: number = this.canvasPadding;\r\n const topRowInnerY: number = (this.canvasPadding + this.drawHeight!) / 2;\r\n\r\n switch (this.topRowUnitType) {\r\n case RulerLengthType.Inch:\r\n this.drawInchRow(topRowOuterY, topRowInnerY, RulerRowType.Top);\r\n break;\r\n case RulerLengthType.Centimeter:\r\n this.drawCentimeterRow(topRowOuterY, topRowInnerY, RulerRowType.Top);\r\n break;\r\n default:\r\n this.drawInchRow(topRowOuterY, topRowInnerY, RulerRowType.Top);\r\n break;\r\n }\r\n\r\n const bottomRowInnerY: number = (this.canvasPadding + this.drawHeight!) / 2;\r\n const bottomRowOuterY: number = (this.drawHeight! - this.canvasPadding);\r\n\r\n switch (this.bottomRowUnitType) {\r\n case RulerLengthType.Inch:\r\n this.drawInchRow(bottomRowOuterY, bottomRowInnerY, RulerRowType.Bottom);\r\n break;\r\n case RulerLengthType.Centimeter:\r\n this.drawCentimeterRow(bottomRowOuterY, bottomRowInnerY, RulerRowType.Bottom);\r\n break;\r\n default:\r\n this.drawInchRow(bottomRowOuterY, bottomRowInnerY, RulerRowType.Bottom);\r\n break;\r\n }\r\n }\r\n\r\n private drawInchRow(outerY: number, innerY: number, rowType: RulerRowType): void {\r\n const rowHeight = rowType === RulerRowType.Top ? innerY - outerY : outerY - innerY;\r\n const relevantLength: number = this.lengthType === RulerLengthType.Inch ? this.length : this.centimetersToInches(this.length);\r\n const leftPadding: number = this.canvasPadding;\r\n const segmentsPerInch: number = 16;\r\n const quarterBreakpointDivisible: number = 4;\r\n const eighthBreakpointDivisible: number = 2;\r\n const quarterMarkLengthRatio: number = 0.75;\r\n const eighthMarkLengthRatio: number = quarterMarkLengthRatio * 0.75;\r\n const sixteenthMarkLengthRatio: number = eighthMarkLengthRatio * 0.75;\r\n\r\n for (let i: number = 0; i < relevantLength; ++i) {\r\n const pastSegmentOffset: number = (this.getInchPixels() * i) + leftPadding;\r\n const innerSegmentWidth: number = this.getInchPixels() / segmentsPerInch;\r\n\r\n for (let segmentIndex: number = 0; segmentIndex < segmentsPerInch; ++segmentIndex) {\r\n const leftOffset: number = pastSegmentOffset + ((segmentIndex + 1) * innerSegmentWidth);\r\n let heightAddition: number = 0;\r\n const printNumber: string = String(i + 1);\r\n\r\n switch (true) {\r\n case (segmentIndex + 1) % segmentsPerInch === 0:\r\n heightAddition = Number(rowHeight);\r\n\r\n this.context.save();\r\n\r\n const fontArgs = this.context.font.split(' ');\r\n const newSize = `20px`;\r\n this.context.font = newSize + ' ' + fontArgs[fontArgs.length - 1];\r\n this.context.textAlign = 'left';\r\n\r\n this.context.beginPath();\r\n this.context.translate(leftOffset - this.context.measureText(printNumber).width - 2,\r\n rowType === RulerRowType.Top ?\r\n outerY + ((rowHeight * quarterMarkLengthRatio) + 10) :\r\n outerY - ((rowHeight * quarterMarkLengthRatio) - 10));\r\n this.context.fillText(printNumber, 0, 0);\r\n this.context.closePath();\r\n\r\n this.context.restore();\r\n\r\n break;\r\n case (segmentIndex + 1) % quarterBreakpointDivisible === 0:\r\n heightAddition = rowHeight * quarterMarkLengthRatio;\r\n break;\r\n case (segmentIndex + 1) % eighthBreakpointDivisible === 0:\r\n heightAddition = rowHeight * eighthMarkLengthRatio;\r\n break;\r\n default:\r\n heightAddition = rowHeight * sixteenthMarkLengthRatio;\r\n break;\r\n }\r\n\r\n this.context.beginPath();\r\n this.context.moveTo(leftOffset, outerY);\r\n this.context.lineTo(leftOffset, rowType === RulerRowType.Top ? outerY + heightAddition : outerY - heightAddition);\r\n this.context.stroke();\r\n this.context.closePath();\r\n }\r\n }\r\n }\r\n\r\n private drawCentimeterRow(outerY: number, innerY: number, rowType: RulerRowType): void {\r\n const rowHeight = rowType === RulerRowType.Top ? innerY - outerY : outerY - innerY;\r\n const relevantLength = this.lengthType === RulerLengthType.Centimeter ? this.length : this.inchesToCentimeters(this.length);\r\n const leftPadding: number = this.canvasPadding;\r\n const segmentsPerCentimeter: number = 10;\r\n const halfwayBreakpointDivisible: number = 5;\r\n const halfwayMarkRatio: number = 0.50;\r\n const tenthMarkRatio: number = halfwayMarkRatio * 0.66;\r\n\r\n for (let i: number = 0; i < relevantLength; ++i) {\r\n const pastSegmentOffset: number = (this.getCentimeterPixels() * i) + leftPadding;\r\n const innerSegmentWidth: number = this.getCentimeterPixels() / segmentsPerCentimeter;\r\n\r\n for (let segmentIndex: number = 0; segmentIndex < segmentsPerCentimeter; ++segmentIndex) {\r\n const leftOffset: number = pastSegmentOffset + ((segmentIndex + 1) * innerSegmentWidth);\r\n let heightAddition: number = 0;\r\n const printNumber: string = String(i + 1);\r\n\r\n switch (true) {\r\n case (segmentIndex + 1) % segmentsPerCentimeter === 0:\r\n heightAddition = Number(rowHeight);\r\n\r\n this.context.save();\r\n\r\n const fontArgs = this.context.font.split(' ');\r\n const newSize = `17px`;\r\n this.context.font = newSize + ' ' + fontArgs[fontArgs.length - 1];\r\n this.context.textAlign = 'left';\r\n\r\n this.context.beginPath();\r\n this.context.translate(leftOffset - this.context.measureText(printNumber).width,\r\n rowType === RulerRowType.Top ?\r\n outerY + ((rowHeight * tenthMarkRatio) + 10) :\r\n outerY - ((rowHeight * tenthMarkRatio) + 1));\r\n this.context.fillText(printNumber, 0, 0);\r\n this.context.closePath();\r\n\r\n this.context.restore();\r\n break;\r\n case (segmentIndex + 1) % halfwayBreakpointDivisible === 0:\r\n heightAddition = rowHeight * halfwayMarkRatio;\r\n break;\r\n default:\r\n heightAddition = rowHeight * tenthMarkRatio;\r\n break;\r\n }\r\n\r\n this.context.beginPath();\r\n this.context.moveTo(leftOffset, outerY);\r\n this.context.lineTo(leftOffset, rowType === RulerRowType.Top ? outerY + heightAddition : outerY - heightAddition);\r\n this.context.stroke();\r\n this.context.closePath();\r\n }\r\n }\r\n }\r\n\r\n private inchesToCentimeters(inches: number): number {\r\n return inches * this.centimeterToInchRatio;\r\n }\r\n\r\n private centimetersToInches(centimeters: number): number {\r\n return centimeters / this.centimeterToInchRatio;\r\n }\r\n\r\n private getPixelToInchRatio(): number {\r\n return this.monitorPpi / this.defaultPixelsPerInch;\r\n }\r\n\r\n private getInchPixels(): number {\r\n return this.getPixelToInchRatio() * this.defaultPixelsPerInch;\r\n }\r\n\r\n private getCentimeterPixels(): number {\r\n return this.getPixelToInchRatio() * (this.getInchPixels() / this.centimeterToInchRatio);\r\n }\r\n\r\n private getInchesInPixels(inches: number): number {\r\n return (this.getInchPixels() *\r\n (this.scaleMeasurementByResolution ? window.devicePixelRatio : 1)) *\r\n inches + (this.canvasPadding * 2);\r\n }\r\n\r\n private getCentimetersInPixels(centimeters: number): number {\r\n return ((this.getInchPixels() / this.centimeterToInchRatio) *\r\n (this.scaleMeasurementByResolution ? window.devicePixelRatio : 1)) *\r\n centimeters + (this.canvasPadding * 2);\r\n }\r\n\r\n private getTotalWidth(): number {\r\n switch (this.lengthType) {\r\n case RulerLengthType.Inch:\r\n return this.getInchesInPixels(this.length);\r\n case RulerLengthType.Centimeter:\r\n return this.getCentimetersInPixels(this.length);\r\n case RulerLengthType.Feet:\r\n return this.getInchesInPixels(this.length) * 12;\r\n }\r\n }\r\n\r\n private getTotalHeight(): number {\r\n return ((this.rowHeight + this.canvasPadding) * 2) * (this.scaleMeasurementByResolution ? window.devicePixelRatio : 1);\r\n }\r\n\r\n public mouseDown(scope: RulerComponent, e: MouseEvent): void {\r\n scope.h_x = e.pageX;\r\n scope.h_y = e.pageY;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n scope.dragging = true;\r\n\r\n const containerRect = scope.dragContainer.nativeElement.getBoundingClientRect();\r\n scope.baseOriginX = containerRect.left + (containerRect.width / 2);\r\n scope.baseOriginY = containerRect.top + (containerRect.height / 2);\r\n\r\n scope.originX = Number(scope.baseOriginX);\r\n scope.originY = Number(scope.baseOriginY);\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n public mouseMove(e: MouseEvent): void {\r\n if (this.dragging) {\r\n const s_x = e.pageX;\r\n const s_y = e.pageY;\r\n if (s_x !== this.originX && s_y !== this.originY) {\r\n let s_rad = Math.atan2((s_y) - this.originY, (s_x) - this.originX);\r\n s_rad -= Math.atan2(this.h_y - this.originY, this.h_x - this.originX);\r\n s_rad += this.lastAngle;\r\n\r\n const degree = (s_rad * (360 / (2 * Math.PI)));\r\n this.rotateContainer.nativeElement.style.transform = `rotate(${degree}deg)`;\r\n this.rotateContainer.nativeElement.style.transformOrigin = '50% 50%';\r\n }\r\n }\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n public mouseUp(e: MouseEvent): void {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n const s_x = e.pageX;\r\n const s_y = e.pageY;\r\n\r\n let s_rad = Math.atan2((s_y) - this.originY, (s_x) - this.originX);\r\n s_rad -= Math.atan2(this.h_y - this.originY, this.h_x - this.originX);\r\n s_rad += this.lastAngle;\r\n\r\n this.lastAngle = s_rad;\r\n }\r\n }\r\n}\r\n","
\r\n
\r\n \r\n \r\n refresh\r\n
\r\n
\r\n
","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from \"@angular/core\";\r\nimport { TableAnswerCellDto } from \"../../model/answer/table/table-answer-cell-dto\";\r\nimport { TableAnswerDto } from \"../../model/answer/table/table-answer-dto\";\r\n\r\n@Component({\r\n\tselector: \"app-table\",\r\n\ttemplateUrl: \"./table.component.html\",\r\n\tstyleUrls: [\"./table.component.scss\"]\r\n})\r\nexport class TableComponent implements OnInit, AfterViewInit {\r\n\r\n\t@ViewChild('table') public tableEl!: ElementRef;\r\n\r\n\t@Input() public answer!: TableAnswerDto;\r\n\r\n\tpublic rowsArray: number[] = [];\r\n\tpublic colsArray: number[] = [];\r\n\tpublic outerRowsArray: number[] = [];\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tthis.colsArray = this.setUpArray(this.answer.cols);\r\n\t\tthis.rowsArray = this.setUpArray(this.answer.rows);\r\n\t\tthis.outerRowsArray = this.setUpArray(this.answer.rows - 1);\r\n\t}\r\n\r\n\tpublic ngAfterViewInit(): void {\r\n\t\tlet i = 0;\r\n\t\tfor (i = 0; i < this.answer.tableAnswerCells.length; i++) {\r\n\t\t\tthis.setCellInfo(this.answer.tableAnswerCells[i]);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getValuesFromId(id: string): [number, number] {\r\n\r\n\t\tconst dashPos = id.indexOf(\"-\");\r\n\t\tconst col = Number.parseInt(id.substring(dashPos, 0));\r\n\t\tconst row = Number.parseInt(id.substring(dashPos + 1));\r\n\r\n\t\treturn [col, row];\r\n\t}\r\n\r\n\tprivate setUpArray(size: number): number[] {\r\n\r\n\t\tconst arr: number[] = [];\r\n\t\tlet i = 0;\r\n\r\n\t\tfor (i = 0; i < size; i++) {\r\n\t\t\tarr.push(0);\r\n\t\t}\r\n\r\n\t\treturn arr;\r\n\t}\r\n\r\n\tprivate setCellInfo(data: TableAnswerCellDto): void {\r\n\t\tconst cell = this.tableEl.nativeElement.rows[data.row].cells[data.col];\r\n\t\tif (data.isEditable) {\r\n\t\t\tconst input = document.createElement(\"input\");\r\n\t\t\tinput.id = `${data.col}-${data.row}`;\r\n\t\t\tinput.className = \"or\";\r\n\t\t\tinput.type = \"text\";\r\n\r\n\t\t\tinput.value = this.answer.tableAnswerCells.find(x => x.col === data.col && x.row === data.row)!.text ?? null;\r\n\t\t\tinput.autocomplete = \"off\";\r\n\t\t\tinput.placeholder = \"Enter text here\";\r\n\t\t\tinput.style.width = \"100%\";\r\n\t\t\tinput.oninput = (e) => {\r\n\r\n\t\t\t\tconst el = e.target;\r\n\t\t\t\tconst [col, row] = this.getValuesFromId(el.id);\r\n\r\n\t\t\t\tthis.answer.tableAnswerCells.find(x => x.col === col && x.row === row)!.text = el.value;\r\n\t\t\t};\r\n\r\n\t\t\tcell.appendChild(input);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcell.innerText = data.text;\r\n\t\t}\r\n\t}\r\n}\r\n","\r\n \r\n @for (col of colsArray; track col) {\r\n \r\n }\r\n \r\n\r\n @for (row of outerRowsArray; track row) {\r\n \r\n @for (row of colsArray; track row) {\r\n \r\n }\r\n \r\n }\r\n
\r\n\r\n","export enum OpenResponseLengthIdentifier {\r\n\tShort = 0,\r\n\tMedium,\r\n\tLong\r\n}\r\n","export enum OpenResponseTypeIdentifier {\r\n\tSimple = 0,\r\n\tAdvanced\r\n}\r\n","export enum LabelAlignmentIdentifier {\r\n\tLeft = 0,\r\n\tCenter,\r\n\tRight,\r\n\tTop,\r\n\tMiddle,\r\n\tBottom\r\n}\r\n","export enum LabelPositionIdentifier {\r\n\tLeft = 0,\r\n\tAbove,\r\n\tRight,\r\n\tBelow\r\n}\r\n","import { LabelAlignmentIdentifier } from \"../../model/answer/open-response/label-alignment.enum\";\r\nimport { LabelPositionIdentifier } from \"../../model/answer/open-response/label-position.enum\";\r\n\r\nexport class LabellingService {\r\n\r\n\tpublic static getDirection(position: LabelPositionIdentifier): object {\r\n\t\tlet direction: string;\r\n\r\n\t\tswitch (position) {\r\n\r\n\t\t\tcase LabelPositionIdentifier.Above:\r\n\t\t\tcase LabelPositionIdentifier.Below:\r\n\t\t\t\tdirection = \"column\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase LabelPositionIdentifier.Left:\r\n\t\t\tcase LabelPositionIdentifier.Right:\r\n\t\t\t\tdirection = \"row\";\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\t\"flex-direction\": direction,\r\n\t\t};\r\n\t}\r\n\r\n\tpublic static getAlignment(alignment: LabelAlignmentIdentifier): { alignItem: string, textAlign: string } {\r\n\r\n\t\tlet alignItem!: string;\r\n\t\tlet textAlign!: string;\r\n\r\n\t\tswitch (alignment) {\r\n\t\t\tcase LabelAlignmentIdentifier.Bottom:\r\n\t\t\t\talignItem = \"end\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase LabelAlignmentIdentifier.Center:\r\n\t\t\t\ttextAlign = \"center\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase LabelAlignmentIdentifier.Left:\r\n\t\t\t\ttextAlign = \"left\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase LabelAlignmentIdentifier.Middle:\r\n\t\t\t\talignItem = \"center\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase LabelAlignmentIdentifier.Right:\r\n\t\t\t\ttextAlign = \"right\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase LabelAlignmentIdentifier.Top:\r\n\t\t\t\talignItem = \"start\";\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\ttextAlign = \"\";\r\n\t\t\t\talignItem = \"\";\r\n\t\t}\r\n\t\treturn { alignItem, textAlign };\r\n\t}\r\n\r\n\tpublic static getOrderForLabel(position: LabelPositionIdentifier): string {\r\n\r\n\t\tswitch (position) {\r\n\t\t\tcase LabelPositionIdentifier.Above:\r\n\t\t\t\treturn \"1\";\r\n\t\t\tcase LabelPositionIdentifier.Below:\r\n\t\t\t\treturn \"2\";\r\n\t\t\tcase LabelPositionIdentifier.Left:\r\n\t\t\t\treturn \"1\";\r\n\t\t\tcase LabelPositionIdentifier.Right:\r\n\t\t\t\treturn \"2\";\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static getOrderForTextArea(position: LabelPositionIdentifier): object {\r\n\r\n\t\tlet flexOrder: string;\r\n\r\n\t\tswitch (position) {\r\n\t\t\tcase LabelPositionIdentifier.Above:\r\n\t\t\t\tflexOrder = \"2\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase LabelPositionIdentifier.Below:\r\n\t\t\t\tflexOrder = \"1\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase LabelPositionIdentifier.Left:\r\n\t\t\t\tflexOrder = \"2\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase LabelPositionIdentifier.Right:\r\n\t\t\t\tflexOrder = \"1\";\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\t\"order\": flexOrder,\r\n\t\t};\r\n\t}\r\n}\r\n","import { AfterViewInit, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LabelAlignmentIdentifier } from '../../../model/answer/open-response/label-alignment.enum';\r\nimport { LabelPositionIdentifier } from '../../../model/answer/open-response/label-position.enum';\r\nimport { LabellingService } from '../open-response-labelling';\r\n\r\n@Component({\r\n\tselector: 'app-simple-response',\r\n\ttemplateUrl: './simple-response.component.html',\r\n\tstyleUrls: ['./simple-response.component.scss'],\r\n})\r\nexport class SimpleResponseComponent implements AfterViewInit {\r\n\r\n\t@Input() public answerText!: string;\r\n\t@Output() public answerTextChange = new EventEmitter();\r\n\t@Input() public labelText!: string;\r\n\t@Input() public position!: LabelPositionIdentifier;\r\n\t@Input() public alignment!: LabelAlignmentIdentifier;\r\n\t@Input() public includeWordCount: boolean = false;\r\n\r\n\tpublic LabelAlignmentIdentifier = LabelAlignmentIdentifier;\r\n\r\n\tpublic editorHeight: string = '100%';\r\n\r\n\tpublic ngAfterViewInit(): void {\r\n\t\tsetTimeout(() => {\r\n\t\t\ttry {\r\n\t\t\t\tconst hasTopLabel: boolean = this.labelText && this.position === LabelPositionIdentifier.Above || this.position === LabelPositionIdentifier.Below;\r\n\t\t\t\tthis.editorHeight = `calc(100% - ${hasTopLabel ? 39 : 0}px)`;\r\n\t\t\t} catch { }\r\n\t\t}, 250);\r\n\r\n\t}\r\n\r\n\tpublic getFlexDirection(): object {\r\n\t\treturn LabellingService.getDirection(this.position);\r\n\t}\r\n\r\n\tpublic getLabelStyles(): object {\r\n\r\n\t\tconst flexOrder = LabellingService.getOrderForLabel(this.position);\r\n\r\n\t\tconst { alignItem, textAlign } = LabellingService.getAlignment(this.alignment);\r\n\r\n\t\tif (textAlign) {\r\n\t\t\treturn {\r\n\t\t\t\t\"order\": flexOrder,\r\n\t\t\t\t\"text-align\": textAlign\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (alignItem) {\r\n\t\t\treturn {\r\n\t\t\t\t\"order\": flexOrder,\r\n\t\t\t\t\"display\": \"flex\",\r\n\t\t\t\t\"align-items\": alignItem\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {};\r\n\t}\r\n\r\n\tpublic getTextAreaStyles(): object {\r\n\t\tconst textAreaStyles: object = LabellingService.getOrderForTextArea(this.position);\r\n\r\n\t\treturn {...textAreaStyles, height: this.editorHeight };\r\n\t}\r\n\r\n\tpublic getAnswerLength(text: string): number {\r\n\t\tif (text) {\r\n\t\t\treturn text.split(/(\\s+)/).filter( e => e.trim().length > 0).length;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tpublic onAnswerTextChange(value: string): void {\r\n\t\tthis.answerText = value;\r\n\t\tthis.answerTextChange.emit(this.answerText);\r\n\t}\r\n}\r\n","@if (labelText) {\r\n
\r\n
\r\n \r\n \r\n
\r\n @if (includeWordCount) {\r\n
{{getAnswerLength(answerText)}} words
\r\n }\r\n
\r\n}\r\n@if (!labelText) {\r\n
\r\n
\r\n \r\n
\r\n @if (includeWordCount) {\r\n
{{getAnswerLength(answerText)}} words
\r\n }\r\n
\r\n}\r\n","import { AfterViewInit, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LabelAlignmentIdentifier } from '../../../model/answer/open-response/label-alignment.enum';\r\nimport { LabelPositionIdentifier } from '../../../model/answer/open-response/label-position.enum';\r\nimport { LabellingService } from '../open-response-labelling';\r\n\r\n@Component({\r\n\tselector: 'app-advanced-response',\r\n\ttemplateUrl: './advanced-response.component.html',\r\n\tstyleUrls: ['./advanced-response.component.scss'],\r\n})\r\nexport class AdvancedResponseComponent implements AfterViewInit {\r\n\r\n\t@Input() public answerText!: string;\r\n\t@Output() public answerTextChange = new EventEmitter();\r\n\t@Input() public labelText!: string;\r\n\t@Input() public position!: LabelPositionIdentifier;\r\n\t@Input() public alignment!: LabelAlignmentIdentifier;\r\n\t@Input() public includeWordCount: boolean = false;\r\n\r\n\tpublic LabelAlignmentIdentifier = LabelAlignmentIdentifier;\r\n\r\n\tpublic editorHeight: string = '100%';\r\n\r\n\tpublic ngAfterViewInit(): void {\r\n\t\tsetTimeout(() => {\r\n\t\t\ttry {\r\n\t\t\t\tconst hasTopLabel: boolean = this.labelText && this.position === LabelPositionIdentifier.Above || this.position === LabelPositionIdentifier.Below;\r\n\t\t\t\tthis.editorHeight = `calc(100% - ${(document.getElementsByClassName('ql-toolbar')[0] as HTMLElement)['offsetHeight'] + (hasTopLabel ? 39 : 0)}px)`;\r\n\r\n\t\t\t} catch { }\r\n\t\t}, 250);\r\n\t}\r\n\r\n\tpublic getFlexDirection(): object {\r\n\t\treturn LabellingService.getDirection(this.position);\r\n\t}\r\n\r\n\tpublic getLabelStyles(): object {\r\n\t\tconst flexOrder = LabellingService.getOrderForLabel(this.position);\r\n\t\tconst { alignItem, textAlign } = LabellingService.getAlignment(this.alignment);\r\n\t\tlet styles: object = {};\r\n\r\n\t\tif (textAlign) {\r\n\t\t\tstyles = {\r\n\t\t\t\t'order': flexOrder,\r\n\t\t\t\t'text-align': textAlign\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (alignItem) {\r\n\t\t\tstyles = {\r\n\t\t\t\t'order': flexOrder,\r\n\t\t\t\t'display': 'flex',\r\n\t\t\t\t'align-items': alignItem\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (this.position === LabelPositionIdentifier.Below) {\r\n\t\t\tstyles = { ...styles, 'margin-top': '39px' };\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tpublic getTextAreaStyles(): object {\r\n\t\tconst textAreaStyles: object = LabellingService.getOrderForTextArea(this.position);\r\n\r\n\t\treturn {...textAreaStyles, height: this.editorHeight };\r\n\t}\r\n\r\n\tpublic getAnswerLength(text: string): number {\r\n\t\tif (text) {\r\n\t\t\treturn text.split(/(\\s+| |\\u00A0)/).filter(e => e.trim().length > 0).length;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tpublic onAnswerTextChange(value: string): void {\r\n\t\tthis.answerText = value;\r\n\t\tthis.answerTextChange.emit(this.answerText);\r\n\t}\r\n}\r\n","@if (labelText) {\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n @if (includeWordCount) {\r\n
{{getAnswerLength(answerText)}} words
\r\n }\r\n
\r\n}\r\n@if (!labelText) {\r\n
\r\n
\r\n \r\n
\r\n @if (includeWordCount) {\r\n
{{getAnswerLength(answerText)}} words
\r\n }\r\n
\r\n}\r\n\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { OpenResponseAnswerGroupDto } from '../../model/answer/open-response/open-response-group-answer-dto';\r\nimport { OpenResponseLengthIdentifier } from '../../model/answer/open-response/open-response-length.enum';\r\nimport { OpenResponseTypeIdentifier } from '../../model/answer/open-response/open-response-type.enum';\r\n\r\n\r\n@Component({\r\n\tselector: 'app-open-response',\r\n\ttemplateUrl: './open-response.component.html',\r\n\tstyleUrls: ['./open-response.component.scss'],\r\n})\r\nexport class OpenResponseComponent{\r\n\r\n\t@Input() public answer!: OpenResponseAnswerGroupDto;\r\n\r\n\t@Input() public isMathsExam: boolean = false;\r\n\r\n\tpublic OpenResponseLengthIdentifier = OpenResponseLengthIdentifier;\r\n\tpublic OpenResponseTypeIdentifier = OpenResponseTypeIdentifier;\r\n\r\n}\r\n","@for (editor of answer.answers; track editor) {\r\n @switch (editor.typeIdentifier) {\r\n @case (OpenResponseTypeIdentifier.Simple) {\r\n \r\n \r\n }\r\n @case (OpenResponseTypeIdentifier.Advanced) {\r\n \r\n \r\n }\r\n }\r\n}\r\n\r\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { ScaleAnswerDto } from '../../model/answer/scale/scale-answer-dto';\r\nimport { ExamNavigationService } from '../../service/exam-navigation.service';\r\n\r\n@Component({\r\n\tselector: 'app-scale',\r\n\ttemplateUrl: './scale.component.html',\r\n\tstyleUrls: ['./scale.component.scss']\r\n})\r\nexport class ScaleComponent implements OnInit {\r\n\r\n\t@Input() public answer!: ScaleAnswerDto;\r\n\r\n\tpublic scaleSavedData: boolean[] = [];\r\n\r\n\tpublic get boxes(): number[] {\r\n\t\treturn new Array(this.answer.pointCount);\r\n\t}\r\n\r\n\tpublic get points(): number[] {\r\n\t\treturn new Array(this.answer.pointCount - 1);\r\n\t}\r\n\r\n\tconstructor() { }\r\n\r\n\tpublic ngOnInit(): void {\r\n\r\n\t\tif (this.answer.answerJSON) {\r\n\t\t\tthis.scaleSavedData = JSON.parse(this.answer.answerJSON);\r\n\t\t} else {\r\n\t\t\tthis.scaleSavedData = new Array(this.answer.pointCount).fill(false);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic setValue(index: number, value: boolean): void {\r\n\t\tthis.scaleSavedData[index] = value;\r\n\t\tthis.answer.answerJSON = JSON.stringify(this.scaleSavedData);\r\n\t}\r\n}\r\n","
\r\n
\r\n @for (box of boxes; track box; let i = $index) {\r\n \r\n }\r\n
\r\n
\r\n @for (point of points; track point) {\r\n
\r\n }\r\n
\r\n
\r\n {{ answer.leftText }}\r\n {{ answer.middleText }}\r\n {{ answer.rightText }}\r\n
\r\n
\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MultiChoiceAnswerDTO } from '../../model/answer/multi-choice/multi-choice-answer-dto';\r\nimport { MultiChoiceGroupAnswerDTO } from '../../model/answer/multi-choice/multi-choice-group-answer-dto';\r\n\r\n@Component({\r\n selector: 'app-multi-choice',\r\n templateUrl: './multi-choice.component.html',\r\n styleUrls: ['./multi-choice.component.scss']\r\n})\r\nexport class MultiChoiceComponent implements OnInit {\r\n\r\n @Input() public answer!: MultiChoiceGroupAnswerDTO;\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.answer.answers = this.answer.answers.sort((a: MultiChoiceAnswerDTO, b: MultiChoiceAnswerDTO) => a.index - b.index);\r\n }\r\n\r\n public selectAnswer(index: number): void {\r\n this.answer.answers.forEach(x => x.selected = false);\r\n this.answer.answers.find(x => x.index === index)!.selected = true;\r\n }\r\n}\r\n","
\r\n @for (answer of answer.answers; track answer) {\r\n
\r\n @if (!answer.selected) {\r\n radio_button_unchecked\r\n }\r\n @if (answer.selected) {\r\n radio_button_checked\r\n }\r\n   \r\n \r\n
\r\n }\r\n
","import * as i0 from '@angular/core';\nimport { InjectionToken, Injectable, Inject, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { defer, of } from 'rxjs';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nconst JWT_OPTIONS = new InjectionToken('JWT_OPTIONS');\n\n/* eslint-disable no-bitwise */\nlet JwtHelperService = /*#__PURE__*/(() => {\n class JwtHelperService {\n constructor(config = null) {\n this.tokenGetter = config && config.tokenGetter || function () {};\n }\n urlBase64Decode(str) {\n let output = str.replace(/-/g, '+').replace(/_/g, '/');\n switch (output.length % 4) {\n case 0:\n {\n break;\n }\n case 2:\n {\n output += '==';\n break;\n }\n case 3:\n {\n output += '=';\n break;\n }\n default:\n {\n throw new Error('Illegal base64url string!');\n }\n }\n return this.b64DecodeUnicode(output);\n }\n // credits for decoder goes to https://github.com/atk\n b64decode(str) {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n let output = '';\n str = String(str).replace(/=+$/, '');\n if (str.length % 4 === 1) {\n throw new Error(`'atob' failed: The string to be decoded is not correctly encoded.`);\n }\n for (\n // initialize result and counters\n let bc = 0, bs, buffer, idx = 0;\n // get next character\n buffer = str.charAt(idx++);\n // character found in table? initialize bit storage and add its ascii value;\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0) {\n // try to find character in table (0-63, not found => -1)\n buffer = chars.indexOf(buffer);\n }\n return output;\n }\n b64DecodeUnicode(str) {\n return decodeURIComponent(Array.prototype.map.call(this.b64decode(str), c => {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n decodeToken(token = this.tokenGetter()) {\n if (token instanceof Promise) {\n return token.then(t => this._decodeToken(t));\n }\n return this._decodeToken(token);\n }\n _decodeToken(token) {\n if (!token || token === '') {\n return null;\n }\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error(`The inspected token doesn't appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.`);\n }\n const decoded = this.urlBase64Decode(parts[1]);\n if (!decoded) {\n throw new Error('Cannot decode the token.');\n }\n return JSON.parse(decoded);\n }\n getTokenExpirationDate(token = this.tokenGetter()) {\n if (token instanceof Promise) {\n return token.then(t => this._getTokenExpirationDate(t));\n }\n return this._getTokenExpirationDate(token);\n }\n _getTokenExpirationDate(token) {\n let decoded;\n decoded = this.decodeToken(token);\n if (!decoded || !decoded.hasOwnProperty('exp')) {\n return null;\n }\n const date = new Date(0);\n date.setUTCSeconds(decoded.exp);\n return date;\n }\n isTokenExpired(token = this.tokenGetter(), offsetSeconds) {\n if (token instanceof Promise) {\n return token.then(t => this._isTokenExpired(t, offsetSeconds));\n }\n return this._isTokenExpired(token, offsetSeconds);\n }\n _isTokenExpired(token, offsetSeconds) {\n if (!token || token === '') {\n return true;\n }\n const date = this.getTokenExpirationDate(token);\n offsetSeconds = offsetSeconds || 0;\n if (date === null) {\n return false;\n }\n return !(date.valueOf() > new Date().valueOf() + offsetSeconds * 1000);\n }\n getAuthScheme(authScheme, request) {\n if (typeof authScheme === 'function') {\n return authScheme(request);\n }\n return authScheme;\n }\n }\n JwtHelperService.ɵfac = function JwtHelperService_Factory(t) {\n return new (t || JwtHelperService)(i0.ɵɵinject(JWT_OPTIONS));\n };\n JwtHelperService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: JwtHelperService,\n factory: JwtHelperService.ɵfac\n });\n return JwtHelperService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst fromPromiseOrValue = input => {\n if (input instanceof Promise) {\n return defer(() => input);\n }\n return of(input);\n};\nlet JwtInterceptor = /*#__PURE__*/(() => {\n class JwtInterceptor {\n constructor(config, jwtHelper, document) {\n this.jwtHelper = jwtHelper;\n this.document = document;\n this.standardPorts = ['80', '443'];\n this.tokenGetter = config.tokenGetter;\n this.headerName = config.headerName || 'Authorization';\n this.authScheme = config.authScheme || config.authScheme === '' ? config.authScheme : 'Bearer ';\n this.allowedDomains = config.allowedDomains || [];\n this.disallowedRoutes = config.disallowedRoutes || [];\n this.throwNoTokenError = config.throwNoTokenError || false;\n this.skipWhenExpired = config.skipWhenExpired;\n }\n isAllowedDomain(request) {\n const requestUrl = new URL(request.url, this.document.location.origin);\n // If the host equals the current window origin,\n // the domain is allowed by default\n if (requestUrl.host === this.document.location.host) {\n return true;\n }\n // If not the current domain, check the allowed list\n const hostName = `${requestUrl.hostname}${requestUrl.port && !this.standardPorts.includes(requestUrl.port) ? ':' + requestUrl.port : ''}`;\n return this.allowedDomains.findIndex(domain => typeof domain === 'string' ? domain === hostName : domain instanceof RegExp ? domain.test(hostName) : false) > -1;\n }\n isDisallowedRoute(request) {\n const requestedUrl = new URL(request.url, this.document.location.origin);\n return this.disallowedRoutes.findIndex(route => {\n if (typeof route === 'string') {\n const parsedRoute = new URL(route, this.document.location.origin);\n return parsedRoute.hostname === requestedUrl.hostname && parsedRoute.pathname === requestedUrl.pathname;\n }\n if (route instanceof RegExp) {\n return route.test(request.url);\n }\n return false;\n }) > -1;\n }\n handleInterception(token, request, next) {\n const authScheme = this.jwtHelper.getAuthScheme(this.authScheme, request);\n if (!token && this.throwNoTokenError) {\n throw new Error('Could not get token from tokenGetter function.');\n }\n let tokenIsExpired = of(false);\n if (this.skipWhenExpired) {\n tokenIsExpired = token ? fromPromiseOrValue(this.jwtHelper.isTokenExpired(token)) : of(true);\n }\n if (token) {\n return tokenIsExpired.pipe(map(isExpired => isExpired && this.skipWhenExpired ? request.clone() : request.clone({\n setHeaders: {\n [this.headerName]: `${authScheme}${token}`\n }\n })), mergeMap(innerRequest => next.handle(innerRequest)));\n }\n return next.handle(request);\n }\n intercept(request, next) {\n if (!this.isAllowedDomain(request) || this.isDisallowedRoute(request)) {\n return next.handle(request);\n }\n const token = this.tokenGetter(request);\n return fromPromiseOrValue(token).pipe(mergeMap(asyncToken => {\n return this.handleInterception(asyncToken, request, next);\n }));\n }\n }\n JwtInterceptor.ɵfac = function JwtInterceptor_Factory(t) {\n return new (t || JwtInterceptor)(i0.ɵɵinject(JWT_OPTIONS), i0.ɵɵinject(JwtHelperService), i0.ɵɵinject(DOCUMENT));\n };\n JwtInterceptor.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: JwtInterceptor,\n factory: JwtInterceptor.ɵfac\n });\n return JwtInterceptor;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet JwtModule = /*#__PURE__*/(() => {\n class JwtModule {\n constructor(parentModule) {\n if (parentModule) {\n throw new Error(`JwtModule is already loaded. It should only be imported in your application's main module.`);\n }\n }\n static forRoot(options) {\n return {\n ngModule: JwtModule,\n providers: [{\n provide: HTTP_INTERCEPTORS,\n useClass: JwtInterceptor,\n multi: true\n }, options.jwtOptionsProvider || {\n provide: JWT_OPTIONS,\n useValue: options.config\n }, JwtHelperService]\n };\n }\n }\n JwtModule.ɵfac = function JwtModule_Factory(t) {\n return new (t || JwtModule)(i0.ɵɵinject(JwtModule, 12));\n };\n JwtModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: JwtModule\n });\n JwtModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n return JwtModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/*\n * Public API Surface of angular-jwt\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { JWT_OPTIONS, JwtHelperService, JwtInterceptor, JwtModule };\n","import * as i0 from '@angular/core';\nimport { NgModule, Injectable } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { lastValueFrom, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport * as i1 from '@angular/common/http';\nlet AngularHighfieldwebapiModule = /*#__PURE__*/(() => {\n class AngularHighfieldwebapiModule {\n static forRoot() {\n return {\n ngModule: AngularHighfieldwebapiModule\n };\n }\n static {\n this.ɵfac = function AngularHighfieldwebapiModule_Factory(t) {\n return new (t || AngularHighfieldwebapiModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: AngularHighfieldwebapiModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule]\n });\n }\n }\n return AngularHighfieldwebapiModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass APIResponse {\n constructor(responseCode, responseMessage, responseData, responseError = \"\") {\n this.responseCode = responseCode;\n this.responseMessage = responseMessage;\n this.responseData = responseData;\n this.responseError = responseError;\n }\n}\nclass GenericAPIResponse {}\nlet APIService = /*#__PURE__*/(() => {\n class APIService {\n constructor(httpClient) {\n this.httpClient = httpClient;\n }\n //#region Promise functions\n async getAsync(serviceBaseURL, requestUri, headers) {\n const response = await new Promise((resolve, reject) => {\n lastValueFrom(this.httpClient.get(`${serviceBaseURL}${requestUri}`, {\n headers,\n observe: 'response'\n })).then(res => {\n resolve(new APIResponse(res.status, res.statusText, res.body));\n }, err => {\n reject(new APIResponse(err.status, err.statusText, err.message, err.error));\n });\n });\n return response;\n }\n async postAsync(serviceBaseURL, requestUri, headers, body) {\n const response = await new Promise((resolve, reject) => {\n lastValueFrom(this.httpClient.post(`${serviceBaseURL}${requestUri}`, body, {\n headers,\n observe: 'response'\n })).then(res => {\n resolve(new APIResponse(res.status, res.statusText, res.body));\n }, err => {\n reject(new APIResponse(err.status, err.statusText, err.message, err.error));\n });\n });\n return response;\n }\n async putAsync(serviceBaseURL, requestUri, headers, body) {\n const response = await new Promise((resolve, reject) => {\n lastValueFrom(this.httpClient.put(`${serviceBaseURL}${requestUri}`, body, {\n headers,\n observe: 'response'\n })).then(res => {\n resolve(new APIResponse(res.status, res.statusText, res.body));\n }, err => {\n reject(new APIResponse(err.status, err.statusText, err.message, err.error));\n });\n });\n return response;\n }\n async getFileAsync(serviceBaseURL, requestUri, headers) {\n const response = await new Promise((resolve, reject) => {\n lastValueFrom(this.httpClient.get(`${serviceBaseURL}${requestUri}`, {\n headers,\n observe: 'response',\n responseType: \"blob\"\n })).then(res => {\n resolve(new APIResponse(res.status, res.statusText, res));\n }, err => {\n reject(new APIResponse(err.status, err.statusText, err.message, err.error));\n });\n });\n return response;\n }\n async deleteAsync(serviceBaseURL, requestUri, headers) {\n const response = await new Promise((resolve, reject) => {\n lastValueFrom(this.httpClient.delete(`${serviceBaseURL}${requestUri}`, {\n headers,\n observe: 'response'\n })).then(res => {\n resolve(new APIResponse(res.status, res.statusText, res.body));\n }, err => {\n reject(new APIResponse(err.status, err.statusText, err.message, err.error));\n });\n });\n return response;\n }\n //#endregion\n //#region Observable functions\n getObservable(serviceBaseURL, requestUri, headers) {\n return this.httpClient.get(`${serviceBaseURL}${requestUri}`, {\n headers,\n observe: 'response'\n }).pipe(map(httpResponse => this.processResponse(httpResponse)));\n }\n postObservable(serviceBaseURL, requestUri, headers, body) {\n return this.httpClient.post(`${serviceBaseURL}${requestUri}`, body, {\n headers,\n observe: 'response'\n }).pipe(map(httpResponse => this.processResponse(httpResponse)));\n }\n putObservable(serviceBaseURL, requestUri, headers, body) {\n return this.httpClient.put(`${serviceBaseURL}${requestUri}`, body, {\n headers,\n observe: 'response'\n }).pipe(map(httpResponse => this.processResponse(httpResponse)));\n }\n deleteObservable(serviceBaseURL, requestUri, headers) {\n return this.httpClient.delete(`${serviceBaseURL}${requestUri}`, {\n headers,\n observe: 'response'\n }).pipe(map(httpResponse => this.processResponse(httpResponse)));\n }\n processResponse(response) {\n // API call returns a GenericAPIResponse, just pass it through. \n if (response.body?.responseData !== undefined) {\n return response.body;\n }\n // API call does NOT return a GenericAPIResponse, let's make do the best we can to mimic it.\n if (response.body) {\n // Construct a GenericAPIResponse object as best we can\n // Trust the return type implicitly \n return {\n responseCode: 200,\n responseMessage: '',\n responseData: response.body,\n responseError: ''\n };\n } else {\n return null;\n }\n }\n static {\n this.ɵfac = function APIService_Factory(t) {\n return new (t || APIService)(i0.ɵɵinject(i1.HttpClient));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: APIService,\n factory: APIService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return APIService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet StoredSettingService = /*#__PURE__*/(() => {\n class StoredSettingService {\n constructor() {\n this.getSetting = key => {\n const item = localStorage.getItem(key);\n if (item && item !== 'undefined') {\n return JSON.parse(item);\n }\n return '';\n };\n this.setSetting = (key, value) => {\n localStorage.setItem(key, JSON.stringify(value));\n };\n this.removeSetting = key => {\n localStorage.removeItem(key);\n };\n this.getAll = () => {\n return localStorage;\n };\n }\n static {\n this.ɵfac = function StoredSettingService_Factory(t) {\n return new (t || StoredSettingService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: StoredSettingService,\n factory: StoredSettingService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return StoredSettingService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet EasyXDMService = /*#__PURE__*/(() => {\n class EasyXDMService {\n MsgPromise(serverURL, msg, namespace) {\n if (namespace === '') {\n namespace = 'Defaultns';\n }\n this.dataPromise = new Promise((resolve, reject) => {\n this.socket = new easyXDM.Socket({\n onMessage: (message, origin) => {\n resolve(message);\n },\n remote: serverURL\n });\n this.socket.postMessage(msg);\n });\n return this.dataPromise;\n }\n RpcPromise(serverURL, procName, params, namespace) {\n if (namespace === '') {\n namespace = 'Defaultns';\n }\n this.remoteDataPromise = new Promise((resolve, reject) => {\n this.remote = new easyXDM.Rpc({\n remote: serverURL\n }, {\n remote: {\n postMessage: {}\n }\n });\n switch (procName) {\n case 'postMessage':\n this.remote.postMessage(params, result => {\n resolve(result);\n });\n break;\n default:\n }\n });\n return this.remoteDataPromise;\n }\n IFramePromise(serverURL, frameContainer, frameWidth, frameHeight, namespace) {\n if (namespace === '') {\n namespace = 'Defaultns';\n }\n this.remoteFramePromise = new Promise((resolve, reject) => {\n this.frameSocket = new easyXDM.Socket({\n container: document.getElementById(frameContainer),\n onMessage: (message, origin) => {\n resolve(message);\n },\n onReady: function () {\n try {\n if (frameWidth !== '') {\n document.getElementById(frameContainer).getElementsByTagName('iframe')[0].style.width = frameWidth;\n }\n if (frameHeight !== '') {\n document.getElementById(frameContainer).getElementsByTagName('iframe')[0].style.height = frameHeight;\n }\n } catch (err) {\n console.log(err);\n }\n },\n remote: serverURL\n });\n });\n return this.remoteFramePromise;\n }\n MsgObservable(serverURL, msg, namespace) {\n if (namespace === '') {\n namespace = 'Defaultns';\n }\n this.data = new Observable(observer => {\n this.socket = new easyXDM.Socket({\n onMessage: (message, origin) => {\n observer.next(message);\n observer.complete();\n },\n remote: serverURL\n });\n this.socket.postMessage(msg);\n });\n return this.data;\n }\n RpcObservable(serverURL, procName, params, namespace) {\n if (namespace === '') {\n namespace = 'Defaultns';\n }\n this.remoteData = new Observable(observer => {\n this.remote = new easyXDM.Rpc({\n remote: serverURL\n }, {\n remote: {\n postMessage: {}\n }\n });\n switch (procName) {\n case 'postMessage':\n this.remote.postMessage(params, result => {\n observer.next(result);\n observer.complete();\n });\n break;\n default:\n }\n });\n return this.remoteData;\n }\n IFrameObservable(serverURL, frameContainer, frameWidth, frameHeight, namespace) {\n if (namespace === '') {\n namespace = 'Defaultns';\n }\n this.remoteFrame = new Observable(observer => {\n this.frameSocket = new easyXDM.Socket({\n container: document.getElementById(frameContainer),\n onMessage: (message, origin) => {\n observer.next(message);\n observer.complete();\n },\n onReady: function () {\n try {\n if (frameWidth !== '') {\n document.getElementById(frameContainer).getElementsByTagName('iframe')[0].style.width = frameWidth;\n }\n if (frameHeight !== '') {\n document.getElementById(frameContainer).getElementsByTagName('iframe')[0].style.height = frameHeight;\n }\n } catch (err) {\n console.log(err);\n }\n },\n remote: serverURL\n });\n });\n return this.remoteFrame;\n }\n static {\n this.ɵfac = function EasyXDMService_Factory(t) {\n return new (t || EasyXDMService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: EasyXDMService,\n factory: EasyXDMService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return EasyXDMService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass Parameter {\n constructor() {\n this.key = '';\n }\n}\n\n/*\n * Public API Surface of angular-highfieldwebapi\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { APIResponse, APIService, AngularHighfieldwebapiModule, EasyXDMService, GenericAPIResponse, Parameter, StoredSettingService };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Injectable, Inject, Component, Optional, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BehaviorSubject, Observable, iif, of, lastValueFrom, map as map$1 } from 'rxjs';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport * as i1 from '@angular/cdk/platform';\nimport * as i2 from '@angular/router';\nimport * as i2$1 from '@angular/common/http';\nimport { HttpHeaders } from '@angular/common/http';\nimport { catchError, map, switchMap } from 'rxjs/operators';\nimport * as i1$1 from '@highfieldabc/angular-highfieldwebapi';\nclass CurrentUser {\n constructor(initialised, user) {\n this.initialised = initialised;\n this.user = user;\n }\n}\nclass LoginUser {\n constructor(id, username, firstName, lastName, roles) {\n this.id = id;\n this.username = username;\n this.firstName = firstName;\n this.lastName = lastName;\n this.roles = roles;\n }\n hasRole(role) {\n let _return = false;\n if (Array.isArray(this.roles)) {\n for (var i = 0; i < this.roles.length; i++) {\n if (this.roles[i].toLowerCase().trim() === role.toLowerCase().trim()) {\n _return = true;\n break;\n }\n }\n return _return;\n } else {\n return this.roles.toLowerCase().trim() === role.toLowerCase().trim();\n }\n }\n}\nconst UserbaseAuthStrategy = new InjectionToken('UserbaseAuthStrategy');\nlet CurrentUserService = /*#__PURE__*/(() => {\n class CurrentUserService {\n constructor(platformId, userbaseAuthStrategy, userApiBaseUrl) {\n this.platformId = platformId;\n this.userbaseAuthStrategy = userbaseAuthStrategy;\n this.userApiBaseUrl = userApiBaseUrl;\n this.currentUser = new CurrentUser(false, null);\n this.dispatcher = new BehaviorSubject(this.currentUser);\n this.currentTokenExpiry = new Date();\n this.helper = new JwtHelperService();\n this.loadCurrentUser();\n }\n async loadCurrentUser() {\n let currentToken = '';\n if (this.platformId.isBrowser) {\n currentToken = await this.userbaseAuthStrategy.getTokenForCurrentUser(this.userApiBaseUrl);\n }\n var user = null;\n if (currentToken && currentToken.split('.').length == 3) {\n try {\n var _token = this.helper.decodeToken(currentToken);\n user = new LoginUser(_token.nameid, _token.unique_name, _token.firstname, _token.lastname, _token.role);\n this.currentTokenExpiry = new Date(0);\n this.currentTokenExpiry.setUTCSeconds(_token.exp);\n } catch (ex) {\n throw new Error('Unable to load current user.');\n }\n } else {\n user = null;\n }\n this.setCurrentUser(user);\n }\n getCurrentUser() {\n return this.currentUser;\n }\n setCurrentUser(user) {\n if (user === null && this.currentUser.user === null && this.currentUser.initialised === false || user !== null && this.currentUser.user === null || user === null && this.currentUser.user !== null || user !== this.currentUser.user) {\n this.currentUser.user = user;\n this.currentUser.initialised = true;\n this.dispatcher.next(this.currentUser);\n }\n }\n async isValidUser() {\n let currentUser = this.getCurrentUser();\n if (currentUser.initialised == false || this.currentTokenExpiry < new Date()) {\n await this.loadCurrentUser();\n currentUser = this.getCurrentUser();\n }\n if (currentUser.user == null) {\n return false;\n } else {\n return true;\n }\n }\n static {\n this.ɵfac = function CurrentUserService_Factory(t) {\n return new (t || CurrentUserService)(i0.ɵɵinject(i1.Platform), i0.ɵɵinject(UserbaseAuthStrategy), i0.ɵɵinject('UserApiBaseUrl'));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: CurrentUserService,\n factory: CurrentUserService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return CurrentUserService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AuthCheckComponent = /*#__PURE__*/(() => {\n class AuthCheckComponent {\n constructor(currentUserService, route, router, displayName, authFailedUrl) {\n this.currentUserService = currentUserService;\n this.route = route;\n this.router = router;\n this.displayName = displayName;\n this.authFailedUrl = authFailedUrl;\n this.userWatcher = null;\n }\n ngOnInit() {\n this.userWatcher = this.currentUserService.dispatcher.subscribe(user => {\n if (user.initialised === true) {\n this.redirectToPath();\n }\n });\n }\n redirectToPath() {\n if (this.currentUserService.getCurrentUser().user === null) {\n this.router.navigate([this.authFailedUrl], {\n queryParams: {\n returnUrl: this.route.snapshot.queryParams['returnUrl'] !== '/' ? this.route.snapshot.queryParams['returnUrl'] : null\n }\n });\n } else {\n this.router.navigate([this.route.snapshot.queryParams['returnUrl'] || '']);\n }\n }\n static {\n this.ɵfac = function AuthCheckComponent_Factory(t) {\n return new (t || AuthCheckComponent)(i0.ɵɵdirectiveInject(CurrentUserService), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject('AuthCheckDisplayName'), i0.ɵɵdirectiveInject('AuthenticatedCheckFailURL'));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: AuthCheckComponent,\n selectors: [[\"highfieldauth-authcheck\"]],\n features: [i0.ɵɵProvidersFeature([])],\n decls: 5,\n vars: 1,\n consts: [[\"id\", \"AuthMessage\"]],\n template: function AuthCheckComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"h2\");\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(3, \"h3\");\n i0.ɵɵtext(4, \"Please wait while we confirm your authentication details.\");\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate1(\"Welcome To \", ctx.displayName, \"\");\n }\n },\n styles: [\"#AuthMessage[_ngcontent-%COMP%]{max-width:400px;margin-left:auto;margin-right:auto;text-align:center}\"]\n });\n }\n }\n return AuthCheckComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass ValidEmailCheck {\n constructor() {\n this.userId = '';\n this.emailAddress = '';\n }\n}\nclass UserRoleDto {\n constructor() {\n this.userId = '';\n this.roleId = '';\n }\n}\nvar GrantResponse = /*#__PURE__*/function (GrantResponse) {\n GrantResponse[GrantResponse[\"Success\"] = 0] = \"Success\";\n GrantResponse[GrantResponse[\"InvalidUser\"] = 1] = \"InvalidUser\";\n GrantResponse[GrantResponse[\"IncorrectPassword\"] = 2] = \"IncorrectPassword\";\n GrantResponse[GrantResponse[\"BlacklistedUser\"] = 3] = \"BlacklistedUser\";\n GrantResponse[GrantResponse[\"AccountLocked\"] = 4] = \"AccountLocked\";\n GrantResponse[GrantResponse[\"RequiresTwoFactorAuthentication\"] = 5] = \"RequiresTwoFactorAuthentication\";\n GrantResponse[GrantResponse[\"RequiresTwoFactorAuthenticationSetup\"] = 6] = \"RequiresTwoFactorAuthenticationSetup\";\n GrantResponse[GrantResponse[\"TwoFactorAuthenticationFailed\"] = 7] = \"TwoFactorAuthenticationFailed\";\n GrantResponse[GrantResponse[\"InvalidRefreshToken\"] = 8] = \"InvalidRefreshToken\";\n GrantResponse[GrantResponse[\"InvalidOrigin\"] = 9] = \"InvalidOrigin\";\n GrantResponse[GrantResponse[\"Timeout\"] = 10] = \"Timeout\";\n return GrantResponse;\n}(GrantResponse || {});\nconst AuthTokenPrefix = new InjectionToken('AuthTokenPrefix');\nconst V1AuthTokenPrefix = 'authToken_v1_';\nconst V2AuthTokenPrefix = 'authToken_v2_';\nconst RefreshTokenName = new InjectionToken('RefreshTokenName');\nconst V1RefreshTokenName = 'refreshToken_v1';\nconst V2RefreshTokenName = 'refreshToken_v2';\nclass BaseUserbaseAuthStrategy {\n constructor(easyXDMService, serverUrl) {\n this.easyXDMService = easyXDMService;\n this.serverUrl = serverUrl;\n }\n async getAuthTokenAsync(baseUrl) {\n const returnString = await this.easyXDMService.MsgPromise(this.serverUrl, baseUrl, 'DistLogin');\n return returnString;\n }\n}\nlet V1UserbaseAuthStrategy = /*#__PURE__*/(() => {\n class V1UserbaseAuthStrategy extends BaseUserbaseAuthStrategy {\n constructor(easyXDMService, serverUrl) {\n super(easyXDMService, serverUrl);\n this.easyXDMService = easyXDMService;\n this.serverUrl = serverUrl;\n }\n async getTokenForCurrentUser(baseUrl) {\n return await this.getAuthTokenAsync(baseUrl);\n }\n getAuthToken(baseUrl) {\n let remoteData;\n remoteData = new Observable(observer => {\n this.easyXDMService.MsgObservable(this.serverUrl, baseUrl, 'DistLogin').subscribe(value => {\n observer.next(value);\n observer.complete();\n });\n });\n return remoteData;\n }\n static {\n this.ɵfac = function V1UserbaseAuthStrategy_Factory(t) {\n return new (t || V1UserbaseAuthStrategy)(i0.ɵɵinject(i1$1.EasyXDMService), i0.ɵɵinject('AuthApiBaseUrl'));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: V1UserbaseAuthStrategy,\n factory: V1UserbaseAuthStrategy.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return V1UserbaseAuthStrategy;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AuthenticatedService = /*#__PURE__*/(() => {\n class AuthenticatedService {\n constructor(apiService, settingService, currentUserService, userbaseAuthStrategy, serverUrl,\n // This is only needed because of the iFrame functionality for Backwards Compatibility\n v1UserBaseAuthStrategy, authTokenPrefix, refreshTokenName) {\n this.apiService = apiService;\n this.settingService = settingService;\n this.currentUserService = currentUserService;\n this.userbaseAuthStrategy = userbaseAuthStrategy;\n this.serverUrl = serverUrl;\n this.v1UserBaseAuthStrategy = v1UserBaseAuthStrategy;\n this.authTokenPrefix = authTokenPrefix;\n this.refreshTokenName = refreshTokenName;\n }\n //#region Promise functions\n async getAsync(serviceBaseURL, requestUri, contentType = 'application/json') {\n const authToken = this.settingService.getSetting(`${this.authTokenPrefix}${serviceBaseURL}`);\n let headers = new HttpHeaders({\n 'Content-Type': contentType,\n 'Authorization': 'Bearer ' + authToken\n });\n const response = await new Promise(resolve => {\n this.apiService.getAsync(serviceBaseURL, requestUri, headers).then(res => {\n resolve(res);\n }, async err => {\n if (err.responseCode === 401) {\n const newAuthToken = await this.userbaseAuthStrategy.getAuthTokenAsync(serviceBaseURL);\n if (newAuthToken) {\n this.settingService.setSetting(`${this.authTokenPrefix}${serviceBaseURL}`, newAuthToken);\n headers = headers.set('Authorization', `Bearer ${newAuthToken}`);\n this.apiService.getAsync(serviceBaseURL, requestUri, headers).then(authedRes => {\n resolve(authedRes);\n }, async authedErr => {\n if (authedErr.responseCode === 401) {\n await this.currentUserService.loadCurrentUser();\n }\n resolve(authedErr);\n });\n } else {\n await this.currentUserService.loadCurrentUser();\n resolve(err);\n }\n } else {\n resolve(err);\n }\n });\n });\n return response;\n }\n async postAsync(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const authToken = this.settingService.getSetting(`${this.authTokenPrefix}${serviceBaseURL}`);\n let headers = new HttpHeaders({\n 'Content-Type': contentType,\n 'Authorization': 'Bearer ' + authToken\n });\n const response = await new Promise(resolve => {\n this.apiService.postAsync(serviceBaseURL, requestUri, headers, body).then(res => {\n resolve(res);\n }, async err => {\n if (err.responseCode === 401) {\n const newAuthToken = await this.userbaseAuthStrategy.getAuthTokenAsync(serviceBaseURL);\n if (newAuthToken) {\n this.settingService.setSetting(`${this.authTokenPrefix}${serviceBaseURL}`, newAuthToken);\n headers = headers.set('Authorization', `Bearer ${newAuthToken}`);\n this.apiService.postAsync(serviceBaseURL, requestUri, headers, body).then(authedRes => {\n resolve(authedRes);\n }, async authedErr => {\n if (authedErr.responseCode === 401) {\n await this.currentUserService.loadCurrentUser();\n }\n resolve(authedErr);\n });\n } else {\n await this.currentUserService.loadCurrentUser();\n resolve(err);\n }\n } else {\n resolve(err);\n }\n });\n });\n return response;\n }\n async putAsync(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const authToken = this.settingService.getSetting(`${this.authTokenPrefix}${serviceBaseURL}`);\n let headers = new HttpHeaders({\n 'Content-Type': contentType,\n 'Authorization': 'Bearer ' + authToken\n });\n const response = await new Promise(resolve => {\n this.apiService.putAsync(serviceBaseURL, requestUri, headers, body).then(res => {\n resolve(res);\n }, async err => {\n if (err.responseCode === 401) {\n const newAuthToken = await this.userbaseAuthStrategy.getAuthTokenAsync(serviceBaseURL);\n if (newAuthToken) {\n this.settingService.setSetting(`${this.authTokenPrefix}${serviceBaseURL}`, newAuthToken);\n headers = headers.set('Authorization', `Bearer ${newAuthToken}`);\n this.apiService.putAsync(serviceBaseURL, requestUri, headers, body).then(authedRes => {\n resolve(authedRes);\n }, async authedErr => {\n if (authedErr.responseCode === 401) {\n await this.currentUserService.loadCurrentUser();\n }\n resolve(authedErr);\n });\n } else {\n await this.currentUserService.loadCurrentUser();\n resolve(err);\n }\n } else {\n resolve(err);\n }\n });\n });\n return response;\n }\n async deleteAsync(serviceBaseURL, requestUri, contentType = 'application/json') {\n const authToken = this.settingService.getSetting(`${this.authTokenPrefix}${serviceBaseURL}`);\n let headers = new HttpHeaders({\n 'Content-Type': contentType,\n 'Authorization': 'Bearer ' + authToken\n });\n const response = await new Promise(resolve => {\n this.apiService.deleteAsync(serviceBaseURL, requestUri, headers).then(res => {\n resolve(res);\n }, async err => {\n if (err.responseCode === 401) {\n const newAuthToken = await this.userbaseAuthStrategy.getAuthTokenAsync(serviceBaseURL);\n if (newAuthToken) {\n this.settingService.setSetting(`${this.authTokenPrefix}${serviceBaseURL}`, newAuthToken);\n headers = headers.set('Authorization', `Bearer ${newAuthToken}`);\n this.apiService.deleteAsync(serviceBaseURL, requestUri, headers).then(authedRes => {\n resolve(authedRes);\n }, async authedErr => {\n if (authedErr.responseCode === 401) {\n await this.currentUserService.loadCurrentUser();\n }\n resolve(authedErr);\n });\n } else {\n await this.currentUserService.loadCurrentUser();\n resolve(err);\n }\n } else {\n resolve(err);\n }\n });\n });\n return response;\n }\n async getTypedAsync(serviceBaseURL, requestUri, contentType = 'application/json') {\n const response = await this.getAsync(serviceBaseURL, requestUri, contentType);\n return this.getResponse(response);\n }\n async postTypedAsync(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const response = await this.postAsync(serviceBaseURL, requestUri, body, contentType);\n return this.getResponse(response);\n }\n async putTypedAsync(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const response = await this.putAsync(serviceBaseURL, requestUri, body, contentType);\n return this.getResponse(response);\n }\n async getFileAsync(serviceBaseURL, requestUri, contentType = 'application/pdf') {\n const authToken = this.settingService.getSetting(`${this.authTokenPrefix}${serviceBaseURL}`);\n let headers = new HttpHeaders({\n 'Content-Type': contentType,\n 'Authorization': 'Bearer ' + authToken\n });\n const response = await new Promise(resolve => {\n this.apiService.getFileAsync(serviceBaseURL, requestUri, headers).then(res => {\n resolve(res);\n }, async err => {\n if (err.responseCode === 401) {\n const newAuthToken = await this.userbaseAuthStrategy.getAuthTokenAsync(serviceBaseURL);\n if (newAuthToken) {\n this.settingService.setSetting(`${this.authTokenPrefix}${serviceBaseURL}`, newAuthToken);\n headers = headers.set('Authorization', `Bearer ${newAuthToken}`);\n this.apiService.getFileAsync(serviceBaseURL, requestUri, headers).then(authedRes => {\n resolve(authedRes);\n }, authedErr => {\n resolve(authedErr);\n });\n } else {\n resolve(err);\n }\n } else {\n resolve(err);\n }\n });\n });\n return response;\n }\n getResponse(response) {\n if (response.responseCode === 200 || response.responseCode === 201 || response.responseCode === 204) {\n if (response.responseData == null || response.responseData == undefined) {\n return null;\n }\n return response.responseData;\n }\n if (response.responseCode === 400) {\n throw new Error(response.responseError);\n }\n if (response.responseCode === 401) {\n throw new Error(\"Unauthorised\");\n }\n throw new Error(\"Internal server error\");\n }\n //#endregion Promise functions\n //#region Observable functions\n getObservable(serviceBaseURL, requestUri, contentType = 'application/json') {\n const authTokenName = `${this.authTokenPrefix}${serviceBaseURL}`;\n const getRequest = headers => this.apiService.getObservable(serviceBaseURL, requestUri, headers);\n return getRequest(this.getHeaders(contentType, authTokenName)).pipe(catchError(error => iif(() => error.status === 401, this.unauthorisedFallback(serviceBaseURL, contentType, authTokenName, getRequest),\n //Refresh token and try again\n this.getDefaultError(error) // Non-401 error, return GenericAPIResponse with error messages\n )));\n }\n postObservable(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const authTokenName = `${this.authTokenPrefix}${serviceBaseURL}`;\n const postRequest = headers => this.apiService.postObservable(serviceBaseURL, requestUri, headers, body);\n return postRequest(this.getHeaders(contentType, authTokenName)).pipe(catchError(error => iif(() => error.status === 401, this.unauthorisedFallback(serviceBaseURL, contentType, authTokenName, postRequest),\n //Refresh token and try again\n this.getDefaultError(error) // Non-401 error, return GenericAPIResponse with error messages\n )));\n }\n putObservable(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const authTokenName = `${this.authTokenPrefix}${serviceBaseURL}`;\n const putRequest = headers => this.apiService.putObservable(serviceBaseURL, requestUri, headers, body);\n return putRequest(this.getHeaders(contentType, authTokenName)).pipe(catchError(error => iif(() => error.status === 401, this.unauthorisedFallback(serviceBaseURL, contentType, authTokenName, putRequest),\n //Refresh token and try again\n this.getDefaultError(error) // Non-401 error, return GenericAPIResponse with error messages\n )));\n }\n deleteObservable(serviceBaseURL, requestUri, contentType = 'application/json') {\n const authTokenName = `${this.authTokenPrefix}${serviceBaseURL}`;\n const deleteRequest = headers => this.apiService.deleteObservable(serviceBaseURL, requestUri, headers);\n return deleteRequest(this.getHeaders(contentType, authTokenName)).pipe(catchError(error => iif(() => error.status === 401, this.unauthorisedFallback(serviceBaseURL, contentType, authTokenName, deleteRequest),\n //Refresh token and try again\n this.getDefaultError(error) // Non-401 error, return GenericAPIResponse with error messages\n )));\n }\n //#region iFrame functions\n getAuthTokenForIFrame(baseUrl) {\n return this.apiService.postObservable(this.serverUrl, '/token', new HttpHeaders(), {\n grant_type: 'refresh_token',\n refresh_token: localStorage.getItem(this.refreshTokenName),\n client_id: baseUrl\n }).pipe(map(response => {\n if (!response?.responseData) {\n throw new Error('Unable to refresh access token');\n }\n let grant = response.responseData;\n switch (grant.resultCode) {\n case GrantResponse.Success:\n localStorage.setItem(`${this.authTokenPrefix}${baseUrl}`, grant.access_Token);\n localStorage.setItem(this.refreshTokenName, grant.refresh_Token);\n return grant.access_Token;\n default:\n let keys = Object.keys(localStorage).filter(key => {\n return key.indexOf(this.authTokenPrefix) !== -1;\n });\n for (let key of keys) {\n localStorage.removeItem(key);\n }\n return '';\n }\n }));\n }\n //#endregion iFrame functions\n //#endregion Observable functions\n //#region Support functions\n getHeaders(contentType, authTokenName, newAuthToken = null) {\n if (newAuthToken) {\n localStorage.setItem(authTokenName, newAuthToken);\n }\n const authToken = localStorage.getItem(authTokenName);\n return new HttpHeaders({\n 'Content-Type': contentType,\n 'Authorization': `Bearer ${authToken}`\n });\n }\n getDefaultError(error) {\n return of({\n responseCode: error.status,\n responseMessage: error.name,\n responseError: error.message\n });\n }\n unauthorisedFallback(serviceBaseURL, contentType, authTokenName, retryRequest) {\n return this.userbaseAuthStrategy.getAuthToken(serviceBaseURL).pipe(switchMap(newAuthToken => retryRequest(this.getHeaders(contentType, authTokenName, newAuthToken))));\n }\n static {\n this.ɵfac = function AuthenticatedService_Factory(t) {\n return new (t || AuthenticatedService)(i0.ɵɵinject(i1$1.APIService), i0.ɵɵinject(i1$1.StoredSettingService), i0.ɵɵinject(CurrentUserService), i0.ɵɵinject(UserbaseAuthStrategy), i0.ɵɵinject('AuthApiBaseUrl'), i0.ɵɵinject(V1UserbaseAuthStrategy), i0.ɵɵinject(AuthTokenPrefix), i0.ɵɵinject(RefreshTokenName));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AuthenticatedService,\n factory: AuthenticatedService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return AuthenticatedService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet UserService = /*#__PURE__*/(() => {\n class UserService {\n constructor(authenticatedService, http, apiBaseUrl, allowGuestUser) {\n this.authenticatedService = authenticatedService;\n this.http = http;\n this.apiBaseUrl = apiBaseUrl;\n this.allowGuestUser = allowGuestUser;\n if (this.allowGuestUser == null) {\n this.allowGuestUser = false;\n }\n }\n async getCurrentUserAsync() {\n let remoteData;\n const userResponse = await this.authenticatedService.getAsync(this.apiBaseUrl, 'api/User/CurrentUser', 'application/x-www-form-urlencoded');\n if (userResponse.responseData.id === '' || userResponse.responseData.id === undefined || this.allowGuestUser === false && userResponse.responseData.id === '00000000-0000-0000-0000-000000000000') {\n remoteData = null;\n } else {\n remoteData = userResponse.responseData;\n }\n return remoteData;\n }\n async getUserAsync(userId) {\n let remoteData;\n const userResponse = await this.authenticatedService.getAsync(this.apiBaseUrl, 'api/User/GetUser?Id=' + userId);\n if (userResponse.responseData.id === '' || userResponse.responseData.id === undefined || this.allowGuestUser === false && userResponse.responseData.id === '00000000-0000-0000-0000-000000000000') {\n remoteData = null;\n } else {\n remoteData = userResponse.responseData;\n }\n return remoteData;\n }\n async getUsers(userIds) {\n let remoteData;\n const userResponse = await this.authenticatedService.postAsync(this.apiBaseUrl, 'api/User/GetUsers', userIds);\n remoteData = userResponse.responseData;\n return remoteData;\n }\n async searchUsersByNameOrEmail(searchString) {\n const remoteData = [];\n const res = await this.authenticatedService.getAsync(this.apiBaseUrl, 'api/User/SearchUserSummaries?searchString=' + searchString);\n if (res.responseCode === 200) {\n return res.responseData;\n }\n return remoteData;\n }\n async getUsersFromRole(roleName) {\n const remoteData = [];\n const res = await this.authenticatedService.getAsync(this.apiBaseUrl, \"api/User/UsersFromRole/\" + roleName);\n if (res.responseCode === 200) {\n return res.responseData;\n }\n return remoteData;\n }\n async getUserDetailsAsync(userId) {\n let remoteData;\n const res = await this.authenticatedService.getAsync(this.apiBaseUrl, 'api/User/GetUser?Id=' + userId);\n if (res.responseData.id === '' || res.responseData.id === undefined || this.allowGuestUser === false && res.responseData.id === '00000000-0000-0000-0000-000000000000') {\n remoteData = null;\n } else {\n remoteData = res.responseData;\n }\n return remoteData;\n }\n getCurrentUserObservable() {\n return this.authenticatedService.getObservable(this.apiBaseUrl, 'api/user/currentuser', 'application/x-www-form-urlencoded').pipe(map(res => {\n if (res && res.responseData.id === '' || res?.responseData.id === undefined || !this.allowGuestUser && res.responseData.id === '00000000-0000-0000-0000-000000000000') {\n return null;\n } else {\n return res.responseData;\n }\n }));\n }\n getUserObservable(userId) {\n return this.authenticatedService.getObservable(this.apiBaseUrl, `api/user/getuser?Id=${userId}`).pipe(map(res => {\n if (res && res.responseData.id === '' || res?.responseData.id === undefined || !this.allowGuestUser && res.responseData.id === '00000000-0000-0000-0000-000000000000') {\n return null;\n } else {\n return res.responseData;\n }\n }));\n }\n async registerAsync(user) {\n try {\n let remoteData;\n const userResponse = await this.authenticatedService.postAsync(this.apiBaseUrl, 'api/Account/Register', user, 'application/json');\n if (userResponse.responseData.id === '' || userResponse.responseData.id === undefined || this.allowGuestUser === false && userResponse.responseData.id === '00000000-0000-0000-0000-000000000000') {\n remoteData = null;\n } else {\n remoteData = userResponse.responseData;\n }\n return remoteData;\n } catch (error) {\n return null;\n }\n }\n async updateUserAsync(user) {\n let remoteData;\n const userResponse = await this.authenticatedService.postAsync(this.apiBaseUrl, 'api/User/Update', user, 'application/json');\n if (userResponse.responseData.id === '' || userResponse.responseData.id === undefined || this.allowGuestUser === false && userResponse.responseData.id === '00000000-0000-0000-0000-000000000000') {\n remoteData = null;\n } else {\n remoteData = userResponse.responseData;\n }\n return remoteData;\n }\n async updateUserDetailsAsync(user) {\n let remoteData;\n const userResponse = await this.authenticatedService.postAsync(this.apiBaseUrl, 'api/User/UpdateUserDetails', user, 'application/json');\n if (userResponse.responseData.id === '' || userResponse.responseData.id === undefined || this.allowGuestUser === false && userResponse.responseData.id === '00000000-0000-0000-0000-000000000000') {\n remoteData = null;\n } else {\n remoteData = userResponse.responseData;\n }\n return remoteData;\n }\n async addRoleToUser(userId, roleId) {\n let _userRole = new UserRoleDto();\n _userRole.userId = userId;\n _userRole.roleId = roleId;\n let valid = await this.authenticatedService.postAsync(this.apiBaseUrl, 'api/User/AddRoleToUser', _userRole);\n return valid.responseCode == 200;\n }\n async removeRoleFromUser(userId, roleId) {\n let _userRole = new UserRoleDto();\n _userRole.userId = userId;\n _userRole.roleId = roleId;\n let valid = await this.authenticatedService.postAsync(this.apiBaseUrl, 'api/User/RemoveRoleFromUser', _userRole);\n return valid.responseCode == 200;\n }\n async isEmailValid(emailAddress, userId) {\n let _email = new ValidEmailCheck();\n _email.emailAddress = emailAddress;\n _email.userId = userId;\n let valid = await this.authenticatedService.postTypedAsync(this.apiBaseUrl, 'api/User/IsEmailValid', _email);\n return valid;\n }\n async uploadSignatureImage(userId, signatureImage) {\n let _path = \"\";\n let formData = new FormData();\n formData.append('Image', signatureImage, signatureImage.name);\n formData.append('UserId', userId);\n let headers = new HttpHeaders();\n /** In Angular 5, including the header Content-Type can invalidate your request */\n headers.append('Content-Type', 'multipart/form-data');\n headers.append('Accept', 'application/json');\n let options = {\n headers: headers\n };\n lastValueFrom(this.http.post(this.apiBaseUrl + 'api/User/UploadSignatureImage', formData, options)).then(res => {\n let responseObj = res;\n console.log(responseObj);\n console.log(responseObj.body ? responseObj.body : res);\n _path = (responseObj.body ? responseObj.body : responseObj).toString();\n }, err => {\n _path = \"\";\n });\n return _path;\n }\n static {\n this.ɵfac = function UserService_Factory(t) {\n return new (t || UserService)(i0.ɵɵinject(AuthenticatedService), i0.ɵɵinject(i2$1.HttpClient), i0.ɵɵinject('UserApiBaseUrl'), i0.ɵɵinject('AllowGuestUser', 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: UserService,\n factory: UserService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return UserService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AuthenticationService = /*#__PURE__*/(() => {\n class AuthenticationService {\n constructor(easyXDMService, serverURL, loginURL, loginGuestURL, registerUrl, storedSettingService, authenticatedService, currentUserService, authRedirectUrl, router, apiService, serverUrl, userBaseAuthStrategy, authTokenPrefix, refreshTokenName) {\n this.easyXDMService = easyXDMService;\n this.serverURL = serverURL;\n this.loginURL = loginURL;\n this.loginGuestURL = loginGuestURL;\n this.registerUrl = registerUrl;\n this.storedSettingService = storedSettingService;\n this.authenticatedService = authenticatedService;\n this.currentUserService = currentUserService;\n this.authRedirectUrl = authRedirectUrl;\n this.router = router;\n this.apiService = apiService;\n this.serverUrl = serverUrl;\n this.userBaseAuthStrategy = userBaseAuthStrategy;\n this.authTokenPrefix = authTokenPrefix;\n this.refreshTokenName = refreshTokenName;\n }\n // Only for Backwards Compatibility V1\n async getAuthTokenAsync(baseUrl) {\n const returnString = await this.easyXDMService.MsgPromise(this.serverUrl, baseUrl, 'DistLogin');\n return returnString;\n }\n login(loginFormContainer) {\n let remoteData;\n remoteData = new Observable(observer => {\n this.easyXDMService.IFrameObservable(this.loginURL, loginFormContainer, '400px', '450px', 'CheckoutLogin').subscribe(value => {\n observer.next(value);\n observer.complete();\n });\n });\n return remoteData;\n }\n logOut() {\n let remoteData;\n remoteData = new Observable(observer => {\n this.easyXDMService.MsgObservable(this.serverURL, 'Logout', 'CheckoutLogin').subscribe(value => {\n this.clearAuthTokens();\n observer.next(true);\n observer.complete();\n });\n });\n return remoteData;\n }\n setRoleLinkId(roleLinkId) {\n let remoteData;\n remoteData = new Observable(observer => {\n this.easyXDMService.MsgObservable(this.serverURL, 'SetRoleLinkId:' + roleLinkId, 'CheckoutLogin').subscribe(value => {\n this.clearAuthTokens();\n observer.next(true);\n observer.complete();\n });\n });\n return remoteData;\n }\n getRoleLinkId() {\n let remoteData;\n remoteData = new Observable(observer => {\n this.easyXDMService.MsgObservable(this.serverURL, 'GetRoleLinkId', 'CheckoutLogin').subscribe(value => {\n this.clearAuthTokens();\n observer.next(value);\n observer.complete();\n });\n });\n return remoteData;\n }\n async loginAsync(loginFormContainer) {\n const returnString = await this.easyXDMService.IFramePromise(this.loginURL, loginFormContainer, '100%', '460px', 'CheckoutLogin');\n return returnString;\n }\n async registerAsync(registerFormContainer) {\n const returnString = await this.easyXDMService.IFramePromise(this.registerUrl, registerFormContainer, '355px', '465px', 'CheckoutLogin');\n return returnString;\n }\n async loginGuestAsync(guestLoginFormContainer) {\n const returnString = await this.easyXDMService.IFramePromise(this.loginGuestURL, guestLoginFormContainer, '240px', '45px', 'CheckoutLogin');\n return returnString;\n }\n async logOutAsync() {\n this.clearAuthTokens();\n await this.easyXDMService.MsgPromise(this.serverURL, 'Logout', 'CheckoutLogin');\n return true;\n }\n async loginGuestBackgroundAsync() {\n this.clearAuthTokens();\n await this.easyXDMService.MsgPromise(this.serverURL, 'GuestLogin', 'DistLogin');\n return true;\n }\n async setRoleLinkIdAsync(roleLinkId) {\n this.clearAuthTokens();\n await this.easyXDMService.MsgPromise(this.serverURL, 'SetRoleLinkId:' + roleLinkId, 'CheckoutLogin');\n return true;\n }\n async getRoleLinkIdAsync() {\n this.clearAuthTokens();\n let _roleLinkId = await this.easyXDMService.MsgPromise(this.serverURL, 'GetRoleLinkId', 'CheckoutLogin');\n return _roleLinkId;\n }\n clearAuthTokens() {\n let keys = Object.keys(localStorage).filter(key => {\n return key.indexOf(this.authTokenPrefix) !== -1;\n });\n for (let key of keys) {\n localStorage.removeItem(key);\n }\n }\n clearRefreshToken() {\n let keys = Object.keys(localStorage).filter(key => {\n return key.indexOf(this.refreshTokenName) !== -1;\n });\n for (let key of keys) {\n localStorage.removeItem(key);\n }\n }\n //#region V2 \n logout() {\n return this.authenticatedService.postObservable(this.serverURL, '/api/user/logout', null).pipe(map(response => {\n return response?.responseCode;\n }));\n }\n async init(activatedRouteSnapshot, routerSnapshot) {\n const urlTree = this.parseIncomingAuthTokens(activatedRouteSnapshot, routerSnapshot);\n if (urlTree) {\n return urlTree;\n }\n await this.currentUserService.loadCurrentUser();\n const currentUser = this.currentUserService.getCurrentUser();\n if (!currentUser.user) {\n window.location.href = `${this.authRedirectUrl}?returnUrl=${encodeURI(location.origin)}${encodeURIComponent(routerSnapshot.url)}`;\n // Maybe make a page that says \"redirecting\" or something\n return this.router.createUrlTree(['']);\n }\n return null;\n }\n parseIncomingAuthTokens(activatedRouteSnapshot, routerSnapshot) {\n let authToken = routerSnapshot.root.queryParams['auth'];\n let refreshToken = routerSnapshot.root.queryParams['refresh'];\n if (authToken) {\n localStorage.setItem(`${this.authTokenPrefix}${location.origin}`, authToken);\n }\n if (refreshToken) {\n localStorage.setItem(this.refreshTokenName, refreshToken);\n }\n const filterKeys = ['auth', 'refresh'];\n const keysToRemove = [];\n filterKeys.forEach(key => {\n activatedRouteSnapshot.root.queryParams[key] && keysToRemove.push(key);\n });\n if (keysToRemove.length) {\n return this.removeParamsFromUrl(activatedRouteSnapshot, routerSnapshot, keysToRemove);\n } else {\n return null;\n }\n }\n removeParamsFromUrl(activatedRouteSnapshot, routerSnapshot, keysToRemove) {\n const queryParams = {};\n const keysToKeep = [];\n Object.entries(activatedRouteSnapshot.root.queryParams).forEach(([key, value]) => {\n if (!keysToRemove.includes(key)) {\n keysToKeep.push(key);\n }\n });\n keysToKeep.forEach(key => {\n queryParams[key] = activatedRouteSnapshot.root.queryParams[key];\n });\n let url = routerSnapshot.url;\n if (url.includes('?')) {\n url = url.substring(0, url.indexOf('?'));\n }\n return this.router.createUrlTree([url], {\n queryParams\n });\n }\n //#endregion\n //#region V2 Backwards Compatibility\n loginAsGuest() {\n const headers = new HttpHeaders().append('Content-Type', 'application/json');\n return this.apiService.postObservable(this.serverURL, '/token', headers, {\n grant_type: 'password',\n username: 'Guestuser'\n }).pipe(map(response => {\n if (!response) {\n throw 'Unable to login as guest';\n }\n const grant = response.responseData;\n localStorage.setItem(this.authTokenPrefix, grant.access_Token);\n localStorage.setItem(this.refreshTokenName, grant.refresh_Token);\n localStorage.setItem('authLoginId', grant.remoteLoginId);\n }));\n }\n remoteLogin(remoteLoginId) {\n const headers = new HttpHeaders().append('Content-Type', 'application/json');\n return this.apiService.postObservable(this.serverURL, '/token', headers, {\n grant_type: 'password',\n remoteLogin_id: remoteLoginId\n }).pipe(map(response => {\n if (!response) {\n throw 'Unable to login as guest';\n }\n const grant = response.responseData;\n localStorage.setItem(this.authTokenPrefix, grant.access_Token);\n localStorage.setItem(this.refreshTokenName, grant.refresh_Token);\n localStorage.setItem('authLoginId', grant.remoteLoginId);\n return true;\n })).pipe(catchError(_ => {\n localStorage.removeItem(this.authTokenPrefix);\n localStorage.removeItem(this.refreshTokenName);\n return of(false);\n }));\n }\n static {\n this.ɵfac = function AuthenticationService_Factory(t) {\n return new (t || AuthenticationService)(i0.ɵɵinject(i1$1.EasyXDMService), i0.ɵɵinject('AuthApiBaseUrl'), i0.ɵɵinject('LoginPageUrl'), i0.ɵɵinject('LoginGuestPageUrl'), i0.ɵɵinject('RegisterPageUrl'), i0.ɵɵinject(i1$1.StoredSettingService), i0.ɵɵinject(AuthenticatedService), i0.ɵɵinject(CurrentUserService), i0.ɵɵinject(\"AuthRedirectUrl\"), i0.ɵɵinject(i2.Router), i0.ɵɵinject(i1$1.APIService), i0.ɵɵinject('AuthApiBaseUrl'), i0.ɵɵinject(UserbaseAuthStrategy), i0.ɵɵinject(AuthTokenPrefix), i0.ɵɵinject(RefreshTokenName));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AuthenticationService,\n factory: AuthenticationService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return AuthenticationService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet LoginComponent = /*#__PURE__*/(() => {\n class LoginComponent {\n constructor(currentUserService, userService, authService, platformId) {\n this.currentUserService = currentUserService;\n this.userService = userService;\n this.authService = authService;\n this.platformId = platformId;\n }\n ngOnInit() {\n this.getCurrentUser();\n }\n ngAfterViewInit() {\n this.showLogin();\n }\n async getCurrentUser() {\n try {\n this.currentUserService.loadCurrentUser();\n } catch (error) {\n await this.authService.logOutAsync();\n this.currentUserService.loadCurrentUser();\n }\n }\n async showLogin() {\n try {\n if (this.platformId.isBrowser) {\n const res = await this.authService.loginAsync('highfieldauth-authenticationLogin');\n }\n this.getCurrentUser();\n } catch (err) {\n console.log(err);\n }\n }\n static {\n this.ɵfac = function LoginComponent_Factory(t) {\n return new (t || LoginComponent)(i0.ɵɵdirectiveInject(CurrentUserService), i0.ɵɵdirectiveInject(UserService), i0.ɵɵdirectiveInject(AuthenticationService), i0.ɵɵdirectiveInject(i1.Platform));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: LoginComponent,\n selectors: [[\"highfieldauth-login-page\"]],\n decls: 1,\n vars: 0,\n consts: [[\"id\", \"highfieldauth-authenticationLogin\"]],\n template: function LoginComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n },\n encapsulation: 2\n });\n }\n }\n return LoginComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GuestLoginComponent = /*#__PURE__*/(() => {\n class GuestLoginComponent {\n constructor(currentUserService, userService, authService) {\n this.currentUserService = currentUserService;\n this.userService = userService;\n this.authService = authService;\n }\n ngOnInit() {\n this.getCurrentUser();\n }\n ngAfterViewInit() {\n this.showLogin();\n }\n async getCurrentUser() {\n try {\n const user = await this.userService.getCurrentUserAsync();\n this.currentUserService.setCurrentUser(user);\n } catch (error) {\n this.currentUserService.setCurrentUser(null);\n }\n }\n async showLogin() {\n try {\n const res = await this.authService.loginGuestAsync('highfieldauth-authenticationGuestLogin');\n this.getCurrentUser();\n } catch (err) {\n console.log(err);\n }\n }\n static {\n this.ɵfac = function GuestLoginComponent_Factory(t) {\n return new (t || GuestLoginComponent)(i0.ɵɵdirectiveInject(CurrentUserService), i0.ɵɵdirectiveInject(UserService), i0.ɵɵdirectiveInject(AuthenticationService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: GuestLoginComponent,\n selectors: [[\"highfieldauth-guest-login-page\"]],\n decls: 1,\n vars: 0,\n consts: [[\"id\", \"highfieldauth-authenticationGuestLogin\"]],\n template: function GuestLoginComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n },\n encapsulation: 2\n });\n }\n }\n return GuestLoginComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet RegisterComponent = /*#__PURE__*/(() => {\n class RegisterComponent {\n constructor(currentUserService, userService, authService) {\n this.currentUserService = currentUserService;\n this.userService = userService;\n this.authService = authService;\n }\n ngOnInit() {\n this.getCurrentUser();\n }\n ngAfterViewInit() {\n this.showRegistration();\n }\n async getCurrentUser() {\n try {\n const user = await this.userService.getCurrentUserAsync();\n this.currentUserService.setCurrentUser(user);\n } catch (error) {\n this.currentUserService.setCurrentUser(null);\n }\n }\n async showRegistration() {\n try {\n const res = await this.authService.registerAsync('highfieldauth-authenticationRegister');\n this.getCurrentUser();\n } catch (err) {\n console.log(err);\n }\n }\n static {\n this.ɵfac = function RegisterComponent_Factory(t) {\n return new (t || RegisterComponent)(i0.ɵɵdirectiveInject(CurrentUserService), i0.ɵɵdirectiveInject(UserService), i0.ɵɵdirectiveInject(AuthenticationService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: RegisterComponent,\n selectors: [[\"highfieldauth-register-page\"]],\n decls: 1,\n vars: 0,\n consts: [[\"id\", \"highfieldauth-authenticationRegister\"]],\n template: function RegisterComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n },\n encapsulation: 2\n });\n }\n }\n return RegisterComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AngularHighfieldauthModule = /*#__PURE__*/(() => {\n class AngularHighfieldauthModule {\n static forRoot() {\n return {\n ngModule: AngularHighfieldauthModule\n };\n }\n static {\n this.ɵfac = function AngularHighfieldauthModule_Factory(t) {\n return new (t || AngularHighfieldauthModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: AngularHighfieldauthModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule]\n });\n }\n }\n return AngularHighfieldauthModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass User {\n constructor(id, userName, hasPassword, securityStamp, email, emailConfirmed, firstName, lastName, roles) {\n this.id = id;\n this.userName = userName;\n this.hasPassword = hasPassword;\n this.securityStamp = securityStamp;\n this.email = email;\n this.emailConfirmed = emailConfirmed;\n this.firstName = firstName;\n this.lastName = lastName;\n this.roles = roles;\n }\n hasRole(role) {\n if (Array.isArray(this.roles)) {\n return this.roles.indexOf(role) > -1;\n } else {\n return this.roles == role;\n }\n }\n}\nclass Role {\n constructor(id, name, description) {\n this.emailOnAssignment = false;\n this.userRole = false;\n this.centreRole = false;\n this.systemRole = false;\n this.tasklistRole = false;\n this.id = id;\n this.name = name;\n this.description = description;\n }\n}\nclass NewUser {}\nclass UserDetails {\n constructor(id, userName, email, firstName, lastName, dateOfBirth, address1, address2, town, countyID, postCode, telephone, mobile, vehicleRegistration) {\n this.id = id;\n this.userName = userName;\n this.email = email;\n this.firstName = firstName;\n this.lastName = lastName;\n this.dateOfBirth = dateOfBirth;\n this.address1 = address1;\n this.address2 = address2;\n this.town = town;\n this.countyID = countyID;\n this.postCode = postCode;\n this.telephone = telephone;\n this.mobile = mobile;\n this.vehicleRegistration = vehicleRegistration;\n }\n}\nlet AuthGuardService = /*#__PURE__*/(() => {\n class AuthGuardService {\n constructor(router, currentUserService, authenticatedFailedRedirect, authorisedFailedRedirect) {\n this.router = router;\n this.currentUserService = currentUserService;\n this.authenticatedFailedRedirect = authenticatedFailedRedirect;\n this.authorisedFailedRedirect = authorisedFailedRedirect;\n }\n canActivate(route, state) {\n let currentUser = this.currentUserService.getCurrentUser();\n if (currentUser.user) {\n var hasPermission = this.hasRequiredPermission(route, currentUser);\n if (hasPermission) {\n return true;\n } else {\n this.router.navigate([this.authorisedFailedRedirect], {\n queryParams: {\n returnUrl: state.url\n }\n });\n return false;\n }\n }\n this.router.navigate([this.authenticatedFailedRedirect], {\n queryParams: {\n returnUrl: state.url\n }\n });\n return false;\n }\n hasRequiredPermission(routeData, currentUser) {\n let authRoles = routeData.data['auth'];\n let hasPermissions = false;\n // If no specified roles, then it's an open page, let anyone through. \n if (!authRoles) {\n return true;\n }\n if (Array.isArray(authRoles)) {\n for (let role of authRoles) {\n if (currentUser.user?.hasRole(role)) {\n hasPermissions = true;\n break;\n }\n }\n } else {\n hasPermissions = currentUser.user?.hasRole(authRoles);\n }\n return hasPermissions;\n }\n static {\n this.ɵfac = function AuthGuardService_Factory(t) {\n return new (t || AuthGuardService)(i0.ɵɵinject(i2.Router), i0.ɵɵinject(CurrentUserService), i0.ɵɵinject('AuthenticatedCheckFailURL'), i0.ɵɵinject('AuthorisedCheckFailURL'));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AuthGuardService,\n factory: AuthGuardService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return AuthGuardService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet RoleService = /*#__PURE__*/(() => {\n class RoleService {\n constructor(authenticatedService, apiBaseUrl, allowGuestUser) {\n this.authenticatedService = authenticatedService;\n this.apiBaseUrl = apiBaseUrl;\n this.allowGuestUser = allowGuestUser;\n if (this.allowGuestUser == null) {\n this.allowGuestUser = false;\n }\n }\n async getRolesAsync() {\n let remoteData = [];\n const res = await this.authenticatedService.getAsync(this.apiBaseUrl, 'api/Roles/GetRoles');\n if (res.responseCode === 200) {\n remoteData = res.responseData;\n }\n return remoteData;\n }\n async getRoleAsync(roleId) {\n let remoteData = null;\n const res = await this.authenticatedService.getAsync(this.apiBaseUrl, 'api/Roles/GetRole?Id=' + roleId);\n if (res.responseData.id === '' || res.responseData.id === undefined || this.allowGuestUser === false && res.responseData.id === '00000000-0000-0000-0000-000000000000') {\n remoteData = null;\n } else {\n remoteData = res.responseData;\n }\n return remoteData;\n }\n async getRolesForUserAsync(userId) {\n let remoteData = [];\n const res = await this.authenticatedService.getAsync(this.apiBaseUrl, 'api/Roles/GetRolesForUser?userId=' + userId);\n if (res.responseCode === 200) {\n remoteData = res.responseData;\n }\n return remoteData;\n }\n async getRolesBasedOnCondition(conditions) {\n let roles = await this.authenticatedService.postTypedAsync(this.apiBaseUrl, '/api/Roles/GetRolesBasedOnCondition', conditions);\n return roles ?? [];\n }\n static {\n this.ɵfac = function RoleService_Factory(t) {\n return new (t || RoleService)(i0.ɵɵinject(AuthenticatedService), i0.ɵɵinject('UserApiBaseUrl'), i0.ɵɵinject('AllowGuestUser', 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: RoleService,\n factory: RoleService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return RoleService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass GetRolesByConditionRequestModel {\n constructor(markingRole, centreRole, systemRole, taskListRole, userRole) {\n this.markingRole = markingRole;\n this.centreRole = centreRole;\n this.systemRole = systemRole;\n this.taskListRole = taskListRole;\n this.userRole = userRole;\n }\n}\nlet V2UserbaseAuthStrategy = /*#__PURE__*/(() => {\n class V2UserbaseAuthStrategy extends BaseUserbaseAuthStrategy {\n constructor(easyXDMService, apiService, serverUrl, authTokenPrefix, refreshTokenName) {\n super(easyXDMService, serverUrl);\n this.easyXDMService = easyXDMService;\n this.apiService = apiService;\n this.serverUrl = serverUrl;\n this.authTokenPrefix = authTokenPrefix;\n this.refreshTokenName = refreshTokenName;\n }\n async getTokenForCurrentUser(baseUrl) {\n return new Promise(resolve => {\n resolve(localStorage.getItem(`${this.authTokenPrefix}${location.origin}`));\n });\n }\n getAuthToken(baseUrl) {\n return this.apiService.postObservable(this.serverUrl, '/token', new HttpHeaders(), {\n grant_type: 'refresh_token',\n refresh_token: localStorage.getItem(this.refreshTokenName),\n client_id: baseUrl\n }).pipe(map$1(response => {\n if (!response?.responseData) {\n throw new Error('Unable to refresh access token');\n }\n let grant = response.responseData;\n switch (grant.resultCode) {\n case GrantResponse.Success:\n localStorage.setItem(`${this.authTokenPrefix}${baseUrl}`, grant.access_Token);\n localStorage.setItem(this.refreshTokenName, grant.refresh_Token);\n return grant.access_Token;\n default:\n localStorage.clear();\n throw new Error(`Unable to refresh access token - ${grant.resultMessage}`);\n }\n }));\n }\n static {\n this.ɵfac = function V2UserbaseAuthStrategy_Factory(t) {\n return new (t || V2UserbaseAuthStrategy)(i0.ɵɵinject(i1$1.EasyXDMService), i0.ɵɵinject(i1$1.APIService), i0.ɵɵinject('AuthApiBaseUrl'), i0.ɵɵinject(AuthTokenPrefix), i0.ɵɵinject(RefreshTokenName));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: V2UserbaseAuthStrategy,\n factory: V2UserbaseAuthStrategy.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return V2UserbaseAuthStrategy;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/*\n * Public API Surface of angular-highfieldauth\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AngularHighfieldauthModule, AuthCheckComponent, AuthGuardService, AuthTokenPrefix, AuthenticatedService, AuthenticationService, CurrentUser, CurrentUserService, GetRolesByConditionRequestModel, GuestLoginComponent, LoginComponent, LoginUser, NewUser, RefreshTokenName, RegisterComponent, Role, RoleService, User, UserDetails, UserRoleDto, UserService, UserbaseAuthStrategy, V1AuthTokenPrefix, V1RefreshTokenName, V1UserbaseAuthStrategy, V2AuthTokenPrefix, V2RefreshTokenName, V2UserbaseAuthStrategy, ValidEmailCheck };\n","import * as i0 from '@angular/core';\nimport { Injectable, Directive, HostListener, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\nimport { DefaultUrlSerializer } from '@angular/router';\nimport moment from 'moment';\nlet WindowRef = /*#__PURE__*/(() => {\n class WindowRef {\n getNativeWindow() {\n return window;\n }\n static {\n this.ɵfac = function WindowRef_Factory(t) {\n return new (t || WindowRef)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: WindowRef,\n factory: WindowRef.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return WindowRef;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ScreenSizeService = /*#__PURE__*/(() => {\n class ScreenSizeService {\n constructor(windowRef) {\n this.screenBreaks = [1200, 992, 768, 0];\n this.screenBreakNames = ['lg', 'md', 'sm', 'xs'];\n this.currentScreenBreak = '';\n let initialScreenWidth = windowRef.getNativeWindow().innerWidth;\n let initialScreenSize = this.getScreenSize(initialScreenWidth);\n this.screenBreakSubject = new BehaviorSubject(initialScreenSize);\n }\n setScreenSize(screenWidth) {\n let screenSize = this.getScreenSize(screenWidth);\n this.screenBreakSubject.next(screenSize);\n }\n screenSizeObservable() {\n return this.screenBreakSubject;\n }\n getScreenSize(screenWidth) {\n for (let i = 0; i < this.screenBreaks.length; i++) {\n if (screenWidth >= this.screenBreaks[i]) {\n if (this.screenBreakNames[i] !== this.currentScreenBreak) {\n this.currentScreenBreak = this.screenBreakNames[i];\n return this.currentScreenBreak;\n }\n break;\n }\n }\n return this.currentScreenBreak;\n }\n static {\n this.ɵfac = function ScreenSizeService_Factory(t) {\n return new (t || ScreenSizeService)(i0.ɵɵinject(WindowRef));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ScreenSizeService,\n factory: ScreenSizeService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return ScreenSizeService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ScreenSizeDirective = /*#__PURE__*/(() => {\n class ScreenSizeDirective {\n constructor(screenSizeService) {\n this.screenSizeService = screenSizeService;\n }\n onResize() {\n this.screenSizeService.setScreenSize(innerWidth);\n }\n static {\n this.ɵfac = function ScreenSizeDirective_Factory(t) {\n return new (t || ScreenSizeDirective)(i0.ɵɵdirectiveInject(ScreenSizeService));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ScreenSizeDirective,\n selectors: [[\"\", \"highfieldcommonScreenSizeDirective\", \"\"]],\n hostBindings: function ScreenSizeDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"resize\", function ScreenSizeDirective_resize_HostBindingHandler($event) {\n return ctx.onResize($event);\n }, false, i0.ɵɵresolveWindow);\n }\n }\n });\n }\n }\n return ScreenSizeDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AngularHighfieldcommonModule = /*#__PURE__*/(() => {\n class AngularHighfieldcommonModule {\n static forRoot() {\n return {\n ngModule: AngularHighfieldcommonModule\n };\n }\n static {\n this.ɵfac = function AngularHighfieldcommonModule_Factory(t) {\n return new (t || AngularHighfieldcommonModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: AngularHighfieldcommonModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule, FormsModule, CommonModule, FormsModule]\n });\n }\n }\n return AngularHighfieldcommonModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar MessageSeverityEnum = /*#__PURE__*/function (MessageSeverityEnum) {\n MessageSeverityEnum[MessageSeverityEnum[\"success\"] = 1] = \"success\";\n MessageSeverityEnum[MessageSeverityEnum[\"info\"] = 2] = \"info\";\n MessageSeverityEnum[MessageSeverityEnum[\"warning\"] = 3] = \"warning\";\n MessageSeverityEnum[MessageSeverityEnum[\"error\"] = 4] = \"error\";\n return MessageSeverityEnum;\n}(MessageSeverityEnum || {});\nvar MessageTypeEnum = /*#__PURE__*/function (MessageTypeEnum) {\n MessageTypeEnum[MessageTypeEnum[\"message\"] = 1] = \"message\";\n MessageTypeEnum[MessageTypeEnum[\"alert\"] = 2] = \"alert\";\n return MessageTypeEnum;\n}(MessageTypeEnum || {});\nclass LowerCaseUrlSerializer extends DefaultUrlSerializer {\n parse(url) {\n return super.parse(url.toLowerCase());\n }\n}\nclass UpperCaseUrlSerializer extends DefaultUrlSerializer {\n parse(url) {\n return super.parse(url.toUpperCase());\n }\n}\nlet DateTimeService = /*#__PURE__*/(() => {\n class DateTimeService {\n constructor() {\n this.dateFormat = \"DD/MM/YYYY\";\n this.timeFormat = \"HH:mm:ss\";\n }\n getLocalDateTime() {\n let utc = this.getMomentUtc();\n return moment(utc).local().toDate();\n }\n getUtcDate() {\n return this.getMomentUtc().toDate();\n }\n getDateOnlyFromDateTime(date) {\n return moment(date).format(this.dateFormat).toString();\n }\n convertUtcToLocalString(utcDate, dateOnly = false) {\n return moment(utcDate).local().format(dateOnly ? this.dateFormat : `${this.dateFormat} ${this.timeFormat}`);\n }\n convertUtcToFormattedLocalString(utcDate, customDateFormat) {\n return moment(utcDate).local().format(`${customDateFormat}`);\n }\n getMomentUtc() {\n return moment.utc();\n }\n static {\n this.ɵfac = function DateTimeService_Factory(t) {\n return new (t || DateTimeService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DateTimeService,\n factory: DateTimeService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return DateTimeService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MessageService = /*#__PURE__*/(() => {\n class MessageService {\n constructor() {\n this.messages = new BehaviorSubject([]);\n }\n messagesObservable() {\n return this.messages;\n }\n showMessages(messages) {\n this.clearMessages();\n this.messages.next(messages);\n }\n showMessage(message) {\n this.clearMessages();\n this.messages.next([message]);\n }\n clearMessages() {\n this.messages.next([]);\n }\n getServerity(alertType) {\n switch (alertType) {\n case MessageSeverityEnum.success:\n return \"success\";\n case MessageSeverityEnum.info:\n return \"info\";\n case MessageSeverityEnum.warning:\n return \"warn\";\n case MessageSeverityEnum.error:\n return \"error\";\n default:\n throw new Error(\"Alert type is not implemented.\");\n }\n }\n static {\n this.ɵfac = function MessageService_Factory(t) {\n return new (t || MessageService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MessageService,\n factory: MessageService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return MessageService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/*\n * Public API Surface of angular-highfieldcommon\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AngularHighfieldcommonModule, DateTimeService, LowerCaseUrlSerializer, MessageService, MessageSeverityEnum, MessageTypeEnum, ScreenSizeDirective, ScreenSizeService, UpperCaseUrlSerializer, WindowRef };\n","import * as i0 from '@angular/core';\nimport { Injectable, EventEmitter, Component, ViewEncapsulation, Input, Output, Inject, NgModule } from '@angular/core';\nimport * as i2 from '@angular/router';\nimport { NavigationStart, NavigationEnd } from '@angular/router';\nimport { BehaviorSubject } from 'rxjs';\nimport * as i1 from '@highfieldabc/angular-highfieldauth';\nimport { AngularHighfieldauthModule } from '@highfieldabc/angular-highfieldauth';\nimport * as i4 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i1$1 from '@highfieldabc/angular-highfieldwebapi';\nimport { AngularHighfieldwebapiModule } from '@highfieldabc/angular-highfieldwebapi';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport * as i1$2 from '@highfieldabc/angular-highfieldcommon';\nimport { AngularHighfieldcommonModule } from '@highfieldabc/angular-highfieldcommon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nfunction AuthenticationComponent_li_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r3 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"li\")(1, \"a\", 6);\n i0.ɵɵlistener(\"click\", function AuthenticationComponent_li_5_Template_a_click_1_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r3);\n const profileMenuOption_r1 = restoredCtx.$implicit;\n return i0.ɵɵresetView(profileMenuOption_r1.action());\n });\n i0.ɵɵelement(2, \"i\");\n i0.ɵɵtext(3);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const profileMenuOption_r1 = ctx.$implicit;\n i0.ɵɵadvance(2);\n i0.ɵɵclassMap(profileMenuOption_r1.icon);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \\xA0 \", profileMenuOption_r1.label, \"\");\n }\n}\nfunction AdminContainerComponent_ng_container_5_li_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r7 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"li\", 22);\n i0.ɵɵlistener(\"click\", function AdminContainerComponent_ng_container_5_li_1_Template_li_click_0_listener() {\n i0.ɵɵrestoreView(_r7);\n const menuSet_r3 = i0.ɵɵnextContext().$implicit;\n const ctx_r5 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r5.setCurrentMenuSet(menuSet_r3));\n });\n i0.ɵɵelementStart(1, \"a\", 23);\n i0.ɵɵelement(2, \"i\");\n i0.ɵɵtext(3, \"\\xA0\");\n i0.ɵɵelementStart(4, \"span\");\n i0.ɵɵtext(5);\n i0.ɵɵelementEnd()()();\n }\n if (rf & 2) {\n const menuSet_r3 = i0.ɵɵnextContext().$implicit;\n const ctx_r4 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"ngClass\", ctx_r4.getMenuSetClass(menuSet_r3));\n i0.ɵɵadvance(2);\n i0.ɵɵclassMap(menuSet_r3.iconClass);\n i0.ɵɵadvance(3);\n i0.ɵɵtextInterpolate(menuSet_r3.name);\n }\n}\nfunction AdminContainerComponent_ng_container_5_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtemplate(1, AdminContainerComponent_ng_container_5_li_1_Template, 6, 4, \"li\", 21);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const menuSet_r3 = ctx.$implicit;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r0.validateRole(menuSet_r3));\n }\n}\nfunction AdminContainerComponent_ng_container_18_li_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r13 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"li\", 25);\n i0.ɵɵlistener(\"click\", function AdminContainerComponent_ng_container_18_li_1_Template_li_click_0_listener() {\n i0.ɵɵrestoreView(_r13);\n const topMenuItem_r9 = i0.ɵɵnextContext().$implicit;\n const ctx_r11 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r11.setCurrentTopMenuItem(topMenuItem_r9));\n });\n i0.ɵɵelementStart(1, \"a\", 26);\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const topMenuItem_r9 = i0.ɵɵnextContext().$implicit;\n const ctx_r10 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"ngClass\", ctx_r10.getTopMenuItemClass(topMenuItem_r9));\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate(topMenuItem_r9.name);\n }\n}\nfunction AdminContainerComponent_ng_container_18_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtemplate(1, AdminContainerComponent_ng_container_18_li_1_Template, 3, 2, \"li\", 24);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const topMenuItem_r9 = ctx.$implicit;\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.validateRole(topMenuItem_r9));\n }\n}\nfunction AdminContainerComponent_div_25_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 27)(1, \"div\", 28)(2, \"span\", 29);\n i0.ɵɵtext(3, \"Loading...\");\n i0.ɵɵelementEnd()()();\n }\n}\nconst _c0 = a0 => ({\n \"padding-bottom\": a0\n});\nconst _c1 = [\"*\"];\nfunction CustomerContainerComponent_ng_container_5_li_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r7 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"li\", 22);\n i0.ɵɵlistener(\"click\", function CustomerContainerComponent_ng_container_5_li_1_Template_li_click_0_listener() {\n i0.ɵɵrestoreView(_r7);\n const menuSet_r3 = i0.ɵɵnextContext().$implicit;\n const ctx_r5 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r5.setCurrentMenuSet(menuSet_r3));\n });\n i0.ɵɵelementStart(1, \"a\", 23);\n i0.ɵɵelement(2, \"i\");\n i0.ɵɵtext(3, \"\\xA0\");\n i0.ɵɵelementStart(4, \"span\");\n i0.ɵɵtext(5);\n i0.ɵɵelementEnd()()();\n }\n if (rf & 2) {\n const menuSet_r3 = i0.ɵɵnextContext().$implicit;\n const ctx_r4 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"ngClass\", ctx_r4.getMenuSetClass(menuSet_r3));\n i0.ɵɵadvance(2);\n i0.ɵɵclassMap(menuSet_r3.iconClass);\n i0.ɵɵadvance(3);\n i0.ɵɵtextInterpolate(menuSet_r3.name);\n }\n}\nfunction CustomerContainerComponent_ng_container_5_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtemplate(1, CustomerContainerComponent_ng_container_5_li_1_Template, 6, 4, \"li\", 21);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const menuSet_r3 = ctx.$implicit;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r0.validateRole(menuSet_r3));\n }\n}\nfunction CustomerContainerComponent_ng_container_18_li_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r13 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"li\", 25);\n i0.ɵɵlistener(\"click\", function CustomerContainerComponent_ng_container_18_li_1_Template_li_click_0_listener() {\n i0.ɵɵrestoreView(_r13);\n const topMenuItem_r9 = i0.ɵɵnextContext().$implicit;\n const ctx_r11 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r11.setCurrentTopMenuItem(topMenuItem_r9));\n });\n i0.ɵɵelementStart(1, \"a\", 26);\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const topMenuItem_r9 = i0.ɵɵnextContext().$implicit;\n const ctx_r10 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"ngClass\", ctx_r10.getTopMenuItemClass(topMenuItem_r9));\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate(topMenuItem_r9.name);\n }\n}\nfunction CustomerContainerComponent_ng_container_18_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtemplate(1, CustomerContainerComponent_ng_container_18_li_1_Template, 3, 2, \"li\", 24);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const topMenuItem_r9 = ctx.$implicit;\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r1.validateRole(topMenuItem_r9));\n }\n}\nfunction CustomerContainerComponent_div_25_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 27)(1, \"div\", 28)(2, \"span\", 29);\n i0.ɵɵtext(3, \"Loading...\");\n i0.ɵɵelementEnd()()();\n }\n}\nconst _c2 = \".navbar{width:100%}.dropdown-toggle{outline:none}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-13{order:13}.order-14{order:14}.order-15{order:15}.order-16{order:16}.order-17{order:17}.order-18{order:18}.order-19{order:19}.order-20{order:20}.order-21{order:21}.order-22{order:22}.order-23{order:23}.order-24{order:24}.order-25{order:25}.order-26{order:26}.order-27{order:27}.order-28{order:28}.order-29{order:29}.order-30{order:30}.order-31{order:31}.order-32{order:32}.order-33{order:33}.order-34{order:34}.order-35{order:35}.order-36{order:36}.order-37{order:37}.order-38{order:38}.order-39{order:39}.order-40{order:40}.order-41{order:41}.order-42{order:42}.order-43{order:43}.order-44{order:44}.order-45{order:45}.order-46{order:46}.order-47{order:47}.order-48{order:48}.order-49{order:49}.order-50{order:50}.container-content{background-color:#fff;padding:32px;overflow-y:scroll;flex-direction:column}hr{border-top:2px solid #fff!important;opacity:1!important}.profile-text{text-overflow:ellipsis;white-space:nowrap;width:100%;padding:0 16px}.loading-overlay{display:flex;background:#ffffffb3;position:fixed;inset:0;z-index:9998;align-items:center;justify-content:center}\\n\";\nfunction LoginComponent_div_5_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 10);\n i0.ɵɵelement(1, \"highfieldauth-login-page\");\n i0.ɵɵelementEnd();\n }\n}\nfunction BaseContainerComponent_div_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 3);\n }\n}\nfunction BaseContainerComponent_div_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 4)(1, \"span\", 5);\n i0.ɵɵtext(2, \"Loading...\");\n i0.ɵɵelementEnd()();\n }\n}\nfunction BaseContainerComponent_div_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 6);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r2.loadingMessage);\n }\n}\nlet LoadingService = /*#__PURE__*/(() => {\n class LoadingService {\n constructor() {\n this.isLoading = false;\n this.loadingMessage = \"\";\n this.loadingChanged = new BehaviorSubject(this.isLoading);\n }\n setLoading(loading, message = \"\") {\n this.isLoading = loading;\n this.loadingMessage = message;\n this.loadingChanged.next(this.isLoading);\n }\n getLoading() {\n return this.isLoading;\n }\n static {\n this.ɵfac = function LoadingService_Factory(t) {\n return new (t || LoadingService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: LoadingService,\n factory: LoadingService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return LoadingService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AuthenticationComponent = /*#__PURE__*/(() => {\n class AuthenticationComponent {\n constructor(currentUserService, route, router, authService) {\n this.currentUserService = currentUserService;\n this.route = route;\n this.router = router;\n this.authService = authService;\n this.loginPath = '';\n this.welcomePath = '';\n this.onLogout = new EventEmitter();\n this.profileMenuOptions = [];\n this.displayProfile = false;\n this.currentuser = null;\n this.isLoginVisible = false;\n this.isLoginActive = false;\n this.userWatcher = null;\n }\n ngOnInit() {\n this.userWatcher = this.currentUserService.dispatcher.subscribe(user => {\n this.currentuser = user.User;\n });\n }\n canActivate(route, state) {\n const url = state.url;\n return this.checkLogin(url);\n }\n checkLogin(url) {\n return this.checkCurrentUser(url);\n }\n checkCurrentUser(url) {\n if (this.currentUserService.getCurrentUser().User !== null) {\n return true;\n }\n this.router.navigate(['/login'], {\n queryParams: {\n returnUrl: url !== '/' ? url : null\n }\n });\n return false;\n }\n loginClick() {\n this.router.navigate(['/login']);\n }\n logoutClick() {\n this.currentUserService.setCurrentUser(null);\n this.onLogout.emit();\n }\n toggleProfileVisible() {\n this.displayProfile = !this.displayProfile;\n }\n getUserInitials() {\n if (this.currentuser && this.currentuser.firstName && this.currentuser.lastName) {\n return `${this.currentuser.firstName[0]} ${this.currentuser.lastName[0]}`;\n } else {\n return '';\n }\n }\n triggerProfileMenuOption(profileMenuOption) {\n profileMenuOption.action();\n }\n static {\n this.ɵfac = function AuthenticationComponent_Factory(t) {\n return new (t || AuthenticationComponent)(i0.ɵɵdirectiveInject(i1.CurrentUserService), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i1.AuthenticationService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: AuthenticationComponent,\n selectors: [[\"highfieldlayout-auth-component\"]],\n inputs: {\n loginPath: \"loginPath\",\n welcomePath: \"welcomePath\",\n profileMenuOptions: \"profileMenuOptions\"\n },\n outputs: {\n onLogout: \"onLogout\"\n },\n decls: 10,\n vars: 2,\n consts: [[1, \"dropdown\", \"d-flex\", \"justify-content-center\", \"pb-2\"], [\"data-bs-toggle\", \"dropdown\", 1, \"d-flex\", \"align-items-center\", \"text-light\", \"text-decoration-none\"], [1, \"rounded-circle\", \"bg-light\", \"text-dark\", \"profile-icon\", \"d-flex\", \"justify-content-center\", \"align-items-center\", 2, \"height\", \"36px\", \"width\", \"36px\"], [3, \"innerHTML\"], [1, \"dropdown-menu\", \"dropdown-menu-light\", \"text-small\", \"shadow\"], [4, \"ngFor\", \"ngForOf\"], [1, \"dropdown-item\", 3, \"click\"], [1, \"fas\", \"fa-sign-out-alt\"]],\n template: function AuthenticationComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"a\", 1)(2, \"div\", 2);\n i0.ɵɵelement(3, \"strong\", 3);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(4, \"ul\", 4);\n i0.ɵɵtemplate(5, AuthenticationComponent_li_5_Template, 4, 3, \"li\", 5);\n i0.ɵɵelementStart(6, \"li\")(7, \"a\", 6);\n i0.ɵɵlistener(\"click\", function AuthenticationComponent_Template_a_click_7_listener() {\n return ctx.logoutClick();\n });\n i0.ɵɵelement(8, \"i\", 7);\n i0.ɵɵtext(9, \" \\xA0 Log out\");\n i0.ɵɵelementEnd()()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"innerHTML\", ctx.getUserInitials(), i0.ɵɵsanitizeHtml);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngForOf\", ctx.profileMenuOptions);\n }\n },\n dependencies: [i4.NgForOf],\n styles: [\"#HighfieldQualifications .HighfieldHeader #layout-header-placeholder{background-image:url(https://cdn.highfieldqualifications.com/layout/CirQUAL.png);background-position:center;background-size:contain;background-repeat:no-repeat}#HighfieldQualifications .login-background-image{background-image:url(https://cdn.highfieldqualifications.com/layout/LoginHQ.png)}#HighfieldQualifications #profile-button{color:#fff;background-color:#159ed9;border-bottom-color:#0c597a}#HighfieldQualifications #logout-button{color:#fff;background-color:#159ed9;border-bottom:3px solid #0C597A!important}#HighfieldQualifications #layout-profile-button{background-color:transparent;color:#159ed9}#HighfieldQualifications #profilePanel>.ui-overlaypanel{background-color:#fff}#HighfieldQualifications #profileOverlayHeader{background:url(https://cdn.highfieldqualifications.com/layout/ProfileHeaderBackQuals.png);background-size:cover}#HighfieldQualifications #profileOverlayHeaderText{color:#fff}#HighfieldAssessment .HighfieldHeader #layout-header-placeholder{background-image:url(https://cdn.highfieldqualifications.com/layout/CirASSE.png);background-position:center;background-size:contain;background-repeat:no-repeat}#HighfieldAssessment .login-background-image{background-image:url(https://cdn.highfieldqualifications.com/layout/LoginHA.png)}#HighfieldAssessment #profile-button{color:#fff;background-color:#e84d0e;border-bottom-color:#fbd5c8}#HighfieldAssessment #logout-button{color:#fff;background-color:#e84d0e;border-bottom:3px solid #fbd5c8!important}#HighfieldAssessment #layout-profile-button{background-color:transparent;color:#e84d0e}#HighfieldAssessment #profilePanel>.ui-overlaypanel{background-color:#fff}#HighfieldAssessment #profileOverlayHeader{background:url(https://cdn.highfieldqualifications.com/layout/ProfileHeaderBackAss.png);background-size:cover}#HighfieldAssessment #profileOverlayHeaderText{color:#fff}#button-row{padding:15px;display:flex}#profile-button,#logout-button{width:100%;margin:0;border:0;padding:8px 15px;border-bottom:3px solid;outline:none}#currentUserProfile{position:fixed;top:0;right:0;left:auto;height:70px}#layout-profile-button{display:block;height:70px;width:70px;border:none;outline:0!important}#profilePanel>.ui-overlaypanel{left:-230px!important;top:70px!important;box-shadow:0 4px 8px #0003}.ui-overlaypanel-content{padding:0!important}#profileOverlayHeader{height:100px;padding:5px 0;margin:0;display:table;table-layout:fixed;width:100%}#profileOverlayHeaderText{display:table-cell;width:100%;text-align:left;vertical-align:middle;padding:0 10px;text-align:center;font-size:24px}.profileOverlayMenu{list-style:none;margin:0;padding:0}.rounded-circle{height:52px!important;width:52px!important}.pointer{cursor:pointer}\\n\"],\n encapsulation: 2\n });\n }\n }\n return AuthenticationComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AdminContainerComponent = /*#__PURE__*/(() => {\n class AdminContainerComponent {\n constructor(router, loadingService, currentUserService, authGuardService) {\n this.router = router;\n this.loadingService = loadingService;\n this.currentUserService = currentUserService;\n this.authGuardService = authGuardService;\n this.profileText = '';\n this.profileMenuOptions = [];\n this.highfieldSite = '';\n this.siteTitle = '';\n this.siteSubTitle = '';\n this.loginPath = '';\n this.welcomePath = '';\n this.onLogout = new EventEmitter();\n this.menuSets = [];\n this.currentYear = new Date().getFullYear();\n this.loading = false;\n // Horrible hack to play nicely with EPA Dashboard Centre Select menu below the top icon\n this.customPaddingBottom = '1rem';\n this.loadingService.loadingChanged.subscribe(loading => {\n this.loading = loading;\n });\n router.events.subscribe(event => {\n if (event instanceof NavigationStart) {\n this.loadingService.setLoading(true);\n } else if (event instanceof NavigationEnd) {\n this.loadingService.setLoading(false);\n this.updateMenuItem();\n }\n });\n }\n ngOnInit() {\n this.setSelectedTopMenuItem();\n this.updateMenuItem();\n }\n onLogoutClick() {\n this.onLogout.emit();\n }\n getStyleClass() {\n if (this.highfieldSite == null || this.highfieldSite == undefined || this.highfieldSite == '') {\n return 'HighfieldQualifications';\n } else {\n return this.highfieldSite;\n }\n }\n getMenuSetClass(menuSet) {\n return `nav-item order-${menuSet.order}${menuSet.selected ? ' active' : ''}`;\n }\n getTopMenuItemClass(topMenuItem) {\n return `nav-item order-${topMenuItem.order}${topMenuItem.selected ? ' active' : ''}`;\n }\n setCurrentMenuSet(menuSet) {\n this.menuSets.forEach(x => x.selected = false);\n this.currentMenuSet = menuSet;\n this.currentMenuSet.selected = true;\n const defaultTopMenuItem = this.currentMenuSet.topMenuItems.find(x => x.default);\n if (defaultTopMenuItem !== undefined) {\n this.currentMenuSet.topMenuItems.forEach(x => x.selected = false);\n defaultTopMenuItem.selected = true;\n this.router.navigateByUrl(`/admin${this.currentMenuSet.baseRoute}${defaultTopMenuItem.childRoute}`);\n } else {\n throw new Error('No default top menu item defined');\n }\n }\n setCurrentTopMenuItem(topMenuItem) {\n this.currentMenuSet.topMenuItems.forEach(x => x.selected = false);\n topMenuItem.selected = true;\n this.router.navigateByUrl(`/admin${this.currentMenuSet.baseRoute}${topMenuItem.childRoute}`);\n }\n getTopMenuItems() {\n if (this.currentMenuSet) {\n return this.currentMenuSet.topMenuItems.filter(x => x.display);\n } else {\n return [];\n }\n }\n setSelectedTopMenuItem() {\n const defaultMenuSet = this.menuSets.find(x => x.default);\n const flatRoutes = this.menuSets.map(x => x.topMenuItems.map(y => {\n return {\n url: `/admin${x.baseRoute}${y.childRoute}`,\n menuSet: x\n };\n })).reduce((x, y) => x.concat(y), []);\n const routedSet = flatRoutes.find(x => this.router.url.startsWith(x.url));\n const currentRoutedMenuSet = routedSet ? routedSet.menuSet : undefined;\n if (currentRoutedMenuSet !== undefined) {\n this.currentMenuSet = currentRoutedMenuSet;\n const selectedTopMenuItem = this.currentMenuSet.topMenuItems.find(x => this.router.url.indexOf(x.childRoute) !== -1);\n if (selectedTopMenuItem !== undefined) {\n selectedTopMenuItem.selected = true;\n }\n this.currentMenuSet.selected = true;\n } else if (defaultMenuSet !== undefined) {\n this.currentMenuSet = defaultMenuSet;\n const selectedTopMenuItem = this.currentMenuSet.topMenuItems.find(x => this.router.url.indexOf(x.childRoute) !== -1);\n this.setCurrentMenuSet(this.currentMenuSet);\n this.setCurrentTopMenuItem(selectedTopMenuItem);\n } else {\n throw new Error('No default menu set defined');\n }\n }\n userHasRole(role) {\n let roles = this.currentUserService.getCurrentUser().User?.roles;\n return roles.includes(role);\n }\n validateRole(menuItem) {\n if (menuItem.roles?.length) {\n for (let menuRole of menuItem.roles) {\n if (this.userHasRole(menuRole)) {\n return true;\n }\n }\n return false;\n }\n return true;\n }\n updateMenuItem() {\n if (this.currentMenuSet) {\n const childRouteIsEmpty = this.router.url.endsWith(this.currentMenuSet.baseRoute);\n let selectedTopMenuItem;\n if (childRouteIsEmpty) {\n selectedTopMenuItem = this.currentMenuSet.topMenuItems.find(x => !x.childRoute);\n } else {\n selectedTopMenuItem = this.currentMenuSet.topMenuItems.find(x => !!x.childRoute && this.router.url.indexOf(x.childRoute) !== -1);\n }\n this.menuSets.forEach(x => x.selected = false);\n this.currentMenuSet.topMenuItems.forEach(x => x.selected = false);\n if (selectedTopMenuItem) {\n selectedTopMenuItem.selected = true;\n }\n this.currentMenuSet.selected = true;\n }\n }\n static {\n this.ɵfac = function AdminContainerComponent_Factory(t) {\n return new (t || AdminContainerComponent)(i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(LoadingService), i0.ɵɵdirectiveInject(i1.CurrentUserService), i0.ɵɵdirectiveInject(i1.AuthGuardService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: AdminContainerComponent,\n selectors: [[\"highfieldlayout-admincontainer-component\"]],\n inputs: {\n profileText: \"profileText\",\n profileMenuOptions: \"profileMenuOptions\",\n highfieldSite: \"highfieldSite\",\n siteTitle: \"siteTitle\",\n siteSubTitle: \"siteSubTitle\",\n loginPath: \"loginPath\",\n welcomePath: \"welcomePath\",\n menuSets: \"menuSets\",\n customPaddingBottom: \"customPaddingBottom\"\n },\n outputs: {\n onLogout: \"onLogout\"\n },\n ngContentSelectors: _c1,\n decls: 26,\n vars: 11,\n consts: [[1, \"d-flex\", \"vh-100\", \"overflow-hidden\", 3, \"id\"], [1, \"d-flex\", \"flex-column\", \"flex-shrink-0\", \"text-white\", \"bg-dark\", \"side-menu\"], [1, \"d-flex\", \"align-items-center\", \"text-white\", \"text-decoration-none\", \"justify-content-center\", 3, \"ngStyle\"], [\"src\", \"https://cdn.highfieldqualifications.com/resources/branding/crest-white.png\"], [1, \"nav\", \"side-nav\", \"flex-column\", \"mb-auto\", \"d-block\", \"overflow-auto\"], [4, \"ngFor\", \"ngForOf\"], [1, \"d-flex\", \"align-items-center\", \"text-white\", \"text-decoration-none\", \"justify-content-center\", \"flex-column\"], [3, \"profileMenuOptions\", \"onLogout\"], [1, \"profile-text\", \"text-center\", 3, \"innerHTML\"], [1, \"d-flex\", \"flex-grow-1\", \"flex-column\"], [1, \"row\", \"row-nav\", \"ps-2\"], [1, \"title\"], [1, \"row\", \"row-nav\", \"nav-items\", \"ps-2\"], [1, \"d-flex\", \"nav-header\"], [1, \"navbar\", \"nav\", \"navbar-expand-lg\", \"d-flex\", \"align-items-end\"], [\"id\", \"navbarSupportedContent\", 1, \"collapse\", \"navbar-collapse\"], [1, \"navbar-nav\", \"mr-auto\", \"top-nav\"], [1, \"d-flex\", \"flex-grow-1\", \"container-content\"], [1, \"d-flex\", \"justify-content-center\", \"align-items-center\", \"footer\"], [\"src\", \"https://cdn.highfieldqualifications.com/resources/branding/HG%20Logo.png\", \"alt\", \"Highfield Awarding Body for Compliance Limited\", 1, \"me-3\"], [\"class\", \"loading-overlay\", 4, \"ngIf\"], [\"class\", \"mb-1\", 3, \"ngClass\", \"click\", 4, \"ngIf\"], [1, \"mb-1\", 3, \"ngClass\", \"click\"], [1, \"nav-link\"], [\"class\", \"top-nav-item\", 3, \"ngClass\", \"click\", 4, \"ngIf\"], [1, \"top-nav-item\", 3, \"ngClass\", \"click\"], [1, \"nav-item\"], [1, \"loading-overlay\"], [\"role\", \"status\", 1, \"spinner-border\", \"text-primary\"], [1, \"sr-only\"]],\n template: function AdminContainerComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1)(2, \"div\", 2);\n i0.ɵɵelement(3, \"img\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"ul\", 4);\n i0.ɵɵtemplate(5, AdminContainerComponent_ng_container_5_Template, 2, 1, \"ng-container\", 5);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(6, \"div\", 6)(7, \"highfieldlayout-auth-component\", 7);\n i0.ɵɵlistener(\"onLogout\", function AdminContainerComponent_Template_highfieldlayout_auth_component_onLogout_7_listener() {\n return ctx.onLogoutClick();\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelement(8, \"div\", 8);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(9, \"div\", 9)(10, \"div\", 10)(11, \"h2\", 11);\n i0.ɵɵtext(12);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(13, \"div\", 12)(14, \"div\", 13)(15, \"nav\", 14)(16, \"div\", 15)(17, \"ul\", 16);\n i0.ɵɵtemplate(18, AdminContainerComponent_ng_container_18_Template, 2, 1, \"ng-container\", 5);\n i0.ɵɵelementEnd()()()()();\n i0.ɵɵelementStart(19, \"div\", 17);\n i0.ɵɵprojection(20);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(21, \"div\", 18);\n i0.ɵɵelement(22, \"img\", 19);\n i0.ɵɵelementStart(23, \"strong\");\n i0.ɵɵtext(24);\n i0.ɵɵelementEnd()()();\n i0.ɵɵtemplate(25, AdminContainerComponent_div_25_Template, 4, 0, \"div\", 20);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"id\", ctx.getStyleClass());\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngStyle\", i0.ɵɵpureFunction1(9, _c0, ctx.customPaddingBottom));\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"ngForOf\", ctx.menuSets);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"profileMenuOptions\", ctx.profileMenuOptions);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"innerHTML\", ctx.profileText, i0.ɵɵsanitizeHtml);\n i0.ɵɵadvance(4);\n i0.ɵɵtextInterpolate(ctx.currentMenuSet.titleOverride || ctx.currentMenuSet.name);\n i0.ɵɵadvance(6);\n i0.ɵɵproperty(\"ngForOf\", ctx.getTopMenuItems());\n i0.ɵɵadvance(6);\n i0.ɵɵtextInterpolate1(\"\\xA9 \", ctx.currentYear, \" Highfield Awarding Body for Compliance Limited\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.loading);\n }\n },\n dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i4.NgStyle, AuthenticationComponent],\n styles: [\".navbar{width:100%}.dropdown-toggle{outline:none}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-13{order:13}.order-14{order:14}.order-15{order:15}.order-16{order:16}.order-17{order:17}.order-18{order:18}.order-19{order:19}.order-20{order:20}.order-21{order:21}.order-22{order:22}.order-23{order:23}.order-24{order:24}.order-25{order:25}.order-26{order:26}.order-27{order:27}.order-28{order:28}.order-29{order:29}.order-30{order:30}.order-31{order:31}.order-32{order:32}.order-33{order:33}.order-34{order:34}.order-35{order:35}.order-36{order:36}.order-37{order:37}.order-38{order:38}.order-39{order:39}.order-40{order:40}.order-41{order:41}.order-42{order:42}.order-43{order:43}.order-44{order:44}.order-45{order:45}.order-46{order:46}.order-47{order:47}.order-48{order:48}.order-49{order:49}.order-50{order:50}.container-content{background-color:#fff;padding:32px;overflow-y:scroll;flex-direction:column}hr{border-top:2px solid #fff!important;opacity:1!important}.profile-text{text-overflow:ellipsis;white-space:nowrap;width:100%;padding:0 16px}.loading-overlay{display:flex;background:#ffffffb3;position:fixed;inset:0;z-index:9998;align-items:center;justify-content:center}\\n\"],\n encapsulation: 2\n });\n }\n }\n return AdminContainerComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CustomerContainerComponent = /*#__PURE__*/(() => {\n class CustomerContainerComponent {\n constructor(router, loadingService, currentUserService) {\n this.router = router;\n this.loadingService = loadingService;\n this.currentUserService = currentUserService;\n this.highfieldSite = '';\n this.siteTitle = '';\n this.siteSubTitle = '';\n this.loginPath = '';\n this.welcomePath = '';\n this.onLogout = new EventEmitter();\n this.profileText = '';\n this.profileMenuOptions = [];\n this.menuSets = [];\n this.currentYear = new Date().getFullYear();\n this.loading = false;\n // Horrible hack to play nicely with EPA Dashboard Centre Select menu below the top icon\n this.customPaddingBottom = '1rem';\n this.loadingService.loadingChanged.subscribe(loading => {\n this.loading = loading;\n });\n router.events.subscribe(event => {\n if (event instanceof NavigationStart) {\n this.loadingService.setLoading(true);\n } else if (event instanceof NavigationEnd) {\n this.loadingService.setLoading(false);\n this.updateMenuItem();\n }\n });\n }\n ngOnInit() {\n this.setSelectedTopMenuItem();\n this.updateMenuItem();\n }\n onLogoutClick() {\n this.onLogout.emit();\n }\n getStyleClass() {\n if (this.highfieldSite == null || this.highfieldSite == undefined || this.highfieldSite == '') {\n return 'HighfieldQualifications';\n } else {\n return this.highfieldSite;\n }\n }\n getMenuSetClass(menuSet) {\n return `side-nav-item order-${menuSet.order}${menuSet.selected ? ' active' : ''}`;\n }\n getTopMenuItemClass(topMenuItem) {\n return `top-nav-item order-${topMenuItem.order}${topMenuItem.selected ? ' active' : ''}`;\n }\n setCurrentMenuSet(menuSet) {\n this.menuSets.forEach(x => x.selected = false);\n this.currentMenuSet = menuSet;\n this.currentMenuSet.selected = true;\n const defaultTopMenuItem = this.currentMenuSet.topMenuItems.find(x => x.default);\n if (defaultTopMenuItem !== undefined) {\n this.currentMenuSet.topMenuItems.forEach(x => x.selected = false);\n defaultTopMenuItem.selected = true;\n this.router.navigateByUrl(`/customer${this.currentMenuSet.baseRoute}${defaultTopMenuItem.childRoute}`);\n } else {\n throw new Error('No default top menu item defined');\n }\n }\n setCurrentTopMenuItem(topMenuItem) {\n this.currentMenuSet.topMenuItems.forEach(x => x.selected = false);\n topMenuItem.selected = true;\n this.router.navigateByUrl(`/customer${this.currentMenuSet.baseRoute}${topMenuItem.childRoute}`);\n }\n getTopMenuItems() {\n if (this.currentMenuSet) {\n return this.currentMenuSet.topMenuItems.filter(x => x.display);\n } else {\n return [];\n }\n }\n userHasRole(role) {\n let roles = this.currentUserService.getCurrentUser().User?.roles;\n return roles.includes(role);\n }\n validateRole(menuItem) {\n if (menuItem.roles?.length) {\n for (let menuRole of menuItem.roles) {\n if (this.userHasRole(menuRole)) {\n return true;\n }\n }\n return false;\n }\n return true;\n }\n setSelectedTopMenuItem() {\n const defaultMenuSet = this.menuSets.find(x => x.default);\n const flatRoutes = this.menuSets.map(x => x.topMenuItems.map(y => {\n return {\n url: `/admin${x.baseRoute}${y.childRoute}`,\n menuSet: x\n };\n })).reduce((x, y) => x.concat(y), []);\n const routedSet = flatRoutes.find(x => this.router.url.startsWith(x.url));\n const currentRoutedMenuSet = routedSet ? routedSet.menuSet : undefined;\n if (currentRoutedMenuSet !== undefined) {\n this.currentMenuSet = currentRoutedMenuSet;\n const selectedTopMenuItem = this.currentMenuSet.topMenuItems.find(x => this.router.url.indexOf(x.childRoute) !== -1);\n if (selectedTopMenuItem !== undefined) {\n selectedTopMenuItem.selected = true;\n }\n this.currentMenuSet.selected = true;\n } else if (defaultMenuSet !== undefined) {\n this.currentMenuSet = defaultMenuSet;\n const selectedTopMenuItem = this.currentMenuSet.topMenuItems.find(x => this.router.url.indexOf(x.childRoute) !== -1);\n this.setCurrentMenuSet(this.currentMenuSet);\n this.setCurrentTopMenuItem(selectedTopMenuItem);\n } else {\n throw new Error('No default menu set defined');\n }\n }\n updateMenuItem() {\n if (this.currentMenuSet) {\n const childRouteIsEmpty = this.router.url.endsWith(this.currentMenuSet.baseRoute);\n let selectedTopMenuItem;\n if (childRouteIsEmpty) {\n selectedTopMenuItem = this.currentMenuSet.topMenuItems.find(x => !x.childRoute);\n } else {\n selectedTopMenuItem = this.currentMenuSet.topMenuItems.find(x => !!x.childRoute && this.router.url.indexOf(x.childRoute) !== -1);\n }\n this.menuSets.forEach(x => x.selected = false);\n this.currentMenuSet.topMenuItems.forEach(x => x.selected = false);\n if (selectedTopMenuItem) {\n selectedTopMenuItem.selected = true;\n }\n this.currentMenuSet.selected = true;\n }\n }\n static {\n this.ɵfac = function CustomerContainerComponent_Factory(t) {\n return new (t || CustomerContainerComponent)(i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(LoadingService), i0.ɵɵdirectiveInject(i1.CurrentUserService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CustomerContainerComponent,\n selectors: [[\"highfieldlayout-customercontainer-component\"]],\n inputs: {\n highfieldSite: \"highfieldSite\",\n siteTitle: \"siteTitle\",\n siteSubTitle: \"siteSubTitle\",\n loginPath: \"loginPath\",\n welcomePath: \"welcomePath\",\n profileText: \"profileText\",\n profileMenuOptions: \"profileMenuOptions\",\n menuSets: \"menuSets\",\n customPaddingBottom: \"customPaddingBottom\"\n },\n outputs: {\n onLogout: \"onLogout\"\n },\n ngContentSelectors: _c1,\n decls: 26,\n vars: 11,\n consts: [[1, \"d-flex\", \"vh-100\", \"overflow-hidden\", 3, \"id\"], [1, \"d-flex\", \"flex-column\", \"flex-shrink-0\", \"text-white\", \"bg-dark\", \"side-menu\"], [1, \"d-flex\", \"align-items-center\", \"text-white\", \"text-decoration-none\", \"justify-content-center\", 3, \"ngStyle\"], [\"src\", \"https://cdn.highfieldqualifications.com/resources/branding/crest-white.png\"], [1, \"nav\", \"side-nav\", \"flex-column\", \"mb-auto\", \"d-block\", \"overflow-auto\"], [4, \"ngFor\", \"ngForOf\"], [1, \"d-flex\", \"align-items-center\", \"text-white\", \"text-decoration-none\", \"justify-content-center\", \"flex-column\"], [3, \"profileMenuOptions\", \"onLogout\"], [1, \"profile-text\", \"text-center\", 3, \"innerHTML\"], [1, \"d-flex\", \"flex-grow-1\", \"flex-column\"], [1, \"row\", \"row-nav\", \"ps-2\"], [1, \"title\"], [1, \"row\", \"row-nav\", \"nav-items\", \"ps-2\"], [1, \"d-flex\", \"nav-header\"], [1, \"navbar\", \"nav\", \"navbar-expand-lg\", \"d-flex\", \"align-items-end\"], [\"id\", \"navbarSupportedContent\", 1, \"collapse\", \"navbar-collapse\"], [1, \"navbar-nav\", \"mr-auto\", \"top-nav\"], [1, \"d-flex\", \"flex-grow-1\", \"container-content\"], [1, \"d-flex\", \"justify-content-center\", \"align-items-center\", \"footer\"], [\"src\", \"https://cdn.highfieldqualifications.com/resources/branding/HG%20Logo.png\", \"alt\", \"Highfield Awarding Body for Compliance Limited\", 1, \"me-3\"], [\"class\", \"loading-overlay\", 4, \"ngIf\"], [\"class\", \"mb-1\", 3, \"ngClass\", \"click\", 4, \"ngIf\"], [1, \"mb-1\", 3, \"ngClass\", \"click\"], [1, \"nav-link\"], [\"class\", \"top-nav-item\", 3, \"ngClass\", \"click\", 4, \"ngIf\"], [1, \"top-nav-item\", 3, \"ngClass\", \"click\"], [1, \"nav-item\"], [1, \"loading-overlay\"], [\"role\", \"status\", 1, \"spinner-border\", \"text-primary\"], [1, \"sr-only\"]],\n template: function CustomerContainerComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1)(2, \"div\", 2);\n i0.ɵɵelement(3, \"img\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"ul\", 4);\n i0.ɵɵtemplate(5, CustomerContainerComponent_ng_container_5_Template, 2, 1, \"ng-container\", 5);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(6, \"div\", 6)(7, \"highfieldlayout-auth-component\", 7);\n i0.ɵɵlistener(\"onLogout\", function CustomerContainerComponent_Template_highfieldlayout_auth_component_onLogout_7_listener() {\n return ctx.onLogoutClick();\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelement(8, \"div\", 8);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(9, \"div\", 9)(10, \"div\", 10)(11, \"h2\", 11);\n i0.ɵɵtext(12);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(13, \"div\", 12)(14, \"div\", 13)(15, \"nav\", 14)(16, \"div\", 15)(17, \"ul\", 16);\n i0.ɵɵtemplate(18, CustomerContainerComponent_ng_container_18_Template, 2, 1, \"ng-container\", 5);\n i0.ɵɵelementEnd()()()()();\n i0.ɵɵelementStart(19, \"div\", 17);\n i0.ɵɵprojection(20);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(21, \"div\", 18);\n i0.ɵɵelement(22, \"img\", 19);\n i0.ɵɵelementStart(23, \"strong\");\n i0.ɵɵtext(24);\n i0.ɵɵelementEnd()()();\n i0.ɵɵtemplate(25, CustomerContainerComponent_div_25_Template, 4, 0, \"div\", 20);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"id\", ctx.getStyleClass());\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngStyle\", i0.ɵɵpureFunction1(9, _c0, ctx.customPaddingBottom));\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"ngForOf\", ctx.menuSets);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"profileMenuOptions\", ctx.profileMenuOptions);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"innerHTML\", ctx.profileText, i0.ɵɵsanitizeHtml);\n i0.ɵɵadvance(4);\n i0.ɵɵtextInterpolate(ctx.currentMenuSet.titleOverride || ctx.currentMenuSet.name);\n i0.ɵɵadvance(6);\n i0.ɵɵproperty(\"ngForOf\", ctx.getTopMenuItems());\n i0.ɵɵadvance(6);\n i0.ɵɵtextInterpolate1(\"\\xA9 \", ctx.currentYear, \" Highfield Awarding Body for Compliance Limited\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.loading);\n }\n },\n dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i4.NgStyle, AuthenticationComponent],\n styles: [_c2],\n encapsulation: 2\n });\n }\n }\n return CustomerContainerComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PublicContainerComponent = /*#__PURE__*/(() => {\n class PublicContainerComponent {\n constructor(router, loadingService) {\n this.loadingService = loadingService;\n this.highfieldSite = '';\n this.siteTitle = '';\n this.siteSubTitle = '';\n this.loginPath = '';\n this.welcomePath = '';\n this.onLogout = new EventEmitter();\n router.events.forEach(event => {\n if (event instanceof NavigationStart) {\n this.loadingService.setLoading(true);\n } else if (event instanceof NavigationEnd) {\n this.loadingService.setLoading(false);\n }\n });\n }\n ngOnInit() {}\n onLogoutClick() {\n this.onLogout.emit();\n }\n getStyleClass() {\n if (this.highfieldSite == null || this.highfieldSite == undefined || this.highfieldSite == '') {\n return 'HighfieldQualifications';\n } else {\n return this.highfieldSite;\n }\n }\n static {\n this.ɵfac = function PublicContainerComponent_Factory(t) {\n return new (t || PublicContainerComponent)(i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(LoadingService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: PublicContainerComponent,\n selectors: [[\"highfieldlayout-publiccontainer-component\"]],\n inputs: {\n highfieldSite: \"highfieldSite\",\n siteTitle: \"siteTitle\",\n siteSubTitle: \"siteSubTitle\",\n loginPath: \"loginPath\",\n welcomePath: \"welcomePath\"\n },\n outputs: {\n onLogout: \"onLogout\"\n },\n ngContentSelectors: _c1,\n decls: 3,\n vars: 1,\n consts: [[3, \"id\"], [\"id\", \"pageBody\"]],\n template: function PublicContainerComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"id\", ctx.getStyleClass());\n }\n },\n encapsulation: 2\n });\n }\n }\n return PublicContainerComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet LoginComponent = /*#__PURE__*/(() => {\n class LoginComponent {\n constructor(currentUserService, router, route) {\n this.currentUserService = currentUserService;\n this.router = router;\n this.route = route;\n this.currentUserDispatcher = null;\n this.userInitialised = false;\n this.user = null;\n }\n ngOnInit() {\n this.currentUserDispatcher = this.currentUserService.dispatcher.subscribe(user => {\n this.user = user;\n this.userInitialised = user.Initialised;\n console.log(this.userInitialised);\n if (this.userInitialised && this.user.User !== null) {\n if (this.route.snapshot.queryParams[\"returnUrl\"]) {\n let urlParams = this.returnParams(this.route.snapshot.queryParams[\"returnUrl\"]);\n if (urlParams == null) {\n this.router.navigate([this.route.snapshot.queryParams[\"returnUrl\"].split(\"?\")[0]]);\n } else {\n this.router.navigate([this.route.snapshot.queryParams[\"returnUrl\"].split(\"?\")[0]], {\n queryParams: urlParams\n });\n }\n } else {\n this.router.navigate([\"\"]);\n }\n }\n });\n }\n returnParams(link) {\n let linkSplit = link.split('?');\n if (linkSplit.length > 1) {\n let params = linkSplit[1].split('&');\n let pair = null;\n let data = {};\n params.forEach(d => {\n pair = d.split('=');\n data[`${pair[0]}`] = pair[1];\n });\n return data;\n } else {\n return null;\n }\n }\n ngOnDestroy() {\n if (this.currentUserDispatcher) {\n this.currentUserDispatcher.unsubscribe();\n }\n }\n static {\n this.ɵfac = function LoginComponent_Factory(t) {\n return new (t || LoginComponent)(i0.ɵɵdirectiveInject(i1.CurrentUserService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: LoginComponent,\n selectors: [[\"highfieldlayout-login-page\"]],\n decls: 11,\n vars: 1,\n consts: [[\"src\", \"./assets/images/LoginHQ.png\", 1, \"background-image\"], [1, \"centered\", \"login-wrapper\"], [\"href\", \"https://qualifications.highfieldqualifications.com/\"], [\"src\", \"./assets/images/HQLogo.png\", 1, \"img-container\"], [1, \"auth-wrapper\"], [\"class\", \"top\", 4, \"ngIf\"], [1, \"bottom\"], [1, \"text\"], [1, \"cog\"], [1, \"fa\", \"fa-cog\", \"fa-spin\", \"fa-3x\", \"fa-fw\"], [1, \"top\"]],\n template: function LoginComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"img\", 0);\n i0.ɵɵelementStart(1, \"div\", 1)(2, \"a\", 2);\n i0.ɵɵelement(3, \"img\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"div\", 4);\n i0.ɵɵtemplate(5, LoginComponent_div_5_Template, 2, 0, \"div\", 5);\n i0.ɵɵelementStart(6, \"div\", 6)(7, \"div\", 7);\n i0.ɵɵtext(8, \" Please wait while we check a few things \");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(9, \"div\", 8);\n i0.ɵɵelement(10, \"i\", 9);\n i0.ɵɵelementEnd()()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(5);\n i0.ɵɵproperty(\"ngIf\", (ctx.user == null ? null : ctx.user.User) == null);\n }\n },\n dependencies: [i4.NgIf, i1.LoginComponent],\n styles: [\".background-image[_ngcontent-%COMP%]{width:100vw;height:100vh}.centered[_ngcontent-%COMP%]{position:absolute;inset:0;margin:auto}.login-wrapper[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;width:467px;height:532px;background-color:#fff;padding:55px;box-shadow:#333 0 0 8px}@media screen and (max-width: 467px){.login-wrapper[_ngcontent-%COMP%]{width:100%;height:100%;padding-left:10px}}.img-container[_ngcontent-%COMP%]{width:300px;height:auto}.auth-wrapper[_ngcontent-%COMP%]{width:100%;box-shadow:#000,5px,5px;position:relative}.auth-wrapper[_ngcontent-%COMP%] .top[_ngcontent-%COMP%]{width:100%;position:absolute;z-index:1}.auth-wrapper[_ngcontent-%COMP%] .bottom[_ngcontent-%COMP%]{height:100%}.auth-wrapper[_ngcontent-%COMP%] .bottom[_ngcontent-%COMP%] .text[_ngcontent-%COMP%]{display:flex;justify-content:center;margin-bottom:25px}.auth-wrapper[_ngcontent-%COMP%] .bottom[_ngcontent-%COMP%] .cog[_ngcontent-%COMP%]{display:flex;justify-content:center}.links-container[_ngcontent-%COMP%]{margin-top:20px;text-align:right;font-size:16px;color:#000}.links-container[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#333}\"]\n });\n }\n }\n return LoginComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet UnauthorisedComponent = /*#__PURE__*/(() => {\n class UnauthorisedComponent {\n constructor(currentUserService, router, route, authService, authenticatedFailedRedirect) {\n this.currentUserService = currentUserService;\n this.router = router;\n this.route = route;\n this.authService = authService;\n this.authenticatedFailedRedirect = authenticatedFailedRedirect;\n this.currentUserDispatcher = null;\n this.userInitialised = false;\n this.user = null;\n }\n ngOnInit() {\n this.currentUserDispatcher = this.currentUserService.dispatcher.subscribe(user => {\n this.user = user;\n this.userInitialised = user.Initialised;\n if (this.userInitialised && this.user.User !== null) {\n if (this.route.snapshot.queryParams[\"returnUrl\"]) {\n let urlParams = this.returnParams(this.route.snapshot.queryParams[\"returnUrl\"]);\n if (urlParams == null) {\n this.router.navigate([this.route.snapshot.queryParams[\"returnUrl\"].split(\"?\")[0]]);\n } else {\n this.router.navigate([this.route.snapshot.queryParams[\"returnUrl\"].split(\"?\")[0]], {\n queryParams: urlParams\n });\n }\n } else {\n this.router.navigate([\"\"]);\n }\n }\n });\n }\n returnParams(link) {\n let linkSplit = link.split('?');\n if (linkSplit.length > 1) {\n let params = linkSplit[1].split('&');\n let pair = null;\n let data = {};\n params.forEach(d => {\n pair = d.split('=');\n data[`${pair[0]}`] = pair[1];\n });\n return data;\n } else {\n return null;\n }\n }\n ngOnDestroy() {\n this.currentUserDispatcher?.unsubscribe();\n }\n async logoutClick() {\n await this.authService.logOutAsync();\n this.currentUserService.setCurrentUser(null);\n this.router.navigate([this.authenticatedFailedRedirect]);\n return false;\n }\n static {\n this.ɵfac = function UnauthorisedComponent_Factory(t) {\n return new (t || UnauthorisedComponent)(i0.ɵɵdirectiveInject(i1.CurrentUserService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i1.AuthenticationService), i0.ɵɵdirectiveInject('AuthenticatedCheckFailURL'));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: UnauthorisedComponent,\n selectors: [[\"highfieldlayout-unauthorised-page\"]],\n decls: 7,\n vars: 0,\n consts: [[1, \"login-background-image\"], [1, \"centered\", \"login-wrapper\"], [1, \"auth-wrapper\"]],\n template: function UnauthorisedComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1)(2, \"div\", 2)(3, \"p\");\n i0.ɵɵtext(4, \"Unfortunately you do not appear to have access to this area.\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(5, \"p\");\n i0.ɵɵtext(6, \"If you need to log in as a different user then please click the button below.\");\n i0.ɵɵelementEnd()()()();\n }\n },\n styles: [\".login-background-image[_ngcontent-%COMP%]{height:100vh;width:100vw}.login-wrapper[_ngcontent-%COMP%]{text-align:center;width:467px;height:532px;background-color:#fff;padding:50px 15px 0;box-shadow:#333 0 0 8px}@media screen and (max-width: 467px){.login-wrapper[_ngcontent-%COMP%]{width:100%;height:100%;padding-left:10px}}.centered[_ngcontent-%COMP%]{position:absolute;inset:0;margin:auto}.img-container[_ngcontent-%COMP%]{width:300px;height:auto}.auth-wrapper[_ngcontent-%COMP%]{box-shadow:#000,5px,5px;position:relative}.auth-wrapper[_ngcontent-%COMP%] .top[_ngcontent-%COMP%]{position:absolute;z-index:1}.auth-wrapper[_ngcontent-%COMP%] .bottom[_ngcontent-%COMP%]{height:100%;padding:160px 0}.auth-wrapper[_ngcontent-%COMP%] .bottom[_ngcontent-%COMP%] .text[_ngcontent-%COMP%]{padding-left:40px;margin-bottom:25px}.auth-wrapper[_ngcontent-%COMP%] .bottom[_ngcontent-%COMP%] .cog[_ngcontent-%COMP%]{padding-left:135px}.links-container[_ngcontent-%COMP%]{margin-top:20px;text-align:right;font-size:16px;color:#000}.links-container[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#333}\"]\n });\n }\n }\n return UnauthorisedComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet BaseContainerComponent = /*#__PURE__*/(() => {\n class BaseContainerComponent {\n constructor(currentUserService, loadingService) {\n this.currentUserService = currentUserService;\n this.loadingService = loadingService;\n this.color = 'primary';\n this.mode = 'indeterminate';\n this.loadingData = false;\n this.loadingMessage = \"\";\n this.onLoadingChanged = null;\n this.onLoadingChanged = this.loadingService.loadingChanged.subscribe(isLoading => {\n this.loadingData = isLoading;\n this.loadingMessage = this.loadingService.loadingMessage;\n });\n }\n static {\n this.ɵfac = function BaseContainerComponent_Factory(t) {\n return new (t || BaseContainerComponent)(i0.ɵɵdirectiveInject(i1.CurrentUserService), i0.ɵɵdirectiveInject(LoadingService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: BaseContainerComponent,\n selectors: [[\"highfieldlayout-basecontainer-component\"]],\n ngContentSelectors: _c1,\n decls: 4,\n vars: 3,\n consts: [[\"id\", \"WorkingPanel\", 4, \"ngIf\"], [\"class\", \"spinner-border\", \"style\", \"width: 3rem; height: 3rem;\", \"role\", \"status\", 4, \"ngIf\"], [\"id\", \"spinnerMessage\", \"class\", \"SpinnerBackground\", 4, \"ngIf\"], [\"id\", \"WorkingPanel\"], [\"role\", \"status\", 1, \"spinner-border\", 2, \"width\", \"3rem\", \"height\", \"3rem\"], [1, \"sr-only\"], [\"id\", \"spinnerMessage\", 1, \"SpinnerBackground\"]],\n template: function BaseContainerComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n i0.ɵɵtemplate(1, BaseContainerComponent_div_1_Template, 1, 0, \"div\", 0)(2, BaseContainerComponent_div_2_Template, 3, 0, \"div\", 1)(3, BaseContainerComponent_div_3_Template, 2, 1, \"div\", 2);\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.loadingData);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.loadingData);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.loadingData && ctx.loadingMessage);\n }\n },\n dependencies: [i4.NgIf],\n styles: [\"#WorkingPanel[_ngcontent-%COMP%]{width:100%;height:100%;position:fixed;top:0;left:0;text-align:center;z-index:999999;background-color:#fff;opacity:.5}#spinner[_ngcontent-%COMP%]{text-align:center;z-index:9999999;position:fixed;top:50%;left:50%;margin-top:-50px;margin-left:-50px}#spinnerMessage[_ngcontent-%COMP%]{text-align:center;z-index:9999999;position:fixed;top:75%;right:0;left:0;margin-top:-50px;margin-right:auto;margin-left:auto;background-color:gray;color:#fff;font-weight:700;font-size:2em;padding:5px;max-width:50%;border-radius:5px}\"]\n });\n }\n }\n return BaseContainerComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet LocalSettingsService = /*#__PURE__*/(() => {\n class LocalSettingsService {\n constructor(storedSettingService) {\n this.storedSettingService = storedSettingService;\n this.localSettingChanged = new BehaviorSubject(\"\");\n this.getSetting = key => {\n return this.storedSettingService.getSetting('highfieldlocalsettings_' + key);\n };\n this.setSetting = (key, value) => {\n this.storedSettingService.setSetting('highfieldlocalsettings_' + key, value);\n this.localSettingChanged.next(key);\n };\n this.removeSetting = key => {\n this.storedSettingService.removeSetting('highfieldlocalsettings_' + key);\n this.localSettingChanged.next(key);\n };\n this.getAll = () => {\n return localStorage;\n };\n this.clearSettings = () => {\n var currentItems = this.storedSettingService.getAll();\n for (var i = 0; i < currentItems.length; i++) {\n let currentKey = currentItems.key(i);\n if (currentKey.startsWith(\"highfieldlocalsettings_\")) {\n this.storedSettingService.removeSetting(currentKey);\n this.localSettingChanged.next(currentKey.substr(currentKey.indexOf(\"_\") + 1, currentKey.length - (currentKey.indexOf(\"_\") + 1)));\n }\n }\n };\n }\n static {\n this.ɵfac = function LocalSettingsService_Factory(t) {\n return new (t || LocalSettingsService)(i0.ɵɵinject(i1$1.StoredSettingService));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: LocalSettingsService,\n factory: LocalSettingsService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return LocalSettingsService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ParameterService = /*#__PURE__*/(() => {\n class ParameterService {\n constructor(localSettingsService) {\n this.localSettingsService = localSettingsService;\n this.parameters = new Map();\n }\n setParameterValue(name, value) {\n this.parameters.set(name.toLowerCase(), value);\n this.localSettingsService.setSetting(\"parameter-\" + name, value);\n }\n getParameterValue(name) {\n if (this.parameters.has(name.toLowerCase())) {\n let _value = this.parameters.get(name.toLowerCase());\n if (_value == undefined) {\n return '';\n } else {\n return _value;\n }\n } else {\n return '';\n }\n }\n setupLinks(routeSnapshot) {\n for (var i = 0; i < routeSnapshot.queryParamMap.keys.length; i++) {\n this.setParameterValue(routeSnapshot.queryParamMap.keys[i], routeSnapshot.queryParams[routeSnapshot.queryParamMap.keys[i]]);\n }\n }\n static {\n this.ɵfac = function ParameterService_Factory(t) {\n return new (t || ParameterService)(i0.ɵɵinject(LocalSettingsService));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ParameterService,\n factory: ParameterService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return ParameterService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AngularHighfieldlayoutService = /*#__PURE__*/(() => {\n class AngularHighfieldlayoutService {\n constructor() {}\n static {\n this.ɵfac = function AngularHighfieldlayoutService_Factory(t) {\n return new (t || AngularHighfieldlayoutService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AngularHighfieldlayoutService,\n factory: AngularHighfieldlayoutService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return AngularHighfieldlayoutService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AngularHighfieldlayoutComponent = /*#__PURE__*/(() => {\n class AngularHighfieldlayoutComponent {\n constructor() {}\n ngOnInit() {}\n static {\n this.ɵfac = function AngularHighfieldlayoutComponent_Factory(t) {\n return new (t || AngularHighfieldlayoutComponent)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: AngularHighfieldlayoutComponent,\n selectors: [[\"lib-angular-highfieldlayout\"]],\n decls: 2,\n vars: 0,\n template: function AngularHighfieldlayoutComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"p\");\n i0.ɵɵtext(1, \" angular-highfieldlayout works! \");\n i0.ɵɵelementEnd();\n }\n },\n encapsulation: 2\n });\n }\n }\n return AngularHighfieldlayoutComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AngularHighfieldlayoutModule = /*#__PURE__*/(() => {\n class AngularHighfieldlayoutModule {\n static forRoot() {\n return {\n ngModule: AngularHighfieldlayoutModule\n };\n }\n static {\n this.ɵfac = function AngularHighfieldlayoutModule_Factory(t) {\n return new (t || AngularHighfieldlayoutModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: AngularHighfieldlayoutModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule, MatButtonModule, MatIconModule, MatProgressSpinnerModule, OverlayModule, AngularHighfieldcommonModule.forRoot(), AngularHighfieldwebapiModule.forRoot(), AngularHighfieldauthModule.forRoot()]\n });\n }\n }\n return AngularHighfieldlayoutModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass MenuSet {\n constructor() {\n this.titleOverride = null;\n this.selected = false;\n this.default = false;\n }\n}\nclass TopMenuItem {\n constructor() {\n this.selected = false;\n this.default = false;\n this.display = true;\n }\n}\n\n/*\n * Public API Surface of angular-highfieldlayout\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AdminContainerComponent, AngularHighfieldlayoutComponent, AngularHighfieldlayoutModule, AngularHighfieldlayoutService, AuthenticationComponent, BaseContainerComponent, CustomerContainerComponent, LoadingService, LocalSettingsService, LoginComponent, MenuSet, ParameterService, PublicContainerComponent, TopMenuItem, UnauthorisedComponent };\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * A collection of HttpHeaders that can be sent with a HTTP request.\n */\nfunction getHeaderKey(headerName) {\n return headerName.toLowerCase();\n}\nexport function isHttpHeadersLike(object) {\n if (object && typeof object === \"object\") {\n const castObject = object;\n if (typeof castObject.rawHeaders === \"function\" && typeof castObject.clone === \"function\" && typeof castObject.get === \"function\" && typeof castObject.set === \"function\" && typeof castObject.contains === \"function\" && typeof castObject.remove === \"function\" && typeof castObject.headersArray === \"function\" && typeof castObject.headerValues === \"function\" && typeof castObject.headerNames === \"function\" && typeof castObject.toJson === \"function\") {\n return true;\n }\n }\n return false;\n}\n/**\n * A collection of HTTP header key/value pairs.\n */\nexport class HttpHeaders {\n constructor(rawHeaders) {\n this._headersMap = {};\n if (rawHeaders) {\n for (const headerName in rawHeaders) {\n this.set(headerName, rawHeaders[headerName]);\n }\n }\n }\n /**\n * Set a header in this collection with the provided name and value. The name is\n * case-insensitive.\n * @param headerName - The name of the header to set. This value is case-insensitive.\n * @param headerValue - The value of the header to set.\n */\n set(headerName, headerValue) {\n this._headersMap[getHeaderKey(headerName)] = {\n name: headerName,\n value: headerValue.toString().trim()\n };\n }\n /**\n * Get the header value for the provided header name, or undefined if no header exists in this\n * collection with the provided name.\n * @param headerName - The name of the header.\n */\n get(headerName) {\n const header = this._headersMap[getHeaderKey(headerName)];\n return !header ? undefined : header.value;\n }\n /**\n * Get whether or not this header collection contains a header entry for the provided header name.\n */\n contains(headerName) {\n return !!this._headersMap[getHeaderKey(headerName)];\n }\n /**\n * Remove the header with the provided headerName. Return whether or not the header existed and\n * was removed.\n * @param headerName - The name of the header to remove.\n */\n remove(headerName) {\n const result = this.contains(headerName);\n delete this._headersMap[getHeaderKey(headerName)];\n return result;\n }\n /**\n * Get the headers that are contained this collection as an object.\n */\n rawHeaders() {\n return this.toJson({\n preserveCase: true\n });\n }\n /**\n * Get the headers that are contained in this collection as an array.\n */\n headersArray() {\n const headers = [];\n for (const headerKey in this._headersMap) {\n headers.push(this._headersMap[headerKey]);\n }\n return headers;\n }\n /**\n * Get the header names that are contained in this collection.\n */\n headerNames() {\n const headerNames = [];\n const headers = this.headersArray();\n for (let i = 0; i < headers.length; ++i) {\n headerNames.push(headers[i].name);\n }\n return headerNames;\n }\n /**\n * Get the header values that are contained in this collection.\n */\n headerValues() {\n const headerValues = [];\n const headers = this.headersArray();\n for (let i = 0; i < headers.length; ++i) {\n headerValues.push(headers[i].value);\n }\n return headerValues;\n }\n /**\n * Get the JSON object representation of this HTTP header collection.\n */\n toJson(options = {}) {\n const result = {};\n if (options.preserveCase) {\n for (const headerKey in this._headersMap) {\n const header = this._headersMap[headerKey];\n result[header.name] = header.value;\n }\n } else {\n for (const headerKey in this._headersMap) {\n const header = this._headersMap[headerKey];\n result[getHeaderKey(header.name)] = header.value;\n }\n }\n return result;\n }\n /**\n * Get the string representation of this HTTP header collection.\n */\n toString() {\n return JSON.stringify(this.toJson({\n preserveCase: true\n }));\n }\n /**\n * Create a deep clone/copy of this HttpHeaders collection.\n */\n clone() {\n const resultPreservingCasing = {};\n for (const headerKey in this._headersMap) {\n const header = this._headersMap[headerKey];\n resultPreservingCasing[header.name] = header.value;\n }\n return new HttpHeaders(resultPreservingCasing);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Encodes a string in base64 format.\n * @param value - The string to encode\n */\nexport function encodeString(value) {\n return btoa(value);\n}\n/**\n * Encodes a byte array in base64 format.\n * @param value - The Uint8Aray to encode\n */\nexport function encodeByteArray(value) {\n let str = \"\";\n for (let i = 0; i < value.length; i++) {\n str += String.fromCharCode(value[i]);\n }\n return btoa(str);\n}\n/**\n * Decodes a base64 string into a byte array.\n * @param value - The base64 string to decode\n */\nexport function decodeString(value) {\n const byteString = atob(value);\n const arr = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n arr[i] = byteString.charCodeAt(i);\n }\n return arr;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * A set of constants used internally when processing requests.\n */\nexport const Constants = {\n /**\n * The core-http version\n */\n coreHttpVersion: \"3.0.4\",\n /**\n * Specifies HTTP.\n */\n HTTP: \"http:\",\n /**\n * Specifies HTTPS.\n */\n HTTPS: \"https:\",\n /**\n * Specifies HTTP Proxy.\n */\n HTTP_PROXY: \"HTTP_PROXY\",\n /**\n * Specifies HTTPS Proxy.\n */\n HTTPS_PROXY: \"HTTPS_PROXY\",\n /**\n * Specifies NO Proxy.\n */\n NO_PROXY: \"NO_PROXY\",\n /**\n * Specifies ALL Proxy.\n */\n ALL_PROXY: \"ALL_PROXY\",\n HttpConstants: {\n /**\n * Http Verbs\n */\n HttpVerbs: {\n PUT: \"PUT\",\n GET: \"GET\",\n DELETE: \"DELETE\",\n POST: \"POST\",\n MERGE: \"MERGE\",\n HEAD: \"HEAD\",\n PATCH: \"PATCH\"\n },\n StatusCodes: {\n TooManyRequests: 429,\n ServiceUnavailable: 503\n }\n },\n /**\n * Defines constants for use with HTTP headers.\n */\n HeaderConstants: {\n /**\n * The Authorization header.\n */\n AUTHORIZATION: \"authorization\",\n AUTHORIZATION_SCHEME: \"Bearer\",\n /**\n * The Retry-After response-header field can be used with a 503 (Service\n * Unavailable) or 349 (Too Many Requests) responses to indicate how long\n * the service is expected to be unavailable to the requesting client.\n */\n RETRY_AFTER: \"Retry-After\",\n /**\n * The UserAgent header.\n */\n USER_AGENT: \"User-Agent\"\n }\n};\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Default key used to access the XML attributes.\n */\nexport const XML_ATTRKEY = \"$\";\n/**\n * Default key used to access the XML value content.\n */\nexport const XML_CHARKEY = \"_\";\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return stringify(rnds);\n}\nexport default v4;","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Constants } from \"./constants\";\nimport { XML_ATTRKEY } from \"./serializer.common\";\nimport { v4 as uuidv4 } from \"uuid\";\nconst validUuidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/i;\n/**\n * Checks if a parsed URL is HTTPS\n *\n * @param urlToCheck - The url to check\n * @returns True if the URL is HTTPS; false otherwise.\n */\nexport function urlIsHTTPS(urlToCheck) {\n return urlToCheck.protocol.toLowerCase() === Constants.HTTPS;\n}\n/**\n * Encodes an URI.\n *\n * @param uri - The URI to be encoded.\n * @returns The encoded URI.\n */\nexport function encodeUri(uri) {\n return encodeURIComponent(uri).replace(/!/g, \"%21\").replace(/\"/g, \"%27\").replace(/\\(/g, \"%28\").replace(/\\)/g, \"%29\").replace(/\\*/g, \"%2A\");\n}\n/**\n * Returns a stripped version of the Http Response which only contains body,\n * headers and the status.\n *\n * @param response - The Http Response\n * @returns The stripped version of Http Response.\n */\nexport function stripResponse(response) {\n const strippedResponse = {};\n strippedResponse.body = response.bodyAsText;\n strippedResponse.headers = response.headers;\n strippedResponse.status = response.status;\n return strippedResponse;\n}\n/**\n * Returns a stripped version of the Http Request that does not contain the\n * Authorization header.\n *\n * @param request - The Http Request object\n * @returns The stripped version of Http Request.\n */\nexport function stripRequest(request) {\n const strippedRequest = request.clone();\n if (strippedRequest.headers) {\n strippedRequest.headers.remove(\"authorization\");\n }\n return strippedRequest;\n}\n/**\n * Validates the given uuid as a string\n *\n * @param uuid - The uuid as a string that needs to be validated\n * @returns True if the uuid is valid; false otherwise.\n */\nexport function isValidUuid(uuid) {\n return validUuidRegex.test(uuid);\n}\n/**\n * Generated UUID\n *\n * @returns RFC4122 v4 UUID.\n */\nexport function generateUuid() {\n return uuidv4();\n}\n/**\n * Executes an array of promises sequentially. Inspiration of this method is here:\n * https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html. An awesome blog on promises!\n *\n * @param promiseFactories - An array of promise factories(A function that return a promise)\n * @param kickstart - Input to the first promise that is used to kickstart the promise chain.\n * If not provided then the promise chain starts with undefined.\n * @returns A chain of resolved or rejected promises\n */\nexport function executePromisesSequentially(promiseFactories, kickstart) {\n let result = Promise.resolve(kickstart);\n promiseFactories.forEach(promiseFactory => {\n result = result.then(promiseFactory);\n });\n return result;\n}\n/**\n * Converts a Promise to a callback.\n * @param promise - The Promise to be converted to a callback\n * @returns A function that takes the callback `(cb: Function) => void`\n * @deprecated generated code should instead depend on responseToBody\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function promiseToCallback(promise) {\n if (typeof promise.then !== \"function\") {\n throw new Error(\"The provided input is not a Promise.\");\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n return cb => {\n promise.then(data => {\n // eslint-disable-next-line promise/no-callback-in-promise\n return cb(undefined, data);\n }).catch(err => {\n // eslint-disable-next-line promise/no-callback-in-promise\n cb(err);\n });\n };\n}\n/**\n * Converts a Promise to a service callback.\n * @param promise - The Promise of HttpOperationResponse to be converted to a service callback\n * @returns A function that takes the service callback (cb: ServiceCallback): void\n */\nexport function promiseToServiceCallback(promise) {\n if (typeof promise.then !== \"function\") {\n throw new Error(\"The provided input is not a Promise.\");\n }\n return cb => {\n promise.then(data => {\n return process.nextTick(cb, undefined, data.parsedBody, data.request, data);\n }).catch(err => {\n process.nextTick(cb, err);\n });\n };\n}\nexport function prepareXMLRootList(obj, elementName, xmlNamespaceKey, xmlNamespace) {\n if (!Array.isArray(obj)) {\n obj = [obj];\n }\n if (!xmlNamespaceKey || !xmlNamespace) {\n return {\n [elementName]: obj\n };\n }\n const result = {\n [elementName]: obj\n };\n result[XML_ATTRKEY] = {\n [xmlNamespaceKey]: xmlNamespace\n };\n return result;\n}\n/**\n * Applies the properties on the prototype of sourceCtors to the prototype of targetCtor\n * @param targetCtor - The target object on which the properties need to be applied.\n * @param sourceCtors - An array of source objects from which the properties need to be taken.\n */\nexport function applyMixins(targetCtorParam, sourceCtors) {\n const castTargetCtorParam = targetCtorParam;\n sourceCtors.forEach(sourceCtor => {\n Object.getOwnPropertyNames(sourceCtor.prototype).forEach(name => {\n castTargetCtorParam.prototype[name] = sourceCtor.prototype[name];\n });\n });\n}\nconst validateISODuration = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n/**\n * Indicates whether the given string is in ISO 8601 format.\n * @param value - The value to be validated for ISO 8601 duration format.\n * @returns `true` if valid, `false` otherwise.\n */\nexport function isDuration(value) {\n return validateISODuration.test(value);\n}\n/**\n * Replace all of the instances of searchValue in value with the provided replaceValue.\n * @param value - The value to search and replace in.\n * @param searchValue - The value to search for in the value argument.\n * @param replaceValue - The value to replace searchValue with in the value argument.\n * @returns The value where each instance of searchValue was replaced with replacedValue.\n */\nexport function replaceAll(value, searchValue, replaceValue) {\n return !value || !searchValue ? value : value.split(searchValue).join(replaceValue || \"\");\n}\n/**\n * Determines whether the given entity is a basic/primitive type\n * (string, number, boolean, null, undefined).\n * @param value - Any entity\n * @returns true is it is primitive type, false otherwise.\n */\nexport function isPrimitiveType(value) {\n return typeof value !== \"object\" && typeof value !== \"function\" || value === null;\n}\nexport function getEnvironmentValue(name) {\n if (process.env[name]) {\n return process.env[name];\n } else if (process.env[name.toLowerCase()]) {\n return process.env[name.toLowerCase()];\n }\n return undefined;\n}\n/**\n * @internal\n * @returns true when input is an object type that is not null, Array, RegExp, or Date.\n */\nexport function isObject(input) {\n return typeof input === \"object\" && input !== null && !Array.isArray(input) && !(input instanceof RegExp) && !(input instanceof Date);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/* eslint-disable eqeqeq */\nimport * as base64 from \"./util/base64\";\nimport * as utils from \"./util/utils\";\nimport { XML_ATTRKEY, XML_CHARKEY } from \"./util/serializer.common\";\n// This file contains utility code to serialize and deserialize network operations according to `OperationSpec` objects generated by AutoRest.TypeScript from OpenAPI specifications.\n/**\n * Used to map raw response objects to final shapes.\n * Helps packing and unpacking Dates and other encoded types that are not intrinsic to JSON.\n * Also allows pulling values from headers, as well as inserting default values and constants.\n */\nexport class Serializer {\n constructor(\n /**\n * The provided model mapper.\n */\n modelMappers = {},\n /**\n * Whether the contents are XML or not.\n */\n isXML) {\n this.modelMappers = modelMappers;\n this.isXML = isXML;\n }\n /**\n * Validates constraints, if any. This function will throw if the provided value does not respect those constraints.\n * @param mapper - The definition of data models.\n * @param value - The value.\n * @param objectName - Name of the object. Used in the error messages.\n * @deprecated Removing the constraints validation on client side.\n */\n validateConstraints(mapper, value, objectName) {\n const failValidation = (constraintName, constraintValue) => {\n throw new Error(`\"${objectName}\" with value \"${value}\" should satisfy the constraint \"${constraintName}\": ${constraintValue}.`);\n };\n if (mapper.constraints && value != undefined) {\n const valueAsNumber = value;\n const {\n ExclusiveMaximum,\n ExclusiveMinimum,\n InclusiveMaximum,\n InclusiveMinimum,\n MaxItems,\n MaxLength,\n MinItems,\n MinLength,\n MultipleOf,\n Pattern,\n UniqueItems\n } = mapper.constraints;\n if (ExclusiveMaximum != undefined && valueAsNumber >= ExclusiveMaximum) {\n failValidation(\"ExclusiveMaximum\", ExclusiveMaximum);\n }\n if (ExclusiveMinimum != undefined && valueAsNumber <= ExclusiveMinimum) {\n failValidation(\"ExclusiveMinimum\", ExclusiveMinimum);\n }\n if (InclusiveMaximum != undefined && valueAsNumber > InclusiveMaximum) {\n failValidation(\"InclusiveMaximum\", InclusiveMaximum);\n }\n if (InclusiveMinimum != undefined && valueAsNumber < InclusiveMinimum) {\n failValidation(\"InclusiveMinimum\", InclusiveMinimum);\n }\n const valueAsArray = value;\n if (MaxItems != undefined && valueAsArray.length > MaxItems) {\n failValidation(\"MaxItems\", MaxItems);\n }\n if (MaxLength != undefined && valueAsArray.length > MaxLength) {\n failValidation(\"MaxLength\", MaxLength);\n }\n if (MinItems != undefined && valueAsArray.length < MinItems) {\n failValidation(\"MinItems\", MinItems);\n }\n if (MinLength != undefined && valueAsArray.length < MinLength) {\n failValidation(\"MinLength\", MinLength);\n }\n if (MultipleOf != undefined && valueAsNumber % MultipleOf !== 0) {\n failValidation(\"MultipleOf\", MultipleOf);\n }\n if (Pattern) {\n const pattern = typeof Pattern === \"string\" ? new RegExp(Pattern) : Pattern;\n if (typeof value !== \"string\" || value.match(pattern) === null) {\n failValidation(\"Pattern\", Pattern);\n }\n }\n if (UniqueItems && valueAsArray.some((item, i, ar) => ar.indexOf(item) !== i)) {\n failValidation(\"UniqueItems\", UniqueItems);\n }\n }\n }\n /**\n * Serialize the given object based on its metadata defined in the mapper.\n *\n * @param mapper - The mapper which defines the metadata of the serializable object.\n * @param object - A valid Javascript object to be serialized.\n * @param objectName - Name of the serialized object.\n * @param options - additional options to deserialization.\n * @returns A valid serialized Javascript object.\n */\n serialize(mapper, object, objectName, options = {}) {\n var _a, _b, _c;\n const updatedOptions = {\n rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : \"\",\n includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,\n xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY\n };\n let payload = {};\n const mapperType = mapper.type.name;\n if (!objectName) {\n objectName = mapper.serializedName;\n }\n if (mapperType.match(/^Sequence$/i) !== null) {\n payload = [];\n }\n if (mapper.isConstant) {\n object = mapper.defaultValue;\n }\n // This table of allowed values should help explain\n // the mapper.required and mapper.nullable properties.\n // X means \"neither undefined or null are allowed\".\n // || required\n // || true | false\n // nullable || ==========================\n // true || null | undefined/null\n // false || X | undefined\n // undefined || X | undefined/null\n const {\n required,\n nullable\n } = mapper;\n if (required && nullable && object === undefined) {\n throw new Error(`${objectName} cannot be undefined.`);\n }\n if (required && !nullable && object == undefined) {\n throw new Error(`${objectName} cannot be null or undefined.`);\n }\n if (!required && nullable === false && object === null) {\n throw new Error(`${objectName} cannot be null.`);\n }\n if (object == undefined) {\n payload = object;\n } else {\n if (mapperType.match(/^any$/i) !== null) {\n payload = object;\n } else if (mapperType.match(/^(Number|String|Boolean|Object|Stream|Uuid)$/i) !== null) {\n payload = serializeBasicTypes(mapperType, objectName, object);\n } else if (mapperType.match(/^Enum$/i) !== null) {\n const enumMapper = mapper;\n payload = serializeEnumType(objectName, enumMapper.type.allowedValues, object);\n } else if (mapperType.match(/^(Date|DateTime|TimeSpan|DateTimeRfc1123|UnixTime)$/i) !== null) {\n payload = serializeDateTypes(mapperType, object, objectName);\n } else if (mapperType.match(/^ByteArray$/i) !== null) {\n payload = serializeByteArrayType(objectName, object);\n } else if (mapperType.match(/^Base64Url$/i) !== null) {\n payload = serializeBase64UrlType(objectName, object);\n } else if (mapperType.match(/^Sequence$/i) !== null) {\n payload = serializeSequenceType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions);\n } else if (mapperType.match(/^Dictionary$/i) !== null) {\n payload = serializeDictionaryType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions);\n } else if (mapperType.match(/^Composite$/i) !== null) {\n payload = serializeCompositeType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions);\n }\n }\n return payload;\n }\n /**\n * Deserialize the given object based on its metadata defined in the mapper.\n *\n * @param mapper - The mapper which defines the metadata of the serializable object.\n * @param responseBody - A valid Javascript entity to be deserialized.\n * @param objectName - Name of the deserialized object.\n * @param options - Controls behavior of XML parser and builder.\n * @returns A valid deserialized Javascript object.\n */\n deserialize(mapper, responseBody, objectName, options = {}) {\n var _a, _b, _c;\n const updatedOptions = {\n rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : \"\",\n includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,\n xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY\n };\n if (responseBody == undefined) {\n if (this.isXML && mapper.type.name === \"Sequence\" && !mapper.xmlIsWrapped) {\n // Edge case for empty XML non-wrapped lists. xml2js can't distinguish\n // between the list being empty versus being missing,\n // so let's do the more user-friendly thing and return an empty list.\n responseBody = [];\n }\n // specifically check for undefined as default value can be a falsey value `0, \"\", false, null`\n if (mapper.defaultValue !== undefined) {\n responseBody = mapper.defaultValue;\n }\n return responseBody;\n }\n let payload;\n const mapperType = mapper.type.name;\n if (!objectName) {\n objectName = mapper.serializedName;\n }\n if (mapperType.match(/^Composite$/i) !== null) {\n payload = deserializeCompositeType(this, mapper, responseBody, objectName, updatedOptions);\n } else {\n if (this.isXML) {\n const xmlCharKey = updatedOptions.xmlCharKey;\n const castResponseBody = responseBody;\n /**\n * If the mapper specifies this as a non-composite type value but the responseBody contains\n * both header (\"$\" i.e., XML_ATTRKEY) and body (\"#\" i.e., XML_CHARKEY) properties,\n * then just reduce the responseBody value to the body (\"#\" i.e., XML_CHARKEY) property.\n */\n if (castResponseBody[XML_ATTRKEY] != undefined && castResponseBody[xmlCharKey] != undefined) {\n responseBody = castResponseBody[xmlCharKey];\n }\n }\n if (mapperType.match(/^Number$/i) !== null) {\n payload = parseFloat(responseBody);\n if (isNaN(payload)) {\n payload = responseBody;\n }\n } else if (mapperType.match(/^Boolean$/i) !== null) {\n if (responseBody === \"true\") {\n payload = true;\n } else if (responseBody === \"false\") {\n payload = false;\n } else {\n payload = responseBody;\n }\n } else if (mapperType.match(/^(String|Enum|Object|Stream|Uuid|TimeSpan|any)$/i) !== null) {\n payload = responseBody;\n } else if (mapperType.match(/^(Date|DateTime|DateTimeRfc1123)$/i) !== null) {\n payload = new Date(responseBody);\n } else if (mapperType.match(/^UnixTime$/i) !== null) {\n payload = unixTimeToDate(responseBody);\n } else if (mapperType.match(/^ByteArray$/i) !== null) {\n payload = base64.decodeString(responseBody);\n } else if (mapperType.match(/^Base64Url$/i) !== null) {\n payload = base64UrlToByteArray(responseBody);\n } else if (mapperType.match(/^Sequence$/i) !== null) {\n payload = deserializeSequenceType(this, mapper, responseBody, objectName, updatedOptions);\n } else if (mapperType.match(/^Dictionary$/i) !== null) {\n payload = deserializeDictionaryType(this, mapper, responseBody, objectName, updatedOptions);\n }\n }\n if (mapper.isConstant) {\n payload = mapper.defaultValue;\n }\n return payload;\n }\n}\nfunction trimEnd(str, ch) {\n let len = str.length;\n while (len - 1 >= 0 && str[len - 1] === ch) {\n --len;\n }\n return str.substr(0, len);\n}\nfunction bufferToBase64Url(buffer) {\n if (!buffer) {\n return undefined;\n }\n if (!(buffer instanceof Uint8Array)) {\n throw new Error(`Please provide an input of type Uint8Array for converting to Base64Url.`);\n }\n // Uint8Array to Base64.\n const str = base64.encodeByteArray(buffer);\n // Base64 to Base64Url.\n return trimEnd(str, \"=\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n}\nfunction base64UrlToByteArray(str) {\n if (!str) {\n return undefined;\n }\n if (str && typeof str.valueOf() !== \"string\") {\n throw new Error(\"Please provide an input of type string for converting to Uint8Array\");\n }\n // Base64Url to Base64.\n str = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n // Base64 to Uint8Array.\n return base64.decodeString(str);\n}\nfunction splitSerializeName(prop) {\n const classes = [];\n let partialclass = \"\";\n if (prop) {\n const subwords = prop.split(\".\");\n for (const item of subwords) {\n if (item.charAt(item.length - 1) === \"\\\\\") {\n partialclass += item.substr(0, item.length - 1) + \".\";\n } else {\n partialclass += item;\n classes.push(partialclass);\n partialclass = \"\";\n }\n }\n }\n return classes;\n}\nfunction dateToUnixTime(d) {\n if (!d) {\n return undefined;\n }\n if (typeof d.valueOf() === \"string\") {\n d = new Date(d);\n }\n return Math.floor(d.getTime() / 1000);\n}\nfunction unixTimeToDate(n) {\n if (!n) {\n return undefined;\n }\n return new Date(n * 1000);\n}\nfunction serializeBasicTypes(typeName, objectName, value) {\n if (value !== null && value !== undefined) {\n if (typeName.match(/^Number$/i) !== null) {\n if (typeof value !== \"number\") {\n throw new Error(`${objectName} with value ${value} must be of type number.`);\n }\n } else if (typeName.match(/^String$/i) !== null) {\n if (typeof value.valueOf() !== \"string\") {\n throw new Error(`${objectName} with value \"${value}\" must be of type string.`);\n }\n } else if (typeName.match(/^Uuid$/i) !== null) {\n if (!(typeof value.valueOf() === \"string\" && utils.isValidUuid(value))) {\n throw new Error(`${objectName} with value \"${value}\" must be of type string and a valid uuid.`);\n }\n } else if (typeName.match(/^Boolean$/i) !== null) {\n if (typeof value !== \"boolean\") {\n throw new Error(`${objectName} with value ${value} must be of type boolean.`);\n }\n } else if (typeName.match(/^Stream$/i) !== null) {\n const objectType = typeof value;\n if (objectType !== \"string\" && objectType !== \"function\" && !(value instanceof ArrayBuffer) && !ArrayBuffer.isView(value) && !((typeof Blob === \"function\" || typeof Blob === \"object\") && value instanceof Blob)) {\n throw new Error(`${objectName} must be a string, Blob, ArrayBuffer, ArrayBufferView, or a function returning NodeJS.ReadableStream.`);\n }\n }\n }\n return value;\n}\nfunction serializeEnumType(objectName, allowedValues, value) {\n if (!allowedValues) {\n throw new Error(`Please provide a set of allowedValues to validate ${objectName} as an Enum Type.`);\n }\n const isPresent = allowedValues.some(item => {\n if (typeof item.valueOf() === \"string\") {\n return item.toLowerCase() === value.toLowerCase();\n }\n return item === value;\n });\n if (!isPresent) {\n throw new Error(`${value} is not a valid value for ${objectName}. The valid values are: ${JSON.stringify(allowedValues)}.`);\n }\n return value;\n}\nfunction serializeByteArrayType(objectName, value) {\n let returnValue = \"\";\n if (value != undefined) {\n if (!(value instanceof Uint8Array)) {\n throw new Error(`${objectName} must be of type Uint8Array.`);\n }\n returnValue = base64.encodeByteArray(value);\n }\n return returnValue;\n}\nfunction serializeBase64UrlType(objectName, value) {\n let returnValue = \"\";\n if (value != undefined) {\n if (!(value instanceof Uint8Array)) {\n throw new Error(`${objectName} must be of type Uint8Array.`);\n }\n returnValue = bufferToBase64Url(value) || \"\";\n }\n return returnValue;\n}\nfunction serializeDateTypes(typeName, value, objectName) {\n if (value != undefined) {\n if (typeName.match(/^Date$/i) !== null) {\n if (!(value instanceof Date || typeof value.valueOf() === \"string\" && !isNaN(Date.parse(value)))) {\n throw new Error(`${objectName} must be an instanceof Date or a string in ISO8601 format.`);\n }\n value = value instanceof Date ? value.toISOString().substring(0, 10) : new Date(value).toISOString().substring(0, 10);\n } else if (typeName.match(/^DateTime$/i) !== null) {\n if (!(value instanceof Date || typeof value.valueOf() === \"string\" && !isNaN(Date.parse(value)))) {\n throw new Error(`${objectName} must be an instanceof Date or a string in ISO8601 format.`);\n }\n value = value instanceof Date ? value.toISOString() : new Date(value).toISOString();\n } else if (typeName.match(/^DateTimeRfc1123$/i) !== null) {\n if (!(value instanceof Date || typeof value.valueOf() === \"string\" && !isNaN(Date.parse(value)))) {\n throw new Error(`${objectName} must be an instanceof Date or a string in RFC-1123 format.`);\n }\n value = value instanceof Date ? value.toUTCString() : new Date(value).toUTCString();\n } else if (typeName.match(/^UnixTime$/i) !== null) {\n if (!(value instanceof Date || typeof value.valueOf() === \"string\" && !isNaN(Date.parse(value)))) {\n throw new Error(`${objectName} must be an instanceof Date or a string in RFC-1123/ISO8601 format ` + `for it to be serialized in UnixTime/Epoch format.`);\n }\n value = dateToUnixTime(value);\n } else if (typeName.match(/^TimeSpan$/i) !== null) {\n if (!utils.isDuration(value)) {\n throw new Error(`${objectName} must be a string in ISO 8601 format. Instead was \"${value}\".`);\n }\n }\n }\n return value;\n}\nfunction serializeSequenceType(serializer, mapper, object, objectName, isXml, options) {\n if (!Array.isArray(object)) {\n throw new Error(`${objectName} must be of type Array.`);\n }\n const elementType = mapper.type.element;\n if (!elementType || typeof elementType !== \"object\") {\n throw new Error(`element\" metadata for an Array must be defined in the ` + `mapper and it must of type \"object\" in ${objectName}.`);\n }\n const tempArray = [];\n for (let i = 0; i < object.length; i++) {\n const serializedValue = serializer.serialize(elementType, object[i], objectName, options);\n if (isXml && elementType.xmlNamespace) {\n const xmlnsKey = elementType.xmlNamespacePrefix ? `xmlns:${elementType.xmlNamespacePrefix}` : \"xmlns\";\n if (elementType.type.name === \"Composite\") {\n tempArray[i] = Object.assign({}, serializedValue);\n tempArray[i][XML_ATTRKEY] = {\n [xmlnsKey]: elementType.xmlNamespace\n };\n } else {\n tempArray[i] = {};\n tempArray[i][options.xmlCharKey] = serializedValue;\n tempArray[i][XML_ATTRKEY] = {\n [xmlnsKey]: elementType.xmlNamespace\n };\n }\n } else {\n tempArray[i] = serializedValue;\n }\n }\n return tempArray;\n}\nfunction serializeDictionaryType(serializer, mapper, object, objectName, isXml, options) {\n if (typeof object !== \"object\") {\n throw new Error(`${objectName} must be of type object.`);\n }\n const valueType = mapper.type.value;\n if (!valueType || typeof valueType !== \"object\") {\n throw new Error(`\"value\" metadata for a Dictionary must be defined in the ` + `mapper and it must of type \"object\" in ${objectName}.`);\n }\n const tempDictionary = {};\n for (const key of Object.keys(object)) {\n const serializedValue = serializer.serialize(valueType, object[key], objectName, options);\n // If the element needs an XML namespace we need to add it within the $ property\n tempDictionary[key] = getXmlObjectValue(valueType, serializedValue, isXml, options);\n }\n // Add the namespace to the root element if needed\n if (isXml && mapper.xmlNamespace) {\n const xmlnsKey = mapper.xmlNamespacePrefix ? `xmlns:${mapper.xmlNamespacePrefix}` : \"xmlns\";\n const result = tempDictionary;\n result[XML_ATTRKEY] = {\n [xmlnsKey]: mapper.xmlNamespace\n };\n return result;\n }\n return tempDictionary;\n}\n/**\n * Resolves the additionalProperties property from a referenced mapper.\n * @param serializer - The serializer containing the entire set of mappers.\n * @param mapper - The composite mapper to resolve.\n * @param objectName - Name of the object being serialized.\n */\nfunction resolveAdditionalProperties(serializer, mapper, objectName) {\n const additionalProperties = mapper.type.additionalProperties;\n if (!additionalProperties && mapper.type.className) {\n const modelMapper = resolveReferencedMapper(serializer, mapper, objectName);\n return modelMapper === null || modelMapper === void 0 ? void 0 : modelMapper.type.additionalProperties;\n }\n return additionalProperties;\n}\n/**\n * Finds the mapper referenced by `className`.\n * @param serializer - The serializer containing the entire set of mappers\n * @param mapper - The composite mapper to resolve\n * @param objectName - Name of the object being serialized\n */\nfunction resolveReferencedMapper(serializer, mapper, objectName) {\n const className = mapper.type.className;\n if (!className) {\n throw new Error(`Class name for model \"${objectName}\" is not provided in the mapper \"${JSON.stringify(mapper, undefined, 2)}\".`);\n }\n return serializer.modelMappers[className];\n}\n/**\n * Resolves a composite mapper's modelProperties.\n * @param serializer - The serializer containing the entire set of mappers\n * @param mapper - The composite mapper to resolve\n */\nfunction resolveModelProperties(serializer, mapper, objectName) {\n let modelProps = mapper.type.modelProperties;\n if (!modelProps) {\n const modelMapper = resolveReferencedMapper(serializer, mapper, objectName);\n if (!modelMapper) {\n throw new Error(`mapper() cannot be null or undefined for model \"${mapper.type.className}\".`);\n }\n modelProps = modelMapper === null || modelMapper === void 0 ? void 0 : modelMapper.type.modelProperties;\n if (!modelProps) {\n throw new Error(`modelProperties cannot be null or undefined in the ` + `mapper \"${JSON.stringify(modelMapper)}\" of type \"${mapper.type.className}\" for object \"${objectName}\".`);\n }\n }\n return modelProps;\n}\nfunction serializeCompositeType(serializer, mapper, object, objectName, isXml, options) {\n if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {\n mapper = getPolymorphicMapper(serializer, mapper, object, \"clientName\");\n }\n if (object != undefined) {\n const payload = {};\n const modelProps = resolveModelProperties(serializer, mapper, objectName);\n for (const key of Object.keys(modelProps)) {\n const propertyMapper = modelProps[key];\n if (propertyMapper.readOnly) {\n continue;\n }\n let propName;\n let parentObject = payload;\n if (serializer.isXML) {\n if (propertyMapper.xmlIsWrapped) {\n propName = propertyMapper.xmlName;\n } else {\n propName = propertyMapper.xmlElementName || propertyMapper.xmlName;\n }\n } else {\n const paths = splitSerializeName(propertyMapper.serializedName);\n propName = paths.pop();\n for (const pathName of paths) {\n const childObject = parentObject[pathName];\n if (childObject == undefined && (object[key] != undefined || propertyMapper.defaultValue !== undefined)) {\n parentObject[pathName] = {};\n }\n parentObject = parentObject[pathName];\n }\n }\n if (parentObject != undefined) {\n if (isXml && mapper.xmlNamespace) {\n const xmlnsKey = mapper.xmlNamespacePrefix ? `xmlns:${mapper.xmlNamespacePrefix}` : \"xmlns\";\n parentObject[XML_ATTRKEY] = Object.assign(Object.assign({}, parentObject[XML_ATTRKEY]), {\n [xmlnsKey]: mapper.xmlNamespace\n });\n }\n const propertyObjectName = propertyMapper.serializedName !== \"\" ? objectName + \".\" + propertyMapper.serializedName : objectName;\n let toSerialize = object[key];\n const polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);\n if (polymorphicDiscriminator && polymorphicDiscriminator.clientName === key && toSerialize == undefined) {\n toSerialize = mapper.serializedName;\n }\n const serializedValue = serializer.serialize(propertyMapper, toSerialize, propertyObjectName, options);\n if (serializedValue !== undefined && propName != undefined) {\n const value = getXmlObjectValue(propertyMapper, serializedValue, isXml, options);\n if (isXml && propertyMapper.xmlIsAttribute) {\n // XML_ATTRKEY, i.e., $ is the key attributes are kept under in xml2js.\n // This keeps things simple while preventing name collision\n // with names in user documents.\n parentObject[XML_ATTRKEY] = parentObject[XML_ATTRKEY] || {};\n parentObject[XML_ATTRKEY][propName] = serializedValue;\n } else if (isXml && propertyMapper.xmlIsWrapped) {\n parentObject[propName] = {\n [propertyMapper.xmlElementName]: value\n };\n } else {\n parentObject[propName] = value;\n }\n }\n }\n }\n const additionalPropertiesMapper = resolveAdditionalProperties(serializer, mapper, objectName);\n if (additionalPropertiesMapper) {\n const propNames = Object.keys(modelProps);\n for (const clientPropName in object) {\n const isAdditionalProperty = propNames.every(pn => pn !== clientPropName);\n if (isAdditionalProperty) {\n payload[clientPropName] = serializer.serialize(additionalPropertiesMapper, object[clientPropName], objectName + '[\"' + clientPropName + '\"]', options);\n }\n }\n }\n return payload;\n }\n return object;\n}\nfunction getXmlObjectValue(propertyMapper, serializedValue, isXml, options) {\n if (!isXml || !propertyMapper.xmlNamespace) {\n return serializedValue;\n }\n const xmlnsKey = propertyMapper.xmlNamespacePrefix ? `xmlns:${propertyMapper.xmlNamespacePrefix}` : \"xmlns\";\n const xmlNamespace = {\n [xmlnsKey]: propertyMapper.xmlNamespace\n };\n if ([\"Composite\"].includes(propertyMapper.type.name)) {\n if (serializedValue[XML_ATTRKEY]) {\n return serializedValue;\n } else {\n const result = Object.assign({}, serializedValue);\n result[XML_ATTRKEY] = xmlNamespace;\n return result;\n }\n }\n const result = {};\n result[options.xmlCharKey] = serializedValue;\n result[XML_ATTRKEY] = xmlNamespace;\n return result;\n}\nfunction isSpecialXmlProperty(propertyName, options) {\n return [XML_ATTRKEY, options.xmlCharKey].includes(propertyName);\n}\nfunction deserializeCompositeType(serializer, mapper, responseBody, objectName, options) {\n var _a, _b;\n const xmlCharKey = (_a = options.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;\n if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {\n mapper = getPolymorphicMapper(serializer, mapper, responseBody, \"serializedName\");\n }\n const modelProps = resolveModelProperties(serializer, mapper, objectName);\n let instance = {};\n const handledPropertyNames = [];\n for (const key of Object.keys(modelProps)) {\n const propertyMapper = modelProps[key];\n const paths = splitSerializeName(modelProps[key].serializedName);\n handledPropertyNames.push(paths[0]);\n const {\n serializedName,\n xmlName,\n xmlElementName\n } = propertyMapper;\n let propertyObjectName = objectName;\n if (serializedName !== \"\" && serializedName !== undefined) {\n propertyObjectName = objectName + \".\" + serializedName;\n }\n const headerCollectionPrefix = propertyMapper.headerCollectionPrefix;\n if (headerCollectionPrefix) {\n const dictionary = {};\n for (const headerKey of Object.keys(responseBody)) {\n if (headerKey.startsWith(headerCollectionPrefix)) {\n dictionary[headerKey.substring(headerCollectionPrefix.length)] = serializer.deserialize(propertyMapper.type.value, responseBody[headerKey], propertyObjectName, options);\n }\n handledPropertyNames.push(headerKey);\n }\n instance[key] = dictionary;\n } else if (serializer.isXML) {\n if (propertyMapper.xmlIsAttribute && responseBody[XML_ATTRKEY]) {\n instance[key] = serializer.deserialize(propertyMapper, responseBody[XML_ATTRKEY][xmlName], propertyObjectName, options);\n } else if (propertyMapper.xmlIsMsText) {\n if (responseBody[xmlCharKey] !== undefined) {\n instance[key] = responseBody[xmlCharKey];\n } else if (typeof responseBody === \"string\") {\n // The special case where xml parser parses \"content\" into JSON of\n // `{ name: \"content\"}` instead of `{ name: { \"_\": \"content\" }}`\n instance[key] = responseBody;\n }\n } else {\n const propertyName = xmlElementName || xmlName || serializedName;\n if (propertyMapper.xmlIsWrapped) {\n /* a list of wrapped by \n For the xml example below\n \n ...\n ...\n \n the responseBody has\n {\n Cors: {\n CorsRule: [{...}, {...}]\n }\n }\n xmlName is \"Cors\" and xmlElementName is\"CorsRule\".\n */\n const wrapped = responseBody[xmlName];\n const elementList = (_b = wrapped === null || wrapped === void 0 ? void 0 : wrapped[xmlElementName]) !== null && _b !== void 0 ? _b : [];\n instance[key] = serializer.deserialize(propertyMapper, elementList, propertyObjectName, options);\n handledPropertyNames.push(xmlName);\n } else {\n const property = responseBody[propertyName];\n instance[key] = serializer.deserialize(propertyMapper, property, propertyObjectName, options);\n handledPropertyNames.push(propertyName);\n }\n }\n } else {\n // deserialize the property if it is present in the provided responseBody instance\n let propertyInstance;\n let res = responseBody;\n // traversing the object step by step.\n for (const item of paths) {\n if (!res) break;\n res = res[item];\n }\n propertyInstance = res;\n const polymorphicDiscriminator = mapper.type.polymorphicDiscriminator;\n // checking that the model property name (key)(ex: \"fishtype\") and the\n // clientName of the polymorphicDiscriminator {metadata} (ex: \"fishtype\")\n // instead of the serializedName of the polymorphicDiscriminator (ex: \"fish.type\")\n // is a better approach. The generator is not consistent with escaping '\\.' in the\n // serializedName of the property (ex: \"fish\\.type\") that is marked as polymorphic discriminator\n // and the serializedName of the metadata polymorphicDiscriminator (ex: \"fish.type\"). However,\n // the clientName transformation of the polymorphicDiscriminator (ex: \"fishtype\") and\n // the transformation of model property name (ex: \"fishtype\") is done consistently.\n // Hence, it is a safer bet to rely on the clientName of the polymorphicDiscriminator.\n if (polymorphicDiscriminator && key === polymorphicDiscriminator.clientName && propertyInstance == undefined) {\n propertyInstance = mapper.serializedName;\n }\n let serializedValue;\n // paging\n if (Array.isArray(responseBody[key]) && modelProps[key].serializedName === \"\") {\n propertyInstance = responseBody[key];\n const arrayInstance = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName, options);\n // Copy over any properties that have already been added into the instance, where they do\n // not exist on the newly de-serialized array\n for (const [k, v] of Object.entries(instance)) {\n if (!Object.prototype.hasOwnProperty.call(arrayInstance, k)) {\n arrayInstance[k] = v;\n }\n }\n instance = arrayInstance;\n } else if (propertyInstance !== undefined || propertyMapper.defaultValue !== undefined) {\n serializedValue = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName, options);\n instance[key] = serializedValue;\n }\n }\n }\n const additionalPropertiesMapper = mapper.type.additionalProperties;\n if (additionalPropertiesMapper) {\n const isAdditionalProperty = responsePropName => {\n for (const clientPropName in modelProps) {\n const paths = splitSerializeName(modelProps[clientPropName].serializedName);\n if (paths[0] === responsePropName) {\n return false;\n }\n }\n return true;\n };\n for (const responsePropName in responseBody) {\n if (isAdditionalProperty(responsePropName)) {\n instance[responsePropName] = serializer.deserialize(additionalPropertiesMapper, responseBody[responsePropName], objectName + '[\"' + responsePropName + '\"]', options);\n }\n }\n } else if (responseBody) {\n for (const key of Object.keys(responseBody)) {\n if (instance[key] === undefined && !handledPropertyNames.includes(key) && !isSpecialXmlProperty(key, options)) {\n instance[key] = responseBody[key];\n }\n }\n }\n return instance;\n}\nfunction deserializeDictionaryType(serializer, mapper, responseBody, objectName, options) {\n const value = mapper.type.value;\n if (!value || typeof value !== \"object\") {\n throw new Error(`\"value\" metadata for a Dictionary must be defined in the ` + `mapper and it must of type \"object\" in ${objectName}`);\n }\n if (responseBody) {\n const tempDictionary = {};\n for (const key of Object.keys(responseBody)) {\n tempDictionary[key] = serializer.deserialize(value, responseBody[key], objectName, options);\n }\n return tempDictionary;\n }\n return responseBody;\n}\nfunction deserializeSequenceType(serializer, mapper, responseBody, objectName, options) {\n const element = mapper.type.element;\n if (!element || typeof element !== \"object\") {\n throw new Error(`element\" metadata for an Array must be defined in the ` + `mapper and it must of type \"object\" in ${objectName}`);\n }\n if (responseBody) {\n if (!Array.isArray(responseBody)) {\n // xml2js will interpret a single element array as just the element, so force it to be an array\n responseBody = [responseBody];\n }\n const tempArray = [];\n for (let i = 0; i < responseBody.length; i++) {\n tempArray[i] = serializer.deserialize(element, responseBody[i], `${objectName}[${i}]`, options);\n }\n return tempArray;\n }\n return responseBody;\n}\nfunction getPolymorphicMapper(serializer, mapper, object, polymorphicPropertyName) {\n const polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);\n if (polymorphicDiscriminator) {\n const discriminatorName = polymorphicDiscriminator[polymorphicPropertyName];\n if (discriminatorName != undefined) {\n const discriminatorValue = object[discriminatorName];\n if (discriminatorValue != undefined) {\n const typeName = mapper.type.uberParent || mapper.type.className;\n const indexDiscriminator = discriminatorValue === typeName ? discriminatorValue : typeName + \".\" + discriminatorValue;\n const polymorphicMapper = serializer.modelMappers.discriminators[indexDiscriminator];\n if (polymorphicMapper) {\n mapper = polymorphicMapper;\n }\n }\n }\n }\n return mapper;\n}\nfunction getPolymorphicDiscriminatorRecursively(serializer, mapper) {\n return mapper.type.polymorphicDiscriminator || getPolymorphicDiscriminatorSafely(serializer, mapper.type.uberParent) || getPolymorphicDiscriminatorSafely(serializer, mapper.type.className);\n}\nfunction getPolymorphicDiscriminatorSafely(serializer, typeName) {\n return typeName && serializer.modelMappers[typeName] && serializer.modelMappers[typeName].type.polymorphicDiscriminator;\n}\n/**\n * Utility function that serializes an object that might contain binary information into a plain object, array or a string.\n */\nexport function serializeObject(toSerialize) {\n const castToSerialize = toSerialize;\n if (toSerialize == undefined) return undefined;\n if (toSerialize instanceof Uint8Array) {\n toSerialize = base64.encodeByteArray(toSerialize);\n return toSerialize;\n } else if (toSerialize instanceof Date) {\n return toSerialize.toISOString();\n } else if (Array.isArray(toSerialize)) {\n const array = [];\n for (let i = 0; i < toSerialize.length; i++) {\n array.push(serializeObject(toSerialize[i]));\n }\n return array;\n } else if (typeof toSerialize === \"object\") {\n const dictionary = {};\n for (const property in toSerialize) {\n dictionary[property] = serializeObject(castToSerialize[property]);\n }\n return dictionary;\n }\n return toSerialize;\n}\n/**\n * Utility function to create a K:V from a list of strings\n */\nfunction strEnum(o) {\n const result = {};\n for (const key of o) {\n result[key] = key;\n }\n return result;\n}\n/**\n * String enum containing the string types of property mappers.\n */\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MapperType = strEnum([\"Base64Url\", \"Boolean\", \"ByteArray\", \"Composite\", \"Date\", \"DateTime\", \"DateTimeRfc1123\", \"Dictionary\", \"Enum\", \"Number\", \"Object\", \"Sequence\", \"String\", \"Stream\", \"TimeSpan\", \"UnixTime\"]);\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { HttpHeaders, isHttpHeadersLike } from \"./httpHeaders\";\nimport { Serializer } from \"./serializer\";\nimport { generateUuid } from \"./util/utils\";\nexport function isWebResourceLike(object) {\n if (object && typeof object === \"object\") {\n const castObject = object;\n if (typeof castObject.url === \"string\" && typeof castObject.method === \"string\" && typeof castObject.headers === \"object\" && isHttpHeadersLike(castObject.headers) && typeof castObject.validateRequestProperties === \"function\" && typeof castObject.prepare === \"function\" && typeof castObject.clone === \"function\") {\n return true;\n }\n }\n return false;\n}\n/**\n * Creates a new WebResource object.\n *\n * This class provides an abstraction over a REST call by being library / implementation agnostic and wrapping the necessary\n * properties to initiate a request.\n */\nexport class WebResource {\n constructor(url, method, body, query, headers, streamResponseBody, withCredentials, abortSignal, timeout, onUploadProgress, onDownloadProgress, proxySettings, keepAlive, decompressResponse, streamResponseStatusCodes) {\n this.streamResponseBody = streamResponseBody;\n this.streamResponseStatusCodes = streamResponseStatusCodes;\n this.url = url || \"\";\n this.method = method || \"GET\";\n this.headers = isHttpHeadersLike(headers) ? headers : new HttpHeaders(headers);\n this.body = body;\n this.query = query;\n this.formData = undefined;\n this.withCredentials = withCredentials || false;\n this.abortSignal = abortSignal;\n this.timeout = timeout || 0;\n this.onUploadProgress = onUploadProgress;\n this.onDownloadProgress = onDownloadProgress;\n this.proxySettings = proxySettings;\n this.keepAlive = keepAlive;\n this.decompressResponse = decompressResponse;\n this.requestId = this.headers.get(\"x-ms-client-request-id\") || generateUuid();\n }\n /**\n * Validates that the required properties such as method, url, headers[\"Content-Type\"],\n * headers[\"accept-language\"] are defined. It will throw an error if one of the above\n * mentioned properties are not defined.\n */\n validateRequestProperties() {\n if (!this.method) {\n throw new Error(\"WebResource.method is required.\");\n }\n if (!this.url) {\n throw new Error(\"WebResource.url is required.\");\n }\n }\n /**\n * Prepares the request.\n * @param options - Options to provide for preparing the request.\n * @returns Returns the prepared WebResource (HTTP Request) object that needs to be given to the request pipeline.\n */\n prepare(options) {\n if (!options) {\n throw new Error(\"options object is required\");\n }\n if (options.method === undefined || options.method === null || typeof options.method.valueOf() !== \"string\") {\n throw new Error(\"options.method must be a string.\");\n }\n if (options.url && options.pathTemplate) {\n throw new Error(\"options.url and options.pathTemplate are mutually exclusive. Please provide exactly one of them.\");\n }\n if ((options.pathTemplate === undefined || options.pathTemplate === null || typeof options.pathTemplate.valueOf() !== \"string\") && (options.url === undefined || options.url === null || typeof options.url.valueOf() !== \"string\")) {\n throw new Error(\"Please provide exactly one of options.pathTemplate or options.url.\");\n }\n // set the url if it is provided.\n if (options.url) {\n if (typeof options.url !== \"string\") {\n throw new Error('options.url must be of type \"string\".');\n }\n this.url = options.url;\n }\n // set the method\n if (options.method) {\n const validMethods = [\"GET\", \"PUT\", \"HEAD\", \"DELETE\", \"OPTIONS\", \"POST\", \"PATCH\", \"TRACE\"];\n if (validMethods.indexOf(options.method.toUpperCase()) === -1) {\n throw new Error('The provided method \"' + options.method + '\" is invalid. Supported HTTP methods are: ' + JSON.stringify(validMethods));\n }\n }\n this.method = options.method.toUpperCase();\n // construct the url if path template is provided\n if (options.pathTemplate) {\n const {\n pathTemplate,\n pathParameters\n } = options;\n if (typeof pathTemplate !== \"string\") {\n throw new Error('options.pathTemplate must be of type \"string\".');\n }\n if (!options.baseUrl) {\n options.baseUrl = \"https://management.azure.com\";\n }\n const baseUrl = options.baseUrl;\n let url = baseUrl + (baseUrl.endsWith(\"/\") ? \"\" : \"/\") + (pathTemplate.startsWith(\"/\") ? pathTemplate.slice(1) : pathTemplate);\n const segments = url.match(/({[\\w-]*\\s*[\\w-]*})/gi);\n if (segments && segments.length) {\n if (!pathParameters) {\n throw new Error(`pathTemplate: ${pathTemplate} has been provided. Hence, options.pathParameters must also be provided.`);\n }\n segments.forEach(function (item) {\n const pathParamName = item.slice(1, -1);\n const pathParam = pathParameters[pathParamName];\n if (pathParam === null || pathParam === undefined || !(typeof pathParam === \"string\" || typeof pathParam === \"object\")) {\n const stringifiedPathParameters = JSON.stringify(pathParameters, undefined, 2);\n throw new Error(`pathTemplate: ${pathTemplate} contains the path parameter ${pathParamName}` + ` however, it is not present in parameters: ${stringifiedPathParameters}.` + `The value of the path parameter can either be a \"string\" of the form { ${pathParamName}: \"some sample value\" } or ` + `it can be an \"object\" of the form { \"${pathParamName}\": { value: \"some sample value\", skipUrlEncoding: true } }.`);\n }\n if (typeof pathParam.valueOf() === \"string\") {\n url = url.replace(item, encodeURIComponent(pathParam));\n }\n if (typeof pathParam.valueOf() === \"object\") {\n if (!pathParam.value) {\n throw new Error(`options.pathParameters[${pathParamName}] is of type \"object\" but it does not contain a \"value\" property.`);\n }\n if (pathParam.skipUrlEncoding) {\n url = url.replace(item, pathParam.value);\n } else {\n url = url.replace(item, encodeURIComponent(pathParam.value));\n }\n }\n });\n }\n this.url = url;\n }\n // append query parameters to the url if they are provided. They can be provided with pathTemplate or url option.\n if (options.queryParameters) {\n const queryParameters = options.queryParameters;\n if (typeof queryParameters !== \"object\") {\n throw new Error(`options.queryParameters must be of type object. It should be a JSON object ` + `of \"query-parameter-name\" as the key and the \"query-parameter-value\" as the value. ` + `The \"query-parameter-value\" may be fo type \"string\" or an \"object\" of the form { value: \"query-parameter-value\", skipUrlEncoding: true }.`);\n }\n // append question mark if it is not present in the url\n if (this.url && this.url.indexOf(\"?\") === -1) {\n this.url += \"?\";\n }\n // construct queryString\n const queryParams = [];\n // We need to populate this.query as a dictionary if the request is being used for Sway's validateRequest().\n this.query = {};\n for (const queryParamName in queryParameters) {\n const queryParam = queryParameters[queryParamName];\n if (queryParam) {\n if (typeof queryParam === \"string\") {\n queryParams.push(queryParamName + \"=\" + encodeURIComponent(queryParam));\n this.query[queryParamName] = encodeURIComponent(queryParam);\n } else if (typeof queryParam === \"object\") {\n if (!queryParam.value) {\n throw new Error(`options.queryParameters[${queryParamName}] is of type \"object\" but it does not contain a \"value\" property.`);\n }\n if (queryParam.skipUrlEncoding) {\n queryParams.push(queryParamName + \"=\" + queryParam.value);\n this.query[queryParamName] = queryParam.value;\n } else {\n queryParams.push(queryParamName + \"=\" + encodeURIComponent(queryParam.value));\n this.query[queryParamName] = encodeURIComponent(queryParam.value);\n }\n }\n }\n } // end-of-for\n // append the queryString\n this.url += queryParams.join(\"&\");\n }\n // add headers to the request if they are provided\n if (options.headers) {\n const headers = options.headers;\n for (const headerName of Object.keys(options.headers)) {\n this.headers.set(headerName, headers[headerName]);\n }\n }\n // ensure accept-language is set correctly\n if (!this.headers.get(\"accept-language\")) {\n this.headers.set(\"accept-language\", \"en-US\");\n }\n // ensure the request-id is set correctly\n if (!this.headers.get(\"x-ms-client-request-id\") && !options.disableClientRequestId) {\n this.headers.set(\"x-ms-client-request-id\", this.requestId);\n }\n // default\n if (!this.headers.get(\"Content-Type\")) {\n this.headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n // set the request body. request.js automatically sets the Content-Length request header, so we need not set it explicitly\n this.body = options.body;\n if (options.body !== undefined && options.body !== null) {\n // body as a stream special case. set the body as-is and check for some special request headers specific to sending a stream.\n if (options.bodyIsStream) {\n if (!this.headers.get(\"Transfer-Encoding\")) {\n this.headers.set(\"Transfer-Encoding\", \"chunked\");\n }\n if (this.headers.get(\"Content-Type\") !== \"application/octet-stream\") {\n this.headers.set(\"Content-Type\", \"application/octet-stream\");\n }\n } else {\n if (options.serializationMapper) {\n this.body = new Serializer(options.mappers).serialize(options.serializationMapper, options.body, \"requestBody\");\n }\n if (!options.disableJsonStringifyOnBody) {\n this.body = JSON.stringify(options.body);\n }\n }\n }\n if (options.spanOptions) {\n this.spanOptions = options.spanOptions;\n }\n if (options.tracingContext) {\n this.tracingContext = options.tracingContext;\n }\n this.abortSignal = options.abortSignal;\n this.onDownloadProgress = options.onDownloadProgress;\n this.onUploadProgress = options.onUploadProgress;\n return this;\n }\n /**\n * Clone this WebResource HTTP request object.\n * @returns The clone of this WebResource HTTP request object.\n */\n clone() {\n const result = new WebResource(this.url, this.method, this.body, this.query, this.headers && this.headers.clone(), this.streamResponseBody, this.withCredentials, this.abortSignal, this.timeout, this.onUploadProgress, this.onDownloadProgress, this.proxySettings, this.keepAlive, this.decompressResponse, this.streamResponseStatusCodes);\n if (this.formData) {\n result.formData = this.formData;\n }\n if (this.operationSpec) {\n result.operationSpec = this.operationSpec;\n }\n if (this.shouldDeserialize) {\n result.shouldDeserialize = this.shouldDeserialize;\n }\n if (this.operationResponseGetter) {\n result.operationResponseGetter = this.operationResponseGetter;\n }\n return result;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { AbortSignal, abortSignal } from \"./AbortSignal\";\n/**\n * This error is thrown when an asynchronous operation has been aborted.\n * Check for this error by testing the `name` that the name property of the\n * error matches `\"AbortError\"`.\n *\n * @example\n * ```ts\n * const controller = new AbortController();\n * controller.abort();\n * try {\n * doAsyncWork(controller.signal)\n * } catch (e) {\n * if (e.name === 'AbortError') {\n * // handle abort error here.\n * }\n * }\n * ```\n */\nexport class AbortError extends Error {\n constructor(message) {\n super(message);\n this.name = \"AbortError\";\n }\n}\n/**\n * An AbortController provides an AbortSignal and the associated controls to signal\n * that an asynchronous operation should be aborted.\n *\n * @example\n * Abort an operation when another event fires\n * ```ts\n * const controller = new AbortController();\n * const signal = controller.signal;\n * doAsyncWork(signal);\n * button.addEventListener('click', () => controller.abort());\n * ```\n *\n * @example\n * Share aborter cross multiple operations in 30s\n * ```ts\n * // Upload the same data to 2 different data centers at the same time,\n * // abort another when any of them is finished\n * const controller = AbortController.withTimeout(30 * 1000);\n * doAsyncWork(controller.signal).then(controller.abort);\n * doAsyncWork(controller.signal).then(controller.abort);\n *```\n *\n * @example\n * Cascaded aborting\n * ```ts\n * // All operations can't take more than 30 seconds\n * const aborter = Aborter.timeout(30 * 1000);\n *\n * // Following 2 operations can't take more than 25 seconds\n * await doAsyncWork(aborter.withTimeout(25 * 1000));\n * await doAsyncWork(aborter.withTimeout(25 * 1000));\n * ```\n */\nexport class AbortController {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n constructor(parentSignals) {\n this._signal = new AbortSignal();\n if (!parentSignals) {\n return;\n }\n // coerce parentSignals into an array\n if (!Array.isArray(parentSignals)) {\n // eslint-disable-next-line prefer-rest-params\n parentSignals = arguments;\n }\n for (const parentSignal of parentSignals) {\n // if the parent signal has already had abort() called,\n // then call abort on this signal as well.\n if (parentSignal.aborted) {\n this.abort();\n } else {\n // when the parent signal aborts, this signal should as well.\n parentSignal.addEventListener(\"abort\", () => {\n this.abort();\n });\n }\n }\n }\n /**\n * The AbortSignal associated with this controller that will signal aborted\n * when the abort method is called on this controller.\n *\n * @readonly\n */\n get signal() {\n return this._signal;\n }\n /**\n * Signal that any operations passed this controller's associated abort signal\n * to cancel any remaining work and throw an `AbortError`.\n */\n abort() {\n abortSignal(this._signal);\n }\n /**\n * Creates a new AbortSignal instance that will abort after the provided ms.\n * @param ms - Elapsed time in milliseconds to trigger an abort.\n */\n static timeout(ms) {\n const signal = new AbortSignal();\n const timer = setTimeout(abortSignal, ms, signal);\n // Prevent the active Timer from keeping the Node.js event loop active.\n if (typeof timer.unref === \"function\") {\n timer.unref();\n }\n return signal;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { replaceAll } from \"./util/utils\";\n/**\n * A class that handles the query portion of a URLBuilder.\n */\nexport class URLQuery {\n constructor() {\n this._rawQuery = {};\n }\n /**\n * Get whether or not there any query parameters in this URLQuery.\n */\n any() {\n return Object.keys(this._rawQuery).length > 0;\n }\n /**\n * Get the keys of the query string.\n */\n keys() {\n return Object.keys(this._rawQuery);\n }\n /**\n * Set a query parameter with the provided name and value. If the parameterValue is undefined or\n * empty, then this will attempt to remove an existing query parameter with the provided\n * parameterName.\n */\n set(parameterName, parameterValue) {\n const caseParameterValue = parameterValue;\n if (parameterName) {\n if (caseParameterValue !== undefined && caseParameterValue !== null) {\n const newValue = Array.isArray(caseParameterValue) ? caseParameterValue : caseParameterValue.toString();\n this._rawQuery[parameterName] = newValue;\n } else {\n delete this._rawQuery[parameterName];\n }\n }\n }\n /**\n * Get the value of the query parameter with the provided name. If no parameter exists with the\n * provided parameter name, then undefined will be returned.\n */\n get(parameterName) {\n return parameterName ? this._rawQuery[parameterName] : undefined;\n }\n /**\n * Get the string representation of this query. The return value will not start with a \"?\".\n */\n toString() {\n let result = \"\";\n for (const parameterName in this._rawQuery) {\n if (result) {\n result += \"&\";\n }\n const parameterValue = this._rawQuery[parameterName];\n if (Array.isArray(parameterValue)) {\n const parameterStrings = [];\n for (const parameterValueElement of parameterValue) {\n parameterStrings.push(`${parameterName}=${parameterValueElement}`);\n }\n result += parameterStrings.join(\"&\");\n } else {\n result += `${parameterName}=${parameterValue}`;\n }\n }\n return result;\n }\n /**\n * Parse a URLQuery from the provided text.\n */\n static parse(text) {\n const result = new URLQuery();\n if (text) {\n if (text.startsWith(\"?\")) {\n text = text.substring(1);\n }\n let currentState = \"ParameterName\";\n let parameterName = \"\";\n let parameterValue = \"\";\n for (let i = 0; i < text.length; ++i) {\n const currentCharacter = text[i];\n switch (currentState) {\n case \"ParameterName\":\n switch (currentCharacter) {\n case \"=\":\n currentState = \"ParameterValue\";\n break;\n case \"&\":\n parameterName = \"\";\n parameterValue = \"\";\n break;\n default:\n parameterName += currentCharacter;\n break;\n }\n break;\n case \"ParameterValue\":\n switch (currentCharacter) {\n case \"&\":\n result.set(parameterName, parameterValue);\n parameterName = \"\";\n parameterValue = \"\";\n currentState = \"ParameterName\";\n break;\n default:\n parameterValue += currentCharacter;\n break;\n }\n break;\n default:\n throw new Error(\"Unrecognized URLQuery parse state: \" + currentState);\n }\n }\n if (currentState === \"ParameterValue\") {\n result.set(parameterName, parameterValue);\n }\n }\n return result;\n }\n}\n/**\n * A class that handles creating, modifying, and parsing URLs.\n */\nexport class URLBuilder {\n /**\n * Set the scheme/protocol for this URL. If the provided scheme contains other parts of a URL\n * (such as a host, port, path, or query), those parts will be added to this URL as well.\n */\n setScheme(scheme) {\n if (!scheme) {\n this._scheme = undefined;\n } else {\n this.set(scheme, \"SCHEME\");\n }\n }\n /**\n * Get the scheme that has been set in this URL.\n */\n getScheme() {\n return this._scheme;\n }\n /**\n * Set the host for this URL. If the provided host contains other parts of a URL (such as a\n * port, path, or query), those parts will be added to this URL as well.\n */\n setHost(host) {\n if (!host) {\n this._host = undefined;\n } else {\n this.set(host, \"SCHEME_OR_HOST\");\n }\n }\n /**\n * Get the host that has been set in this URL.\n */\n getHost() {\n return this._host;\n }\n /**\n * Set the port for this URL. If the provided port contains other parts of a URL (such as a\n * path or query), those parts will be added to this URL as well.\n */\n setPort(port) {\n if (port === undefined || port === null || port === \"\") {\n this._port = undefined;\n } else {\n this.set(port.toString(), \"PORT\");\n }\n }\n /**\n * Get the port that has been set in this URL.\n */\n getPort() {\n return this._port;\n }\n /**\n * Set the path for this URL. If the provided path contains a query, then it will be added to\n * this URL as well.\n */\n setPath(path) {\n if (!path) {\n this._path = undefined;\n } else {\n const schemeIndex = path.indexOf(\"://\");\n if (schemeIndex !== -1) {\n const schemeStart = path.lastIndexOf(\"/\", schemeIndex);\n // Make sure to only grab the URL part of the path before setting the state back to SCHEME\n // this will handle cases such as \"/a/b/c/https://microsoft.com\" => \"https://microsoft.com\"\n this.set(schemeStart === -1 ? path : path.substr(schemeStart + 1), \"SCHEME\");\n } else {\n this.set(path, \"PATH\");\n }\n }\n }\n /**\n * Append the provided path to this URL's existing path. If the provided path contains a query,\n * then it will be added to this URL as well.\n */\n appendPath(path) {\n if (path) {\n let currentPath = this.getPath();\n if (currentPath) {\n if (!currentPath.endsWith(\"/\")) {\n currentPath += \"/\";\n }\n if (path.startsWith(\"/\")) {\n path = path.substring(1);\n }\n path = currentPath + path;\n }\n this.set(path, \"PATH\");\n }\n }\n /**\n * Get the path that has been set in this URL.\n */\n getPath() {\n return this._path;\n }\n /**\n * Set the query in this URL.\n */\n setQuery(query) {\n if (!query) {\n this._query = undefined;\n } else {\n this._query = URLQuery.parse(query);\n }\n }\n /**\n * Set a query parameter with the provided name and value in this URL's query. If the provided\n * query parameter value is undefined or empty, then the query parameter will be removed if it\n * existed.\n */\n setQueryParameter(queryParameterName, queryParameterValue) {\n if (queryParameterName) {\n if (!this._query) {\n this._query = new URLQuery();\n }\n this._query.set(queryParameterName, queryParameterValue);\n }\n }\n /**\n * Get the value of the query parameter with the provided query parameter name. If no query\n * parameter exists with the provided name, then undefined will be returned.\n */\n getQueryParameterValue(queryParameterName) {\n return this._query ? this._query.get(queryParameterName) : undefined;\n }\n /**\n * Get the query in this URL.\n */\n getQuery() {\n return this._query ? this._query.toString() : undefined;\n }\n /**\n * Set the parts of this URL by parsing the provided text using the provided startState.\n */\n set(text, startState) {\n const tokenizer = new URLTokenizer(text, startState);\n while (tokenizer.next()) {\n const token = tokenizer.current();\n let tokenPath;\n if (token) {\n switch (token.type) {\n case \"SCHEME\":\n this._scheme = token.text || undefined;\n break;\n case \"HOST\":\n this._host = token.text || undefined;\n break;\n case \"PORT\":\n this._port = token.text || undefined;\n break;\n case \"PATH\":\n tokenPath = token.text || undefined;\n if (!this._path || this._path === \"/\" || tokenPath !== \"/\") {\n this._path = tokenPath;\n }\n break;\n case \"QUERY\":\n this._query = URLQuery.parse(token.text);\n break;\n default:\n throw new Error(`Unrecognized URLTokenType: ${token.type}`);\n }\n }\n }\n }\n /**\n * Serializes the URL as a string.\n * @returns the URL as a string.\n */\n toString() {\n let result = \"\";\n if (this._scheme) {\n result += `${this._scheme}://`;\n }\n if (this._host) {\n result += this._host;\n }\n if (this._port) {\n result += `:${this._port}`;\n }\n if (this._path) {\n if (!this._path.startsWith(\"/\")) {\n result += \"/\";\n }\n result += this._path;\n }\n if (this._query && this._query.any()) {\n result += `?${this._query.toString()}`;\n }\n return result;\n }\n /**\n * If the provided searchValue is found in this URLBuilder, then replace it with the provided\n * replaceValue.\n */\n replaceAll(searchValue, replaceValue) {\n if (searchValue) {\n this.setScheme(replaceAll(this.getScheme(), searchValue, replaceValue));\n this.setHost(replaceAll(this.getHost(), searchValue, replaceValue));\n this.setPort(replaceAll(this.getPort(), searchValue, replaceValue));\n this.setPath(replaceAll(this.getPath(), searchValue, replaceValue));\n this.setQuery(replaceAll(this.getQuery(), searchValue, replaceValue));\n }\n }\n /**\n * Parses a given string URL into a new {@link URLBuilder}.\n */\n static parse(text) {\n const result = new URLBuilder();\n result.set(text, \"SCHEME_OR_HOST\");\n return result;\n }\n}\nexport class URLToken {\n constructor(text, type) {\n this.text = text;\n this.type = type;\n }\n static scheme(text) {\n return new URLToken(text, \"SCHEME\");\n }\n static host(text) {\n return new URLToken(text, \"HOST\");\n }\n static port(text) {\n return new URLToken(text, \"PORT\");\n }\n static path(text) {\n return new URLToken(text, \"PATH\");\n }\n static query(text) {\n return new URLToken(text, \"QUERY\");\n }\n}\n/**\n * Get whether or not the provided character (single character string) is an alphanumeric (letter or\n * digit) character.\n */\nexport function isAlphaNumericCharacter(character) {\n const characterCode = character.charCodeAt(0);\n return 48 /* '0' */ <= characterCode && characterCode <= 57 /* '9' */ || 65 /* 'A' */ <= characterCode && characterCode <= 90 /* 'Z' */ || 97 /* 'a' */ <= characterCode && characterCode <= 122 /* 'z' */;\n}\n/**\n * A class that tokenizes URL strings.\n */\nexport class URLTokenizer {\n constructor(_text, state) {\n this._text = _text;\n this._textLength = _text ? _text.length : 0;\n this._currentState = state !== undefined && state !== null ? state : \"SCHEME_OR_HOST\";\n this._currentIndex = 0;\n }\n /**\n * Get the current URLToken this URLTokenizer is pointing at, or undefined if the URLTokenizer\n * hasn't started or has finished tokenizing.\n */\n current() {\n return this._currentToken;\n }\n /**\n * Advance to the next URLToken and return whether or not a URLToken was found.\n */\n next() {\n if (!hasCurrentCharacter(this)) {\n this._currentToken = undefined;\n } else {\n switch (this._currentState) {\n case \"SCHEME\":\n nextScheme(this);\n break;\n case \"SCHEME_OR_HOST\":\n nextSchemeOrHost(this);\n break;\n case \"HOST\":\n nextHost(this);\n break;\n case \"PORT\":\n nextPort(this);\n break;\n case \"PATH\":\n nextPath(this);\n break;\n case \"QUERY\":\n nextQuery(this);\n break;\n default:\n throw new Error(`Unrecognized URLTokenizerState: ${this._currentState}`);\n }\n }\n return !!this._currentToken;\n }\n}\n/**\n * Read the remaining characters from this Tokenizer's character stream.\n */\nfunction readRemaining(tokenizer) {\n let result = \"\";\n if (tokenizer._currentIndex < tokenizer._textLength) {\n result = tokenizer._text.substring(tokenizer._currentIndex);\n tokenizer._currentIndex = tokenizer._textLength;\n }\n return result;\n}\n/**\n * Whether or not this URLTokenizer has a current character.\n */\nfunction hasCurrentCharacter(tokenizer) {\n return tokenizer._currentIndex < tokenizer._textLength;\n}\n/**\n * Get the character in the text string at the current index.\n */\nfunction getCurrentCharacter(tokenizer) {\n return tokenizer._text[tokenizer._currentIndex];\n}\n/**\n * Advance to the character in text that is \"step\" characters ahead. If no step value is provided,\n * then step will default to 1.\n */\nfunction nextCharacter(tokenizer, step) {\n if (hasCurrentCharacter(tokenizer)) {\n if (!step) {\n step = 1;\n }\n tokenizer._currentIndex += step;\n }\n}\n/**\n * Starting with the current character, peek \"charactersToPeek\" number of characters ahead in this\n * Tokenizer's stream of characters.\n */\nfunction peekCharacters(tokenizer, charactersToPeek) {\n let endIndex = tokenizer._currentIndex + charactersToPeek;\n if (tokenizer._textLength < endIndex) {\n endIndex = tokenizer._textLength;\n }\n return tokenizer._text.substring(tokenizer._currentIndex, endIndex);\n}\n/**\n * Read characters from this Tokenizer until the end of the stream or until the provided condition\n * is false when provided the current character.\n */\nfunction readWhile(tokenizer, condition) {\n let result = \"\";\n while (hasCurrentCharacter(tokenizer)) {\n const currentCharacter = getCurrentCharacter(tokenizer);\n if (!condition(currentCharacter)) {\n break;\n } else {\n result += currentCharacter;\n nextCharacter(tokenizer);\n }\n }\n return result;\n}\n/**\n * Read characters from this Tokenizer until a non-alphanumeric character or the end of the\n * character stream is reached.\n */\nfunction readWhileLetterOrDigit(tokenizer) {\n return readWhile(tokenizer, character => isAlphaNumericCharacter(character));\n}\n/**\n * Read characters from this Tokenizer until one of the provided terminating characters is read or\n * the end of the character stream is reached.\n */\nfunction readUntilCharacter(tokenizer, ...terminatingCharacters) {\n return readWhile(tokenizer, character => terminatingCharacters.indexOf(character) === -1);\n}\nfunction nextScheme(tokenizer) {\n const scheme = readWhileLetterOrDigit(tokenizer);\n tokenizer._currentToken = URLToken.scheme(scheme);\n if (!hasCurrentCharacter(tokenizer)) {\n tokenizer._currentState = \"DONE\";\n } else {\n tokenizer._currentState = \"HOST\";\n }\n}\nfunction nextSchemeOrHost(tokenizer) {\n const schemeOrHost = readUntilCharacter(tokenizer, \":\", \"/\", \"?\");\n if (!hasCurrentCharacter(tokenizer)) {\n tokenizer._currentToken = URLToken.host(schemeOrHost);\n tokenizer._currentState = \"DONE\";\n } else if (getCurrentCharacter(tokenizer) === \":\") {\n if (peekCharacters(tokenizer, 3) === \"://\") {\n tokenizer._currentToken = URLToken.scheme(schemeOrHost);\n tokenizer._currentState = \"HOST\";\n } else {\n tokenizer._currentToken = URLToken.host(schemeOrHost);\n tokenizer._currentState = \"PORT\";\n }\n } else {\n tokenizer._currentToken = URLToken.host(schemeOrHost);\n if (getCurrentCharacter(tokenizer) === \"/\") {\n tokenizer._currentState = \"PATH\";\n } else {\n tokenizer._currentState = \"QUERY\";\n }\n }\n}\nfunction nextHost(tokenizer) {\n if (peekCharacters(tokenizer, 3) === \"://\") {\n nextCharacter(tokenizer, 3);\n }\n const host = readUntilCharacter(tokenizer, \":\", \"/\", \"?\");\n tokenizer._currentToken = URLToken.host(host);\n if (!hasCurrentCharacter(tokenizer)) {\n tokenizer._currentState = \"DONE\";\n } else if (getCurrentCharacter(tokenizer) === \":\") {\n tokenizer._currentState = \"PORT\";\n } else if (getCurrentCharacter(tokenizer) === \"/\") {\n tokenizer._currentState = \"PATH\";\n } else {\n tokenizer._currentState = \"QUERY\";\n }\n}\nfunction nextPort(tokenizer) {\n if (getCurrentCharacter(tokenizer) === \":\") {\n nextCharacter(tokenizer);\n }\n const port = readUntilCharacter(tokenizer, \"/\", \"?\");\n tokenizer._currentToken = URLToken.port(port);\n if (!hasCurrentCharacter(tokenizer)) {\n tokenizer._currentState = \"DONE\";\n } else if (getCurrentCharacter(tokenizer) === \"/\") {\n tokenizer._currentState = \"PATH\";\n } else {\n tokenizer._currentState = \"QUERY\";\n }\n}\nfunction nextPath(tokenizer) {\n const path = readUntilCharacter(tokenizer, \"?\");\n tokenizer._currentToken = URLToken.path(path);\n if (!hasCurrentCharacter(tokenizer)) {\n tokenizer._currentState = \"DONE\";\n } else {\n tokenizer._currentState = \"QUERY\";\n }\n}\nfunction nextQuery(tokenizer) {\n if (getCurrentCharacter(tokenizer) === \"?\") {\n nextCharacter(tokenizer);\n }\n const query = readRemaining(tokenizer);\n tokenizer._currentToken = URLToken.query(query);\n tokenizer._currentState = \"DONE\";\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { URLBuilder, URLQuery } from \"../url\";\nimport { isObject } from \"./utils\";\nconst RedactedString = \"REDACTED\";\nconst defaultAllowedHeaderNames = [\"x-ms-client-request-id\", \"x-ms-return-client-request-id\", \"x-ms-useragent\", \"x-ms-correlation-request-id\", \"x-ms-request-id\", \"client-request-id\", \"ms-cv\", \"return-client-request-id\", \"traceparent\", \"Access-Control-Allow-Credentials\", \"Access-Control-Allow-Headers\", \"Access-Control-Allow-Methods\", \"Access-Control-Allow-Origin\", \"Access-Control-Expose-Headers\", \"Access-Control-Max-Age\", \"Access-Control-Request-Headers\", \"Access-Control-Request-Method\", \"Origin\", \"Accept\", \"Accept-Encoding\", \"Cache-Control\", \"Connection\", \"Content-Length\", \"Content-Type\", \"Date\", \"ETag\", \"Expires\", \"If-Match\", \"If-Modified-Since\", \"If-None-Match\", \"If-Unmodified-Since\", \"Last-Modified\", \"Pragma\", \"Request-Id\", \"Retry-After\", \"Server\", \"Transfer-Encoding\", \"User-Agent\", \"WWW-Authenticate\"];\nconst defaultAllowedQueryParameters = [\"api-version\"];\nexport class Sanitizer {\n constructor({\n allowedHeaderNames = [],\n allowedQueryParameters = []\n } = {}) {\n allowedHeaderNames = Array.isArray(allowedHeaderNames) ? defaultAllowedHeaderNames.concat(allowedHeaderNames) : defaultAllowedHeaderNames;\n allowedQueryParameters = Array.isArray(allowedQueryParameters) ? defaultAllowedQueryParameters.concat(allowedQueryParameters) : defaultAllowedQueryParameters;\n this.allowedHeaderNames = new Set(allowedHeaderNames.map(n => n.toLowerCase()));\n this.allowedQueryParameters = new Set(allowedQueryParameters.map(p => p.toLowerCase()));\n }\n sanitize(obj) {\n const seen = new Set();\n return JSON.stringify(obj, (key, value) => {\n // Ensure Errors include their interesting non-enumerable members\n if (value instanceof Error) {\n return Object.assign(Object.assign({}, value), {\n name: value.name,\n message: value.message\n });\n }\n if (key === \"_headersMap\") {\n return this.sanitizeHeaders(value);\n } else if (key === \"url\") {\n return this.sanitizeUrl(value);\n } else if (key === \"query\") {\n return this.sanitizeQuery(value);\n } else if (key === \"body\") {\n // Don't log the request body\n return undefined;\n } else if (key === \"response\") {\n // Don't log response again\n return undefined;\n } else if (key === \"operationSpec\") {\n // When using sendOperationRequest, the request carries a massive\n // field with the autorest spec. No need to log it.\n return undefined;\n } else if (Array.isArray(value) || isObject(value)) {\n if (seen.has(value)) {\n return \"[Circular]\";\n }\n seen.add(value);\n }\n return value;\n }, 2);\n }\n sanitizeHeaders(value) {\n return this.sanitizeObject(value, this.allowedHeaderNames, (v, k) => v[k].value);\n }\n sanitizeQuery(value) {\n return this.sanitizeObject(value, this.allowedQueryParameters, (v, k) => v[k]);\n }\n sanitizeObject(value, allowedKeys, accessor) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n const sanitized = {};\n for (const k of Object.keys(value)) {\n if (allowedKeys.has(k.toLowerCase())) {\n sanitized[k] = accessor(value, k);\n } else {\n sanitized[k] = RedactedString;\n }\n }\n return sanitized;\n }\n sanitizeUrl(value) {\n if (typeof value !== \"string\" || value === null) {\n return value;\n }\n const urlBuilder = URLBuilder.parse(value);\n const queryString = urlBuilder.getQuery();\n if (!queryString) {\n return value;\n }\n const query = URLQuery.parse(queryString);\n for (const k of query.keys()) {\n if (!this.allowedQueryParameters.has(k.toLowerCase())) {\n query.set(k, RedactedString);\n }\n }\n urlBuilder.setQuery(query.toString());\n return urlBuilder.toString();\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport const custom = {};\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { HttpOperationResponse } from \"./httpOperationResponse\";\nimport { Sanitizer } from \"./util/sanitizer\";\nimport { WebResourceLike } from \"./webResource\";\nimport { custom } from \"./util/inspect\";\n\nconst errorSanitizer = new Sanitizer();\n\n/**\n * An error resulting from an HTTP request to a service endpoint.\n */\nexport class RestError extends Error {\n /**\n * A constant string to identify errors that may arise when making an HTTP request that indicates an issue with the transport layer (e.g. the hostname of the URL cannot be resolved via DNS.)\n */\n static readonly REQUEST_SEND_ERROR: string = \"REQUEST_SEND_ERROR\";\n /**\n * A constant string to identify errors that may arise from parsing an incoming HTTP response. Usually indicates a malformed HTTP body, such as an encoded JSON payload that is incomplete.\n */\n static readonly PARSE_ERROR: string = \"PARSE_ERROR\";\n\n /**\n * The error code, if any. Can be one of the static error code properties (REQUEST_SEND_ERROR / PARSE_ERROR) or can be a string code from an underlying system call (E_NOENT).\n */\n code?: string;\n /**\n * The HTTP status code of the response, if one was returned.\n */\n statusCode?: number;\n /**\n * Outgoing request.\n */\n request?: WebResourceLike;\n /**\n * Incoming response.\n */\n response?: HttpOperationResponse;\n /**\n * Any additional details. In the case of deserialization errors, can be the processed response.\n */\n details?: unknown;\n constructor(\n message: string,\n code?: string,\n statusCode?: number,\n request?: WebResourceLike,\n response?: HttpOperationResponse\n ) {\n super(message);\n this.name = \"RestError\";\n this.code = code;\n this.statusCode = statusCode;\n this.request = request;\n this.response = response;\n\n Object.setPrototypeOf(this, RestError.prototype);\n }\n\n /**\n * Logging method for util.inspect in Node\n */\n [custom](): string {\n return `RestError: ${this.message} \\n ${errorSanitizer.sanitize(this)}`;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { HttpHeaders } from \"./httpHeaders\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport { RestError } from \"./restError\";\n/**\n * A HttpClient implementation that uses XMLHttpRequest to send HTTP requests.\n */\nexport class XhrHttpClient {\n sendRequest(request) {\n var _a;\n const xhr = new XMLHttpRequest();\n if (request.proxySettings) {\n throw new Error(\"HTTP proxy is not supported in browser environment\");\n }\n const abortSignal = request.abortSignal;\n if (abortSignal) {\n if (abortSignal.aborted) {\n return Promise.reject(new AbortError(\"The operation was aborted.\"));\n }\n const listener = () => {\n xhr.abort();\n };\n abortSignal.addEventListener(\"abort\", listener);\n xhr.addEventListener(\"readystatechange\", () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n abortSignal.removeEventListener(\"abort\", listener);\n }\n });\n }\n addProgressListener(xhr.upload, request.onUploadProgress);\n addProgressListener(xhr, request.onDownloadProgress);\n if (request.formData) {\n const formData = request.formData;\n const requestForm = new FormData();\n const appendFormValue = (key, value) => {\n if (value && Object.prototype.hasOwnProperty.call(value, \"value\") && Object.prototype.hasOwnProperty.call(value, \"options\")) {\n requestForm.append(key, value.value, value.options);\n } else {\n requestForm.append(key, value);\n }\n };\n for (const formKey of Object.keys(formData)) {\n const formValue = formData[formKey];\n if (Array.isArray(formValue)) {\n for (let j = 0; j < formValue.length; j++) {\n appendFormValue(formKey, formValue[j]);\n }\n } else {\n appendFormValue(formKey, formValue);\n }\n }\n request.body = requestForm;\n request.formData = undefined;\n const contentType = request.headers.get(\"Content-Type\");\n if (contentType && contentType.indexOf(\"multipart/form-data\") !== -1) {\n // browser will automatically apply a suitable content-type header\n request.headers.remove(\"Content-Type\");\n }\n }\n xhr.open(request.method, request.url);\n xhr.timeout = request.timeout;\n xhr.withCredentials = request.withCredentials;\n for (const header of request.headers.headersArray()) {\n xhr.setRequestHeader(header.name, header.value);\n }\n xhr.responseType = ((_a = request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.size) || request.streamResponseBody ? \"blob\" : \"text\";\n // tslint:disable-next-line:no-null-keyword\n xhr.send(request.body === undefined ? null : request.body);\n if (xhr.responseType === \"blob\") {\n return new Promise((resolve, reject) => {\n handleBlobResponse(xhr, request, resolve, reject);\n rejectOnTerminalEvent(request, xhr, reject);\n });\n } else {\n return new Promise(function (resolve, reject) {\n xhr.addEventListener(\"load\", () => resolve({\n request,\n status: xhr.status,\n headers: parseHeaders(xhr),\n bodyAsText: xhr.responseText\n }));\n rejectOnTerminalEvent(request, xhr, reject);\n });\n }\n }\n}\nfunction handleBlobResponse(xhr, request, res, rej) {\n xhr.addEventListener(\"readystatechange\", () => {\n var _a;\n // Resolve as soon as headers are loaded\n if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {\n if (request.streamResponseBody || ((_a = request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(xhr.status))) {\n const blobBody = new Promise((resolve, reject) => {\n xhr.addEventListener(\"load\", () => {\n resolve(xhr.response);\n });\n rejectOnTerminalEvent(request, xhr, reject);\n });\n res({\n request,\n status: xhr.status,\n headers: parseHeaders(xhr),\n blobBody\n });\n } else {\n xhr.addEventListener(\"load\", () => {\n // xhr.response is of Blob type if the request is sent with xhr.responseType === \"blob\"\n // but the status code is not one of the stream response status codes,\n // so treat it as text and convert from Blob to text\n if (xhr.response) {\n // Blob.text() is not supported in IE so using FileReader instead\n const reader = new FileReader();\n reader.onload = function (e) {\n var _a;\n const text = (_a = e.target) === null || _a === void 0 ? void 0 : _a.result;\n res({\n request,\n status: xhr.status,\n headers: parseHeaders(xhr),\n bodyAsText: text\n });\n };\n reader.onerror = function (_e) {\n rej(reader.error);\n };\n reader.readAsText(xhr.response, \"UTF-8\");\n } else {\n res({\n request,\n status: xhr.status,\n headers: parseHeaders(xhr)\n });\n }\n });\n }\n }\n });\n}\nfunction addProgressListener(xhr, listener) {\n if (listener) {\n xhr.addEventListener(\"progress\", rawEvent => listener({\n loadedBytes: rawEvent.loaded\n }));\n }\n}\n// exported locally for testing\nexport function parseHeaders(xhr) {\n const responseHeaders = new HttpHeaders();\n const headerLines = xhr.getAllResponseHeaders().trim().split(/[\\r\\n]+/);\n for (const line of headerLines) {\n const index = line.indexOf(\":\");\n const headerName = line.slice(0, index);\n const headerValue = line.slice(index + 2);\n responseHeaders.set(headerName, headerValue);\n }\n return responseHeaders;\n}\nfunction rejectOnTerminalEvent(request, xhr, reject) {\n xhr.addEventListener(\"error\", () => reject(new RestError(`Failed to send request to ${request.url}`, RestError.REQUEST_SEND_ERROR, undefined, request)));\n const abortError = new AbortError(\"The operation was aborted.\");\n xhr.addEventListener(\"abort\", () => reject(abortError));\n xhr.addEventListener(\"timeout\", () => reject(abortError));\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * The different levels of logs that can be used with the HttpPipelineLogger.\n */\nexport var HttpPipelineLogLevel = /*#__PURE__*/function (HttpPipelineLogLevel) {\n /**\n * A log level that indicates that no logs will be logged.\n */\n HttpPipelineLogLevel[HttpPipelineLogLevel[\"OFF\"] = 0] = \"OFF\";\n /**\n * An error log.\n */\n HttpPipelineLogLevel[HttpPipelineLogLevel[\"ERROR\"] = 1] = \"ERROR\";\n /**\n * A warning log.\n */\n HttpPipelineLogLevel[HttpPipelineLogLevel[\"WARNING\"] = 2] = \"WARNING\";\n /**\n * An information log.\n */\n HttpPipelineLogLevel[HttpPipelineLogLevel[\"INFO\"] = 3] = \"INFO\";\n return HttpPipelineLogLevel;\n}(HttpPipelineLogLevel || {});\n\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { __rest } from \"tslib\";\n/**\n * Converts an OperationOptions to a RequestOptionsBase\n *\n * @param opts - OperationOptions object to convert to RequestOptionsBase\n */\nexport function operationOptionsToRequestOptionsBase(opts) {\n const {\n requestOptions,\n tracingOptions\n } = opts,\n additionalOptions = __rest(opts, [\"requestOptions\", \"tracingOptions\"]);\n let result = additionalOptions;\n if (requestOptions) {\n result = Object.assign(Object.assign({}, result), requestOptions);\n }\n if (tracingOptions) {\n result.tracingContext = tracingOptions.tracingContext;\n // By passing spanOptions if they exist at runtime, we're backwards compatible with @azure/core-tracing@preview.13 and earlier.\n result.spanOptions = tracingOptions === null || tracingOptions === void 0 ? void 0 : tracingOptions.spanOptions;\n }\n return result;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { HttpPipelineLogLevel } from \"../httpPipelineLogLevel\";\n/**\n * The base class from which all request policies derive.\n */\nexport class BaseRequestPolicy {\n /**\n * The main method to implement that manipulates a request/response.\n */\n constructor(\n /**\n * The next policy in the pipeline. Each policy is responsible for executing the next one if the request is to continue through the pipeline.\n */\n _nextPolicy,\n /**\n * The options that can be passed to a given request policy.\n */\n _options) {\n this._nextPolicy = _nextPolicy;\n this._options = _options;\n }\n /**\n * Get whether or not a log with the provided log level should be logged.\n * @param logLevel - The log level of the log that will be logged.\n * @returns Whether or not a log with the provided log level should be logged.\n */\n shouldLog(logLevel) {\n return this._options.shouldLog(logLevel);\n }\n /**\n * Attempt to log the provided message to the provided logger. If no logger was provided or if\n * the log level does not meat the logger's threshold, then nothing will be logged.\n * @param logLevel - The log level of this log.\n * @param message - The message of this log.\n */\n log(logLevel, message) {\n this._options.log(logLevel, message);\n }\n}\n/**\n * Optional properties that can be used when creating a RequestPolicy.\n */\nexport class RequestPolicyOptions {\n constructor(_logger) {\n this._logger = _logger;\n }\n /**\n * Get whether or not a log with the provided log level should be logged.\n * @param logLevel - The log level of the log that will be logged.\n * @returns Whether or not a log with the provided log level should be logged.\n */\n shouldLog(logLevel) {\n return !!this._logger && logLevel !== HttpPipelineLogLevel.OFF && logLevel <= this._logger.minimumLogLevel;\n }\n /**\n * Attempt to log the provided message to the provided logger. If no logger was provided or if\n * the log level does not meet the logger's threshold, then nothing will be logged.\n * @param logLevel - The log level of this log.\n * @param message - The message of this log.\n */\n log(logLevel, message) {\n if (this._logger && this.shouldLog(logLevel)) {\n this._logger.log(logLevel, message);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { XML_ATTRKEY, XML_CHARKEY } from \"./serializer.common\";\nif (!self.document || !self.DOMParser || !self.Node || !self.XMLSerializer) {\n throw new Error(`This library depends on the following DOM objects: [\"document\", \"DOMParser\", \"Node\", \"XMLSerializer\"] to parse XML, but some of these are undefined. You may provide a polyfill to make these globally available in order to support your environment. For more information, please refer to https://aka.ms/azsdk/js/web-workers. `);\n}\nlet cachedDoc;\nfunction getDoc() {\n if (!cachedDoc) {\n cachedDoc = document.implementation.createDocument(null, null, null);\n }\n return cachedDoc;\n}\nlet cachedParser;\nfunction getParser() {\n if (!cachedParser) {\n cachedParser = new DOMParser();\n }\n return cachedParser;\n}\nlet cachedSerializer;\nfunction getSerializer() {\n if (!cachedSerializer) {\n cachedSerializer = new XMLSerializer();\n }\n return cachedSerializer;\n}\n// Policy to make our code Trusted Types compliant.\n// https://github.com/w3c/webappsec-trusted-types\n// We are calling DOMParser.parseFromString() to parse XML payload from Azure services.\n// The parsed DOM object is not exposed to outside. Scripts are disabled when parsing\n// according to the spec. There are no HTML/XSS security concerns on the usage of\n// parseFromString() here.\nlet ttPolicy;\nif (typeof self.trustedTypes !== \"undefined\") {\n ttPolicy = self.trustedTypes.createPolicy(\"@azure/core-http#xml.browser\", {\n createHTML: s => s\n });\n}\nexport function parseXML(str, opts = {}) {\n var _a, _b, _c, _d;\n try {\n const updatedOptions = {\n rootName: (_a = opts.rootName) !== null && _a !== void 0 ? _a : \"\",\n includeRoot: (_b = opts.includeRoot) !== null && _b !== void 0 ? _b : false,\n xmlCharKey: (_c = opts.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY\n };\n const dom = getParser().parseFromString((_d = ttPolicy === null || ttPolicy === void 0 ? void 0 : ttPolicy.createHTML(str)) !== null && _d !== void 0 ? _d : str, \"application/xml\");\n throwIfError(dom);\n let obj;\n if (updatedOptions.includeRoot) {\n obj = domToObject(dom, updatedOptions);\n } else {\n obj = domToObject(dom.childNodes[0], updatedOptions);\n }\n return Promise.resolve(obj);\n } catch (err) {\n return Promise.reject(err);\n }\n}\nlet errorNS;\nfunction getErrorNamespace() {\n var _a, _b;\n if (errorNS === undefined) {\n try {\n const invalidXML = (_a = ttPolicy === null || ttPolicy === void 0 ? void 0 : ttPolicy.createHTML(\"INVALID\")) !== null && _a !== void 0 ? _a : \"INVALID\";\n errorNS = (_b = getParser().parseFromString(invalidXML, \"text/xml\").getElementsByTagName(\"parsererror\")[0].namespaceURI) !== null && _b !== void 0 ? _b : \"\";\n } catch (ignored) {\n // Most browsers will return a document containing , but IE will throw.\n errorNS = \"\";\n }\n }\n return errorNS;\n}\nfunction throwIfError(dom) {\n const parserErrors = dom.getElementsByTagName(\"parsererror\");\n if (parserErrors.length > 0 && getErrorNamespace()) {\n for (let i = 0; i < parserErrors.length; i++) {\n if (parserErrors[i].namespaceURI === errorNS) {\n throw new Error(parserErrors[i].innerHTML);\n }\n }\n }\n}\nfunction isElement(node) {\n return !!node.attributes;\n}\n/**\n * Get the Element-typed version of the provided Node if the provided node is an element with\n * attributes. If it isn't, then undefined is returned.\n */\nfunction asElementWithAttributes(node) {\n return isElement(node) && node.hasAttributes() ? node : undefined;\n}\nfunction domToObject(node, options) {\n let result = {};\n const childNodeCount = node.childNodes.length;\n const firstChildNode = node.childNodes[0];\n const onlyChildTextValue = firstChildNode && childNodeCount === 1 && firstChildNode.nodeType === Node.TEXT_NODE && firstChildNode.nodeValue || undefined;\n const elementWithAttributes = asElementWithAttributes(node);\n if (elementWithAttributes) {\n result[XML_ATTRKEY] = {};\n for (let i = 0; i < elementWithAttributes.attributes.length; i++) {\n const attr = elementWithAttributes.attributes[i];\n result[XML_ATTRKEY][attr.nodeName] = attr.nodeValue;\n }\n if (onlyChildTextValue) {\n result[options.xmlCharKey] = onlyChildTextValue;\n }\n } else if (childNodeCount === 0) {\n result = \"\";\n } else if (onlyChildTextValue) {\n result = onlyChildTextValue;\n }\n if (!onlyChildTextValue) {\n for (let i = 0; i < childNodeCount; i++) {\n const child = node.childNodes[i];\n // Ignore leading/trailing whitespace nodes\n if (child.nodeType !== Node.TEXT_NODE) {\n const childObject = domToObject(child, options);\n if (!result[child.nodeName]) {\n result[child.nodeName] = childObject;\n } else if (Array.isArray(result[child.nodeName])) {\n result[child.nodeName].push(childObject);\n } else {\n result[child.nodeName] = [result[child.nodeName], childObject];\n }\n }\n }\n }\n return result;\n}\nexport function stringifyXML(content, opts = {}) {\n var _a, _b, _c;\n const updatedOptions = {\n rootName: (_a = opts.rootName) !== null && _a !== void 0 ? _a : \"root\",\n includeRoot: (_b = opts.includeRoot) !== null && _b !== void 0 ? _b : false,\n xmlCharKey: (_c = opts.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY\n };\n const dom = buildNode(content, updatedOptions.rootName, updatedOptions)[0];\n return '' + getSerializer().serializeToString(dom);\n}\nfunction buildAttributes(attrs) {\n const result = [];\n for (const key of Object.keys(attrs)) {\n const attr = getDoc().createAttribute(key);\n attr.value = attrs[key].toString();\n result.push(attr);\n }\n return result;\n}\nfunction buildNode(obj, elementName, options) {\n if (obj === undefined || obj === null || typeof obj === \"string\" || typeof obj === \"number\" || typeof obj === \"boolean\") {\n const elem = getDoc().createElement(elementName);\n elem.textContent = obj === undefined || obj === null ? \"\" : obj.toString();\n return [elem];\n } else if (Array.isArray(obj)) {\n const result = [];\n for (const arrayElem of obj) {\n for (const child of buildNode(arrayElem, elementName, options)) {\n result.push(child);\n }\n }\n return result;\n } else if (typeof obj === \"object\") {\n const elem = getDoc().createElement(elementName);\n for (const key of Object.keys(obj)) {\n if (key === XML_ATTRKEY) {\n for (const attr of buildAttributes(obj[key])) {\n elem.attributes.setNamedItem(attr);\n }\n } else if (key === options.xmlCharKey) {\n elem.textContent = obj[key].toString();\n } else {\n for (const child of buildNode(obj[key], key, options)) {\n elem.appendChild(child);\n }\n }\n }\n return [elem];\n } else {\n throw new Error(`Illegal value passed to buildObject: ${obj}`);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nimport { XML_CHARKEY } from \"../util/serializer.common\";\nimport { MapperType } from \"../serializer\";\nimport { RestError } from \"../restError\";\nimport { parseXML } from \"../util/xml\";\n/**\n * Create a new serialization RequestPolicyCreator that will serialized HTTP request bodies as they\n * pass through the HTTP pipeline.\n */\nexport function deserializationPolicy(deserializationContentTypes, parsingOptions) {\n return {\n create: (nextPolicy, options) => {\n return new DeserializationPolicy(nextPolicy, options, deserializationContentTypes, parsingOptions);\n }\n };\n}\nexport const defaultJsonContentTypes = [\"application/json\", \"text/json\"];\nexport const defaultXmlContentTypes = [\"application/xml\", \"application/atom+xml\"];\nexport const DefaultDeserializationOptions = {\n expectedContentTypes: {\n json: defaultJsonContentTypes,\n xml: defaultXmlContentTypes\n }\n};\n/**\n * A RequestPolicy that will deserialize HTTP response bodies and headers as they pass through the\n * HTTP pipeline.\n */\nexport class DeserializationPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, requestPolicyOptions, deserializationContentTypes, parsingOptions = {}) {\n var _a;\n super(nextPolicy, requestPolicyOptions);\n this.jsonContentTypes = deserializationContentTypes && deserializationContentTypes.json || defaultJsonContentTypes;\n this.xmlContentTypes = deserializationContentTypes && deserializationContentTypes.xml || defaultXmlContentTypes;\n this.xmlCharKey = (_a = parsingOptions.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;\n }\n async sendRequest(request) {\n return this._nextPolicy.sendRequest(request).then(response => deserializeResponseBody(this.jsonContentTypes, this.xmlContentTypes, response, {\n xmlCharKey: this.xmlCharKey\n }));\n }\n}\nfunction getOperationResponse(parsedResponse) {\n let result;\n const request = parsedResponse.request;\n const operationSpec = request.operationSpec;\n if (operationSpec) {\n const operationResponseGetter = request.operationResponseGetter;\n if (!operationResponseGetter) {\n result = operationSpec.responses[parsedResponse.status];\n } else {\n result = operationResponseGetter(operationSpec, parsedResponse);\n }\n }\n return result;\n}\nfunction shouldDeserializeResponse(parsedResponse) {\n const shouldDeserialize = parsedResponse.request.shouldDeserialize;\n let result;\n if (shouldDeserialize === undefined) {\n result = true;\n } else if (typeof shouldDeserialize === \"boolean\") {\n result = shouldDeserialize;\n } else {\n result = shouldDeserialize(parsedResponse);\n }\n return result;\n}\n/**\n * Given a particular set of content types to parse as either JSON or XML, consumes the HTTP response to produce the result object defined by the request's {@link OperationSpec}.\n * @param jsonContentTypes - Response content types to parse the body as JSON.\n * @param xmlContentTypes - Response content types to parse the body as XML.\n * @param response - HTTP Response from the pipeline.\n * @param options - Options to the serializer, mostly for configuring the XML parser if needed.\n * @returns A parsed {@link HttpOperationResponse} object that can be returned by the {@link ServiceClient}.\n */\nexport function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options = {}) {\n var _a, _b, _c;\n const updatedOptions = {\n rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : \"\",\n includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,\n xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY\n };\n return parse(jsonContentTypes, xmlContentTypes, response, updatedOptions).then(parsedResponse => {\n if (!shouldDeserializeResponse(parsedResponse)) {\n return parsedResponse;\n }\n const operationSpec = parsedResponse.request.operationSpec;\n if (!operationSpec || !operationSpec.responses) {\n return parsedResponse;\n }\n const responseSpec = getOperationResponse(parsedResponse);\n const {\n error,\n shouldReturnResponse\n } = handleErrorResponse(parsedResponse, operationSpec, responseSpec);\n if (error) {\n throw error;\n } else if (shouldReturnResponse) {\n return parsedResponse;\n }\n // An operation response spec does exist for current status code, so\n // use it to deserialize the response.\n if (responseSpec) {\n if (responseSpec.bodyMapper) {\n let valueToDeserialize = parsedResponse.parsedBody;\n if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperType.Sequence) {\n valueToDeserialize = typeof valueToDeserialize === \"object\" ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName] : [];\n }\n try {\n parsedResponse.parsedBody = operationSpec.serializer.deserialize(responseSpec.bodyMapper, valueToDeserialize, \"operationRes.parsedBody\", options);\n } catch (innerError) {\n const restError = new RestError(`Error ${innerError} occurred in deserializing the responseBody - ${parsedResponse.bodyAsText}`, undefined, parsedResponse.status, parsedResponse.request, parsedResponse);\n throw restError;\n }\n } else if (operationSpec.httpMethod === \"HEAD\") {\n // head methods never have a body, but we return a boolean to indicate presence/absence of the resource\n parsedResponse.parsedBody = response.status >= 200 && response.status < 300;\n }\n if (responseSpec.headersMapper) {\n parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(responseSpec.headersMapper, parsedResponse.headers.toJson(), \"operationRes.parsedHeaders\", options);\n }\n }\n return parsedResponse;\n });\n}\nfunction isOperationSpecEmpty(operationSpec) {\n const expectedStatusCodes = Object.keys(operationSpec.responses);\n return expectedStatusCodes.length === 0 || expectedStatusCodes.length === 1 && expectedStatusCodes[0] === \"default\";\n}\nfunction handleErrorResponse(parsedResponse, operationSpec, responseSpec) {\n var _a;\n const isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300;\n const isExpectedStatusCode = isOperationSpecEmpty(operationSpec) ? isSuccessByStatus : !!responseSpec;\n if (isExpectedStatusCode) {\n if (responseSpec) {\n if (!responseSpec.isError) {\n return {\n error: null,\n shouldReturnResponse: false\n };\n }\n } else {\n return {\n error: null,\n shouldReturnResponse: false\n };\n }\n }\n const errorResponseSpec = responseSpec !== null && responseSpec !== void 0 ? responseSpec : operationSpec.responses.default;\n const streaming = ((_a = parsedResponse.request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(parsedResponse.status)) || parsedResponse.request.streamResponseBody;\n const initialErrorMessage = streaming ? `Unexpected status code: ${parsedResponse.status}` : parsedResponse.bodyAsText;\n const error = new RestError(initialErrorMessage, undefined, parsedResponse.status, parsedResponse.request, parsedResponse);\n // If the item failed but there's no error spec or default spec to deserialize the error,\n // we should fail so we just throw the parsed response\n if (!errorResponseSpec) {\n throw error;\n }\n const defaultBodyMapper = errorResponseSpec.bodyMapper;\n const defaultHeadersMapper = errorResponseSpec.headersMapper;\n try {\n // If error response has a body, try to deserialize it using default body mapper.\n // Then try to extract error code & message from it\n if (parsedResponse.parsedBody) {\n const parsedBody = parsedResponse.parsedBody;\n let parsedError;\n if (defaultBodyMapper) {\n let valueToDeserialize = parsedBody;\n if (operationSpec.isXML && defaultBodyMapper.type.name === MapperType.Sequence) {\n valueToDeserialize = typeof parsedBody === \"object\" ? parsedBody[defaultBodyMapper.xmlElementName] : [];\n }\n parsedError = operationSpec.serializer.deserialize(defaultBodyMapper, valueToDeserialize, \"error.response.parsedBody\");\n }\n const internalError = parsedBody.error || parsedError || parsedBody;\n error.code = internalError.code;\n if (internalError.message) {\n error.message = internalError.message;\n }\n if (defaultBodyMapper) {\n error.response.parsedBody = parsedError;\n }\n }\n // If error response has headers, try to deserialize it using default header mapper\n if (parsedResponse.headers && defaultHeadersMapper) {\n error.response.parsedHeaders = operationSpec.serializer.deserialize(defaultHeadersMapper, parsedResponse.headers.toJson(), \"operationRes.parsedHeaders\");\n }\n } catch (defaultError) {\n error.message = `Error \"${defaultError.message}\" occurred in deserializing the responseBody - \"${parsedResponse.bodyAsText}\" for the default response.`;\n }\n return {\n error,\n shouldReturnResponse: false\n };\n}\nfunction parse(jsonContentTypes, xmlContentTypes, operationResponse, opts) {\n var _a;\n const errorHandler = err => {\n const msg = `Error \"${err}\" occurred while parsing the response body - ${operationResponse.bodyAsText}.`;\n const errCode = err.code || RestError.PARSE_ERROR;\n const e = new RestError(msg, errCode, operationResponse.status, operationResponse.request, operationResponse);\n return Promise.reject(e);\n };\n const streaming = ((_a = operationResponse.request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(operationResponse.status)) || operationResponse.request.streamResponseBody;\n if (!streaming && operationResponse.bodyAsText) {\n const text = operationResponse.bodyAsText;\n const contentType = operationResponse.headers.get(\"Content-Type\") || \"\";\n const contentComponents = !contentType ? [] : contentType.split(\";\").map(component => component.toLowerCase());\n if (contentComponents.length === 0 || contentComponents.some(component => jsonContentTypes.indexOf(component) !== -1)) {\n return new Promise(resolve => {\n operationResponse.parsedBody = JSON.parse(text);\n resolve(operationResponse);\n }).catch(errorHandler);\n } else if (contentComponents.some(component => xmlContentTypes.indexOf(component) !== -1)) {\n return parseXML(text, opts).then(body => {\n operationResponse.parsedBody = body;\n return operationResponse;\n }).catch(errorHandler);\n }\n }\n return Promise.resolve(operationResponse);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\n/**\n * By default, HTTP connections are maintained for future requests.\n */\nexport const DefaultKeepAliveOptions = {\n enable: true\n};\n/**\n * Creates a policy that controls whether HTTP connections are maintained on future requests.\n * @param keepAliveOptions - Keep alive options. By default, HTTP connections are maintained for future requests.\n * @returns An instance of the {@link KeepAlivePolicy}\n */\nexport function keepAlivePolicy(keepAliveOptions) {\n return {\n create: (nextPolicy, options) => {\n return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);\n }\n };\n}\n/**\n * KeepAlivePolicy is a policy used to control keep alive settings for every request.\n */\nexport class KeepAlivePolicy extends BaseRequestPolicy {\n /**\n * Creates an instance of KeepAlivePolicy.\n *\n * @param nextPolicy -\n * @param options -\n * @param keepAliveOptions -\n */\n constructor(nextPolicy, options, keepAliveOptions) {\n super(nextPolicy, options);\n this.keepAliveOptions = keepAliveOptions;\n }\n /**\n * Sends out request.\n *\n * @param request -\n * @returns\n */\n async sendRequest(request) {\n request.keepAlive = this.keepAliveOptions.enable;\n return this._nextPolicy.sendRequest(request);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nimport { URLBuilder } from \"../url\";\n/**\n * Methods that are allowed to follow redirects 301 and 302\n */\nconst allowedRedirect = [\"GET\", \"HEAD\"];\nexport const DefaultRedirectOptions = {\n handleRedirects: true,\n maxRetries: 20\n};\n/**\n * Creates a redirect policy, which sends a repeats the request to a new destination if a response arrives with a \"location\" header, and a status code between 300 and 307.\n * @param maximumRetries - Maximum number of redirects to follow.\n * @returns An instance of the {@link RedirectPolicy}\n */\nexport function redirectPolicy(maximumRetries = 20) {\n return {\n create: (nextPolicy, options) => {\n return new RedirectPolicy(nextPolicy, options, maximumRetries);\n }\n };\n}\n/**\n * Resends the request to a new destination if a response arrives with a \"location\" header, and a status code between 300 and 307.\n */\nexport class RedirectPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options, maxRetries = 20) {\n super(nextPolicy, options);\n this.maxRetries = maxRetries;\n }\n sendRequest(request) {\n return this._nextPolicy.sendRequest(request).then(response => handleRedirect(this, response, 0));\n }\n}\nfunction handleRedirect(policy, response, currentRetries) {\n const {\n request,\n status\n } = response;\n const locationHeader = response.headers.get(\"location\");\n if (locationHeader && (status === 300 || status === 301 && allowedRedirect.includes(request.method) || status === 302 && allowedRedirect.includes(request.method) || status === 303 && request.method === \"POST\" || status === 307) && (!policy.maxRetries || currentRetries < policy.maxRetries)) {\n const builder = URLBuilder.parse(request.url);\n builder.setPath(locationHeader);\n request.url = builder.toString();\n // POST request with Status code 303 should be converted into a\n // redirected GET request if the redirect url is present in the location header\n if (status === 303) {\n request.method = \"GET\";\n delete request.body;\n }\n return policy._nextPolicy.sendRequest(request).then(res => handleRedirect(policy, res, currentRetries + 1));\n }\n return Promise.resolve(response);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport const DEFAULT_CLIENT_RETRY_COUNT = 3;\n// intervals are in ms\nexport const DEFAULT_CLIENT_RETRY_INTERVAL = 1000 * 30;\nexport const DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 90;\nexport const DEFAULT_CLIENT_MIN_RETRY_INTERVAL = 1000 * 3;\nexport function isNumber(n) {\n return typeof n === \"number\";\n}\n/**\n * @internal\n * Determines if the operation should be retried.\n *\n * @param retryLimit - Specifies the max number of retries.\n * @param predicate - Initial chekck on whether to retry based on given responses or errors\n * @param retryData - The retry data.\n * @returns True if the operation qualifies for a retry; false otherwise.\n */\nexport function shouldRetry(retryLimit, predicate, retryData, response, error) {\n if (!predicate(response, error)) {\n return false;\n }\n return retryData.retryCount < retryLimit;\n}\n/**\n * @internal\n * Updates the retry data for the next attempt.\n *\n * @param retryOptions - specifies retry interval, and its lower bound and upper bound.\n * @param retryData - The retry data.\n * @param err - The operation\"s error, if any.\n */\nexport function updateRetryData(retryOptions, retryData = {\n retryCount: 0,\n retryInterval: 0\n}, err) {\n if (err) {\n if (retryData.error) {\n err.innerError = retryData.error;\n }\n retryData.error = err;\n }\n // Adjust retry count\n retryData.retryCount++;\n // Adjust retry interval\n let incrementDelta = Math.pow(2, retryData.retryCount - 1) - 1;\n const boundedRandDelta = retryOptions.retryInterval * 0.8 + Math.floor(Math.random() * (retryOptions.retryInterval * 0.4));\n incrementDelta *= boundedRandDelta;\n retryData.retryInterval = Math.min(retryOptions.minRetryInterval + incrementDelta, retryOptions.maxRetryInterval);\n return retryData;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * This error is thrown when an asynchronous operation has been aborted.\n * Check for this error by testing the `name` that the name property of the\n * error matches `\"AbortError\"`.\n *\n * @example\n * ```ts\n * const controller = new AbortController();\n * controller.abort();\n * try {\n * doAsyncWork(controller.signal)\n * } catch (e) {\n * if (e.name === 'AbortError') {\n * // handle abort error here.\n * }\n * }\n * ```\n */\nexport class AbortError extends Error {\n constructor(message) {\n super(message);\n this.name = \"AbortError\";\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { AbortError } from \"@azure/abort-controller\";\n/**\n * Creates an abortable promise.\n * @param buildPromise - A function that takes the resolve and reject functions as parameters.\n * @param options - The options for the abortable promise.\n * @returns A promise that can be aborted.\n */\nexport function createAbortablePromise(buildPromise, options) {\n const {\n cleanupBeforeAbort,\n abortSignal,\n abortErrorMsg\n } = options !== null && options !== void 0 ? options : {};\n return new Promise((resolve, reject) => {\n function rejectOnAbort() {\n reject(new AbortError(abortErrorMsg !== null && abortErrorMsg !== void 0 ? abortErrorMsg : \"The operation was aborted.\"));\n }\n function removeListeners() {\n abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener(\"abort\", onAbort);\n }\n function onAbort() {\n cleanupBeforeAbort === null || cleanupBeforeAbort === void 0 ? void 0 : cleanupBeforeAbort();\n removeListeners();\n rejectOnAbort();\n }\n if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {\n return rejectOnAbort();\n }\n try {\n buildPromise(x => {\n removeListeners();\n resolve(x);\n }, x => {\n removeListeners();\n reject(x);\n });\n } catch (err) {\n reject(err);\n }\n abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener(\"abort\", onAbort);\n });\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { createAbortablePromise } from \"./createAbortablePromise.js\";\nconst StandardAbortMessage = \"The delay was aborted.\";\n/**\n * A wrapper for setTimeout that resolves a promise after timeInMs milliseconds.\n * @param timeInMs - The number of milliseconds to be delayed.\n * @param options - The options for delay - currently abort options\n * @returns Promise that is resolved after timeInMs\n */\nexport function delay(timeInMs, options) {\n let token;\n const {\n abortSignal,\n abortErrorMsg\n } = options !== null && options !== void 0 ? options : {};\n return createAbortablePromise(resolve => {\n token = setTimeout(resolve, timeInMs);\n }, {\n cleanupBeforeAbort: () => clearTimeout(token),\n abortSignal,\n abortErrorMsg: abortErrorMsg !== null && abortErrorMsg !== void 0 ? abortErrorMsg : StandardAbortMessage\n });\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * The helper that transforms bytes with specific character encoding into string\n * @param bytes - the uint8array bytes\n * @param format - the format we use to encode the byte\n * @returns a string of the encoded string\n */\nexport function uint8ArrayToString(bytes, format) {\n switch (format) {\n case \"utf-8\":\n return uint8ArrayToUtf8String(bytes);\n case \"base64\":\n return uint8ArrayToBase64(bytes);\n case \"base64url\":\n return uint8ArrayToBase64Url(bytes);\n case \"hex\":\n return uint8ArrayToHexString(bytes);\n }\n}\n/**\n * The helper that transforms string to specific character encoded bytes array.\n * @param value - the string to be converted\n * @param format - the format we use to decode the value\n * @returns a uint8array\n */\nexport function stringToUint8Array(value, format) {\n switch (format) {\n case \"utf-8\":\n return utf8StringToUint8Array(value);\n case \"base64\":\n return base64ToUint8Array(value);\n case \"base64url\":\n return base64UrlToUint8Array(value);\n case \"hex\":\n return hexStringToUint8Array(value);\n }\n}\n/**\n * Decodes a Uint8Array into a Base64 string.\n * @internal\n */\nexport function uint8ArrayToBase64(bytes) {\n return btoa([...bytes].map(x => String.fromCharCode(x)).join(\"\"));\n}\n/**\n * Decodes a Uint8Array into a Base64Url string.\n * @internal\n */\nexport function uint8ArrayToBase64Url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\n/**\n * Decodes a Uint8Array into a javascript string.\n * @internal\n */\nexport function uint8ArrayToUtf8String(bytes) {\n const decoder = new TextDecoder();\n const dataString = decoder.decode(bytes);\n return dataString;\n}\n/**\n * Decodes a Uint8Array into a hex string\n * @internal\n */\nexport function uint8ArrayToHexString(bytes) {\n return [...bytes].map(x => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n/**\n * Encodes a JavaScript string into a Uint8Array.\n * @internal\n */\nexport function utf8StringToUint8Array(value) {\n return new TextEncoder().encode(value);\n}\n/**\n * Encodes a Base64 string into a Uint8Array.\n * @internal\n */\nexport function base64ToUint8Array(value) {\n return new Uint8Array([...atob(value)].map(x => x.charCodeAt(0)));\n}\n/**\n * Encodes a Base64Url string into a Uint8Array.\n * @internal\n */\nexport function base64UrlToUint8Array(value) {\n const base64String = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n return base64ToUint8Array(base64String);\n}\nconst hexDigits = new Set(\"0123456789abcdefABCDEF\");\n/**\n * Encodes a hex string into a Uint8Array\n * @internal\n */\nexport function hexStringToUint8Array(value) {\n // If value has odd length, the last character will be ignored, consistent with NodeJS Buffer behavior\n const bytes = new Uint8Array(value.length / 2);\n for (let i = 0; i < value.length / 2; ++i) {\n const highNibble = value[2 * i];\n const lowNibble = value[2 * i + 1];\n if (!hexDigits.has(highNibble) || !hexDigits.has(lowNibble)) {\n // Replicate Node Buffer behavior by exiting early when we encounter an invalid byte\n return bytes.slice(0, i);\n }\n bytes[i] = parseInt(`${highNibble}${lowNibble}`, 16);\n }\n return bytes;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Generated Universally Unique Identifier\n *\n * @returns RFC4122 v4 UUID.\n */\nexport function generateUUID() {\n let uuid = \"\";\n for (let i = 0; i < 32; i++) {\n // Generate a random number between 0 and 15\n const randomNumber = Math.floor(Math.random() * 16);\n // Set the UUID version to 4 in the 13th position\n if (i === 12) {\n uuid += \"4\";\n } else if (i === 16) {\n // Set the UUID variant to \"10\" in the 17th position\n uuid += randomNumber & 0x3 | 0x8;\n } else {\n // Add a random hexadecimal digit to the UUID string\n uuid += randomNumber.toString(16);\n }\n // Add hyphens to the UUID string at the appropriate positions\n if (i === 7 || i === 11 || i === 15 || i === 19) {\n uuid += \"-\";\n }\n }\n return uuid;\n}\n/**\n * Generated Universally Unique Identifier\n *\n * @returns RFC4122 v4 UUID.\n */\nexport function randomUUID() {\n return generateUUID();\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nvar _a;\nimport { generateUUID } from \"./uuidUtils.common.js\";\n// NOTE: This could be undefined if not used in a secure context\nconst uuidFunction = typeof ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.crypto) === null || _a === void 0 ? void 0 : _a.randomUUID) === \"function\" ? globalThis.crypto.randomUUID.bind(globalThis.crypto) : generateUUID;\n/**\n * Generated Universally Unique Identifier\n *\n * @returns RFC4122 v4 UUID.\n */\nexport function randomUUID() {\n return uuidFunction();\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nvar _a, _b, _c, _d;\n/**\n * A constant that indicates whether the environment the code is running is a Web Browser.\n */\n// eslint-disable-next-line @azure/azure-sdk/ts-no-window\nexport const isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n/**\n * A constant that indicates whether the environment the code is running is a Web Worker.\n */\nexport const isWebWorker = typeof self === \"object\" && typeof (self === null || self === void 0 ? void 0 : self.importScripts) === \"function\" && (((_a = self.constructor) === null || _a === void 0 ? void 0 : _a.name) === \"DedicatedWorkerGlobalScope\" || ((_b = self.constructor) === null || _b === void 0 ? void 0 : _b.name) === \"ServiceWorkerGlobalScope\" || ((_c = self.constructor) === null || _c === void 0 ? void 0 : _c.name) === \"SharedWorkerGlobalScope\");\n/**\n * A constant that indicates whether the environment the code is running is Deno.\n */\nexport const isDeno = typeof Deno !== \"undefined\" && typeof Deno.version !== \"undefined\" && typeof Deno.version.deno !== \"undefined\";\n/**\n * A constant that indicates whether the environment the code is running is Bun.sh.\n */\nexport const isBun = typeof Bun !== \"undefined\" && typeof Bun.version !== \"undefined\";\n/**\n * A constant that indicates whether the environment the code is running is a Node.js compatible environment.\n */\nexport const isNodeLike = typeof globalThis.process !== \"undefined\" && Boolean(globalThis.process.version) && Boolean((_d = globalThis.process.versions) === null || _d === void 0 ? void 0 : _d.node);\n/**\n * A constant that indicates whether the environment the code is running is a Node.js compatible environment.\n * @deprecated Use `isNodeLike` instead.\n */\nexport const isNode = isNodeLike;\n/**\n * A constant that indicates whether the environment the code is running is Node.JS.\n */\nexport const isNodeRuntime = isNodeLike && !isBun && !isDeno;\n/**\n * A constant that indicates whether the environment the code is running is in React-Native.\n */\n// https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/Core/setUpNavigator.js\nexport const isReactNative = typeof navigator !== \"undefined\" && (navigator === null || navigator === void 0 ? void 0 : navigator.product) === \"ReactNative\";\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport function log(...args) {\n if (args.length > 0) {\n const firstArg = String(args[0]);\n if (firstArg.includes(\":error\")) {\n console.error(...args);\n } else if (firstArg.includes(\":warning\")) {\n console.warn(...args);\n } else if (firstArg.includes(\":info\")) {\n console.info(...args);\n } else if (firstArg.includes(\":verbose\")) {\n console.debug(...args);\n } else {\n console.debug(...args);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { log } from \"./log.js\";\nconst debugEnvVariable = typeof process !== \"undefined\" && process.env && process.env.DEBUG || undefined;\nlet enabledString;\nlet enabledNamespaces = [];\nlet skippedNamespaces = [];\nconst debuggers = [];\nif (debugEnvVariable) {\n enable(debugEnvVariable);\n}\nconst debugObj = Object.assign(namespace => {\n return createDebugger(namespace);\n}, {\n enable,\n enabled,\n disable,\n log\n});\nfunction enable(namespaces) {\n enabledString = namespaces;\n enabledNamespaces = [];\n skippedNamespaces = [];\n const wildcard = /\\*/g;\n const namespaceList = namespaces.split(\",\").map(ns => ns.trim().replace(wildcard, \".*?\"));\n for (const ns of namespaceList) {\n if (ns.startsWith(\"-\")) {\n skippedNamespaces.push(new RegExp(`^${ns.substr(1)}$`));\n } else {\n enabledNamespaces.push(new RegExp(`^${ns}$`));\n }\n }\n for (const instance of debuggers) {\n instance.enabled = enabled(instance.namespace);\n }\n}\nfunction enabled(namespace) {\n if (namespace.endsWith(\"*\")) {\n return true;\n }\n for (const skipped of skippedNamespaces) {\n if (skipped.test(namespace)) {\n return false;\n }\n }\n for (const enabledNamespace of enabledNamespaces) {\n if (enabledNamespace.test(namespace)) {\n return true;\n }\n }\n return false;\n}\nfunction disable() {\n const result = enabledString || \"\";\n enable(\"\");\n return result;\n}\nfunction createDebugger(namespace) {\n const newDebugger = Object.assign(debug, {\n enabled: enabled(namespace),\n destroy,\n log: debugObj.log,\n namespace,\n extend\n });\n function debug(...args) {\n if (!newDebugger.enabled) {\n return;\n }\n if (args.length > 0) {\n args[0] = `${namespace} ${args[0]}`;\n }\n newDebugger.log(...args);\n }\n debuggers.push(newDebugger);\n return newDebugger;\n}\nfunction destroy() {\n const index = debuggers.indexOf(this);\n if (index >= 0) {\n debuggers.splice(index, 1);\n return true;\n }\n return false;\n}\nfunction extend(namespace) {\n const newDebugger = createDebugger(`${this.namespace}:${namespace}`);\n newDebugger.log = this.log;\n return newDebugger;\n}\nexport default debugObj;\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport debug from \"./debug.js\";\nconst registeredLoggers = new Set();\nconst logLevelFromEnv = typeof process !== \"undefined\" && process.env && process.env.AZURE_LOG_LEVEL || undefined;\nlet azureLogLevel;\n/**\n * The AzureLogger provides a mechanism for overriding where logs are output to.\n * By default, logs are sent to stderr.\n * Override the `log` method to redirect logs to another location.\n */\nexport const AzureLogger = debug(\"azure\");\nAzureLogger.log = (...args) => {\n debug.log(...args);\n};\nconst AZURE_LOG_LEVELS = [\"verbose\", \"info\", \"warning\", \"error\"];\nif (logLevelFromEnv) {\n // avoid calling setLogLevel because we don't want a mis-set environment variable to crash\n if (isAzureLogLevel(logLevelFromEnv)) {\n setLogLevel(logLevelFromEnv);\n } else {\n console.error(`AZURE_LOG_LEVEL set to unknown log level '${logLevelFromEnv}'; logging is not enabled. Acceptable values: ${AZURE_LOG_LEVELS.join(\", \")}.`);\n }\n}\n/**\n * Immediately enables logging at the specified log level. If no level is specified, logging is disabled.\n * @param level - The log level to enable for logging.\n * Options from most verbose to least verbose are:\n * - verbose\n * - info\n * - warning\n * - error\n */\nexport function setLogLevel(level) {\n if (level && !isAzureLogLevel(level)) {\n throw new Error(`Unknown log level '${level}'. Acceptable values: ${AZURE_LOG_LEVELS.join(\",\")}`);\n }\n azureLogLevel = level;\n const enabledNamespaces = [];\n for (const logger of registeredLoggers) {\n if (shouldEnable(logger)) {\n enabledNamespaces.push(logger.namespace);\n }\n }\n debug.enable(enabledNamespaces.join(\",\"));\n}\n/**\n * Retrieves the currently specified log level.\n */\nexport function getLogLevel() {\n return azureLogLevel;\n}\nconst levelMap = {\n verbose: 400,\n info: 300,\n warning: 200,\n error: 100\n};\n/**\n * Creates a logger for use by the Azure SDKs that inherits from `AzureLogger`.\n * @param namespace - The name of the SDK package.\n * @hidden\n */\nexport function createClientLogger(namespace) {\n const clientRootLogger = AzureLogger.extend(namespace);\n patchLogMethod(AzureLogger, clientRootLogger);\n return {\n error: createLogger(clientRootLogger, \"error\"),\n warning: createLogger(clientRootLogger, \"warning\"),\n info: createLogger(clientRootLogger, \"info\"),\n verbose: createLogger(clientRootLogger, \"verbose\")\n };\n}\nfunction patchLogMethod(parent, child) {\n child.log = (...args) => {\n parent.log(...args);\n };\n}\nfunction createLogger(parent, level) {\n const logger = Object.assign(parent.extend(level), {\n level\n });\n patchLogMethod(parent, logger);\n if (shouldEnable(logger)) {\n const enabledNamespaces = debug.disable();\n debug.enable(enabledNamespaces + \",\" + logger.namespace);\n }\n registeredLoggers.add(logger);\n return logger;\n}\nfunction shouldEnable(logger) {\n return Boolean(azureLogLevel && levelMap[logger.level] <= levelMap[azureLogLevel]);\n}\nfunction isAzureLogLevel(logLevel) {\n return AZURE_LOG_LEVELS.includes(logLevel);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { createClientLogger } from \"@azure/logger\";\nexport const logger = createClientLogger(\"core-http\");\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nimport { DEFAULT_CLIENT_MAX_RETRY_INTERVAL, DEFAULT_CLIENT_RETRY_COUNT, DEFAULT_CLIENT_RETRY_INTERVAL, isNumber, shouldRetry, updateRetryData } from \"../util/exponentialBackoffStrategy\";\nimport { Constants } from \"../util/constants\";\nimport { RestError } from \"../restError\";\nimport { delay } from \"@azure/core-util\";\nimport { logger } from \"../log\";\n/**\n * Policy that retries the request as many times as configured for as long as the max retry time interval specified, each retry waiting longer to begin than the last time.\n * @param retryCount - Maximum number of retries.\n * @param retryInterval - Base time between retries.\n * @param maxRetryInterval - Maximum time to wait between retries.\n */\nexport function exponentialRetryPolicy(retryCount, retryInterval, maxRetryInterval) {\n return {\n create: (nextPolicy, options) => {\n return new ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, maxRetryInterval);\n }\n };\n}\n/**\n * Describes the Retry Mode type. Currently supporting only Exponential.\n */\nexport var RetryMode = /*#__PURE__*/function (RetryMode) {\n /**\n * Currently supported retry mode.\n * Each time a retry happens, it will take exponentially more time than the last time.\n */\n RetryMode[RetryMode[\"Exponential\"] = 0] = \"Exponential\";\n return RetryMode;\n}(RetryMode || {});\nexport const DefaultRetryOptions = {\n maxRetries: DEFAULT_CLIENT_RETRY_COUNT,\n retryDelayInMs: DEFAULT_CLIENT_RETRY_INTERVAL,\n maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL\n};\n/**\n * Instantiates a new \"ExponentialRetryPolicyFilter\" instance.\n */\nexport class ExponentialRetryPolicy extends BaseRequestPolicy {\n /**\n * @param nextPolicy - The next RequestPolicy in the pipeline chain.\n * @param options - The options for this RequestPolicy.\n * @param retryCount - The client retry count.\n * @param retryInterval - The client retry interval, in milliseconds.\n * @param minRetryInterval - The minimum retry interval, in milliseconds.\n * @param maxRetryInterval - The maximum retry interval, in milliseconds.\n */\n constructor(nextPolicy, options, retryCount, retryInterval, maxRetryInterval) {\n super(nextPolicy, options);\n this.retryCount = isNumber(retryCount) ? retryCount : DEFAULT_CLIENT_RETRY_COUNT;\n this.retryInterval = isNumber(retryInterval) ? retryInterval : DEFAULT_CLIENT_RETRY_INTERVAL;\n this.maxRetryInterval = isNumber(maxRetryInterval) ? maxRetryInterval : DEFAULT_CLIENT_MAX_RETRY_INTERVAL;\n }\n sendRequest(request) {\n return this._nextPolicy.sendRequest(request.clone()).then(response => retry(this, request, response)).catch(error => retry(this, request, error.response, undefined, error));\n }\n}\nasync function retry(policy, request, response, retryData, requestError) {\n function shouldPolicyRetry(responseParam) {\n const statusCode = responseParam === null || responseParam === void 0 ? void 0 : responseParam.status;\n if (statusCode === 503 && (response === null || response === void 0 ? void 0 : response.headers.get(Constants.HeaderConstants.RETRY_AFTER))) {\n return false;\n }\n if (statusCode === undefined || statusCode < 500 && statusCode !== 408 || statusCode === 501 || statusCode === 505) {\n return false;\n }\n return true;\n }\n retryData = updateRetryData({\n retryInterval: policy.retryInterval,\n minRetryInterval: 0,\n maxRetryInterval: policy.maxRetryInterval\n }, retryData, requestError);\n const isAborted = request.abortSignal && request.abortSignal.aborted;\n if (!isAborted && shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, response)) {\n logger.info(`Retrying request in ${retryData.retryInterval}`);\n try {\n await delay(retryData.retryInterval);\n const res = await policy._nextPolicy.sendRequest(request.clone());\n return retry(policy, request, res, retryData);\n } catch (err) {\n return retry(policy, request, response, retryData, err);\n }\n } else if (isAborted || requestError || !response) {\n // If the operation failed in the end, return all errors instead of just the last one\n const err = retryData.error || new RestError(\"Failed to send the request.\", RestError.REQUEST_SEND_ERROR, response && response.status, response && response.request, response);\n throw err;\n } else {\n return response;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nimport { Sanitizer } from \"../util/sanitizer\";\nimport { logger as coreLogger } from \"../log\";\n/**\n * Creates a policy that logs information about the outgoing request and the incoming responses.\n * @param loggingOptions - Logging options.\n * @returns An instance of the {@link LogPolicy}\n */\nexport function logPolicy(loggingOptions = {}) {\n return {\n create: (nextPolicy, options) => {\n return new LogPolicy(nextPolicy, options, loggingOptions);\n }\n };\n}\n/**\n * A policy that logs information about the outgoing request and the incoming responses.\n */\nexport class LogPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options, {\n logger = coreLogger.info,\n allowedHeaderNames = [],\n allowedQueryParameters = []\n } = {}) {\n super(nextPolicy, options);\n this.logger = logger;\n this.sanitizer = new Sanitizer({\n allowedHeaderNames,\n allowedQueryParameters\n });\n }\n /**\n * Header names whose values will be logged when logging is enabled. Defaults to\n * Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers\n * specified in this field will be added to that list. Any other values will\n * be written to logs as \"REDACTED\".\n * @deprecated Pass these into the constructor instead.\n */\n get allowedHeaderNames() {\n return this.sanitizer.allowedHeaderNames;\n }\n /**\n * Header names whose values will be logged when logging is enabled. Defaults to\n * Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers\n * specified in this field will be added to that list. Any other values will\n * be written to logs as \"REDACTED\".\n * @deprecated Pass these into the constructor instead.\n */\n set allowedHeaderNames(allowedHeaderNames) {\n this.sanitizer.allowedHeaderNames = allowedHeaderNames;\n }\n /**\n * Query string names whose values will be logged when logging is enabled. By default no\n * query string values are logged.\n * @deprecated Pass these into the constructor instead.\n */\n get allowedQueryParameters() {\n return this.sanitizer.allowedQueryParameters;\n }\n /**\n * Query string names whose values will be logged when logging is enabled. By default no\n * query string values are logged.\n * @deprecated Pass these into the constructor instead.\n */\n set allowedQueryParameters(allowedQueryParameters) {\n this.sanitizer.allowedQueryParameters = allowedQueryParameters;\n }\n sendRequest(request) {\n if (!this.logger.enabled) return this._nextPolicy.sendRequest(request);\n this.logRequest(request);\n return this._nextPolicy.sendRequest(request).then(response => this.logResponse(response));\n }\n logRequest(request) {\n this.logger(`Request: ${this.sanitizer.sanitize(request)}`);\n }\n logResponse(response) {\n this.logger(`Response status code: ${response.status}`);\n this.logger(`Headers: ${this.sanitizer.sanitize(response.headers)}`);\n return response;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Get the path to this parameter's value as a dotted string (a.b.c).\n * @param parameter - The parameter to get the path string for.\n * @returns The path to this parameter's value as a dotted string.\n */\nexport function getPathStringFromParameter(parameter) {\n return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);\n}\nexport function getPathStringFromParameterPath(parameterPath, mapper) {\n let result;\n if (typeof parameterPath === \"string\") {\n result = parameterPath;\n } else if (Array.isArray(parameterPath)) {\n result = parameterPath.join(\".\");\n } else {\n result = mapper.serializedName;\n }\n return result;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { MapperType } from \"./serializer\";\n/**\n * Gets the list of status codes for streaming responses.\n * @internal\n */\nexport function getStreamResponseStatusCodes(operationSpec) {\n const result = new Set();\n for (const statusCode in operationSpec.responses) {\n const operationResponse = operationSpec.responses[statusCode];\n if (operationResponse.bodyMapper && operationResponse.bodyMapper.type.name === MapperType.Stream) {\n result.add(Number(statusCode));\n }\n }\n return result;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Tests an object to determine whether it implements TokenCredential.\n *\n * @param credential - The assumed TokenCredential to be tested.\n */\nexport function isTokenCredential(credential) {\n // Check for an object with a 'getToken' function and possibly with\n // a 'signRequest' function. We do this check to make sure that\n // a ServiceClientCredentials implementor (like TokenClientCredentials\n // in ms-rest-nodeauth) doesn't get mistaken for a TokenCredential if\n // it doesn't actually implement TokenCredential also.\n const castCredential = credential;\n return castCredential && typeof castCredential.getToken === \"function\" && (castCredential.signRequest === undefined || castCredential.getToken.length > 0);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport function getDefaultUserAgentKey() {\n return \"x-ms-useragent\";\n}\nexport function getPlatformSpecificData() {\n const navigator = self.navigator;\n const osInfo = {\n key: \"OS\",\n value: (navigator.oscpu || navigator.platform).replace(\" \", \"\")\n };\n return [osInfo];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nimport { getDefaultUserAgentKey, getPlatformSpecificData } from \"./msRestUserAgentPolicy\";\nimport { Constants } from \"../util/constants\";\nimport { HttpHeaders } from \"../httpHeaders\";\nfunction getRuntimeInfo() {\n const msRestRuntime = {\n key: \"core-http\",\n value: Constants.coreHttpVersion\n };\n return [msRestRuntime];\n}\nfunction getUserAgentString(telemetryInfo, keySeparator = \" \", valueSeparator = \"/\") {\n return telemetryInfo.map(info => {\n const value = info.value ? `${valueSeparator}${info.value}` : \"\";\n return `${info.key}${value}`;\n }).join(keySeparator);\n}\nexport const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;\n/**\n * The default approach to generate user agents.\n * Uses static information from this package, plus system information available from the runtime.\n */\nexport function getDefaultUserAgentValue() {\n const runtimeInfo = getRuntimeInfo();\n const platformSpecificData = getPlatformSpecificData();\n const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));\n return userAgent;\n}\n/**\n * Returns a policy that adds the user agent header to outgoing requests based on the given {@link TelemetryInfo}.\n * @param userAgentData - Telemetry information.\n * @returns A new {@link UserAgentPolicy}.\n */\nexport function userAgentPolicy(userAgentData) {\n const key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null ? getDefaultUserAgentKey() : userAgentData.key;\n const value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null ? getDefaultUserAgentValue() : userAgentData.value;\n return {\n create: (nextPolicy, options) => {\n return new UserAgentPolicy(nextPolicy, options, key, value);\n }\n };\n}\n/**\n * A policy that adds the user agent header to outgoing requests based on the given {@link TelemetryInfo}.\n */\nexport class UserAgentPolicy extends BaseRequestPolicy {\n constructor(_nextPolicy, _options, headerKey, headerValue) {\n super(_nextPolicy, _options);\n this._nextPolicy = _nextPolicy;\n this._options = _options;\n this.headerKey = headerKey;\n this.headerValue = headerValue;\n }\n sendRequest(request) {\n this.addUserAgentHeader(request);\n return this._nextPolicy.sendRequest(request);\n }\n /**\n * Adds the user agent header to the outgoing request.\n */\n addUserAgentHeader(request) {\n if (!request.headers) {\n request.headers = new HttpHeaders();\n }\n if (!request.headers.get(this.headerKey) && this.headerValue) {\n request.headers.set(this.headerKey, this.headerValue);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * The format that will be used to join an array of values together for a query parameter value.\n */\nexport var QueryCollectionFormat = /*#__PURE__*/function (QueryCollectionFormat) {\n /**\n * CSV: Each pair of segments joined by a single comma.\n */\n QueryCollectionFormat[\"Csv\"] = \",\";\n /**\n * SSV: Each pair of segments joined by a single space character.\n */\n QueryCollectionFormat[\"Ssv\"] = \" \";\n /**\n * TSV: Each pair of segments joined by a single tab character.\n */\n QueryCollectionFormat[\"Tsv\"] = \"\\t\";\n /**\n * Pipes: Each pair of segments joined by a single pipe character.\n */\n QueryCollectionFormat[\"Pipes\"] = \"|\";\n /**\n * Denotes this is an array of values that should be passed to the server in multiple key/value pairs, e.g. `?queryParam=value1&queryParam=value2`\n */\n QueryCollectionFormat[\"Multi\"] = \"Multi\";\n return QueryCollectionFormat;\n}(QueryCollectionFormat || {});\n\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"../policies/requestPolicy\";\nimport { Constants } from \"../util/constants\";\nimport { delay } from \"@azure/core-util\";\n// Default options for the cycler if none are provided\nexport const DEFAULT_CYCLER_OPTIONS = {\n forcedRefreshWindowInMs: 1000,\n retryIntervalInMs: 3000,\n refreshWindowInMs: 1000 * 60 * 2 // Start refreshing 2m before expiry\n};\n/**\n * Converts an an unreliable access token getter (which may resolve with null)\n * into an AccessTokenGetter by retrying the unreliable getter in a regular\n * interval.\n *\n * @param getAccessToken - a function that produces a promise of an access\n * token that may fail by returning null\n * @param retryIntervalInMs - the time (in milliseconds) to wait between retry\n * attempts\n * @param timeoutInMs - the timestamp after which the refresh attempt will fail,\n * throwing an exception\n * @returns - a promise that, if it resolves, will resolve with an access token\n */\nasync function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {\n // This wrapper handles exceptions gracefully as long as we haven't exceeded\n // the timeout.\n async function tryGetAccessToken() {\n if (Date.now() < timeoutInMs) {\n try {\n return await getAccessToken();\n } catch (_a) {\n return null;\n }\n } else {\n const finalToken = await getAccessToken();\n // Timeout is up, so throw if it's still null\n if (finalToken === null) {\n throw new Error(\"Failed to refresh access token.\");\n }\n return finalToken;\n }\n }\n let token = await tryGetAccessToken();\n while (token === null) {\n await delay(retryIntervalInMs);\n token = await tryGetAccessToken();\n }\n return token;\n}\n/**\n * Creates a token cycler from a credential, scopes, and optional settings.\n *\n * A token cycler represents a way to reliably retrieve a valid access token\n * from a TokenCredential. It will handle initializing the token, refreshing it\n * when it nears expiration, and synchronizes refresh attempts to avoid\n * concurrency hazards.\n *\n * @param credential - the underlying TokenCredential that provides the access\n * token\n * @param scopes - the scopes to request authorization for\n * @param tokenCyclerOptions - optionally override default settings for the cycler\n *\n * @returns - a function that reliably produces a valid access token\n */\nfunction createTokenCycler(credential, scopes, tokenCyclerOptions) {\n let refreshWorker = null;\n let token = null;\n const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);\n /**\n * This little holder defines several predicates that we use to construct\n * the rules of refreshing the token.\n */\n const cycler = {\n /**\n * Produces true if a refresh job is currently in progress.\n */\n get isRefreshing() {\n return refreshWorker !== null;\n },\n /**\n * Produces true if the cycler SHOULD refresh (we are within the refresh\n * window and not already refreshing)\n */\n get shouldRefresh() {\n var _a;\n return !cycler.isRefreshing && ((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now();\n },\n /**\n * Produces true if the cycler MUST refresh (null or nearly-expired\n * token).\n */\n get mustRefresh() {\n return token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now();\n }\n };\n /**\n * Starts a refresh job or returns the existing job if one is already\n * running.\n */\n function refresh(getTokenOptions) {\n var _a;\n if (!cycler.isRefreshing) {\n // We bind `scopes` here to avoid passing it around a lot\n const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);\n // Take advantage of promise chaining to insert an assignment to `token`\n // before the refresh can be considered done.\n refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,\n // If we don't have a token, then we should timeout immediately\n (_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now()).then(_token => {\n refreshWorker = null;\n token = _token;\n return token;\n }).catch(reason => {\n // We also should reset the refresher if we enter a failed state. All\n // existing awaiters will throw, but subsequent requests will start a\n // new retry chain.\n refreshWorker = null;\n token = null;\n throw reason;\n });\n }\n return refreshWorker;\n }\n return async tokenOptions => {\n //\n // Simple rules:\n // - If we MUST refresh, then return the refresh task, blocking\n // the pipeline until a token is available.\n // - If we SHOULD refresh, then run refresh but don't return it\n // (we can still use the cached token).\n // - Return the token, since it's fine if we didn't return in\n // step 1.\n //\n if (cycler.mustRefresh) return refresh(tokenOptions);\n if (cycler.shouldRefresh) {\n refresh(tokenOptions);\n }\n return token;\n };\n}\n// #endregion\n/**\n * Creates a new factory for a RequestPolicy that applies a bearer token to\n * the requests' `Authorization` headers.\n *\n * @param credential - The TokenCredential implementation that can supply the bearer token.\n * @param scopes - The scopes for which the bearer token applies.\n */\nexport function bearerTokenAuthenticationPolicy(credential, scopes) {\n // This simple function encapsulates the entire process of reliably retrieving the token\n const getToken = createTokenCycler(credential, scopes /* , options */);\n class BearerTokenAuthenticationPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options) {\n super(nextPolicy, options);\n }\n async sendRequest(webResource) {\n if (!webResource.url.toLowerCase().startsWith(\"https://\")) {\n throw new Error(\"Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.\");\n }\n const {\n token\n } = await getToken({\n abortSignal: webResource.abortSignal,\n tracingOptions: {\n tracingContext: webResource.tracingContext\n }\n });\n webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);\n return this._nextPolicy.sendRequest(webResource);\n }\n }\n return {\n create: (nextPolicy, options) => {\n return new BearerTokenAuthenticationPolicy(nextPolicy, options);\n }\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/*\n * NOTE: When moving this file, please update \"browser\" section in package.json\n */\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nconst errorMessage = \"DisableResponseDecompressionPolicy is not supported in browser environment\";\n/**\n * {@link DisableResponseDecompressionPolicy} is not supported in browser and attempting\n * to use it will results in error being thrown.\n */\nexport function disableResponseDecompressionPolicy() {\n return {\n create: (_nextPolicy, _options) => {\n throw new Error(errorMessage);\n }\n };\n}\nexport class DisableResponseDecompressionPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options) {\n super(nextPolicy, options);\n throw new Error(errorMessage);\n }\n async sendRequest(_request) {\n throw new Error(errorMessage);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\n/**\n * Creates a policy that assigns a unique request id to outgoing requests.\n * @param requestIdHeaderName - The name of the header to use when assigning the unique id to the request.\n */\nexport function generateClientRequestIdPolicy(requestIdHeaderName = \"x-ms-client-request-id\") {\n return {\n create: (nextPolicy, options) => {\n return new GenerateClientRequestIdPolicy(nextPolicy, options, requestIdHeaderName);\n }\n };\n}\nexport class GenerateClientRequestIdPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options, _requestIdHeaderName) {\n super(nextPolicy, options);\n this._requestIdHeaderName = _requestIdHeaderName;\n }\n sendRequest(request) {\n if (!request.headers.contains(this._requestIdHeaderName)) {\n request.headers.set(this._requestIdHeaderName, request.requestId);\n }\n return this._nextPolicy.sendRequest(request);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { DefaultHttpClient } from \"./defaultHttpClient\";\nlet cachedHttpClient;\nexport function getCachedDefaultHttpClient() {\n if (!cachedHttpClient) {\n cachedHttpClient = new DefaultHttpClient();\n }\n return cachedHttpClient;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nconst errorMessage = \"ProxyPolicy is not supported in browser environment\";\nexport function getDefaultProxySettings(_proxyUrl) {\n return undefined;\n}\nexport function proxyPolicy(_proxySettings) {\n return {\n create: (_nextPolicy, _options) => {\n throw new Error(errorMessage);\n }\n };\n}\nexport class ProxyPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options) {\n super(nextPolicy, options);\n throw new Error(errorMessage);\n }\n sendRequest(_request) {\n throw new Error(errorMessage);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport * as utils from \"../util/utils\";\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nimport { delay } from \"@azure/core-util\";\nexport function rpRegistrationPolicy(retryTimeout = 30) {\n return {\n create: (nextPolicy, options) => {\n return new RPRegistrationPolicy(nextPolicy, options, retryTimeout);\n }\n };\n}\nexport class RPRegistrationPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options, _retryTimeout = 30) {\n super(nextPolicy, options);\n this._retryTimeout = _retryTimeout;\n }\n sendRequest(request) {\n return this._nextPolicy.sendRequest(request.clone()).then(response => registerIfNeeded(this, request, response));\n }\n}\nfunction registerIfNeeded(policy, request, response) {\n if (response.status === 409) {\n const rpName = checkRPNotRegisteredError(response.bodyAsText);\n if (rpName) {\n const urlPrefix = extractSubscriptionUrl(request.url);\n return registerRP(policy, urlPrefix, rpName, request)\n // Autoregistration of ${provider} failed for some reason. We will not return this error\n // instead will return the initial response with 409 status code back to the user.\n // do nothing here as we are returning the original response at the end of this method.\n .catch(() => false).then(registrationStatus => {\n if (registrationStatus) {\n // Retry the original request. We have to change the x-ms-client-request-id\n // otherwise Azure endpoint will return the initial 409 (cached) response.\n request.headers.set(\"x-ms-client-request-id\", utils.generateUuid());\n return policy._nextPolicy.sendRequest(request.clone());\n }\n return response;\n });\n }\n }\n return Promise.resolve(response);\n}\n/**\n * Reuses the headers of the original request and url (if specified).\n * @param originalRequest - The original request\n * @param reuseUrlToo - Should the url from the original request be reused as well. Default false.\n * @returns A new request object with desired headers.\n */\nfunction getRequestEssentials(originalRequest, reuseUrlToo = false) {\n const reqOptions = originalRequest.clone();\n if (reuseUrlToo) {\n reqOptions.url = originalRequest.url;\n }\n // We have to change the x-ms-client-request-id otherwise Azure endpoint\n // will return the initial 409 (cached) response.\n reqOptions.headers.set(\"x-ms-client-request-id\", utils.generateUuid());\n // Set content-type to application/json\n reqOptions.headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n return reqOptions;\n}\n/**\n * Validates the error code and message associated with 409 response status code. If it matches to that of\n * RP not registered then it returns the name of the RP else returns undefined.\n * @param body - The response body received after making the original request.\n * @returns The name of the RP if condition is satisfied else undefined.\n */\nfunction checkRPNotRegisteredError(body) {\n let result, responseBody;\n if (body) {\n try {\n responseBody = JSON.parse(body);\n } catch (err) {\n // do nothing;\n }\n if (responseBody && responseBody.error && responseBody.error.message && responseBody.error.code && responseBody.error.code === \"MissingSubscriptionRegistration\") {\n const matchRes = responseBody.error.message.match(/.*'(.*)'/i);\n if (matchRes) {\n result = matchRes.pop();\n }\n }\n }\n return result;\n}\n/**\n * Extracts the first part of the URL, just after subscription:\n * https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/\n * @param url - The original request url\n * @returns The url prefix as explained above.\n */\nfunction extractSubscriptionUrl(url) {\n let result;\n const matchRes = url.match(/.*\\/subscriptions\\/[a-f0-9-]+\\//gi);\n if (matchRes && matchRes[0]) {\n result = matchRes[0];\n } else {\n throw new Error(`Unable to extract subscriptionId from the given url - ${url}.`);\n }\n return result;\n}\n/**\n * Registers the given provider.\n * @param policy - The RPRegistrationPolicy this function is being called against.\n * @param urlPrefix - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/\n * @param provider - The provider name to be registered.\n * @param originalRequest - The original request sent by the user that returned a 409 response\n * with a message that the provider is not registered.\n */\nasync function registerRP(policy, urlPrefix, provider, originalRequest) {\n const postUrl = `${urlPrefix}providers/${provider}/register?api-version=2016-02-01`;\n const getUrl = `${urlPrefix}providers/${provider}?api-version=2016-02-01`;\n const reqOptions = getRequestEssentials(originalRequest);\n reqOptions.method = \"POST\";\n reqOptions.url = postUrl;\n const response = await policy._nextPolicy.sendRequest(reqOptions);\n if (response.status !== 200) {\n throw new Error(`Autoregistration of ${provider} failed. Please try registering manually.`);\n }\n return getRegistrationStatus(policy, getUrl, originalRequest);\n}\n/**\n * Polls the registration status of the provider that was registered. Polling happens at an interval of 30 seconds.\n * Polling will happen till the registrationState property of the response body is \"Registered\".\n * @param policy - The RPRegistrationPolicy this function is being called against.\n * @param url - The request url for polling\n * @param originalRequest - The original request sent by the user that returned a 409 response\n * with a message that the provider is not registered.\n * @returns True if RP Registration is successful.\n */\nasync function getRegistrationStatus(policy, url, originalRequest) {\n const reqOptions = getRequestEssentials(originalRequest);\n reqOptions.url = url;\n reqOptions.method = \"GET\";\n const res = await policy._nextPolicy.sendRequest(reqOptions);\n const obj = res.parsedBody;\n if (res.parsedBody && obj.registrationState && obj.registrationState === \"Registered\") {\n return true;\n } else {\n await delay(policy._retryTimeout * 1000);\n return getRegistrationStatus(policy, url, originalRequest);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\n/**\n * Creates a policy that signs outgoing requests by calling to the provided `authenticationProvider`'s `signRequest` method.\n * @param authenticationProvider - The authentication provider.\n * @returns An instance of the {@link SigningPolicy}.\n */\nexport function signingPolicy(authenticationProvider) {\n return {\n create: (nextPolicy, options) => {\n return new SigningPolicy(nextPolicy, options, authenticationProvider);\n }\n };\n}\n/**\n * A policy that signs outgoing requests by calling to the provided `authenticationProvider`'s `signRequest` method.\n */\nexport class SigningPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options, authenticationProvider) {\n super(nextPolicy, options);\n this.authenticationProvider = authenticationProvider;\n }\n signRequest(request) {\n return this.authenticationProvider.signRequest(request);\n }\n sendRequest(request) {\n return this.signRequest(request).then(nextRequest => this._nextPolicy.sendRequest(nextRequest));\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nimport { DEFAULT_CLIENT_MAX_RETRY_INTERVAL, DEFAULT_CLIENT_MIN_RETRY_INTERVAL, DEFAULT_CLIENT_RETRY_COUNT, DEFAULT_CLIENT_RETRY_INTERVAL, isNumber, shouldRetry, updateRetryData } from \"../util/exponentialBackoffStrategy\";\nimport { delay } from \"@azure/core-util\";\n/**\n * A policy that retries when there's a system error, identified by the codes \"ETIMEDOUT\", \"ESOCKETTIMEDOUT\", \"ECONNREFUSED\", \"ECONNRESET\" or \"ENOENT\".\n * @param retryCount - Maximum number of retries.\n * @param retryInterval - The client retry interval, in milliseconds.\n * @param minRetryInterval - The minimum retry interval, in milliseconds.\n * @param maxRetryInterval - The maximum retry interval, in milliseconds.\n * @returns An instance of the {@link SystemErrorRetryPolicy}\n */\nexport function systemErrorRetryPolicy(retryCount, retryInterval, minRetryInterval, maxRetryInterval) {\n return {\n create: (nextPolicy, options) => {\n return new SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);\n }\n };\n}\n/**\n * A policy that retries when there's a system error, identified by the codes \"ETIMEDOUT\", \"ESOCKETTIMEDOUT\", \"ECONNREFUSED\", \"ECONNRESET\" or \"ENOENT\".\n * @param retryCount - The client retry count.\n * @param retryInterval - The client retry interval, in milliseconds.\n * @param minRetryInterval - The minimum retry interval, in milliseconds.\n * @param maxRetryInterval - The maximum retry interval, in milliseconds.\n */\nexport class SystemErrorRetryPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval) {\n super(nextPolicy, options);\n this.retryCount = isNumber(retryCount) ? retryCount : DEFAULT_CLIENT_RETRY_COUNT;\n this.retryInterval = isNumber(retryInterval) ? retryInterval : DEFAULT_CLIENT_RETRY_INTERVAL;\n this.minRetryInterval = isNumber(minRetryInterval) ? minRetryInterval : DEFAULT_CLIENT_MIN_RETRY_INTERVAL;\n this.maxRetryInterval = isNumber(maxRetryInterval) ? maxRetryInterval : DEFAULT_CLIENT_MAX_RETRY_INTERVAL;\n }\n sendRequest(request) {\n return this._nextPolicy.sendRequest(request.clone()).catch(error => retry(this, request, error.response, error));\n }\n}\nasync function retry(policy, request, operationResponse, err, retryData) {\n retryData = updateRetryData(policy, retryData, err);\n function shouldPolicyRetry(_response, error) {\n if (error && error.code && (error.code === \"ETIMEDOUT\" || error.code === \"ESOCKETTIMEDOUT\" || error.code === \"ECONNREFUSED\" || error.code === \"ECONNRESET\" || error.code === \"ENOENT\")) {\n return true;\n }\n return false;\n }\n if (shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, operationResponse, err)) {\n // If previous operation ended with an error and the policy allows a retry, do that\n try {\n await delay(retryData.retryInterval);\n return policy._nextPolicy.sendRequest(request.clone());\n } catch (nestedErr) {\n return retry(policy, request, operationResponse, nestedErr, retryData);\n }\n } else {\n if (err) {\n // If the operation failed in the end, return all errors instead of just the last one\n return Promise.reject(retryData.error);\n }\n return operationResponse;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport { Constants } from \"../util/constants\";\nimport { DEFAULT_CLIENT_MAX_RETRY_COUNT } from \"../util/throttlingRetryStrategy\";\nimport { delay } from \"@azure/core-util\";\nconst StatusCodes = Constants.HttpConstants.StatusCodes;\n/**\n * Creates a policy that re-sends the request if the response indicates the request failed because of throttling reasons.\n * For example, if the response contains a `Retry-After` header, it will retry sending the request based on the value of that header.\n *\n * To learn more, please refer to\n * https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,\n * https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and\n * https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors\n * @returns\n */\nexport function throttlingRetryPolicy() {\n return {\n create: (nextPolicy, options) => {\n return new ThrottlingRetryPolicy(nextPolicy, options);\n }\n };\n}\nconst StandardAbortMessage = \"The operation was aborted.\";\n/**\n * Creates a policy that re-sends the request if the response indicates the request failed because of throttling reasons.\n * For example, if the response contains a `Retry-After` header, it will retry sending the request based on the value of that header.\n *\n * To learn more, please refer to\n * https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,\n * https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and\n * https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors\n */\nexport class ThrottlingRetryPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options, _handleResponse) {\n super(nextPolicy, options);\n this.numberOfRetries = 0;\n this._handleResponse = _handleResponse || this._defaultResponseHandler;\n }\n async sendRequest(httpRequest) {\n const response = await this._nextPolicy.sendRequest(httpRequest.clone());\n if (response.status !== StatusCodes.TooManyRequests && response.status !== StatusCodes.ServiceUnavailable) {\n return response;\n } else {\n return this._handleResponse(httpRequest, response);\n }\n }\n async _defaultResponseHandler(httpRequest, httpResponse) {\n var _a;\n const retryAfterHeader = httpResponse.headers.get(Constants.HeaderConstants.RETRY_AFTER);\n if (retryAfterHeader) {\n const delayInMs = ThrottlingRetryPolicy.parseRetryAfterHeader(retryAfterHeader);\n if (delayInMs) {\n this.numberOfRetries += 1;\n await delay(delayInMs, {\n abortSignal: httpRequest.abortSignal,\n abortErrorMsg: StandardAbortMessage\n });\n if ((_a = httpRequest.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {\n throw new AbortError(StandardAbortMessage);\n }\n if (this.numberOfRetries < DEFAULT_CLIENT_MAX_RETRY_COUNT) {\n return this.sendRequest(httpRequest);\n } else {\n return this._nextPolicy.sendRequest(httpRequest);\n }\n }\n }\n return httpResponse;\n }\n static parseRetryAfterHeader(headerValue) {\n const retryAfterInSeconds = Number(headerValue);\n if (Number.isNaN(retryAfterInSeconds)) {\n return ThrottlingRetryPolicy.parseDateRetryAfterHeader(headerValue);\n } else {\n return retryAfterInSeconds * 1000;\n }\n }\n static parseDateRetryAfterHeader(headerValue) {\n try {\n const now = Date.now();\n const date = Date.parse(headerValue);\n const diff = date - now;\n return Number.isNaN(diff) ? undefined : diff;\n } catch (error) {\n return undefined;\n }\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Updates to this file should also be replicated to @opentelemetry/core too.\n/**\n * - globalThis (New standard)\n * - self (Will return the current window instance for supported browsers)\n * - window (fallback for older browser implementations)\n * - global (NodeJS implementation)\n * - (When all else fails)\n */\n/** only globals that common to node and browsers are allowed */\n// eslint-disable-next-line node/no-unsupported-features/es-builtins, no-undef\nexport var _globalThis = typeof globalThis === 'object' ? globalThis : typeof self === 'object' ? self : typeof window === 'object' ? window : typeof global === 'object' ? global : {};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// this is autogenerated file, see scripts/version-update.js\nexport var VERSION = '1.9.0';\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { VERSION } from '../version';\nvar re = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;\n/**\n * Create a function to test an API version to see if it is compatible with the provided ownVersion.\n *\n * The returned function has the following semantics:\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param ownVersion version which should be checked against\n */\nexport function _makeCompatibilityCheck(ownVersion) {\n var acceptedVersions = new Set([ownVersion]);\n var rejectedVersions = new Set();\n var myVersionMatch = ownVersion.match(re);\n if (!myVersionMatch) {\n // we cannot guarantee compatibility so we always return noop\n return function () {\n return false;\n };\n }\n var ownVersionParsed = {\n major: +myVersionMatch[1],\n minor: +myVersionMatch[2],\n patch: +myVersionMatch[3],\n prerelease: myVersionMatch[4]\n };\n // if ownVersion has a prerelease tag, versions must match exactly\n if (ownVersionParsed.prerelease != null) {\n return function isExactmatch(globalVersion) {\n return globalVersion === ownVersion;\n };\n }\n function _reject(v) {\n rejectedVersions.add(v);\n return false;\n }\n function _accept(v) {\n acceptedVersions.add(v);\n return true;\n }\n return function isCompatible(globalVersion) {\n if (acceptedVersions.has(globalVersion)) {\n return true;\n }\n if (rejectedVersions.has(globalVersion)) {\n return false;\n }\n var globalVersionMatch = globalVersion.match(re);\n if (!globalVersionMatch) {\n // cannot parse other version\n // we cannot guarantee compatibility so we always noop\n return _reject(globalVersion);\n }\n var globalVersionParsed = {\n major: +globalVersionMatch[1],\n minor: +globalVersionMatch[2],\n patch: +globalVersionMatch[3],\n prerelease: globalVersionMatch[4]\n };\n // if globalVersion has a prerelease tag, versions must match exactly\n if (globalVersionParsed.prerelease != null) {\n return _reject(globalVersion);\n }\n // major versions must match\n if (ownVersionParsed.major !== globalVersionParsed.major) {\n return _reject(globalVersion);\n }\n if (ownVersionParsed.major === 0) {\n if (ownVersionParsed.minor === globalVersionParsed.minor && ownVersionParsed.patch <= globalVersionParsed.patch) {\n return _accept(globalVersion);\n }\n return _reject(globalVersion);\n }\n if (ownVersionParsed.minor <= globalVersionParsed.minor) {\n return _accept(globalVersion);\n }\n return _reject(globalVersion);\n };\n}\n/**\n * Test an API version to see if it is compatible with this API.\n *\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param version version of the API requesting an instance of the global API\n */\nexport var isCompatible = _makeCompatibilityCheck(VERSION);\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { _globalThis } from '../platform';\nimport { VERSION } from '../version';\nimport { isCompatible } from './semver';\nvar major = VERSION.split('.')[0];\nvar GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(\"opentelemetry.js.api.\" + major);\nvar _global = _globalThis;\nexport function registerGlobal(type, instance, diag, allowOverride) {\n var _a;\n if (allowOverride === void 0) {\n allowOverride = false;\n }\n var api = _global[GLOBAL_OPENTELEMETRY_API_KEY] = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) !== null && _a !== void 0 ? _a : {\n version: VERSION\n };\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n var err = new Error(\"@opentelemetry/api: Attempted duplicate registration of API: \" + type);\n diag.error(err.stack || err.message);\n return false;\n }\n if (api.version !== VERSION) {\n // All registered APIs must be of the same version exactly\n var err = new Error(\"@opentelemetry/api: Registration of version v\" + api.version + \" for \" + type + \" does not match previously registered API v\" + VERSION);\n diag.error(err.stack || err.message);\n return false;\n }\n api[type] = instance;\n diag.debug(\"@opentelemetry/api: Registered a global for \" + type + \" v\" + VERSION + \".\");\n return true;\n}\nexport function getGlobal(type) {\n var _a, _b;\n var globalVersion = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _a === void 0 ? void 0 : _a.version;\n if (!globalVersion || !isCompatible(globalVersion)) {\n return;\n }\n return (_b = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _b === void 0 ? void 0 : _b[type];\n}\nexport function unregisterGlobal(type, diag) {\n diag.debug(\"@opentelemetry/api: Unregistering a global for \" + type + \" v\" + VERSION + \".\");\n var api = _global[GLOBAL_OPENTELEMETRY_API_KEY];\n if (api) {\n delete api[type];\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { getGlobal } from '../internal/global-utils';\n/**\n * Component Logger which is meant to be used as part of any component which\n * will add automatically additional namespace in front of the log message.\n * It will then forward all message to global diag logger\n * @example\n * const cLogger = diag.createComponentLogger({ namespace: '@opentelemetry/instrumentation-http' });\n * cLogger.debug('test');\n * // @opentelemetry/instrumentation-http test\n */\nvar DiagComponentLogger = /** @class */function () {\n function DiagComponentLogger(props) {\n this._namespace = props.namespace || 'DiagComponentLogger';\n }\n DiagComponentLogger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('debug', this._namespace, args);\n };\n DiagComponentLogger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('error', this._namespace, args);\n };\n DiagComponentLogger.prototype.info = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('info', this._namespace, args);\n };\n DiagComponentLogger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('warn', this._namespace, args);\n };\n DiagComponentLogger.prototype.verbose = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('verbose', this._namespace, args);\n };\n return DiagComponentLogger;\n}();\nexport { DiagComponentLogger };\nfunction logProxy(funcName, namespace, args) {\n var logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger) {\n return;\n }\n args.unshift(namespace);\n return logger[funcName].apply(logger, __spreadArray([], __read(args), false));\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Defines the available internal logging levels for the diagnostic logger, the numeric values\n * of the levels are defined to match the original values from the initial LogLevel to avoid\n * compatibility/migration issues for any implementation that assume the numeric ordering.\n */\nexport var DiagLogLevel = /*#__PURE__*/function (DiagLogLevel) {\n /** Diagnostic Logging level setting to disable all logging (except and forced logs) */\n DiagLogLevel[DiagLogLevel[\"NONE\"] = 0] = \"NONE\";\n /** Identifies an error scenario */\n DiagLogLevel[DiagLogLevel[\"ERROR\"] = 30] = \"ERROR\";\n /** Identifies a warning scenario */\n DiagLogLevel[DiagLogLevel[\"WARN\"] = 50] = \"WARN\";\n /** General informational log message */\n DiagLogLevel[DiagLogLevel[\"INFO\"] = 60] = \"INFO\";\n /** General debug log message */\n DiagLogLevel[DiagLogLevel[\"DEBUG\"] = 70] = \"DEBUG\";\n /**\n * Detailed trace level logging should only be used for development, should only be set\n * in a development environment.\n */\n DiagLogLevel[DiagLogLevel[\"VERBOSE\"] = 80] = \"VERBOSE\";\n /** Used to set the logging level to include all logging */\n DiagLogLevel[DiagLogLevel[\"ALL\"] = 9999] = \"ALL\";\n return DiagLogLevel;\n}(DiagLogLevel || {});\n\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DiagLogLevel } from '../types';\nexport function createLogLevelDiagLogger(maxLevel, logger) {\n if (maxLevel < DiagLogLevel.NONE) {\n maxLevel = DiagLogLevel.NONE;\n } else if (maxLevel > DiagLogLevel.ALL) {\n maxLevel = DiagLogLevel.ALL;\n }\n // In case the logger is null or undefined\n logger = logger || {};\n function _filterFunc(funcName, theLevel) {\n var theFunc = logger[funcName];\n if (typeof theFunc === 'function' && maxLevel >= theLevel) {\n return theFunc.bind(logger);\n }\n return function () {};\n }\n return {\n error: _filterFunc('error', DiagLogLevel.ERROR),\n warn: _filterFunc('warn', DiagLogLevel.WARN),\n info: _filterFunc('info', DiagLogLevel.INFO),\n debug: _filterFunc('debug', DiagLogLevel.DEBUG),\n verbose: _filterFunc('verbose', DiagLogLevel.VERBOSE)\n };\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport { DiagLogLevel } from '../diag/types';\nimport { getGlobal, registerGlobal, unregisterGlobal } from '../internal/global-utils';\nvar API_NAME = 'diag';\n/**\n * Singleton object which represents the entry point to the OpenTelemetry internal\n * diagnostic API\n */\nvar DiagAPI = /** @class */function () {\n /**\n * Private internal constructor\n * @private\n */\n function DiagAPI() {\n function _logProxy(funcName) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger) return;\n return logger[funcName].apply(logger, __spreadArray([], __read(args), false));\n };\n }\n // Using self local variable for minification purposes as 'this' cannot be minified\n var self = this;\n // DiagAPI specific functions\n var setLogger = function (logger, optionsOrLogLevel) {\n var _a, _b, _c;\n if (optionsOrLogLevel === void 0) {\n optionsOrLogLevel = {\n logLevel: DiagLogLevel.INFO\n };\n }\n if (logger === self) {\n // There isn't much we can do here.\n // Logging to the console might break the user application.\n // Try to log to self. If a logger was previously registered it will receive the log.\n var err = new Error('Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation');\n self.error((_a = err.stack) !== null && _a !== void 0 ? _a : err.message);\n return false;\n }\n if (typeof optionsOrLogLevel === 'number') {\n optionsOrLogLevel = {\n logLevel: optionsOrLogLevel\n };\n }\n var oldLogger = getGlobal('diag');\n var newLogger = createLogLevelDiagLogger((_b = optionsOrLogLevel.logLevel) !== null && _b !== void 0 ? _b : DiagLogLevel.INFO, logger);\n // There already is an logger registered. We'll let it know before overwriting it.\n if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {\n var stack = (_c = new Error().stack) !== null && _c !== void 0 ? _c : '';\n oldLogger.warn(\"Current logger will be overwritten from \" + stack);\n newLogger.warn(\"Current logger will overwrite one already registered from \" + stack);\n }\n return registerGlobal('diag', newLogger, self, true);\n };\n self.setLogger = setLogger;\n self.disable = function () {\n unregisterGlobal(API_NAME, self);\n };\n self.createComponentLogger = function (options) {\n return new DiagComponentLogger(options);\n };\n self.verbose = _logProxy('verbose');\n self.debug = _logProxy('debug');\n self.info = _logProxy('info');\n self.warn = _logProxy('warn');\n self.error = _logProxy('error');\n }\n /** Get the singleton instance of the DiagAPI API */\n DiagAPI.instance = function () {\n if (!this._instance) {\n this._instance = new DiagAPI();\n }\n return this._instance;\n };\n return DiagAPI;\n}();\nexport { DiagAPI };\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Get a key to uniquely identify a context value */\nexport function createContextKey(description) {\n // The specification states that for the same input, multiple calls should\n // return different keys. Due to the nature of the JS dependency management\n // system, this creates problems where multiple versions of some package\n // could hold different keys for the same property.\n //\n // Therefore, we use Symbol.for which returns the same key for the same input.\n return Symbol.for(description);\n}\nvar BaseContext = /** @class */function () {\n /**\n * Construct a new context which inherits values from an optional parent context.\n *\n * @param parentContext a context from which to inherit values\n */\n function BaseContext(parentContext) {\n // for minification\n var self = this;\n self._currentContext = parentContext ? new Map(parentContext) : new Map();\n self.getValue = function (key) {\n return self._currentContext.get(key);\n };\n self.setValue = function (key, value) {\n var context = new BaseContext(self._currentContext);\n context._currentContext.set(key, value);\n return context;\n };\n self.deleteValue = function (key) {\n var context = new BaseContext(self._currentContext);\n context._currentContext.delete(key);\n return context;\n };\n }\n return BaseContext;\n}();\n/** The root context is used as the default parent context when there is no active context */\nexport var ROOT_CONTEXT = new BaseContext();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { ROOT_CONTEXT } from './context';\nvar NoopContextManager = /** @class */function () {\n function NoopContextManager() {}\n NoopContextManager.prototype.active = function () {\n return ROOT_CONTEXT;\n };\n NoopContextManager.prototype.with = function (_context, fn, thisArg) {\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n return fn.call.apply(fn, __spreadArray([thisArg], __read(args), false));\n };\n NoopContextManager.prototype.bind = function (_context, target) {\n return target;\n };\n NoopContextManager.prototype.enable = function () {\n return this;\n };\n NoopContextManager.prototype.disable = function () {\n return this;\n };\n return NoopContextManager;\n}();\nexport { NoopContextManager };\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { NoopContextManager } from '../context/NoopContextManager';\nimport { getGlobal, registerGlobal, unregisterGlobal } from '../internal/global-utils';\nimport { DiagAPI } from './diag';\nvar API_NAME = 'context';\nvar NOOP_CONTEXT_MANAGER = new NoopContextManager();\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Context API\n */\nvar ContextAPI = /** @class */function () {\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n function ContextAPI() {}\n /** Get the singleton instance of the Context API */\n ContextAPI.getInstance = function () {\n if (!this._instance) {\n this._instance = new ContextAPI();\n }\n return this._instance;\n };\n /**\n * Set the current context manager.\n *\n * @returns true if the context manager was successfully registered, else false\n */\n ContextAPI.prototype.setGlobalContextManager = function (contextManager) {\n return registerGlobal(API_NAME, contextManager, DiagAPI.instance());\n };\n /**\n * Get the currently active context\n */\n ContextAPI.prototype.active = function () {\n return this._getContextManager().active();\n };\n /**\n * Execute a function with an active context\n *\n * @param context context to be active during function execution\n * @param fn function to execute in a context\n * @param thisArg optional receiver to be used for calling fn\n * @param args optional arguments forwarded to fn\n */\n ContextAPI.prototype.with = function (context, fn, thisArg) {\n var _a;\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n return (_a = this._getContextManager()).with.apply(_a, __spreadArray([context, fn, thisArg], __read(args), false));\n };\n /**\n * Bind a context to a target function or event emitter\n *\n * @param context context to bind to the event emitter or function. Defaults to the currently active context\n * @param target function or event emitter to bind\n */\n ContextAPI.prototype.bind = function (context, target) {\n return this._getContextManager().bind(context, target);\n };\n ContextAPI.prototype._getContextManager = function () {\n return getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER;\n };\n /** Disable and remove the global context manager */\n ContextAPI.prototype.disable = function () {\n this._getContextManager().disable();\n unregisterGlobal(API_NAME, DiagAPI.instance());\n };\n return ContextAPI;\n}();\nexport { ContextAPI };\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var TraceFlags = /*#__PURE__*/function (TraceFlags) {\n /** Represents no flag set. */\n TraceFlags[TraceFlags[\"NONE\"] = 0] = \"NONE\";\n /** Bit to represent whether trace is sampled in trace flags. */\n TraceFlags[TraceFlags[\"SAMPLED\"] = 1] = \"SAMPLED\";\n return TraceFlags;\n}(TraceFlags || {});\n\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TraceFlags } from './trace_flags';\nexport var INVALID_SPANID = '0000000000000000';\nexport var INVALID_TRACEID = '00000000000000000000000000000000';\nexport var INVALID_SPAN_CONTEXT = {\n traceId: INVALID_TRACEID,\n spanId: INVALID_SPANID,\n traceFlags: TraceFlags.NONE\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPAN_CONTEXT } from './invalid-span-constants';\n/**\n * The NonRecordingSpan is the default {@link Span} that is used when no Span\n * implementation is available. All operations are no-op including context\n * propagation.\n */\nvar NonRecordingSpan = /** @class */function () {\n function NonRecordingSpan(_spanContext) {\n if (_spanContext === void 0) {\n _spanContext = INVALID_SPAN_CONTEXT;\n }\n this._spanContext = _spanContext;\n }\n // Returns a SpanContext.\n NonRecordingSpan.prototype.spanContext = function () {\n return this._spanContext;\n };\n // By default does nothing\n NonRecordingSpan.prototype.setAttribute = function (_key, _value) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.setAttributes = function (_attributes) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.addEvent = function (_name, _attributes) {\n return this;\n };\n NonRecordingSpan.prototype.addLink = function (_link) {\n return this;\n };\n NonRecordingSpan.prototype.addLinks = function (_links) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.setStatus = function (_status) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.updateName = function (_name) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.end = function (_endTime) {};\n // isRecording always returns false for NonRecordingSpan.\n NonRecordingSpan.prototype.isRecording = function () {\n return false;\n };\n // By default does nothing\n NonRecordingSpan.prototype.recordException = function (_exception, _time) {};\n return NonRecordingSpan;\n}();\nexport { NonRecordingSpan };\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createContextKey } from '../context/context';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { ContextAPI } from '../api/context';\n/**\n * span key\n */\nvar SPAN_KEY = createContextKey('OpenTelemetry Context Key SPAN');\n/**\n * Return the span if one exists\n *\n * @param context context to get span from\n */\nexport function getSpan(context) {\n return context.getValue(SPAN_KEY) || undefined;\n}\n/**\n * Gets the span from the current context, if one exists.\n */\nexport function getActiveSpan() {\n return getSpan(ContextAPI.getInstance().active());\n}\n/**\n * Set the span on a context\n *\n * @param context context to use as parent\n * @param span span to set active\n */\nexport function setSpan(context, span) {\n return context.setValue(SPAN_KEY, span);\n}\n/**\n * Remove current span stored in the context\n *\n * @param context context to delete span from\n */\nexport function deleteSpan(context) {\n return context.deleteValue(SPAN_KEY);\n}\n/**\n * Wrap span context in a NoopSpan and set as span in a new\n * context\n *\n * @param context context to set active span on\n * @param spanContext span context to be wrapped\n */\nexport function setSpanContext(context, spanContext) {\n return setSpan(context, new NonRecordingSpan(spanContext));\n}\n/**\n * Get the span context of the span if it exists.\n *\n * @param context context to get values from\n */\nexport function getSpanContext(context) {\n var _a;\n return (_a = getSpan(context)) === null || _a === void 0 ? void 0 : _a.spanContext();\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nvar VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;\nvar VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;\nexport function isValidTraceId(traceId) {\n return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID;\n}\nexport function isValidSpanId(spanId) {\n return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID;\n}\n/**\n * Returns true if this {@link SpanContext} is valid.\n * @return true if this {@link SpanContext} is valid.\n */\nexport function isSpanContextValid(spanContext) {\n return isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId);\n}\n/**\n * Wrap the given {@link SpanContext} in a new non-recording {@link Span}\n *\n * @param spanContext span context to be wrapped\n * @returns a new non-recording {@link Span} with the provided context\n */\nexport function wrapSpanContext(spanContext) {\n return new NonRecordingSpan(spanContext);\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ContextAPI } from '../api/context';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { isSpanContextValid } from './spancontext-utils';\nvar contextApi = ContextAPI.getInstance();\n/**\n * No-op implementations of {@link Tracer}.\n */\nvar NoopTracer = /** @class */function () {\n function NoopTracer() {}\n // startSpan starts a noop span.\n NoopTracer.prototype.startSpan = function (name, options, context) {\n if (context === void 0) {\n context = contextApi.active();\n }\n var root = Boolean(options === null || options === void 0 ? void 0 : options.root);\n if (root) {\n return new NonRecordingSpan();\n }\n var parentFromContext = context && getSpanContext(context);\n if (isSpanContext(parentFromContext) && isSpanContextValid(parentFromContext)) {\n return new NonRecordingSpan(parentFromContext);\n } else {\n return new NonRecordingSpan();\n }\n };\n NoopTracer.prototype.startActiveSpan = function (name, arg2, arg3, arg4) {\n var opts;\n var ctx;\n var fn;\n if (arguments.length < 2) {\n return;\n } else if (arguments.length === 2) {\n fn = arg2;\n } else if (arguments.length === 3) {\n opts = arg2;\n fn = arg3;\n } else {\n opts = arg2;\n ctx = arg3;\n fn = arg4;\n }\n var parentContext = ctx !== null && ctx !== void 0 ? ctx : contextApi.active();\n var span = this.startSpan(name, opts, parentContext);\n var contextWithSpanSet = setSpan(parentContext, span);\n return contextApi.with(contextWithSpanSet, fn, undefined, span);\n };\n return NoopTracer;\n}();\nexport { NoopTracer };\nfunction isSpanContext(spanContext) {\n return typeof spanContext === 'object' && typeof spanContext['spanId'] === 'string' && typeof spanContext['traceId'] === 'string' && typeof spanContext['traceFlags'] === 'number';\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NoopTracer } from './NoopTracer';\nvar NOOP_TRACER = new NoopTracer();\n/**\n * Proxy tracer provided by the proxy tracer provider\n */\nvar ProxyTracer = /** @class */function () {\n function ProxyTracer(_provider, name, version, options) {\n this._provider = _provider;\n this.name = name;\n this.version = version;\n this.options = options;\n }\n ProxyTracer.prototype.startSpan = function (name, options, context) {\n return this._getTracer().startSpan(name, options, context);\n };\n ProxyTracer.prototype.startActiveSpan = function (_name, _options, _context, _fn) {\n var tracer = this._getTracer();\n return Reflect.apply(tracer.startActiveSpan, tracer, arguments);\n };\n /**\n * Try to get a tracer from the proxy tracer provider.\n * If the proxy tracer provider has no delegate, return a noop tracer.\n */\n ProxyTracer.prototype._getTracer = function () {\n if (this._delegate) {\n return this._delegate;\n }\n var tracer = this._provider.getDelegateTracer(this.name, this.version, this.options);\n if (!tracer) {\n return NOOP_TRACER;\n }\n this._delegate = tracer;\n return this._delegate;\n };\n return ProxyTracer;\n}();\nexport { ProxyTracer };\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NoopTracer } from './NoopTracer';\n/**\n * An implementation of the {@link TracerProvider} which returns an impotent\n * Tracer for all calls to `getTracer`.\n *\n * All operations are no-op.\n */\nvar NoopTracerProvider = /** @class */function () {\n function NoopTracerProvider() {}\n NoopTracerProvider.prototype.getTracer = function (_name, _version, _options) {\n return new NoopTracer();\n };\n return NoopTracerProvider;\n}();\nexport { NoopTracerProvider };\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ProxyTracer } from './ProxyTracer';\nimport { NoopTracerProvider } from './NoopTracerProvider';\nvar NOOP_TRACER_PROVIDER = new NoopTracerProvider();\n/**\n * Tracer provider which provides {@link ProxyTracer}s.\n *\n * Before a delegate is set, tracers provided are NoOp.\n * When a delegate is set, traces are provided from the delegate.\n * When a delegate is set after tracers have already been provided,\n * all tracers already provided will use the provided delegate implementation.\n */\nvar ProxyTracerProvider = /** @class */function () {\n function ProxyTracerProvider() {}\n /**\n * Get a {@link ProxyTracer}\n */\n ProxyTracerProvider.prototype.getTracer = function (name, version, options) {\n var _a;\n return (_a = this.getDelegateTracer(name, version, options)) !== null && _a !== void 0 ? _a : new ProxyTracer(this, name, version, options);\n };\n ProxyTracerProvider.prototype.getDelegate = function () {\n var _a;\n return (_a = this._delegate) !== null && _a !== void 0 ? _a : NOOP_TRACER_PROVIDER;\n };\n /**\n * Set the delegate tracer provider\n */\n ProxyTracerProvider.prototype.setDelegate = function (delegate) {\n this._delegate = delegate;\n };\n ProxyTracerProvider.prototype.getDelegateTracer = function (name, version, options) {\n var _a;\n return (_a = this._delegate) === null || _a === void 0 ? void 0 : _a.getTracer(name, version, options);\n };\n return ProxyTracerProvider;\n}();\nexport { ProxyTracerProvider };\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ContextAPI } from './api/context';\n/** Entrypoint for context API */\nexport var context = ContextAPI.getInstance();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getGlobal, registerGlobal, unregisterGlobal } from '../internal/global-utils';\nimport { ProxyTracerProvider } from '../trace/ProxyTracerProvider';\nimport { isSpanContextValid, wrapSpanContext } from '../trace/spancontext-utils';\nimport { deleteSpan, getActiveSpan, getSpan, getSpanContext, setSpan, setSpanContext } from '../trace/context-utils';\nimport { DiagAPI } from './diag';\nvar API_NAME = 'trace';\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Tracing API\n */\nvar TraceAPI = /** @class */function () {\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n function TraceAPI() {\n this._proxyTracerProvider = new ProxyTracerProvider();\n this.wrapSpanContext = wrapSpanContext;\n this.isSpanContextValid = isSpanContextValid;\n this.deleteSpan = deleteSpan;\n this.getSpan = getSpan;\n this.getActiveSpan = getActiveSpan;\n this.getSpanContext = getSpanContext;\n this.setSpan = setSpan;\n this.setSpanContext = setSpanContext;\n }\n /** Get the singleton instance of the Trace API */\n TraceAPI.getInstance = function () {\n if (!this._instance) {\n this._instance = new TraceAPI();\n }\n return this._instance;\n };\n /**\n * Set the current global tracer.\n *\n * @returns true if the tracer provider was successfully registered, else false\n */\n TraceAPI.prototype.setGlobalTracerProvider = function (provider) {\n var success = registerGlobal(API_NAME, this._proxyTracerProvider, DiagAPI.instance());\n if (success) {\n this._proxyTracerProvider.setDelegate(provider);\n }\n return success;\n };\n /**\n * Returns the global tracer provider.\n */\n TraceAPI.prototype.getTracerProvider = function () {\n return getGlobal(API_NAME) || this._proxyTracerProvider;\n };\n /**\n * Returns a tracer from the global tracer provider.\n */\n TraceAPI.prototype.getTracer = function (name, version) {\n return this.getTracerProvider().getTracer(name, version);\n };\n /** Remove the global tracer provider */\n TraceAPI.prototype.disable = function () {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n this._proxyTracerProvider = new ProxyTracerProvider();\n };\n return TraceAPI;\n}();\nexport { TraceAPI };\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TraceAPI } from './api/trace';\n/** Entrypoint for trace API */\nexport var trace = TraceAPI.getInstance();\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { context as otContext, trace as otTrace } from \"@opentelemetry/api\";\n/**\n * The kind of span.\n */\nexport var SpanKind = /*#__PURE__*/function (SpanKind) {\n /** Default value. Indicates that the span is used internally. */\n SpanKind[SpanKind[\"INTERNAL\"] = 0] = \"INTERNAL\";\n /**\n * Indicates that the span covers server-side handling of an RPC or other\n * remote request.\n */\n SpanKind[SpanKind[\"SERVER\"] = 1] = \"SERVER\";\n /**\n * Indicates that the span covers the client-side wrapper around an RPC or\n * other remote request.\n */\n SpanKind[SpanKind[\"CLIENT\"] = 2] = \"CLIENT\";\n /**\n * Indicates that the span describes producer sending a message to a\n * broker. Unlike client and server, there is no direct critical path latency\n * relationship between producer and consumer spans.\n */\n SpanKind[SpanKind[\"PRODUCER\"] = 3] = \"PRODUCER\";\n /**\n * Indicates that the span describes consumer receiving a message from a\n * broker. Unlike client and server, there is no direct critical path latency\n * relationship between producer and consumer spans.\n */\n SpanKind[SpanKind[\"CONSUMER\"] = 4] = \"CONSUMER\";\n return SpanKind;\n}(SpanKind || {});\n/**\n * Return the span if one exists\n *\n * @param context - context to get span from\n */\nexport function getSpan(context) {\n return otTrace.getSpan(context);\n}\n/**\n * Set the span on a context\n *\n * @param context - context to use as parent\n * @param span - span to set active\n */\nexport function setSpan(context, span) {\n return otTrace.setSpan(context, span);\n}\n/**\n * Wrap span context in a NoopSpan and set as span in a new\n * context\n *\n * @param context - context to set active span on\n * @param spanContext - span context to be wrapped\n */\nexport function setSpanContext(context, spanContext) {\n return otTrace.setSpanContext(context, spanContext);\n}\n/**\n * Get the span context of the span if it exists.\n *\n * @param context - context to get values from\n */\nexport function getSpanContext(context) {\n return otTrace.getSpanContext(context);\n}\n/**\n * Returns true of the given {@link SpanContext} is valid.\n * A valid {@link SpanContext} is one which has a valid trace ID and span ID as per the spec.\n *\n * @param context - the {@link SpanContext} to validate.\n *\n * @returns true if the {@link SpanContext} is valid, false otherwise.\n */\nexport function isSpanContextValid(context) {\n return otTrace.isSpanContextValid(context);\n}\nexport function getTracer(name, version) {\n return otTrace.getTracer(name || \"azure/core-tracing\", version);\n}\n/** Entrypoint for context API */\nexport const context = otContext;\n/** SpanStatusCode */\nexport var SpanStatusCode = /*#__PURE__*/function (SpanStatusCode) {\n /**\n * The default status.\n */\n SpanStatusCode[SpanStatusCode[\"UNSET\"] = 0] = \"UNSET\";\n /**\n * The operation has been validated by an Application developer or\n * Operator to have completed successfully.\n */\n SpanStatusCode[SpanStatusCode[\"OK\"] = 1] = \"OK\";\n /**\n * The operation contains an error.\n */\n SpanStatusCode[SpanStatusCode[\"ERROR\"] = 2] = \"ERROR\";\n return SpanStatusCode;\n}(SpanStatusCode || {});\n\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { SpanKind, setSpan, context as otContext, getTracer } from \"./interfaces\";\nimport { trace, INVALID_SPAN_CONTEXT } from \"@opentelemetry/api\";\nexport function isTracingDisabled() {\n var _a;\n if (typeof process === \"undefined\") {\n // not supported in browser for now without polyfills\n return false;\n }\n const azureTracingDisabledValue = (_a = process.env.AZURE_TRACING_DISABLED) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n if (azureTracingDisabledValue === \"false\" || azureTracingDisabledValue === \"0\") {\n return false;\n }\n return Boolean(azureTracingDisabledValue);\n}\n/**\n * Creates a function that can be used to create spans using the global tracer.\n *\n * Usage:\n *\n * ```typescript\n * // once\n * const createSpan = createSpanFunction({ packagePrefix: \"Azure.Data.AppConfiguration\", namespace: \"Microsoft.AppConfiguration\" });\n *\n * // in each operation\n * const span = createSpan(\"deleteConfigurationSetting\", operationOptions);\n * // code...\n * span.end();\n * ```\n *\n * @hidden\n * @param args - allows configuration of the prefix for each span as well as the az.namespace field.\n */\nexport function createSpanFunction(args) {\n return function (operationName, operationOptions) {\n const tracer = getTracer();\n const tracingOptions = (operationOptions === null || operationOptions === void 0 ? void 0 : operationOptions.tracingOptions) || {};\n const spanOptions = Object.assign({\n kind: SpanKind.INTERNAL\n }, tracingOptions.spanOptions);\n const spanName = args.packagePrefix ? `${args.packagePrefix}.${operationName}` : operationName;\n let span;\n if (isTracingDisabled()) {\n span = trace.wrapSpanContext(INVALID_SPAN_CONTEXT);\n } else {\n span = tracer.startSpan(spanName, spanOptions, tracingOptions.tracingContext);\n }\n if (args.namespace) {\n span.setAttribute(\"az.namespace\", args.namespace);\n }\n let newSpanOptions = tracingOptions.spanOptions || {};\n if (span.isRecording() && args.namespace) {\n newSpanOptions = Object.assign(Object.assign({}, tracingOptions.spanOptions), {\n attributes: Object.assign(Object.assign({}, spanOptions.attributes), {\n \"az.namespace\": args.namespace\n })\n });\n }\n const newTracingOptions = Object.assign(Object.assign({}, tracingOptions), {\n spanOptions: newSpanOptions,\n tracingContext: setSpan(tracingOptions.tracingContext || otContext.active(), span)\n });\n const newOperationOptions = Object.assign(Object.assign({}, operationOptions), {\n tracingOptions: newTracingOptions\n });\n return {\n span,\n updatedOptions: newOperationOptions\n };\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nconst VERSION = \"00\";\n/**\n * Generates a `SpanContext` given a `traceparent` header value.\n * @param traceParent - Serialized span context data as a `traceparent` header value.\n * @returns The `SpanContext` generated from the `traceparent` value.\n */\nexport function extractSpanContextFromTraceParentHeader(traceParentHeader) {\n const parts = traceParentHeader.split(\"-\");\n if (parts.length !== 4) {\n return;\n }\n const [version, traceId, spanId, traceOptions] = parts;\n if (version !== VERSION) {\n return;\n }\n const traceFlags = parseInt(traceOptions, 16);\n const spanContext = {\n spanId,\n traceId,\n traceFlags\n };\n return spanContext;\n}\n/**\n * Generates a `traceparent` value given a span context.\n * @param spanContext - Contains context for a specific span.\n * @returns The `spanContext` represented as a `traceparent` value.\n */\nexport function getTraceParentHeader(spanContext) {\n const missingFields = [];\n if (!spanContext.traceId) {\n missingFields.push(\"traceId\");\n }\n if (!spanContext.spanId) {\n missingFields.push(\"spanId\");\n }\n if (missingFields.length) {\n return;\n }\n const flags = spanContext.traceFlags || 0 /* NONE */;\n const hexFlags = flags.toString(16);\n const traceFlags = hexFlags.length === 1 ? `0${hexFlags}` : hexFlags;\n // https://www.w3.org/TR/trace-context/#traceparent-header-field-values\n return `${VERSION}-${spanContext.traceId}-${spanContext.spanId}-${traceFlags}`;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"./requestPolicy\";\nimport { SpanKind, SpanStatusCode, createSpanFunction, getTraceParentHeader, isSpanContextValid } from \"@azure/core-tracing\";\nimport { logger } from \"../log\";\nconst createSpan = createSpanFunction({\n packagePrefix: \"\",\n namespace: \"\"\n});\n/**\n * Creates a policy that wraps outgoing requests with a tracing span.\n * @param tracingOptions - Tracing options.\n * @returns An instance of the {@link TracingPolicy} class.\n */\nexport function tracingPolicy(tracingOptions = {}) {\n return {\n create(nextPolicy, options) {\n return new TracingPolicy(nextPolicy, options, tracingOptions);\n }\n };\n}\n/**\n * A policy that wraps outgoing requests with a tracing span.\n */\nexport class TracingPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options, tracingOptions) {\n super(nextPolicy, options);\n this.userAgent = tracingOptions.userAgent;\n }\n async sendRequest(request) {\n if (!request.tracingContext) {\n return this._nextPolicy.sendRequest(request);\n }\n const span = this.tryCreateSpan(request);\n if (!span) {\n return this._nextPolicy.sendRequest(request);\n }\n try {\n const response = await this._nextPolicy.sendRequest(request);\n this.tryProcessResponse(span, response);\n return response;\n } catch (err) {\n this.tryProcessError(span, err);\n throw err;\n }\n }\n tryCreateSpan(request) {\n var _a;\n try {\n // Passing spanOptions as part of tracingOptions to maintain compatibility @azure/core-tracing@preview.13 and earlier.\n // We can pass this as a separate parameter once we upgrade to the latest core-tracing.\n const {\n span\n } = createSpan(`HTTP ${request.method}`, {\n tracingOptions: {\n spanOptions: Object.assign(Object.assign({}, request.spanOptions), {\n kind: SpanKind.CLIENT\n }),\n tracingContext: request.tracingContext\n }\n });\n // If the span is not recording, don't do any more work.\n if (!span.isRecording()) {\n span.end();\n return undefined;\n }\n const namespaceFromContext = (_a = request.tracingContext) === null || _a === void 0 ? void 0 : _a.getValue(Symbol.for(\"az.namespace\"));\n if (typeof namespaceFromContext === \"string\") {\n span.setAttribute(\"az.namespace\", namespaceFromContext);\n }\n span.setAttributes({\n \"http.method\": request.method,\n \"http.url\": request.url,\n requestId: request.requestId\n });\n if (this.userAgent) {\n span.setAttribute(\"http.user_agent\", this.userAgent);\n }\n // set headers\n const spanContext = span.spanContext();\n const traceParentHeader = getTraceParentHeader(spanContext);\n if (traceParentHeader && isSpanContextValid(spanContext)) {\n request.headers.set(\"traceparent\", traceParentHeader);\n const traceState = spanContext.traceState && spanContext.traceState.serialize();\n // if tracestate is set, traceparent MUST be set, so only set tracestate after traceparent\n if (traceState) {\n request.headers.set(\"tracestate\", traceState);\n }\n }\n return span;\n } catch (error) {\n logger.warning(`Skipping creating a tracing span due to an error: ${error.message}`);\n return undefined;\n }\n }\n tryProcessError(span, err) {\n try {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message\n });\n if (err.statusCode) {\n span.setAttribute(\"http.status_code\", err.statusCode);\n }\n span.end();\n } catch (error) {\n logger.warning(`Skipping tracing span processing due to an error: ${error.message}`);\n }\n }\n tryProcessResponse(span, response) {\n try {\n span.setAttribute(\"http.status_code\", response.status);\n const serviceRequestId = response.headers.get(\"x-ms-request-id\");\n if (serviceRequestId) {\n span.setAttribute(\"serviceRequestId\", serviceRequestId);\n }\n span.setStatus({\n code: SpanStatusCode.OK\n });\n span.end();\n } catch (error) {\n logger.warning(`Skipping tracing span processing due to an error: ${error.message}`);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport * as utils from \"./util/utils\";\nimport { MapperType } from \"./serializer\";\nimport { DefaultDeserializationOptions, deserializationPolicy } from \"./policies/deserializationPolicy\";\nimport { DefaultKeepAliveOptions, keepAlivePolicy } from \"./policies/keepAlivePolicy\";\nimport { DefaultRedirectOptions, redirectPolicy } from \"./policies/redirectPolicy\";\nimport { DefaultRetryOptions, exponentialRetryPolicy } from \"./policies/exponentialRetryPolicy\";\nimport { logPolicy } from \"./policies/logPolicy\";\nimport { getPathStringFromParameter, getPathStringFromParameterPath } from \"./operationParameter\";\nimport { getStreamResponseStatusCodes } from \"./operationSpec\";\nimport { WebResource, isWebResourceLike } from \"./webResource\";\nimport { RequestPolicyOptions } from \"./policies/requestPolicy\";\nimport { XML_ATTRKEY, XML_CHARKEY } from \"./util/serializer.common\";\nimport { isNode } from \"@azure/core-util\";\nimport { isTokenCredential } from \"@azure/core-auth\";\nimport { getDefaultUserAgentHeaderName, getDefaultUserAgentValue, userAgentPolicy } from \"./policies/userAgentPolicy\";\nimport { QueryCollectionFormat } from \"./queryCollectionFormat\";\nimport { URLBuilder } from \"./url\";\nimport { bearerTokenAuthenticationPolicy } from \"./policies/bearerTokenAuthenticationPolicy\";\nimport { disableResponseDecompressionPolicy } from \"./policies/disableResponseDecompressionPolicy\";\nimport { generateClientRequestIdPolicy } from \"./policies/generateClientRequestIdPolicy\";\nimport { getCachedDefaultHttpClient } from \"./httpClientCache\";\nimport { logger } from \"./log\";\nimport { ndJsonPolicy } from \"./policies/ndJsonPolicy\";\nimport { proxyPolicy } from \"./policies/proxyPolicy\";\nimport { rpRegistrationPolicy } from \"./policies/rpRegistrationPolicy\";\nimport { signingPolicy } from \"./policies/signingPolicy\";\nimport { stringifyXML } from \"./util/xml\";\nimport { systemErrorRetryPolicy } from \"./policies/systemErrorRetryPolicy\";\nimport { throttlingRetryPolicy } from \"./policies/throttlingRetryPolicy\";\nimport { tracingPolicy } from \"./policies/tracingPolicy\";\n/**\n * ServiceClient sends service requests and receives responses.\n */\nexport class ServiceClient {\n /**\n * The ServiceClient constructor\n * @param credentials - The credentials used for authentication with the service.\n * @param options - The service client options that govern the behavior of the client.\n */\n constructor(credentials, /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options */\n options) {\n if (!options) {\n options = {};\n }\n this._withCredentials = options.withCredentials || false;\n this._httpClient = options.httpClient || getCachedDefaultHttpClient();\n this._requestPolicyOptions = new RequestPolicyOptions(options.httpPipelineLogger);\n let requestPolicyFactories;\n if (Array.isArray(options.requestPolicyFactories)) {\n logger.info(\"ServiceClient: using custom request policies\");\n requestPolicyFactories = options.requestPolicyFactories;\n } else {\n let authPolicyFactory = undefined;\n if (isTokenCredential(credentials)) {\n logger.info(\"ServiceClient: creating bearer token authentication policy from provided credentials\");\n // Create a wrapped RequestPolicyFactory here so that we can provide the\n // correct scope to the BearerTokenAuthenticationPolicy at the first time\n // one is requested. This is needed because generated ServiceClient\n // implementations do not set baseUri until after ServiceClient's constructor\n // is finished, leaving baseUri empty at the time when it is needed to\n // build the correct scope name.\n const wrappedPolicyFactory = () => {\n let bearerTokenPolicyFactory = undefined;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const serviceClient = this;\n const serviceClientOptions = options;\n return {\n create(nextPolicy, createOptions) {\n const credentialScopes = getCredentialScopes(serviceClientOptions, serviceClient.baseUri);\n if (!credentialScopes) {\n throw new Error(`When using credential, the ServiceClient must contain a baseUri or a credentialScopes in ServiceClientOptions. Unable to create a bearerTokenAuthenticationPolicy`);\n }\n if (bearerTokenPolicyFactory === undefined || bearerTokenPolicyFactory === null) {\n bearerTokenPolicyFactory = bearerTokenAuthenticationPolicy(credentials, credentialScopes);\n }\n return bearerTokenPolicyFactory.create(nextPolicy, createOptions);\n }\n };\n };\n authPolicyFactory = wrappedPolicyFactory();\n } else if (credentials && typeof credentials.signRequest === \"function\") {\n logger.info(\"ServiceClient: creating signing policy from provided credentials\");\n authPolicyFactory = signingPolicy(credentials);\n } else if (credentials !== undefined && credentials !== null) {\n throw new Error(\"The credentials argument must implement the TokenCredential interface\");\n }\n logger.info(\"ServiceClient: using default request policies\");\n requestPolicyFactories = createDefaultRequestPolicyFactories(authPolicyFactory, options);\n if (options.requestPolicyFactories) {\n // options.requestPolicyFactories can also be a function that manipulates\n // the default requestPolicyFactories array\n const newRequestPolicyFactories = options.requestPolicyFactories(requestPolicyFactories);\n if (newRequestPolicyFactories) {\n requestPolicyFactories = newRequestPolicyFactories;\n }\n }\n }\n this._requestPolicyFactories = requestPolicyFactories;\n }\n /**\n * Send the provided httpRequest.\n */\n sendRequest(options) {\n if (options === null || options === undefined || typeof options !== \"object\") {\n throw new Error(\"options cannot be null or undefined and it must be of type object.\");\n }\n let httpRequest;\n try {\n if (isWebResourceLike(options)) {\n options.validateRequestProperties();\n httpRequest = options;\n } else {\n httpRequest = new WebResource();\n httpRequest = httpRequest.prepare(options);\n }\n } catch (error) {\n return Promise.reject(error);\n }\n let httpPipeline = this._httpClient;\n if (this._requestPolicyFactories && this._requestPolicyFactories.length > 0) {\n for (let i = this._requestPolicyFactories.length - 1; i >= 0; --i) {\n httpPipeline = this._requestPolicyFactories[i].create(httpPipeline, this._requestPolicyOptions);\n }\n }\n return httpPipeline.sendRequest(httpRequest);\n }\n /**\n * Send an HTTP request that is populated using the provided OperationSpec.\n * @param operationArguments - The arguments that the HTTP request's templated values will be populated from.\n * @param operationSpec - The OperationSpec to use to populate the httpRequest.\n * @param callback - The callback to call when the response is received.\n */\n async sendOperationRequest(operationArguments, operationSpec, callback) {\n var _a;\n if (typeof operationArguments.options === \"function\") {\n callback = operationArguments.options;\n operationArguments.options = undefined;\n }\n const serializerOptions = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.serializerOptions;\n const httpRequest = new WebResource();\n let result;\n try {\n const baseUri = operationSpec.baseUrl || this.baseUri;\n if (!baseUri) {\n throw new Error(\"If operationSpec.baseUrl is not specified, then the ServiceClient must have a baseUri string property that contains the base URL to use.\");\n }\n httpRequest.method = operationSpec.httpMethod;\n httpRequest.operationSpec = operationSpec;\n const requestUrl = URLBuilder.parse(baseUri);\n if (operationSpec.path) {\n requestUrl.appendPath(operationSpec.path);\n }\n if (operationSpec.urlParameters && operationSpec.urlParameters.length > 0) {\n for (const urlParameter of operationSpec.urlParameters) {\n let urlParameterValue = getOperationArgumentValueFromParameter(this, operationArguments, urlParameter, operationSpec.serializer);\n urlParameterValue = operationSpec.serializer.serialize(urlParameter.mapper, urlParameterValue, getPathStringFromParameter(urlParameter), serializerOptions);\n if (!urlParameter.skipEncoding) {\n urlParameterValue = encodeURIComponent(urlParameterValue);\n }\n requestUrl.replaceAll(`{${urlParameter.mapper.serializedName || getPathStringFromParameter(urlParameter)}}`, urlParameterValue);\n }\n }\n if (operationSpec.queryParameters && operationSpec.queryParameters.length > 0) {\n for (const queryParameter of operationSpec.queryParameters) {\n let queryParameterValue = getOperationArgumentValueFromParameter(this, operationArguments, queryParameter, operationSpec.serializer);\n if (queryParameterValue !== undefined && queryParameterValue !== null) {\n queryParameterValue = operationSpec.serializer.serialize(queryParameter.mapper, queryParameterValue, getPathStringFromParameter(queryParameter), serializerOptions);\n if (queryParameter.collectionFormat !== undefined && queryParameter.collectionFormat !== null) {\n if (queryParameter.collectionFormat === QueryCollectionFormat.Multi) {\n if (queryParameterValue.length === 0) {\n // The collection is empty, no need to try serializing the current queryParam\n continue;\n } else {\n for (const index in queryParameterValue) {\n const item = queryParameterValue[index];\n queryParameterValue[index] = item === undefined || item === null ? \"\" : item.toString();\n }\n }\n } else if (queryParameter.collectionFormat === QueryCollectionFormat.Ssv || queryParameter.collectionFormat === QueryCollectionFormat.Tsv) {\n queryParameterValue = queryParameterValue.join(queryParameter.collectionFormat);\n }\n }\n if (!queryParameter.skipEncoding) {\n if (Array.isArray(queryParameterValue)) {\n for (const index in queryParameterValue) {\n if (queryParameterValue[index] !== undefined && queryParameterValue[index] !== null) {\n queryParameterValue[index] = encodeURIComponent(queryParameterValue[index]);\n }\n }\n } else {\n queryParameterValue = encodeURIComponent(queryParameterValue);\n }\n }\n if (queryParameter.collectionFormat !== undefined && queryParameter.collectionFormat !== null && queryParameter.collectionFormat !== QueryCollectionFormat.Multi && queryParameter.collectionFormat !== QueryCollectionFormat.Ssv && queryParameter.collectionFormat !== QueryCollectionFormat.Tsv) {\n queryParameterValue = queryParameterValue.join(queryParameter.collectionFormat);\n }\n requestUrl.setQueryParameter(queryParameter.mapper.serializedName || getPathStringFromParameter(queryParameter), queryParameterValue);\n }\n }\n }\n httpRequest.url = requestUrl.toString();\n const contentType = operationSpec.contentType || this.requestContentType;\n if (contentType && operationSpec.requestBody) {\n httpRequest.headers.set(\"Content-Type\", contentType);\n }\n if (operationSpec.headerParameters) {\n for (const headerParameter of operationSpec.headerParameters) {\n let headerValue = getOperationArgumentValueFromParameter(this, operationArguments, headerParameter, operationSpec.serializer);\n if (headerValue !== undefined && headerValue !== null) {\n headerValue = operationSpec.serializer.serialize(headerParameter.mapper, headerValue, getPathStringFromParameter(headerParameter), serializerOptions);\n const headerCollectionPrefix = headerParameter.mapper.headerCollectionPrefix;\n if (headerCollectionPrefix) {\n for (const key of Object.keys(headerValue)) {\n httpRequest.headers.set(headerCollectionPrefix + key, headerValue[key]);\n }\n } else {\n httpRequest.headers.set(headerParameter.mapper.serializedName || getPathStringFromParameter(headerParameter), headerValue);\n }\n }\n }\n }\n const options = operationArguments.options;\n if (options) {\n if (options.customHeaders) {\n for (const customHeaderName in options.customHeaders) {\n httpRequest.headers.set(customHeaderName, options.customHeaders[customHeaderName]);\n }\n }\n if (options.abortSignal) {\n httpRequest.abortSignal = options.abortSignal;\n }\n if (options.timeout) {\n httpRequest.timeout = options.timeout;\n }\n if (options.onUploadProgress) {\n httpRequest.onUploadProgress = options.onUploadProgress;\n }\n if (options.onDownloadProgress) {\n httpRequest.onDownloadProgress = options.onDownloadProgress;\n }\n if (options.spanOptions) {\n // By passing spanOptions if they exist at runtime, we're backwards compatible with @azure/core-tracing@preview.13 and earlier.\n httpRequest.spanOptions = options.spanOptions;\n }\n if (options.tracingContext) {\n httpRequest.tracingContext = options.tracingContext;\n }\n if (options.shouldDeserialize !== undefined && options.shouldDeserialize !== null) {\n httpRequest.shouldDeserialize = options.shouldDeserialize;\n }\n }\n httpRequest.withCredentials = this._withCredentials;\n serializeRequestBody(this, httpRequest, operationArguments, operationSpec);\n if (httpRequest.streamResponseStatusCodes === undefined) {\n httpRequest.streamResponseStatusCodes = getStreamResponseStatusCodes(operationSpec);\n }\n let rawResponse;\n let sendRequestError;\n try {\n rawResponse = await this.sendRequest(httpRequest);\n } catch (error) {\n sendRequestError = error;\n }\n if (sendRequestError) {\n if (sendRequestError.response) {\n sendRequestError.details = flattenResponse(sendRequestError.response, operationSpec.responses[sendRequestError.statusCode] || operationSpec.responses[\"default\"]);\n }\n result = Promise.reject(sendRequestError);\n } else {\n result = Promise.resolve(flattenResponse(rawResponse, operationSpec.responses[rawResponse.status]));\n }\n } catch (error) {\n result = Promise.reject(error);\n }\n const cb = callback;\n if (cb) {\n result.then(res => cb(null, res._response.parsedBody, res._response.request, res._response)).catch(err => cb(err));\n }\n return result;\n }\n}\nexport function serializeRequestBody(serviceClient, httpRequest, operationArguments, operationSpec) {\n var _a, _b, _c, _d, _e, _f;\n const serializerOptions = (_b = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.serializerOptions) !== null && _b !== void 0 ? _b : {};\n const updatedOptions = {\n rootName: (_c = serializerOptions.rootName) !== null && _c !== void 0 ? _c : \"\",\n includeRoot: (_d = serializerOptions.includeRoot) !== null && _d !== void 0 ? _d : false,\n xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY\n };\n const xmlCharKey = serializerOptions.xmlCharKey;\n if (operationSpec.requestBody && operationSpec.requestBody.mapper) {\n httpRequest.body = getOperationArgumentValueFromParameter(serviceClient, operationArguments, operationSpec.requestBody, operationSpec.serializer);\n const bodyMapper = operationSpec.requestBody.mapper;\n const {\n required,\n xmlName,\n xmlElementName,\n serializedName,\n xmlNamespace,\n xmlNamespacePrefix\n } = bodyMapper;\n const typeName = bodyMapper.type.name;\n try {\n if (httpRequest.body !== undefined && httpRequest.body !== null || required) {\n const requestBodyParameterPathString = getPathStringFromParameter(operationSpec.requestBody);\n httpRequest.body = operationSpec.serializer.serialize(bodyMapper, httpRequest.body, requestBodyParameterPathString, updatedOptions);\n const isStream = typeName === MapperType.Stream;\n if (operationSpec.isXML) {\n const xmlnsKey = xmlNamespacePrefix ? `xmlns:${xmlNamespacePrefix}` : \"xmlns\";\n const value = getXmlValueWithNamespace(xmlNamespace, xmlnsKey, typeName, httpRequest.body, updatedOptions);\n if (typeName === MapperType.Sequence) {\n httpRequest.body = stringifyXML(utils.prepareXMLRootList(value, xmlElementName || xmlName || serializedName, xmlnsKey, xmlNamespace), {\n rootName: xmlName || serializedName,\n xmlCharKey\n });\n } else if (!isStream) {\n httpRequest.body = stringifyXML(value, {\n rootName: xmlName || serializedName,\n xmlCharKey\n });\n }\n } else if (typeName === MapperType.String && (((_f = operationSpec.contentType) === null || _f === void 0 ? void 0 : _f.match(\"text/plain\")) || operationSpec.mediaType === \"text\")) {\n // the String serializer has validated that request body is a string\n // so just send the string.\n return;\n } else if (!isStream) {\n httpRequest.body = JSON.stringify(httpRequest.body);\n }\n }\n } catch (error) {\n throw new Error(`Error \"${error.message}\" occurred in serializing the payload - ${JSON.stringify(serializedName, undefined, \" \")}.`);\n }\n } else if (operationSpec.formDataParameters && operationSpec.formDataParameters.length > 0) {\n httpRequest.formData = {};\n for (const formDataParameter of operationSpec.formDataParameters) {\n const formDataParameterValue = getOperationArgumentValueFromParameter(serviceClient, operationArguments, formDataParameter, operationSpec.serializer);\n if (formDataParameterValue !== undefined && formDataParameterValue !== null) {\n const formDataParameterPropertyName = formDataParameter.mapper.serializedName || getPathStringFromParameter(formDataParameter);\n httpRequest.formData[formDataParameterPropertyName] = operationSpec.serializer.serialize(formDataParameter.mapper, formDataParameterValue, getPathStringFromParameter(formDataParameter), updatedOptions);\n }\n }\n }\n}\n/**\n * Adds an xml namespace to the xml serialized object if needed, otherwise it just returns the value itself\n */\nfunction getXmlValueWithNamespace(xmlNamespace, xmlnsKey, typeName, serializedValue, options) {\n // Composite and Sequence schemas already got their root namespace set during serialization\n // We just need to add xmlns to the other schema types\n if (xmlNamespace && ![\"Composite\", \"Sequence\", \"Dictionary\"].includes(typeName)) {\n const result = {};\n result[options.xmlCharKey] = serializedValue;\n result[XML_ATTRKEY] = {\n [xmlnsKey]: xmlNamespace\n };\n return result;\n }\n return serializedValue;\n}\nfunction getValueOrFunctionResult(value, defaultValueCreator) {\n let result;\n if (typeof value === \"string\") {\n result = value;\n } else {\n result = defaultValueCreator();\n if (typeof value === \"function\") {\n result = value(result);\n }\n }\n return result;\n}\nfunction createDefaultRequestPolicyFactories(authPolicyFactory, options) {\n const factories = [];\n if (options.generateClientRequestIdHeader) {\n factories.push(generateClientRequestIdPolicy(options.clientRequestIdHeaderName));\n }\n if (authPolicyFactory) {\n factories.push(authPolicyFactory);\n }\n const userAgentHeaderName = getValueOrFunctionResult(options.userAgentHeaderName, getDefaultUserAgentHeaderName);\n const userAgentHeaderValue = getValueOrFunctionResult(options.userAgent, getDefaultUserAgentValue);\n if (userAgentHeaderName && userAgentHeaderValue) {\n factories.push(userAgentPolicy({\n key: userAgentHeaderName,\n value: userAgentHeaderValue\n }));\n }\n factories.push(redirectPolicy());\n factories.push(rpRegistrationPolicy(options.rpRegistrationRetryTimeout));\n if (!options.noRetryPolicy) {\n factories.push(exponentialRetryPolicy());\n factories.push(systemErrorRetryPolicy());\n factories.push(throttlingRetryPolicy());\n }\n factories.push(deserializationPolicy(options.deserializationContentTypes));\n if (isNode) {\n factories.push(proxyPolicy(options.proxySettings));\n }\n factories.push(logPolicy({\n logger: logger.info\n }));\n return factories;\n}\n/**\n * Creates an HTTP pipeline based on the given options.\n * @param pipelineOptions - Defines options that are used to configure policies in the HTTP pipeline for an SDK client.\n * @param authPolicyFactory - An optional authentication policy factory to use for signing requests.\n * @returns A set of options that can be passed to create a new {@link ServiceClient}.\n */\nexport function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {\n const requestPolicyFactories = [];\n if (pipelineOptions.sendStreamingJson) {\n requestPolicyFactories.push(ndJsonPolicy());\n }\n let userAgentValue = undefined;\n if (pipelineOptions.userAgentOptions && pipelineOptions.userAgentOptions.userAgentPrefix) {\n const userAgentInfo = [];\n userAgentInfo.push(pipelineOptions.userAgentOptions.userAgentPrefix);\n // Add the default user agent value if it isn't already specified\n // by the userAgentPrefix option.\n const defaultUserAgentInfo = getDefaultUserAgentValue();\n if (userAgentInfo.indexOf(defaultUserAgentInfo) === -1) {\n userAgentInfo.push(defaultUserAgentInfo);\n }\n userAgentValue = userAgentInfo.join(\" \");\n }\n const keepAliveOptions = Object.assign(Object.assign({}, DefaultKeepAliveOptions), pipelineOptions.keepAliveOptions);\n const retryOptions = Object.assign(Object.assign({}, DefaultRetryOptions), pipelineOptions.retryOptions);\n const redirectOptions = Object.assign(Object.assign({}, DefaultRedirectOptions), pipelineOptions.redirectOptions);\n if (isNode) {\n requestPolicyFactories.push(proxyPolicy(pipelineOptions.proxyOptions));\n }\n const deserializationOptions = Object.assign(Object.assign({}, DefaultDeserializationOptions), pipelineOptions.deserializationOptions);\n const loggingOptions = Object.assign({}, pipelineOptions.loggingOptions);\n requestPolicyFactories.push(tracingPolicy({\n userAgent: userAgentValue\n }), keepAlivePolicy(keepAliveOptions), userAgentPolicy({\n value: userAgentValue\n }), generateClientRequestIdPolicy(), deserializationPolicy(deserializationOptions.expectedContentTypes), throttlingRetryPolicy(), systemErrorRetryPolicy(), exponentialRetryPolicy(retryOptions.maxRetries, retryOptions.retryDelayInMs, retryOptions.maxRetryDelayInMs));\n if (redirectOptions.handleRedirects) {\n requestPolicyFactories.push(redirectPolicy(redirectOptions.maxRetries));\n }\n if (authPolicyFactory) {\n requestPolicyFactories.push(authPolicyFactory);\n }\n requestPolicyFactories.push(logPolicy(loggingOptions));\n if (isNode && pipelineOptions.decompressResponse === false) {\n requestPolicyFactories.push(disableResponseDecompressionPolicy());\n }\n return {\n httpClient: pipelineOptions.httpClient,\n requestPolicyFactories\n };\n}\n/**\n * Get the property parent for the property at the provided path when starting with the provided\n * parent object.\n */\nexport function getPropertyParent(parent, propertyPath) {\n if (parent && propertyPath) {\n const propertyPathLength = propertyPath.length;\n for (let i = 0; i < propertyPathLength - 1; ++i) {\n const propertyName = propertyPath[i];\n if (!parent[propertyName]) {\n parent[propertyName] = {};\n }\n parent = parent[propertyName];\n }\n }\n return parent;\n}\nfunction getOperationArgumentValueFromParameter(serviceClient, operationArguments, parameter, serializer) {\n return getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameter.parameterPath, parameter.mapper, serializer);\n}\nexport function getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameterPath, parameterMapper, serializer) {\n var _a;\n let value;\n if (typeof parameterPath === \"string\") {\n parameterPath = [parameterPath];\n }\n const serializerOptions = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.serializerOptions;\n if (Array.isArray(parameterPath)) {\n if (parameterPath.length > 0) {\n if (parameterMapper.isConstant) {\n value = parameterMapper.defaultValue;\n } else {\n let propertySearchResult = getPropertyFromParameterPath(operationArguments, parameterPath);\n if (!propertySearchResult.propertyFound) {\n propertySearchResult = getPropertyFromParameterPath(serviceClient, parameterPath);\n }\n let useDefaultValue = false;\n if (!propertySearchResult.propertyFound) {\n useDefaultValue = parameterMapper.required || parameterPath[0] === \"options\" && parameterPath.length === 2;\n }\n value = useDefaultValue ? parameterMapper.defaultValue : propertySearchResult.propertyValue;\n }\n // Serialize just for validation purposes.\n const parameterPathString = getPathStringFromParameterPath(parameterPath, parameterMapper);\n serializer.serialize(parameterMapper, value, parameterPathString, serializerOptions);\n }\n } else {\n if (parameterMapper.required) {\n value = {};\n }\n for (const propertyName in parameterPath) {\n const propertyMapper = parameterMapper.type.modelProperties[propertyName];\n const propertyPath = parameterPath[propertyName];\n const propertyValue = getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, propertyPath, propertyMapper, serializer);\n // Serialize just for validation purposes.\n const propertyPathString = getPathStringFromParameterPath(propertyPath, propertyMapper);\n serializer.serialize(propertyMapper, propertyValue, propertyPathString, serializerOptions);\n if (propertyValue !== undefined && propertyValue !== null) {\n if (!value) {\n value = {};\n }\n value[propertyName] = propertyValue;\n }\n }\n }\n return value;\n}\nfunction getPropertyFromParameterPath(parent, parameterPath) {\n const result = {\n propertyFound: false\n };\n let i = 0;\n for (; i < parameterPath.length; ++i) {\n const parameterPathPart = parameterPath[i];\n // Make sure to check inherited properties too, so don't use hasOwnProperty().\n if (parent !== undefined && parent !== null && parameterPathPart in parent) {\n parent = parent[parameterPathPart];\n } else {\n break;\n }\n }\n if (i === parameterPath.length) {\n result.propertyValue = parent;\n result.propertyFound = true;\n }\n return result;\n}\n/**\n * Parses an {@link HttpOperationResponse} into a normalized HTTP response object ({@link RestResponse}).\n * @param _response - Wrapper object for http response.\n * @param responseSpec - Mappers for how to parse the response properties.\n * @returns - A normalized response object.\n */\nexport function flattenResponse(_response, responseSpec) {\n const parsedHeaders = _response.parsedHeaders;\n const bodyMapper = responseSpec && responseSpec.bodyMapper;\n const addOperationResponse = obj => {\n return Object.defineProperty(obj, \"_response\", {\n value: _response\n });\n };\n if (bodyMapper) {\n const typeName = bodyMapper.type.name;\n if (typeName === \"Stream\") {\n return addOperationResponse(Object.assign(Object.assign({}, parsedHeaders), {\n blobBody: _response.blobBody,\n readableStreamBody: _response.readableStreamBody\n }));\n }\n const modelProperties = typeName === \"Composite\" && bodyMapper.type.modelProperties || {};\n const isPageableResponse = Object.keys(modelProperties).some(k => modelProperties[k].serializedName === \"\");\n if (typeName === \"Sequence\" || isPageableResponse) {\n const arrayResponse = [...(_response.parsedBody || [])];\n for (const key of Object.keys(modelProperties)) {\n if (modelProperties[key].serializedName) {\n arrayResponse[key] = _response.parsedBody[key];\n }\n }\n if (parsedHeaders) {\n for (const key of Object.keys(parsedHeaders)) {\n arrayResponse[key] = parsedHeaders[key];\n }\n }\n addOperationResponse(arrayResponse);\n return arrayResponse;\n }\n if (typeName === \"Composite\" || typeName === \"Dictionary\") {\n return addOperationResponse(Object.assign(Object.assign({}, parsedHeaders), _response.parsedBody));\n }\n }\n if (bodyMapper || _response.request.method === \"HEAD\" || utils.isPrimitiveType(_response.parsedBody)) {\n // primitive body types and HEAD booleans\n return addOperationResponse(Object.assign(Object.assign({}, parsedHeaders), {\n body: _response.parsedBody\n }));\n }\n return addOperationResponse(Object.assign(Object.assign({}, parsedHeaders), _response.parsedBody));\n}\nfunction getCredentialScopes(options, baseUri) {\n if (options === null || options === void 0 ? void 0 : options.credentialScopes) {\n return options.credentialScopes;\n }\n if (baseUri) {\n return `${baseUri}/.default`;\n }\n return undefined;\n}\n","/*\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\n */\nexport const BlobServiceProperties = {\n serializedName: \"BlobServiceProperties\",\n xmlName: \"StorageServiceProperties\",\n type: {\n name: \"Composite\",\n className: \"BlobServiceProperties\",\n modelProperties: {\n blobAnalyticsLogging: {\n serializedName: \"Logging\",\n xmlName: \"Logging\",\n type: {\n name: \"Composite\",\n className: \"Logging\"\n }\n },\n hourMetrics: {\n serializedName: \"HourMetrics\",\n xmlName: \"HourMetrics\",\n type: {\n name: \"Composite\",\n className: \"Metrics\"\n }\n },\n minuteMetrics: {\n serializedName: \"MinuteMetrics\",\n xmlName: \"MinuteMetrics\",\n type: {\n name: \"Composite\",\n className: \"Metrics\"\n }\n },\n cors: {\n serializedName: \"Cors\",\n xmlName: \"Cors\",\n xmlIsWrapped: true,\n xmlElementName: \"CorsRule\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"CorsRule\"\n }\n }\n }\n },\n defaultServiceVersion: {\n serializedName: \"DefaultServiceVersion\",\n xmlName: \"DefaultServiceVersion\",\n type: {\n name: \"String\"\n }\n },\n deleteRetentionPolicy: {\n serializedName: \"DeleteRetentionPolicy\",\n xmlName: \"DeleteRetentionPolicy\",\n type: {\n name: \"Composite\",\n className: \"RetentionPolicy\"\n }\n },\n staticWebsite: {\n serializedName: \"StaticWebsite\",\n xmlName: \"StaticWebsite\",\n type: {\n name: \"Composite\",\n className: \"StaticWebsite\"\n }\n }\n }\n }\n};\nexport const Logging = {\n serializedName: \"Logging\",\n type: {\n name: \"Composite\",\n className: \"Logging\",\n modelProperties: {\n version: {\n serializedName: \"Version\",\n required: true,\n xmlName: \"Version\",\n type: {\n name: \"String\"\n }\n },\n deleteProperty: {\n serializedName: \"Delete\",\n required: true,\n xmlName: \"Delete\",\n type: {\n name: \"Boolean\"\n }\n },\n read: {\n serializedName: \"Read\",\n required: true,\n xmlName: \"Read\",\n type: {\n name: \"Boolean\"\n }\n },\n write: {\n serializedName: \"Write\",\n required: true,\n xmlName: \"Write\",\n type: {\n name: \"Boolean\"\n }\n },\n retentionPolicy: {\n serializedName: \"RetentionPolicy\",\n xmlName: \"RetentionPolicy\",\n type: {\n name: \"Composite\",\n className: \"RetentionPolicy\"\n }\n }\n }\n }\n};\nexport const RetentionPolicy = {\n serializedName: \"RetentionPolicy\",\n type: {\n name: \"Composite\",\n className: \"RetentionPolicy\",\n modelProperties: {\n enabled: {\n serializedName: \"Enabled\",\n required: true,\n xmlName: \"Enabled\",\n type: {\n name: \"Boolean\"\n }\n },\n days: {\n constraints: {\n InclusiveMinimum: 1\n },\n serializedName: \"Days\",\n xmlName: \"Days\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\nexport const Metrics = {\n serializedName: \"Metrics\",\n type: {\n name: \"Composite\",\n className: \"Metrics\",\n modelProperties: {\n version: {\n serializedName: \"Version\",\n xmlName: \"Version\",\n type: {\n name: \"String\"\n }\n },\n enabled: {\n serializedName: \"Enabled\",\n required: true,\n xmlName: \"Enabled\",\n type: {\n name: \"Boolean\"\n }\n },\n includeAPIs: {\n serializedName: \"IncludeAPIs\",\n xmlName: \"IncludeAPIs\",\n type: {\n name: \"Boolean\"\n }\n },\n retentionPolicy: {\n serializedName: \"RetentionPolicy\",\n xmlName: \"RetentionPolicy\",\n type: {\n name: \"Composite\",\n className: \"RetentionPolicy\"\n }\n }\n }\n }\n};\nexport const CorsRule = {\n serializedName: \"CorsRule\",\n type: {\n name: \"Composite\",\n className: \"CorsRule\",\n modelProperties: {\n allowedOrigins: {\n serializedName: \"AllowedOrigins\",\n required: true,\n xmlName: \"AllowedOrigins\",\n type: {\n name: \"String\"\n }\n },\n allowedMethods: {\n serializedName: \"AllowedMethods\",\n required: true,\n xmlName: \"AllowedMethods\",\n type: {\n name: \"String\"\n }\n },\n allowedHeaders: {\n serializedName: \"AllowedHeaders\",\n required: true,\n xmlName: \"AllowedHeaders\",\n type: {\n name: \"String\"\n }\n },\n exposedHeaders: {\n serializedName: \"ExposedHeaders\",\n required: true,\n xmlName: \"ExposedHeaders\",\n type: {\n name: \"String\"\n }\n },\n maxAgeInSeconds: {\n constraints: {\n InclusiveMinimum: 0\n },\n serializedName: \"MaxAgeInSeconds\",\n required: true,\n xmlName: \"MaxAgeInSeconds\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\nexport const StaticWebsite = {\n serializedName: \"StaticWebsite\",\n type: {\n name: \"Composite\",\n className: \"StaticWebsite\",\n modelProperties: {\n enabled: {\n serializedName: \"Enabled\",\n required: true,\n xmlName: \"Enabled\",\n type: {\n name: \"Boolean\"\n }\n },\n indexDocument: {\n serializedName: \"IndexDocument\",\n xmlName: \"IndexDocument\",\n type: {\n name: \"String\"\n }\n },\n errorDocument404Path: {\n serializedName: \"ErrorDocument404Path\",\n xmlName: \"ErrorDocument404Path\",\n type: {\n name: \"String\"\n }\n },\n defaultIndexDocumentPath: {\n serializedName: \"DefaultIndexDocumentPath\",\n xmlName: \"DefaultIndexDocumentPath\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const StorageError = {\n serializedName: \"StorageError\",\n type: {\n name: \"Composite\",\n className: \"StorageError\",\n modelProperties: {\n message: {\n serializedName: \"Message\",\n xmlName: \"Message\",\n type: {\n name: \"String\"\n }\n },\n code: {\n serializedName: \"Code\",\n xmlName: \"Code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobServiceStatistics = {\n serializedName: \"BlobServiceStatistics\",\n xmlName: \"StorageServiceStats\",\n type: {\n name: \"Composite\",\n className: \"BlobServiceStatistics\",\n modelProperties: {\n geoReplication: {\n serializedName: \"GeoReplication\",\n xmlName: \"GeoReplication\",\n type: {\n name: \"Composite\",\n className: \"GeoReplication\"\n }\n }\n }\n }\n};\nexport const GeoReplication = {\n serializedName: \"GeoReplication\",\n type: {\n name: \"Composite\",\n className: \"GeoReplication\",\n modelProperties: {\n status: {\n serializedName: \"Status\",\n required: true,\n xmlName: \"Status\",\n type: {\n name: \"Enum\",\n allowedValues: [\"live\", \"bootstrap\", \"unavailable\"]\n }\n },\n lastSyncOn: {\n serializedName: \"LastSyncTime\",\n required: true,\n xmlName: \"LastSyncTime\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const ListContainersSegmentResponse = {\n serializedName: \"ListContainersSegmentResponse\",\n xmlName: \"EnumerationResults\",\n type: {\n name: \"Composite\",\n className: \"ListContainersSegmentResponse\",\n modelProperties: {\n serviceEndpoint: {\n serializedName: \"ServiceEndpoint\",\n required: true,\n xmlName: \"ServiceEndpoint\",\n xmlIsAttribute: true,\n type: {\n name: \"String\"\n }\n },\n prefix: {\n serializedName: \"Prefix\",\n xmlName: \"Prefix\",\n type: {\n name: \"String\"\n }\n },\n marker: {\n serializedName: \"Marker\",\n xmlName: \"Marker\",\n type: {\n name: \"String\"\n }\n },\n maxPageSize: {\n serializedName: \"MaxResults\",\n xmlName: \"MaxResults\",\n type: {\n name: \"Number\"\n }\n },\n containerItems: {\n serializedName: \"ContainerItems\",\n required: true,\n xmlName: \"Containers\",\n xmlIsWrapped: true,\n xmlElementName: \"Container\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"ContainerItem\"\n }\n }\n }\n },\n continuationToken: {\n serializedName: \"NextMarker\",\n xmlName: \"NextMarker\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerItem = {\n serializedName: \"ContainerItem\",\n xmlName: \"Container\",\n type: {\n name: \"Composite\",\n className: \"ContainerItem\",\n modelProperties: {\n name: {\n serializedName: \"Name\",\n required: true,\n xmlName: \"Name\",\n type: {\n name: \"String\"\n }\n },\n deleted: {\n serializedName: \"Deleted\",\n xmlName: \"Deleted\",\n type: {\n name: \"Boolean\"\n }\n },\n version: {\n serializedName: \"Version\",\n xmlName: \"Version\",\n type: {\n name: \"String\"\n }\n },\n properties: {\n serializedName: \"Properties\",\n xmlName: \"Properties\",\n type: {\n name: \"Composite\",\n className: \"ContainerProperties\"\n }\n },\n metadata: {\n serializedName: \"Metadata\",\n xmlName: \"Metadata\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n }\n }\n }\n }\n};\nexport const ContainerProperties = {\n serializedName: \"ContainerProperties\",\n type: {\n name: \"Composite\",\n className: \"ContainerProperties\",\n modelProperties: {\n lastModified: {\n serializedName: \"Last-Modified\",\n required: true,\n xmlName: \"Last-Modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n etag: {\n serializedName: \"Etag\",\n required: true,\n xmlName: \"Etag\",\n type: {\n name: \"String\"\n }\n },\n leaseStatus: {\n serializedName: \"LeaseStatus\",\n xmlName: \"LeaseStatus\",\n type: {\n name: \"Enum\",\n allowedValues: [\"locked\", \"unlocked\"]\n }\n },\n leaseState: {\n serializedName: \"LeaseState\",\n xmlName: \"LeaseState\",\n type: {\n name: \"Enum\",\n allowedValues: [\"available\", \"leased\", \"expired\", \"breaking\", \"broken\"]\n }\n },\n leaseDuration: {\n serializedName: \"LeaseDuration\",\n xmlName: \"LeaseDuration\",\n type: {\n name: \"Enum\",\n allowedValues: [\"infinite\", \"fixed\"]\n }\n },\n publicAccess: {\n serializedName: \"PublicAccess\",\n xmlName: \"PublicAccess\",\n type: {\n name: \"Enum\",\n allowedValues: [\"container\", \"blob\"]\n }\n },\n hasImmutabilityPolicy: {\n serializedName: \"HasImmutabilityPolicy\",\n xmlName: \"HasImmutabilityPolicy\",\n type: {\n name: \"Boolean\"\n }\n },\n hasLegalHold: {\n serializedName: \"HasLegalHold\",\n xmlName: \"HasLegalHold\",\n type: {\n name: \"Boolean\"\n }\n },\n defaultEncryptionScope: {\n serializedName: \"DefaultEncryptionScope\",\n xmlName: \"DefaultEncryptionScope\",\n type: {\n name: \"String\"\n }\n },\n preventEncryptionScopeOverride: {\n serializedName: \"DenyEncryptionScopeOverride\",\n xmlName: \"DenyEncryptionScopeOverride\",\n type: {\n name: \"Boolean\"\n }\n },\n deletedOn: {\n serializedName: \"DeletedTime\",\n xmlName: \"DeletedTime\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n remainingRetentionDays: {\n serializedName: \"RemainingRetentionDays\",\n xmlName: \"RemainingRetentionDays\",\n type: {\n name: \"Number\"\n }\n },\n isImmutableStorageWithVersioningEnabled: {\n serializedName: \"ImmutableStorageWithVersioningEnabled\",\n xmlName: \"ImmutableStorageWithVersioningEnabled\",\n type: {\n name: \"Boolean\"\n }\n }\n }\n }\n};\nexport const KeyInfo = {\n serializedName: \"KeyInfo\",\n type: {\n name: \"Composite\",\n className: \"KeyInfo\",\n modelProperties: {\n startsOn: {\n serializedName: \"Start\",\n required: true,\n xmlName: \"Start\",\n type: {\n name: \"String\"\n }\n },\n expiresOn: {\n serializedName: \"Expiry\",\n required: true,\n xmlName: \"Expiry\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const UserDelegationKey = {\n serializedName: \"UserDelegationKey\",\n type: {\n name: \"Composite\",\n className: \"UserDelegationKey\",\n modelProperties: {\n signedObjectId: {\n serializedName: \"SignedOid\",\n required: true,\n xmlName: \"SignedOid\",\n type: {\n name: \"String\"\n }\n },\n signedTenantId: {\n serializedName: \"SignedTid\",\n required: true,\n xmlName: \"SignedTid\",\n type: {\n name: \"String\"\n }\n },\n signedStartsOn: {\n serializedName: \"SignedStart\",\n required: true,\n xmlName: \"SignedStart\",\n type: {\n name: \"String\"\n }\n },\n signedExpiresOn: {\n serializedName: \"SignedExpiry\",\n required: true,\n xmlName: \"SignedExpiry\",\n type: {\n name: \"String\"\n }\n },\n signedService: {\n serializedName: \"SignedService\",\n required: true,\n xmlName: \"SignedService\",\n type: {\n name: \"String\"\n }\n },\n signedVersion: {\n serializedName: \"SignedVersion\",\n required: true,\n xmlName: \"SignedVersion\",\n type: {\n name: \"String\"\n }\n },\n value: {\n serializedName: \"Value\",\n required: true,\n xmlName: \"Value\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const FilterBlobSegment = {\n serializedName: \"FilterBlobSegment\",\n xmlName: \"EnumerationResults\",\n type: {\n name: \"Composite\",\n className: \"FilterBlobSegment\",\n modelProperties: {\n serviceEndpoint: {\n serializedName: \"ServiceEndpoint\",\n required: true,\n xmlName: \"ServiceEndpoint\",\n xmlIsAttribute: true,\n type: {\n name: \"String\"\n }\n },\n where: {\n serializedName: \"Where\",\n required: true,\n xmlName: \"Where\",\n type: {\n name: \"String\"\n }\n },\n blobs: {\n serializedName: \"Blobs\",\n required: true,\n xmlName: \"Blobs\",\n xmlIsWrapped: true,\n xmlElementName: \"Blob\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"FilterBlobItem\"\n }\n }\n }\n },\n continuationToken: {\n serializedName: \"NextMarker\",\n xmlName: \"NextMarker\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const FilterBlobItem = {\n serializedName: \"FilterBlobItem\",\n xmlName: \"Blob\",\n type: {\n name: \"Composite\",\n className: \"FilterBlobItem\",\n modelProperties: {\n name: {\n serializedName: \"Name\",\n required: true,\n xmlName: \"Name\",\n type: {\n name: \"String\"\n }\n },\n containerName: {\n serializedName: \"ContainerName\",\n required: true,\n xmlName: \"ContainerName\",\n type: {\n name: \"String\"\n }\n },\n tags: {\n serializedName: \"Tags\",\n xmlName: \"Tags\",\n type: {\n name: \"Composite\",\n className: \"BlobTags\"\n }\n }\n }\n }\n};\nexport const BlobTags = {\n serializedName: \"BlobTags\",\n xmlName: \"Tags\",\n type: {\n name: \"Composite\",\n className: \"BlobTags\",\n modelProperties: {\n blobTagSet: {\n serializedName: \"BlobTagSet\",\n required: true,\n xmlName: \"TagSet\",\n xmlIsWrapped: true,\n xmlElementName: \"Tag\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"BlobTag\"\n }\n }\n }\n }\n }\n }\n};\nexport const BlobTag = {\n serializedName: \"BlobTag\",\n xmlName: \"Tag\",\n type: {\n name: \"Composite\",\n className: \"BlobTag\",\n modelProperties: {\n key: {\n serializedName: \"Key\",\n required: true,\n xmlName: \"Key\",\n type: {\n name: \"String\"\n }\n },\n value: {\n serializedName: \"Value\",\n required: true,\n xmlName: \"Value\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const SignedIdentifier = {\n serializedName: \"SignedIdentifier\",\n xmlName: \"SignedIdentifier\",\n type: {\n name: \"Composite\",\n className: \"SignedIdentifier\",\n modelProperties: {\n id: {\n serializedName: \"Id\",\n required: true,\n xmlName: \"Id\",\n type: {\n name: \"String\"\n }\n },\n accessPolicy: {\n serializedName: \"AccessPolicy\",\n xmlName: \"AccessPolicy\",\n type: {\n name: \"Composite\",\n className: \"AccessPolicy\"\n }\n }\n }\n }\n};\nexport const AccessPolicy = {\n serializedName: \"AccessPolicy\",\n type: {\n name: \"Composite\",\n className: \"AccessPolicy\",\n modelProperties: {\n startsOn: {\n serializedName: \"Start\",\n xmlName: \"Start\",\n type: {\n name: \"String\"\n }\n },\n expiresOn: {\n serializedName: \"Expiry\",\n xmlName: \"Expiry\",\n type: {\n name: \"String\"\n }\n },\n permissions: {\n serializedName: \"Permission\",\n xmlName: \"Permission\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ListBlobsFlatSegmentResponse = {\n serializedName: \"ListBlobsFlatSegmentResponse\",\n xmlName: \"EnumerationResults\",\n type: {\n name: \"Composite\",\n className: \"ListBlobsFlatSegmentResponse\",\n modelProperties: {\n serviceEndpoint: {\n serializedName: \"ServiceEndpoint\",\n required: true,\n xmlName: \"ServiceEndpoint\",\n xmlIsAttribute: true,\n type: {\n name: \"String\"\n }\n },\n containerName: {\n serializedName: \"ContainerName\",\n required: true,\n xmlName: \"ContainerName\",\n xmlIsAttribute: true,\n type: {\n name: \"String\"\n }\n },\n prefix: {\n serializedName: \"Prefix\",\n xmlName: \"Prefix\",\n type: {\n name: \"String\"\n }\n },\n marker: {\n serializedName: \"Marker\",\n xmlName: \"Marker\",\n type: {\n name: \"String\"\n }\n },\n maxPageSize: {\n serializedName: \"MaxResults\",\n xmlName: \"MaxResults\",\n type: {\n name: \"Number\"\n }\n },\n segment: {\n serializedName: \"Segment\",\n xmlName: \"Blobs\",\n type: {\n name: \"Composite\",\n className: \"BlobFlatListSegment\"\n }\n },\n continuationToken: {\n serializedName: \"NextMarker\",\n xmlName: \"NextMarker\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobFlatListSegment = {\n serializedName: \"BlobFlatListSegment\",\n xmlName: \"Blobs\",\n type: {\n name: \"Composite\",\n className: \"BlobFlatListSegment\",\n modelProperties: {\n blobItems: {\n serializedName: \"BlobItems\",\n required: true,\n xmlName: \"BlobItems\",\n xmlElementName: \"Blob\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"BlobItemInternal\"\n }\n }\n }\n }\n }\n }\n};\nexport const BlobItemInternal = {\n serializedName: \"BlobItemInternal\",\n xmlName: \"Blob\",\n type: {\n name: \"Composite\",\n className: \"BlobItemInternal\",\n modelProperties: {\n name: {\n serializedName: \"Name\",\n xmlName: \"Name\",\n type: {\n name: \"Composite\",\n className: \"BlobName\"\n }\n },\n deleted: {\n serializedName: \"Deleted\",\n required: true,\n xmlName: \"Deleted\",\n type: {\n name: \"Boolean\"\n }\n },\n snapshot: {\n serializedName: \"Snapshot\",\n required: true,\n xmlName: \"Snapshot\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"VersionId\",\n xmlName: \"VersionId\",\n type: {\n name: \"String\"\n }\n },\n isCurrentVersion: {\n serializedName: \"IsCurrentVersion\",\n xmlName: \"IsCurrentVersion\",\n type: {\n name: \"Boolean\"\n }\n },\n properties: {\n serializedName: \"Properties\",\n xmlName: \"Properties\",\n type: {\n name: \"Composite\",\n className: \"BlobPropertiesInternal\"\n }\n },\n metadata: {\n serializedName: \"Metadata\",\n xmlName: \"Metadata\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n }\n },\n blobTags: {\n serializedName: \"BlobTags\",\n xmlName: \"Tags\",\n type: {\n name: \"Composite\",\n className: \"BlobTags\"\n }\n },\n objectReplicationMetadata: {\n serializedName: \"ObjectReplicationMetadata\",\n xmlName: \"OrMetadata\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n }\n },\n hasVersionsOnly: {\n serializedName: \"HasVersionsOnly\",\n xmlName: \"HasVersionsOnly\",\n type: {\n name: \"Boolean\"\n }\n }\n }\n }\n};\nexport const BlobName = {\n serializedName: \"BlobName\",\n type: {\n name: \"Composite\",\n className: \"BlobName\",\n modelProperties: {\n encoded: {\n serializedName: \"Encoded\",\n xmlName: \"Encoded\",\n xmlIsAttribute: true,\n type: {\n name: \"Boolean\"\n }\n },\n content: {\n serializedName: \"content\",\n xmlName: \"content\",\n xmlIsMsText: true,\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobPropertiesInternal = {\n serializedName: \"BlobPropertiesInternal\",\n xmlName: \"Properties\",\n type: {\n name: \"Composite\",\n className: \"BlobPropertiesInternal\",\n modelProperties: {\n createdOn: {\n serializedName: \"Creation-Time\",\n xmlName: \"Creation-Time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n lastModified: {\n serializedName: \"Last-Modified\",\n required: true,\n xmlName: \"Last-Modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n etag: {\n serializedName: \"Etag\",\n required: true,\n xmlName: \"Etag\",\n type: {\n name: \"String\"\n }\n },\n contentLength: {\n serializedName: \"Content-Length\",\n xmlName: \"Content-Length\",\n type: {\n name: \"Number\"\n }\n },\n contentType: {\n serializedName: \"Content-Type\",\n xmlName: \"Content-Type\",\n type: {\n name: \"String\"\n }\n },\n contentEncoding: {\n serializedName: \"Content-Encoding\",\n xmlName: \"Content-Encoding\",\n type: {\n name: \"String\"\n }\n },\n contentLanguage: {\n serializedName: \"Content-Language\",\n xmlName: \"Content-Language\",\n type: {\n name: \"String\"\n }\n },\n contentMD5: {\n serializedName: \"Content-MD5\",\n xmlName: \"Content-MD5\",\n type: {\n name: \"ByteArray\"\n }\n },\n contentDisposition: {\n serializedName: \"Content-Disposition\",\n xmlName: \"Content-Disposition\",\n type: {\n name: \"String\"\n }\n },\n cacheControl: {\n serializedName: \"Cache-Control\",\n xmlName: \"Cache-Control\",\n type: {\n name: \"String\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n blobType: {\n serializedName: \"BlobType\",\n xmlName: \"BlobType\",\n type: {\n name: \"Enum\",\n allowedValues: [\"BlockBlob\", \"PageBlob\", \"AppendBlob\"]\n }\n },\n leaseStatus: {\n serializedName: \"LeaseStatus\",\n xmlName: \"LeaseStatus\",\n type: {\n name: \"Enum\",\n allowedValues: [\"locked\", \"unlocked\"]\n }\n },\n leaseState: {\n serializedName: \"LeaseState\",\n xmlName: \"LeaseState\",\n type: {\n name: \"Enum\",\n allowedValues: [\"available\", \"leased\", \"expired\", \"breaking\", \"broken\"]\n }\n },\n leaseDuration: {\n serializedName: \"LeaseDuration\",\n xmlName: \"LeaseDuration\",\n type: {\n name: \"Enum\",\n allowedValues: [\"infinite\", \"fixed\"]\n }\n },\n copyId: {\n serializedName: \"CopyId\",\n xmlName: \"CopyId\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"CopyStatus\",\n xmlName: \"CopyStatus\",\n type: {\n name: \"Enum\",\n allowedValues: [\"pending\", \"success\", \"aborted\", \"failed\"]\n }\n },\n copySource: {\n serializedName: \"CopySource\",\n xmlName: \"CopySource\",\n type: {\n name: \"String\"\n }\n },\n copyProgress: {\n serializedName: \"CopyProgress\",\n xmlName: \"CopyProgress\",\n type: {\n name: \"String\"\n }\n },\n copyCompletedOn: {\n serializedName: \"CopyCompletionTime\",\n xmlName: \"CopyCompletionTime\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyStatusDescription: {\n serializedName: \"CopyStatusDescription\",\n xmlName: \"CopyStatusDescription\",\n type: {\n name: \"String\"\n }\n },\n serverEncrypted: {\n serializedName: \"ServerEncrypted\",\n xmlName: \"ServerEncrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n incrementalCopy: {\n serializedName: \"IncrementalCopy\",\n xmlName: \"IncrementalCopy\",\n type: {\n name: \"Boolean\"\n }\n },\n destinationSnapshot: {\n serializedName: \"DestinationSnapshot\",\n xmlName: \"DestinationSnapshot\",\n type: {\n name: \"String\"\n }\n },\n deletedOn: {\n serializedName: \"DeletedTime\",\n xmlName: \"DeletedTime\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n remainingRetentionDays: {\n serializedName: \"RemainingRetentionDays\",\n xmlName: \"RemainingRetentionDays\",\n type: {\n name: \"Number\"\n }\n },\n accessTier: {\n serializedName: \"AccessTier\",\n xmlName: \"AccessTier\",\n type: {\n name: \"Enum\",\n allowedValues: [\"P4\", \"P6\", \"P10\", \"P15\", \"P20\", \"P30\", \"P40\", \"P50\", \"P60\", \"P70\", \"P80\", \"Hot\", \"Cool\", \"Archive\", \"Cold\"]\n }\n },\n accessTierInferred: {\n serializedName: \"AccessTierInferred\",\n xmlName: \"AccessTierInferred\",\n type: {\n name: \"Boolean\"\n }\n },\n archiveStatus: {\n serializedName: \"ArchiveStatus\",\n xmlName: \"ArchiveStatus\",\n type: {\n name: \"Enum\",\n allowedValues: [\"rehydrate-pending-to-hot\", \"rehydrate-pending-to-cool\", \"rehydrate-pending-to-cold\"]\n }\n },\n customerProvidedKeySha256: {\n serializedName: \"CustomerProvidedKeySha256\",\n xmlName: \"CustomerProvidedKeySha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"EncryptionScope\",\n xmlName: \"EncryptionScope\",\n type: {\n name: \"String\"\n }\n },\n accessTierChangedOn: {\n serializedName: \"AccessTierChangeTime\",\n xmlName: \"AccessTierChangeTime\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n tagCount: {\n serializedName: \"TagCount\",\n xmlName: \"TagCount\",\n type: {\n name: \"Number\"\n }\n },\n expiresOn: {\n serializedName: \"Expiry-Time\",\n xmlName: \"Expiry-Time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isSealed: {\n serializedName: \"Sealed\",\n xmlName: \"Sealed\",\n type: {\n name: \"Boolean\"\n }\n },\n rehydratePriority: {\n serializedName: \"RehydratePriority\",\n xmlName: \"RehydratePriority\",\n type: {\n name: \"Enum\",\n allowedValues: [\"High\", \"Standard\"]\n }\n },\n lastAccessedOn: {\n serializedName: \"LastAccessTime\",\n xmlName: \"LastAccessTime\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n immutabilityPolicyExpiresOn: {\n serializedName: \"ImmutabilityPolicyUntilDate\",\n xmlName: \"ImmutabilityPolicyUntilDate\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n immutabilityPolicyMode: {\n serializedName: \"ImmutabilityPolicyMode\",\n xmlName: \"ImmutabilityPolicyMode\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Mutable\", \"Unlocked\", \"Locked\"]\n }\n },\n legalHold: {\n serializedName: \"LegalHold\",\n xmlName: \"LegalHold\",\n type: {\n name: \"Boolean\"\n }\n }\n }\n }\n};\nexport const ListBlobsHierarchySegmentResponse = {\n serializedName: \"ListBlobsHierarchySegmentResponse\",\n xmlName: \"EnumerationResults\",\n type: {\n name: \"Composite\",\n className: \"ListBlobsHierarchySegmentResponse\",\n modelProperties: {\n serviceEndpoint: {\n serializedName: \"ServiceEndpoint\",\n required: true,\n xmlName: \"ServiceEndpoint\",\n xmlIsAttribute: true,\n type: {\n name: \"String\"\n }\n },\n containerName: {\n serializedName: \"ContainerName\",\n required: true,\n xmlName: \"ContainerName\",\n xmlIsAttribute: true,\n type: {\n name: \"String\"\n }\n },\n prefix: {\n serializedName: \"Prefix\",\n xmlName: \"Prefix\",\n type: {\n name: \"String\"\n }\n },\n marker: {\n serializedName: \"Marker\",\n xmlName: \"Marker\",\n type: {\n name: \"String\"\n }\n },\n maxPageSize: {\n serializedName: \"MaxResults\",\n xmlName: \"MaxResults\",\n type: {\n name: \"Number\"\n }\n },\n delimiter: {\n serializedName: \"Delimiter\",\n xmlName: \"Delimiter\",\n type: {\n name: \"String\"\n }\n },\n segment: {\n serializedName: \"Segment\",\n xmlName: \"Blobs\",\n type: {\n name: \"Composite\",\n className: \"BlobHierarchyListSegment\"\n }\n },\n continuationToken: {\n serializedName: \"NextMarker\",\n xmlName: \"NextMarker\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobHierarchyListSegment = {\n serializedName: \"BlobHierarchyListSegment\",\n xmlName: \"Blobs\",\n type: {\n name: \"Composite\",\n className: \"BlobHierarchyListSegment\",\n modelProperties: {\n blobPrefixes: {\n serializedName: \"BlobPrefixes\",\n xmlName: \"BlobPrefixes\",\n xmlElementName: \"BlobPrefix\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"BlobPrefix\"\n }\n }\n }\n },\n blobItems: {\n serializedName: \"BlobItems\",\n required: true,\n xmlName: \"BlobItems\",\n xmlElementName: \"Blob\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"BlobItemInternal\"\n }\n }\n }\n }\n }\n }\n};\nexport const BlobPrefix = {\n serializedName: \"BlobPrefix\",\n type: {\n name: \"Composite\",\n className: \"BlobPrefix\",\n modelProperties: {\n name: {\n serializedName: \"Name\",\n xmlName: \"Name\",\n type: {\n name: \"Composite\",\n className: \"BlobName\"\n }\n }\n }\n }\n};\nexport const BlockLookupList = {\n serializedName: \"BlockLookupList\",\n xmlName: \"BlockList\",\n type: {\n name: \"Composite\",\n className: \"BlockLookupList\",\n modelProperties: {\n committed: {\n serializedName: \"Committed\",\n xmlName: \"Committed\",\n xmlElementName: \"Committed\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"String\"\n }\n }\n }\n },\n uncommitted: {\n serializedName: \"Uncommitted\",\n xmlName: \"Uncommitted\",\n xmlElementName: \"Uncommitted\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"String\"\n }\n }\n }\n },\n latest: {\n serializedName: \"Latest\",\n xmlName: \"Latest\",\n xmlElementName: \"Latest\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"String\"\n }\n }\n }\n }\n }\n }\n};\nexport const BlockList = {\n serializedName: \"BlockList\",\n type: {\n name: \"Composite\",\n className: \"BlockList\",\n modelProperties: {\n committedBlocks: {\n serializedName: \"CommittedBlocks\",\n xmlName: \"CommittedBlocks\",\n xmlIsWrapped: true,\n xmlElementName: \"Block\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"Block\"\n }\n }\n }\n },\n uncommittedBlocks: {\n serializedName: \"UncommittedBlocks\",\n xmlName: \"UncommittedBlocks\",\n xmlIsWrapped: true,\n xmlElementName: \"Block\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"Block\"\n }\n }\n }\n }\n }\n }\n};\nexport const Block = {\n serializedName: \"Block\",\n type: {\n name: \"Composite\",\n className: \"Block\",\n modelProperties: {\n name: {\n serializedName: \"Name\",\n required: true,\n xmlName: \"Name\",\n type: {\n name: \"String\"\n }\n },\n size: {\n serializedName: \"Size\",\n required: true,\n xmlName: \"Size\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\nexport const PageList = {\n serializedName: \"PageList\",\n type: {\n name: \"Composite\",\n className: \"PageList\",\n modelProperties: {\n pageRange: {\n serializedName: \"PageRange\",\n xmlName: \"PageRange\",\n xmlElementName: \"PageRange\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"PageRange\"\n }\n }\n }\n },\n clearRange: {\n serializedName: \"ClearRange\",\n xmlName: \"ClearRange\",\n xmlElementName: \"ClearRange\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"ClearRange\"\n }\n }\n }\n },\n continuationToken: {\n serializedName: \"NextMarker\",\n xmlName: \"NextMarker\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageRange = {\n serializedName: \"PageRange\",\n xmlName: \"PageRange\",\n type: {\n name: \"Composite\",\n className: \"PageRange\",\n modelProperties: {\n start: {\n serializedName: \"Start\",\n required: true,\n xmlName: \"Start\",\n type: {\n name: \"Number\"\n }\n },\n end: {\n serializedName: \"End\",\n required: true,\n xmlName: \"End\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\nexport const ClearRange = {\n serializedName: \"ClearRange\",\n xmlName: \"ClearRange\",\n type: {\n name: \"Composite\",\n className: \"ClearRange\",\n modelProperties: {\n start: {\n serializedName: \"Start\",\n required: true,\n xmlName: \"Start\",\n type: {\n name: \"Number\"\n }\n },\n end: {\n serializedName: \"End\",\n required: true,\n xmlName: \"End\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\nexport const QueryRequest = {\n serializedName: \"QueryRequest\",\n xmlName: \"QueryRequest\",\n type: {\n name: \"Composite\",\n className: \"QueryRequest\",\n modelProperties: {\n queryType: {\n serializedName: \"QueryType\",\n required: true,\n xmlName: \"QueryType\",\n type: {\n name: \"String\"\n }\n },\n expression: {\n serializedName: \"Expression\",\n required: true,\n xmlName: \"Expression\",\n type: {\n name: \"String\"\n }\n },\n inputSerialization: {\n serializedName: \"InputSerialization\",\n xmlName: \"InputSerialization\",\n type: {\n name: \"Composite\",\n className: \"QuerySerialization\"\n }\n },\n outputSerialization: {\n serializedName: \"OutputSerialization\",\n xmlName: \"OutputSerialization\",\n type: {\n name: \"Composite\",\n className: \"QuerySerialization\"\n }\n }\n }\n }\n};\nexport const QuerySerialization = {\n serializedName: \"QuerySerialization\",\n type: {\n name: \"Composite\",\n className: \"QuerySerialization\",\n modelProperties: {\n format: {\n serializedName: \"Format\",\n xmlName: \"Format\",\n type: {\n name: \"Composite\",\n className: \"QueryFormat\"\n }\n }\n }\n }\n};\nexport const QueryFormat = {\n serializedName: \"QueryFormat\",\n type: {\n name: \"Composite\",\n className: \"QueryFormat\",\n modelProperties: {\n type: {\n serializedName: \"Type\",\n required: true,\n xmlName: \"Type\",\n type: {\n name: \"Enum\",\n allowedValues: [\"delimited\", \"json\", \"arrow\", \"parquet\"]\n }\n },\n delimitedTextConfiguration: {\n serializedName: \"DelimitedTextConfiguration\",\n xmlName: \"DelimitedTextConfiguration\",\n type: {\n name: \"Composite\",\n className: \"DelimitedTextConfiguration\"\n }\n },\n jsonTextConfiguration: {\n serializedName: \"JsonTextConfiguration\",\n xmlName: \"JsonTextConfiguration\",\n type: {\n name: \"Composite\",\n className: \"JsonTextConfiguration\"\n }\n },\n arrowConfiguration: {\n serializedName: \"ArrowConfiguration\",\n xmlName: \"ArrowConfiguration\",\n type: {\n name: \"Composite\",\n className: \"ArrowConfiguration\"\n }\n },\n parquetTextConfiguration: {\n serializedName: \"ParquetTextConfiguration\",\n xmlName: \"ParquetTextConfiguration\",\n type: {\n name: \"any\"\n }\n }\n }\n }\n};\nexport const DelimitedTextConfiguration = {\n serializedName: \"DelimitedTextConfiguration\",\n xmlName: \"DelimitedTextConfiguration\",\n type: {\n name: \"Composite\",\n className: \"DelimitedTextConfiguration\",\n modelProperties: {\n columnSeparator: {\n serializedName: \"ColumnSeparator\",\n xmlName: \"ColumnSeparator\",\n type: {\n name: \"String\"\n }\n },\n fieldQuote: {\n serializedName: \"FieldQuote\",\n xmlName: \"FieldQuote\",\n type: {\n name: \"String\"\n }\n },\n recordSeparator: {\n serializedName: \"RecordSeparator\",\n xmlName: \"RecordSeparator\",\n type: {\n name: \"String\"\n }\n },\n escapeChar: {\n serializedName: \"EscapeChar\",\n xmlName: \"EscapeChar\",\n type: {\n name: \"String\"\n }\n },\n headersPresent: {\n serializedName: \"HeadersPresent\",\n xmlName: \"HasHeaders\",\n type: {\n name: \"Boolean\"\n }\n }\n }\n }\n};\nexport const JsonTextConfiguration = {\n serializedName: \"JsonTextConfiguration\",\n xmlName: \"JsonTextConfiguration\",\n type: {\n name: \"Composite\",\n className: \"JsonTextConfiguration\",\n modelProperties: {\n recordSeparator: {\n serializedName: \"RecordSeparator\",\n xmlName: \"RecordSeparator\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ArrowConfiguration = {\n serializedName: \"ArrowConfiguration\",\n xmlName: \"ArrowConfiguration\",\n type: {\n name: \"Composite\",\n className: \"ArrowConfiguration\",\n modelProperties: {\n schema: {\n serializedName: \"Schema\",\n required: true,\n xmlName: \"Schema\",\n xmlIsWrapped: true,\n xmlElementName: \"Field\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"ArrowField\"\n }\n }\n }\n }\n }\n }\n};\nexport const ArrowField = {\n serializedName: \"ArrowField\",\n xmlName: \"Field\",\n type: {\n name: \"Composite\",\n className: \"ArrowField\",\n modelProperties: {\n type: {\n serializedName: \"Type\",\n required: true,\n xmlName: \"Type\",\n type: {\n name: \"String\"\n }\n },\n name: {\n serializedName: \"Name\",\n xmlName: \"Name\",\n type: {\n name: \"String\"\n }\n },\n precision: {\n serializedName: \"Precision\",\n xmlName: \"Precision\",\n type: {\n name: \"Number\"\n }\n },\n scale: {\n serializedName: \"Scale\",\n xmlName: \"Scale\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\nexport const ServiceSetPropertiesHeaders = {\n serializedName: \"Service_setPropertiesHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceSetPropertiesHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceSetPropertiesExceptionHeaders = {\n serializedName: \"Service_setPropertiesExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceSetPropertiesExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceGetPropertiesHeaders = {\n serializedName: \"Service_getPropertiesHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetPropertiesHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceGetPropertiesExceptionHeaders = {\n serializedName: \"Service_getPropertiesExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetPropertiesExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceGetStatisticsHeaders = {\n serializedName: \"Service_getStatisticsHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetStatisticsHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceGetStatisticsExceptionHeaders = {\n serializedName: \"Service_getStatisticsExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetStatisticsExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceListContainersSegmentHeaders = {\n serializedName: \"Service_listContainersSegmentHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceListContainersSegmentHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceListContainersSegmentExceptionHeaders = {\n serializedName: \"Service_listContainersSegmentExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceListContainersSegmentExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceGetUserDelegationKeyHeaders = {\n serializedName: \"Service_getUserDelegationKeyHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetUserDelegationKeyHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceGetUserDelegationKeyExceptionHeaders = {\n serializedName: \"Service_getUserDelegationKeyExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetUserDelegationKeyExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceGetAccountInfoHeaders = {\n serializedName: \"Service_getAccountInfoHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetAccountInfoHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n skuName: {\n serializedName: \"x-ms-sku-name\",\n xmlName: \"x-ms-sku-name\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Standard_LRS\", \"Standard_GRS\", \"Standard_RAGRS\", \"Standard_ZRS\", \"Premium_LRS\"]\n }\n },\n accountKind: {\n serializedName: \"x-ms-account-kind\",\n xmlName: \"x-ms-account-kind\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Storage\", \"BlobStorage\", \"StorageV2\", \"FileStorage\", \"BlockBlobStorage\"]\n }\n },\n isHierarchicalNamespaceEnabled: {\n serializedName: \"x-ms-is-hns-enabled\",\n xmlName: \"x-ms-is-hns-enabled\",\n type: {\n name: \"Boolean\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceGetAccountInfoExceptionHeaders = {\n serializedName: \"Service_getAccountInfoExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetAccountInfoExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceSubmitBatchHeaders = {\n serializedName: \"Service_submitBatchHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceSubmitBatchHeaders\",\n modelProperties: {\n contentType: {\n serializedName: \"content-type\",\n xmlName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceSubmitBatchExceptionHeaders = {\n serializedName: \"Service_submitBatchExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceSubmitBatchExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceFilterBlobsHeaders = {\n serializedName: \"Service_filterBlobsHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceFilterBlobsHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ServiceFilterBlobsExceptionHeaders = {\n serializedName: \"Service_filterBlobsExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ServiceFilterBlobsExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerCreateHeaders = {\n serializedName: \"Container_createHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerCreateHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerCreateExceptionHeaders = {\n serializedName: \"Container_createExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerCreateExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerGetPropertiesHeaders = {\n serializedName: \"Container_getPropertiesHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerGetPropertiesHeaders\",\n modelProperties: {\n metadata: {\n serializedName: \"x-ms-meta\",\n xmlName: \"x-ms-meta\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n },\n headerCollectionPrefix: \"x-ms-meta-\"\n },\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseDuration: {\n serializedName: \"x-ms-lease-duration\",\n xmlName: \"x-ms-lease-duration\",\n type: {\n name: \"Enum\",\n allowedValues: [\"infinite\", \"fixed\"]\n }\n },\n leaseState: {\n serializedName: \"x-ms-lease-state\",\n xmlName: \"x-ms-lease-state\",\n type: {\n name: \"Enum\",\n allowedValues: [\"available\", \"leased\", \"expired\", \"breaking\", \"broken\"]\n }\n },\n leaseStatus: {\n serializedName: \"x-ms-lease-status\",\n xmlName: \"x-ms-lease-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\"locked\", \"unlocked\"]\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobPublicAccess: {\n serializedName: \"x-ms-blob-public-access\",\n xmlName: \"x-ms-blob-public-access\",\n type: {\n name: \"Enum\",\n allowedValues: [\"container\", \"blob\"]\n }\n },\n hasImmutabilityPolicy: {\n serializedName: \"x-ms-has-immutability-policy\",\n xmlName: \"x-ms-has-immutability-policy\",\n type: {\n name: \"Boolean\"\n }\n },\n hasLegalHold: {\n serializedName: \"x-ms-has-legal-hold\",\n xmlName: \"x-ms-has-legal-hold\",\n type: {\n name: \"Boolean\"\n }\n },\n defaultEncryptionScope: {\n serializedName: \"x-ms-default-encryption-scope\",\n xmlName: \"x-ms-default-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n denyEncryptionScopeOverride: {\n serializedName: \"x-ms-deny-encryption-scope-override\",\n xmlName: \"x-ms-deny-encryption-scope-override\",\n type: {\n name: \"Boolean\"\n }\n },\n isImmutableStorageWithVersioningEnabled: {\n serializedName: \"x-ms-immutable-storage-with-versioning-enabled\",\n xmlName: \"x-ms-immutable-storage-with-versioning-enabled\",\n type: {\n name: \"Boolean\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerGetPropertiesExceptionHeaders = {\n serializedName: \"Container_getPropertiesExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerGetPropertiesExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerDeleteHeaders = {\n serializedName: \"Container_deleteHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerDeleteHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerDeleteExceptionHeaders = {\n serializedName: \"Container_deleteExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerDeleteExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerSetMetadataHeaders = {\n serializedName: \"Container_setMetadataHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerSetMetadataHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerSetMetadataExceptionHeaders = {\n serializedName: \"Container_setMetadataExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerSetMetadataExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerGetAccessPolicyHeaders = {\n serializedName: \"Container_getAccessPolicyHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerGetAccessPolicyHeaders\",\n modelProperties: {\n blobPublicAccess: {\n serializedName: \"x-ms-blob-public-access\",\n xmlName: \"x-ms-blob-public-access\",\n type: {\n name: \"Enum\",\n allowedValues: [\"container\", \"blob\"]\n }\n },\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerGetAccessPolicyExceptionHeaders = {\n serializedName: \"Container_getAccessPolicyExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerGetAccessPolicyExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerSetAccessPolicyHeaders = {\n serializedName: \"Container_setAccessPolicyHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerSetAccessPolicyHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerSetAccessPolicyExceptionHeaders = {\n serializedName: \"Container_setAccessPolicyExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerSetAccessPolicyExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerRestoreHeaders = {\n serializedName: \"Container_restoreHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerRestoreHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerRestoreExceptionHeaders = {\n serializedName: \"Container_restoreExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerRestoreExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerRenameHeaders = {\n serializedName: \"Container_renameHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerRenameHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerRenameExceptionHeaders = {\n serializedName: \"Container_renameExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerRenameExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerSubmitBatchHeaders = {\n serializedName: \"Container_submitBatchHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerSubmitBatchHeaders\",\n modelProperties: {\n contentType: {\n serializedName: \"content-type\",\n xmlName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerSubmitBatchExceptionHeaders = {\n serializedName: \"Container_submitBatchExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerSubmitBatchExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerFilterBlobsHeaders = {\n serializedName: \"Container_filterBlobsHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerFilterBlobsHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const ContainerFilterBlobsExceptionHeaders = {\n serializedName: \"Container_filterBlobsExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerFilterBlobsExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerAcquireLeaseHeaders = {\n serializedName: \"Container_acquireLeaseHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerAcquireLeaseHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n xmlName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const ContainerAcquireLeaseExceptionHeaders = {\n serializedName: \"Container_acquireLeaseExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerAcquireLeaseExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerReleaseLeaseHeaders = {\n serializedName: \"Container_releaseLeaseHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerReleaseLeaseHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const ContainerReleaseLeaseExceptionHeaders = {\n serializedName: \"Container_releaseLeaseExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerReleaseLeaseExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerRenewLeaseHeaders = {\n serializedName: \"Container_renewLeaseHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerRenewLeaseHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n xmlName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const ContainerRenewLeaseExceptionHeaders = {\n serializedName: \"Container_renewLeaseExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerRenewLeaseExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerBreakLeaseHeaders = {\n serializedName: \"Container_breakLeaseHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerBreakLeaseHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseTime: {\n serializedName: \"x-ms-lease-time\",\n xmlName: \"x-ms-lease-time\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const ContainerBreakLeaseExceptionHeaders = {\n serializedName: \"Container_breakLeaseExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerBreakLeaseExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerChangeLeaseHeaders = {\n serializedName: \"Container_changeLeaseHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerChangeLeaseHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n xmlName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const ContainerChangeLeaseExceptionHeaders = {\n serializedName: \"Container_changeLeaseExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerChangeLeaseExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerListBlobFlatSegmentHeaders = {\n serializedName: \"Container_listBlobFlatSegmentHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerListBlobFlatSegmentHeaders\",\n modelProperties: {\n contentType: {\n serializedName: \"content-type\",\n xmlName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerListBlobFlatSegmentExceptionHeaders = {\n serializedName: \"Container_listBlobFlatSegmentExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerListBlobFlatSegmentExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerListBlobHierarchySegmentHeaders = {\n serializedName: \"Container_listBlobHierarchySegmentHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerListBlobHierarchySegmentHeaders\",\n modelProperties: {\n contentType: {\n serializedName: \"content-type\",\n xmlName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerListBlobHierarchySegmentExceptionHeaders = {\n serializedName: \"Container_listBlobHierarchySegmentExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerListBlobHierarchySegmentExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const ContainerGetAccountInfoHeaders = {\n serializedName: \"Container_getAccountInfoHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerGetAccountInfoHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n skuName: {\n serializedName: \"x-ms-sku-name\",\n xmlName: \"x-ms-sku-name\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Standard_LRS\", \"Standard_GRS\", \"Standard_RAGRS\", \"Standard_ZRS\", \"Premium_LRS\"]\n }\n },\n accountKind: {\n serializedName: \"x-ms-account-kind\",\n xmlName: \"x-ms-account-kind\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Storage\", \"BlobStorage\", \"StorageV2\", \"FileStorage\", \"BlockBlobStorage\"]\n }\n }\n }\n }\n};\nexport const ContainerGetAccountInfoExceptionHeaders = {\n serializedName: \"Container_getAccountInfoExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"ContainerGetAccountInfoExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobDownloadHeaders = {\n serializedName: \"Blob_downloadHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobDownloadHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n createdOn: {\n serializedName: \"x-ms-creation-time\",\n xmlName: \"x-ms-creation-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n metadata: {\n serializedName: \"x-ms-meta\",\n xmlName: \"x-ms-meta\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n },\n headerCollectionPrefix: \"x-ms-meta-\"\n },\n objectReplicationPolicyId: {\n serializedName: \"x-ms-or-policy-id\",\n xmlName: \"x-ms-or-policy-id\",\n type: {\n name: \"String\"\n }\n },\n objectReplicationRules: {\n serializedName: \"x-ms-or\",\n xmlName: \"x-ms-or\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n },\n headerCollectionPrefix: \"x-ms-or-\"\n },\n contentLength: {\n serializedName: \"content-length\",\n xmlName: \"content-length\",\n type: {\n name: \"Number\"\n }\n },\n contentType: {\n serializedName: \"content-type\",\n xmlName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n contentRange: {\n serializedName: \"content-range\",\n xmlName: \"content-range\",\n type: {\n name: \"String\"\n }\n },\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n contentEncoding: {\n serializedName: \"content-encoding\",\n xmlName: \"content-encoding\",\n type: {\n name: \"String\"\n }\n },\n cacheControl: {\n serializedName: \"cache-control\",\n xmlName: \"cache-control\",\n type: {\n name: \"String\"\n }\n },\n contentDisposition: {\n serializedName: \"content-disposition\",\n xmlName: \"content-disposition\",\n type: {\n name: \"String\"\n }\n },\n contentLanguage: {\n serializedName: \"content-language\",\n xmlName: \"content-language\",\n type: {\n name: \"String\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n blobType: {\n serializedName: \"x-ms-blob-type\",\n xmlName: \"x-ms-blob-type\",\n type: {\n name: \"Enum\",\n allowedValues: [\"BlockBlob\", \"PageBlob\", \"AppendBlob\"]\n }\n },\n copyCompletedOn: {\n serializedName: \"x-ms-copy-completion-time\",\n xmlName: \"x-ms-copy-completion-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyStatusDescription: {\n serializedName: \"x-ms-copy-status-description\",\n xmlName: \"x-ms-copy-status-description\",\n type: {\n name: \"String\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n xmlName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyProgress: {\n serializedName: \"x-ms-copy-progress\",\n xmlName: \"x-ms-copy-progress\",\n type: {\n name: \"String\"\n }\n },\n copySource: {\n serializedName: \"x-ms-copy-source\",\n xmlName: \"x-ms-copy-source\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"x-ms-copy-status\",\n xmlName: \"x-ms-copy-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\"pending\", \"success\", \"aborted\", \"failed\"]\n }\n },\n leaseDuration: {\n serializedName: \"x-ms-lease-duration\",\n xmlName: \"x-ms-lease-duration\",\n type: {\n name: \"Enum\",\n allowedValues: [\"infinite\", \"fixed\"]\n }\n },\n leaseState: {\n serializedName: \"x-ms-lease-state\",\n xmlName: \"x-ms-lease-state\",\n type: {\n name: \"Enum\",\n allowedValues: [\"available\", \"leased\", \"expired\", \"breaking\", \"broken\"]\n }\n },\n leaseStatus: {\n serializedName: \"x-ms-lease-status\",\n xmlName: \"x-ms-lease-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\"locked\", \"unlocked\"]\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n isCurrentVersion: {\n serializedName: \"x-ms-is-current-version\",\n xmlName: \"x-ms-is-current-version\",\n type: {\n name: \"Boolean\"\n }\n },\n acceptRanges: {\n serializedName: \"accept-ranges\",\n xmlName: \"accept-ranges\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobCommittedBlockCount: {\n serializedName: \"x-ms-blob-committed-block-count\",\n xmlName: \"x-ms-blob-committed-block-count\",\n type: {\n name: \"Number\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-server-encrypted\",\n xmlName: \"x-ms-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n blobContentMD5: {\n serializedName: \"x-ms-blob-content-md5\",\n xmlName: \"x-ms-blob-content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n tagCount: {\n serializedName: \"x-ms-tag-count\",\n xmlName: \"x-ms-tag-count\",\n type: {\n name: \"Number\"\n }\n },\n isSealed: {\n serializedName: \"x-ms-blob-sealed\",\n xmlName: \"x-ms-blob-sealed\",\n type: {\n name: \"Boolean\"\n }\n },\n lastAccessed: {\n serializedName: \"x-ms-last-access-time\",\n xmlName: \"x-ms-last-access-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n immutabilityPolicyExpiresOn: {\n serializedName: \"x-ms-immutability-policy-until-date\",\n xmlName: \"x-ms-immutability-policy-until-date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n immutabilityPolicyMode: {\n serializedName: \"x-ms-immutability-policy-mode\",\n xmlName: \"x-ms-immutability-policy-mode\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Mutable\", \"Unlocked\", \"Locked\"]\n }\n },\n legalHold: {\n serializedName: \"x-ms-legal-hold\",\n xmlName: \"x-ms-legal-hold\",\n type: {\n name: \"Boolean\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n },\n contentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n }\n }\n }\n};\nexport const BlobDownloadExceptionHeaders = {\n serializedName: \"Blob_downloadExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobDownloadExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobGetPropertiesHeaders = {\n serializedName: \"Blob_getPropertiesHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobGetPropertiesHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n createdOn: {\n serializedName: \"x-ms-creation-time\",\n xmlName: \"x-ms-creation-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n metadata: {\n serializedName: \"x-ms-meta\",\n xmlName: \"x-ms-meta\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n },\n headerCollectionPrefix: \"x-ms-meta-\"\n },\n objectReplicationPolicyId: {\n serializedName: \"x-ms-or-policy-id\",\n xmlName: \"x-ms-or-policy-id\",\n type: {\n name: \"String\"\n }\n },\n objectReplicationRules: {\n serializedName: \"x-ms-or\",\n xmlName: \"x-ms-or\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n },\n headerCollectionPrefix: \"x-ms-or-\"\n },\n blobType: {\n serializedName: \"x-ms-blob-type\",\n xmlName: \"x-ms-blob-type\",\n type: {\n name: \"Enum\",\n allowedValues: [\"BlockBlob\", \"PageBlob\", \"AppendBlob\"]\n }\n },\n copyCompletedOn: {\n serializedName: \"x-ms-copy-completion-time\",\n xmlName: \"x-ms-copy-completion-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyStatusDescription: {\n serializedName: \"x-ms-copy-status-description\",\n xmlName: \"x-ms-copy-status-description\",\n type: {\n name: \"String\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n xmlName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyProgress: {\n serializedName: \"x-ms-copy-progress\",\n xmlName: \"x-ms-copy-progress\",\n type: {\n name: \"String\"\n }\n },\n copySource: {\n serializedName: \"x-ms-copy-source\",\n xmlName: \"x-ms-copy-source\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"x-ms-copy-status\",\n xmlName: \"x-ms-copy-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\"pending\", \"success\", \"aborted\", \"failed\"]\n }\n },\n isIncrementalCopy: {\n serializedName: \"x-ms-incremental-copy\",\n xmlName: \"x-ms-incremental-copy\",\n type: {\n name: \"Boolean\"\n }\n },\n destinationSnapshot: {\n serializedName: \"x-ms-copy-destination-snapshot\",\n xmlName: \"x-ms-copy-destination-snapshot\",\n type: {\n name: \"String\"\n }\n },\n leaseDuration: {\n serializedName: \"x-ms-lease-duration\",\n xmlName: \"x-ms-lease-duration\",\n type: {\n name: \"Enum\",\n allowedValues: [\"infinite\", \"fixed\"]\n }\n },\n leaseState: {\n serializedName: \"x-ms-lease-state\",\n xmlName: \"x-ms-lease-state\",\n type: {\n name: \"Enum\",\n allowedValues: [\"available\", \"leased\", \"expired\", \"breaking\", \"broken\"]\n }\n },\n leaseStatus: {\n serializedName: \"x-ms-lease-status\",\n xmlName: \"x-ms-lease-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\"locked\", \"unlocked\"]\n }\n },\n contentLength: {\n serializedName: \"content-length\",\n xmlName: \"content-length\",\n type: {\n name: \"Number\"\n }\n },\n contentType: {\n serializedName: \"content-type\",\n xmlName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n contentEncoding: {\n serializedName: \"content-encoding\",\n xmlName: \"content-encoding\",\n type: {\n name: \"String\"\n }\n },\n contentDisposition: {\n serializedName: \"content-disposition\",\n xmlName: \"content-disposition\",\n type: {\n name: \"String\"\n }\n },\n contentLanguage: {\n serializedName: \"content-language\",\n xmlName: \"content-language\",\n type: {\n name: \"String\"\n }\n },\n cacheControl: {\n serializedName: \"cache-control\",\n xmlName: \"cache-control\",\n type: {\n name: \"String\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n acceptRanges: {\n serializedName: \"accept-ranges\",\n xmlName: \"accept-ranges\",\n type: {\n name: \"String\"\n }\n },\n blobCommittedBlockCount: {\n serializedName: \"x-ms-blob-committed-block-count\",\n xmlName: \"x-ms-blob-committed-block-count\",\n type: {\n name: \"Number\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-server-encrypted\",\n xmlName: \"x-ms-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n accessTier: {\n serializedName: \"x-ms-access-tier\",\n xmlName: \"x-ms-access-tier\",\n type: {\n name: \"String\"\n }\n },\n accessTierInferred: {\n serializedName: \"x-ms-access-tier-inferred\",\n xmlName: \"x-ms-access-tier-inferred\",\n type: {\n name: \"Boolean\"\n }\n },\n archiveStatus: {\n serializedName: \"x-ms-archive-status\",\n xmlName: \"x-ms-archive-status\",\n type: {\n name: \"String\"\n }\n },\n accessTierChangedOn: {\n serializedName: \"x-ms-access-tier-change-time\",\n xmlName: \"x-ms-access-tier-change-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n isCurrentVersion: {\n serializedName: \"x-ms-is-current-version\",\n xmlName: \"x-ms-is-current-version\",\n type: {\n name: \"Boolean\"\n }\n },\n tagCount: {\n serializedName: \"x-ms-tag-count\",\n xmlName: \"x-ms-tag-count\",\n type: {\n name: \"Number\"\n }\n },\n expiresOn: {\n serializedName: \"x-ms-expiry-time\",\n xmlName: \"x-ms-expiry-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isSealed: {\n serializedName: \"x-ms-blob-sealed\",\n xmlName: \"x-ms-blob-sealed\",\n type: {\n name: \"Boolean\"\n }\n },\n rehydratePriority: {\n serializedName: \"x-ms-rehydrate-priority\",\n xmlName: \"x-ms-rehydrate-priority\",\n type: {\n name: \"Enum\",\n allowedValues: [\"High\", \"Standard\"]\n }\n },\n lastAccessed: {\n serializedName: \"x-ms-last-access-time\",\n xmlName: \"x-ms-last-access-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n immutabilityPolicyExpiresOn: {\n serializedName: \"x-ms-immutability-policy-until-date\",\n xmlName: \"x-ms-immutability-policy-until-date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n immutabilityPolicyMode: {\n serializedName: \"x-ms-immutability-policy-mode\",\n xmlName: \"x-ms-immutability-policy-mode\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Mutable\", \"Unlocked\", \"Locked\"]\n }\n },\n legalHold: {\n serializedName: \"x-ms-legal-hold\",\n xmlName: \"x-ms-legal-hold\",\n type: {\n name: \"Boolean\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobGetPropertiesExceptionHeaders = {\n serializedName: \"Blob_getPropertiesExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobGetPropertiesExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobDeleteHeaders = {\n serializedName: \"Blob_deleteHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobDeleteHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobDeleteExceptionHeaders = {\n serializedName: \"Blob_deleteExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobDeleteExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobUndeleteHeaders = {\n serializedName: \"Blob_undeleteHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobUndeleteHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobUndeleteExceptionHeaders = {\n serializedName: \"Blob_undeleteExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobUndeleteExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetExpiryHeaders = {\n serializedName: \"Blob_setExpiryHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetExpiryHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const BlobSetExpiryExceptionHeaders = {\n serializedName: \"Blob_setExpiryExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetExpiryExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetHttpHeadersHeaders = {\n serializedName: \"Blob_setHttpHeadersHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetHttpHeadersHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetHttpHeadersExceptionHeaders = {\n serializedName: \"Blob_setHttpHeadersExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetHttpHeadersExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetImmutabilityPolicyHeaders = {\n serializedName: \"Blob_setImmutabilityPolicyHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetImmutabilityPolicyHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n immutabilityPolicyExpiry: {\n serializedName: \"x-ms-immutability-policy-until-date\",\n xmlName: \"x-ms-immutability-policy-until-date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n immutabilityPolicyMode: {\n serializedName: \"x-ms-immutability-policy-mode\",\n xmlName: \"x-ms-immutability-policy-mode\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Mutable\", \"Unlocked\", \"Locked\"]\n }\n }\n }\n }\n};\nexport const BlobSetImmutabilityPolicyExceptionHeaders = {\n serializedName: \"Blob_setImmutabilityPolicyExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetImmutabilityPolicyExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobDeleteImmutabilityPolicyHeaders = {\n serializedName: \"Blob_deleteImmutabilityPolicyHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobDeleteImmutabilityPolicyHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const BlobDeleteImmutabilityPolicyExceptionHeaders = {\n serializedName: \"Blob_deleteImmutabilityPolicyExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobDeleteImmutabilityPolicyExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetLegalHoldHeaders = {\n serializedName: \"Blob_setLegalHoldHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetLegalHoldHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n legalHold: {\n serializedName: \"x-ms-legal-hold\",\n xmlName: \"x-ms-legal-hold\",\n type: {\n name: \"Boolean\"\n }\n }\n }\n }\n};\nexport const BlobSetLegalHoldExceptionHeaders = {\n serializedName: \"Blob_setLegalHoldExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetLegalHoldExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetMetadataHeaders = {\n serializedName: \"Blob_setMetadataHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetMetadataHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetMetadataExceptionHeaders = {\n serializedName: \"Blob_setMetadataExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetMetadataExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobAcquireLeaseHeaders = {\n serializedName: \"Blob_acquireLeaseHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobAcquireLeaseHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n xmlName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const BlobAcquireLeaseExceptionHeaders = {\n serializedName: \"Blob_acquireLeaseExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobAcquireLeaseExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobReleaseLeaseHeaders = {\n serializedName: \"Blob_releaseLeaseHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobReleaseLeaseHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const BlobReleaseLeaseExceptionHeaders = {\n serializedName: \"Blob_releaseLeaseExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobReleaseLeaseExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobRenewLeaseHeaders = {\n serializedName: \"Blob_renewLeaseHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobRenewLeaseHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n xmlName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const BlobRenewLeaseExceptionHeaders = {\n serializedName: \"Blob_renewLeaseExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobRenewLeaseExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobChangeLeaseHeaders = {\n serializedName: \"Blob_changeLeaseHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobChangeLeaseHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n xmlName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const BlobChangeLeaseExceptionHeaders = {\n serializedName: \"Blob_changeLeaseExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobChangeLeaseExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobBreakLeaseHeaders = {\n serializedName: \"Blob_breakLeaseHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobBreakLeaseHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseTime: {\n serializedName: \"x-ms-lease-time\",\n xmlName: \"x-ms-lease-time\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\nexport const BlobBreakLeaseExceptionHeaders = {\n serializedName: \"Blob_breakLeaseExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobBreakLeaseExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobCreateSnapshotHeaders = {\n serializedName: \"Blob_createSnapshotHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobCreateSnapshotHeaders\",\n modelProperties: {\n snapshot: {\n serializedName: \"x-ms-snapshot\",\n xmlName: \"x-ms-snapshot\",\n type: {\n name: \"String\"\n }\n },\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobCreateSnapshotExceptionHeaders = {\n serializedName: \"Blob_createSnapshotExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobCreateSnapshotExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobStartCopyFromURLHeaders = {\n serializedName: \"Blob_startCopyFromURLHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobStartCopyFromURLHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n xmlName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"x-ms-copy-status\",\n xmlName: \"x-ms-copy-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\"pending\", \"success\", \"aborted\", \"failed\"]\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobStartCopyFromURLExceptionHeaders = {\n serializedName: \"Blob_startCopyFromURLExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobStartCopyFromURLExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobCopyFromURLHeaders = {\n serializedName: \"Blob_copyFromURLHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobCopyFromURLHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n xmlName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n defaultValue: \"success\",\n isConstant: true,\n serializedName: \"x-ms-copy-status\",\n type: {\n name: \"String\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobCopyFromURLExceptionHeaders = {\n serializedName: \"Blob_copyFromURLExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobCopyFromURLExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobAbortCopyFromURLHeaders = {\n serializedName: \"Blob_abortCopyFromURLHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobAbortCopyFromURLHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobAbortCopyFromURLExceptionHeaders = {\n serializedName: \"Blob_abortCopyFromURLExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobAbortCopyFromURLExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetTierHeaders = {\n serializedName: \"Blob_setTierHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetTierHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetTierExceptionHeaders = {\n serializedName: \"Blob_setTierExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetTierExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobGetAccountInfoHeaders = {\n serializedName: \"Blob_getAccountInfoHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobGetAccountInfoHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n skuName: {\n serializedName: \"x-ms-sku-name\",\n xmlName: \"x-ms-sku-name\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Standard_LRS\", \"Standard_GRS\", \"Standard_RAGRS\", \"Standard_ZRS\", \"Premium_LRS\"]\n }\n },\n accountKind: {\n serializedName: \"x-ms-account-kind\",\n xmlName: \"x-ms-account-kind\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Storage\", \"BlobStorage\", \"StorageV2\", \"FileStorage\", \"BlockBlobStorage\"]\n }\n }\n }\n }\n};\nexport const BlobGetAccountInfoExceptionHeaders = {\n serializedName: \"Blob_getAccountInfoExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobGetAccountInfoExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobQueryHeaders = {\n serializedName: \"Blob_queryHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobQueryHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n metadata: {\n serializedName: \"x-ms-meta\",\n xmlName: \"x-ms-meta\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n }\n },\n contentLength: {\n serializedName: \"content-length\",\n xmlName: \"content-length\",\n type: {\n name: \"Number\"\n }\n },\n contentType: {\n serializedName: \"content-type\",\n xmlName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n contentRange: {\n serializedName: \"content-range\",\n xmlName: \"content-range\",\n type: {\n name: \"String\"\n }\n },\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n contentEncoding: {\n serializedName: \"content-encoding\",\n xmlName: \"content-encoding\",\n type: {\n name: \"String\"\n }\n },\n cacheControl: {\n serializedName: \"cache-control\",\n xmlName: \"cache-control\",\n type: {\n name: \"String\"\n }\n },\n contentDisposition: {\n serializedName: \"content-disposition\",\n xmlName: \"content-disposition\",\n type: {\n name: \"String\"\n }\n },\n contentLanguage: {\n serializedName: \"content-language\",\n xmlName: \"content-language\",\n type: {\n name: \"String\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n blobType: {\n serializedName: \"x-ms-blob-type\",\n xmlName: \"x-ms-blob-type\",\n type: {\n name: \"Enum\",\n allowedValues: [\"BlockBlob\", \"PageBlob\", \"AppendBlob\"]\n }\n },\n copyCompletionTime: {\n serializedName: \"x-ms-copy-completion-time\",\n xmlName: \"x-ms-copy-completion-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyStatusDescription: {\n serializedName: \"x-ms-copy-status-description\",\n xmlName: \"x-ms-copy-status-description\",\n type: {\n name: \"String\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n xmlName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyProgress: {\n serializedName: \"x-ms-copy-progress\",\n xmlName: \"x-ms-copy-progress\",\n type: {\n name: \"String\"\n }\n },\n copySource: {\n serializedName: \"x-ms-copy-source\",\n xmlName: \"x-ms-copy-source\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"x-ms-copy-status\",\n xmlName: \"x-ms-copy-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\"pending\", \"success\", \"aborted\", \"failed\"]\n }\n },\n leaseDuration: {\n serializedName: \"x-ms-lease-duration\",\n xmlName: \"x-ms-lease-duration\",\n type: {\n name: \"Enum\",\n allowedValues: [\"infinite\", \"fixed\"]\n }\n },\n leaseState: {\n serializedName: \"x-ms-lease-state\",\n xmlName: \"x-ms-lease-state\",\n type: {\n name: \"Enum\",\n allowedValues: [\"available\", \"leased\", \"expired\", \"breaking\", \"broken\"]\n }\n },\n leaseStatus: {\n serializedName: \"x-ms-lease-status\",\n xmlName: \"x-ms-lease-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\"locked\", \"unlocked\"]\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n acceptRanges: {\n serializedName: \"accept-ranges\",\n xmlName: \"accept-ranges\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobCommittedBlockCount: {\n serializedName: \"x-ms-blob-committed-block-count\",\n xmlName: \"x-ms-blob-committed-block-count\",\n type: {\n name: \"Number\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-server-encrypted\",\n xmlName: \"x-ms-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n blobContentMD5: {\n serializedName: \"x-ms-blob-content-md5\",\n xmlName: \"x-ms-blob-content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n },\n contentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n }\n }\n }\n};\nexport const BlobQueryExceptionHeaders = {\n serializedName: \"Blob_queryExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobQueryExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobGetTagsHeaders = {\n serializedName: \"Blob_getTagsHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobGetTagsHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobGetTagsExceptionHeaders = {\n serializedName: \"Blob_getTagsExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobGetTagsExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetTagsHeaders = {\n serializedName: \"Blob_setTagsHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetTagsHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlobSetTagsExceptionHeaders = {\n serializedName: \"Blob_setTagsExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlobSetTagsExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobCreateHeaders = {\n serializedName: \"PageBlob_createHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobCreateHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobCreateExceptionHeaders = {\n serializedName: \"PageBlob_createExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobCreateExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobUploadPagesHeaders = {\n serializedName: \"PageBlob_uploadPagesHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobUploadPagesHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobUploadPagesExceptionHeaders = {\n serializedName: \"PageBlob_uploadPagesExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobUploadPagesExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobClearPagesHeaders = {\n serializedName: \"PageBlob_clearPagesHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobClearPagesHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobClearPagesExceptionHeaders = {\n serializedName: \"PageBlob_clearPagesExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobClearPagesExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobUploadPagesFromURLHeaders = {\n serializedName: \"PageBlob_uploadPagesFromURLHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobUploadPagesFromURLHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobUploadPagesFromURLExceptionHeaders = {\n serializedName: \"PageBlob_uploadPagesFromURLExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobUploadPagesFromURLExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobGetPageRangesHeaders = {\n serializedName: \"PageBlob_getPageRangesHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobGetPageRangesHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n blobContentLength: {\n serializedName: \"x-ms-blob-content-length\",\n xmlName: \"x-ms-blob-content-length\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobGetPageRangesExceptionHeaders = {\n serializedName: \"PageBlob_getPageRangesExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobGetPageRangesExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobGetPageRangesDiffHeaders = {\n serializedName: \"PageBlob_getPageRangesDiffHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobGetPageRangesDiffHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n blobContentLength: {\n serializedName: \"x-ms-blob-content-length\",\n xmlName: \"x-ms-blob-content-length\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobGetPageRangesDiffExceptionHeaders = {\n serializedName: \"PageBlob_getPageRangesDiffExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobGetPageRangesDiffExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobResizeHeaders = {\n serializedName: \"PageBlob_resizeHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobResizeHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobResizeExceptionHeaders = {\n serializedName: \"PageBlob_resizeExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobResizeExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobUpdateSequenceNumberHeaders = {\n serializedName: \"PageBlob_updateSequenceNumberHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobUpdateSequenceNumberHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobUpdateSequenceNumberExceptionHeaders = {\n serializedName: \"PageBlob_updateSequenceNumberExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobUpdateSequenceNumberExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobCopyIncrementalHeaders = {\n serializedName: \"PageBlob_copyIncrementalHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobCopyIncrementalHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n xmlName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"x-ms-copy-status\",\n xmlName: \"x-ms-copy-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\"pending\", \"success\", \"aborted\", \"failed\"]\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const PageBlobCopyIncrementalExceptionHeaders = {\n serializedName: \"PageBlob_copyIncrementalExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"PageBlobCopyIncrementalExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const AppendBlobCreateHeaders = {\n serializedName: \"AppendBlob_createHeaders\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobCreateHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const AppendBlobCreateExceptionHeaders = {\n serializedName: \"AppendBlob_createExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobCreateExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const AppendBlobAppendBlockHeaders = {\n serializedName: \"AppendBlob_appendBlockHeaders\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobAppendBlockHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobAppendOffset: {\n serializedName: \"x-ms-blob-append-offset\",\n xmlName: \"x-ms-blob-append-offset\",\n type: {\n name: \"String\"\n }\n },\n blobCommittedBlockCount: {\n serializedName: \"x-ms-blob-committed-block-count\",\n xmlName: \"x-ms-blob-committed-block-count\",\n type: {\n name: \"Number\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const AppendBlobAppendBlockExceptionHeaders = {\n serializedName: \"AppendBlob_appendBlockExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobAppendBlockExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const AppendBlobAppendBlockFromUrlHeaders = {\n serializedName: \"AppendBlob_appendBlockFromUrlHeaders\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobAppendBlockFromUrlHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobAppendOffset: {\n serializedName: \"x-ms-blob-append-offset\",\n xmlName: \"x-ms-blob-append-offset\",\n type: {\n name: \"String\"\n }\n },\n blobCommittedBlockCount: {\n serializedName: \"x-ms-blob-committed-block-count\",\n xmlName: \"x-ms-blob-committed-block-count\",\n type: {\n name: \"Number\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const AppendBlobAppendBlockFromUrlExceptionHeaders = {\n serializedName: \"AppendBlob_appendBlockFromUrlExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobAppendBlockFromUrlExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const AppendBlobSealHeaders = {\n serializedName: \"AppendBlob_sealHeaders\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobSealHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isSealed: {\n serializedName: \"x-ms-blob-sealed\",\n xmlName: \"x-ms-blob-sealed\",\n type: {\n name: \"Boolean\"\n }\n }\n }\n }\n};\nexport const AppendBlobSealExceptionHeaders = {\n serializedName: \"AppendBlob_sealExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobSealExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobUploadHeaders = {\n serializedName: \"BlockBlob_uploadHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobUploadHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobUploadExceptionHeaders = {\n serializedName: \"BlockBlob_uploadExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobUploadExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobPutBlobFromUrlHeaders = {\n serializedName: \"BlockBlob_putBlobFromUrlHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobPutBlobFromUrlHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobPutBlobFromUrlExceptionHeaders = {\n serializedName: \"BlockBlob_putBlobFromUrlExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobPutBlobFromUrlExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobStageBlockHeaders = {\n serializedName: \"BlockBlob_stageBlockHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobStageBlockHeaders\",\n modelProperties: {\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobStageBlockExceptionHeaders = {\n serializedName: \"BlockBlob_stageBlockExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobStageBlockExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobStageBlockFromURLHeaders = {\n serializedName: \"BlockBlob_stageBlockFromURLHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobStageBlockFromURLHeaders\",\n modelProperties: {\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobStageBlockFromURLExceptionHeaders = {\n serializedName: \"BlockBlob_stageBlockFromURLExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobStageBlockFromURLExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobCommitBlockListHeaders = {\n serializedName: \"BlockBlob_commitBlockListHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobCommitBlockListHeaders\",\n modelProperties: {\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n xmlName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n versionId: {\n serializedName: \"x-ms-version-id\",\n xmlName: \"x-ms-version-id\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n xmlName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionScope: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobCommitBlockListExceptionHeaders = {\n serializedName: \"BlockBlob_commitBlockListExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobCommitBlockListExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobGetBlockListHeaders = {\n serializedName: \"BlockBlob_getBlockListHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobGetBlockListHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n xmlName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n etag: {\n serializedName: \"etag\",\n xmlName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n contentType: {\n serializedName: \"content-type\",\n xmlName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n blobContentLength: {\n serializedName: \"x-ms-blob-content-length\",\n xmlName: \"x-ms-blob-content-length\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n xmlName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n xmlName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n xmlName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\nexport const BlockBlobGetBlockListExceptionHeaders = {\n serializedName: \"BlockBlob_getBlockListExceptionHeaders\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobGetBlockListExceptionHeaders\",\n modelProperties: {\n errorCode: {\n serializedName: \"x-ms-error-code\",\n xmlName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n","/*\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\n */\nimport { QueryCollectionFormat } from \"@azure/core-http\";\nimport { BlobServiceProperties as BlobServicePropertiesMapper, KeyInfo as KeyInfoMapper, QueryRequest as QueryRequestMapper, BlobTags as BlobTagsMapper, BlockLookupList as BlockLookupListMapper } from \"../models/mappers\";\nexport const contentType = {\n parameterPath: [\"options\", \"contentType\"],\n mapper: {\n defaultValue: \"application/xml\",\n isConstant: true,\n serializedName: \"Content-Type\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobServiceProperties = {\n parameterPath: \"blobServiceProperties\",\n mapper: BlobServicePropertiesMapper\n};\nexport const accept = {\n parameterPath: \"accept\",\n mapper: {\n defaultValue: \"application/xml\",\n isConstant: true,\n serializedName: \"Accept\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const url = {\n parameterPath: \"url\",\n mapper: {\n serializedName: \"url\",\n required: true,\n xmlName: \"url\",\n type: {\n name: \"String\"\n }\n },\n skipEncoding: true\n};\nexport const restype = {\n parameterPath: \"restype\",\n mapper: {\n defaultValue: \"service\",\n isConstant: true,\n serializedName: \"restype\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"properties\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const timeoutInSeconds = {\n parameterPath: [\"options\", \"timeoutInSeconds\"],\n mapper: {\n constraints: {\n InclusiveMinimum: 0\n },\n serializedName: \"timeout\",\n xmlName: \"timeout\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const version = {\n parameterPath: \"version\",\n mapper: {\n defaultValue: \"2023-11-03\",\n isConstant: true,\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const requestId = {\n parameterPath: [\"options\", \"requestId\"],\n mapper: {\n serializedName: \"x-ms-client-request-id\",\n xmlName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const accept1 = {\n parameterPath: \"accept\",\n mapper: {\n defaultValue: \"application/xml\",\n isConstant: true,\n serializedName: \"Accept\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp1 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"stats\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp2 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"list\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const prefix = {\n parameterPath: [\"options\", \"prefix\"],\n mapper: {\n serializedName: \"prefix\",\n xmlName: \"prefix\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const marker = {\n parameterPath: [\"options\", \"marker\"],\n mapper: {\n serializedName: \"marker\",\n xmlName: \"marker\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const maxPageSize = {\n parameterPath: [\"options\", \"maxPageSize\"],\n mapper: {\n constraints: {\n InclusiveMinimum: 1\n },\n serializedName: \"maxresults\",\n xmlName: \"maxresults\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const include = {\n parameterPath: [\"options\", \"include\"],\n mapper: {\n serializedName: \"include\",\n xmlName: \"include\",\n xmlElementName: \"ListContainersIncludeType\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Enum\",\n allowedValues: [\"metadata\", \"deleted\", \"system\"]\n }\n }\n }\n },\n collectionFormat: QueryCollectionFormat.Csv\n};\nexport const keyInfo = {\n parameterPath: \"keyInfo\",\n mapper: KeyInfoMapper\n};\nexport const comp3 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"userdelegationkey\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const restype1 = {\n parameterPath: \"restype\",\n mapper: {\n defaultValue: \"account\",\n isConstant: true,\n serializedName: \"restype\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const body = {\n parameterPath: \"body\",\n mapper: {\n serializedName: \"body\",\n required: true,\n xmlName: \"body\",\n type: {\n name: \"Stream\"\n }\n }\n};\nexport const comp4 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"batch\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const contentLength = {\n parameterPath: \"contentLength\",\n mapper: {\n serializedName: \"Content-Length\",\n required: true,\n xmlName: \"Content-Length\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const multipartContentType = {\n parameterPath: \"multipartContentType\",\n mapper: {\n serializedName: \"Content-Type\",\n required: true,\n xmlName: \"Content-Type\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp5 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"blobs\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const where = {\n parameterPath: [\"options\", \"where\"],\n mapper: {\n serializedName: \"where\",\n xmlName: \"where\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const restype2 = {\n parameterPath: \"restype\",\n mapper: {\n defaultValue: \"container\",\n isConstant: true,\n serializedName: \"restype\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const metadata = {\n parameterPath: [\"options\", \"metadata\"],\n mapper: {\n serializedName: \"x-ms-meta\",\n xmlName: \"x-ms-meta\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n },\n headerCollectionPrefix: \"x-ms-meta-\"\n }\n};\nexport const access = {\n parameterPath: [\"options\", \"access\"],\n mapper: {\n serializedName: \"x-ms-blob-public-access\",\n xmlName: \"x-ms-blob-public-access\",\n type: {\n name: \"Enum\",\n allowedValues: [\"container\", \"blob\"]\n }\n }\n};\nexport const defaultEncryptionScope = {\n parameterPath: [\"options\", \"containerEncryptionScope\", \"defaultEncryptionScope\"],\n mapper: {\n serializedName: \"x-ms-default-encryption-scope\",\n xmlName: \"x-ms-default-encryption-scope\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const preventEncryptionScopeOverride = {\n parameterPath: [\"options\", \"containerEncryptionScope\", \"preventEncryptionScopeOverride\"],\n mapper: {\n serializedName: \"x-ms-deny-encryption-scope-override\",\n xmlName: \"x-ms-deny-encryption-scope-override\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const leaseId = {\n parameterPath: [\"options\", \"leaseAccessConditions\", \"leaseId\"],\n mapper: {\n serializedName: \"x-ms-lease-id\",\n xmlName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const ifModifiedSince = {\n parameterPath: [\"options\", \"modifiedAccessConditions\", \"ifModifiedSince\"],\n mapper: {\n serializedName: \"If-Modified-Since\",\n xmlName: \"If-Modified-Since\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n};\nexport const ifUnmodifiedSince = {\n parameterPath: [\"options\", \"modifiedAccessConditions\", \"ifUnmodifiedSince\"],\n mapper: {\n serializedName: \"If-Unmodified-Since\",\n xmlName: \"If-Unmodified-Since\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n};\nexport const comp6 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"metadata\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp7 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"acl\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const containerAcl = {\n parameterPath: [\"options\", \"containerAcl\"],\n mapper: {\n serializedName: \"containerAcl\",\n xmlName: \"SignedIdentifiers\",\n xmlIsWrapped: true,\n xmlElementName: \"SignedIdentifier\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"SignedIdentifier\"\n }\n }\n }\n }\n};\nexport const comp8 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"undelete\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const deletedContainerName = {\n parameterPath: [\"options\", \"deletedContainerName\"],\n mapper: {\n serializedName: \"x-ms-deleted-container-name\",\n xmlName: \"x-ms-deleted-container-name\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const deletedContainerVersion = {\n parameterPath: [\"options\", \"deletedContainerVersion\"],\n mapper: {\n serializedName: \"x-ms-deleted-container-version\",\n xmlName: \"x-ms-deleted-container-version\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp9 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"rename\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceContainerName = {\n parameterPath: \"sourceContainerName\",\n mapper: {\n serializedName: \"x-ms-source-container-name\",\n required: true,\n xmlName: \"x-ms-source-container-name\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceLeaseId = {\n parameterPath: [\"options\", \"sourceLeaseId\"],\n mapper: {\n serializedName: \"x-ms-source-lease-id\",\n xmlName: \"x-ms-source-lease-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp10 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"lease\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const action = {\n parameterPath: \"action\",\n mapper: {\n defaultValue: \"acquire\",\n isConstant: true,\n serializedName: \"x-ms-lease-action\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const duration = {\n parameterPath: [\"options\", \"duration\"],\n mapper: {\n serializedName: \"x-ms-lease-duration\",\n xmlName: \"x-ms-lease-duration\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const proposedLeaseId = {\n parameterPath: [\"options\", \"proposedLeaseId\"],\n mapper: {\n serializedName: \"x-ms-proposed-lease-id\",\n xmlName: \"x-ms-proposed-lease-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const action1 = {\n parameterPath: \"action\",\n mapper: {\n defaultValue: \"release\",\n isConstant: true,\n serializedName: \"x-ms-lease-action\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const leaseId1 = {\n parameterPath: \"leaseId\",\n mapper: {\n serializedName: \"x-ms-lease-id\",\n required: true,\n xmlName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const action2 = {\n parameterPath: \"action\",\n mapper: {\n defaultValue: \"renew\",\n isConstant: true,\n serializedName: \"x-ms-lease-action\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const action3 = {\n parameterPath: \"action\",\n mapper: {\n defaultValue: \"break\",\n isConstant: true,\n serializedName: \"x-ms-lease-action\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const breakPeriod = {\n parameterPath: [\"options\", \"breakPeriod\"],\n mapper: {\n serializedName: \"x-ms-lease-break-period\",\n xmlName: \"x-ms-lease-break-period\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const action4 = {\n parameterPath: \"action\",\n mapper: {\n defaultValue: \"change\",\n isConstant: true,\n serializedName: \"x-ms-lease-action\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const proposedLeaseId1 = {\n parameterPath: \"proposedLeaseId\",\n mapper: {\n serializedName: \"x-ms-proposed-lease-id\",\n required: true,\n xmlName: \"x-ms-proposed-lease-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const include1 = {\n parameterPath: [\"options\", \"include\"],\n mapper: {\n serializedName: \"include\",\n xmlName: \"include\",\n xmlElementName: \"ListBlobsIncludeItem\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Enum\",\n allowedValues: [\"copy\", \"deleted\", \"metadata\", \"snapshots\", \"uncommittedblobs\", \"versions\", \"tags\", \"immutabilitypolicy\", \"legalhold\", \"deletedwithversions\"]\n }\n }\n }\n },\n collectionFormat: QueryCollectionFormat.Csv\n};\nexport const delimiter = {\n parameterPath: \"delimiter\",\n mapper: {\n serializedName: \"delimiter\",\n required: true,\n xmlName: \"delimiter\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const snapshot = {\n parameterPath: [\"options\", \"snapshot\"],\n mapper: {\n serializedName: \"snapshot\",\n xmlName: \"snapshot\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const versionId = {\n parameterPath: [\"options\", \"versionId\"],\n mapper: {\n serializedName: \"versionid\",\n xmlName: \"versionid\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const range = {\n parameterPath: [\"options\", \"range\"],\n mapper: {\n serializedName: \"x-ms-range\",\n xmlName: \"x-ms-range\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const rangeGetContentMD5 = {\n parameterPath: [\"options\", \"rangeGetContentMD5\"],\n mapper: {\n serializedName: \"x-ms-range-get-content-md5\",\n xmlName: \"x-ms-range-get-content-md5\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const rangeGetContentCRC64 = {\n parameterPath: [\"options\", \"rangeGetContentCRC64\"],\n mapper: {\n serializedName: \"x-ms-range-get-content-crc64\",\n xmlName: \"x-ms-range-get-content-crc64\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const encryptionKey = {\n parameterPath: [\"options\", \"cpkInfo\", \"encryptionKey\"],\n mapper: {\n serializedName: \"x-ms-encryption-key\",\n xmlName: \"x-ms-encryption-key\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const encryptionKeySha256 = {\n parameterPath: [\"options\", \"cpkInfo\", \"encryptionKeySha256\"],\n mapper: {\n serializedName: \"x-ms-encryption-key-sha256\",\n xmlName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const encryptionAlgorithm = {\n parameterPath: [\"options\", \"cpkInfo\", \"encryptionAlgorithm\"],\n mapper: {\n serializedName: \"x-ms-encryption-algorithm\",\n xmlName: \"x-ms-encryption-algorithm\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const ifMatch = {\n parameterPath: [\"options\", \"modifiedAccessConditions\", \"ifMatch\"],\n mapper: {\n serializedName: \"If-Match\",\n xmlName: \"If-Match\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const ifNoneMatch = {\n parameterPath: [\"options\", \"modifiedAccessConditions\", \"ifNoneMatch\"],\n mapper: {\n serializedName: \"If-None-Match\",\n xmlName: \"If-None-Match\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const ifTags = {\n parameterPath: [\"options\", \"modifiedAccessConditions\", \"ifTags\"],\n mapper: {\n serializedName: \"x-ms-if-tags\",\n xmlName: \"x-ms-if-tags\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const deleteSnapshots = {\n parameterPath: [\"options\", \"deleteSnapshots\"],\n mapper: {\n serializedName: \"x-ms-delete-snapshots\",\n xmlName: \"x-ms-delete-snapshots\",\n type: {\n name: \"Enum\",\n allowedValues: [\"include\", \"only\"]\n }\n }\n};\nexport const blobDeleteType = {\n parameterPath: [\"options\", \"blobDeleteType\"],\n mapper: {\n serializedName: \"deletetype\",\n xmlName: \"deletetype\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp11 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"expiry\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const expiryOptions = {\n parameterPath: \"expiryOptions\",\n mapper: {\n serializedName: \"x-ms-expiry-option\",\n required: true,\n xmlName: \"x-ms-expiry-option\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const expiresOn = {\n parameterPath: [\"options\", \"expiresOn\"],\n mapper: {\n serializedName: \"x-ms-expiry-time\",\n xmlName: \"x-ms-expiry-time\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobCacheControl = {\n parameterPath: [\"options\", \"blobHttpHeaders\", \"blobCacheControl\"],\n mapper: {\n serializedName: \"x-ms-blob-cache-control\",\n xmlName: \"x-ms-blob-cache-control\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobContentType = {\n parameterPath: [\"options\", \"blobHttpHeaders\", \"blobContentType\"],\n mapper: {\n serializedName: \"x-ms-blob-content-type\",\n xmlName: \"x-ms-blob-content-type\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobContentMD5 = {\n parameterPath: [\"options\", \"blobHttpHeaders\", \"blobContentMD5\"],\n mapper: {\n serializedName: \"x-ms-blob-content-md5\",\n xmlName: \"x-ms-blob-content-md5\",\n type: {\n name: \"ByteArray\"\n }\n }\n};\nexport const blobContentEncoding = {\n parameterPath: [\"options\", \"blobHttpHeaders\", \"blobContentEncoding\"],\n mapper: {\n serializedName: \"x-ms-blob-content-encoding\",\n xmlName: \"x-ms-blob-content-encoding\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobContentLanguage = {\n parameterPath: [\"options\", \"blobHttpHeaders\", \"blobContentLanguage\"],\n mapper: {\n serializedName: \"x-ms-blob-content-language\",\n xmlName: \"x-ms-blob-content-language\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobContentDisposition = {\n parameterPath: [\"options\", \"blobHttpHeaders\", \"blobContentDisposition\"],\n mapper: {\n serializedName: \"x-ms-blob-content-disposition\",\n xmlName: \"x-ms-blob-content-disposition\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp12 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"immutabilityPolicies\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const immutabilityPolicyExpiry = {\n parameterPath: [\"options\", \"immutabilityPolicyExpiry\"],\n mapper: {\n serializedName: \"x-ms-immutability-policy-until-date\",\n xmlName: \"x-ms-immutability-policy-until-date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n};\nexport const immutabilityPolicyMode = {\n parameterPath: [\"options\", \"immutabilityPolicyMode\"],\n mapper: {\n serializedName: \"x-ms-immutability-policy-mode\",\n xmlName: \"x-ms-immutability-policy-mode\",\n type: {\n name: \"Enum\",\n allowedValues: [\"Mutable\", \"Unlocked\", \"Locked\"]\n }\n }\n};\nexport const comp13 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"legalhold\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const legalHold = {\n parameterPath: \"legalHold\",\n mapper: {\n serializedName: \"x-ms-legal-hold\",\n required: true,\n xmlName: \"x-ms-legal-hold\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const encryptionScope = {\n parameterPath: [\"options\", \"encryptionScope\"],\n mapper: {\n serializedName: \"x-ms-encryption-scope\",\n xmlName: \"x-ms-encryption-scope\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp14 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"snapshot\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const tier = {\n parameterPath: [\"options\", \"tier\"],\n mapper: {\n serializedName: \"x-ms-access-tier\",\n xmlName: \"x-ms-access-tier\",\n type: {\n name: \"Enum\",\n allowedValues: [\"P4\", \"P6\", \"P10\", \"P15\", \"P20\", \"P30\", \"P40\", \"P50\", \"P60\", \"P70\", \"P80\", \"Hot\", \"Cool\", \"Archive\", \"Cold\"]\n }\n }\n};\nexport const rehydratePriority = {\n parameterPath: [\"options\", \"rehydratePriority\"],\n mapper: {\n serializedName: \"x-ms-rehydrate-priority\",\n xmlName: \"x-ms-rehydrate-priority\",\n type: {\n name: \"Enum\",\n allowedValues: [\"High\", \"Standard\"]\n }\n }\n};\nexport const sourceIfModifiedSince = {\n parameterPath: [\"options\", \"sourceModifiedAccessConditions\", \"sourceIfModifiedSince\"],\n mapper: {\n serializedName: \"x-ms-source-if-modified-since\",\n xmlName: \"x-ms-source-if-modified-since\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n};\nexport const sourceIfUnmodifiedSince = {\n parameterPath: [\"options\", \"sourceModifiedAccessConditions\", \"sourceIfUnmodifiedSince\"],\n mapper: {\n serializedName: \"x-ms-source-if-unmodified-since\",\n xmlName: \"x-ms-source-if-unmodified-since\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n};\nexport const sourceIfMatch = {\n parameterPath: [\"options\", \"sourceModifiedAccessConditions\", \"sourceIfMatch\"],\n mapper: {\n serializedName: \"x-ms-source-if-match\",\n xmlName: \"x-ms-source-if-match\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceIfNoneMatch = {\n parameterPath: [\"options\", \"sourceModifiedAccessConditions\", \"sourceIfNoneMatch\"],\n mapper: {\n serializedName: \"x-ms-source-if-none-match\",\n xmlName: \"x-ms-source-if-none-match\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceIfTags = {\n parameterPath: [\"options\", \"sourceModifiedAccessConditions\", \"sourceIfTags\"],\n mapper: {\n serializedName: \"x-ms-source-if-tags\",\n xmlName: \"x-ms-source-if-tags\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const copySource = {\n parameterPath: \"copySource\",\n mapper: {\n serializedName: \"x-ms-copy-source\",\n required: true,\n xmlName: \"x-ms-copy-source\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobTagsString = {\n parameterPath: [\"options\", \"blobTagsString\"],\n mapper: {\n serializedName: \"x-ms-tags\",\n xmlName: \"x-ms-tags\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sealBlob = {\n parameterPath: [\"options\", \"sealBlob\"],\n mapper: {\n serializedName: \"x-ms-seal-blob\",\n xmlName: \"x-ms-seal-blob\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const legalHold1 = {\n parameterPath: [\"options\", \"legalHold\"],\n mapper: {\n serializedName: \"x-ms-legal-hold\",\n xmlName: \"x-ms-legal-hold\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const xMsRequiresSync = {\n parameterPath: \"xMsRequiresSync\",\n mapper: {\n defaultValue: \"true\",\n isConstant: true,\n serializedName: \"x-ms-requires-sync\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceContentMD5 = {\n parameterPath: [\"options\", \"sourceContentMD5\"],\n mapper: {\n serializedName: \"x-ms-source-content-md5\",\n xmlName: \"x-ms-source-content-md5\",\n type: {\n name: \"ByteArray\"\n }\n }\n};\nexport const copySourceAuthorization = {\n parameterPath: [\"options\", \"copySourceAuthorization\"],\n mapper: {\n serializedName: \"x-ms-copy-source-authorization\",\n xmlName: \"x-ms-copy-source-authorization\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const copySourceTags = {\n parameterPath: [\"options\", \"copySourceTags\"],\n mapper: {\n serializedName: \"x-ms-copy-source-tag-option\",\n xmlName: \"x-ms-copy-source-tag-option\",\n type: {\n name: \"Enum\",\n allowedValues: [\"REPLACE\", \"COPY\"]\n }\n }\n};\nexport const comp15 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"copy\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const copyActionAbortConstant = {\n parameterPath: \"copyActionAbortConstant\",\n mapper: {\n defaultValue: \"abort\",\n isConstant: true,\n serializedName: \"x-ms-copy-action\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const copyId = {\n parameterPath: \"copyId\",\n mapper: {\n serializedName: \"copyid\",\n required: true,\n xmlName: \"copyid\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp16 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"tier\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const tier1 = {\n parameterPath: \"tier\",\n mapper: {\n serializedName: \"x-ms-access-tier\",\n required: true,\n xmlName: \"x-ms-access-tier\",\n type: {\n name: \"Enum\",\n allowedValues: [\"P4\", \"P6\", \"P10\", \"P15\", \"P20\", \"P30\", \"P40\", \"P50\", \"P60\", \"P70\", \"P80\", \"Hot\", \"Cool\", \"Archive\", \"Cold\"]\n }\n }\n};\nexport const queryRequest = {\n parameterPath: [\"options\", \"queryRequest\"],\n mapper: QueryRequestMapper\n};\nexport const comp17 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"query\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp18 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"tags\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const tags = {\n parameterPath: [\"options\", \"tags\"],\n mapper: BlobTagsMapper\n};\nexport const transactionalContentMD5 = {\n parameterPath: [\"options\", \"transactionalContentMD5\"],\n mapper: {\n serializedName: \"Content-MD5\",\n xmlName: \"Content-MD5\",\n type: {\n name: \"ByteArray\"\n }\n }\n};\nexport const transactionalContentCrc64 = {\n parameterPath: [\"options\", \"transactionalContentCrc64\"],\n mapper: {\n serializedName: \"x-ms-content-crc64\",\n xmlName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n }\n};\nexport const blobType = {\n parameterPath: \"blobType\",\n mapper: {\n defaultValue: \"PageBlob\",\n isConstant: true,\n serializedName: \"x-ms-blob-type\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobContentLength = {\n parameterPath: \"blobContentLength\",\n mapper: {\n serializedName: \"x-ms-blob-content-length\",\n required: true,\n xmlName: \"x-ms-blob-content-length\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const blobSequenceNumber = {\n parameterPath: [\"options\", \"blobSequenceNumber\"],\n mapper: {\n serializedName: \"x-ms-blob-sequence-number\",\n xmlName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const contentType1 = {\n parameterPath: [\"options\", \"contentType\"],\n mapper: {\n defaultValue: \"application/octet-stream\",\n isConstant: true,\n serializedName: \"Content-Type\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const body1 = {\n parameterPath: \"body\",\n mapper: {\n serializedName: \"body\",\n required: true,\n xmlName: \"body\",\n type: {\n name: \"Stream\"\n }\n }\n};\nexport const accept2 = {\n parameterPath: \"accept\",\n mapper: {\n defaultValue: \"application/xml\",\n isConstant: true,\n serializedName: \"Accept\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp19 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"page\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const pageWrite = {\n parameterPath: \"pageWrite\",\n mapper: {\n defaultValue: \"update\",\n isConstant: true,\n serializedName: \"x-ms-page-write\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const ifSequenceNumberLessThanOrEqualTo = {\n parameterPath: [\"options\", \"sequenceNumberAccessConditions\", \"ifSequenceNumberLessThanOrEqualTo\"],\n mapper: {\n serializedName: \"x-ms-if-sequence-number-le\",\n xmlName: \"x-ms-if-sequence-number-le\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const ifSequenceNumberLessThan = {\n parameterPath: [\"options\", \"sequenceNumberAccessConditions\", \"ifSequenceNumberLessThan\"],\n mapper: {\n serializedName: \"x-ms-if-sequence-number-lt\",\n xmlName: \"x-ms-if-sequence-number-lt\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const ifSequenceNumberEqualTo = {\n parameterPath: [\"options\", \"sequenceNumberAccessConditions\", \"ifSequenceNumberEqualTo\"],\n mapper: {\n serializedName: \"x-ms-if-sequence-number-eq\",\n xmlName: \"x-ms-if-sequence-number-eq\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const pageWrite1 = {\n parameterPath: \"pageWrite\",\n mapper: {\n defaultValue: \"clear\",\n isConstant: true,\n serializedName: \"x-ms-page-write\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceUrl = {\n parameterPath: \"sourceUrl\",\n mapper: {\n serializedName: \"x-ms-copy-source\",\n required: true,\n xmlName: \"x-ms-copy-source\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceRange = {\n parameterPath: \"sourceRange\",\n mapper: {\n serializedName: \"x-ms-source-range\",\n required: true,\n xmlName: \"x-ms-source-range\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceContentCrc64 = {\n parameterPath: [\"options\", \"sourceContentCrc64\"],\n mapper: {\n serializedName: \"x-ms-source-content-crc64\",\n xmlName: \"x-ms-source-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n }\n};\nexport const range1 = {\n parameterPath: \"range\",\n mapper: {\n serializedName: \"x-ms-range\",\n required: true,\n xmlName: \"x-ms-range\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp20 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"pagelist\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const prevsnapshot = {\n parameterPath: [\"options\", \"prevsnapshot\"],\n mapper: {\n serializedName: \"prevsnapshot\",\n xmlName: \"prevsnapshot\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const prevSnapshotUrl = {\n parameterPath: [\"options\", \"prevSnapshotUrl\"],\n mapper: {\n serializedName: \"x-ms-previous-snapshot-url\",\n xmlName: \"x-ms-previous-snapshot-url\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sequenceNumberAction = {\n parameterPath: \"sequenceNumberAction\",\n mapper: {\n serializedName: \"x-ms-sequence-number-action\",\n required: true,\n xmlName: \"x-ms-sequence-number-action\",\n type: {\n name: \"Enum\",\n allowedValues: [\"max\", \"update\", \"increment\"]\n }\n }\n};\nexport const comp21 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"incrementalcopy\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobType1 = {\n parameterPath: \"blobType\",\n mapper: {\n defaultValue: \"AppendBlob\",\n isConstant: true,\n serializedName: \"x-ms-blob-type\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp22 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"appendblock\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const maxSize = {\n parameterPath: [\"options\", \"appendPositionAccessConditions\", \"maxSize\"],\n mapper: {\n serializedName: \"x-ms-blob-condition-maxsize\",\n xmlName: \"x-ms-blob-condition-maxsize\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const appendPosition = {\n parameterPath: [\"options\", \"appendPositionAccessConditions\", \"appendPosition\"],\n mapper: {\n serializedName: \"x-ms-blob-condition-appendpos\",\n xmlName: \"x-ms-blob-condition-appendpos\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const sourceRange1 = {\n parameterPath: [\"options\", \"sourceRange\"],\n mapper: {\n serializedName: \"x-ms-source-range\",\n xmlName: \"x-ms-source-range\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp23 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"seal\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobType2 = {\n parameterPath: \"blobType\",\n mapper: {\n defaultValue: \"BlockBlob\",\n isConstant: true,\n serializedName: \"x-ms-blob-type\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const copySourceBlobProperties = {\n parameterPath: [\"options\", \"copySourceBlobProperties\"],\n mapper: {\n serializedName: \"x-ms-copy-source-blob-properties\",\n xmlName: \"x-ms-copy-source-blob-properties\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const comp24 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"block\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blockId = {\n parameterPath: \"blockId\",\n mapper: {\n serializedName: \"blockid\",\n required: true,\n xmlName: \"blockid\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blocks = {\n parameterPath: \"blocks\",\n mapper: BlockLookupListMapper\n};\nexport const comp25 = {\n parameterPath: \"comp\",\n mapper: {\n defaultValue: \"blocklist\",\n isConstant: true,\n serializedName: \"comp\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const listType = {\n parameterPath: \"listType\",\n mapper: {\n defaultValue: \"committed\",\n serializedName: \"blocklisttype\",\n required: true,\n xmlName: \"blocklisttype\",\n type: {\n name: \"Enum\",\n allowedValues: [\"committed\", \"uncommitted\", \"all\"]\n }\n }\n};\n","/*\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\n */\nimport * as coreHttp from \"@azure/core-http\";\nimport * as Mappers from \"../models/mappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Service. */\nexport class Service {\n /**\n * Initialize a new instance of the class Service class.\n * @param client Reference to the service client\n */\n constructor(client) {\n this.client = client;\n }\n /**\n * Sets properties for a storage account's Blob service endpoint, including properties for Storage\n * Analytics and CORS (Cross-Origin Resource Sharing) rules\n * @param blobServiceProperties The StorageService properties.\n * @param options The options parameters.\n */\n setProperties(blobServiceProperties, options) {\n const operationArguments = {\n blobServiceProperties,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, setPropertiesOperationSpec);\n }\n /**\n * gets the properties of a storage account's Blob service, including properties for Storage Analytics\n * and CORS (Cross-Origin Resource Sharing) rules.\n * @param options The options parameters.\n */\n getProperties(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getPropertiesOperationSpec);\n }\n /**\n * Retrieves statistics related to replication for the Blob service. It is only available on the\n * secondary location endpoint when read-access geo-redundant replication is enabled for the storage\n * account.\n * @param options The options parameters.\n */\n getStatistics(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getStatisticsOperationSpec);\n }\n /**\n * The List Containers Segment operation returns a list of the containers under the specified account\n * @param options The options parameters.\n */\n listContainersSegment(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, listContainersSegmentOperationSpec);\n }\n /**\n * Retrieves a user delegation key for the Blob service. This is only a valid operation when using\n * bearer token authentication.\n * @param keyInfo Key information\n * @param options The options parameters.\n */\n getUserDelegationKey(keyInfo, options) {\n const operationArguments = {\n keyInfo,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getUserDelegationKeyOperationSpec);\n }\n /**\n * Returns the sku name and account kind\n * @param options The options parameters.\n */\n getAccountInfo(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getAccountInfoOperationSpec);\n }\n /**\n * The Batch operation allows multiple API calls to be embedded into a single HTTP request.\n * @param contentLength The length of the request.\n * @param multipartContentType Required. The value of this header must be multipart/mixed with a batch\n * boundary. Example header value: multipart/mixed; boundary=batch_\n * @param body Initial data\n * @param options The options parameters.\n */\n submitBatch(contentLength, multipartContentType, body, options) {\n const operationArguments = {\n contentLength,\n multipartContentType,\n body,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, submitBatchOperationSpec);\n }\n /**\n * The Filter Blobs operation enables callers to list blobs across all containers whose tags match a\n * given search expression. Filter blobs searches across all containers within a storage account but\n * can be scoped within the expression to a single container.\n * @param options The options parameters.\n */\n filterBlobs(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, filterBlobsOperationSpec);\n }\n}\n// Operation Specifications\nconst xmlSerializer = new coreHttp.Serializer(Mappers, /* isXml */true);\nconst setPropertiesOperationSpec = {\n path: \"/\",\n httpMethod: \"PUT\",\n responses: {\n 202: {\n headersMapper: Mappers.ServiceSetPropertiesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ServiceSetPropertiesExceptionHeaders\n }\n },\n requestBody: Parameters.blobServiceProperties,\n queryParameters: [Parameters.restype, Parameters.comp, Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.contentType, Parameters.accept, Parameters.version, Parameters.requestId],\n isXML: true,\n contentType: \"application/xml; charset=utf-8\",\n mediaType: \"xml\",\n serializer: xmlSerializer\n};\nconst getPropertiesOperationSpec = {\n path: \"/\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.BlobServiceProperties,\n headersMapper: Mappers.ServiceGetPropertiesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ServiceGetPropertiesExceptionHeaders\n }\n },\n queryParameters: [Parameters.restype, Parameters.comp, Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst getStatisticsOperationSpec = {\n path: \"/\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.BlobServiceStatistics,\n headersMapper: Mappers.ServiceGetStatisticsHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ServiceGetStatisticsExceptionHeaders\n }\n },\n queryParameters: [Parameters.restype, Parameters.timeoutInSeconds, Parameters.comp1],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst listContainersSegmentOperationSpec = {\n path: \"/\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.ListContainersSegmentResponse,\n headersMapper: Mappers.ServiceListContainersSegmentHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ServiceListContainersSegmentExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp2, Parameters.prefix, Parameters.marker, Parameters.maxPageSize, Parameters.include],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst getUserDelegationKeyOperationSpec = {\n path: \"/\",\n httpMethod: \"POST\",\n responses: {\n 200: {\n bodyMapper: Mappers.UserDelegationKey,\n headersMapper: Mappers.ServiceGetUserDelegationKeyHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ServiceGetUserDelegationKeyExceptionHeaders\n }\n },\n requestBody: Parameters.keyInfo,\n queryParameters: [Parameters.restype, Parameters.timeoutInSeconds, Parameters.comp3],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.contentType, Parameters.accept, Parameters.version, Parameters.requestId],\n isXML: true,\n contentType: \"application/xml; charset=utf-8\",\n mediaType: \"xml\",\n serializer: xmlSerializer\n};\nconst getAccountInfoOperationSpec = {\n path: \"/\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n headersMapper: Mappers.ServiceGetAccountInfoHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ServiceGetAccountInfoExceptionHeaders\n }\n },\n queryParameters: [Parameters.comp, Parameters.restype1],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst submitBatchOperationSpec = {\n path: \"/\",\n httpMethod: \"POST\",\n responses: {\n 202: {\n bodyMapper: {\n type: {\n name: \"Stream\"\n },\n serializedName: \"parsedResponse\"\n },\n headersMapper: Mappers.ServiceSubmitBatchHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ServiceSubmitBatchExceptionHeaders\n }\n },\n requestBody: Parameters.body,\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp4],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.contentType, Parameters.accept, Parameters.version, Parameters.requestId, Parameters.contentLength, Parameters.multipartContentType],\n isXML: true,\n contentType: \"application/xml; charset=utf-8\",\n mediaType: \"xml\",\n serializer: xmlSerializer\n};\nconst filterBlobsOperationSpec = {\n path: \"/\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.FilterBlobSegment,\n headersMapper: Mappers.ServiceFilterBlobsHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ServiceFilterBlobsExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.marker, Parameters.maxPageSize, Parameters.comp5, Parameters.where],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\n","/*\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\n */\nimport * as coreHttp from \"@azure/core-http\";\nimport * as Mappers from \"../models/mappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Container. */\nexport class Container {\n /**\n * Initialize a new instance of the class Container class.\n * @param client Reference to the service client\n */\n constructor(client) {\n this.client = client;\n }\n /**\n * creates a new container under the specified account. If the container with the same name already\n * exists, the operation fails\n * @param options The options parameters.\n */\n create(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, createOperationSpec);\n }\n /**\n * returns all user-defined metadata and system properties for the specified container. The data\n * returned does not include the container's list of blobs\n * @param options The options parameters.\n */\n getProperties(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getPropertiesOperationSpec);\n }\n /**\n * operation marks the specified container for deletion. The container and any blobs contained within\n * it are later deleted during garbage collection\n * @param options The options parameters.\n */\n delete(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, deleteOperationSpec);\n }\n /**\n * operation sets one or more user-defined name-value pairs for the specified container.\n * @param options The options parameters.\n */\n setMetadata(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, setMetadataOperationSpec);\n }\n /**\n * gets the permissions for the specified container. The permissions indicate whether container data\n * may be accessed publicly.\n * @param options The options parameters.\n */\n getAccessPolicy(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getAccessPolicyOperationSpec);\n }\n /**\n * sets the permissions for the specified container. The permissions indicate whether blobs in a\n * container may be accessed publicly.\n * @param options The options parameters.\n */\n setAccessPolicy(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, setAccessPolicyOperationSpec);\n }\n /**\n * Restores a previously-deleted container.\n * @param options The options parameters.\n */\n restore(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, restoreOperationSpec);\n }\n /**\n * Renames an existing container.\n * @param sourceContainerName Required. Specifies the name of the container to rename.\n * @param options The options parameters.\n */\n rename(sourceContainerName, options) {\n const operationArguments = {\n sourceContainerName,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, renameOperationSpec);\n }\n /**\n * The Batch operation allows multiple API calls to be embedded into a single HTTP request.\n * @param contentLength The length of the request.\n * @param multipartContentType Required. The value of this header must be multipart/mixed with a batch\n * boundary. Example header value: multipart/mixed; boundary=batch_\n * @param body Initial data\n * @param options The options parameters.\n */\n submitBatch(contentLength, multipartContentType, body, options) {\n const operationArguments = {\n contentLength,\n multipartContentType,\n body,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, submitBatchOperationSpec);\n }\n /**\n * The Filter Blobs operation enables callers to list blobs in a container whose tags match a given\n * search expression. Filter blobs searches within the given container.\n * @param options The options parameters.\n */\n filterBlobs(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, filterBlobsOperationSpec);\n }\n /**\n * [Update] establishes and manages a lock on a container for delete operations. The lock duration can\n * be 15 to 60 seconds, or can be infinite\n * @param options The options parameters.\n */\n acquireLease(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, acquireLeaseOperationSpec);\n }\n /**\n * [Update] establishes and manages a lock on a container for delete operations. The lock duration can\n * be 15 to 60 seconds, or can be infinite\n * @param leaseId Specifies the current lease ID on the resource.\n * @param options The options parameters.\n */\n releaseLease(leaseId, options) {\n const operationArguments = {\n leaseId,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, releaseLeaseOperationSpec);\n }\n /**\n * [Update] establishes and manages a lock on a container for delete operations. The lock duration can\n * be 15 to 60 seconds, or can be infinite\n * @param leaseId Specifies the current lease ID on the resource.\n * @param options The options parameters.\n */\n renewLease(leaseId, options) {\n const operationArguments = {\n leaseId,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, renewLeaseOperationSpec);\n }\n /**\n * [Update] establishes and manages a lock on a container for delete operations. The lock duration can\n * be 15 to 60 seconds, or can be infinite\n * @param options The options parameters.\n */\n breakLease(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, breakLeaseOperationSpec);\n }\n /**\n * [Update] establishes and manages a lock on a container for delete operations. The lock duration can\n * be 15 to 60 seconds, or can be infinite\n * @param leaseId Specifies the current lease ID on the resource.\n * @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400\n * (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor\n * (String) for a list of valid GUID string formats.\n * @param options The options parameters.\n */\n changeLease(leaseId, proposedLeaseId, options) {\n const operationArguments = {\n leaseId,\n proposedLeaseId,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, changeLeaseOperationSpec);\n }\n /**\n * [Update] The List Blobs operation returns a list of the blobs under the specified container\n * @param options The options parameters.\n */\n listBlobFlatSegment(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, listBlobFlatSegmentOperationSpec);\n }\n /**\n * [Update] The List Blobs operation returns a list of the blobs under the specified container\n * @param delimiter When the request includes this parameter, the operation returns a BlobPrefix\n * element in the response body that acts as a placeholder for all blobs whose names begin with the\n * same substring up to the appearance of the delimiter character. The delimiter may be a single\n * character or a string.\n * @param options The options parameters.\n */\n listBlobHierarchySegment(delimiter, options) {\n const operationArguments = {\n delimiter,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, listBlobHierarchySegmentOperationSpec);\n }\n /**\n * Returns the sku name and account kind\n * @param options The options parameters.\n */\n getAccountInfo(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getAccountInfoOperationSpec);\n }\n}\n// Operation Specifications\nconst xmlSerializer = new coreHttp.Serializer(Mappers, /* isXml */true);\nconst createOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.ContainerCreateHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerCreateExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.metadata, Parameters.access, Parameters.defaultEncryptionScope, Parameters.preventEncryptionScopeOverride],\n isXML: true,\n serializer: xmlSerializer\n};\nconst getPropertiesOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n headersMapper: Mappers.ContainerGetPropertiesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerGetPropertiesExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId],\n isXML: true,\n serializer: xmlSerializer\n};\nconst deleteOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"DELETE\",\n responses: {\n 202: {\n headersMapper: Mappers.ContainerDeleteHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerDeleteExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince],\n isXML: true,\n serializer: xmlSerializer\n};\nconst setMetadataOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.ContainerSetMetadataHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerSetMetadataExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2, Parameters.comp6],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.metadata, Parameters.leaseId, Parameters.ifModifiedSince],\n isXML: true,\n serializer: xmlSerializer\n};\nconst getAccessPolicyOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: {\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"SignedIdentifier\"\n }\n }\n },\n serializedName: \"SignedIdentifiers\",\n xmlName: \"SignedIdentifiers\",\n xmlIsWrapped: true,\n xmlElementName: \"SignedIdentifier\"\n },\n headersMapper: Mappers.ContainerGetAccessPolicyHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerGetAccessPolicyExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2, Parameters.comp7],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId],\n isXML: true,\n serializer: xmlSerializer\n};\nconst setAccessPolicyOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.ContainerSetAccessPolicyHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerSetAccessPolicyExceptionHeaders\n }\n },\n requestBody: Parameters.containerAcl,\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2, Parameters.comp7],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.contentType, Parameters.accept, Parameters.version, Parameters.requestId, Parameters.access, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince],\n isXML: true,\n contentType: \"application/xml; charset=utf-8\",\n mediaType: \"xml\",\n serializer: xmlSerializer\n};\nconst restoreOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.ContainerRestoreHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerRestoreExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2, Parameters.comp8],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.deletedContainerName, Parameters.deletedContainerVersion],\n isXML: true,\n serializer: xmlSerializer\n};\nconst renameOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.ContainerRenameHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerRenameExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2, Parameters.comp9],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.sourceContainerName, Parameters.sourceLeaseId],\n isXML: true,\n serializer: xmlSerializer\n};\nconst submitBatchOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"POST\",\n responses: {\n 202: {\n bodyMapper: {\n type: {\n name: \"Stream\"\n },\n serializedName: \"parsedResponse\"\n },\n headersMapper: Mappers.ContainerSubmitBatchHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerSubmitBatchExceptionHeaders\n }\n },\n requestBody: Parameters.body,\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp4, Parameters.restype2],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.contentType, Parameters.accept, Parameters.version, Parameters.requestId, Parameters.contentLength, Parameters.multipartContentType],\n isXML: true,\n contentType: \"application/xml; charset=utf-8\",\n mediaType: \"xml\",\n serializer: xmlSerializer\n};\nconst filterBlobsOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.FilterBlobSegment,\n headersMapper: Mappers.ContainerFilterBlobsHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerFilterBlobsExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.marker, Parameters.maxPageSize, Parameters.comp5, Parameters.where, Parameters.restype2],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst acquireLeaseOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.ContainerAcquireLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerAcquireLeaseExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2, Parameters.comp10],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.action, Parameters.duration, Parameters.proposedLeaseId],\n isXML: true,\n serializer: xmlSerializer\n};\nconst releaseLeaseOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.ContainerReleaseLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerReleaseLeaseExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2, Parameters.comp10],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.action1, Parameters.leaseId1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst renewLeaseOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.ContainerRenewLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerRenewLeaseExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2, Parameters.comp10],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.leaseId1, Parameters.action2],\n isXML: true,\n serializer: xmlSerializer\n};\nconst breakLeaseOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"PUT\",\n responses: {\n 202: {\n headersMapper: Mappers.ContainerBreakLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerBreakLeaseExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2, Parameters.comp10],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.action3, Parameters.breakPeriod],\n isXML: true,\n serializer: xmlSerializer\n};\nconst changeLeaseOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.ContainerChangeLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerChangeLeaseExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.restype2, Parameters.comp10],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.leaseId1, Parameters.action4, Parameters.proposedLeaseId1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst listBlobFlatSegmentOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.ListBlobsFlatSegmentResponse,\n headersMapper: Mappers.ContainerListBlobFlatSegmentHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerListBlobFlatSegmentExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp2, Parameters.prefix, Parameters.marker, Parameters.maxPageSize, Parameters.restype2, Parameters.include1],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst listBlobHierarchySegmentOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.ListBlobsHierarchySegmentResponse,\n headersMapper: Mappers.ContainerListBlobHierarchySegmentHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerListBlobHierarchySegmentExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp2, Parameters.prefix, Parameters.marker, Parameters.maxPageSize, Parameters.restype2, Parameters.include1, Parameters.delimiter],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst getAccountInfoOperationSpec = {\n path: \"/{containerName}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n headersMapper: Mappers.ContainerGetAccountInfoHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.ContainerGetAccountInfoExceptionHeaders\n }\n },\n queryParameters: [Parameters.comp, Parameters.restype1],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\n","/*\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\n */\nimport * as coreHttp from \"@azure/core-http\";\nimport * as Mappers from \"../models/mappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a Blob. */\nexport class Blob {\n /**\n * Initialize a new instance of the class Blob class.\n * @param client Reference to the service client\n */\n constructor(client) {\n this.client = client;\n }\n /**\n * The Download operation reads or downloads a blob from the system, including its metadata and\n * properties. You can also call Download to read a snapshot.\n * @param options The options parameters.\n */\n download(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, downloadOperationSpec);\n }\n /**\n * The Get Properties operation returns all user-defined metadata, standard HTTP properties, and system\n * properties for the blob. It does not return the content of the blob.\n * @param options The options parameters.\n */\n getProperties(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getPropertiesOperationSpec);\n }\n /**\n * If the storage account's soft delete feature is disabled then, when a blob is deleted, it is\n * permanently removed from the storage account. If the storage account's soft delete feature is\n * enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible\n * immediately. However, the blob service retains the blob or snapshot for the number of days specified\n * by the DeleteRetentionPolicy section of [Storage service properties]\n * (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's data is\n * permanently removed from the storage account. Note that you continue to be charged for the\n * soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and specify the\n * \"include=deleted\" query parameter to discover which blobs and snapshots have been soft deleted. You\n * can then use the Undelete Blob API to restore a soft-deleted blob. All other operations on a\n * soft-deleted blob or snapshot causes the service to return an HTTP status code of 404\n * (ResourceNotFound).\n * @param options The options parameters.\n */\n delete(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, deleteOperationSpec);\n }\n /**\n * Undelete a blob that was previously soft deleted\n * @param options The options parameters.\n */\n undelete(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, undeleteOperationSpec);\n }\n /**\n * Sets the time a blob will expire and be deleted.\n * @param expiryOptions Required. Indicates mode of the expiry time\n * @param options The options parameters.\n */\n setExpiry(expiryOptions, options) {\n const operationArguments = {\n expiryOptions,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, setExpiryOperationSpec);\n }\n /**\n * The Set HTTP Headers operation sets system properties on the blob\n * @param options The options parameters.\n */\n setHttpHeaders(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, setHttpHeadersOperationSpec);\n }\n /**\n * The Set Immutability Policy operation sets the immutability policy on the blob\n * @param options The options parameters.\n */\n setImmutabilityPolicy(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, setImmutabilityPolicyOperationSpec);\n }\n /**\n * The Delete Immutability Policy operation deletes the immutability policy on the blob\n * @param options The options parameters.\n */\n deleteImmutabilityPolicy(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, deleteImmutabilityPolicyOperationSpec);\n }\n /**\n * The Set Legal Hold operation sets a legal hold on the blob.\n * @param legalHold Specified if a legal hold should be set on the blob.\n * @param options The options parameters.\n */\n setLegalHold(legalHold, options) {\n const operationArguments = {\n legalHold,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, setLegalHoldOperationSpec);\n }\n /**\n * The Set Blob Metadata operation sets user-defined metadata for the specified blob as one or more\n * name-value pairs\n * @param options The options parameters.\n */\n setMetadata(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, setMetadataOperationSpec);\n }\n /**\n * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete\n * operations\n * @param options The options parameters.\n */\n acquireLease(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, acquireLeaseOperationSpec);\n }\n /**\n * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete\n * operations\n * @param leaseId Specifies the current lease ID on the resource.\n * @param options The options parameters.\n */\n releaseLease(leaseId, options) {\n const operationArguments = {\n leaseId,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, releaseLeaseOperationSpec);\n }\n /**\n * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete\n * operations\n * @param leaseId Specifies the current lease ID on the resource.\n * @param options The options parameters.\n */\n renewLease(leaseId, options) {\n const operationArguments = {\n leaseId,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, renewLeaseOperationSpec);\n }\n /**\n * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete\n * operations\n * @param leaseId Specifies the current lease ID on the resource.\n * @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400\n * (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor\n * (String) for a list of valid GUID string formats.\n * @param options The options parameters.\n */\n changeLease(leaseId, proposedLeaseId, options) {\n const operationArguments = {\n leaseId,\n proposedLeaseId,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, changeLeaseOperationSpec);\n }\n /**\n * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete\n * operations\n * @param options The options parameters.\n */\n breakLease(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, breakLeaseOperationSpec);\n }\n /**\n * The Create Snapshot operation creates a read-only snapshot of a blob\n * @param options The options parameters.\n */\n createSnapshot(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, createSnapshotOperationSpec);\n }\n /**\n * The Start Copy From URL operation copies a blob or an internet resource to a new blob.\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to\n * 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would\n * appear in a request URI. The source blob must either be public or must be authenticated via a shared\n * access signature.\n * @param options The options parameters.\n */\n startCopyFromURL(copySource, options) {\n const operationArguments = {\n copySource,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, startCopyFromURLOperationSpec);\n }\n /**\n * The Copy From URL operation copies a blob or an internet resource to a new blob. It will not return\n * a response until the copy is complete.\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to\n * 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would\n * appear in a request URI. The source blob must either be public or must be authenticated via a shared\n * access signature.\n * @param options The options parameters.\n */\n copyFromURL(copySource, options) {\n const operationArguments = {\n copySource,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, copyFromURLOperationSpec);\n }\n /**\n * The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a destination\n * blob with zero length and full metadata.\n * @param copyId The copy identifier provided in the x-ms-copy-id header of the original Copy Blob\n * operation.\n * @param options The options parameters.\n */\n abortCopyFromURL(copyId, options) {\n const operationArguments = {\n copyId,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, abortCopyFromURLOperationSpec);\n }\n /**\n * The Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a premium\n * storage account and on a block blob in a blob storage account (locally redundant storage only). A\n * premium page blob's tier determines the allowed size, IOPS, and bandwidth of the blob. A block\n * blob's tier determines Hot/Cool/Archive storage type. This operation does not update the blob's\n * ETag.\n * @param tier Indicates the tier to be set on the blob.\n * @param options The options parameters.\n */\n setTier(tier, options) {\n const operationArguments = {\n tier,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, setTierOperationSpec);\n }\n /**\n * Returns the sku name and account kind\n * @param options The options parameters.\n */\n getAccountInfo(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getAccountInfoOperationSpec);\n }\n /**\n * The Query operation enables users to select/project on blob data by providing simple query\n * expressions.\n * @param options The options parameters.\n */\n query(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, queryOperationSpec);\n }\n /**\n * The Get Tags operation enables users to get the tags associated with a blob.\n * @param options The options parameters.\n */\n getTags(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getTagsOperationSpec);\n }\n /**\n * The Set Tags operation enables users to set tags on a blob.\n * @param options The options parameters.\n */\n setTags(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, setTagsOperationSpec);\n }\n}\n// Operation Specifications\nconst xmlSerializer = new coreHttp.Serializer(Mappers, /* isXml */true);\nconst downloadOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: {\n type: {\n name: \"Stream\"\n },\n serializedName: \"parsedResponse\"\n },\n headersMapper: Mappers.BlobDownloadHeaders\n },\n 206: {\n bodyMapper: {\n type: {\n name: \"Stream\"\n },\n serializedName: \"parsedResponse\"\n },\n headersMapper: Mappers.BlobDownloadHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobDownloadExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.snapshot, Parameters.versionId],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.range, Parameters.rangeGetContentMD5, Parameters.rangeGetContentCRC64, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags],\n isXML: true,\n serializer: xmlSerializer\n};\nconst getPropertiesOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"HEAD\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobGetPropertiesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobGetPropertiesExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.snapshot, Parameters.versionId],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags],\n isXML: true,\n serializer: xmlSerializer\n};\nconst deleteOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"DELETE\",\n responses: {\n 202: {\n headersMapper: Mappers.BlobDeleteHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobDeleteExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.snapshot, Parameters.versionId, Parameters.blobDeleteType],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.deleteSnapshots],\n isXML: true,\n serializer: xmlSerializer\n};\nconst undeleteOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobUndeleteHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobUndeleteExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp8],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst setExpiryOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobSetExpiryHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobSetExpiryExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp11],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.expiryOptions, Parameters.expiresOn],\n isXML: true,\n serializer: xmlSerializer\n};\nconst setHttpHeadersOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobSetHttpHeadersHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobSetHttpHeadersExceptionHeaders\n }\n },\n queryParameters: [Parameters.comp, Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.blobCacheControl, Parameters.blobContentType, Parameters.blobContentMD5, Parameters.blobContentEncoding, Parameters.blobContentLanguage, Parameters.blobContentDisposition],\n isXML: true,\n serializer: xmlSerializer\n};\nconst setImmutabilityPolicyOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobSetImmutabilityPolicyHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobSetImmutabilityPolicyExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp12],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifUnmodifiedSince, Parameters.immutabilityPolicyExpiry, Parameters.immutabilityPolicyMode],\n isXML: true,\n serializer: xmlSerializer\n};\nconst deleteImmutabilityPolicyOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"DELETE\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobDeleteImmutabilityPolicyHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobDeleteImmutabilityPolicyExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp12],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst setLegalHoldOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobSetLegalHoldHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobSetLegalHoldExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp13],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.legalHold],\n isXML: true,\n serializer: xmlSerializer\n};\nconst setMetadataOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobSetMetadataHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobSetMetadataExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp6],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.metadata, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.encryptionScope],\n isXML: true,\n serializer: xmlSerializer\n};\nconst acquireLeaseOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.BlobAcquireLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobAcquireLeaseExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp10],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.action, Parameters.duration, Parameters.proposedLeaseId, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags],\n isXML: true,\n serializer: xmlSerializer\n};\nconst releaseLeaseOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobReleaseLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobReleaseLeaseExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp10],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.action1, Parameters.leaseId1, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags],\n isXML: true,\n serializer: xmlSerializer\n};\nconst renewLeaseOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobRenewLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobRenewLeaseExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp10],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.leaseId1, Parameters.action2, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags],\n isXML: true,\n serializer: xmlSerializer\n};\nconst changeLeaseOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobChangeLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobChangeLeaseExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp10],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.leaseId1, Parameters.action4, Parameters.proposedLeaseId1, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags],\n isXML: true,\n serializer: xmlSerializer\n};\nconst breakLeaseOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 202: {\n headersMapper: Mappers.BlobBreakLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobBreakLeaseExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp10],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.action3, Parameters.breakPeriod, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags],\n isXML: true,\n serializer: xmlSerializer\n};\nconst createSnapshotOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.BlobCreateSnapshotHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobCreateSnapshotExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp14],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.metadata, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.encryptionScope],\n isXML: true,\n serializer: xmlSerializer\n};\nconst startCopyFromURLOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 202: {\n headersMapper: Mappers.BlobStartCopyFromURLHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobStartCopyFromURLExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.metadata, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.immutabilityPolicyExpiry, Parameters.immutabilityPolicyMode, Parameters.tier, Parameters.rehydratePriority, Parameters.sourceIfModifiedSince, Parameters.sourceIfUnmodifiedSince, Parameters.sourceIfMatch, Parameters.sourceIfNoneMatch, Parameters.sourceIfTags, Parameters.copySource, Parameters.blobTagsString, Parameters.sealBlob, Parameters.legalHold1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst copyFromURLOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 202: {\n headersMapper: Mappers.BlobCopyFromURLHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobCopyFromURLExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.metadata, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.immutabilityPolicyExpiry, Parameters.immutabilityPolicyMode, Parameters.encryptionScope, Parameters.tier, Parameters.sourceIfModifiedSince, Parameters.sourceIfUnmodifiedSince, Parameters.sourceIfMatch, Parameters.sourceIfNoneMatch, Parameters.copySource, Parameters.blobTagsString, Parameters.legalHold1, Parameters.xMsRequiresSync, Parameters.sourceContentMD5, Parameters.copySourceAuthorization, Parameters.copySourceTags],\n isXML: true,\n serializer: xmlSerializer\n};\nconst abortCopyFromURLOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 204: {\n headersMapper: Mappers.BlobAbortCopyFromURLHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobAbortCopyFromURLExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp15, Parameters.copyId],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.copyActionAbortConstant],\n isXML: true,\n serializer: xmlSerializer\n};\nconst setTierOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobSetTierHeaders\n },\n 202: {\n headersMapper: Mappers.BlobSetTierHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobSetTierExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.snapshot, Parameters.versionId, Parameters.comp16],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifTags, Parameters.rehydratePriority, Parameters.tier1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst getAccountInfoOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n headersMapper: Mappers.BlobGetAccountInfoHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobGetAccountInfoExceptionHeaders\n }\n },\n queryParameters: [Parameters.comp, Parameters.restype1],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.accept1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst queryOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"POST\",\n responses: {\n 200: {\n bodyMapper: {\n type: {\n name: \"Stream\"\n },\n serializedName: \"parsedResponse\"\n },\n headersMapper: Mappers.BlobQueryHeaders\n },\n 206: {\n bodyMapper: {\n type: {\n name: \"Stream\"\n },\n serializedName: \"parsedResponse\"\n },\n headersMapper: Mappers.BlobQueryHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobQueryExceptionHeaders\n }\n },\n requestBody: Parameters.queryRequest,\n queryParameters: [Parameters.timeoutInSeconds, Parameters.snapshot, Parameters.comp17],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.contentType, Parameters.accept, Parameters.version, Parameters.requestId, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags],\n isXML: true,\n contentType: \"application/xml; charset=utf-8\",\n mediaType: \"xml\",\n serializer: xmlSerializer\n};\nconst getTagsOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.BlobTags,\n headersMapper: Mappers.BlobGetTagsHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobGetTagsExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.snapshot, Parameters.versionId, Parameters.comp18],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifTags],\n isXML: true,\n serializer: xmlSerializer\n};\nconst setTagsOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 204: {\n headersMapper: Mappers.BlobSetTagsHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlobSetTagsExceptionHeaders\n }\n },\n requestBody: Parameters.tags,\n queryParameters: [Parameters.timeoutInSeconds, Parameters.versionId, Parameters.comp18],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.contentType, Parameters.accept, Parameters.version, Parameters.requestId, Parameters.leaseId, Parameters.ifTags, Parameters.transactionalContentMD5, Parameters.transactionalContentCrc64],\n isXML: true,\n contentType: \"application/xml; charset=utf-8\",\n mediaType: \"xml\",\n serializer: xmlSerializer\n};\n","/*\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\n */\nimport * as coreHttp from \"@azure/core-http\";\nimport * as Mappers from \"../models/mappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a PageBlob. */\nexport class PageBlob {\n /**\n * Initialize a new instance of the class PageBlob class.\n * @param client Reference to the service client\n */\n constructor(client) {\n this.client = client;\n }\n /**\n * The Create operation creates a new page blob.\n * @param contentLength The length of the request.\n * @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB. The\n * page blob size must be aligned to a 512-byte boundary.\n * @param options The options parameters.\n */\n create(contentLength, blobContentLength, options) {\n const operationArguments = {\n contentLength,\n blobContentLength,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, createOperationSpec);\n }\n /**\n * The Upload Pages operation writes a range of pages to a page blob\n * @param contentLength The length of the request.\n * @param body Initial data\n * @param options The options parameters.\n */\n uploadPages(contentLength, body, options) {\n const operationArguments = {\n contentLength,\n body,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, uploadPagesOperationSpec);\n }\n /**\n * The Clear Pages operation clears a set of pages from a page blob\n * @param contentLength The length of the request.\n * @param options The options parameters.\n */\n clearPages(contentLength, options) {\n const operationArguments = {\n contentLength,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, clearPagesOperationSpec);\n }\n /**\n * The Upload Pages operation writes a range of pages to a page blob where the contents are read from a\n * URL\n * @param sourceUrl Specify a URL to the copy source.\n * @param sourceRange Bytes of source data in the specified range. The length of this range should\n * match the ContentLength header and x-ms-range/Range destination range header.\n * @param contentLength The length of the request.\n * @param range The range of bytes to which the source range would be written. The range should be 512\n * aligned and range-end is required.\n * @param options The options parameters.\n */\n uploadPagesFromURL(sourceUrl, sourceRange, contentLength, range, options) {\n const operationArguments = {\n sourceUrl,\n sourceRange,\n contentLength,\n range,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, uploadPagesFromURLOperationSpec);\n }\n /**\n * The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot of a\n * page blob\n * @param options The options parameters.\n */\n getPageRanges(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getPageRangesOperationSpec);\n }\n /**\n * The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that were\n * changed between target blob and previous snapshot.\n * @param options The options parameters.\n */\n getPageRangesDiff(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getPageRangesDiffOperationSpec);\n }\n /**\n * Resize the Blob\n * @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB. The\n * page blob size must be aligned to a 512-byte boundary.\n * @param options The options parameters.\n */\n resize(blobContentLength, options) {\n const operationArguments = {\n blobContentLength,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, resizeOperationSpec);\n }\n /**\n * Update the sequence number of the blob\n * @param sequenceNumberAction Required if the x-ms-blob-sequence-number header is set for the request.\n * This property applies to page blobs only. This property indicates how the service should modify the\n * blob's sequence number\n * @param options The options parameters.\n */\n updateSequenceNumber(sequenceNumberAction, options) {\n const operationArguments = {\n sequenceNumberAction,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, updateSequenceNumberOperationSpec);\n }\n /**\n * The Copy Incremental operation copies a snapshot of the source page blob to a destination page blob.\n * The snapshot is copied such that only the differential changes between the previously copied\n * snapshot are transferred to the destination. The copied snapshots are complete copies of the\n * original snapshot and can be read or copied from as usual. This API is supported since REST version\n * 2016-05-31.\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to\n * 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would\n * appear in a request URI. The source blob must either be public or must be authenticated via a shared\n * access signature.\n * @param options The options parameters.\n */\n copyIncremental(copySource, options) {\n const operationArguments = {\n copySource,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, copyIncrementalOperationSpec);\n }\n}\n// Operation Specifications\nconst xmlSerializer = new coreHttp.Serializer(Mappers, /* isXml */true);\nconst serializer = new coreHttp.Serializer(Mappers, /* isXml */false);\nconst createOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.PageBlobCreateHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.PageBlobCreateExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.contentLength, Parameters.metadata, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.blobCacheControl, Parameters.blobContentType, Parameters.blobContentMD5, Parameters.blobContentEncoding, Parameters.blobContentLanguage, Parameters.blobContentDisposition, Parameters.immutabilityPolicyExpiry, Parameters.immutabilityPolicyMode, Parameters.encryptionScope, Parameters.tier, Parameters.blobTagsString, Parameters.legalHold1, Parameters.blobType, Parameters.blobContentLength, Parameters.blobSequenceNumber],\n isXML: true,\n serializer: xmlSerializer\n};\nconst uploadPagesOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.PageBlobUploadPagesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.PageBlobUploadPagesExceptionHeaders\n }\n },\n requestBody: Parameters.body1,\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp19],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.contentLength, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.range, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.encryptionScope, Parameters.transactionalContentMD5, Parameters.transactionalContentCrc64, Parameters.contentType1, Parameters.accept2, Parameters.pageWrite, Parameters.ifSequenceNumberLessThanOrEqualTo, Parameters.ifSequenceNumberLessThan, Parameters.ifSequenceNumberEqualTo],\n mediaType: \"binary\",\n serializer\n};\nconst clearPagesOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.PageBlobClearPagesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.PageBlobClearPagesExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp19],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.contentLength, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.range, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.encryptionScope, Parameters.ifSequenceNumberLessThanOrEqualTo, Parameters.ifSequenceNumberLessThan, Parameters.ifSequenceNumberEqualTo, Parameters.pageWrite1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst uploadPagesFromURLOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.PageBlobUploadPagesFromURLHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.PageBlobUploadPagesFromURLExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp19],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.contentLength, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.encryptionScope, Parameters.sourceIfModifiedSince, Parameters.sourceIfUnmodifiedSince, Parameters.sourceIfMatch, Parameters.sourceIfNoneMatch, Parameters.sourceContentMD5, Parameters.copySourceAuthorization, Parameters.pageWrite, Parameters.ifSequenceNumberLessThanOrEqualTo, Parameters.ifSequenceNumberLessThan, Parameters.ifSequenceNumberEqualTo, Parameters.sourceUrl, Parameters.sourceRange, Parameters.sourceContentCrc64, Parameters.range1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst getPageRangesOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.PageList,\n headersMapper: Mappers.PageBlobGetPageRangesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.PageBlobGetPageRangesExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.marker, Parameters.maxPageSize, Parameters.snapshot, Parameters.comp20],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.range, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags],\n isXML: true,\n serializer: xmlSerializer\n};\nconst getPageRangesDiffOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.PageList,\n headersMapper: Mappers.PageBlobGetPageRangesDiffHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.PageBlobGetPageRangesDiffExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.marker, Parameters.maxPageSize, Parameters.snapshot, Parameters.comp20, Parameters.prevsnapshot],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.range, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.prevSnapshotUrl],\n isXML: true,\n serializer: xmlSerializer\n};\nconst resizeOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.PageBlobResizeHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.PageBlobResizeExceptionHeaders\n }\n },\n queryParameters: [Parameters.comp, Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.encryptionScope, Parameters.blobContentLength],\n isXML: true,\n serializer: xmlSerializer\n};\nconst updateSequenceNumberOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.PageBlobUpdateSequenceNumberHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.PageBlobUpdateSequenceNumberExceptionHeaders\n }\n },\n queryParameters: [Parameters.comp, Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.blobSequenceNumber, Parameters.sequenceNumberAction],\n isXML: true,\n serializer: xmlSerializer\n};\nconst copyIncrementalOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 202: {\n headersMapper: Mappers.PageBlobCopyIncrementalHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.PageBlobCopyIncrementalExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp21],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.copySource],\n isXML: true,\n serializer: xmlSerializer\n};\n","/*\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\n */\nimport * as coreHttp from \"@azure/core-http\";\nimport * as Mappers from \"../models/mappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a AppendBlob. */\nexport class AppendBlob {\n /**\n * Initialize a new instance of the class AppendBlob class.\n * @param client Reference to the service client\n */\n constructor(client) {\n this.client = client;\n }\n /**\n * The Create Append Blob operation creates a new append blob.\n * @param contentLength The length of the request.\n * @param options The options parameters.\n */\n create(contentLength, options) {\n const operationArguments = {\n contentLength,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, createOperationSpec);\n }\n /**\n * The Append Block operation commits a new block of data to the end of an existing append blob. The\n * Append Block operation is permitted only if the blob was created with x-ms-blob-type set to\n * AppendBlob. Append Block is supported only on version 2015-02-21 version or later.\n * @param contentLength The length of the request.\n * @param body Initial data\n * @param options The options parameters.\n */\n appendBlock(contentLength, body, options) {\n const operationArguments = {\n contentLength,\n body,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, appendBlockOperationSpec);\n }\n /**\n * The Append Block operation commits a new block of data to the end of an existing append blob where\n * the contents are read from a source url. The Append Block operation is permitted only if the blob\n * was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on version\n * 2015-02-21 version or later.\n * @param sourceUrl Specify a URL to the copy source.\n * @param contentLength The length of the request.\n * @param options The options parameters.\n */\n appendBlockFromUrl(sourceUrl, contentLength, options) {\n const operationArguments = {\n sourceUrl,\n contentLength,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, appendBlockFromUrlOperationSpec);\n }\n /**\n * The Seal operation seals the Append Blob to make it read-only. Seal is supported only on version\n * 2019-12-12 version or later.\n * @param options The options parameters.\n */\n seal(options) {\n const operationArguments = {\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, sealOperationSpec);\n }\n}\n// Operation Specifications\nconst xmlSerializer = new coreHttp.Serializer(Mappers, /* isXml */true);\nconst serializer = new coreHttp.Serializer(Mappers, /* isXml */false);\nconst createOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.AppendBlobCreateHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.AppendBlobCreateExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.contentLength, Parameters.metadata, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.blobCacheControl, Parameters.blobContentType, Parameters.blobContentMD5, Parameters.blobContentEncoding, Parameters.blobContentLanguage, Parameters.blobContentDisposition, Parameters.immutabilityPolicyExpiry, Parameters.immutabilityPolicyMode, Parameters.encryptionScope, Parameters.blobTagsString, Parameters.legalHold1, Parameters.blobType1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst appendBlockOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.AppendBlobAppendBlockHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.AppendBlobAppendBlockExceptionHeaders\n }\n },\n requestBody: Parameters.body1,\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp22],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.contentLength, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.encryptionScope, Parameters.transactionalContentMD5, Parameters.transactionalContentCrc64, Parameters.contentType1, Parameters.accept2, Parameters.maxSize, Parameters.appendPosition],\n mediaType: \"binary\",\n serializer\n};\nconst appendBlockFromUrlOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.AppendBlobAppendBlockFromUrlHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.AppendBlobAppendBlockFromUrlExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp22],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.contentLength, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.encryptionScope, Parameters.sourceIfModifiedSince, Parameters.sourceIfUnmodifiedSince, Parameters.sourceIfMatch, Parameters.sourceIfNoneMatch, Parameters.sourceContentMD5, Parameters.copySourceAuthorization, Parameters.transactionalContentMD5, Parameters.sourceUrl, Parameters.sourceContentCrc64, Parameters.maxSize, Parameters.appendPosition, Parameters.sourceRange1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst sealOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 200: {\n headersMapper: Mappers.AppendBlobSealHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.AppendBlobSealExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp23],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.appendPosition],\n isXML: true,\n serializer: xmlSerializer\n};\n","/*\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\n */\nimport * as coreHttp from \"@azure/core-http\";\nimport * as Mappers from \"../models/mappers\";\nimport * as Parameters from \"../models/parameters\";\n/** Class representing a BlockBlob. */\nexport class BlockBlob {\n /**\n * Initialize a new instance of the class BlockBlob class.\n * @param client Reference to the service client\n */\n constructor(client) {\n this.client = client;\n }\n /**\n * The Upload Block Blob operation updates the content of an existing block blob. Updating an existing\n * block blob overwrites any existing metadata on the blob. Partial updates are not supported with Put\n * Blob; the content of the existing blob is overwritten with the content of the new blob. To perform a\n * partial update of the content of a block blob, use the Put Block List operation.\n * @param contentLength The length of the request.\n * @param body Initial data\n * @param options The options parameters.\n */\n upload(contentLength, body, options) {\n const operationArguments = {\n contentLength,\n body,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, uploadOperationSpec);\n }\n /**\n * The Put Blob from URL operation creates a new Block Blob where the contents of the blob are read\n * from a given URL. This API is supported beginning with the 2020-04-08 version. Partial updates are\n * not supported with Put Blob from URL; the content of an existing blob is overwritten with the\n * content of the new blob. To perform partial updates to a block blob’s contents using a source URL,\n * use the Put Block from URL API in conjunction with Put Block List.\n * @param contentLength The length of the request.\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to\n * 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would\n * appear in a request URI. The source blob must either be public or must be authenticated via a shared\n * access signature.\n * @param options The options parameters.\n */\n putBlobFromUrl(contentLength, copySource, options) {\n const operationArguments = {\n contentLength,\n copySource,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, putBlobFromUrlOperationSpec);\n }\n /**\n * The Stage Block operation creates a new block to be committed as part of a blob\n * @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the string\n * must be less than or equal to 64 bytes in size. For a given blob, the length of the value specified\n * for the blockid parameter must be the same size for each block.\n * @param contentLength The length of the request.\n * @param body Initial data\n * @param options The options parameters.\n */\n stageBlock(blockId, contentLength, body, options) {\n const operationArguments = {\n blockId,\n contentLength,\n body,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, stageBlockOperationSpec);\n }\n /**\n * The Stage Block operation creates a new block to be committed as part of a blob where the contents\n * are read from a URL.\n * @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the string\n * must be less than or equal to 64 bytes in size. For a given blob, the length of the value specified\n * for the blockid parameter must be the same size for each block.\n * @param contentLength The length of the request.\n * @param sourceUrl Specify a URL to the copy source.\n * @param options The options parameters.\n */\n stageBlockFromURL(blockId, contentLength, sourceUrl, options) {\n const operationArguments = {\n blockId,\n contentLength,\n sourceUrl,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, stageBlockFromURLOperationSpec);\n }\n /**\n * The Commit Block List operation writes a blob by specifying the list of block IDs that make up the\n * blob. In order to be written as part of a blob, a block must have been successfully written to the\n * server in a prior Put Block operation. You can call Put Block List to update a blob by uploading\n * only those blocks that have changed, then committing the new and existing blocks together. You can\n * do this by specifying whether to commit a block from the committed block list or from the\n * uncommitted block list, or to commit the most recently uploaded version of the block, whichever list\n * it may belong to.\n * @param blocks Blob Blocks.\n * @param options The options parameters.\n */\n commitBlockList(blocks, options) {\n const operationArguments = {\n blocks,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, commitBlockListOperationSpec);\n }\n /**\n * The Get Block List operation retrieves the list of blocks that have been uploaded as part of a block\n * blob\n * @param listType Specifies whether to return the list of committed blocks, the list of uncommitted\n * blocks, or both lists together.\n * @param options The options parameters.\n */\n getBlockList(listType, options) {\n const operationArguments = {\n listType,\n options: coreHttp.operationOptionsToRequestOptionsBase(options || {})\n };\n return this.client.sendOperationRequest(operationArguments, getBlockListOperationSpec);\n }\n}\n// Operation Specifications\nconst xmlSerializer = new coreHttp.Serializer(Mappers, /* isXml */true);\nconst serializer = new coreHttp.Serializer(Mappers, /* isXml */false);\nconst uploadOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.BlockBlobUploadHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlockBlobUploadExceptionHeaders\n }\n },\n requestBody: Parameters.body1,\n queryParameters: [Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.contentLength, Parameters.metadata, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.blobCacheControl, Parameters.blobContentType, Parameters.blobContentMD5, Parameters.blobContentEncoding, Parameters.blobContentLanguage, Parameters.blobContentDisposition, Parameters.immutabilityPolicyExpiry, Parameters.immutabilityPolicyMode, Parameters.encryptionScope, Parameters.tier, Parameters.blobTagsString, Parameters.legalHold1, Parameters.transactionalContentMD5, Parameters.transactionalContentCrc64, Parameters.contentType1, Parameters.accept2, Parameters.blobType2],\n mediaType: \"binary\",\n serializer\n};\nconst putBlobFromUrlOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.BlockBlobPutBlobFromUrlHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlockBlobPutBlobFromUrlExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.contentLength, Parameters.metadata, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.blobCacheControl, Parameters.blobContentType, Parameters.blobContentMD5, Parameters.blobContentEncoding, Parameters.blobContentLanguage, Parameters.blobContentDisposition, Parameters.encryptionScope, Parameters.tier, Parameters.sourceIfModifiedSince, Parameters.sourceIfUnmodifiedSince, Parameters.sourceIfMatch, Parameters.sourceIfNoneMatch, Parameters.sourceIfTags, Parameters.copySource, Parameters.blobTagsString, Parameters.sourceContentMD5, Parameters.copySourceAuthorization, Parameters.copySourceTags, Parameters.transactionalContentMD5, Parameters.blobType2, Parameters.copySourceBlobProperties],\n isXML: true,\n serializer: xmlSerializer\n};\nconst stageBlockOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.BlockBlobStageBlockHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlockBlobStageBlockExceptionHeaders\n }\n },\n requestBody: Parameters.body1,\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp24, Parameters.blockId],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.contentLength, Parameters.leaseId, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.encryptionScope, Parameters.transactionalContentMD5, Parameters.transactionalContentCrc64, Parameters.contentType1, Parameters.accept2],\n mediaType: \"binary\",\n serializer\n};\nconst stageBlockFromURLOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.BlockBlobStageBlockFromURLHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlockBlobStageBlockFromURLExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp24, Parameters.blockId],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.contentLength, Parameters.leaseId, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.encryptionScope, Parameters.sourceIfModifiedSince, Parameters.sourceIfUnmodifiedSince, Parameters.sourceIfMatch, Parameters.sourceIfNoneMatch, Parameters.sourceContentMD5, Parameters.copySourceAuthorization, Parameters.sourceUrl, Parameters.sourceContentCrc64, Parameters.sourceRange1],\n isXML: true,\n serializer: xmlSerializer\n};\nconst commitBlockListOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"PUT\",\n responses: {\n 201: {\n headersMapper: Mappers.BlockBlobCommitBlockListHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlockBlobCommitBlockListExceptionHeaders\n }\n },\n requestBody: Parameters.blocks,\n queryParameters: [Parameters.timeoutInSeconds, Parameters.comp25],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.contentType, Parameters.accept, Parameters.version, Parameters.requestId, Parameters.metadata, Parameters.leaseId, Parameters.ifModifiedSince, Parameters.ifUnmodifiedSince, Parameters.encryptionKey, Parameters.encryptionKeySha256, Parameters.encryptionAlgorithm, Parameters.ifMatch, Parameters.ifNoneMatch, Parameters.ifTags, Parameters.blobCacheControl, Parameters.blobContentType, Parameters.blobContentMD5, Parameters.blobContentEncoding, Parameters.blobContentLanguage, Parameters.blobContentDisposition, Parameters.immutabilityPolicyExpiry, Parameters.immutabilityPolicyMode, Parameters.encryptionScope, Parameters.tier, Parameters.blobTagsString, Parameters.legalHold1, Parameters.transactionalContentMD5, Parameters.transactionalContentCrc64],\n isXML: true,\n contentType: \"application/xml; charset=utf-8\",\n mediaType: \"xml\",\n serializer: xmlSerializer\n};\nconst getBlockListOperationSpec = {\n path: \"/{containerName}/{blob}\",\n httpMethod: \"GET\",\n responses: {\n 200: {\n bodyMapper: Mappers.BlockList,\n headersMapper: Mappers.BlockBlobGetBlockListHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError,\n headersMapper: Mappers.BlockBlobGetBlockListExceptionHeaders\n }\n },\n queryParameters: [Parameters.timeoutInSeconds, Parameters.snapshot, Parameters.comp25, Parameters.listType],\n urlParameters: [Parameters.url],\n headerParameters: [Parameters.version, Parameters.requestId, Parameters.accept1, Parameters.leaseId, Parameters.ifTags],\n isXML: true,\n serializer: xmlSerializer\n};\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { createClientLogger } from \"@azure/logger\";\n/**\n * The `@azure/logger` configuration for this package.\n */\nexport const logger = createClientLogger(\"storage-blob\");\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport const SDK_VERSION = \"12.17.0\";\nexport const SERVICE_VERSION = \"2023-11-03\";\nexport const BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES = 256 * 1024 * 1024; // 256MB\nexport const BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES = 4000 * 1024 * 1024; // 4000MB\nexport const BLOCK_BLOB_MAX_BLOCKS = 50000;\nexport const DEFAULT_BLOCK_BUFFER_SIZE_BYTES = 8 * 1024 * 1024; // 8MB\nexport const DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES = 4 * 1024 * 1024; // 4MB\nexport const DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS = 5;\nexport const REQUEST_TIMEOUT = 100 * 1000; // In ms\n/**\n * The OAuth scope to use with Azure Storage.\n */\nexport const StorageOAuthScopes = \"https://storage.azure.com/.default\";\nexport const URLConstants = {\n Parameters: {\n FORCE_BROWSER_NO_CACHE: \"_\",\n SIGNATURE: \"sig\",\n SNAPSHOT: \"snapshot\",\n VERSIONID: \"versionid\",\n TIMEOUT: \"timeout\"\n }\n};\nexport const HTTPURLConnection = {\n HTTP_ACCEPTED: 202,\n HTTP_CONFLICT: 409,\n HTTP_NOT_FOUND: 404,\n HTTP_PRECON_FAILED: 412,\n HTTP_RANGE_NOT_SATISFIABLE: 416\n};\nexport const HeaderConstants = {\n AUTHORIZATION: \"Authorization\",\n AUTHORIZATION_SCHEME: \"Bearer\",\n CONTENT_ENCODING: \"Content-Encoding\",\n CONTENT_ID: \"Content-ID\",\n CONTENT_LANGUAGE: \"Content-Language\",\n CONTENT_LENGTH: \"Content-Length\",\n CONTENT_MD5: \"Content-Md5\",\n CONTENT_TRANSFER_ENCODING: \"Content-Transfer-Encoding\",\n CONTENT_TYPE: \"Content-Type\",\n COOKIE: \"Cookie\",\n DATE: \"date\",\n IF_MATCH: \"if-match\",\n IF_MODIFIED_SINCE: \"if-modified-since\",\n IF_NONE_MATCH: \"if-none-match\",\n IF_UNMODIFIED_SINCE: \"if-unmodified-since\",\n PREFIX_FOR_STORAGE: \"x-ms-\",\n RANGE: \"Range\",\n USER_AGENT: \"User-Agent\",\n X_MS_CLIENT_REQUEST_ID: \"x-ms-client-request-id\",\n X_MS_COPY_SOURCE: \"x-ms-copy-source\",\n X_MS_DATE: \"x-ms-date\",\n X_MS_ERROR_CODE: \"x-ms-error-code\",\n X_MS_VERSION: \"x-ms-version\"\n};\nexport const ETagNone = \"\";\nexport const ETagAny = \"*\";\nexport const SIZE_1_MB = 1 * 1024 * 1024;\nexport const BATCH_MAX_REQUEST = 256;\nexport const BATCH_MAX_PAYLOAD_IN_BYTES = 4 * SIZE_1_MB;\nexport const HTTP_LINE_ENDING = \"\\r\\n\";\nexport const HTTP_VERSION_1_1 = \"HTTP/1.1\";\nexport const EncryptionAlgorithmAES25 = \"AES256\";\nexport const DevelopmentConnectionString = `DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;`;\nexport const StorageBlobLoggingAllowedHeaderNames = [\"Access-Control-Allow-Origin\", \"Cache-Control\", \"Content-Length\", \"Content-Type\", \"Date\", \"Request-Id\", \"traceparent\", \"Transfer-Encoding\", \"User-Agent\", \"x-ms-client-request-id\", \"x-ms-date\", \"x-ms-error-code\", \"x-ms-request-id\", \"x-ms-return-client-request-id\", \"x-ms-version\", \"Accept-Ranges\", \"Content-Disposition\", \"Content-Encoding\", \"Content-Language\", \"Content-MD5\", \"Content-Range\", \"ETag\", \"Last-Modified\", \"Server\", \"Vary\", \"x-ms-content-crc64\", \"x-ms-copy-action\", \"x-ms-copy-completion-time\", \"x-ms-copy-id\", \"x-ms-copy-progress\", \"x-ms-copy-status\", \"x-ms-has-immutability-policy\", \"x-ms-has-legal-hold\", \"x-ms-lease-state\", \"x-ms-lease-status\", \"x-ms-range\", \"x-ms-request-server-encrypted\", \"x-ms-server-encrypted\", \"x-ms-snapshot\", \"x-ms-source-range\", \"If-Match\", \"If-Modified-Since\", \"If-None-Match\", \"If-Unmodified-Since\", \"x-ms-access-tier\", \"x-ms-access-tier-change-time\", \"x-ms-access-tier-inferred\", \"x-ms-account-kind\", \"x-ms-archive-status\", \"x-ms-blob-append-offset\", \"x-ms-blob-cache-control\", \"x-ms-blob-committed-block-count\", \"x-ms-blob-condition-appendpos\", \"x-ms-blob-condition-maxsize\", \"x-ms-blob-content-disposition\", \"x-ms-blob-content-encoding\", \"x-ms-blob-content-language\", \"x-ms-blob-content-length\", \"x-ms-blob-content-md5\", \"x-ms-blob-content-type\", \"x-ms-blob-public-access\", \"x-ms-blob-sequence-number\", \"x-ms-blob-type\", \"x-ms-copy-destination-snapshot\", \"x-ms-creation-time\", \"x-ms-default-encryption-scope\", \"x-ms-delete-snapshots\", \"x-ms-delete-type-permanent\", \"x-ms-deny-encryption-scope-override\", \"x-ms-encryption-algorithm\", \"x-ms-if-sequence-number-eq\", \"x-ms-if-sequence-number-le\", \"x-ms-if-sequence-number-lt\", \"x-ms-incremental-copy\", \"x-ms-lease-action\", \"x-ms-lease-break-period\", \"x-ms-lease-duration\", \"x-ms-lease-id\", \"x-ms-lease-time\", \"x-ms-page-write\", \"x-ms-proposed-lease-id\", \"x-ms-range-get-content-md5\", \"x-ms-rehydrate-priority\", \"x-ms-sequence-number-action\", \"x-ms-sku-name\", \"x-ms-source-content-md5\", \"x-ms-source-if-match\", \"x-ms-source-if-modified-since\", \"x-ms-source-if-none-match\", \"x-ms-source-if-unmodified-since\", \"x-ms-tag-count\", \"x-ms-encryption-key-sha256\", \"x-ms-if-tags\", \"x-ms-source-if-tags\"];\nexport const StorageBlobLoggingAllowedQueryParameters = [\"comp\", \"maxresults\", \"rscc\", \"rscd\", \"rsce\", \"rscl\", \"rsct\", \"se\", \"si\", \"sip\", \"sp\", \"spr\", \"sr\", \"srt\", \"ss\", \"st\", \"sv\", \"include\", \"marker\", \"prefix\", \"copyid\", \"restype\", \"blockid\", \"blocklisttype\", \"delimiter\", \"prevsnapshot\", \"ske\", \"skoid\", \"sks\", \"skt\", \"sktid\", \"skv\", \"snapshot\"];\nexport const BlobUsesCustomerSpecifiedEncryptionMsg = \"BlobUsesCustomerSpecifiedEncryption\";\nexport const BlobDoesNotUseCustomerSpecifiedEncryption = \"BlobDoesNotUseCustomerSpecifiedEncryption\";\n/// List of ports used for path style addressing.\n/// Path style addressing means that storage account is put in URI's Path segment in instead of in host.\nexport const PathStylePorts = [\"10000\", \"10001\", \"10002\", \"10003\", \"10004\", \"10100\", \"10101\", \"10102\", \"10103\", \"10104\", \"11000\", \"11001\", \"11002\", \"11003\", \"11004\", \"11100\", \"11101\", \"11102\", \"11103\", \"11104\"];\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { HttpHeaders, isNode, URLBuilder } from \"@azure/core-http\";\nimport { DevelopmentConnectionString, HeaderConstants, PathStylePorts, URLConstants } from \"./constants\";\n/**\n * Reserved URL characters must be properly escaped for Storage services like Blob or File.\n *\n * ## URL encode and escape strategy for JS SDKs\n *\n * When customers pass a URL string into XxxClient classes constructor, the URL string may already be URL encoded or not.\n * But before sending to Azure Storage server, the URL must be encoded. However, it's hard for a SDK to guess whether the URL\n * string has been encoded or not. We have 2 potential strategies, and chose strategy two for the XxxClient constructors.\n *\n * ### Strategy One: Assume the customer URL string is not encoded, and always encode URL string in SDK.\n *\n * This is what legacy V2 SDK does, simple and works for most of the cases.\n * - When customer URL string is \"http://account.blob.core.windows.net/con/b:\",\n * SDK will encode it to \"http://account.blob.core.windows.net/con/b%3A\" and send to server. A blob named \"b:\" will be created.\n * - When customer URL string is \"http://account.blob.core.windows.net/con/b%3A\",\n * SDK will encode it to \"http://account.blob.core.windows.net/con/b%253A\" and send to server. A blob named \"b%3A\" will be created.\n *\n * But this strategy will make it not possible to create a blob with \"?\" in it's name. Because when customer URL string is\n * \"http://account.blob.core.windows.net/con/blob?name\", the \"?name\" will be treated as URL paramter instead of blob name.\n * If customer URL string is \"http://account.blob.core.windows.net/con/blob%3Fname\", a blob named \"blob%3Fname\" will be created.\n * V2 SDK doesn't have this issue because it doesn't allow customer pass in a full URL, it accepts a separate blob name and encodeURIComponent for it.\n * We cannot accept a SDK cannot create a blob name with \"?\". So we implement strategy two:\n *\n * ### Strategy Two: SDK doesn't assume the URL has been encoded or not. It will just escape the special characters.\n *\n * This is what V10 Blob Go SDK does. It accepts a URL type in Go, and call url.EscapedPath() to escape the special chars unescaped.\n * - When customer URL string is \"http://account.blob.core.windows.net/con/b:\",\n * SDK will escape \":\" like \"http://account.blob.core.windows.net/con/b%3A\" and send to server. A blob named \"b:\" will be created.\n * - When customer URL string is \"http://account.blob.core.windows.net/con/b%3A\",\n * There is no special characters, so send \"http://account.blob.core.windows.net/con/b%3A\" to server. A blob named \"b:\" will be created.\n * - When customer URL string is \"http://account.blob.core.windows.net/con/b%253A\",\n * There is no special characters, so send \"http://account.blob.core.windows.net/con/b%253A\" to server. A blob named \"b%3A\" will be created.\n *\n * This strategy gives us flexibility to create with any special characters. But \"%\" will be treated as a special characters, if the URL string\n * is not encoded, there shouldn't a \"%\" in the URL string, otherwise the URL is not a valid URL.\n * If customer needs to create a blob with \"%\" in it's blob name, use \"%25\" instead of \"%\". Just like above 3rd sample.\n * And following URL strings are invalid:\n * - \"http://account.blob.core.windows.net/con/b%\"\n * - \"http://account.blob.core.windows.net/con/b%2\"\n * - \"http://account.blob.core.windows.net/con/b%G\"\n *\n * Another special character is \"?\", use \"%2F\" to represent a blob name with \"?\" in a URL string.\n *\n * ### Strategy for containerName, blobName or other specific XXXName parameters in methods such as `containerClient.getBlobClient(blobName)`\n *\n * We will apply strategy one, and call encodeURIComponent for these parameters like blobName. Because what customers passes in is a plain name instead of a URL.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-shares--directories--files--and-metadata\n *\n * @param url -\n */\nexport function escapeURLPath(url) {\n const urlParsed = URLBuilder.parse(url);\n let path = urlParsed.getPath();\n path = path || \"/\";\n path = escape(path);\n urlParsed.setPath(path);\n return urlParsed.toString();\n}\nfunction getProxyUriFromDevConnString(connectionString) {\n // Development Connection String\n // https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string#connect-to-the-emulator-account-using-the-well-known-account-name-and-key\n let proxyUri = \"\";\n if (connectionString.search(\"DevelopmentStorageProxyUri=\") !== -1) {\n // CONNECTION_STRING=UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://myProxyUri\n const matchCredentials = connectionString.split(\";\");\n for (const element of matchCredentials) {\n if (element.trim().startsWith(\"DevelopmentStorageProxyUri=\")) {\n proxyUri = element.trim().match(\"DevelopmentStorageProxyUri=(.*)\")[1];\n }\n }\n }\n return proxyUri;\n}\nexport function getValueInConnString(connectionString, argument) {\n const elements = connectionString.split(\";\");\n for (const element of elements) {\n if (element.trim().startsWith(argument)) {\n return element.trim().match(argument + \"=(.*)\")[1];\n }\n }\n return \"\";\n}\n/**\n * Extracts the parts of an Azure Storage account connection string.\n *\n * @param connectionString - Connection string.\n * @returns String key value pairs of the storage account's url and credentials.\n */\nexport function extractConnectionStringParts(connectionString) {\n let proxyUri = \"\";\n if (connectionString.startsWith(\"UseDevelopmentStorage=true\")) {\n // Development connection string\n proxyUri = getProxyUriFromDevConnString(connectionString);\n connectionString = DevelopmentConnectionString;\n }\n // Matching BlobEndpoint in the Account connection string\n let blobEndpoint = getValueInConnString(connectionString, \"BlobEndpoint\");\n // Slicing off '/' at the end if exists\n // (The methods that use `extractConnectionStringParts` expect the url to not have `/` at the end)\n blobEndpoint = blobEndpoint.endsWith(\"/\") ? blobEndpoint.slice(0, -1) : blobEndpoint;\n if (connectionString.search(\"DefaultEndpointsProtocol=\") !== -1 && connectionString.search(\"AccountKey=\") !== -1) {\n // Account connection string\n let defaultEndpointsProtocol = \"\";\n let accountName = \"\";\n let accountKey = Buffer.from(\"accountKey\", \"base64\");\n let endpointSuffix = \"\";\n // Get account name and key\n accountName = getValueInConnString(connectionString, \"AccountName\");\n accountKey = Buffer.from(getValueInConnString(connectionString, \"AccountKey\"), \"base64\");\n if (!blobEndpoint) {\n // BlobEndpoint is not present in the Account connection string\n // Can be obtained from `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`\n defaultEndpointsProtocol = getValueInConnString(connectionString, \"DefaultEndpointsProtocol\");\n const protocol = defaultEndpointsProtocol.toLowerCase();\n if (protocol !== \"https\" && protocol !== \"http\") {\n throw new Error(\"Invalid DefaultEndpointsProtocol in the provided Connection String. Expecting 'https' or 'http'\");\n }\n endpointSuffix = getValueInConnString(connectionString, \"EndpointSuffix\");\n if (!endpointSuffix) {\n throw new Error(\"Invalid EndpointSuffix in the provided Connection String\");\n }\n blobEndpoint = `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`;\n }\n if (!accountName) {\n throw new Error(\"Invalid AccountName in the provided Connection String\");\n } else if (accountKey.length === 0) {\n throw new Error(\"Invalid AccountKey in the provided Connection String\");\n }\n return {\n kind: \"AccountConnString\",\n url: blobEndpoint,\n accountName,\n accountKey,\n proxyUri\n };\n } else {\n // SAS connection string\n const accountSas = getValueInConnString(connectionString, \"SharedAccessSignature\");\n let accountName = getValueInConnString(connectionString, \"AccountName\");\n // if accountName is empty, try to read it from BlobEndpoint\n if (!accountName) {\n accountName = getAccountNameFromUrl(blobEndpoint);\n }\n if (!blobEndpoint) {\n throw new Error(\"Invalid BlobEndpoint in the provided SAS Connection String\");\n } else if (!accountSas) {\n throw new Error(\"Invalid SharedAccessSignature in the provided SAS Connection String\");\n }\n return {\n kind: \"SASConnString\",\n url: blobEndpoint,\n accountName,\n accountSas\n };\n }\n}\n/**\n * Internal escape method implemented Strategy Two mentioned in escapeURL() description.\n *\n * @param text -\n */\nfunction escape(text) {\n return encodeURIComponent(text).replace(/%2F/g, \"/\") // Don't escape for \"/\"\n .replace(/'/g, \"%27\") // Escape for \"'\"\n .replace(/\\+/g, \"%20\").replace(/%25/g, \"%\"); // Revert encoded \"%\"\n}\n/**\n * Append a string to URL path. Will remove duplicated \"/\" in front of the string\n * when URL path ends with a \"/\".\n *\n * @param url - Source URL string\n * @param name - String to be appended to URL\n * @returns An updated URL string\n */\nexport function appendToURLPath(url, name) {\n const urlParsed = URLBuilder.parse(url);\n let path = urlParsed.getPath();\n path = path ? path.endsWith(\"/\") ? `${path}${name}` : `${path}/${name}` : name;\n urlParsed.setPath(path);\n const normalizedUrl = new URL(urlParsed.toString());\n return normalizedUrl.toString();\n}\n/**\n * Set URL parameter name and value. If name exists in URL parameters, old value\n * will be replaced by name key. If not provide value, the parameter will be deleted.\n *\n * @param url - Source URL string\n * @param name - Parameter name\n * @param value - Parameter value\n * @returns An updated URL string\n */\nexport function setURLParameter(url, name, value) {\n const urlParsed = URLBuilder.parse(url);\n urlParsed.setQueryParameter(name, value);\n return urlParsed.toString();\n}\n/**\n * Get URL parameter by name.\n *\n * @param url -\n * @param name -\n */\nexport function getURLParameter(url, name) {\n const urlParsed = URLBuilder.parse(url);\n return urlParsed.getQueryParameterValue(name);\n}\n/**\n * Set URL host.\n *\n * @param url - Source URL string\n * @param host - New host string\n * @returns An updated URL string\n */\nexport function setURLHost(url, host) {\n const urlParsed = URLBuilder.parse(url);\n urlParsed.setHost(host);\n return urlParsed.toString();\n}\n/**\n * Get URL path from an URL string.\n *\n * @param url - Source URL string\n */\nexport function getURLPath(url) {\n const urlParsed = URLBuilder.parse(url);\n return urlParsed.getPath();\n}\n/**\n * Get URL scheme from an URL string.\n *\n * @param url - Source URL string\n */\nexport function getURLScheme(url) {\n const urlParsed = URLBuilder.parse(url);\n return urlParsed.getScheme();\n}\n/**\n * Get URL path and query from an URL string.\n *\n * @param url - Source URL string\n */\nexport function getURLPathAndQuery(url) {\n const urlParsed = URLBuilder.parse(url);\n const pathString = urlParsed.getPath();\n if (!pathString) {\n throw new RangeError(\"Invalid url without valid path.\");\n }\n let queryString = urlParsed.getQuery() || \"\";\n queryString = queryString.trim();\n if (queryString !== \"\") {\n queryString = queryString.startsWith(\"?\") ? queryString : `?${queryString}`; // Ensure query string start with '?'\n }\n return `${pathString}${queryString}`;\n}\n/**\n * Get URL query key value pairs from an URL string.\n *\n * @param url -\n */\nexport function getURLQueries(url) {\n let queryString = URLBuilder.parse(url).getQuery();\n if (!queryString) {\n return {};\n }\n queryString = queryString.trim();\n queryString = queryString.startsWith(\"?\") ? queryString.substr(1) : queryString;\n let querySubStrings = queryString.split(\"&\");\n querySubStrings = querySubStrings.filter(value => {\n const indexOfEqual = value.indexOf(\"=\");\n const lastIndexOfEqual = value.lastIndexOf(\"=\");\n return indexOfEqual > 0 && indexOfEqual === lastIndexOfEqual && lastIndexOfEqual < value.length - 1;\n });\n const queries = {};\n for (const querySubString of querySubStrings) {\n const splitResults = querySubString.split(\"=\");\n const key = splitResults[0];\n const value = splitResults[1];\n queries[key] = value;\n }\n return queries;\n}\n/**\n * Append a string to URL query.\n *\n * @param url - Source URL string.\n * @param queryParts - String to be appended to the URL query.\n * @returns An updated URL string.\n */\nexport function appendToURLQuery(url, queryParts) {\n const urlParsed = URLBuilder.parse(url);\n let query = urlParsed.getQuery();\n if (query) {\n query += \"&\" + queryParts;\n } else {\n query = queryParts;\n }\n urlParsed.setQuery(query);\n return urlParsed.toString();\n}\n/**\n * Rounds a date off to seconds.\n *\n * @param date -\n * @param withMilliseconds - If true, YYYY-MM-DDThh:mm:ss.fffffffZ will be returned;\n * If false, YYYY-MM-DDThh:mm:ssZ will be returned.\n * @returns Date string in ISO8061 format, with or without 7 milliseconds component\n */\nexport function truncatedISO8061Date(date, withMilliseconds = true) {\n // Date.toISOString() will return like \"2018-10-29T06:34:36.139Z\"\n const dateString = date.toISOString();\n return withMilliseconds ? dateString.substring(0, dateString.length - 1) + \"0000\" + \"Z\" : dateString.substring(0, dateString.length - 5) + \"Z\";\n}\n/**\n * Base64 encode.\n *\n * @param content -\n */\nexport function base64encode(content) {\n return !isNode ? btoa(content) : Buffer.from(content).toString(\"base64\");\n}\n/**\n * Base64 decode.\n *\n * @param encodedString -\n */\nexport function base64decode(encodedString) {\n return !isNode ? atob(encodedString) : Buffer.from(encodedString, \"base64\").toString();\n}\n/**\n * Generate a 64 bytes base64 block ID string.\n *\n * @param blockIndex -\n */\nexport function generateBlockID(blockIDPrefix, blockIndex) {\n // To generate a 64 bytes base64 string, source string should be 48\n const maxSourceStringLength = 48;\n // A blob can have a maximum of 100,000 uncommitted blocks at any given time\n const maxBlockIndexLength = 6;\n const maxAllowedBlockIDPrefixLength = maxSourceStringLength - maxBlockIndexLength;\n if (blockIDPrefix.length > maxAllowedBlockIDPrefixLength) {\n blockIDPrefix = blockIDPrefix.slice(0, maxAllowedBlockIDPrefixLength);\n }\n const res = blockIDPrefix + padStart(blockIndex.toString(), maxSourceStringLength - blockIDPrefix.length, \"0\");\n return base64encode(res);\n}\n/**\n * Delay specified time interval.\n *\n * @param timeInMs -\n * @param aborter -\n * @param abortError -\n */\nexport async function delay(timeInMs, aborter, abortError) {\n return new Promise((resolve, reject) => {\n /* eslint-disable-next-line prefer-const */\n let timeout;\n const abortHandler = () => {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n reject(abortError);\n };\n const resolveHandler = () => {\n if (aborter !== undefined) {\n aborter.removeEventListener(\"abort\", abortHandler);\n }\n resolve();\n };\n timeout = setTimeout(resolveHandler, timeInMs);\n if (aborter !== undefined) {\n aborter.addEventListener(\"abort\", abortHandler);\n }\n });\n}\n/**\n * String.prototype.padStart()\n *\n * @param currentString -\n * @param targetLength -\n * @param padString -\n */\nexport function padStart(currentString, targetLength, padString = \" \") {\n // @ts-expect-error: TS doesn't know this code needs to run downlevel sometimes\n if (String.prototype.padStart) {\n return currentString.padStart(targetLength, padString);\n }\n padString = padString || \" \";\n if (currentString.length > targetLength) {\n return currentString;\n } else {\n targetLength = targetLength - currentString.length;\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length);\n }\n return padString.slice(0, targetLength) + currentString;\n }\n}\nexport function sanitizeURL(url) {\n let safeURL = url;\n if (getURLParameter(safeURL, URLConstants.Parameters.SIGNATURE)) {\n safeURL = setURLParameter(safeURL, URLConstants.Parameters.SIGNATURE, \"*****\");\n }\n return safeURL;\n}\nexport function sanitizeHeaders(originalHeader) {\n const headers = new HttpHeaders();\n for (const header of originalHeader.headersArray()) {\n if (header.name.toLowerCase() === HeaderConstants.AUTHORIZATION.toLowerCase()) {\n headers.set(header.name, \"*****\");\n } else if (header.name.toLowerCase() === HeaderConstants.X_MS_COPY_SOURCE) {\n headers.set(header.name, sanitizeURL(header.value));\n } else {\n headers.set(header.name, header.value);\n }\n }\n return headers;\n}\n/**\n * If two strings are equal when compared case insensitive.\n *\n * @param str1 -\n * @param str2 -\n */\nexport function iEqual(str1, str2) {\n return str1.toLocaleLowerCase() === str2.toLocaleLowerCase();\n}\n/**\n * Extracts account name from the url\n * @param url - url to extract the account name from\n * @returns with the account name\n */\nexport function getAccountNameFromUrl(url) {\n const parsedUrl = URLBuilder.parse(url);\n let accountName;\n try {\n if (parsedUrl.getHost().split(\".\")[1] === \"blob\") {\n // `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`;\n accountName = parsedUrl.getHost().split(\".\")[0];\n } else if (isIpEndpointStyle(parsedUrl)) {\n // IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/\n // Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/\n // .getPath() -> /devstoreaccount1/\n accountName = parsedUrl.getPath().split(\"/\")[1];\n } else {\n // Custom domain case: \"https://customdomain.com/containername/blob\".\n accountName = \"\";\n }\n return accountName;\n } catch (error) {\n throw new Error(\"Unable to extract accountName with provided information.\");\n }\n}\nexport function isIpEndpointStyle(parsedUrl) {\n if (parsedUrl.getHost() === undefined) {\n return false;\n }\n const host = parsedUrl.getHost() + (parsedUrl.getPort() === undefined ? \"\" : \":\" + parsedUrl.getPort());\n // Case 1: Ipv6, use a broad regex to find out candidates whose host contains two ':'.\n // Case 2: localhost(:port) or host.docker.internal, use broad regex to match port part.\n // Case 3: Ipv4, use broad regex which just check if host contains Ipv4.\n // For valid host please refer to https://man7.org/linux/man-pages/man7/hostname.7.html.\n return /^.*:.*:.*$|^(localhost|host.docker.internal)(:[0-9]+)?$|^(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])){3}(:[0-9]+)?$/.test(host) || parsedUrl.getPort() !== undefined && PathStylePorts.includes(parsedUrl.getPort());\n}\n/**\n * Convert Tags to encoded string.\n *\n * @param tags -\n */\nexport function toBlobTagsString(tags) {\n if (tags === undefined) {\n return undefined;\n }\n const tagPairs = [];\n for (const key in tags) {\n if (Object.prototype.hasOwnProperty.call(tags, key)) {\n const value = tags[key];\n tagPairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n }\n }\n return tagPairs.join(\"&\");\n}\n/**\n * Convert Tags type to BlobTags.\n *\n * @param tags -\n */\nexport function toBlobTags(tags) {\n if (tags === undefined) {\n return undefined;\n }\n const res = {\n blobTagSet: []\n };\n for (const key in tags) {\n if (Object.prototype.hasOwnProperty.call(tags, key)) {\n const value = tags[key];\n res.blobTagSet.push({\n key,\n value\n });\n }\n }\n return res;\n}\n/**\n * Covert BlobTags to Tags type.\n *\n * @param tags -\n */\nexport function toTags(tags) {\n if (tags === undefined) {\n return undefined;\n }\n const res = {};\n for (const blobTag of tags.blobTagSet) {\n res[blobTag.key] = blobTag.value;\n }\n return res;\n}\n/**\n * Convert BlobQueryTextConfiguration to QuerySerialization type.\n *\n * @param textConfiguration -\n */\nexport function toQuerySerialization(textConfiguration) {\n if (textConfiguration === undefined) {\n return undefined;\n }\n switch (textConfiguration.kind) {\n case \"csv\":\n return {\n format: {\n type: \"delimited\",\n delimitedTextConfiguration: {\n columnSeparator: textConfiguration.columnSeparator || \",\",\n fieldQuote: textConfiguration.fieldQuote || \"\",\n recordSeparator: textConfiguration.recordSeparator,\n escapeChar: textConfiguration.escapeCharacter || \"\",\n headersPresent: textConfiguration.hasHeaders || false\n }\n }\n };\n case \"json\":\n return {\n format: {\n type: \"json\",\n jsonTextConfiguration: {\n recordSeparator: textConfiguration.recordSeparator\n }\n }\n };\n case \"arrow\":\n return {\n format: {\n type: \"arrow\",\n arrowConfiguration: {\n schema: textConfiguration.schema\n }\n }\n };\n case \"parquet\":\n return {\n format: {\n type: \"parquet\"\n }\n };\n default:\n throw Error(\"Invalid BlobQueryTextConfiguration.\");\n }\n}\nexport function parseObjectReplicationRecord(objectReplicationRecord) {\n if (!objectReplicationRecord) {\n return undefined;\n }\n if (\"policy-id\" in objectReplicationRecord) {\n // If the dictionary contains a key with policy id, we are not required to do any parsing since\n // the policy id should already be stored in the ObjectReplicationDestinationPolicyId.\n return undefined;\n }\n const orProperties = [];\n for (const key in objectReplicationRecord) {\n const ids = key.split(\"_\");\n const policyPrefix = \"or-\";\n if (ids[0].startsWith(policyPrefix)) {\n ids[0] = ids[0].substring(policyPrefix.length);\n }\n const rule = {\n ruleId: ids[1],\n replicationStatus: objectReplicationRecord[key]\n };\n const policyIndex = orProperties.findIndex(policy => policy.policyId === ids[0]);\n if (policyIndex > -1) {\n orProperties[policyIndex].rules.push(rule);\n } else {\n orProperties.push({\n policyId: ids[0],\n rules: [rule]\n });\n }\n }\n return orProperties;\n}\n/**\n * Attach a TokenCredential to an object.\n *\n * @param thing -\n * @param credential -\n */\nexport function attachCredential(thing, credential) {\n thing.credential = credential;\n return thing;\n}\nexport function httpAuthorizationToString(httpAuthorization) {\n return httpAuthorization ? httpAuthorization.scheme + \" \" + httpAuthorization.value : undefined;\n}\nexport function BlobNameToString(name) {\n if (name.encoded) {\n return decodeURIComponent(name.content);\n } else {\n return name.content;\n }\n}\nexport function ConvertInternalResponseOfListBlobFlat(internalResponse) {\n return Object.assign(Object.assign({}, internalResponse), {\n segment: {\n blobItems: internalResponse.segment.blobItems.map(blobItemInteral => {\n const blobItem = Object.assign(Object.assign({}, blobItemInteral), {\n name: BlobNameToString(blobItemInteral.name)\n });\n return blobItem;\n })\n }\n });\n}\nexport function ConvertInternalResponseOfListBlobHierarchy(internalResponse) {\n var _a;\n return Object.assign(Object.assign({}, internalResponse), {\n segment: {\n blobPrefixes: (_a = internalResponse.segment.blobPrefixes) === null || _a === void 0 ? void 0 : _a.map(blobPrefixInternal => {\n const blobPrefix = Object.assign(Object.assign({}, blobPrefixInternal), {\n name: BlobNameToString(blobPrefixInternal.name)\n });\n return blobPrefix;\n }),\n blobItems: internalResponse.segment.blobItems.map(blobItemInteral => {\n const blobItem = Object.assign(Object.assign({}, blobItemInteral), {\n name: BlobNameToString(blobItemInteral.name)\n });\n return blobItem;\n })\n }\n });\n}\nexport function* ExtractPageRangeInfoItems(getPageRangesSegment) {\n let pageRange = [];\n let clearRange = [];\n if (getPageRangesSegment.pageRange) pageRange = getPageRangesSegment.pageRange;\n if (getPageRangesSegment.clearRange) clearRange = getPageRangesSegment.clearRange;\n let pageRangeIndex = 0;\n let clearRangeIndex = 0;\n while (pageRangeIndex < pageRange.length && clearRangeIndex < clearRange.length) {\n if (pageRange[pageRangeIndex].start < clearRange[clearRangeIndex].start) {\n yield {\n start: pageRange[pageRangeIndex].start,\n end: pageRange[pageRangeIndex].end,\n isClear: false\n };\n ++pageRangeIndex;\n } else {\n yield {\n start: clearRange[clearRangeIndex].start,\n end: clearRange[clearRangeIndex].end,\n isClear: true\n };\n ++clearRangeIndex;\n }\n }\n for (; pageRangeIndex < pageRange.length; ++pageRangeIndex) {\n yield {\n start: pageRange[pageRangeIndex].start,\n end: pageRange[pageRangeIndex].end,\n isClear: false\n };\n }\n for (; clearRangeIndex < clearRange.length; ++clearRangeIndex) {\n yield {\n start: clearRange[clearRangeIndex].start,\n end: clearRange[clearRangeIndex].end,\n isClear: true\n };\n }\n}\n/**\n * Escape the blobName but keep path separator ('/').\n */\nexport function EscapePath(blobName) {\n const split = blobName.split(\"/\");\n for (let i = 0; i < split.length; i++) {\n split[i] = encodeURIComponent(split[i]);\n }\n return split.join(\"/\");\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy, isNode } from \"@azure/core-http\";\nimport { HeaderConstants, URLConstants } from \"../utils/constants\";\nimport { setURLParameter } from \"../utils/utils.common\";\n/**\n * StorageBrowserPolicy will handle differences between Node.js and browser runtime, including:\n *\n * 1. Browsers cache GET/HEAD requests by adding conditional headers such as 'IF_MODIFIED_SINCE'.\n * StorageBrowserPolicy is a policy used to add a timestamp query to GET/HEAD request URL\n * thus avoid the browser cache.\n *\n * 2. Remove cookie header for security\n *\n * 3. Remove content-length header to avoid browsers warning\n */\nexport class StorageBrowserPolicy extends BaseRequestPolicy {\n /**\n * Creates an instance of StorageBrowserPolicy.\n * @param nextPolicy -\n * @param options -\n */\n // The base class has a protected constructor. Adding a public one to enable constructing of this class.\n /* eslint-disable-next-line @typescript-eslint/no-useless-constructor*/\n constructor(nextPolicy, options) {\n super(nextPolicy, options);\n }\n /**\n * Sends out request.\n *\n * @param request -\n */\n async sendRequest(request) {\n if (isNode) {\n return this._nextPolicy.sendRequest(request);\n }\n if (request.method.toUpperCase() === \"GET\" || request.method.toUpperCase() === \"HEAD\") {\n request.url = setURLParameter(request.url, URLConstants.Parameters.FORCE_BROWSER_NO_CACHE, new Date().getTime().toString());\n }\n request.headers.remove(HeaderConstants.COOKIE);\n // According to XHR standards, content-length should be fully controlled by browsers\n request.headers.remove(HeaderConstants.CONTENT_LENGTH);\n return this._nextPolicy.sendRequest(request);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { StorageBrowserPolicy } from \"./policies/StorageBrowserPolicy\";\nexport { StorageBrowserPolicy };\n/**\n * StorageBrowserPolicyFactory is a factory class helping generating StorageBrowserPolicy objects.\n */\nexport class StorageBrowserPolicyFactory {\n /**\n * Creates a StorageBrowserPolicyFactory object.\n *\n * @param nextPolicy -\n * @param options -\n */\n create(nextPolicy, options) {\n return new StorageBrowserPolicy(nextPolicy, options);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { AbortError } from \"@azure/abort-controller\";\nimport { BaseRequestPolicy } from \"@azure/core-http\";\nimport { URLConstants } from \"../utils/constants\";\nimport { delay, setURLHost, setURLParameter } from \"../utils/utils.common\";\nimport { logger } from \"../log\";\n/**\n * A factory method used to generated a RetryPolicy factory.\n *\n * @param retryOptions -\n */\nexport function NewRetryPolicyFactory(retryOptions) {\n return {\n create: (nextPolicy, options) => {\n return new StorageRetryPolicy(nextPolicy, options, retryOptions);\n }\n };\n}\n/**\n * RetryPolicy types.\n */\nexport var StorageRetryPolicyType = /*#__PURE__*/function (StorageRetryPolicyType) {\n /**\n * Exponential retry. Retry time delay grows exponentially.\n */\n StorageRetryPolicyType[StorageRetryPolicyType[\"EXPONENTIAL\"] = 0] = \"EXPONENTIAL\";\n /**\n * Linear retry. Retry time delay grows linearly.\n */\n StorageRetryPolicyType[StorageRetryPolicyType[\"FIXED\"] = 1] = \"FIXED\";\n return StorageRetryPolicyType;\n}(StorageRetryPolicyType || {});\n// Default values of StorageRetryOptions\nconst DEFAULT_RETRY_OPTIONS = {\n maxRetryDelayInMs: 120 * 1000,\n maxTries: 4,\n retryDelayInMs: 4 * 1000,\n retryPolicyType: StorageRetryPolicyType.EXPONENTIAL,\n secondaryHost: \"\",\n tryTimeoutInMs: undefined // Use server side default timeout strategy\n};\nconst RETRY_ABORT_ERROR = new AbortError(\"The operation was aborted.\");\n/**\n * Retry policy with exponential retry and linear retry implemented.\n */\nexport class StorageRetryPolicy extends BaseRequestPolicy {\n /**\n * Creates an instance of RetryPolicy.\n *\n * @param nextPolicy -\n * @param options -\n * @param retryOptions -\n */\n constructor(nextPolicy, options, retryOptions = DEFAULT_RETRY_OPTIONS) {\n super(nextPolicy, options);\n // Initialize retry options\n this.retryOptions = {\n retryPolicyType: retryOptions.retryPolicyType ? retryOptions.retryPolicyType : DEFAULT_RETRY_OPTIONS.retryPolicyType,\n maxTries: retryOptions.maxTries && retryOptions.maxTries >= 1 ? Math.floor(retryOptions.maxTries) : DEFAULT_RETRY_OPTIONS.maxTries,\n tryTimeoutInMs: retryOptions.tryTimeoutInMs && retryOptions.tryTimeoutInMs >= 0 ? retryOptions.tryTimeoutInMs : DEFAULT_RETRY_OPTIONS.tryTimeoutInMs,\n retryDelayInMs: retryOptions.retryDelayInMs && retryOptions.retryDelayInMs >= 0 ? Math.min(retryOptions.retryDelayInMs, retryOptions.maxRetryDelayInMs ? retryOptions.maxRetryDelayInMs : DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs) : DEFAULT_RETRY_OPTIONS.retryDelayInMs,\n maxRetryDelayInMs: retryOptions.maxRetryDelayInMs && retryOptions.maxRetryDelayInMs >= 0 ? retryOptions.maxRetryDelayInMs : DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs,\n secondaryHost: retryOptions.secondaryHost ? retryOptions.secondaryHost : DEFAULT_RETRY_OPTIONS.secondaryHost\n };\n }\n /**\n * Sends request.\n *\n * @param request -\n */\n async sendRequest(request) {\n return this.attemptSendRequest(request, false, 1);\n }\n /**\n * Decide and perform next retry. Won't mutate request parameter.\n *\n * @param request -\n * @param secondaryHas404 - If attempt was against the secondary & it returned a StatusNotFound (404), then\n * the resource was not found. This may be due to replication delay. So, in this\n * case, we'll never try the secondary again for this operation.\n * @param attempt - How many retries has been attempted to performed, starting from 1, which includes\n * the attempt will be performed by this method call.\n */\n async attemptSendRequest(request, secondaryHas404, attempt) {\n const newRequest = request.clone();\n const isPrimaryRetry = secondaryHas404 || !this.retryOptions.secondaryHost || !(request.method === \"GET\" || request.method === \"HEAD\" || request.method === \"OPTIONS\") || attempt % 2 === 1;\n if (!isPrimaryRetry) {\n newRequest.url = setURLHost(newRequest.url, this.retryOptions.secondaryHost);\n }\n // Set the server-side timeout query parameter \"timeout=[seconds]\"\n if (this.retryOptions.tryTimeoutInMs) {\n newRequest.url = setURLParameter(newRequest.url, URLConstants.Parameters.TIMEOUT, Math.floor(this.retryOptions.tryTimeoutInMs / 1000).toString());\n }\n let response;\n try {\n logger.info(`RetryPolicy: =====> Try=${attempt} ${isPrimaryRetry ? \"Primary\" : \"Secondary\"}`);\n response = await this._nextPolicy.sendRequest(newRequest);\n if (!this.shouldRetry(isPrimaryRetry, attempt, response)) {\n return response;\n }\n secondaryHas404 = secondaryHas404 || !isPrimaryRetry && response.status === 404;\n } catch (err) {\n logger.error(`RetryPolicy: Caught error, message: ${err.message}, code: ${err.code}`);\n if (!this.shouldRetry(isPrimaryRetry, attempt, response, err)) {\n throw err;\n }\n }\n await this.delay(isPrimaryRetry, attempt, request.abortSignal);\n return this.attemptSendRequest(request, secondaryHas404, ++attempt);\n }\n /**\n * Decide whether to retry according to last HTTP response and retry counters.\n *\n * @param isPrimaryRetry -\n * @param attempt -\n * @param response -\n * @param err -\n */\n shouldRetry(isPrimaryRetry, attempt, response, err) {\n if (attempt >= this.retryOptions.maxTries) {\n logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${this.retryOptions.maxTries}, no further try.`);\n return false;\n }\n // Handle network failures, you may need to customize the list when you implement\n // your own http client\n const retriableErrors = [\"ETIMEDOUT\", \"ESOCKETTIMEDOUT\", \"ECONNREFUSED\", \"ECONNRESET\", \"ENOENT\", \"ENOTFOUND\", \"TIMEOUT\", \"EPIPE\", \"REQUEST_SEND_ERROR\" // For default xhr based http client provided in ms-rest-js\n ];\n if (err) {\n for (const retriableError of retriableErrors) {\n if (err.name.toUpperCase().includes(retriableError) || err.message.toUpperCase().includes(retriableError) || err.code && err.code.toString().toUpperCase() === retriableError) {\n logger.info(`RetryPolicy: Network error ${retriableError} found, will retry.`);\n return true;\n }\n }\n }\n // If attempt was against the secondary & it returned a StatusNotFound (404), then\n // the resource was not found. This may be due to replication delay. So, in this\n // case, we'll never try the secondary again for this operation.\n if (response || err) {\n const statusCode = response ? response.status : err ? err.statusCode : 0;\n if (!isPrimaryRetry && statusCode === 404) {\n logger.info(`RetryPolicy: Secondary access with 404, will retry.`);\n return true;\n }\n // Server internal error or server timeout\n if (statusCode === 503 || statusCode === 500) {\n logger.info(`RetryPolicy: Will retry for status code ${statusCode}.`);\n return true;\n }\n }\n if ((err === null || err === void 0 ? void 0 : err.code) === \"PARSE_ERROR\" && (err === null || err === void 0 ? void 0 : err.message.startsWith(`Error \"Error: Unclosed root tag`))) {\n logger.info(\"RetryPolicy: Incomplete XML response likely due to service timeout, will retry.\");\n return true;\n }\n return false;\n }\n /**\n * Delay a calculated time between retries.\n *\n * @param isPrimaryRetry -\n * @param attempt -\n * @param abortSignal -\n */\n async delay(isPrimaryRetry, attempt, abortSignal) {\n let delayTimeInMs = 0;\n if (isPrimaryRetry) {\n switch (this.retryOptions.retryPolicyType) {\n case StorageRetryPolicyType.EXPONENTIAL:\n delayTimeInMs = Math.min((Math.pow(2, attempt - 1) - 1) * this.retryOptions.retryDelayInMs, this.retryOptions.maxRetryDelayInMs);\n break;\n case StorageRetryPolicyType.FIXED:\n delayTimeInMs = this.retryOptions.retryDelayInMs;\n break;\n }\n } else {\n delayTimeInMs = Math.random() * 1000;\n }\n logger.info(`RetryPolicy: Delay for ${delayTimeInMs}ms`);\n return delay(delayTimeInMs, abortSignal, RETRY_ABORT_ERROR);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { StorageRetryPolicy, StorageRetryPolicyType } from \"./policies/StorageRetryPolicy\";\nexport { StorageRetryPolicyType, StorageRetryPolicy };\n/**\n * StorageRetryPolicyFactory is a factory class helping generating {@link StorageRetryPolicy} objects.\n */\nexport class StorageRetryPolicyFactory {\n /**\n * Creates an instance of StorageRetryPolicyFactory.\n * @param retryOptions -\n */\n constructor(retryOptions) {\n this.retryOptions = retryOptions;\n }\n /**\n * Creates a StorageRetryPolicy object.\n *\n * @param nextPolicy -\n * @param options -\n */\n create(nextPolicy, options) {\n return new StorageRetryPolicy(nextPolicy, options, this.retryOptions);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy } from \"@azure/core-http\";\n/**\n * Credential policy used to sign HTTP(S) requests before sending. This is an\n * abstract class.\n */\nexport class CredentialPolicy extends BaseRequestPolicy {\n /**\n * Sends out request.\n *\n * @param request -\n */\n sendRequest(request) {\n return this._nextPolicy.sendRequest(this.signRequest(request));\n }\n /**\n * Child classes must implement this method with request signing. This method\n * will be executed in {@link sendRequest}.\n *\n * @param request -\n */\n signRequest(request) {\n // Child classes must override this method with request signing. This method\n // will be executed in sendRequest().\n return request;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CredentialPolicy } from \"./CredentialPolicy\";\n/**\n * AnonymousCredentialPolicy is used with HTTP(S) requests that read public resources\n * or for use with Shared Access Signatures (SAS).\n */\nexport class AnonymousCredentialPolicy extends CredentialPolicy {\n /**\n * Creates an instance of AnonymousCredentialPolicy.\n * @param nextPolicy -\n * @param options -\n */\n // The base class has a protected constructor. Adding a public one to enable constructing of this class.\n /* eslint-disable-next-line @typescript-eslint/no-useless-constructor*/\n constructor(nextPolicy, options) {\n super(nextPolicy, options);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Credential is an abstract class for Azure Storage HTTP requests signing. This\n * class will host an credentialPolicyCreator factory which generates CredentialPolicy.\n */\nexport class Credential {\n /**\n * Creates a RequestPolicy object.\n *\n * @param _nextPolicy -\n * @param _options -\n */\n create(_nextPolicy, _options) {\n throw new Error(\"Method should be implemented in children classes.\");\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { AnonymousCredentialPolicy } from \"../policies/AnonymousCredentialPolicy\";\nimport { Credential } from \"./Credential\";\n/**\n * AnonymousCredential provides a credentialPolicyCreator member used to create\n * AnonymousCredentialPolicy objects. AnonymousCredentialPolicy is used with\n * HTTP(S) requests that read public resources or for use with Shared Access\n * Signatures (SAS).\n */\nexport class AnonymousCredential extends Credential {\n /**\n * Creates an {@link AnonymousCredentialPolicy} object.\n *\n * @param nextPolicy -\n * @param options -\n */\n create(nextPolicy, options) {\n return new AnonymousCredentialPolicy(nextPolicy, options);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { isNode } from \"@azure/core-http\";\nimport * as os from \"os\";\nimport { TelemetryPolicy } from \"./policies/TelemetryPolicy\";\nimport { SDK_VERSION } from \"./utils/constants\";\n/**\n * TelemetryPolicyFactory is a factory class helping generating {@link TelemetryPolicy} objects.\n */\nexport class TelemetryPolicyFactory {\n /**\n * Creates an instance of TelemetryPolicyFactory.\n * @param telemetry -\n */\n constructor(telemetry) {\n const userAgentInfo = [];\n if (isNode) {\n if (telemetry) {\n const telemetryString = telemetry.userAgentPrefix || \"\";\n if (telemetryString.length > 0 && userAgentInfo.indexOf(telemetryString) === -1) {\n userAgentInfo.push(telemetryString);\n }\n }\n // e.g. azsdk-js-storageblob/10.0.0\n const libInfo = `azsdk-js-storageblob/${SDK_VERSION}`;\n if (userAgentInfo.indexOf(libInfo) === -1) {\n userAgentInfo.push(libInfo);\n }\n // e.g. (NODE-VERSION 4.9.1; Windows_NT 10.0.16299)\n let runtimeInfo = `(NODE-VERSION ${process.version})`;\n if (os) {\n runtimeInfo = `(NODE-VERSION ${process.version}; ${os.type()} ${os.release()})`;\n }\n if (userAgentInfo.indexOf(runtimeInfo) === -1) {\n userAgentInfo.push(runtimeInfo);\n }\n }\n this.telemetryString = userAgentInfo.join(\" \");\n }\n /**\n * Creates a TelemetryPolicy object.\n *\n * @param nextPolicy -\n * @param options -\n */\n create(nextPolicy, options) {\n return new TelemetryPolicy(nextPolicy, options, this.telemetryString);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy, HttpHeaders, isNode } from \"@azure/core-http\";\nimport { HeaderConstants } from \"../utils/constants\";\n/**\n * TelemetryPolicy is a policy used to tag user-agent header for every requests.\n */\nexport class TelemetryPolicy extends BaseRequestPolicy {\n /**\n * Creates an instance of TelemetryPolicy.\n * @param nextPolicy -\n * @param options -\n * @param telemetry -\n */\n constructor(nextPolicy, options, telemetry) {\n super(nextPolicy, options);\n this.telemetry = telemetry;\n }\n /**\n * Sends out request.\n *\n * @param request -\n */\n async sendRequest(request) {\n if (isNode) {\n if (!request.headers) {\n request.headers = new HttpHeaders();\n }\n if (!request.headers.get(HeaderConstants.USER_AGENT)) {\n request.headers.set(HeaderConstants.USER_AGENT, this.telemetry);\n }\n }\n return this._nextPolicy.sendRequest(request);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { DefaultHttpClient } from \"@azure/core-http\";\nconst _defaultHttpClient = new DefaultHttpClient();\nexport function getCachedDefaultHttpClient() {\n return _defaultHttpClient;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { URLBuilder } from \"@azure/core-http\";\nimport { BaseRequestPolicy } from \"@azure/core-http\";\nimport { delay } from \"@azure/core-http\";\n/**\n * A set of constants used internally when processing requests.\n */\nconst Constants = {\n DefaultScope: \"/.default\",\n /**\n * Defines constants for use with HTTP headers.\n */\n HeaderConstants: {\n /**\n * The Authorization header.\n */\n AUTHORIZATION: \"authorization\"\n }\n};\n// Default options for the cycler if none are provided\nconst DEFAULT_CYCLER_OPTIONS = {\n forcedRefreshWindowInMs: 1000,\n retryIntervalInMs: 3000,\n refreshWindowInMs: 1000 * 60 * 2 // Start refreshing 2m before expiry\n};\n/**\n * Converts an an unreliable access token getter (which may resolve with null)\n * into an AccessTokenGetter by retrying the unreliable getter in a regular\n * interval.\n *\n * @param getAccessToken - a function that produces a promise of an access\n * token that may fail by returning null\n * @param retryIntervalInMs - the time (in milliseconds) to wait between retry\n * attempts\n * @param timeoutInMs - the timestamp after which the refresh attempt will fail,\n * throwing an exception\n * @returns - a promise that, if it resolves, will resolve with an access token\n */\nasync function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {\n // This wrapper handles exceptions gracefully as long as we haven't exceeded\n // the timeout.\n async function tryGetAccessToken() {\n if (Date.now() < timeoutInMs) {\n try {\n return await getAccessToken();\n } catch (_a) {\n return null;\n }\n } else {\n const finalToken = await getAccessToken();\n // Timeout is up, so throw if it's still null\n if (finalToken === null) {\n throw new Error(\"Failed to refresh access token.\");\n }\n return finalToken;\n }\n }\n let token = await tryGetAccessToken();\n while (token === null) {\n await delay(retryIntervalInMs);\n token = await tryGetAccessToken();\n }\n return token;\n}\n/**\n * Creates a token cycler from a credential, scopes, and optional settings.\n *\n * A token cycler represents a way to reliably retrieve a valid access token\n * from a TokenCredential. It will handle initializing the token, refreshing it\n * when it nears expiration, and synchronizes refresh attempts to avoid\n * concurrency hazards.\n *\n * @param credential - the underlying TokenCredential that provides the access\n * token\n * @param scopes - the scopes to request authorization for\n * @param tokenCyclerOptions - optionally override default settings for the cycler\n *\n * @returns - a function that reliably produces a valid access token\n */\nfunction createTokenCycler(credential, scopes, tokenCyclerOptions) {\n let refreshWorker = null;\n let token = null;\n const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);\n /**\n * This little holder defines several predicates that we use to construct\n * the rules of refreshing the token.\n */\n const cycler = {\n /**\n * Produces true if a refresh job is currently in progress.\n */\n get isRefreshing() {\n return refreshWorker !== null;\n },\n /**\n * Produces true if the cycler SHOULD refresh (we are within the refresh\n * window and not already refreshing)\n */\n get shouldRefresh() {\n var _a;\n return !cycler.isRefreshing && ((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now();\n },\n /**\n * Produces true if the cycler MUST refresh (null or nearly-expired\n * token).\n */\n get mustRefresh() {\n return token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now();\n }\n };\n /**\n * Starts a refresh job or returns the existing job if one is already\n * running.\n */\n function refresh(getTokenOptions) {\n var _a;\n if (!cycler.isRefreshing) {\n // We bind `scopes` here to avoid passing it around a lot\n const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);\n // Take advantage of promise chaining to insert an assignment to `token`\n // before the refresh can be considered done.\n refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,\n // If we don't have a token, then we should timeout immediately\n (_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now()).then(_token => {\n refreshWorker = null;\n token = _token;\n return token;\n }).catch(reason => {\n // We also should reset the refresher if we enter a failed state. All\n // existing awaiters will throw, but subsequent requests will start a\n // new retry chain.\n refreshWorker = null;\n token = null;\n throw reason;\n });\n }\n return refreshWorker;\n }\n return async tokenOptions => {\n //\n // Simple rules:\n // - If we MUST refresh, then return the refresh task, blocking\n // the pipeline until a token is available.\n // - If we SHOULD refresh, then run refresh but don't return it\n // (we can still use the cached token).\n // - Return the token, since it's fine if we didn't return in\n // step 1.\n //\n if (cycler.mustRefresh) return refresh(tokenOptions);\n if (cycler.shouldRefresh) {\n refresh(tokenOptions);\n }\n return token;\n };\n}\n/**\n * We will retrieve the challenge only if the response status code was 401,\n * and if the response contained the header \"WWW-Authenticate\" with a non-empty value.\n */\nfunction getChallenge(response) {\n const challenge = response.headers.get(\"WWW-Authenticate\");\n if (response.status === 401 && challenge) {\n return challenge;\n }\n return;\n}\n/**\n * Converts: `Bearer a=\"b\" c=\"d\"`.\n * Into: `[ { a: 'b', c: 'd' }]`.\n *\n * @internal\n */\nfunction parseChallenge(challenge) {\n const bearerChallenge = challenge.slice(\"Bearer \".length);\n const challengeParts = `${bearerChallenge.trim()} `.split(\" \").filter(x => x);\n const keyValuePairs = challengeParts.map(keyValue => (([key, value]) => ({\n [key]: value\n }))(keyValue.trim().split(\"=\")));\n // Key-value pairs to plain object:\n return keyValuePairs.reduce((a, b) => Object.assign(Object.assign({}, a), b), {});\n}\n// #endregion\n/**\n * Creates a new factory for a RequestPolicy that applies a bearer token to\n * the requests' `Authorization` headers.\n *\n * @param credential - The TokenCredential implementation that can supply the bearer token.\n * @param scopes - The scopes for which the bearer token applies.\n */\nexport function storageBearerTokenChallengeAuthenticationPolicy(credential, scopes) {\n // This simple function encapsulates the entire process of reliably retrieving the token\n let getToken = createTokenCycler(credential, scopes);\n class StorageBearerTokenChallengeAuthenticationPolicy extends BaseRequestPolicy {\n constructor(nextPolicy, options) {\n super(nextPolicy, options);\n }\n async sendRequest(webResource) {\n if (!webResource.url.toLowerCase().startsWith(\"https://\")) {\n throw new Error(\"Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.\");\n }\n const getTokenInternal = getToken;\n const token = (await getTokenInternal({\n abortSignal: webResource.abortSignal,\n tracingOptions: {\n tracingContext: webResource.tracingContext\n }\n })).token;\n webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);\n const response = await this._nextPolicy.sendRequest(webResource);\n if ((response === null || response === void 0 ? void 0 : response.status) === 401) {\n const challenge = getChallenge(response);\n if (challenge) {\n const challengeInfo = parseChallenge(challenge);\n const challengeScopes = challengeInfo.resource_id + Constants.DefaultScope;\n const parsedAuthUri = URLBuilder.parse(challengeInfo.authorization_uri);\n const pathSegments = parsedAuthUri.getPath().split(\"/\");\n const tenantId = pathSegments[1];\n const getTokenForChallenge = createTokenCycler(credential, challengeScopes);\n const tokenForChallenge = (await getTokenForChallenge({\n abortSignal: webResource.abortSignal,\n tracingOptions: {\n tracingContext: webResource.tracingContext\n },\n tenantId: tenantId\n })).token;\n getToken = getTokenForChallenge;\n webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${tokenForChallenge}`);\n return this._nextPolicy.sendRequest(webResource);\n }\n }\n return response;\n }\n }\n return {\n create: (nextPolicy, options) => {\n return new StorageBearerTokenChallengeAuthenticationPolicy(nextPolicy, options);\n }\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy, deserializationPolicy, disableResponseDecompressionPolicy, HttpHeaders, RequestPolicyOptions, WebResource, proxyPolicy, isNode, isTokenCredential, tracingPolicy, logPolicy, keepAlivePolicy, generateClientRequestIdPolicy } from \"@azure/core-http\";\nimport { logger } from \"./log\";\nimport { StorageBrowserPolicyFactory } from \"./StorageBrowserPolicyFactory\";\nimport { StorageRetryPolicyFactory } from \"./StorageRetryPolicyFactory\";\nimport { AnonymousCredential } from \"./credentials/AnonymousCredential\";\nimport { StorageOAuthScopes, StorageBlobLoggingAllowedHeaderNames, StorageBlobLoggingAllowedQueryParameters } from \"./utils/constants\";\nimport { TelemetryPolicyFactory } from \"./TelemetryPolicyFactory\";\nimport { getCachedDefaultHttpClient } from \"./utils/cache\";\nimport { attachCredential } from \"./utils/utils.common\";\nimport { storageBearerTokenChallengeAuthenticationPolicy } from \"./policies/StorageBearerTokenChallengeAuthenticationPolicy\";\n// Export following interfaces and types for customers who want to implement their\n// own RequestPolicy or HTTPClient\nexport { BaseRequestPolicy, StorageOAuthScopes, deserializationPolicy, HttpHeaders, WebResource, RequestPolicyOptions };\n/**\n * A helper to decide if a given argument satisfies the Pipeline contract\n * @param pipeline - An argument that may be a Pipeline\n * @returns true when the argument satisfies the Pipeline contract\n */\nexport function isPipelineLike(pipeline) {\n if (!pipeline || typeof pipeline !== \"object\") {\n return false;\n }\n const castPipeline = pipeline;\n return Array.isArray(castPipeline.factories) && typeof castPipeline.options === \"object\" && typeof castPipeline.toServiceClientOptions === \"function\";\n}\n/**\n * A Pipeline class containing HTTP request policies.\n * You can create a default Pipeline by calling {@link newPipeline}.\n * Or you can create a Pipeline with your own policies by the constructor of Pipeline.\n *\n * Refer to {@link newPipeline} and provided policies before implementing your\n * customized Pipeline.\n */\nexport class Pipeline {\n /**\n * Creates an instance of Pipeline. Customize HTTPClient by implementing IHttpClient interface.\n *\n * @param factories -\n * @param options -\n */\n constructor(factories, options = {}) {\n this.factories = factories;\n // when options.httpClient is not specified, passing in a DefaultHttpClient instance to\n // avoid each client creating its own http client.\n this.options = Object.assign(Object.assign({}, options), {\n httpClient: options.httpClient || getCachedDefaultHttpClient()\n });\n }\n /**\n * Transfer Pipeline object to ServiceClientOptions object which is required by\n * ServiceClient constructor.\n *\n * @returns The ServiceClientOptions object from this Pipeline.\n */\n toServiceClientOptions() {\n return {\n httpClient: this.options.httpClient,\n requestPolicyFactories: this.factories\n };\n }\n}\n/**\n * Creates a new Pipeline object with Credential provided.\n *\n * @param credential - Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the `@azure/identity` package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used.\n * @param pipelineOptions - Optional. Options.\n * @returns A new Pipeline object.\n */\nexport function newPipeline(credential, pipelineOptions = {}) {\n var _a;\n if (credential === undefined) {\n credential = new AnonymousCredential();\n }\n // Order is important. Closer to the API at the top & closer to the network at the bottom.\n // The credential's policy factory must appear close to the wire so it can sign any\n // changes made by other factories (like UniqueRequestIDPolicyFactory)\n const telemetryPolicy = new TelemetryPolicyFactory(pipelineOptions.userAgentOptions);\n const factories = [tracingPolicy({\n userAgent: telemetryPolicy.telemetryString\n }), keepAlivePolicy(pipelineOptions.keepAliveOptions), telemetryPolicy, generateClientRequestIdPolicy(), new StorageBrowserPolicyFactory(), new StorageRetryPolicyFactory(pipelineOptions.retryOptions),\n // Default deserializationPolicy is provided by protocol layer\n // Use customized XML char key of \"#\" so we could deserialize metadata\n // with \"_\" key\n deserializationPolicy(undefined, {\n xmlCharKey: \"#\"\n }), logPolicy({\n logger: logger.info,\n allowedHeaderNames: StorageBlobLoggingAllowedHeaderNames,\n allowedQueryParameters: StorageBlobLoggingAllowedQueryParameters\n })];\n if (isNode) {\n // policies only available in Node.js runtime, not in browsers\n factories.push(proxyPolicy(pipelineOptions.proxyOptions));\n factories.push(disableResponseDecompressionPolicy());\n }\n factories.push(isTokenCredential(credential) ? attachCredential(storageBearerTokenChallengeAuthenticationPolicy(credential, (_a = pipelineOptions.audience) !== null && _a !== void 0 ? _a : StorageOAuthScopes), credential) : credential);\n return new Pipeline(factories, pipelineOptions);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport class StorageSharedKeyCredential {}\n","/*\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\n */\nimport * as coreHttp from \"@azure/core-http\";\nconst packageName = \"azure-storage-blob\";\nconst packageVersion = \"12.17.0\";\nexport class StorageClientContext extends coreHttp.ServiceClient {\n /**\n * Initializes a new instance of the StorageClientContext class.\n * @param url The URL of the service account, container, or blob that is the target of the desired\n * operation.\n * @param options The parameter options\n */\n constructor(url, options) {\n if (url === undefined) {\n throw new Error(\"'url' cannot be null\");\n }\n // Initializing default values for options\n if (!options) {\n options = {};\n }\n if (!options.userAgent) {\n const defaultUserAgent = coreHttp.getDefaultUserAgentValue();\n options.userAgent = `${packageName}/${packageVersion} ${defaultUserAgent}`;\n }\n super(undefined, options);\n this.requestContentType = \"application/json; charset=utf-8\";\n this.baseUri = options.endpoint || \"{url}\";\n // Parameter assignments\n this.url = url;\n // Assigning values to Constant parameters\n this.version = options.version || \"2023-11-03\";\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { StorageClientContext } from \"./generated/src/storageClientContext\";\nimport { escapeURLPath, getURLScheme, iEqual, getAccountNameFromUrl } from \"./utils/utils.common\";\nimport { AnonymousCredential } from \"./credentials/AnonymousCredential\";\nimport { StorageSharedKeyCredential } from \"./credentials/StorageSharedKeyCredential\";\nimport { isTokenCredential, isNode } from \"@azure/core-http\";\n/**\n * A StorageClient represents a based URL class for {@link BlobServiceClient}, {@link ContainerClient}\n * and etc.\n */\nexport class StorageClient {\n /**\n * Creates an instance of StorageClient.\n * @param url - url to resource\n * @param pipeline - request policy pipeline.\n */\n constructor(url, pipeline) {\n // URL should be encoded and only once, protocol layer shouldn't encode URL again\n this.url = escapeURLPath(url);\n this.accountName = getAccountNameFromUrl(url);\n this.pipeline = pipeline;\n this.storageClientContext = new StorageClientContext(this.url, pipeline.toServiceClientOptions());\n this.isHttps = iEqual(getURLScheme(this.url) || \"\", \"https\");\n this.credential = new AnonymousCredential();\n for (const factory of this.pipeline.factories) {\n if (isNode && factory instanceof StorageSharedKeyCredential || factory instanceof AnonymousCredential) {\n this.credential = factory;\n } else if (isTokenCredential(factory.credential)) {\n // Only works if the factory has been attached a \"credential\" property.\n // We do that in newPipeline() when using TokenCredential.\n this.credential = factory.credential;\n }\n }\n // Override protocol layer's default content-type\n const storageClientContext = this.storageClientContext;\n storageClientContext.requestContentType = undefined;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { createSpanFunction } from \"@azure/core-tracing\";\n/**\n * Creates a span using the global tracer.\n * @internal\n */\nexport const createSpan = createSpanFunction({\n packagePrefix: \"Azure.Storage.Blob\",\n namespace: \"Microsoft.Storage\"\n});\n/**\n * @internal\n *\n * Adapt the tracing options from OperationOptions to what they need to be for\n * RequestOptionsBase (when we update to later OpenTelemetry versions this is now\n * two separate fields, not just one).\n */\nexport function convertTracingToRequestOptionsBase(options) {\n var _a, _b;\n return {\n // By passing spanOptions if they exist at runtime, we're backwards compatible with @azure/core-tracing@preview.13 and earlier.\n spanOptions: (_a = options === null || options === void 0 ? void 0 : options.tracingOptions) === null || _a === void 0 ? void 0 : _a.spanOptions,\n tracingContext: (_b = options === null || options === void 0 ? void 0 : options.tracingOptions) === null || _b === void 0 ? void 0 : _b.tracingContext\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n *\n * This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a blob. Setting\n * a value to true means that any SAS which uses these permissions will grant permissions for that operation. Once all\n * the values are set, this should be serialized with toString and set as the permissions field on a\n * {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but\n * the order of the permissions is particular and this class guarantees correctness.\n */\nexport class BlobSASPermissions {\n constructor() {\n /**\n * Specifies Read access granted.\n */\n this.read = false;\n /**\n * Specifies Add access granted.\n */\n this.add = false;\n /**\n * Specifies Create access granted.\n */\n this.create = false;\n /**\n * Specifies Write access granted.\n */\n this.write = false;\n /**\n * Specifies Delete access granted.\n */\n this.delete = false;\n /**\n * Specifies Delete version access granted.\n */\n this.deleteVersion = false;\n /**\n * Specfies Tag access granted.\n */\n this.tag = false;\n /**\n * Specifies Move access granted.\n */\n this.move = false;\n /**\n * Specifies Execute access granted.\n */\n this.execute = false;\n /**\n * Specifies SetImmutabilityPolicy access granted.\n */\n this.setImmutabilityPolicy = false;\n /**\n * Specifies that Permanent Delete is permitted.\n */\n this.permanentDelete = false;\n }\n /**\n * Creates a {@link BlobSASPermissions} from the specified permissions string. This method will throw an\n * Error if it encounters a character that does not correspond to a valid permission.\n *\n * @param permissions -\n */\n static parse(permissions) {\n const blobSASPermissions = new BlobSASPermissions();\n for (const char of permissions) {\n switch (char) {\n case \"r\":\n blobSASPermissions.read = true;\n break;\n case \"a\":\n blobSASPermissions.add = true;\n break;\n case \"c\":\n blobSASPermissions.create = true;\n break;\n case \"w\":\n blobSASPermissions.write = true;\n break;\n case \"d\":\n blobSASPermissions.delete = true;\n break;\n case \"x\":\n blobSASPermissions.deleteVersion = true;\n break;\n case \"t\":\n blobSASPermissions.tag = true;\n break;\n case \"m\":\n blobSASPermissions.move = true;\n break;\n case \"e\":\n blobSASPermissions.execute = true;\n break;\n case \"i\":\n blobSASPermissions.setImmutabilityPolicy = true;\n break;\n case \"y\":\n blobSASPermissions.permanentDelete = true;\n break;\n default:\n throw new RangeError(`Invalid permission: ${char}`);\n }\n }\n return blobSASPermissions;\n }\n /**\n * Creates a {@link BlobSASPermissions} from a raw object which contains same keys as it\n * and boolean values for them.\n *\n * @param permissionLike -\n */\n static from(permissionLike) {\n const blobSASPermissions = new BlobSASPermissions();\n if (permissionLike.read) {\n blobSASPermissions.read = true;\n }\n if (permissionLike.add) {\n blobSASPermissions.add = true;\n }\n if (permissionLike.create) {\n blobSASPermissions.create = true;\n }\n if (permissionLike.write) {\n blobSASPermissions.write = true;\n }\n if (permissionLike.delete) {\n blobSASPermissions.delete = true;\n }\n if (permissionLike.deleteVersion) {\n blobSASPermissions.deleteVersion = true;\n }\n if (permissionLike.tag) {\n blobSASPermissions.tag = true;\n }\n if (permissionLike.move) {\n blobSASPermissions.move = true;\n }\n if (permissionLike.execute) {\n blobSASPermissions.execute = true;\n }\n if (permissionLike.setImmutabilityPolicy) {\n blobSASPermissions.setImmutabilityPolicy = true;\n }\n if (permissionLike.permanentDelete) {\n blobSASPermissions.permanentDelete = true;\n }\n return blobSASPermissions;\n }\n /**\n * Converts the given permissions to a string. Using this method will guarantee the permissions are in an\n * order accepted by the service.\n *\n * @returns A string which represents the BlobSASPermissions\n */\n toString() {\n const permissions = [];\n if (this.read) {\n permissions.push(\"r\");\n }\n if (this.add) {\n permissions.push(\"a\");\n }\n if (this.create) {\n permissions.push(\"c\");\n }\n if (this.write) {\n permissions.push(\"w\");\n }\n if (this.delete) {\n permissions.push(\"d\");\n }\n if (this.deleteVersion) {\n permissions.push(\"x\");\n }\n if (this.tag) {\n permissions.push(\"t\");\n }\n if (this.move) {\n permissions.push(\"m\");\n }\n if (this.execute) {\n permissions.push(\"e\");\n }\n if (this.setImmutabilityPolicy) {\n permissions.push(\"i\");\n }\n if (this.permanentDelete) {\n permissions.push(\"y\");\n }\n return permissions.join(\"\");\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a container.\n * Setting a value to true means that any SAS which uses these permissions will grant permissions for that operation.\n * Once all the values are set, this should be serialized with toString and set as the permissions field on a\n * {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but\n * the order of the permissions is particular and this class guarantees correctness.\n */\nexport class ContainerSASPermissions {\n constructor() {\n /**\n * Specifies Read access granted.\n */\n this.read = false;\n /**\n * Specifies Add access granted.\n */\n this.add = false;\n /**\n * Specifies Create access granted.\n */\n this.create = false;\n /**\n * Specifies Write access granted.\n */\n this.write = false;\n /**\n * Specifies Delete access granted.\n */\n this.delete = false;\n /**\n * Specifies Delete version access granted.\n */\n this.deleteVersion = false;\n /**\n * Specifies List access granted.\n */\n this.list = false;\n /**\n * Specfies Tag access granted.\n */\n this.tag = false;\n /**\n * Specifies Move access granted.\n */\n this.move = false;\n /**\n * Specifies Execute access granted.\n */\n this.execute = false;\n /**\n * Specifies SetImmutabilityPolicy access granted.\n */\n this.setImmutabilityPolicy = false;\n /**\n * Specifies that Permanent Delete is permitted.\n */\n this.permanentDelete = false;\n /**\n * Specifies that Filter Blobs by Tags is permitted.\n */\n this.filterByTags = false;\n }\n /**\n * Creates an {@link ContainerSASPermissions} from the specified permissions string. This method will throw an\n * Error if it encounters a character that does not correspond to a valid permission.\n *\n * @param permissions -\n */\n static parse(permissions) {\n const containerSASPermissions = new ContainerSASPermissions();\n for (const char of permissions) {\n switch (char) {\n case \"r\":\n containerSASPermissions.read = true;\n break;\n case \"a\":\n containerSASPermissions.add = true;\n break;\n case \"c\":\n containerSASPermissions.create = true;\n break;\n case \"w\":\n containerSASPermissions.write = true;\n break;\n case \"d\":\n containerSASPermissions.delete = true;\n break;\n case \"l\":\n containerSASPermissions.list = true;\n break;\n case \"t\":\n containerSASPermissions.tag = true;\n break;\n case \"x\":\n containerSASPermissions.deleteVersion = true;\n break;\n case \"m\":\n containerSASPermissions.move = true;\n break;\n case \"e\":\n containerSASPermissions.execute = true;\n break;\n case \"i\":\n containerSASPermissions.setImmutabilityPolicy = true;\n break;\n case \"y\":\n containerSASPermissions.permanentDelete = true;\n break;\n case \"f\":\n containerSASPermissions.filterByTags = true;\n break;\n default:\n throw new RangeError(`Invalid permission ${char}`);\n }\n }\n return containerSASPermissions;\n }\n /**\n * Creates a {@link ContainerSASPermissions} from a raw object which contains same keys as it\n * and boolean values for them.\n *\n * @param permissionLike -\n */\n static from(permissionLike) {\n const containerSASPermissions = new ContainerSASPermissions();\n if (permissionLike.read) {\n containerSASPermissions.read = true;\n }\n if (permissionLike.add) {\n containerSASPermissions.add = true;\n }\n if (permissionLike.create) {\n containerSASPermissions.create = true;\n }\n if (permissionLike.write) {\n containerSASPermissions.write = true;\n }\n if (permissionLike.delete) {\n containerSASPermissions.delete = true;\n }\n if (permissionLike.list) {\n containerSASPermissions.list = true;\n }\n if (permissionLike.deleteVersion) {\n containerSASPermissions.deleteVersion = true;\n }\n if (permissionLike.tag) {\n containerSASPermissions.tag = true;\n }\n if (permissionLike.move) {\n containerSASPermissions.move = true;\n }\n if (permissionLike.execute) {\n containerSASPermissions.execute = true;\n }\n if (permissionLike.setImmutabilityPolicy) {\n containerSASPermissions.setImmutabilityPolicy = true;\n }\n if (permissionLike.permanentDelete) {\n containerSASPermissions.permanentDelete = true;\n }\n if (permissionLike.filterByTags) {\n containerSASPermissions.filterByTags = true;\n }\n return containerSASPermissions;\n }\n /**\n * Converts the given permissions to a string. Using this method will guarantee the permissions are in an\n * order accepted by the service.\n *\n * The order of the characters should be as specified here to ensure correctness.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas\n *\n */\n toString() {\n const permissions = [];\n if (this.read) {\n permissions.push(\"r\");\n }\n if (this.add) {\n permissions.push(\"a\");\n }\n if (this.create) {\n permissions.push(\"c\");\n }\n if (this.write) {\n permissions.push(\"w\");\n }\n if (this.delete) {\n permissions.push(\"d\");\n }\n if (this.deleteVersion) {\n permissions.push(\"x\");\n }\n if (this.list) {\n permissions.push(\"l\");\n }\n if (this.tag) {\n permissions.push(\"t\");\n }\n if (this.move) {\n permissions.push(\"m\");\n }\n if (this.execute) {\n permissions.push(\"e\");\n }\n if (this.setImmutabilityPolicy) {\n permissions.push(\"i\");\n }\n if (this.permanentDelete) {\n permissions.push(\"y\");\n }\n if (this.filterByTags) {\n permissions.push(\"f\");\n }\n return permissions.join(\"\");\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport class UserDelegationKeyCredential {}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Generate SasIPRange format string. For example:\n *\n * \"8.8.8.8\" or \"1.1.1.1-255.255.255.255\"\n *\n * @param ipRange -\n */\nexport function ipRangeToString(ipRange) {\n return ipRange.end ? `${ipRange.start}-${ipRange.end}` : ipRange.start;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ipRangeToString } from \"./SasIPRange\";\nimport { truncatedISO8061Date } from \"../utils/utils.common\";\n/**\n * Protocols for generated SAS.\n */\nexport var SASProtocol = /*#__PURE__*/function (SASProtocol) {\n /**\n * Protocol that allows HTTPS only\n */\n SASProtocol[\"Https\"] = \"https\";\n /**\n * Protocol that allows both HTTPS and HTTP\n */\n SASProtocol[\"HttpsAndHttp\"] = \"https,http\";\n return SASProtocol;\n}(SASProtocol || {});\n/**\n * Represents the components that make up an Azure Storage SAS' query parameters. This type is not constructed directly\n * by the user; it is only generated by the {@link AccountSASSignatureValues} and {@link BlobSASSignatureValues}\n * types. Once generated, it can be encoded into a {@link String} and appended to a URL directly (though caution should\n * be taken here in case there are existing query parameters, which might affect the appropriate means of appending\n * these query parameters).\n *\n * NOTE: Instances of this class are immutable.\n */\nexport class SASQueryParameters {\n constructor(version, signature, permissionsOrOptions, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, userDelegationKey, preauthorizedAgentObjectId, correlationId, encryptionScope) {\n this.version = version;\n this.signature = signature;\n if (permissionsOrOptions !== undefined && typeof permissionsOrOptions !== \"string\") {\n // SASQueryParametersOptions\n this.permissions = permissionsOrOptions.permissions;\n this.services = permissionsOrOptions.services;\n this.resourceTypes = permissionsOrOptions.resourceTypes;\n this.protocol = permissionsOrOptions.protocol;\n this.startsOn = permissionsOrOptions.startsOn;\n this.expiresOn = permissionsOrOptions.expiresOn;\n this.ipRangeInner = permissionsOrOptions.ipRange;\n this.identifier = permissionsOrOptions.identifier;\n this.encryptionScope = permissionsOrOptions.encryptionScope;\n this.resource = permissionsOrOptions.resource;\n this.cacheControl = permissionsOrOptions.cacheControl;\n this.contentDisposition = permissionsOrOptions.contentDisposition;\n this.contentEncoding = permissionsOrOptions.contentEncoding;\n this.contentLanguage = permissionsOrOptions.contentLanguage;\n this.contentType = permissionsOrOptions.contentType;\n if (permissionsOrOptions.userDelegationKey) {\n this.signedOid = permissionsOrOptions.userDelegationKey.signedObjectId;\n this.signedTenantId = permissionsOrOptions.userDelegationKey.signedTenantId;\n this.signedStartsOn = permissionsOrOptions.userDelegationKey.signedStartsOn;\n this.signedExpiresOn = permissionsOrOptions.userDelegationKey.signedExpiresOn;\n this.signedService = permissionsOrOptions.userDelegationKey.signedService;\n this.signedVersion = permissionsOrOptions.userDelegationKey.signedVersion;\n this.preauthorizedAgentObjectId = permissionsOrOptions.preauthorizedAgentObjectId;\n this.correlationId = permissionsOrOptions.correlationId;\n }\n } else {\n this.services = services;\n this.resourceTypes = resourceTypes;\n this.expiresOn = expiresOn;\n this.permissions = permissionsOrOptions;\n this.protocol = protocol;\n this.startsOn = startsOn;\n this.ipRangeInner = ipRange;\n this.encryptionScope = encryptionScope;\n this.identifier = identifier;\n this.resource = resource;\n this.cacheControl = cacheControl;\n this.contentDisposition = contentDisposition;\n this.contentEncoding = contentEncoding;\n this.contentLanguage = contentLanguage;\n this.contentType = contentType;\n if (userDelegationKey) {\n this.signedOid = userDelegationKey.signedObjectId;\n this.signedTenantId = userDelegationKey.signedTenantId;\n this.signedStartsOn = userDelegationKey.signedStartsOn;\n this.signedExpiresOn = userDelegationKey.signedExpiresOn;\n this.signedService = userDelegationKey.signedService;\n this.signedVersion = userDelegationKey.signedVersion;\n this.preauthorizedAgentObjectId = preauthorizedAgentObjectId;\n this.correlationId = correlationId;\n }\n }\n }\n /**\n * Optional. IP range allowed for this SAS.\n *\n * @readonly\n */\n get ipRange() {\n if (this.ipRangeInner) {\n return {\n end: this.ipRangeInner.end,\n start: this.ipRangeInner.start\n };\n }\n return undefined;\n }\n /**\n * Encodes all SAS query parameters into a string that can be appended to a URL.\n *\n */\n toString() {\n const params = [\"sv\", \"ss\", \"srt\", \"spr\", \"st\", \"se\", \"sip\", \"si\", \"ses\", \"skoid\", \"sktid\", \"skt\", \"ske\", \"sks\", \"skv\", \"sr\", \"sp\", \"sig\", \"rscc\", \"rscd\", \"rsce\", \"rscl\", \"rsct\", \"saoid\", \"scid\"];\n const queries = [];\n for (const param of params) {\n switch (param) {\n case \"sv\":\n this.tryAppendQueryParameter(queries, param, this.version);\n break;\n case \"ss\":\n this.tryAppendQueryParameter(queries, param, this.services);\n break;\n case \"srt\":\n this.tryAppendQueryParameter(queries, param, this.resourceTypes);\n break;\n case \"spr\":\n this.tryAppendQueryParameter(queries, param, this.protocol);\n break;\n case \"st\":\n this.tryAppendQueryParameter(queries, param, this.startsOn ? truncatedISO8061Date(this.startsOn, false) : undefined);\n break;\n case \"se\":\n this.tryAppendQueryParameter(queries, param, this.expiresOn ? truncatedISO8061Date(this.expiresOn, false) : undefined);\n break;\n case \"sip\":\n this.tryAppendQueryParameter(queries, param, this.ipRange ? ipRangeToString(this.ipRange) : undefined);\n break;\n case \"si\":\n this.tryAppendQueryParameter(queries, param, this.identifier);\n break;\n case \"ses\":\n this.tryAppendQueryParameter(queries, param, this.encryptionScope);\n break;\n case \"skoid\":\n // Signed object ID\n this.tryAppendQueryParameter(queries, param, this.signedOid);\n break;\n case \"sktid\":\n // Signed tenant ID\n this.tryAppendQueryParameter(queries, param, this.signedTenantId);\n break;\n case \"skt\":\n // Signed key start time\n this.tryAppendQueryParameter(queries, param, this.signedStartsOn ? truncatedISO8061Date(this.signedStartsOn, false) : undefined);\n break;\n case \"ske\":\n // Signed key expiry time\n this.tryAppendQueryParameter(queries, param, this.signedExpiresOn ? truncatedISO8061Date(this.signedExpiresOn, false) : undefined);\n break;\n case \"sks\":\n // Signed key service\n this.tryAppendQueryParameter(queries, param, this.signedService);\n break;\n case \"skv\":\n // Signed key version\n this.tryAppendQueryParameter(queries, param, this.signedVersion);\n break;\n case \"sr\":\n this.tryAppendQueryParameter(queries, param, this.resource);\n break;\n case \"sp\":\n this.tryAppendQueryParameter(queries, param, this.permissions);\n break;\n case \"sig\":\n this.tryAppendQueryParameter(queries, param, this.signature);\n break;\n case \"rscc\":\n this.tryAppendQueryParameter(queries, param, this.cacheControl);\n break;\n case \"rscd\":\n this.tryAppendQueryParameter(queries, param, this.contentDisposition);\n break;\n case \"rsce\":\n this.tryAppendQueryParameter(queries, param, this.contentEncoding);\n break;\n case \"rscl\":\n this.tryAppendQueryParameter(queries, param, this.contentLanguage);\n break;\n case \"rsct\":\n this.tryAppendQueryParameter(queries, param, this.contentType);\n break;\n case \"saoid\":\n this.tryAppendQueryParameter(queries, param, this.preauthorizedAgentObjectId);\n break;\n case \"scid\":\n this.tryAppendQueryParameter(queries, param, this.correlationId);\n break;\n }\n }\n return queries.join(\"&\");\n }\n /**\n * A private helper method used to filter and append query key/value pairs into an array.\n *\n * @param queries -\n * @param key -\n * @param value -\n */\n tryAppendQueryParameter(queries, key, value) {\n if (!value) {\n return;\n }\n key = encodeURIComponent(key);\n value = encodeURIComponent(value);\n if (key.length > 0 && value.length > 0) {\n queries.push(`${key}=${value}`);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BlobSASPermissions } from \"./BlobSASPermissions\";\nimport { ContainerSASPermissions } from \"./ContainerSASPermissions\";\nimport { StorageSharedKeyCredential } from \"../credentials/StorageSharedKeyCredential\";\nimport { UserDelegationKeyCredential } from \"../credentials/UserDelegationKeyCredential\";\nimport { ipRangeToString } from \"./SasIPRange\";\nimport { SASQueryParameters } from \"./SASQueryParameters\";\nimport { SERVICE_VERSION } from \"../utils/constants\";\nimport { truncatedISO8061Date } from \"../utils/utils.common\";\nexport function generateBlobSASQueryParameters(blobSASSignatureValues, sharedKeyCredentialOrUserDelegationKey, accountName) {\n const version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;\n const sharedKeyCredential = sharedKeyCredentialOrUserDelegationKey instanceof StorageSharedKeyCredential ? sharedKeyCredentialOrUserDelegationKey : undefined;\n let userDelegationKeyCredential;\n if (sharedKeyCredential === undefined && accountName !== undefined) {\n userDelegationKeyCredential = new UserDelegationKeyCredential(accountName, sharedKeyCredentialOrUserDelegationKey);\n }\n if (sharedKeyCredential === undefined && userDelegationKeyCredential === undefined) {\n throw TypeError(\"Invalid sharedKeyCredential, userDelegationKey or accountName.\");\n }\n // Version 2020-12-06 adds support for encryptionscope in SAS.\n if (version >= \"2020-12-06\") {\n if (sharedKeyCredential !== undefined) {\n return generateBlobSASQueryParameters20201206(blobSASSignatureValues, sharedKeyCredential);\n } else {\n return generateBlobSASQueryParametersUDK20201206(blobSASSignatureValues, userDelegationKeyCredential);\n }\n }\n // Version 2019-12-12 adds support for the blob tags permission.\n // Version 2018-11-09 adds support for the signed resource and signed blob snapshot time fields.\n // https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas#constructing-the-signature-string\n if (version >= \"2018-11-09\") {\n if (sharedKeyCredential !== undefined) {\n return generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential);\n } else {\n // Version 2020-02-10 delegation SAS signature construction includes preauthorizedAgentObjectId, agentObjectId, correlationId.\n if (version >= \"2020-02-10\") {\n return generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userDelegationKeyCredential);\n } else {\n return generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential);\n }\n }\n }\n if (version >= \"2015-04-05\") {\n if (sharedKeyCredential !== undefined) {\n return generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential);\n } else {\n throw new RangeError(\"'version' must be >= '2018-11-09' when generating user delegation SAS using user delegation key.\");\n }\n }\n throw new RangeError(\"'version' must be >= '2015-04-05'.\");\n}\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n * IMPLEMENTATION FOR API VERSION FROM 2015-04-05 AND BEFORE 2018-11-09.\n *\n * Creates an instance of SASQueryParameters.\n *\n * Only accepts required settings needed to create a SAS. For optional settings please\n * set corresponding properties directly, such as permissions, startsOn and identifier.\n *\n * WARNING: When identifier is not provided, permissions and expiresOn are required.\n * You MUST assign value to identifier or expiresOn & permissions manually if you initial with\n * this constructor.\n *\n * @param blobSASSignatureValues -\n * @param sharedKeyCredential -\n */\nfunction generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential) {\n blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);\n if (!blobSASSignatureValues.identifier && !(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) {\n throw new RangeError(\"Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.\");\n }\n let resource = \"c\";\n if (blobSASSignatureValues.blobName) {\n resource = \"b\";\n }\n // Calling parse and toString guarantees the proper ordering and throws on invalid characters.\n let verifiedPermissions;\n if (blobSASSignatureValues.permissions) {\n if (blobSASSignatureValues.blobName) {\n verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n } else {\n verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n }\n }\n // Signature is generated on the un-url-encoded values.\n const stringToSign = [verifiedPermissions ? verifiedPermissions : \"\", blobSASSignatureValues.startsOn ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false) : \"\", blobSASSignatureValues.expiresOn ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) : \"\", getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), blobSASSignatureValues.identifier, blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : \"\", blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : \"\", blobSASSignatureValues.version, blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : \"\", blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : \"\", blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : \"\", blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : \"\", blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : \"\"].join(\"\\n\");\n const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);\n return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType);\n}\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n * IMPLEMENTATION FOR API VERSION FROM 2018-11-09.\n *\n * Creates an instance of SASQueryParameters.\n *\n * Only accepts required settings needed to create a SAS. For optional settings please\n * set corresponding properties directly, such as permissions, startsOn and identifier.\n *\n * WARNING: When identifier is not provided, permissions and expiresOn are required.\n * You MUST assign value to identifier or expiresOn & permissions manually if you initial with\n * this constructor.\n *\n * @param blobSASSignatureValues -\n * @param sharedKeyCredential -\n */\nfunction generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential) {\n blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);\n if (!blobSASSignatureValues.identifier && !(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) {\n throw new RangeError(\"Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.\");\n }\n let resource = \"c\";\n let timestamp = blobSASSignatureValues.snapshotTime;\n if (blobSASSignatureValues.blobName) {\n resource = \"b\";\n if (blobSASSignatureValues.snapshotTime) {\n resource = \"bs\";\n } else if (blobSASSignatureValues.versionId) {\n resource = \"bv\";\n timestamp = blobSASSignatureValues.versionId;\n }\n }\n // Calling parse and toString guarantees the proper ordering and throws on invalid characters.\n let verifiedPermissions;\n if (blobSASSignatureValues.permissions) {\n if (blobSASSignatureValues.blobName) {\n verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n } else {\n verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n }\n }\n // Signature is generated on the un-url-encoded values.\n const stringToSign = [verifiedPermissions ? verifiedPermissions : \"\", blobSASSignatureValues.startsOn ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false) : \"\", blobSASSignatureValues.expiresOn ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) : \"\", getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), blobSASSignatureValues.identifier, blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : \"\", blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : \"\", blobSASSignatureValues.version, resource, timestamp, blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : \"\", blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : \"\", blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : \"\", blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : \"\", blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : \"\"].join(\"\\n\");\n const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);\n return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType);\n}\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n * IMPLEMENTATION FOR API VERSION FROM 2020-12-06.\n *\n * Creates an instance of SASQueryParameters.\n *\n * Only accepts required settings needed to create a SAS. For optional settings please\n * set corresponding properties directly, such as permissions, startsOn and identifier.\n *\n * WARNING: When identifier is not provided, permissions and expiresOn are required.\n * You MUST assign value to identifier or expiresOn & permissions manually if you initial with\n * this constructor.\n *\n * @param blobSASSignatureValues -\n * @param sharedKeyCredential -\n */\nfunction generateBlobSASQueryParameters20201206(blobSASSignatureValues, sharedKeyCredential) {\n blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);\n if (!blobSASSignatureValues.identifier && !(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) {\n throw new RangeError(\"Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.\");\n }\n let resource = \"c\";\n let timestamp = blobSASSignatureValues.snapshotTime;\n if (blobSASSignatureValues.blobName) {\n resource = \"b\";\n if (blobSASSignatureValues.snapshotTime) {\n resource = \"bs\";\n } else if (blobSASSignatureValues.versionId) {\n resource = \"bv\";\n timestamp = blobSASSignatureValues.versionId;\n }\n }\n // Calling parse and toString guarantees the proper ordering and throws on invalid characters.\n let verifiedPermissions;\n if (blobSASSignatureValues.permissions) {\n if (blobSASSignatureValues.blobName) {\n verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n } else {\n verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n }\n }\n // Signature is generated on the un-url-encoded values.\n const stringToSign = [verifiedPermissions ? verifiedPermissions : \"\", blobSASSignatureValues.startsOn ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false) : \"\", blobSASSignatureValues.expiresOn ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) : \"\", getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), blobSASSignatureValues.identifier, blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : \"\", blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : \"\", blobSASSignatureValues.version, resource, timestamp, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : \"\", blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : \"\", blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : \"\", blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : \"\", blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : \"\"].join(\"\\n\");\n const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);\n return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, undefined, undefined, undefined, blobSASSignatureValues.encryptionScope);\n}\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n * IMPLEMENTATION FOR API VERSION FROM 2018-11-09.\n *\n * Creates an instance of SASQueryParameters.\n *\n * Only accepts required settings needed to create a SAS. For optional settings please\n * set corresponding properties directly, such as permissions, startsOn.\n *\n * WARNING: identifier will be ignored, permissions and expiresOn are required.\n *\n * @param blobSASSignatureValues -\n * @param userDelegationKeyCredential -\n */\nfunction generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential) {\n blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);\n // Stored access policies are not supported for a user delegation SAS.\n if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {\n throw new RangeError(\"Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.\");\n }\n let resource = \"c\";\n let timestamp = blobSASSignatureValues.snapshotTime;\n if (blobSASSignatureValues.blobName) {\n resource = \"b\";\n if (blobSASSignatureValues.snapshotTime) {\n resource = \"bs\";\n } else if (blobSASSignatureValues.versionId) {\n resource = \"bv\";\n timestamp = blobSASSignatureValues.versionId;\n }\n }\n // Calling parse and toString guarantees the proper ordering and throws on invalid characters.\n let verifiedPermissions;\n if (blobSASSignatureValues.permissions) {\n if (blobSASSignatureValues.blobName) {\n verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n } else {\n verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n }\n }\n // Signature is generated on the un-url-encoded values.\n const stringToSign = [verifiedPermissions ? verifiedPermissions : \"\", blobSASSignatureValues.startsOn ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false) : \"\", blobSASSignatureValues.expiresOn ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) : \"\", getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), userDelegationKeyCredential.userDelegationKey.signedObjectId, userDelegationKeyCredential.userDelegationKey.signedTenantId, userDelegationKeyCredential.userDelegationKey.signedStartsOn ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false) : \"\", userDelegationKeyCredential.userDelegationKey.signedExpiresOn ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false) : \"\", userDelegationKeyCredential.userDelegationKey.signedService, userDelegationKeyCredential.userDelegationKey.signedVersion, blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : \"\", blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : \"\", blobSASSignatureValues.version, resource, timestamp, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType].join(\"\\n\");\n const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);\n return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey);\n}\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n * IMPLEMENTATION FOR API VERSION FROM 2020-02-10.\n *\n * Creates an instance of SASQueryParameters.\n *\n * Only accepts required settings needed to create a SAS. For optional settings please\n * set corresponding properties directly, such as permissions, startsOn.\n *\n * WARNING: identifier will be ignored, permissions and expiresOn are required.\n *\n * @param blobSASSignatureValues -\n * @param userDelegationKeyCredential -\n */\nfunction generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userDelegationKeyCredential) {\n blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);\n // Stored access policies are not supported for a user delegation SAS.\n if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {\n throw new RangeError(\"Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.\");\n }\n let resource = \"c\";\n let timestamp = blobSASSignatureValues.snapshotTime;\n if (blobSASSignatureValues.blobName) {\n resource = \"b\";\n if (blobSASSignatureValues.snapshotTime) {\n resource = \"bs\";\n } else if (blobSASSignatureValues.versionId) {\n resource = \"bv\";\n timestamp = blobSASSignatureValues.versionId;\n }\n }\n // Calling parse and toString guarantees the proper ordering and throws on invalid characters.\n let verifiedPermissions;\n if (blobSASSignatureValues.permissions) {\n if (blobSASSignatureValues.blobName) {\n verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n } else {\n verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n }\n }\n // Signature is generated on the un-url-encoded values.\n const stringToSign = [verifiedPermissions ? verifiedPermissions : \"\", blobSASSignatureValues.startsOn ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false) : \"\", blobSASSignatureValues.expiresOn ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) : \"\", getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), userDelegationKeyCredential.userDelegationKey.signedObjectId, userDelegationKeyCredential.userDelegationKey.signedTenantId, userDelegationKeyCredential.userDelegationKey.signedStartsOn ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false) : \"\", userDelegationKeyCredential.userDelegationKey.signedExpiresOn ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false) : \"\", userDelegationKeyCredential.userDelegationKey.signedService, userDelegationKeyCredential.userDelegationKey.signedVersion, blobSASSignatureValues.preauthorizedAgentObjectId, undefined, blobSASSignatureValues.correlationId, blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : \"\", blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : \"\", blobSASSignatureValues.version, resource, timestamp, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType].join(\"\\n\");\n const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);\n return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId);\n}\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n * IMPLEMENTATION FOR API VERSION FROM 2020-12-06.\n *\n * Creates an instance of SASQueryParameters.\n *\n * Only accepts required settings needed to create a SAS. For optional settings please\n * set corresponding properties directly, such as permissions, startsOn.\n *\n * WARNING: identifier will be ignored, permissions and expiresOn are required.\n *\n * @param blobSASSignatureValues -\n * @param userDelegationKeyCredential -\n */\nfunction generateBlobSASQueryParametersUDK20201206(blobSASSignatureValues, userDelegationKeyCredential) {\n blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);\n // Stored access policies are not supported for a user delegation SAS.\n if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {\n throw new RangeError(\"Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.\");\n }\n let resource = \"c\";\n let timestamp = blobSASSignatureValues.snapshotTime;\n if (blobSASSignatureValues.blobName) {\n resource = \"b\";\n if (blobSASSignatureValues.snapshotTime) {\n resource = \"bs\";\n } else if (blobSASSignatureValues.versionId) {\n resource = \"bv\";\n timestamp = blobSASSignatureValues.versionId;\n }\n }\n // Calling parse and toString guarantees the proper ordering and throws on invalid characters.\n let verifiedPermissions;\n if (blobSASSignatureValues.permissions) {\n if (blobSASSignatureValues.blobName) {\n verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n } else {\n verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();\n }\n }\n // Signature is generated on the un-url-encoded values.\n const stringToSign = [verifiedPermissions ? verifiedPermissions : \"\", blobSASSignatureValues.startsOn ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false) : \"\", blobSASSignatureValues.expiresOn ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) : \"\", getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), userDelegationKeyCredential.userDelegationKey.signedObjectId, userDelegationKeyCredential.userDelegationKey.signedTenantId, userDelegationKeyCredential.userDelegationKey.signedStartsOn ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false) : \"\", userDelegationKeyCredential.userDelegationKey.signedExpiresOn ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false) : \"\", userDelegationKeyCredential.userDelegationKey.signedService, userDelegationKeyCredential.userDelegationKey.signedVersion, blobSASSignatureValues.preauthorizedAgentObjectId, undefined, blobSASSignatureValues.correlationId, blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : \"\", blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : \"\", blobSASSignatureValues.version, resource, timestamp, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType].join(\"\\n\");\n const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);\n return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope);\n}\nfunction getCanonicalName(accountName, containerName, blobName) {\n // Container: \"/blob/account/containerName\"\n // Blob: \"/blob/account/containerName/blobName\"\n const elements = [`/blob/${accountName}/${containerName}`];\n if (blobName) {\n elements.push(`/${blobName}`);\n }\n return elements.join(\"\");\n}\nfunction SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues) {\n const version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;\n if (blobSASSignatureValues.snapshotTime && version < \"2018-11-09\") {\n throw RangeError(\"'version' must be >= '2018-11-09' when providing 'snapshotTime'.\");\n }\n if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.snapshotTime) {\n throw RangeError(\"Must provide 'blobName' when providing 'snapshotTime'.\");\n }\n if (blobSASSignatureValues.versionId && version < \"2019-10-10\") {\n throw RangeError(\"'version' must be >= '2019-10-10' when providing 'versionId'.\");\n }\n if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.versionId) {\n throw RangeError(\"Must provide 'blobName' when providing 'versionId'.\");\n }\n if (blobSASSignatureValues.permissions && blobSASSignatureValues.permissions.setImmutabilityPolicy && version < \"2020-08-04\") {\n throw RangeError(\"'version' must be >= '2020-08-04' when provided 'i' permission.\");\n }\n if (blobSASSignatureValues.permissions && blobSASSignatureValues.permissions.deleteVersion && version < \"2019-10-10\") {\n throw RangeError(\"'version' must be >= '2019-10-10' when providing 'x' permission.\");\n }\n if (blobSASSignatureValues.permissions && blobSASSignatureValues.permissions.permanentDelete && version < \"2019-10-10\") {\n throw RangeError(\"'version' must be >= '2019-10-10' when providing 'y' permission.\");\n }\n if (blobSASSignatureValues.permissions && blobSASSignatureValues.permissions.tag && version < \"2019-12-12\") {\n throw RangeError(\"'version' must be >= '2019-12-12' when providing 't' permission.\");\n }\n if (version < \"2020-02-10\" && blobSASSignatureValues.permissions && (blobSASSignatureValues.permissions.move || blobSASSignatureValues.permissions.execute)) {\n throw RangeError(\"'version' must be >= '2020-02-10' when providing the 'm' or 'e' permission.\");\n }\n if (version < \"2021-04-10\" && blobSASSignatureValues.permissions && blobSASSignatureValues.permissions.filterByTags) {\n throw RangeError(\"'version' must be >= '2021-04-10' when providing the 'f' permission.\");\n }\n if (version < \"2020-02-10\" && (blobSASSignatureValues.preauthorizedAgentObjectId || blobSASSignatureValues.correlationId)) {\n throw RangeError(\"'version' must be >= '2020-02-10' when providing 'preauthorizedAgentObjectId' or 'correlationId'.\");\n }\n if (blobSASSignatureValues.encryptionScope && version < \"2020-12-06\") {\n throw RangeError(\"'version' must be >= '2020-12-06' when provided 'encryptionScope' in SAS.\");\n }\n blobSASSignatureValues.version = version;\n return blobSASSignatureValues;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { generateUuid } from \"@azure/core-http\";\nimport { StorageClientContext } from \"./generated/src/index\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { Blob as StorageBlob, Container } from \"./generated/src/operations\";\nimport { ETagNone } from \"./utils/constants\";\nimport { convertTracingToRequestOptionsBase, createSpan } from \"./utils/tracing\";\n/**\n * A client that manages leases for a {@link ContainerClient} or a {@link BlobClient}.\n */\nexport class BlobLeaseClient {\n /**\n * Creates an instance of BlobLeaseClient.\n * @param client - The client to make the lease operation requests.\n * @param leaseId - Initial proposed lease id.\n */\n constructor(client, leaseId) {\n const clientContext = new StorageClientContext(client.url, client.pipeline.toServiceClientOptions());\n this._url = client.url;\n if (client.name === undefined) {\n this._isContainer = true;\n this._containerOrBlobOperation = new Container(clientContext);\n } else {\n this._isContainer = false;\n this._containerOrBlobOperation = new StorageBlob(clientContext);\n }\n if (!leaseId) {\n leaseId = generateUuid();\n }\n this._leaseId = leaseId;\n }\n /**\n * Gets the lease Id.\n *\n * @readonly\n */\n get leaseId() {\n return this._leaseId;\n }\n /**\n * Gets the url.\n *\n * @readonly\n */\n get url() {\n return this._url;\n }\n /**\n * Establishes and manages a lock on a container for delete operations, or on a blob\n * for write and delete operations.\n * The lock duration can be 15 to 60 seconds, or can be infinite.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container\n * and\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\n *\n * @param duration - Must be between 15 to 60 seconds, or infinite (-1)\n * @param options - option to configure lease management operations.\n * @returns Response data for acquire lease operation.\n */\n async acquireLease(duration, options = {}) {\n var _a, _b, _c, _d, _e, _f;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobLeaseClient-acquireLease\", options);\n if (this._isContainer && (((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone || ((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone || ((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) {\n throw new RangeError(\"The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.\");\n }\n try {\n return await this._containerOrBlobOperation.acquireLease(Object.assign({\n abortSignal: options.abortSignal,\n duration,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions\n }),\n proposedLeaseId: this._leaseId\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * To change the ID of the lease.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container\n * and\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\n *\n * @param proposedLeaseId - the proposed new lease Id.\n * @param options - option to configure lease management operations.\n * @returns Response data for change lease operation.\n */\n async changeLease(proposedLeaseId, options = {}) {\n var _a, _b, _c, _d, _e, _f;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobLeaseClient-changeLease\", options);\n if (this._isContainer && (((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone || ((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone || ((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) {\n throw new RangeError(\"The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.\");\n }\n try {\n const response = await this._containerOrBlobOperation.changeLease(this._leaseId, proposedLeaseId, Object.assign({\n abortSignal: options.abortSignal,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n this._leaseId = proposedLeaseId;\n return response;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * To free the lease if it is no longer needed so that another client may\n * immediately acquire a lease against the container or the blob.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container\n * and\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\n *\n * @param options - option to configure lease management operations.\n * @returns Response data for release lease operation.\n */\n async releaseLease(options = {}) {\n var _a, _b, _c, _d, _e, _f;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobLeaseClient-releaseLease\", options);\n if (this._isContainer && (((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone || ((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone || ((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) {\n throw new RangeError(\"The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.\");\n }\n try {\n return await this._containerOrBlobOperation.releaseLease(this._leaseId, Object.assign({\n abortSignal: options.abortSignal,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * To renew the lease.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container\n * and\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\n *\n * @param options - Optional option to configure lease management operations.\n * @returns Response data for renew lease operation.\n */\n async renewLease(options = {}) {\n var _a, _b, _c, _d, _e, _f;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobLeaseClient-renewLease\", options);\n if (this._isContainer && (((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone || ((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone || ((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) {\n throw new RangeError(\"The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.\");\n }\n try {\n return await this._containerOrBlobOperation.renewLease(this._leaseId, Object.assign({\n abortSignal: options.abortSignal,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * To end the lease but ensure that another client cannot acquire a new lease\n * until the current lease period has expired.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container\n * and\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\n *\n * @param breakPeriod - Break period\n * @param options - Optional options to configure lease management operations.\n * @returns Response data for break lease operation.\n */\n async breakLease(breakPeriod, options = {}) {\n var _a, _b, _c, _d, _e, _f;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobLeaseClient-breakLease\", options);\n if (this._isContainer && (((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone || ((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone || ((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) {\n throw new RangeError(\"The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.\");\n }\n try {\n const operationOptions = Object.assign({\n abortSignal: options.abortSignal,\n breakPeriod,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions));\n return await this._containerOrBlobOperation.breakLease(operationOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * ONLY AVAILABLE IN BROWSER RUNTIME.\n *\n * BlobQueryResponse implements BlobDownloadResponseModel interface, and in browser runtime it will\n * parse avor data returned by blob query.\n */\nexport class BlobQueryResponse {\n /**\n * Creates an instance of BlobQueryResponse.\n *\n * @param originalResponse -\n * @param options -\n */\n constructor(originalResponse, _options = {}) {\n this.originalResponse = originalResponse;\n }\n /**\n * Indicates that the service supports\n * requests for partial file content.\n *\n * @readonly\n */\n get acceptRanges() {\n return this.originalResponse.acceptRanges;\n }\n /**\n * Returns if it was previously specified\n * for the file.\n *\n * @readonly\n */\n get cacheControl() {\n return this.originalResponse.cacheControl;\n }\n /**\n * Returns the value that was specified\n * for the 'x-ms-content-disposition' header and specifies how to process the\n * response.\n *\n * @readonly\n */\n get contentDisposition() {\n return this.originalResponse.contentDisposition;\n }\n /**\n * Returns the value that was specified\n * for the Content-Encoding request header.\n *\n * @readonly\n */\n get contentEncoding() {\n return this.originalResponse.contentEncoding;\n }\n /**\n * Returns the value that was specified\n * for the Content-Language request header.\n *\n * @readonly\n */\n get contentLanguage() {\n return this.originalResponse.contentLanguage;\n }\n /**\n * The current sequence number for a\n * page blob. This header is not returned for block blobs or append blobs.\n *\n * @readonly\n */\n get blobSequenceNumber() {\n return this.originalResponse.blobSequenceNumber;\n }\n /**\n * The blob's type. Possible values include:\n * 'BlockBlob', 'PageBlob', 'AppendBlob'.\n *\n * @readonly\n */\n get blobType() {\n return this.originalResponse.blobType;\n }\n /**\n * The number of bytes present in the\n * response body.\n *\n * @readonly\n */\n get contentLength() {\n return this.originalResponse.contentLength;\n }\n /**\n * If the file has an MD5 hash and the\n * request is to read the full file, this response header is returned so that\n * the client can check for message content integrity. If the request is to\n * read a specified range and the 'x-ms-range-get-content-md5' is set to\n * true, then the request returns an MD5 hash for the range, as long as the\n * range size is less than or equal to 4 MB. If neither of these sets of\n * conditions is true, then no value is returned for the 'Content-MD5'\n * header.\n *\n * @readonly\n */\n get contentMD5() {\n return this.originalResponse.contentMD5;\n }\n /**\n * Indicates the range of bytes returned if\n * the client requested a subset of the file by setting the Range request\n * header.\n *\n * @readonly\n */\n get contentRange() {\n return this.originalResponse.contentRange;\n }\n /**\n * The content type specified for the file.\n * The default content type is 'application/octet-stream'\n *\n * @readonly\n */\n get contentType() {\n return this.originalResponse.contentType;\n }\n /**\n * Conclusion time of the last attempted\n * Copy File operation where this file was the destination file. This value\n * can specify the time of a completed, aborted, or failed copy attempt.\n *\n * @readonly\n */\n get copyCompletedOn() {\n return undefined;\n }\n /**\n * String identifier for the last attempted Copy\n * File operation where this file was the destination file.\n *\n * @readonly\n */\n get copyId() {\n return this.originalResponse.copyId;\n }\n /**\n * Contains the number of bytes copied and\n * the total bytes in the source in the last attempted Copy File operation\n * where this file was the destination file. Can show between 0 and\n * Content-Length bytes copied.\n *\n * @readonly\n */\n get copyProgress() {\n return this.originalResponse.copyProgress;\n }\n /**\n * URL up to 2KB in length that specifies the\n * source file used in the last attempted Copy File operation where this file\n * was the destination file.\n *\n * @readonly\n */\n get copySource() {\n return this.originalResponse.copySource;\n }\n /**\n * State of the copy operation\n * identified by 'x-ms-copy-id'. Possible values include: 'pending',\n * 'success', 'aborted', 'failed'\n *\n * @readonly\n */\n get copyStatus() {\n return this.originalResponse.copyStatus;\n }\n /**\n * Only appears when\n * x-ms-copy-status is failed or pending. Describes cause of fatal or\n * non-fatal copy operation failure.\n *\n * @readonly\n */\n get copyStatusDescription() {\n return this.originalResponse.copyStatusDescription;\n }\n /**\n * When a blob is leased,\n * specifies whether the lease is of infinite or fixed duration. Possible\n * values include: 'infinite', 'fixed'.\n *\n * @readonly\n */\n get leaseDuration() {\n return this.originalResponse.leaseDuration;\n }\n /**\n * Lease state of the blob. Possible\n * values include: 'available', 'leased', 'expired', 'breaking', 'broken'.\n *\n * @readonly\n */\n get leaseState() {\n return this.originalResponse.leaseState;\n }\n /**\n * The current lease status of the\n * blob. Possible values include: 'locked', 'unlocked'.\n *\n * @readonly\n */\n get leaseStatus() {\n return this.originalResponse.leaseStatus;\n }\n /**\n * A UTC date/time value generated by the service that\n * indicates the time at which the response was initiated.\n *\n * @readonly\n */\n get date() {\n return this.originalResponse.date;\n }\n /**\n * The number of committed blocks\n * present in the blob. This header is returned only for append blobs.\n *\n * @readonly\n */\n get blobCommittedBlockCount() {\n return this.originalResponse.blobCommittedBlockCount;\n }\n /**\n * The ETag contains a value that you can use to\n * perform operations conditionally, in quotes.\n *\n * @readonly\n */\n get etag() {\n return this.originalResponse.etag;\n }\n /**\n * The error code.\n *\n * @readonly\n */\n get errorCode() {\n return this.originalResponse.errorCode;\n }\n /**\n * The value of this header is set to\n * true if the file data and application metadata are completely encrypted\n * using the specified algorithm. Otherwise, the value is set to false (when\n * the file is unencrypted, or if only parts of the file/application metadata\n * are encrypted).\n *\n * @readonly\n */\n get isServerEncrypted() {\n return this.originalResponse.isServerEncrypted;\n }\n /**\n * If the blob has a MD5 hash, and if\n * request contains range header (Range or x-ms-range), this response header\n * is returned with the value of the whole blob's MD5 value. This value may\n * or may not be equal to the value returned in Content-MD5 header, with the\n * latter calculated from the requested range.\n *\n * @readonly\n */\n get blobContentMD5() {\n return this.originalResponse.blobContentMD5;\n }\n /**\n * Returns the date and time the file was last\n * modified. Any operation that modifies the file or its properties updates\n * the last modified time.\n *\n * @readonly\n */\n get lastModified() {\n return this.originalResponse.lastModified;\n }\n /**\n * A name-value pair\n * to associate with a file storage object.\n *\n * @readonly\n */\n get metadata() {\n return this.originalResponse.metadata;\n }\n /**\n * This header uniquely identifies the request\n * that was made and can be used for troubleshooting the request.\n *\n * @readonly\n */\n get requestId() {\n return this.originalResponse.requestId;\n }\n /**\n * If a client request id header is sent in the request, this header will be present in the\n * response with the same value.\n *\n * @readonly\n */\n get clientRequestId() {\n return this.originalResponse.clientRequestId;\n }\n /**\n * Indicates the version of the File service used\n * to execute the request.\n *\n * @readonly\n */\n get version() {\n return this.originalResponse.version;\n }\n /**\n * The SHA-256 hash of the encryption key used to encrypt the blob. This value is only returned\n * when the blob was encrypted with a customer-provided key.\n *\n * @readonly\n */\n get encryptionKeySha256() {\n return this.originalResponse.encryptionKeySha256;\n }\n /**\n * If the request is to read a specified range and the x-ms-range-get-content-crc64 is set to\n * true, then the request returns a crc64 for the range, as long as the range size is less than\n * or equal to 4 MB. If both x-ms-range-get-content-crc64 & x-ms-range-get-content-md5 is\n * specified in the same request, it will fail with 400(Bad Request)\n */\n get contentCrc64() {\n return this.originalResponse.contentCrc64;\n }\n /**\n * The response body as a browser Blob.\n * Always undefined in node.js.\n *\n * @readonly\n */\n get blobBody() {\n throw Error(`Quick query in browser is not supported yet.`);\n }\n /**\n * The response body as a node.js Readable stream.\n * Always undefined in the browser.\n *\n * @readonly\n */\n get readableStreamBody() {\n return undefined;\n }\n /**\n * The HTTP response.\n */\n get _response() {\n return this.originalResponse._response;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { EncryptionAlgorithmAES25 } from \"./utils/constants\";\n/**\n * Represents the access tier on a blob.\n * For detailed information about block blob level tiering see {@link https://docs.microsoft.com/azure/storage/blobs/storage-blob-storage-tiers|Hot, cool and archive storage tiers.}\n */\nexport var BlockBlobTier = /*#__PURE__*/function (BlockBlobTier) {\n /**\n * Optimized for storing data that is accessed frequently.\n */\n BlockBlobTier[\"Hot\"] = \"Hot\";\n /**\n * Optimized for storing data that is infrequently accessed and stored for at least 30 days.\n */\n BlockBlobTier[\"Cool\"] = \"Cool\";\n /**\n * Optimized for storing data that is rarely accessed.\n */\n BlockBlobTier[\"Cold\"] = \"Cold\";\n /**\n * Optimized for storing data that is rarely accessed and stored for at least 180 days\n * with flexible latency requirements (on the order of hours).\n */\n BlockBlobTier[\"Archive\"] = \"Archive\";\n return BlockBlobTier;\n}(BlockBlobTier || {});\n/**\n * Specifies the page blob tier to set the blob to. This is only applicable to page blobs on premium storage accounts.\n * Please see {@link https://docs.microsoft.com/azure/storage/storage-premium-storage#scalability-and-performance-targets|here}\n * for detailed information on the corresponding IOPS and throughput per PageBlobTier.\n */\nexport var PremiumPageBlobTier = /*#__PURE__*/function (PremiumPageBlobTier) {\n /**\n * P4 Tier.\n */\n PremiumPageBlobTier[\"P4\"] = \"P4\";\n /**\n * P6 Tier.\n */\n PremiumPageBlobTier[\"P6\"] = \"P6\";\n /**\n * P10 Tier.\n */\n PremiumPageBlobTier[\"P10\"] = \"P10\";\n /**\n * P15 Tier.\n */\n PremiumPageBlobTier[\"P15\"] = \"P15\";\n /**\n * P20 Tier.\n */\n PremiumPageBlobTier[\"P20\"] = \"P20\";\n /**\n * P30 Tier.\n */\n PremiumPageBlobTier[\"P30\"] = \"P30\";\n /**\n * P40 Tier.\n */\n PremiumPageBlobTier[\"P40\"] = \"P40\";\n /**\n * P50 Tier.\n */\n PremiumPageBlobTier[\"P50\"] = \"P50\";\n /**\n * P60 Tier.\n */\n PremiumPageBlobTier[\"P60\"] = \"P60\";\n /**\n * P70 Tier.\n */\n PremiumPageBlobTier[\"P70\"] = \"P70\";\n /**\n * P80 Tier.\n */\n PremiumPageBlobTier[\"P80\"] = \"P80\";\n return PremiumPageBlobTier;\n}(PremiumPageBlobTier || {});\nexport function toAccessTier(tier) {\n if (tier === undefined) {\n return undefined;\n }\n return tier; // No more check if string is a valid AccessTier, and left this to underlay logic to decide(service).\n}\nexport function ensureCpkIfSpecified(cpk, isHttps) {\n if (cpk && !isHttps) {\n throw new RangeError(\"Customer-provided encryption key must be used over HTTPS.\");\n }\n if (cpk && !cpk.encryptionAlgorithm) {\n cpk.encryptionAlgorithm = EncryptionAlgorithmAES25;\n }\n}\n/**\n * Defines the known cloud audiences for Storage.\n */\nexport var StorageBlobAudience = /*#__PURE__*/function (StorageBlobAudience) {\n /**\n * The OAuth scope to use to retrieve an AAD token for Azure Storage.\n */\n StorageBlobAudience[\"StorageOAuthScopes\"] = \"https://storage.azure.com/.default\";\n /**\n * The OAuth scope to use to retrieve an AAD token for Azure Disk.\n */\n StorageBlobAudience[\"DiskComputeOAuthScopes\"] = \"https://disk.compute.azure.com/.default\";\n return StorageBlobAudience;\n}(StorageBlobAudience || {});\nexport function getBlobServiceAccountAudience(storageAccountName) {\n return `https://${storageAccountName}.blob.core.windows.net/.default`;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Function that converts PageRange and ClearRange to a common Range object.\n * PageRange and ClearRange have start and end while Range offset and count\n * this function normalizes to Range.\n * @param response - Model PageBlob Range response\n */\nexport function rangeResponseFromModel(response) {\n const pageRange = (response._response.parsedBody.pageRange || []).map(x => ({\n offset: x.start,\n count: x.end - x.start\n }));\n const clearRange = (response._response.parsedBody.clearRange || []).map(x => ({\n offset: x.start,\n count: x.end - x.start\n }));\n return Object.assign(Object.assign({}, response), {\n pageRange,\n clearRange,\n _response: Object.assign(Object.assign({}, response._response), {\n parsedBody: {\n pageRange,\n clearRange\n }\n })\n });\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { createClientLogger } from \"@azure/logger\";\n/**\n * The `@azure/logger` configuration for this package.\n * @internal\n */\nexport const logger = createClientLogger(\"core-lro\");\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * When a poller is manually stopped through the `stopPolling` method,\n * the poller will be rejected with an instance of the PollerStoppedError.\n */\nexport class PollerStoppedError extends Error {\n constructor(message) {\n super(message);\n this.name = \"PollerStoppedError\";\n Object.setPrototypeOf(this, PollerStoppedError.prototype);\n }\n}\n/**\n * When the operation is cancelled, the poller will be rejected with an instance\n * of the PollerCancelledError.\n */\nexport class PollerCancelledError extends Error {\n constructor(message) {\n super(message);\n this.name = \"PollerCancelledError\";\n Object.setPrototypeOf(this, PollerCancelledError.prototype);\n }\n}\n/**\n * A class that represents the definition of a program that polls through consecutive requests\n * until it reaches a state of completion.\n *\n * A poller can be executed manually, by polling request by request by calling to the `poll()` method repeatedly, until its operation is completed.\n * It also provides a way to wait until the operation completes, by calling `pollUntilDone()` and waiting until the operation finishes.\n * Pollers can also request the cancellation of the ongoing process to whom is providing the underlying long running operation.\n *\n * ```ts\n * const poller = new MyPoller();\n *\n * // Polling just once:\n * await poller.poll();\n *\n * // We can try to cancel the request here, by calling:\n * //\n * // await poller.cancelOperation();\n * //\n *\n * // Getting the final result:\n * const result = await poller.pollUntilDone();\n * ```\n *\n * The Poller is defined by two types, a type representing the state of the poller, which\n * must include a basic set of properties from `PollOperationState`,\n * and a return type defined by `TResult`, which can be anything.\n *\n * The Poller class implements the `PollerLike` interface, which allows poller implementations to avoid having\n * to export the Poller's class directly, and instead only export the already instantiated poller with the PollerLike type.\n *\n * ```ts\n * class Client {\n * public async makePoller: PollerLike {\n * const poller = new MyPoller({});\n * // It might be preferred to return the poller after the first request is made,\n * // so that some information can be obtained right away.\n * await poller.poll();\n * return poller;\n * }\n * }\n *\n * const poller: PollerLike = myClient.makePoller();\n * ```\n *\n * A poller can be created through its constructor, then it can be polled until it's completed.\n * At any point in time, the state of the poller can be obtained without delay through the getOperationState method.\n * At any point in time, the intermediate forms of the result type can be requested without delay.\n * Once the underlying operation is marked as completed, the poller will stop and the final value will be returned.\n *\n * ```ts\n * const poller = myClient.makePoller();\n * const state: MyOperationState = poller.getOperationState();\n *\n * // The intermediate result can be obtained at any time.\n * const result: MyResult | undefined = poller.getResult();\n *\n * // The final result can only be obtained after the poller finishes.\n * const result: MyResult = await poller.pollUntilDone();\n * ```\n *\n */\n// eslint-disable-next-line no-use-before-define\nexport class Poller {\n /**\n * A poller needs to be initialized by passing in at least the basic properties of the `PollOperation`.\n *\n * When writing an implementation of a Poller, this implementation needs to deal with the initialization\n * of any custom state beyond the basic definition of the poller. The basic poller assumes that the poller's\n * operation has already been defined, at least its basic properties. The code below shows how to approach\n * the definition of the constructor of a new custom poller.\n *\n * ```ts\n * export class MyPoller extends Poller {\n * constructor({\n * // Anything you might need outside of the basics\n * }) {\n * let state: MyOperationState = {\n * privateProperty: private,\n * publicProperty: public,\n * };\n *\n * const operation = {\n * state,\n * update,\n * cancel,\n * toString\n * }\n *\n * // Sending the operation to the parent's constructor.\n * super(operation);\n *\n * // You can assign more local properties here.\n * }\n * }\n * ```\n *\n * Inside of this constructor, a new promise is created. This will be used to\n * tell the user when the poller finishes (see `pollUntilDone()`). The promise's\n * resolve and reject methods are also used internally to control when to resolve\n * or reject anyone waiting for the poller to finish.\n *\n * The constructor of a custom implementation of a poller is where any serialized version of\n * a previous poller's operation should be deserialized into the operation sent to the\n * base constructor. For example:\n *\n * ```ts\n * export class MyPoller extends Poller {\n * constructor(\n * baseOperation: string | undefined\n * ) {\n * let state: MyOperationState = {};\n * if (baseOperation) {\n * state = {\n * ...JSON.parse(baseOperation).state,\n * ...state\n * };\n * }\n * const operation = {\n * state,\n * // ...\n * }\n * super(operation);\n * }\n * }\n * ```\n *\n * @param operation - Must contain the basic properties of `PollOperation`.\n */\n constructor(operation) {\n /** controls whether to throw an error if the operation failed or was canceled. */\n this.resolveOnUnsuccessful = false;\n this.stopped = true;\n this.pollProgressCallbacks = [];\n this.operation = operation;\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n // This prevents the UnhandledPromiseRejectionWarning in node.js from being thrown.\n // The above warning would get thrown if `poller.poll` is called, it returns an error,\n // and pullUntilDone did not have a .catch or await try/catch on it's return value.\n this.promise.catch(() => {\n /* intentionally blank */\n });\n }\n /**\n * Starts a loop that will break only if the poller is done\n * or if the poller is stopped.\n */\n async startPolling(pollOptions = {}) {\n if (this.stopped) {\n this.stopped = false;\n }\n while (!this.isStopped() && !this.isDone()) {\n await this.poll(pollOptions);\n await this.delay();\n }\n }\n /**\n * pollOnce does one polling, by calling to the update method of the underlying\n * poll operation to make any relevant change effective.\n *\n * It only optionally receives an object with an abortSignal property, from \\@azure/abort-controller's AbortSignalLike.\n *\n * @param options - Optional properties passed to the operation's update method.\n */\n async pollOnce(options = {}) {\n if (!this.isDone()) {\n this.operation = await this.operation.update({\n abortSignal: options.abortSignal,\n fireProgress: this.fireProgress.bind(this)\n });\n }\n this.processUpdatedState();\n }\n /**\n * fireProgress calls the functions passed in via onProgress the method of the poller.\n *\n * It loops over all of the callbacks received from onProgress, and executes them, sending them\n * the current operation state.\n *\n * @param state - The current operation state.\n */\n fireProgress(state) {\n for (const callback of this.pollProgressCallbacks) {\n callback(state);\n }\n }\n /**\n * Invokes the underlying operation's cancel method.\n */\n async cancelOnce(options = {}) {\n this.operation = await this.operation.cancel(options);\n }\n /**\n * Returns a promise that will resolve once a single polling request finishes.\n * It does this by calling the update method of the Poller's operation.\n *\n * It only optionally receives an object with an abortSignal property, from \\@azure/abort-controller's AbortSignalLike.\n *\n * @param options - Optional properties passed to the operation's update method.\n */\n poll(options = {}) {\n if (!this.pollOncePromise) {\n this.pollOncePromise = this.pollOnce(options);\n const clearPollOncePromise = () => {\n this.pollOncePromise = undefined;\n };\n this.pollOncePromise.then(clearPollOncePromise, clearPollOncePromise).catch(this.reject);\n }\n return this.pollOncePromise;\n }\n processUpdatedState() {\n if (this.operation.state.error) {\n this.stopped = true;\n if (!this.resolveOnUnsuccessful) {\n this.reject(this.operation.state.error);\n throw this.operation.state.error;\n }\n }\n if (this.operation.state.isCancelled) {\n this.stopped = true;\n if (!this.resolveOnUnsuccessful) {\n const error = new PollerCancelledError(\"Operation was canceled\");\n this.reject(error);\n throw error;\n }\n }\n if (this.isDone() && this.resolve) {\n // If the poller has finished polling, this means we now have a result.\n // However, it can be the case that TResult is instantiated to void, so\n // we are not expecting a result anyway. To assert that we might not\n // have a result eventually after finishing polling, we cast the result\n // to TResult.\n this.resolve(this.getResult());\n }\n }\n /**\n * Returns a promise that will resolve once the underlying operation is completed.\n */\n async pollUntilDone(pollOptions = {}) {\n if (this.stopped) {\n this.startPolling(pollOptions).catch(this.reject);\n }\n // This is needed because the state could have been updated by\n // `cancelOperation`, e.g. the operation is canceled or an error occurred.\n this.processUpdatedState();\n return this.promise;\n }\n /**\n * Invokes the provided callback after each polling is completed,\n * sending the current state of the poller's operation.\n *\n * It returns a method that can be used to stop receiving updates on the given callback function.\n */\n onProgress(callback) {\n this.pollProgressCallbacks.push(callback);\n return () => {\n this.pollProgressCallbacks = this.pollProgressCallbacks.filter(c => c !== callback);\n };\n }\n /**\n * Returns true if the poller has finished polling.\n */\n isDone() {\n const state = this.operation.state;\n return Boolean(state.isCompleted || state.isCancelled || state.error);\n }\n /**\n * Stops the poller from continuing to poll.\n */\n stopPolling() {\n if (!this.stopped) {\n this.stopped = true;\n if (this.reject) {\n this.reject(new PollerStoppedError(\"This poller is already stopped\"));\n }\n }\n }\n /**\n * Returns true if the poller is stopped.\n */\n isStopped() {\n return this.stopped;\n }\n /**\n * Attempts to cancel the underlying operation.\n *\n * It only optionally receives an object with an abortSignal property, from \\@azure/abort-controller's AbortSignalLike.\n *\n * If it's called again before it finishes, it will throw an error.\n *\n * @param options - Optional properties passed to the operation's update method.\n */\n cancelOperation(options = {}) {\n if (!this.cancelPromise) {\n this.cancelPromise = this.cancelOnce(options);\n } else if (options.abortSignal) {\n throw new Error(\"A cancel request is currently pending\");\n }\n return this.cancelPromise;\n }\n /**\n * Returns the state of the operation.\n *\n * Even though TState will be the same type inside any of the methods of any extension of the Poller class,\n * implementations of the pollers can customize what's shared with the public by writing their own\n * version of the `getOperationState` method, and by defining two types, one representing the internal state of the poller\n * and a public type representing a safe to share subset of the properties of the internal state.\n * Their definition of getOperationState can then return their public type.\n *\n * Example:\n *\n * ```ts\n * // Let's say we have our poller's operation state defined as:\n * interface MyOperationState extends PollOperationState {\n * privateProperty?: string;\n * publicProperty?: string;\n * }\n *\n * // To allow us to have a true separation of public and private state, we have to define another interface:\n * interface PublicState extends PollOperationState {\n * publicProperty?: string;\n * }\n *\n * // Then, we define our Poller as follows:\n * export class MyPoller extends Poller {\n * // ... More content is needed here ...\n *\n * public getOperationState(): PublicState {\n * const state: PublicState = this.operation.state;\n * return {\n * // Properties from PollOperationState\n * isStarted: state.isStarted,\n * isCompleted: state.isCompleted,\n * isCancelled: state.isCancelled,\n * error: state.error,\n * result: state.result,\n *\n * // The only other property needed by PublicState.\n * publicProperty: state.publicProperty\n * }\n * }\n * }\n * ```\n *\n * You can see this in the tests of this repository, go to the file:\n * `../test/utils/testPoller.ts`\n * and look for the getOperationState implementation.\n */\n getOperationState() {\n return this.operation.state;\n }\n /**\n * Returns the result value of the operation,\n * regardless of the state of the poller.\n * It can return undefined or an incomplete form of the final TResult value\n * depending on the implementation.\n */\n getResult() {\n const state = this.operation.state;\n return state.result;\n }\n /**\n * Returns a serialized version of the poller's operation\n * by invoking the operation's toString method.\n */\n toString() {\n return this.operation.toString();\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { delay } from \"@azure/core-http\";\nimport { Poller } from \"@azure/core-lro\";\n/**\n * This is the poller returned by {@link BlobClient.beginCopyFromURL}.\n * This can not be instantiated directly outside of this package.\n *\n * @hidden\n */\nexport class BlobBeginCopyFromUrlPoller extends Poller {\n constructor(options) {\n const {\n blobClient,\n copySource,\n intervalInMs = 15000,\n onProgress,\n resumeFrom,\n startCopyFromURLOptions\n } = options;\n let state;\n if (resumeFrom) {\n state = JSON.parse(resumeFrom).state;\n }\n const operation = makeBlobBeginCopyFromURLPollOperation(Object.assign(Object.assign({}, state), {\n blobClient,\n copySource,\n startCopyFromURLOptions\n }));\n super(operation);\n if (typeof onProgress === \"function\") {\n this.onProgress(onProgress);\n }\n this.intervalInMs = intervalInMs;\n }\n delay() {\n return delay(this.intervalInMs);\n }\n}\n/**\n * Note: Intentionally using function expression over arrow function expression\n * so that the function can be invoked with a different context.\n * This affects what `this` refers to.\n * @hidden\n */\nconst cancel = async function cancel(options = {}) {\n const state = this.state;\n const {\n copyId\n } = state;\n if (state.isCompleted) {\n return makeBlobBeginCopyFromURLPollOperation(state);\n }\n if (!copyId) {\n state.isCancelled = true;\n return makeBlobBeginCopyFromURLPollOperation(state);\n }\n // if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call\n await state.blobClient.abortCopyFromURL(copyId, {\n abortSignal: options.abortSignal\n });\n state.isCancelled = true;\n return makeBlobBeginCopyFromURLPollOperation(state);\n};\n/**\n * Note: Intentionally using function expression over arrow function expression\n * so that the function can be invoked with a different context.\n * This affects what `this` refers to.\n * @hidden\n */\nconst update = async function update(options = {}) {\n const state = this.state;\n const {\n blobClient,\n copySource,\n startCopyFromURLOptions\n } = state;\n if (!state.isStarted) {\n state.isStarted = true;\n const result = await blobClient.startCopyFromURL(copySource, startCopyFromURLOptions);\n // copyId is needed to abort\n state.copyId = result.copyId;\n if (result.copyStatus === \"success\") {\n state.result = result;\n state.isCompleted = true;\n }\n } else if (!state.isCompleted) {\n try {\n const result = await state.blobClient.getProperties({\n abortSignal: options.abortSignal\n });\n const {\n copyStatus,\n copyProgress\n } = result;\n const prevCopyProgress = state.copyProgress;\n if (copyProgress) {\n state.copyProgress = copyProgress;\n }\n if (copyStatus === \"pending\" && copyProgress !== prevCopyProgress && typeof options.fireProgress === \"function\") {\n // trigger in setTimeout, or swallow error?\n options.fireProgress(state);\n } else if (copyStatus === \"success\") {\n state.result = result;\n state.isCompleted = true;\n } else if (copyStatus === \"failed\") {\n state.error = new Error(`Blob copy failed with reason: \"${result.copyStatusDescription || \"unknown\"}\"`);\n state.isCompleted = true;\n }\n } catch (err) {\n state.error = err;\n state.isCompleted = true;\n }\n }\n return makeBlobBeginCopyFromURLPollOperation(state);\n};\n/**\n * Note: Intentionally using function expression over arrow function expression\n * so that the function can be invoked with a different context.\n * This affects what `this` refers to.\n * @hidden\n */\nconst toString = function toString() {\n return JSON.stringify({\n state: this.state\n }, (key, value) => {\n // remove blobClient from serialized state since a client can't be hydrated from this info.\n if (key === \"blobClient\") {\n return undefined;\n }\n return value;\n });\n};\n/**\n * Creates a poll operation given the provided state.\n * @hidden\n */\nfunction makeBlobBeginCopyFromURLPollOperation(state) {\n return {\n state: Object.assign({}, state),\n cancel,\n toString,\n update\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Generate a range string. For example:\n *\n * \"bytes=255-\" or \"bytes=0-511\"\n *\n * @param iRange -\n */\nexport function rangeToString(iRange) {\n if (iRange.offset < 0) {\n throw new RangeError(`Range.offset cannot be smaller than 0.`);\n }\n if (iRange.count && iRange.count <= 0) {\n throw new RangeError(`Range.count must be larger than 0. Leave it undefined if you want a range from offset to the end.`);\n }\n return iRange.count ? `bytes=${iRange.offset}-${iRange.offset + iRange.count - 1}` : `bytes=${iRange.offset}-`;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n// In browser, during webpack or browserify bundling, this module will be replaced by 'events'\n// https://github.com/Gozala/events\nimport { EventEmitter } from \"events\";\n/**\n * States for Batch.\n */\nvar BatchStates = /*#__PURE__*/function (BatchStates) {\n BatchStates[BatchStates[\"Good\"] = 0] = \"Good\";\n BatchStates[BatchStates[\"Error\"] = 1] = \"Error\";\n return BatchStates;\n}(BatchStates || {});\n/**\n * Batch provides basic parallel execution with concurrency limits.\n * Will stop execute left operations when one of the executed operation throws an error.\n * But Batch cannot cancel ongoing operations, you need to cancel them by yourself.\n */\nexport class Batch {\n /**\n * Creates an instance of Batch.\n * @param concurrency -\n */\n constructor(concurrency = 5) {\n /**\n * Number of active operations under execution.\n */\n this.actives = 0;\n /**\n * Number of completed operations under execution.\n */\n this.completed = 0;\n /**\n * Offset of next operation to be executed.\n */\n this.offset = 0;\n /**\n * Operation array to be executed.\n */\n this.operations = [];\n /**\n * States of Batch. When an error happens, state will turn into error.\n * Batch will stop execute left operations.\n */\n this.state = BatchStates.Good;\n if (concurrency < 1) {\n throw new RangeError(\"concurrency must be larger than 0\");\n }\n this.concurrency = concurrency;\n this.emitter = new EventEmitter();\n }\n /**\n * Add a operation into queue.\n *\n * @param operation -\n */\n addOperation(operation) {\n this.operations.push(async () => {\n try {\n this.actives++;\n await operation();\n this.actives--;\n this.completed++;\n this.parallelExecute();\n } catch (error) {\n this.emitter.emit(\"error\", error);\n }\n });\n }\n /**\n * Start execute operations in the queue.\n *\n */\n async do() {\n if (this.operations.length === 0) {\n return Promise.resolve();\n }\n this.parallelExecute();\n return new Promise((resolve, reject) => {\n this.emitter.on(\"finish\", resolve);\n this.emitter.on(\"error\", error => {\n this.state = BatchStates.Error;\n reject(error);\n });\n });\n }\n /**\n * Get next operation to be executed. Return null when reaching ends.\n *\n */\n nextOperation() {\n if (this.offset < this.operations.length) {\n return this.operations[this.offset++];\n }\n return null;\n }\n /**\n * Start execute operations. One one the most important difference between\n * this method with do() is that do() wraps as an sync method.\n *\n */\n parallelExecute() {\n if (this.state === BatchStates.Error) {\n return;\n }\n if (this.completed >= this.operations.length) {\n this.emitter.emit(\"finish\");\n return;\n }\n while (this.actives < this.concurrency) {\n const operation = this.nextOperation();\n if (operation) {\n operation();\n } else {\n return;\n }\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n// This file is used as a shim of \"BufferScheduler\" for some browser bundlers\n// when trying to bundle \"BufferScheduler\"\n// \"BufferScheduler\" class is only available in Node.js runtime\nexport class BufferScheduler {}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Convert a Browser Blob object into ArrayBuffer.\n *\n * @param blob -\n */\nexport async function blobToArrayBuffer(blob) {\n const fileReader = new FileReader();\n return new Promise((resolve, reject) => {\n fileReader.onloadend = ev => {\n resolve(ev.target.result);\n };\n fileReader.onerror = reject;\n fileReader.readAsArrayBuffer(blob);\n });\n}\n/**\n * Convert a Browser Blob object into string.\n *\n * @param blob -\n */\nexport async function blobToString(blob) {\n const fileReader = new FileReader();\n return new Promise((resolve, reject) => {\n fileReader.onloadend = ev => {\n resolve(ev.target.result);\n };\n fileReader.onerror = reject;\n fileReader.readAsText(blob);\n });\n}\nexport function streamToBuffer() {\n /* empty */\n}\nexport function streamToBuffer2() {\n /* empty */\n}\nexport function readStreamToLocalFile() {\n /* empty */\n}\nexport const fsStat = function stat() {\n /* empty */\n};\nexport const fsCreateReadStream = function createReadStream() {\n /* empty */\n};\n","import { __asyncDelegator, __asyncGenerator, __asyncValues, __await } from \"tslib\";\nimport { generateUuid, getDefaultProxySettings, isNode, isTokenCredential, URLBuilder } from \"@azure/core-http\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { BlobDownloadResponse } from \"./BlobDownloadResponse\";\nimport { BlobQueryResponse } from \"./BlobQueryResponse\";\nimport { AnonymousCredential } from \"./credentials/AnonymousCredential\";\nimport { StorageSharedKeyCredential } from \"./credentials/StorageSharedKeyCredential\";\nimport { AppendBlob, Blob as StorageBlob, BlockBlob, PageBlob } from \"./generated/src/operations\";\nimport { ensureCpkIfSpecified, toAccessTier } from \"./models\";\nimport { rangeResponseFromModel } from \"./PageBlobRangeResponse\";\nimport { newPipeline, isPipelineLike } from \"./Pipeline\";\nimport { BlobBeginCopyFromUrlPoller } from \"./pollers/BlobStartCopyFromUrlPoller\";\nimport { rangeToString } from \"./Range\";\nimport { StorageClient } from \"./StorageClient\";\nimport { Batch } from \"./utils/Batch\";\nimport { BufferScheduler } from \"../../storage-common/src\";\nimport { BlobDoesNotUseCustomerSpecifiedEncryption, BlobUsesCustomerSpecifiedEncryptionMsg, BLOCK_BLOB_MAX_BLOCKS, BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES, BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES, DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES, DEFAULT_BLOCK_BUFFER_SIZE_BYTES, DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS, ETagAny, URLConstants } from \"./utils/constants\";\nimport { createSpan, convertTracingToRequestOptionsBase } from \"./utils/tracing\";\nimport { appendToURLPath, appendToURLQuery, extractConnectionStringParts, ExtractPageRangeInfoItems, generateBlockID, getURLParameter, httpAuthorizationToString, isIpEndpointStyle, parseObjectReplicationRecord, setURLParameter, toBlobTags, toBlobTagsString, toQuerySerialization, toTags } from \"./utils/utils.common\";\nimport { fsCreateReadStream, fsStat, readStreamToLocalFile, streamToBuffer } from \"./utils/utils.node\";\nimport { generateBlobSASQueryParameters } from \"./sas/BlobSASSignatureValues\";\nimport { BlobLeaseClient } from \"./BlobLeaseClient\";\n/**\n * A BlobClient represents a URL to an Azure Storage blob; the blob may be a block blob,\n * append blob, or page blob.\n */\nexport class BlobClient extends StorageClient {\n constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,\n // Legacy, no fix for eslint error without breaking. Disable it for this interface.\n /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/\n options) {\n options = options || {};\n let pipeline;\n let url;\n if (isPipelineLike(credentialOrPipelineOrContainerName)) {\n // (url: string, pipeline: Pipeline)\n url = urlOrConnectionString;\n pipeline = credentialOrPipelineOrContainerName;\n } else if (isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential || credentialOrPipelineOrContainerName instanceof AnonymousCredential || isTokenCredential(credentialOrPipelineOrContainerName)) {\n // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)\n url = urlOrConnectionString;\n options = blobNameOrOptions;\n pipeline = newPipeline(credentialOrPipelineOrContainerName, options);\n } else if (!credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName !== \"string\") {\n // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)\n // The second parameter is undefined. Use anonymous credential.\n url = urlOrConnectionString;\n if (blobNameOrOptions && typeof blobNameOrOptions !== \"string\") {\n options = blobNameOrOptions;\n }\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else if (credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName === \"string\" && blobNameOrOptions && typeof blobNameOrOptions === \"string\") {\n // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)\n const containerName = credentialOrPipelineOrContainerName;\n const blobName = blobNameOrOptions;\n const extractedCreds = extractConnectionStringParts(urlOrConnectionString);\n if (extractedCreds.kind === \"AccountConnString\") {\n if (isNode) {\n const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);\n url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));\n if (!options.proxyOptions) {\n options.proxyOptions = getDefaultProxySettings(extractedCreds.proxyUri);\n }\n pipeline = newPipeline(sharedKeyCredential, options);\n } else {\n throw new Error(\"Account connection string is only supported in Node.js environment\");\n }\n } else if (extractedCreds.kind === \"SASConnString\") {\n url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) + \"?\" + extractedCreds.accountSas;\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else {\n throw new Error(\"Connection string must be either an Account connection string or a SAS connection string\");\n }\n } else {\n throw new Error(\"Expecting non-empty strings for containerName and blobName parameters\");\n }\n super(url, pipeline);\n ({\n blobName: this._name,\n containerName: this._containerName\n } = this.getBlobAndContainerNamesFromUrl());\n this.blobContext = new StorageBlob(this.storageClientContext);\n this._snapshot = getURLParameter(this.url, URLConstants.Parameters.SNAPSHOT);\n this._versionId = getURLParameter(this.url, URLConstants.Parameters.VERSIONID);\n }\n /**\n * The name of the blob.\n */\n get name() {\n return this._name;\n }\n /**\n * The name of the storage container the blob is associated with.\n */\n get containerName() {\n return this._containerName;\n }\n /**\n * Creates a new BlobClient object identical to the source but with the specified snapshot timestamp.\n * Provide \"\" will remove the snapshot and return a Client to the base blob.\n *\n * @param snapshot - The snapshot timestamp.\n * @returns A new BlobClient object identical to the source but with the specified snapshot timestamp\n */\n withSnapshot(snapshot) {\n return new BlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);\n }\n /**\n * Creates a new BlobClient object pointing to a version of this blob.\n * Provide \"\" will remove the versionId and return a Client to the base blob.\n *\n * @param versionId - The versionId.\n * @returns A new BlobClient object pointing to the version of this blob.\n */\n withVersion(versionId) {\n return new BlobClient(setURLParameter(this.url, URLConstants.Parameters.VERSIONID, versionId.length === 0 ? undefined : versionId), this.pipeline);\n }\n /**\n * Creates a AppendBlobClient object.\n *\n */\n getAppendBlobClient() {\n return new AppendBlobClient(this.url, this.pipeline);\n }\n /**\n * Creates a BlockBlobClient object.\n *\n */\n getBlockBlobClient() {\n return new BlockBlobClient(this.url, this.pipeline);\n }\n /**\n * Creates a PageBlobClient object.\n *\n */\n getPageBlobClient() {\n return new PageBlobClient(this.url, this.pipeline);\n }\n /**\n * Reads or downloads a blob from the system, including its metadata and properties.\n * You can also call Get Blob to read a snapshot.\n *\n * * In Node.js, data returns in a Readable stream readableStreamBody\n * * In browsers, data returns in a promise blobBody\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob\n *\n * @param offset - From which position of the blob to download, greater than or equal to 0\n * @param count - How much data to be downloaded, greater than 0. Will download to the end when undefined\n * @param options - Optional options to Blob Download operation.\n *\n *\n * Example usage (Node.js):\n *\n * ```js\n * // Download and convert a blob to a string\n * const downloadBlockBlobResponse = await blobClient.download();\n * const downloaded = await streamToBuffer(downloadBlockBlobResponse.readableStreamBody);\n * console.log(\"Downloaded blob content:\", downloaded.toString());\n *\n * async function streamToBuffer(readableStream) {\n * return new Promise((resolve, reject) => {\n * const chunks = [];\n * readableStream.on(\"data\", (data) => {\n * chunks.push(data instanceof Buffer ? data : Buffer.from(data));\n * });\n * readableStream.on(\"end\", () => {\n * resolve(Buffer.concat(chunks));\n * });\n * readableStream.on(\"error\", reject);\n * });\n * }\n * ```\n *\n * Example usage (browser):\n *\n * ```js\n * // Download and convert a blob to a string\n * const downloadBlockBlobResponse = await blobClient.download();\n * const downloaded = await blobToString(await downloadBlockBlobResponse.blobBody);\n * console.log(\n * \"Downloaded blob content\",\n * downloaded\n * );\n *\n * async function blobToString(blob: Blob): Promise {\n * const fileReader = new FileReader();\n * return new Promise((resolve, reject) => {\n * fileReader.onloadend = (ev: any) => {\n * resolve(ev.target!.result);\n * };\n * fileReader.onerror = reject;\n * fileReader.readAsText(blob);\n * });\n * }\n * ```\n */\n async download(offset = 0, count, options = {}) {\n var _a;\n options.conditions = options.conditions || {};\n options.conditions = options.conditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-download\", options);\n try {\n const res = await this.blobContext.download(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n requestOptions: {\n onDownloadProgress: isNode ? undefined : options.onProgress // for Node.js, progress is reported by RetriableReadableStream\n },\n range: offset === 0 && !count ? undefined : rangeToString({\n offset,\n count\n }),\n rangeGetContentMD5: options.rangeGetContentMD5,\n rangeGetContentCRC64: options.rangeGetContentCrc64,\n snapshot: options.snapshot,\n cpkInfo: options.customerProvidedKey\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n const wrappedRes = Object.assign(Object.assign({}, res), {\n _response: res._response,\n objectReplicationDestinationPolicyId: res.objectReplicationPolicyId,\n objectReplicationSourceProperties: parseObjectReplicationRecord(res.objectReplicationRules)\n });\n // Return browser response immediately\n if (!isNode) {\n return wrappedRes;\n }\n // We support retrying when download stream unexpected ends in Node.js runtime\n // Following code shouldn't be bundled into browser build, however some\n // bundlers may try to bundle following code and \"FileReadResponse.ts\".\n // In this case, \"FileDownloadResponse.browser.ts\" will be used as a shim of \"FileDownloadResponse.ts\"\n // The config is in package.json \"browser\" field\n if (options.maxRetryRequests === undefined || options.maxRetryRequests < 0) {\n // TODO: Default value or make it a required parameter?\n options.maxRetryRequests = DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS;\n }\n if (res.contentLength === undefined) {\n throw new RangeError(`File download response doesn't contain valid content length header`);\n }\n if (!res.etag) {\n throw new RangeError(`File download response doesn't contain valid etag header`);\n }\n return new BlobDownloadResponse(wrappedRes, async start => {\n var _a;\n const updatedDownloadOptions = {\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: {\n ifMatch: options.conditions.ifMatch || res.etag,\n ifModifiedSince: options.conditions.ifModifiedSince,\n ifNoneMatch: options.conditions.ifNoneMatch,\n ifUnmodifiedSince: options.conditions.ifUnmodifiedSince,\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n },\n range: rangeToString({\n count: offset + res.contentLength - start,\n offset: start\n }),\n rangeGetContentMD5: options.rangeGetContentMD5,\n rangeGetContentCRC64: options.rangeGetContentCrc64,\n snapshot: options.snapshot,\n cpkInfo: options.customerProvidedKey\n };\n // Debug purpose only\n // console.log(\n // `Read from internal stream, range: ${\n // updatedOptions.range\n // }, options: ${JSON.stringify(updatedOptions)}`\n // );\n return (await this.blobContext.download(Object.assign({\n abortSignal: options.abortSignal\n }, updatedDownloadOptions))).readableStreamBody;\n }, offset, res.contentLength, {\n maxRetryRequests: options.maxRetryRequests,\n onProgress: options.onProgress\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns true if the Azure blob resource represented by this client exists; false otherwise.\n *\n * NOTE: use this function with care since an existing blob might be deleted by other clients or\n * applications. Vice versa new blobs might be added by other clients or applications after this\n * function completes.\n *\n * @param options - options to Exists operation.\n */\n async exists(options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-exists\", options);\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n await this.getProperties({\n abortSignal: options.abortSignal,\n customerProvidedKey: options.customerProvidedKey,\n conditions: options.conditions,\n tracingOptions: updatedOptions.tracingOptions\n });\n return true;\n } catch (e) {\n if (e.statusCode === 404) {\n // Expected exception when checking blob existence\n return false;\n } else if (e.statusCode === 409 && (e.details.errorCode === BlobUsesCustomerSpecifiedEncryptionMsg || e.details.errorCode === BlobDoesNotUseCustomerSpecifiedEncryption)) {\n // Expected exception when checking blob existence\n return true;\n }\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns all user-defined metadata, standard HTTP properties, and system properties\n * for the blob. It does not return the content of the blob.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-properties\n *\n * WARNING: The `metadata` object returned in the response will have its keys in lowercase, even if\n * they originally contained uppercase characters. This differs from the metadata keys returned by\n * the methods of {@link ContainerClient} that list blobs using the `includeMetadata` option, which\n * will retain their original casing.\n *\n * @param options - Optional options to Get Properties operation.\n */\n async getProperties(options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-getProperties\", options);\n try {\n options.conditions = options.conditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n const res = await this.blobContext.getProperties(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n cpkInfo: options.customerProvidedKey\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n return Object.assign(Object.assign({}, res), {\n _response: res._response,\n objectReplicationDestinationPolicyId: res.objectReplicationPolicyId,\n objectReplicationSourceProperties: parseObjectReplicationRecord(res.objectReplicationRules)\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Marks the specified blob or snapshot for deletion. The blob is later deleted\n * during garbage collection. Note that in order to delete a blob, you must delete\n * all of its snapshots. You can delete both at the same time with the Delete\n * Blob operation.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob\n *\n * @param options - Optional options to Blob Delete operation.\n */\n async delete(options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-delete\", options);\n options.conditions = options.conditions || {};\n try {\n return await this.blobContext.delete(Object.assign({\n abortSignal: options.abortSignal,\n deleteSnapshots: options.deleteSnapshots,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Marks the specified blob or snapshot for deletion if it exists. The blob is later deleted\n * during garbage collection. Note that in order to delete a blob, you must delete\n * all of its snapshots. You can delete both at the same time with the Delete\n * Blob operation.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob\n *\n * @param options - Optional options to Blob Delete operation.\n */\n async deleteIfExists(options = {}) {\n var _a, _b;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-deleteIfExists\", options);\n try {\n const res = await this.delete(updatedOptions);\n return Object.assign(Object.assign({\n succeeded: true\n }, res), {\n _response: res._response\n });\n } catch (e) {\n if (((_a = e.details) === null || _a === void 0 ? void 0 : _a.errorCode) === \"BlobNotFound\") {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Expected exception when deleting a blob or snapshot only if it exists.\"\n });\n return Object.assign(Object.assign({\n succeeded: false\n }, (_b = e.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), {\n _response: e.response\n });\n }\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Restores the contents and metadata of soft deleted blob and any associated\n * soft deleted snapshots. Undelete Blob is supported only on version 2017-07-29\n * or later.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/undelete-blob\n *\n * @param options - Optional options to Blob Undelete operation.\n */\n async undelete(options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-undelete\", options);\n try {\n return await this.blobContext.undelete(Object.assign({\n abortSignal: options.abortSignal\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Sets system properties on the blob.\n *\n * If no value provided, or no value provided for the specified blob HTTP headers,\n * these blob HTTP headers without a value will be cleared.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties\n *\n * @param blobHTTPHeaders - If no value provided, or no value provided for\n * the specified blob HTTP headers, these blob HTTP\n * headers without a value will be cleared.\n * A common header to set is `blobContentType`\n * enabling the browser to provide functionality\n * based on file type.\n * @param options - Optional options to Blob Set HTTP Headers operation.\n */\n async setHTTPHeaders(blobHTTPHeaders, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-setHTTPHeaders\", options);\n options.conditions = options.conditions || {};\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.blobContext.setHttpHeaders(Object.assign({\n abortSignal: options.abortSignal,\n blobHttpHeaders: blobHTTPHeaders,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Sets user-defined metadata for the specified blob as one or more name-value pairs.\n *\n * If no option provided, or no metadata defined in the parameter, the blob\n * metadata will be removed.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata\n *\n * @param metadata - Replace existing metadata with this value.\n * If no value provided the existing metadata will be removed.\n * @param options - Optional options to Set Metadata operation.\n */\n async setMetadata(metadata, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-setMetadata\", options);\n options.conditions = options.conditions || {};\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.blobContext.setMetadata(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n metadata,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Sets tags on the underlying blob.\n * A blob can have up to 10 tags. Tag keys must be between 1 and 128 characters. Tag values must be between 0 and 256 characters.\n * Valid tag key and value characters include lower and upper case letters, digits (0-9),\n * space (' '), plus ('+'), minus ('-'), period ('.'), foward slash ('/'), colon (':'), equals ('='), and underscore ('_').\n *\n * @param tags -\n * @param options -\n */\n async setTags(tags, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-setTags\", options);\n try {\n return await this.blobContext.setTags(Object.assign(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)), {\n tags: toBlobTags(tags)\n }));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Gets the tags associated with the underlying blob.\n *\n * @param options -\n */\n async getTags(options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-getTags\", options);\n try {\n const response = await this.blobContext.getTags(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n const wrappedResponse = Object.assign(Object.assign({}, response), {\n _response: response._response,\n tags: toTags({\n blobTagSet: response.blobTagSet\n }) || {}\n });\n return wrappedResponse;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Get a {@link BlobLeaseClient} that manages leases on the blob.\n *\n * @param proposeLeaseId - Initial proposed lease Id.\n * @returns A new BlobLeaseClient object for managing leases on the blob.\n */\n getBlobLeaseClient(proposeLeaseId) {\n return new BlobLeaseClient(this, proposeLeaseId);\n }\n /**\n * Creates a read-only snapshot of a blob.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/snapshot-blob\n *\n * @param options - Optional options to the Blob Create Snapshot operation.\n */\n async createSnapshot(options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-createSnapshot\", options);\n options.conditions = options.conditions || {};\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.blobContext.createSnapshot(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n metadata: options.metadata,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Asynchronously copies a blob to a destination within the storage account.\n * This method returns a long running operation poller that allows you to wait\n * indefinitely until the copy is completed.\n * You can also cancel a copy before it is completed by calling `cancelOperation` on the poller.\n * Note that the onProgress callback will not be invoked if the operation completes in the first\n * request, and attempting to cancel a completed copy will result in an error being thrown.\n *\n * In version 2012-02-12 and later, the source for a Copy Blob operation can be\n * a committed blob in any Azure storage account.\n * Beginning with version 2015-02-21, the source for a Copy Blob operation can be\n * an Azure file in any Azure storage account.\n * Only storage accounts created on or after June 7th, 2012 allow the Copy Blob\n * operation to copy from another storage account.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob\n *\n * Example using automatic polling:\n *\n * ```js\n * const copyPoller = await blobClient.beginCopyFromURL('url');\n * const result = await copyPoller.pollUntilDone();\n * ```\n *\n * Example using manual polling:\n *\n * ```js\n * const copyPoller = await blobClient.beginCopyFromURL('url');\n * while (!poller.isDone()) {\n * await poller.poll();\n * }\n * const result = copyPoller.getResult();\n * ```\n *\n * Example using progress updates:\n *\n * ```js\n * const copyPoller = await blobClient.beginCopyFromURL('url', {\n * onProgress(state) {\n * console.log(`Progress: ${state.copyProgress}`);\n * }\n * });\n * const result = await copyPoller.pollUntilDone();\n * ```\n *\n * Example using a changing polling interval (default 15 seconds):\n *\n * ```js\n * const copyPoller = await blobClient.beginCopyFromURL('url', {\n * intervalInMs: 1000 // poll blob every 1 second for copy progress\n * });\n * const result = await copyPoller.pollUntilDone();\n * ```\n *\n * Example using copy cancellation:\n *\n * ```js\n * const copyPoller = await blobClient.beginCopyFromURL('url');\n * // cancel operation after starting it.\n * try {\n * await copyPoller.cancelOperation();\n * // calls to get the result now throw PollerCancelledError\n * await copyPoller.getResult();\n * } catch (err) {\n * if (err.name === 'PollerCancelledError') {\n * console.log('The copy was cancelled.');\n * }\n * }\n * ```\n *\n * @param copySource - url to the source Azure Blob/File.\n * @param options - Optional options to the Blob Start Copy From URL operation.\n */\n async beginCopyFromURL(copySource, options = {}) {\n const client = {\n abortCopyFromURL: (...args) => this.abortCopyFromURL(...args),\n getProperties: (...args) => this.getProperties(...args),\n startCopyFromURL: (...args) => this.startCopyFromURL(...args)\n };\n const poller = new BlobBeginCopyFromUrlPoller({\n blobClient: client,\n copySource,\n intervalInMs: options.intervalInMs,\n onProgress: options.onProgress,\n resumeFrom: options.resumeFrom,\n startCopyFromURLOptions: options\n });\n // Trigger the startCopyFromURL call by calling poll.\n // Any errors from this method should be surfaced to the user.\n await poller.poll();\n return poller;\n }\n /**\n * Aborts a pending asynchronous Copy Blob operation, and leaves a destination blob with zero\n * length and full metadata. Version 2012-02-12 and newer.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob\n *\n * @param copyId - Id of the Copy From URL operation.\n * @param options - Optional options to the Blob Abort Copy From URL operation.\n */\n async abortCopyFromURL(copyId, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-abortCopyFromURL\", options);\n try {\n return await this.blobContext.abortCopyFromURL(copyId, Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * The synchronous Copy From URL operation copies a blob or an internet resource to a new blob. It will not\n * return a response until the copy is complete.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url\n *\n * @param copySource - The source URL to copy from, Shared Access Signature(SAS) maybe needed for authentication\n * @param options -\n */\n async syncCopyFromURL(copySource, options = {}) {\n var _a, _b, _c;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-syncCopyFromURL\", options);\n options.conditions = options.conditions || {};\n options.sourceConditions = options.sourceConditions || {};\n try {\n return await this.blobContext.copyFromURL(copySource, Object.assign({\n abortSignal: options.abortSignal,\n metadata: options.metadata,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n sourceModifiedAccessConditions: {\n sourceIfMatch: options.sourceConditions.ifMatch,\n sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,\n sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,\n sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince\n },\n sourceContentMD5: options.sourceContentMD5,\n copySourceAuthorization: httpAuthorizationToString(options.sourceAuthorization),\n tier: toAccessTier(options.tier),\n blobTagsString: toBlobTagsString(options.tags),\n immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn,\n immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode,\n legalHold: options.legalHold,\n encryptionScope: options.encryptionScope,\n copySourceTags: options.copySourceTags\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Sets the tier on a blob. The operation is allowed on a page blob in a premium\n * storage account and on a block blob in a blob storage account (locally redundant\n * storage only). A premium page blob's tier determines the allowed size, IOPS,\n * and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive\n * storage type. This operation does not update the blob's ETag.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-tier\n *\n * @param tier - The tier to be set on the blob. Valid values are Hot, Cool, or Archive.\n * @param options - Optional options to the Blob Set Tier operation.\n */\n async setAccessTier(tier, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-setAccessTier\", options);\n try {\n return await this.blobContext.setTier(toAccessTier(tier), Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n rehydratePriority: options.rehydratePriority\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n async downloadToBuffer(param1, param2, param3, param4 = {}) {\n let buffer;\n let offset = 0;\n let count = 0;\n let options = param4;\n if (param1 instanceof Buffer) {\n buffer = param1;\n offset = param2 || 0;\n count = typeof param3 === \"number\" ? param3 : 0;\n } else {\n offset = typeof param1 === \"number\" ? param1 : 0;\n count = typeof param2 === \"number\" ? param2 : 0;\n options = param3 || {};\n }\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-downloadToBuffer\", options);\n try {\n if (!options.blockSize) {\n options.blockSize = 0;\n }\n if (options.blockSize < 0) {\n throw new RangeError(\"blockSize option must be >= 0\");\n }\n if (options.blockSize === 0) {\n options.blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES;\n }\n if (offset < 0) {\n throw new RangeError(\"offset option must be >= 0\");\n }\n if (count && count <= 0) {\n throw new RangeError(\"count option must be greater than 0\");\n }\n if (!options.conditions) {\n options.conditions = {};\n }\n // Customer doesn't specify length, get it\n if (!count) {\n const response = await this.getProperties(Object.assign(Object.assign({}, options), {\n tracingOptions: Object.assign(Object.assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions))\n }));\n count = response.contentLength - offset;\n if (count < 0) {\n throw new RangeError(`offset ${offset} shouldn't be larger than blob size ${response.contentLength}`);\n }\n }\n // Allocate the buffer of size = count if the buffer is not provided\n if (!buffer) {\n try {\n buffer = Buffer.alloc(count);\n } catch (error) {\n throw new Error(`Unable to allocate the buffer of size: ${count}(in bytes). Please try passing your own buffer to the \"downloadToBuffer\" method or try using other methods like \"download\" or \"downloadToFile\".\\t ${error.message}`);\n }\n }\n if (buffer.length < count) {\n throw new RangeError(`The buffer's size should be equal to or larger than the request count of bytes: ${count}`);\n }\n let transferProgress = 0;\n const batch = new Batch(options.concurrency);\n for (let off = offset; off < offset + count; off = off + options.blockSize) {\n batch.addOperation(async () => {\n // Exclusive chunk end position\n let chunkEnd = offset + count;\n if (off + options.blockSize < chunkEnd) {\n chunkEnd = off + options.blockSize;\n }\n const response = await this.download(off, chunkEnd - off, {\n abortSignal: options.abortSignal,\n conditions: options.conditions,\n maxRetryRequests: options.maxRetryRequestsPerBlock,\n customerProvidedKey: options.customerProvidedKey,\n tracingOptions: Object.assign(Object.assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions))\n });\n const stream = response.readableStreamBody;\n await streamToBuffer(stream, buffer, off - offset, chunkEnd - offset);\n // Update progress after block is downloaded, in case of block trying\n // Could provide finer grained progress updating inside HTTP requests,\n // only if convenience layer download try is enabled\n transferProgress += chunkEnd - off;\n if (options.onProgress) {\n options.onProgress({\n loadedBytes: transferProgress\n });\n }\n });\n }\n await batch.do();\n return buffer;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n *\n * Downloads an Azure Blob to a local file.\n * Fails if the the given file path already exits.\n * Offset and count are optional, pass 0 and undefined respectively to download the entire blob.\n *\n * @param filePath -\n * @param offset - From which position of the block blob to download.\n * @param count - How much data to be downloaded. Will download to the end when passing undefined.\n * @param options - Options to Blob download options.\n * @returns The response data for blob download operation,\n * but with readableStreamBody set to undefined since its\n * content is already read and written into a local file\n * at the specified path.\n */\n async downloadToFile(filePath, offset = 0, count, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-downloadToFile\", options);\n try {\n const response = await this.download(offset, count, Object.assign(Object.assign({}, options), {\n tracingOptions: Object.assign(Object.assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions))\n }));\n if (response.readableStreamBody) {\n await readStreamToLocalFile(response.readableStreamBody, filePath);\n }\n // The stream is no longer accessible so setting it to undefined.\n response.blobDownloadStream = undefined;\n return response;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n getBlobAndContainerNamesFromUrl() {\n let containerName;\n let blobName;\n try {\n // URL may look like the following\n // \"https://myaccount.blob.core.windows.net/mycontainer/blob?sasString\";\n // \"https://myaccount.blob.core.windows.net/mycontainer/blob\";\n // \"https://myaccount.blob.core.windows.net/mycontainer/blob/a.txt?sasString\";\n // \"https://myaccount.blob.core.windows.net/mycontainer/blob/a.txt\";\n // IPv4/IPv6 address hosts, Endpoints - `http://127.0.0.1:10000/devstoreaccount1/containername/blob`\n // http://localhost:10001/devstoreaccount1/containername/blob\n const parsedUrl = URLBuilder.parse(this.url);\n if (parsedUrl.getHost().split(\".\")[1] === \"blob\") {\n // \"https://myaccount.blob.core.windows.net/containername/blob\".\n // .getPath() -> /containername/blob\n const pathComponents = parsedUrl.getPath().match(\"/([^/]*)(/(.*))?\");\n containerName = pathComponents[1];\n blobName = pathComponents[3];\n } else if (isIpEndpointStyle(parsedUrl)) {\n // IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/containername/blob\n // Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/containername/blob\n // .getPath() -> /devstoreaccount1/containername/blob\n const pathComponents = parsedUrl.getPath().match(\"/([^/]*)/([^/]*)(/(.*))?\");\n containerName = pathComponents[2];\n blobName = pathComponents[4];\n } else {\n // \"https://customdomain.com/containername/blob\".\n // .getPath() -> /containername/blob\n const pathComponents = parsedUrl.getPath().match(\"/([^/]*)(/(.*))?\");\n containerName = pathComponents[1];\n blobName = pathComponents[3];\n }\n // decode the encoded blobName, containerName - to get all the special characters that might be present in them\n containerName = decodeURIComponent(containerName);\n blobName = decodeURIComponent(blobName);\n // Azure Storage Server will replace \"\\\" with \"/\" in the blob names\n // doing the same in the SDK side so that the user doesn't have to replace \"\\\" instances in the blobName\n blobName = blobName.replace(/\\\\/g, \"/\");\n if (!containerName) {\n throw new Error(\"Provided containerName is invalid.\");\n }\n return {\n blobName,\n containerName\n };\n } catch (error) {\n throw new Error(\"Unable to extract blobName and containerName with provided information.\");\n }\n }\n /**\n * Asynchronously copies a blob to a destination within the storage account.\n * In version 2012-02-12 and later, the source for a Copy Blob operation can be\n * a committed blob in any Azure storage account.\n * Beginning with version 2015-02-21, the source for a Copy Blob operation can be\n * an Azure file in any Azure storage account.\n * Only storage accounts created on or after June 7th, 2012 allow the Copy Blob\n * operation to copy from another storage account.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob\n *\n * @param copySource - url to the source Azure Blob/File.\n * @param options - Optional options to the Blob Start Copy From URL operation.\n */\n async startCopyFromURL(copySource, options = {}) {\n var _a, _b, _c;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-startCopyFromURL\", options);\n options.conditions = options.conditions || {};\n options.sourceConditions = options.sourceConditions || {};\n try {\n return await this.blobContext.startCopyFromURL(copySource, Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n metadata: options.metadata,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n sourceModifiedAccessConditions: {\n sourceIfMatch: options.sourceConditions.ifMatch,\n sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,\n sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,\n sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince,\n sourceIfTags: options.sourceConditions.tagConditions\n },\n immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn,\n immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode,\n legalHold: options.legalHold,\n rehydratePriority: options.rehydratePriority,\n tier: toAccessTier(options.tier),\n blobTagsString: toBlobTagsString(options.tags),\n sealBlob: options.sealBlob\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Only available for BlobClient constructed with a shared key credential.\n *\n * Generates a Blob Service Shared Access Signature (SAS) URI based on the client properties\n * and parameters passed in. The SAS is signed by the shared key credential of the client.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas\n *\n * @param options - Optional parameters.\n * @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.\n */\n generateSasUrl(options) {\n return new Promise(resolve => {\n if (!(this.credential instanceof StorageSharedKeyCredential)) {\n throw new RangeError(\"Can only generate the SAS when the client is initialized with a shared key credential\");\n }\n const sas = generateBlobSASQueryParameters(Object.assign({\n containerName: this._containerName,\n blobName: this._name,\n snapshotTime: this._snapshot,\n versionId: this._versionId\n }, options), this.credential).toString();\n resolve(appendToURLQuery(this.url, sas));\n });\n }\n /**\n * Delete the immutablility policy on the blob.\n *\n * @param options - Optional options to delete immutability policy on the blob.\n */\n async deleteImmutabilityPolicy(options) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-deleteImmutabilityPolicy\", options);\n try {\n return await this.blobContext.deleteImmutabilityPolicy(Object.assign({\n abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Set immutablility policy on the blob.\n *\n * @param options - Optional options to set immutability policy on the blob.\n */\n async setImmutabilityPolicy(immutabilityPolicy, options) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-setImmutabilityPolicy\", options);\n try {\n return await this.blobContext.setImmutabilityPolicy(Object.assign({\n abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal,\n immutabilityPolicyExpiry: immutabilityPolicy.expiriesOn,\n immutabilityPolicyMode: immutabilityPolicy.policyMode,\n modifiedAccessConditions: options === null || options === void 0 ? void 0 : options.modifiedAccessCondition\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Set legal hold on the blob.\n *\n * @param options - Optional options to set legal hold on the blob.\n */\n async setLegalHold(legalHoldEnabled, options) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobClient-setLegalHold\", options);\n try {\n return await this.blobContext.setLegalHold(legalHoldEnabled, Object.assign({\n abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n}\n/**\n * AppendBlobClient defines a set of operations applicable to append blobs.\n */\nexport class AppendBlobClient extends BlobClient {\n constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,\n // Legacy, no fix for eslint error without breaking. Disable it for this interface.\n /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/\n options) {\n // In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.\n // super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);\n let pipeline;\n let url;\n options = options || {};\n if (isPipelineLike(credentialOrPipelineOrContainerName)) {\n // (url: string, pipeline: Pipeline)\n url = urlOrConnectionString;\n pipeline = credentialOrPipelineOrContainerName;\n } else if (isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential || credentialOrPipelineOrContainerName instanceof AnonymousCredential || isTokenCredential(credentialOrPipelineOrContainerName)) {\n // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) url = urlOrConnectionString;\n url = urlOrConnectionString;\n options = blobNameOrOptions;\n pipeline = newPipeline(credentialOrPipelineOrContainerName, options);\n } else if (!credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName !== \"string\") {\n // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)\n url = urlOrConnectionString;\n // The second parameter is undefined. Use anonymous credential.\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else if (credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName === \"string\" && blobNameOrOptions && typeof blobNameOrOptions === \"string\") {\n // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)\n const containerName = credentialOrPipelineOrContainerName;\n const blobName = blobNameOrOptions;\n const extractedCreds = extractConnectionStringParts(urlOrConnectionString);\n if (extractedCreds.kind === \"AccountConnString\") {\n if (isNode) {\n const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);\n url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));\n if (!options.proxyOptions) {\n options.proxyOptions = getDefaultProxySettings(extractedCreds.proxyUri);\n }\n pipeline = newPipeline(sharedKeyCredential, options);\n } else {\n throw new Error(\"Account connection string is only supported in Node.js environment\");\n }\n } else if (extractedCreds.kind === \"SASConnString\") {\n url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) + \"?\" + extractedCreds.accountSas;\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else {\n throw new Error(\"Connection string must be either an Account connection string or a SAS connection string\");\n }\n } else {\n throw new Error(\"Expecting non-empty strings for containerName and blobName parameters\");\n }\n super(url, pipeline);\n this.appendBlobContext = new AppendBlob(this.storageClientContext);\n }\n /**\n * Creates a new AppendBlobClient object identical to the source but with the\n * specified snapshot timestamp.\n * Provide \"\" will remove the snapshot and return a Client to the base blob.\n *\n * @param snapshot - The snapshot timestamp.\n * @returns A new AppendBlobClient object identical to the source but with the specified snapshot timestamp.\n */\n withSnapshot(snapshot) {\n return new AppendBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);\n }\n /**\n * Creates a 0-length append blob. Call AppendBlock to append data to an append blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-blob\n *\n * @param options - Options to the Append Block Create operation.\n *\n *\n * Example usage:\n *\n * ```js\n * const appendBlobClient = containerClient.getAppendBlobClient(\"\");\n * await appendBlobClient.create();\n * ```\n */\n async create(options = {}) {\n var _a, _b, _c;\n const {\n span,\n updatedOptions\n } = createSpan(\"AppendBlobClient-create\", options);\n options.conditions = options.conditions || {};\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.appendBlobContext.create(0, Object.assign({\n abortSignal: options.abortSignal,\n blobHttpHeaders: options.blobHTTPHeaders,\n leaseAccessConditions: options.conditions,\n metadata: options.metadata,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope,\n immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn,\n immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode,\n legalHold: options.legalHold,\n blobTagsString: toBlobTagsString(options.tags)\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Creates a 0-length append blob. Call AppendBlock to append data to an append blob.\n * If the blob with the same name already exists, the content of the existing blob will remain unchanged.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-blob\n *\n * @param options -\n */\n async createIfNotExists(options = {}) {\n var _a, _b;\n const {\n span,\n updatedOptions\n } = createSpan(\"AppendBlobClient-createIfNotExists\", options);\n const conditions = {\n ifNoneMatch: ETagAny\n };\n try {\n const res = await this.create(Object.assign(Object.assign({}, updatedOptions), {\n conditions\n }));\n return Object.assign(Object.assign({\n succeeded: true\n }, res), {\n _response: res._response\n });\n } catch (e) {\n if (((_a = e.details) === null || _a === void 0 ? void 0 : _a.errorCode) === \"BlobAlreadyExists\") {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Expected exception when creating a blob only if it does not already exist.\"\n });\n return Object.assign(Object.assign({\n succeeded: false\n }, (_b = e.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), {\n _response: e.response\n });\n }\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Seals the append blob, making it read only.\n *\n * @param options -\n */\n async seal(options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"AppendBlobClient-seal\", options);\n options.conditions = options.conditions || {};\n try {\n return await this.appendBlobContext.seal(Object.assign({\n abortSignal: options.abortSignal,\n appendPositionAccessConditions: options.conditions,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Commits a new block of data to the end of the existing append blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/append-block\n *\n * @param body - Data to be appended.\n * @param contentLength - Length of the body in bytes.\n * @param options - Options to the Append Block operation.\n *\n *\n * Example usage:\n *\n * ```js\n * const content = \"Hello World!\";\n *\n * // Create a new append blob and append data to the blob.\n * const newAppendBlobClient = containerClient.getAppendBlobClient(\"\");\n * await newAppendBlobClient.create();\n * await newAppendBlobClient.appendBlock(content, content.length);\n *\n * // Append data to an existing append blob.\n * const existingAppendBlobClient = containerClient.getAppendBlobClient(\"\");\n * await existingAppendBlobClient.appendBlock(content, content.length);\n * ```\n */\n async appendBlock(body, contentLength, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"AppendBlobClient-appendBlock\", options);\n options.conditions = options.conditions || {};\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.appendBlobContext.appendBlock(contentLength, body, Object.assign({\n abortSignal: options.abortSignal,\n appendPositionAccessConditions: options.conditions,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n requestOptions: {\n onUploadProgress: options.onProgress\n },\n transactionalContentMD5: options.transactionalContentMD5,\n transactionalContentCrc64: options.transactionalContentCrc64,\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * The Append Block operation commits a new block of data to the end of an existing append blob\n * where the contents are read from a source url.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/append-block-from-url\n *\n * @param sourceURL -\n * The url to the blob that will be the source of the copy. A source blob in the same storage account can\n * be authenticated via Shared Key. However, if the source is a blob in another account, the source blob\n * must either be public or must be authenticated via a shared access signature. If the source blob is\n * public, no authentication is required to perform the operation.\n * @param sourceOffset - Offset in source to be appended\n * @param count - Number of bytes to be appended as a block\n * @param options -\n */\n async appendBlockFromURL(sourceURL, sourceOffset, count, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"AppendBlobClient-appendBlockFromURL\", options);\n options.conditions = options.conditions || {};\n options.sourceConditions = options.sourceConditions || {};\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.appendBlobContext.appendBlockFromUrl(sourceURL, 0, Object.assign({\n abortSignal: options.abortSignal,\n sourceRange: rangeToString({\n offset: sourceOffset,\n count\n }),\n sourceContentMD5: options.sourceContentMD5,\n sourceContentCrc64: options.sourceContentCrc64,\n leaseAccessConditions: options.conditions,\n appendPositionAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n sourceModifiedAccessConditions: {\n sourceIfMatch: options.sourceConditions.ifMatch,\n sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,\n sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,\n sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince\n },\n copySourceAuthorization: httpAuthorizationToString(options.sourceAuthorization),\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n}\n/**\n * BlockBlobClient defines a set of operations applicable to block blobs.\n */\nexport class BlockBlobClient extends BlobClient {\n constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,\n // Legacy, no fix for eslint error without breaking. Disable it for this interface.\n /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/\n options) {\n // In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.\n // super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);\n let pipeline;\n let url;\n options = options || {};\n if (isPipelineLike(credentialOrPipelineOrContainerName)) {\n // (url: string, pipeline: Pipeline)\n url = urlOrConnectionString;\n pipeline = credentialOrPipelineOrContainerName;\n } else if (isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential || credentialOrPipelineOrContainerName instanceof AnonymousCredential || isTokenCredential(credentialOrPipelineOrContainerName)) {\n // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)\n url = urlOrConnectionString;\n options = blobNameOrOptions;\n pipeline = newPipeline(credentialOrPipelineOrContainerName, options);\n } else if (!credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName !== \"string\") {\n // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)\n // The second parameter is undefined. Use anonymous credential.\n url = urlOrConnectionString;\n if (blobNameOrOptions && typeof blobNameOrOptions !== \"string\") {\n options = blobNameOrOptions;\n }\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else if (credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName === \"string\" && blobNameOrOptions && typeof blobNameOrOptions === \"string\") {\n // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)\n const containerName = credentialOrPipelineOrContainerName;\n const blobName = blobNameOrOptions;\n const extractedCreds = extractConnectionStringParts(urlOrConnectionString);\n if (extractedCreds.kind === \"AccountConnString\") {\n if (isNode) {\n const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);\n url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));\n if (!options.proxyOptions) {\n options.proxyOptions = getDefaultProxySettings(extractedCreds.proxyUri);\n }\n pipeline = newPipeline(sharedKeyCredential, options);\n } else {\n throw new Error(\"Account connection string is only supported in Node.js environment\");\n }\n } else if (extractedCreds.kind === \"SASConnString\") {\n url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) + \"?\" + extractedCreds.accountSas;\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else {\n throw new Error(\"Connection string must be either an Account connection string or a SAS connection string\");\n }\n } else {\n throw new Error(\"Expecting non-empty strings for containerName and blobName parameters\");\n }\n super(url, pipeline);\n this.blockBlobContext = new BlockBlob(this.storageClientContext);\n this._blobContext = new StorageBlob(this.storageClientContext);\n }\n /**\n * Creates a new BlockBlobClient object identical to the source but with the\n * specified snapshot timestamp.\n * Provide \"\" will remove the snapshot and return a URL to the base blob.\n *\n * @param snapshot - The snapshot timestamp.\n * @returns A new BlockBlobClient object identical to the source but with the specified snapshot timestamp.\n */\n withSnapshot(snapshot) {\n return new BlockBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);\n }\n /**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n *\n * Quick query for a JSON or CSV formatted blob.\n *\n * Example usage (Node.js):\n *\n * ```js\n * // Query and convert a blob to a string\n * const queryBlockBlobResponse = await blockBlobClient.query(\"select * from BlobStorage\");\n * const downloaded = (await streamToBuffer(queryBlockBlobResponse.readableStreamBody)).toString();\n * console.log(\"Query blob content:\", downloaded);\n *\n * async function streamToBuffer(readableStream) {\n * return new Promise((resolve, reject) => {\n * const chunks = [];\n * readableStream.on(\"data\", (data) => {\n * chunks.push(data instanceof Buffer ? data : Buffer.from(data));\n * });\n * readableStream.on(\"end\", () => {\n * resolve(Buffer.concat(chunks));\n * });\n * readableStream.on(\"error\", reject);\n * });\n * }\n * ```\n *\n * @param query -\n * @param options -\n */\n async query(query, options = {}) {\n var _a;\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-query\", options);\n try {\n if (!isNode) {\n throw new Error(\"This operation currently is only supported in Node.js.\");\n }\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n const response = await this._blobContext.query(Object.assign({\n abortSignal: options.abortSignal,\n queryRequest: {\n queryType: \"SQL\",\n expression: query,\n inputSerialization: toQuerySerialization(options.inputTextConfiguration),\n outputSerialization: toQuerySerialization(options.outputTextConfiguration)\n },\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n cpkInfo: options.customerProvidedKey\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n return new BlobQueryResponse(response, {\n abortSignal: options.abortSignal,\n onProgress: options.onProgress,\n onError: options.onError\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Creates a new block blob, or updates the content of an existing block blob.\n * Updating an existing block blob overwrites any existing metadata on the blob.\n * Partial updates are not supported; the content of the existing blob is\n * overwritten with the new content. To perform a partial update of a block blob's,\n * use {@link stageBlock} and {@link commitBlockList}.\n *\n * This is a non-parallel uploading method, please use {@link uploadFile},\n * {@link uploadStream} or {@link uploadBrowserData} for better performance\n * with concurrency uploading.\n *\n * @see https://docs.microsoft.com/rest/api/storageservices/put-blob\n *\n * @param body - Blob, string, ArrayBuffer, ArrayBufferView or a function\n * which returns a new Readable stream whose offset is from data source beginning.\n * @param contentLength - Length of body in bytes. Use Buffer.byteLength() to calculate body length for a\n * string including non non-Base64/Hex-encoded characters.\n * @param options - Options to the Block Blob Upload operation.\n * @returns Response data for the Block Blob Upload operation.\n *\n * Example usage:\n *\n * ```js\n * const content = \"Hello world!\";\n * const uploadBlobResponse = await blockBlobClient.upload(content, content.length);\n * ```\n */\n async upload(body, contentLength, options = {}) {\n var _a, _b, _c;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-upload\", options);\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.blockBlobContext.upload(contentLength, body, Object.assign({\n abortSignal: options.abortSignal,\n blobHttpHeaders: options.blobHTTPHeaders,\n leaseAccessConditions: options.conditions,\n metadata: options.metadata,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n requestOptions: {\n onUploadProgress: options.onProgress\n },\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope,\n immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn,\n immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode,\n legalHold: options.legalHold,\n tier: toAccessTier(options.tier),\n blobTagsString: toBlobTagsString(options.tags)\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Creates a new Block Blob where the contents of the blob are read from a given URL.\n * This API is supported beginning with the 2020-04-08 version. Partial updates\n * are not supported with Put Blob from URL; the content of an existing blob is overwritten with\n * the content of the new blob. To perform partial updates to a block blob’s contents using a\n * source URL, use {@link stageBlockFromURL} and {@link commitBlockList}.\n *\n * @param sourceURL - Specifies the URL of the blob. The value\n * may be a URL of up to 2 KB in length that specifies a blob.\n * The value should be URL-encoded as it would appear\n * in a request URI. The source blob must either be public\n * or must be authenticated via a shared access signature.\n * If the source blob is public, no authentication is required\n * to perform the operation. Here are some examples of source object URLs:\n * - https://myaccount.blob.core.windows.net/mycontainer/myblob\n * - https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=\n * @param options - Optional parameters.\n */\n async syncUploadFromURL(sourceURL, options = {}) {\n var _a, _b, _c, _d, _e;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-syncUploadFromURL\", options);\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.blockBlobContext.putBlobFromUrl(0, sourceURL, Object.assign(Object.assign(Object.assign({}, options), {\n blobHttpHeaders: options.blobHTTPHeaders,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: options.conditions.tagConditions\n }),\n sourceModifiedAccessConditions: {\n sourceIfMatch: (_a = options.sourceConditions) === null || _a === void 0 ? void 0 : _a.ifMatch,\n sourceIfModifiedSince: (_b = options.sourceConditions) === null || _b === void 0 ? void 0 : _b.ifModifiedSince,\n sourceIfNoneMatch: (_c = options.sourceConditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch,\n sourceIfUnmodifiedSince: (_d = options.sourceConditions) === null || _d === void 0 ? void 0 : _d.ifUnmodifiedSince,\n sourceIfTags: (_e = options.sourceConditions) === null || _e === void 0 ? void 0 : _e.tagConditions\n },\n cpkInfo: options.customerProvidedKey,\n copySourceAuthorization: httpAuthorizationToString(options.sourceAuthorization),\n tier: toAccessTier(options.tier),\n blobTagsString: toBlobTagsString(options.tags),\n copySourceTags: options.copySourceTags\n }), convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Uploads the specified block to the block blob's \"staging area\" to be later\n * committed by a call to commitBlockList.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-block\n *\n * @param blockId - A 64-byte value that is base64-encoded\n * @param body - Data to upload to the staging area.\n * @param contentLength - Number of bytes to upload.\n * @param options - Options to the Block Blob Stage Block operation.\n * @returns Response data for the Block Blob Stage Block operation.\n */\n async stageBlock(blockId, body, contentLength, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-stageBlock\", options);\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.blockBlobContext.stageBlock(blockId, contentLength, body, Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n requestOptions: {\n onUploadProgress: options.onProgress\n },\n transactionalContentMD5: options.transactionalContentMD5,\n transactionalContentCrc64: options.transactionalContentCrc64,\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * The Stage Block From URL operation creates a new block to be committed as part\n * of a blob where the contents are read from a URL.\n * This API is available starting in version 2018-03-28.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/put-block-from-url\n *\n * @param blockId - A 64-byte value that is base64-encoded\n * @param sourceURL - Specifies the URL of the blob. The value\n * may be a URL of up to 2 KB in length that specifies a blob.\n * The value should be URL-encoded as it would appear\n * in a request URI. The source blob must either be public\n * or must be authenticated via a shared access signature.\n * If the source blob is public, no authentication is required\n * to perform the operation. Here are some examples of source object URLs:\n * - https://myaccount.blob.core.windows.net/mycontainer/myblob\n * - https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=\n * @param offset - From which position of the blob to download, greater than or equal to 0\n * @param count - How much data to be downloaded, greater than 0. Will download to the end when undefined\n * @param options - Options to the Block Blob Stage Block From URL operation.\n * @returns Response data for the Block Blob Stage Block From URL operation.\n */\n async stageBlockFromURL(blockId, sourceURL, offset = 0, count, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-stageBlockFromURL\", options);\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.blockBlobContext.stageBlockFromURL(blockId, 0, sourceURL, Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n sourceContentMD5: options.sourceContentMD5,\n sourceContentCrc64: options.sourceContentCrc64,\n sourceRange: offset === 0 && !count ? undefined : rangeToString({\n offset,\n count\n }),\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope,\n copySourceAuthorization: httpAuthorizationToString(options.sourceAuthorization)\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Writes a blob by specifying the list of block IDs that make up the blob.\n * In order to be written as part of a blob, a block must have been successfully written\n * to the server in a prior {@link stageBlock} operation. You can call {@link commitBlockList} to\n * update a blob by uploading only those blocks that have changed, then committing the new and existing\n * blocks together. Any blocks not specified in the block list and permanently deleted.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-block-list\n *\n * @param blocks - Array of 64-byte value that is base64-encoded\n * @param options - Options to the Block Blob Commit Block List operation.\n * @returns Response data for the Block Blob Commit Block List operation.\n */\n async commitBlockList(blocks, options = {}) {\n var _a, _b, _c;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-commitBlockList\", options);\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.blockBlobContext.commitBlockList({\n latest: blocks\n }, Object.assign({\n abortSignal: options.abortSignal,\n blobHttpHeaders: options.blobHTTPHeaders,\n leaseAccessConditions: options.conditions,\n metadata: options.metadata,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope,\n immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn,\n immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode,\n legalHold: options.legalHold,\n tier: toAccessTier(options.tier),\n blobTagsString: toBlobTagsString(options.tags)\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns the list of blocks that have been uploaded as part of a block blob\n * using the specified block list filter.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-block-list\n *\n * @param listType - Specifies whether to return the list of committed blocks,\n * the list of uncommitted blocks, or both lists together.\n * @param options - Options to the Block Blob Get Block List operation.\n * @returns Response data for the Block Blob Get Block List operation.\n */\n async getBlockList(listType, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-getBlockList\", options);\n try {\n const res = await this.blockBlobContext.getBlockList(listType, Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n if (!res.committedBlocks) {\n res.committedBlocks = [];\n }\n if (!res.uncommittedBlocks) {\n res.uncommittedBlocks = [];\n }\n return res;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n // High level functions\n /**\n * Uploads a Buffer(Node.js)/Blob(browsers)/ArrayBuffer/ArrayBufferView object to a BlockBlob.\n *\n * When data length is no more than the specifiled {@link BlockBlobParallelUploadOptions.maxSingleShotSize} (default is\n * {@link BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}), this method will use 1 {@link upload} call to finish the upload.\n * Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call {@link commitBlockList}\n * to commit the block list.\n *\n * A common {@link BlockBlobParallelUploadOptions.blobHTTPHeaders} option to set is\n * `blobContentType`, enabling the browser to provide\n * functionality based on file type.\n *\n * @param data - Buffer(Node.js), Blob, ArrayBuffer or ArrayBufferView\n * @param options -\n */\n async uploadData(data, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-uploadData\", options);\n try {\n if (isNode) {\n let buffer;\n if (data instanceof Buffer) {\n buffer = data;\n } else if (data instanceof ArrayBuffer) {\n buffer = Buffer.from(data);\n } else {\n data = data;\n buffer = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n }\n return this.uploadSeekableInternal((offset, size) => buffer.slice(offset, offset + size), buffer.byteLength, updatedOptions);\n } else {\n const browserBlob = new Blob([data]);\n return this.uploadSeekableInternal((offset, size) => browserBlob.slice(offset, offset + size), browserBlob.size, updatedOptions);\n }\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * ONLY AVAILABLE IN BROWSERS.\n *\n * Uploads a browser Blob/File/ArrayBuffer/ArrayBufferView object to block blob.\n *\n * When buffer length lesser than or equal to 256MB, this method will use 1 upload call to finish the upload.\n * Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call\n * {@link commitBlockList} to commit the block list.\n *\n * A common {@link BlockBlobParallelUploadOptions.blobHTTPHeaders} option to set is\n * `blobContentType`, enabling the browser to provide\n * functionality based on file type.\n *\n * @deprecated Use {@link uploadData} instead.\n *\n * @param browserData - Blob, File, ArrayBuffer or ArrayBufferView\n * @param options - Options to upload browser data.\n * @returns Response data for the Blob Upload operation.\n */\n async uploadBrowserData(browserData, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-uploadBrowserData\", options);\n try {\n const browserBlob = new Blob([browserData]);\n return await this.uploadSeekableInternal((offset, size) => browserBlob.slice(offset, offset + size), browserBlob.size, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n *\n * Uploads data to block blob. Requires a bodyFactory as the data source,\n * which need to return a {@link HttpRequestBody} object with the offset and size provided.\n *\n * When data length is no more than the specified {@link BlockBlobParallelUploadOptions.maxSingleShotSize} (default is\n * {@link BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}), this method will use 1 {@link upload} call to finish the upload.\n * Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call {@link commitBlockList}\n * to commit the block list.\n *\n * @param bodyFactory -\n * @param size - size of the data to upload.\n * @param options - Options to Upload to Block Blob operation.\n * @returns Response data for the Blob Upload operation.\n */\n async uploadSeekableInternal(bodyFactory, size, options = {}) {\n if (!options.blockSize) {\n options.blockSize = 0;\n }\n if (options.blockSize < 0 || options.blockSize > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES) {\n throw new RangeError(`blockSize option must be >= 0 and <= ${BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES}`);\n }\n if (options.maxSingleShotSize !== 0 && !options.maxSingleShotSize) {\n options.maxSingleShotSize = BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES;\n }\n if (options.maxSingleShotSize < 0 || options.maxSingleShotSize > BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES) {\n throw new RangeError(`maxSingleShotSize option must be >= 0 and <= ${BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}`);\n }\n if (options.blockSize === 0) {\n if (size > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES * BLOCK_BLOB_MAX_BLOCKS) {\n throw new RangeError(`${size} is too larger to upload to a block blob.`);\n }\n if (size > options.maxSingleShotSize) {\n options.blockSize = Math.ceil(size / BLOCK_BLOB_MAX_BLOCKS);\n if (options.blockSize < DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES) {\n options.blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES;\n }\n }\n }\n if (!options.blobHTTPHeaders) {\n options.blobHTTPHeaders = {};\n }\n if (!options.conditions) {\n options.conditions = {};\n }\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-uploadSeekableInternal\", options);\n try {\n if (size <= options.maxSingleShotSize) {\n return await this.upload(bodyFactory(0, size), size, updatedOptions);\n }\n const numBlocks = Math.floor((size - 1) / options.blockSize) + 1;\n if (numBlocks > BLOCK_BLOB_MAX_BLOCKS) {\n throw new RangeError(`The buffer's size is too big or the BlockSize is too small;` + `the number of blocks must be <= ${BLOCK_BLOB_MAX_BLOCKS}`);\n }\n const blockList = [];\n const blockIDPrefix = generateUuid();\n let transferProgress = 0;\n const batch = new Batch(options.concurrency);\n for (let i = 0; i < numBlocks; i++) {\n batch.addOperation(async () => {\n const blockID = generateBlockID(blockIDPrefix, i);\n const start = options.blockSize * i;\n const end = i === numBlocks - 1 ? size : start + options.blockSize;\n const contentLength = end - start;\n blockList.push(blockID);\n await this.stageBlock(blockID, bodyFactory(start, contentLength), contentLength, {\n abortSignal: options.abortSignal,\n conditions: options.conditions,\n encryptionScope: options.encryptionScope,\n tracingOptions: updatedOptions.tracingOptions\n });\n // Update progress after block is successfully uploaded to server, in case of block trying\n // TODO: Hook with convenience layer progress event in finer level\n transferProgress += contentLength;\n if (options.onProgress) {\n options.onProgress({\n loadedBytes: transferProgress\n });\n }\n });\n }\n await batch.do();\n return this.commitBlockList(blockList, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n *\n * Uploads a local file in blocks to a block blob.\n *\n * When file size lesser than or equal to 256MB, this method will use 1 upload call to finish the upload.\n * Otherwise, this method will call stageBlock to upload blocks, and finally call commitBlockList\n * to commit the block list.\n *\n * @param filePath - Full path of local file\n * @param options - Options to Upload to Block Blob operation.\n * @returns Response data for the Blob Upload operation.\n */\n async uploadFile(filePath, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-uploadFile\", options);\n try {\n const size = (await fsStat(filePath)).size;\n return await this.uploadSeekableInternal((offset, count) => {\n return () => fsCreateReadStream(filePath, {\n autoClose: true,\n end: count ? offset + count - 1 : Infinity,\n start: offset\n });\n }, size, Object.assign(Object.assign({}, options), {\n tracingOptions: Object.assign(Object.assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions))\n }));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n *\n * Uploads a Node.js Readable stream into block blob.\n *\n * PERFORMANCE IMPROVEMENT TIPS:\n * * Input stream highWaterMark is better to set a same value with bufferSize\n * parameter, which will avoid Buffer.concat() operations.\n *\n * @param stream - Node.js Readable stream\n * @param bufferSize - Size of every buffer allocated, also the block size in the uploaded block blob. Default value is 8MB\n * @param maxConcurrency - Max concurrency indicates the max number of buffers that can be allocated,\n * positive correlation with max uploading concurrency. Default value is 5\n * @param options - Options to Upload Stream to Block Blob operation.\n * @returns Response data for the Blob Upload operation.\n */\n async uploadStream(stream, bufferSize = DEFAULT_BLOCK_BUFFER_SIZE_BYTES, maxConcurrency = 5, options = {}) {\n if (!options.blobHTTPHeaders) {\n options.blobHTTPHeaders = {};\n }\n if (!options.conditions) {\n options.conditions = {};\n }\n const {\n span,\n updatedOptions\n } = createSpan(\"BlockBlobClient-uploadStream\", options);\n try {\n let blockNum = 0;\n const blockIDPrefix = generateUuid();\n let transferProgress = 0;\n const blockList = [];\n const scheduler = new BufferScheduler(stream, bufferSize, maxConcurrency, async (body, length) => {\n const blockID = generateBlockID(blockIDPrefix, blockNum);\n blockList.push(blockID);\n blockNum++;\n await this.stageBlock(blockID, body, length, {\n conditions: options.conditions,\n encryptionScope: options.encryptionScope,\n tracingOptions: updatedOptions.tracingOptions\n });\n // Update progress after block is successfully uploaded to server, in case of block trying\n transferProgress += length;\n if (options.onProgress) {\n options.onProgress({\n loadedBytes: transferProgress\n });\n }\n },\n // concurrency should set a smaller value than maxConcurrency, which is helpful to\n // reduce the possibility when a outgoing handler waits for stream data, in\n // this situation, outgoing handlers are blocked.\n // Outgoing queue shouldn't be empty.\n Math.ceil(maxConcurrency / 4 * 3));\n await scheduler.do();\n return await this.commitBlockList(blockList, Object.assign(Object.assign({}, options), {\n tracingOptions: Object.assign(Object.assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions))\n }));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n}\n/**\n * PageBlobClient defines a set of operations applicable to page blobs.\n */\nexport class PageBlobClient extends BlobClient {\n constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,\n // Legacy, no fix for eslint error without breaking. Disable it for this interface.\n /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/\n options) {\n // In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.\n // super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);\n let pipeline;\n let url;\n options = options || {};\n if (isPipelineLike(credentialOrPipelineOrContainerName)) {\n // (url: string, pipeline: Pipeline)\n url = urlOrConnectionString;\n pipeline = credentialOrPipelineOrContainerName;\n } else if (isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential || credentialOrPipelineOrContainerName instanceof AnonymousCredential || isTokenCredential(credentialOrPipelineOrContainerName)) {\n // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)\n url = urlOrConnectionString;\n options = blobNameOrOptions;\n pipeline = newPipeline(credentialOrPipelineOrContainerName, options);\n } else if (!credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName !== \"string\") {\n // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)\n // The second parameter is undefined. Use anonymous credential.\n url = urlOrConnectionString;\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else if (credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName === \"string\" && blobNameOrOptions && typeof blobNameOrOptions === \"string\") {\n // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)\n const containerName = credentialOrPipelineOrContainerName;\n const blobName = blobNameOrOptions;\n const extractedCreds = extractConnectionStringParts(urlOrConnectionString);\n if (extractedCreds.kind === \"AccountConnString\") {\n if (isNode) {\n const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);\n url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));\n if (!options.proxyOptions) {\n options.proxyOptions = getDefaultProxySettings(extractedCreds.proxyUri);\n }\n pipeline = newPipeline(sharedKeyCredential, options);\n } else {\n throw new Error(\"Account connection string is only supported in Node.js environment\");\n }\n } else if (extractedCreds.kind === \"SASConnString\") {\n url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) + \"?\" + extractedCreds.accountSas;\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else {\n throw new Error(\"Connection string must be either an Account connection string or a SAS connection string\");\n }\n } else {\n throw new Error(\"Expecting non-empty strings for containerName and blobName parameters\");\n }\n super(url, pipeline);\n this.pageBlobContext = new PageBlob(this.storageClientContext);\n }\n /**\n * Creates a new PageBlobClient object identical to the source but with the\n * specified snapshot timestamp.\n * Provide \"\" will remove the snapshot and return a Client to the base blob.\n *\n * @param snapshot - The snapshot timestamp.\n * @returns A new PageBlobClient object identical to the source but with the specified snapshot timestamp.\n */\n withSnapshot(snapshot) {\n return new PageBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);\n }\n /**\n * Creates a page blob of the specified length. Call uploadPages to upload data\n * data to a page blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-blob\n *\n * @param size - size of the page blob.\n * @param options - Options to the Page Blob Create operation.\n * @returns Response data for the Page Blob Create operation.\n */\n async create(size, options = {}) {\n var _a, _b, _c;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-create\", options);\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.pageBlobContext.create(0, size, Object.assign({\n abortSignal: options.abortSignal,\n blobHttpHeaders: options.blobHTTPHeaders,\n blobSequenceNumber: options.blobSequenceNumber,\n leaseAccessConditions: options.conditions,\n metadata: options.metadata,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope,\n immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn,\n immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode,\n legalHold: options.legalHold,\n tier: toAccessTier(options.tier),\n blobTagsString: toBlobTagsString(options.tags)\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Creates a page blob of the specified length. Call uploadPages to upload data\n * data to a page blob. If the blob with the same name already exists, the content\n * of the existing blob will remain unchanged.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-blob\n *\n * @param size - size of the page blob.\n * @param options -\n */\n async createIfNotExists(size, options = {}) {\n var _a, _b;\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-createIfNotExists\", options);\n try {\n const conditions = {\n ifNoneMatch: ETagAny\n };\n const res = await this.create(size, Object.assign(Object.assign({}, options), {\n conditions,\n tracingOptions: updatedOptions.tracingOptions\n }));\n return Object.assign(Object.assign({\n succeeded: true\n }, res), {\n _response: res._response\n });\n } catch (e) {\n if (((_a = e.details) === null || _a === void 0 ? void 0 : _a.errorCode) === \"BlobAlreadyExists\") {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Expected exception when creating a blob only if it does not already exist.\"\n });\n return Object.assign(Object.assign({\n succeeded: false\n }, (_b = e.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), {\n _response: e.response\n });\n }\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Writes 1 or more pages to the page blob. The start and end offsets must be a multiple of 512.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-page\n *\n * @param body - Data to upload\n * @param offset - Offset of destination page blob\n * @param count - Content length of the body, also number of bytes to be uploaded\n * @param options - Options to the Page Blob Upload Pages operation.\n * @returns Response data for the Page Blob Upload Pages operation.\n */\n async uploadPages(body, offset, count, options = {}) {\n var _a;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-uploadPages\", options);\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.pageBlobContext.uploadPages(count, body, Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n requestOptions: {\n onUploadProgress: options.onProgress\n },\n range: rangeToString({\n offset,\n count\n }),\n sequenceNumberAccessConditions: options.conditions,\n transactionalContentMD5: options.transactionalContentMD5,\n transactionalContentCrc64: options.transactionalContentCrc64,\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * The Upload Pages operation writes a range of pages to a page blob where the\n * contents are read from a URL.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/put-page-from-url\n *\n * @param sourceURL - Specify a URL to the copy source, Shared Access Signature(SAS) maybe needed for authentication\n * @param sourceOffset - The source offset to copy from. Pass 0 to copy from the beginning of source page blob\n * @param destOffset - Offset of destination page blob\n * @param count - Number of bytes to be uploaded from source page blob\n * @param options -\n */\n async uploadPagesFromURL(sourceURL, sourceOffset, destOffset, count, options = {}) {\n var _a;\n options.conditions = options.conditions || {};\n options.sourceConditions = options.sourceConditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-uploadPagesFromURL\", options);\n try {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return await this.pageBlobContext.uploadPagesFromURL(sourceURL, rangeToString({\n offset: sourceOffset,\n count\n }), 0, rangeToString({\n offset: destOffset,\n count\n }), Object.assign({\n abortSignal: options.abortSignal,\n sourceContentMD5: options.sourceContentMD5,\n sourceContentCrc64: options.sourceContentCrc64,\n leaseAccessConditions: options.conditions,\n sequenceNumberAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n sourceModifiedAccessConditions: {\n sourceIfMatch: options.sourceConditions.ifMatch,\n sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,\n sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,\n sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince\n },\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope,\n copySourceAuthorization: httpAuthorizationToString(options.sourceAuthorization)\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Frees the specified pages from the page blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-page\n *\n * @param offset - Starting byte position of the pages to clear.\n * @param count - Number of bytes to clear.\n * @param options - Options to the Page Blob Clear Pages operation.\n * @returns Response data for the Page Blob Clear Pages operation.\n */\n async clearPages(offset = 0, count, options = {}) {\n var _a;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-clearPages\", options);\n try {\n return await this.pageBlobContext.clearPages(0, Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n range: rangeToString({\n offset,\n count\n }),\n sequenceNumberAccessConditions: options.conditions,\n cpkInfo: options.customerProvidedKey,\n encryptionScope: options.encryptionScope\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns the list of valid page ranges for a page blob or snapshot of a page blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges\n *\n * @param offset - Starting byte position of the page ranges.\n * @param count - Number of bytes to get.\n * @param options - Options to the Page Blob Get Ranges operation.\n * @returns Response data for the Page Blob Get Ranges operation.\n */\n async getPageRanges(offset = 0, count, options = {}) {\n var _a;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-getPageRanges\", options);\n try {\n return await this.pageBlobContext.getPageRanges(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n range: rangeToString({\n offset,\n count\n })\n }, convertTracingToRequestOptionsBase(updatedOptions))).then(rangeResponseFromModel);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * getPageRangesSegment returns a single segment of page ranges starting from the\n * specified Marker. Use an empty Marker to start enumeration from the beginning.\n * After getting a segment, process it, and then call getPageRangesSegment again\n * (passing the the previously-returned Marker) to get the next segment.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges\n *\n * @param offset - Starting byte position of the page ranges.\n * @param count - Number of bytes to get.\n * @param marker - A string value that identifies the portion of the list to be returned with the next list operation.\n * @param options - Options to PageBlob Get Page Ranges Segment operation.\n */\n async listPageRangesSegment(offset = 0, count, marker, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-getPageRangesSegment\", options);\n try {\n return await this.pageBlobContext.getPageRanges(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n range: rangeToString({\n offset,\n count\n }),\n marker: marker,\n maxPageSize: options.maxPageSize\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns an AsyncIterableIterator for {@link PageBlobGetPageRangesResponseModel}\n *\n * @param offset - Starting byte position of the page ranges.\n * @param count - Number of bytes to get.\n * @param marker - A string value that identifies the portion of\n * the get of page ranges to be returned with the next getting operation. The\n * operation returns the ContinuationToken value within the response body if the\n * getting operation did not return all page ranges remaining within the current page.\n * The ContinuationToken value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of get\n * items. The marker value is opaque to the client.\n * @param options - Options to List Page Ranges operation.\n */\n listPageRangeItemSegments(offset = 0, count, marker, options = {}) {\n return __asyncGenerator(this, arguments, function* listPageRangeItemSegments_1() {\n let getPageRangeItemSegmentsResponse;\n if (!!marker || marker === undefined) {\n do {\n getPageRangeItemSegmentsResponse = yield __await(this.listPageRangesSegment(offset, count, marker, options));\n marker = getPageRangeItemSegmentsResponse.continuationToken;\n yield yield __await(yield __await(getPageRangeItemSegmentsResponse));\n } while (marker);\n }\n });\n }\n /**\n * Returns an AsyncIterableIterator of {@link PageRangeInfo} objects\n *\n * @param offset - Starting byte position of the page ranges.\n * @param count - Number of bytes to get.\n * @param options - Options to List Page Ranges operation.\n */\n listPageRangeItems(offset = 0, count, options = {}) {\n return __asyncGenerator(this, arguments, function* listPageRangeItems_1() {\n var e_1, _a;\n let marker;\n try {\n for (var _b = __asyncValues(this.listPageRangeItemSegments(offset, count, marker, options)), _c; _c = yield __await(_b.next()), !_c.done;) {\n const getPageRangesSegment = _c.value;\n yield __await(yield* __asyncDelegator(__asyncValues(ExtractPageRangeInfoItems(getPageRangesSegment))));\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) yield __await(_a.call(_b));\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n });\n }\n /**\n * Returns an async iterable iterator to list of page ranges for a page blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges\n *\n * .byPage() returns an async iterable iterator to list of page ranges for a page blob.\n *\n * Example using `for await` syntax:\n *\n * ```js\n * // Get the pageBlobClient before you run these snippets,\n * // Can be obtained from `blobServiceClient.getContainerClient(\"\").getPageBlobClient(\"\");`\n * let i = 1;\n * for await (const pageRange of pageBlobClient.listPageRanges()) {\n * console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);\n * }\n * ```\n *\n * Example using `iter.next()`:\n *\n * ```js\n * let i = 1;\n * let iter = pageBlobClient.listPageRanges();\n * let pageRangeItem = await iter.next();\n * while (!pageRangeItem.done) {\n * console.log(`Page range ${i++}: ${pageRangeItem.value.start} - ${pageRangeItem.value.end}, IsClear: ${pageRangeItem.value.isClear}`);\n * pageRangeItem = await iter.next();\n * }\n * ```\n *\n * Example using `byPage()`:\n *\n * ```js\n * // passing optional maxPageSize in the page settings\n * let i = 1;\n * for await (const response of pageBlobClient.listPageRanges().byPage({ maxPageSize: 20 })) {\n * for (const pageRange of response) {\n * console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);\n * }\n * }\n * ```\n *\n * Example using paging with a marker:\n *\n * ```js\n * let i = 1;\n * let iterator = pageBlobClient.listPageRanges().byPage({ maxPageSize: 2 });\n * let response = (await iterator.next()).value;\n *\n * // Prints 2 page ranges\n * for (const pageRange of response) {\n * console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);\n * }\n *\n * // Gets next marker\n * let marker = response.continuationToken;\n *\n * // Passing next marker as continuationToken\n *\n * iterator = pageBlobClient.listPageRanges().byPage({ continuationToken: marker, maxPageSize: 10 });\n * response = (await iterator.next()).value;\n *\n * // Prints 10 page ranges\n * for (const blob of response) {\n * console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);\n * }\n * ```\n * @param offset - Starting byte position of the page ranges.\n * @param count - Number of bytes to get.\n * @param options - Options to the Page Blob Get Ranges operation.\n * @returns An asyncIterableIterator that supports paging.\n */\n listPageRanges(offset = 0, count, options = {}) {\n options.conditions = options.conditions || {};\n // AsyncIterableIterator to iterate over blobs\n const iter = this.listPageRangeItems(offset, count, options);\n return {\n /**\n * The next method, part of the iteration protocol\n */\n next() {\n return iter.next();\n },\n /**\n * The connection to the async iterator, part of the iteration protocol\n */\n [Symbol.asyncIterator]() {\n return this;\n },\n /**\n * Return an AsyncIterableIterator that works a page at a time\n */\n byPage: (settings = {}) => {\n return this.listPageRangeItemSegments(offset, count, settings.continuationToken, Object.assign({\n maxPageSize: settings.maxPageSize\n }, options));\n }\n };\n }\n /**\n * Gets the collection of page ranges that differ between a specified snapshot and this page blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges\n *\n * @param offset - Starting byte position of the page blob\n * @param count - Number of bytes to get ranges diff.\n * @param prevSnapshot - Timestamp of snapshot to retrieve the difference.\n * @param options - Options to the Page Blob Get Page Ranges Diff operation.\n * @returns Response data for the Page Blob Get Page Range Diff operation.\n */\n async getPageRangesDiff(offset, count, prevSnapshot, options = {}) {\n var _a;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-getPageRangesDiff\", options);\n try {\n return await this.pageBlobContext.getPageRangesDiff(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n prevsnapshot: prevSnapshot,\n range: rangeToString({\n offset,\n count\n })\n }, convertTracingToRequestOptionsBase(updatedOptions))).then(rangeResponseFromModel);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * getPageRangesDiffSegment returns a single segment of page ranges starting from the\n * specified Marker for difference between previous snapshot and the target page blob.\n * Use an empty Marker to start enumeration from the beginning.\n * After getting a segment, process it, and then call getPageRangesDiffSegment again\n * (passing the the previously-returned Marker) to get the next segment.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges\n *\n * @param offset - Starting byte position of the page ranges.\n * @param count - Number of bytes to get.\n * @param prevSnapshotOrUrl - Timestamp of snapshot to retrieve the difference or URL of snapshot to retrieve the difference.\n * @param marker - A string value that identifies the portion of the get to be returned with the next get operation.\n * @param options - Options to the Page Blob Get Page Ranges Diff operation.\n */\n async listPageRangesDiffSegment(offset, count, prevSnapshotOrUrl, marker, options) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-getPageRangesDiffSegment\", options);\n try {\n return await this.pageBlobContext.getPageRangesDiff(Object.assign({\n abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal,\n leaseAccessConditions: options === null || options === void 0 ? void 0 : options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.conditions), {\n ifTags: (_a = options === null || options === void 0 ? void 0 : options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n prevsnapshot: prevSnapshotOrUrl,\n range: rangeToString({\n offset: offset,\n count: count\n }),\n marker: marker,\n maxPageSize: options === null || options === void 0 ? void 0 : options.maxPageSize\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns an AsyncIterableIterator for {@link PageBlobGetPageRangesDiffResponseModel}\n *\n *\n * @param offset - Starting byte position of the page ranges.\n * @param count - Number of bytes to get.\n * @param prevSnapshotOrUrl - Timestamp of snapshot to retrieve the difference or URL of snapshot to retrieve the difference.\n * @param marker - A string value that identifies the portion of\n * the get of page ranges to be returned with the next getting operation. The\n * operation returns the ContinuationToken value within the response body if the\n * getting operation did not return all page ranges remaining within the current page.\n * The ContinuationToken value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of get\n * items. The marker value is opaque to the client.\n * @param options - Options to the Page Blob Get Page Ranges Diff operation.\n */\n listPageRangeDiffItemSegments(offset, count, prevSnapshotOrUrl, marker, options) {\n return __asyncGenerator(this, arguments, function* listPageRangeDiffItemSegments_1() {\n let getPageRangeItemSegmentsResponse;\n if (!!marker || marker === undefined) {\n do {\n getPageRangeItemSegmentsResponse = yield __await(this.listPageRangesDiffSegment(offset, count, prevSnapshotOrUrl, marker, options));\n marker = getPageRangeItemSegmentsResponse.continuationToken;\n yield yield __await(yield __await(getPageRangeItemSegmentsResponse));\n } while (marker);\n }\n });\n }\n /**\n * Returns an AsyncIterableIterator of {@link PageRangeInfo} objects\n *\n * @param offset - Starting byte position of the page ranges.\n * @param count - Number of bytes to get.\n * @param prevSnapshotOrUrl - Timestamp of snapshot to retrieve the difference or URL of snapshot to retrieve the difference.\n * @param options - Options to the Page Blob Get Page Ranges Diff operation.\n */\n listPageRangeDiffItems(offset, count, prevSnapshotOrUrl, options) {\n return __asyncGenerator(this, arguments, function* listPageRangeDiffItems_1() {\n var e_2, _a;\n let marker;\n try {\n for (var _b = __asyncValues(this.listPageRangeDiffItemSegments(offset, count, prevSnapshotOrUrl, marker, options)), _c; _c = yield __await(_b.next()), !_c.done;) {\n const getPageRangesSegment = _c.value;\n yield __await(yield* __asyncDelegator(__asyncValues(ExtractPageRangeInfoItems(getPageRangesSegment))));\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) yield __await(_a.call(_b));\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n });\n }\n /**\n * Returns an async iterable iterator to list of page ranges that differ between a specified snapshot and this page blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges\n *\n * .byPage() returns an async iterable iterator to list of page ranges that differ between a specified snapshot and this page blob.\n *\n * Example using `for await` syntax:\n *\n * ```js\n * // Get the pageBlobClient before you run these snippets,\n * // Can be obtained from `blobServiceClient.getContainerClient(\"\").getPageBlobClient(\"\");`\n * let i = 1;\n * for await (const pageRange of pageBlobClient.listPageRangesDiff()) {\n * console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);\n * }\n * ```\n *\n * Example using `iter.next()`:\n *\n * ```js\n * let i = 1;\n * let iter = pageBlobClient.listPageRangesDiff();\n * let pageRangeItem = await iter.next();\n * while (!pageRangeItem.done) {\n * console.log(`Page range ${i++}: ${pageRangeItem.value.start} - ${pageRangeItem.value.end}, IsClear: ${pageRangeItem.value.isClear}`);\n * pageRangeItem = await iter.next();\n * }\n * ```\n *\n * Example using `byPage()`:\n *\n * ```js\n * // passing optional maxPageSize in the page settings\n * let i = 1;\n * for await (const response of pageBlobClient.listPageRangesDiff().byPage({ maxPageSize: 20 })) {\n * for (const pageRange of response) {\n * console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);\n * }\n * }\n * ```\n *\n * Example using paging with a marker:\n *\n * ```js\n * let i = 1;\n * let iterator = pageBlobClient.listPageRangesDiff().byPage({ maxPageSize: 2 });\n * let response = (await iterator.next()).value;\n *\n * // Prints 2 page ranges\n * for (const pageRange of response) {\n * console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);\n * }\n *\n * // Gets next marker\n * let marker = response.continuationToken;\n *\n * // Passing next marker as continuationToken\n *\n * iterator = pageBlobClient.listPageRangesDiff().byPage({ continuationToken: marker, maxPageSize: 10 });\n * response = (await iterator.next()).value;\n *\n * // Prints 10 page ranges\n * for (const blob of response) {\n * console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);\n * }\n * ```\n * @param offset - Starting byte position of the page ranges.\n * @param count - Number of bytes to get.\n * @param prevSnapshot - Timestamp of snapshot to retrieve the difference.\n * @param options - Options to the Page Blob Get Ranges operation.\n * @returns An asyncIterableIterator that supports paging.\n */\n listPageRangesDiff(offset, count, prevSnapshot, options = {}) {\n options.conditions = options.conditions || {};\n // AsyncIterableIterator to iterate over blobs\n const iter = this.listPageRangeDiffItems(offset, count, prevSnapshot, Object.assign({}, options));\n return {\n /**\n * The next method, part of the iteration protocol\n */\n next() {\n return iter.next();\n },\n /**\n * The connection to the async iterator, part of the iteration protocol\n */\n [Symbol.asyncIterator]() {\n return this;\n },\n /**\n * Return an AsyncIterableIterator that works a page at a time\n */\n byPage: (settings = {}) => {\n return this.listPageRangeDiffItemSegments(offset, count, prevSnapshot, settings.continuationToken, Object.assign({\n maxPageSize: settings.maxPageSize\n }, options));\n }\n };\n }\n /**\n * Gets the collection of page ranges that differ between a specified snapshot and this page blob for managed disks.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges\n *\n * @param offset - Starting byte position of the page blob\n * @param count - Number of bytes to get ranges diff.\n * @param prevSnapshotUrl - URL of snapshot to retrieve the difference.\n * @param options - Options to the Page Blob Get Page Ranges Diff operation.\n * @returns Response data for the Page Blob Get Page Range Diff operation.\n */\n async getPageRangesDiffForManagedDisks(offset, count, prevSnapshotUrl, options = {}) {\n var _a;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-GetPageRangesDiffForManagedDisks\", options);\n try {\n return await this.pageBlobContext.getPageRangesDiff(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n prevSnapshotUrl,\n range: rangeToString({\n offset,\n count\n })\n }, convertTracingToRequestOptionsBase(updatedOptions))).then(rangeResponseFromModel);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Resizes the page blob to the specified size (which must be a multiple of 512).\n * @see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties\n *\n * @param size - Target size\n * @param options - Options to the Page Blob Resize operation.\n * @returns Response data for the Page Blob Resize operation.\n */\n async resize(size, options = {}) {\n var _a;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-resize\", options);\n try {\n return await this.pageBlobContext.resize(size, Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n }),\n encryptionScope: options.encryptionScope\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Sets a page blob's sequence number.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties\n *\n * @param sequenceNumberAction - Indicates how the service should modify the blob's sequence number.\n * @param sequenceNumber - Required if sequenceNumberAction is max or update\n * @param options - Options to the Page Blob Update Sequence Number operation.\n * @returns Response data for the Page Blob Update Sequence Number operation.\n */\n async updateSequenceNumber(sequenceNumberAction, sequenceNumber, options = {}) {\n var _a;\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-updateSequenceNumber\", options);\n try {\n return await this.pageBlobContext.updateSequenceNumber(sequenceNumberAction, Object.assign({\n abortSignal: options.abortSignal,\n blobSequenceNumber: sequenceNumber,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Begins an operation to start an incremental copy from one page blob's snapshot to this page blob.\n * The snapshot is copied such that only the differential changes between the previously\n * copied snapshot are transferred to the destination.\n * The copied snapshots are complete copies of the original snapshot and can be read or copied from as usual.\n * @see https://docs.microsoft.com/rest/api/storageservices/incremental-copy-blob\n * @see https://docs.microsoft.com/en-us/azure/virtual-machines/windows/incremental-snapshots\n *\n * @param copySource - Specifies the name of the source page blob snapshot. For example,\n * https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=\n * @param options - Options to the Page Blob Copy Incremental operation.\n * @returns Response data for the Page Blob Copy Incremental operation.\n */\n async startCopyIncremental(copySource, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"PageBlobClient-startCopyIncremental\", options);\n try {\n return await this.pageBlobContext.copyIncremental(copySource, Object.assign({\n abortSignal: options.abortSignal,\n modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), {\n ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions\n })\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { blobToString } from \"./utils/utils.browser\";\nexport async function getBodyAsText(batchResponse) {\n const blob = await batchResponse.blobBody;\n return blobToString(blob);\n}\nexport function utf8ByteLength(str) {\n return new Blob([str]).size;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { HttpHeaders } from \"@azure/core-http\";\nimport { HTTP_VERSION_1_1, HTTP_LINE_ENDING, HeaderConstants, HTTPURLConnection } from \"./utils/constants\";\nimport { getBodyAsText } from \"./BatchUtils\";\nimport { logger } from \"./log\";\nconst HTTP_HEADER_DELIMITER = \": \";\nconst SPACE_DELIMITER = \" \";\nconst NOT_FOUND = -1;\n/**\n * Util class for parsing batch response.\n */\nexport class BatchResponseParser {\n constructor(batchResponse, subRequests) {\n if (!batchResponse || !batchResponse.contentType) {\n // In special case(reported), server may return invalid content-type which could not be parsed.\n throw new RangeError(\"batchResponse is malformed or doesn't contain valid content-type.\");\n }\n if (!subRequests || subRequests.size === 0) {\n // This should be prevent during coding.\n throw new RangeError(\"Invalid state: subRequests is not provided or size is 0.\");\n }\n this.batchResponse = batchResponse;\n this.subRequests = subRequests;\n this.responseBatchBoundary = this.batchResponse.contentType.split(\"=\")[1];\n this.perResponsePrefix = `--${this.responseBatchBoundary}${HTTP_LINE_ENDING}`;\n this.batchResponseEnding = `--${this.responseBatchBoundary}--`;\n }\n // For example of response, please refer to https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#response\n async parseBatchResponse() {\n // When logic reach here, suppose batch request has already succeeded with 202, so we can further parse\n // sub request's response.\n if (this.batchResponse._response.status !== HTTPURLConnection.HTTP_ACCEPTED) {\n throw new Error(`Invalid state: batch request failed with status: '${this.batchResponse._response.status}'.`);\n }\n const responseBodyAsText = await getBodyAsText(this.batchResponse);\n const subResponses = responseBodyAsText.split(this.batchResponseEnding)[0] // string after ending is useless\n .split(this.perResponsePrefix).slice(1); // string before first response boundary is useless\n const subResponseCount = subResponses.length;\n // Defensive coding in case of potential error parsing.\n // Note: subResponseCount == 1 is special case where sub request is invalid.\n // We try to prevent such cases through early validation, e.g. validate sub request count >= 1.\n // While in unexpected sub request invalid case, we allow sub response to be parsed and return to user.\n if (subResponseCount !== this.subRequests.size && subResponseCount !== 1) {\n throw new Error(\"Invalid state: sub responses' count is not equal to sub requests' count.\");\n }\n const deserializedSubResponses = new Array(subResponseCount);\n let subResponsesSucceededCount = 0;\n let subResponsesFailedCount = 0;\n // Parse sub subResponses.\n for (let index = 0; index < subResponseCount; index++) {\n const subResponse = subResponses[index];\n const deserializedSubResponse = {};\n deserializedSubResponse.headers = new HttpHeaders();\n const responseLines = subResponse.split(`${HTTP_LINE_ENDING}`);\n let subRespHeaderStartFound = false;\n let subRespHeaderEndFound = false;\n let subRespFailed = false;\n let contentId = NOT_FOUND;\n for (const responseLine of responseLines) {\n if (!subRespHeaderStartFound) {\n // Convention line to indicate content ID\n if (responseLine.startsWith(HeaderConstants.CONTENT_ID)) {\n contentId = parseInt(responseLine.split(HTTP_HEADER_DELIMITER)[1]);\n }\n // Http version line with status code indicates the start of sub request's response.\n // Example: HTTP/1.1 202 Accepted\n if (responseLine.startsWith(HTTP_VERSION_1_1)) {\n subRespHeaderStartFound = true;\n const tokens = responseLine.split(SPACE_DELIMITER);\n deserializedSubResponse.status = parseInt(tokens[1]);\n deserializedSubResponse.statusMessage = tokens.slice(2).join(SPACE_DELIMITER);\n }\n continue; // Skip convention headers not specifically for sub request i.e. Content-Type: application/http and Content-ID: *\n }\n if (responseLine.trim() === \"\") {\n // Sub response's header start line already found, and the first empty line indicates header end line found.\n if (!subRespHeaderEndFound) {\n subRespHeaderEndFound = true;\n }\n continue; // Skip empty line\n }\n // Note: when code reach here, it indicates subRespHeaderStartFound == true\n if (!subRespHeaderEndFound) {\n if (responseLine.indexOf(HTTP_HEADER_DELIMITER) === -1) {\n // Defensive coding to prevent from missing valuable lines.\n throw new Error(`Invalid state: find non-empty line '${responseLine}' without HTTP header delimiter '${HTTP_HEADER_DELIMITER}'.`);\n }\n // Parse headers of sub response.\n const tokens = responseLine.split(HTTP_HEADER_DELIMITER);\n deserializedSubResponse.headers.set(tokens[0], tokens[1]);\n if (tokens[0] === HeaderConstants.X_MS_ERROR_CODE) {\n deserializedSubResponse.errorCode = tokens[1];\n subRespFailed = true;\n }\n } else {\n // Assemble body of sub response.\n if (!deserializedSubResponse.bodyAsText) {\n deserializedSubResponse.bodyAsText = \"\";\n }\n deserializedSubResponse.bodyAsText += responseLine;\n }\n } // Inner for end\n // The response will contain the Content-ID header for each corresponding subrequest response to use for tracking.\n // The Content-IDs are set to a valid index in the subrequests we sent. In the status code 202 path, we could expect it\n // to be 1-1 mapping from the [0, subRequests.size) to the Content-IDs returned. If not, we simply don't return that\n // unexpected subResponse in the parsed reponse and we can always look it up in the raw response for debugging purpose.\n if (contentId !== NOT_FOUND && Number.isInteger(contentId) && contentId >= 0 && contentId < this.subRequests.size && deserializedSubResponses[contentId] === undefined) {\n deserializedSubResponse._request = this.subRequests.get(contentId);\n deserializedSubResponses[contentId] = deserializedSubResponse;\n } else {\n logger.error(`subResponses[${index}] is dropped as the Content-ID is not found or invalid, Content-ID: ${contentId}`);\n }\n if (subRespFailed) {\n subResponsesFailedCount++;\n } else {\n subResponsesSucceededCount++;\n }\n }\n return {\n subResponses: deserializedSubResponses,\n subResponsesSucceededCount: subResponsesSucceededCount,\n subResponsesFailedCount: subResponsesFailedCount\n };\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nenum MutexLockStatus {\n LOCKED,\n UNLOCKED,\n}\n\ntype Callback = (...args: any[]) => any;\n\n/**\n * An async mutex lock.\n */\nexport class Mutex {\n /**\n * Lock for a specific key. If the lock has been acquired by another customer, then\n * will wait until getting the lock.\n *\n * @param key - lock key\n */\n public static async lock(key: string): Promise {\n return new Promise((resolve) => {\n if (this.keys[key] === undefined || this.keys[key] === MutexLockStatus.UNLOCKED) {\n this.keys[key] = MutexLockStatus.LOCKED;\n resolve();\n } else {\n this.onUnlockEvent(key, () => {\n this.keys[key] = MutexLockStatus.LOCKED;\n resolve();\n });\n }\n });\n }\n\n /**\n * Unlock a key.\n *\n * @param key -\n */\n public static async unlock(key: string): Promise {\n return new Promise((resolve) => {\n if (this.keys[key] === MutexLockStatus.LOCKED) {\n this.emitUnlockEvent(key);\n }\n delete this.keys[key];\n resolve();\n });\n }\n\n private static keys: { [key: string]: MutexLockStatus } = {};\n private static listeners: { [key: string]: Callback[] } = {};\n\n private static onUnlockEvent(key: string, handler: Callback) {\n if (this.listeners[key] === undefined) {\n this.listeners[key] = [handler];\n } else {\n this.listeners[key].push(handler);\n }\n }\n\n private static emitUnlockEvent(key: string) {\n if (this.listeners[key] !== undefined && this.listeners[key].length > 0) {\n const handler = this.listeners[key].shift();\n setImmediate(() => {\n handler!.call(this);\n });\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BaseRequestPolicy, deserializationPolicy, generateUuid, HttpHeaders, WebResource, isTokenCredential, bearerTokenAuthenticationPolicy, isNode } from \"@azure/core-http\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { AnonymousCredential } from \"./credentials/AnonymousCredential\";\nimport { BlobClient } from \"./Clients\";\nimport { Mutex } from \"./utils/Mutex\";\nimport { Pipeline } from \"./Pipeline\";\nimport { attachCredential, getURLPath, getURLPathAndQuery, iEqual } from \"./utils/utils.common\";\nimport { HeaderConstants, BATCH_MAX_REQUEST, HTTP_VERSION_1_1, HTTP_LINE_ENDING, StorageOAuthScopes } from \"./utils/constants\";\nimport { StorageSharedKeyCredential } from \"./credentials/StorageSharedKeyCredential\";\nimport { createSpan } from \"./utils/tracing\";\n/**\n * A BlobBatch represents an aggregated set of operations on blobs.\n * Currently, only `delete` and `setAccessTier` are supported.\n */\nexport class BlobBatch {\n constructor() {\n this.batch = \"batch\";\n this.batchRequest = new InnerBatchRequest();\n }\n /**\n * Get the value of Content-Type for a batch request.\n * The value must be multipart/mixed with a batch boundary.\n * Example: multipart/mixed; boundary=batch_a81786c8-e301-4e42-a729-a32ca24ae252\n */\n getMultiPartContentType() {\n return this.batchRequest.getMultipartContentType();\n }\n /**\n * Get assembled HTTP request body for sub requests.\n */\n getHttpRequestBody() {\n return this.batchRequest.getHttpRequestBody();\n }\n /**\n * Get sub requests that are added into the batch request.\n */\n getSubRequests() {\n return this.batchRequest.getSubRequests();\n }\n async addSubRequestInternal(subRequest, assembleSubRequestFunc) {\n await Mutex.lock(this.batch);\n try {\n this.batchRequest.preAddSubRequest(subRequest);\n await assembleSubRequestFunc();\n this.batchRequest.postAddSubRequest(subRequest);\n } finally {\n await Mutex.unlock(this.batch);\n }\n }\n setBatchType(batchType) {\n if (!this.batchType) {\n this.batchType = batchType;\n }\n if (this.batchType !== batchType) {\n throw new RangeError(`BlobBatch only supports one operation type per batch and it already is being used for ${this.batchType} operations.`);\n }\n }\n async deleteBlob(urlOrBlobClient, credentialOrOptions, options) {\n let url;\n let credential;\n if (typeof urlOrBlobClient === \"string\" && (isNode && credentialOrOptions instanceof StorageSharedKeyCredential || credentialOrOptions instanceof AnonymousCredential || isTokenCredential(credentialOrOptions))) {\n // First overload\n url = urlOrBlobClient;\n credential = credentialOrOptions;\n } else if (urlOrBlobClient instanceof BlobClient) {\n // Second overload\n url = urlOrBlobClient.url;\n credential = urlOrBlobClient.credential;\n options = credentialOrOptions;\n } else {\n throw new RangeError(\"Invalid arguments. Either url and credential, or BlobClient need be provided.\");\n }\n if (!options) {\n options = {};\n }\n const {\n span,\n updatedOptions\n } = createSpan(\"BatchDeleteRequest-addSubRequest\", options);\n try {\n this.setBatchType(\"delete\");\n await this.addSubRequestInternal({\n url: url,\n credential: credential\n }, async () => {\n await new BlobClient(url, this.batchRequest.createPipeline(credential)).delete(updatedOptions);\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n async setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions, options) {\n let url;\n let credential;\n let tier;\n if (typeof urlOrBlobClient === \"string\" && (isNode && credentialOrTier instanceof StorageSharedKeyCredential || credentialOrTier instanceof AnonymousCredential || isTokenCredential(credentialOrTier))) {\n // First overload\n url = urlOrBlobClient;\n credential = credentialOrTier;\n tier = tierOrOptions;\n } else if (urlOrBlobClient instanceof BlobClient) {\n // Second overload\n url = urlOrBlobClient.url;\n credential = urlOrBlobClient.credential;\n tier = credentialOrTier;\n options = tierOrOptions;\n } else {\n throw new RangeError(\"Invalid arguments. Either url and credential, or BlobClient need be provided.\");\n }\n if (!options) {\n options = {};\n }\n const {\n span,\n updatedOptions\n } = createSpan(\"BatchSetTierRequest-addSubRequest\", options);\n try {\n this.setBatchType(\"setAccessTier\");\n await this.addSubRequestInternal({\n url: url,\n credential: credential\n }, async () => {\n await new BlobClient(url, this.batchRequest.createPipeline(credential)).setAccessTier(tier, updatedOptions);\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n}\n/**\n * Inner batch request class which is responsible for assembling and serializing sub requests.\n * See https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#request-body for how requests are assembled.\n */\nclass InnerBatchRequest {\n constructor() {\n this.operationCount = 0;\n this.body = \"\";\n const tempGuid = generateUuid();\n // batch_{batchid}\n this.boundary = `batch_${tempGuid}`;\n // --batch_{batchid}\n // Content-Type: application/http\n // Content-Transfer-Encoding: binary\n this.subRequestPrefix = `--${this.boundary}${HTTP_LINE_ENDING}${HeaderConstants.CONTENT_TYPE}: application/http${HTTP_LINE_ENDING}${HeaderConstants.CONTENT_TRANSFER_ENCODING}: binary`;\n // multipart/mixed; boundary=batch_{batchid}\n this.multipartContentType = `multipart/mixed; boundary=${this.boundary}`;\n // --batch_{batchid}--\n this.batchRequestEnding = `--${this.boundary}--`;\n this.subRequests = new Map();\n }\n /**\n * Create pipeline to assemble sub requests. The idea here is to use existing\n * credential and serialization/deserialization components, with additional policies to\n * filter unnecessary headers, assemble sub requests into request's body\n * and intercept request from going to wire.\n * @param credential - Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the `@azure/identity` package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used.\n */\n createPipeline(credential) {\n const isAnonymousCreds = credential instanceof AnonymousCredential;\n const policyFactoryLength = 3 + (isAnonymousCreds ? 0 : 1); // [deserializationPolicy, BatchHeaderFilterPolicyFactory, (Optional)Credential, BatchRequestAssemblePolicyFactory]\n const factories = new Array(policyFactoryLength);\n factories[0] = deserializationPolicy(); // Default deserializationPolicy is provided by protocol layer\n factories[1] = new BatchHeaderFilterPolicyFactory(); // Use batch header filter policy to exclude unnecessary headers\n if (!isAnonymousCreds) {\n factories[2] = isTokenCredential(credential) ? attachCredential(bearerTokenAuthenticationPolicy(credential, StorageOAuthScopes), credential) : credential;\n }\n factories[policyFactoryLength - 1] = new BatchRequestAssemblePolicyFactory(this); // Use batch assemble policy to assemble request and intercept request from going to wire\n return new Pipeline(factories, {});\n }\n appendSubRequestToBody(request) {\n // Start to assemble sub request\n this.body += [this.subRequestPrefix, `${HeaderConstants.CONTENT_ID}: ${this.operationCount}`, \"\", `${request.method.toString()} ${getURLPathAndQuery(request.url)} ${HTTP_VERSION_1_1}${HTTP_LINE_ENDING}` // sub request start line with method\n ].join(HTTP_LINE_ENDING);\n for (const header of request.headers.headersArray()) {\n this.body += `${header.name}: ${header.value}${HTTP_LINE_ENDING}`;\n }\n this.body += HTTP_LINE_ENDING; // sub request's headers need be ending with an empty line\n // No body to assemble for current batch request support\n // End to assemble sub request\n }\n preAddSubRequest(subRequest) {\n if (this.operationCount >= BATCH_MAX_REQUEST) {\n throw new RangeError(`Cannot exceed ${BATCH_MAX_REQUEST} sub requests in a single batch`);\n }\n // Fast fail if url for sub request is invalid\n const path = getURLPath(subRequest.url);\n if (!path || path === \"\") {\n throw new RangeError(`Invalid url for sub request: '${subRequest.url}'`);\n }\n }\n postAddSubRequest(subRequest) {\n this.subRequests.set(this.operationCount, subRequest);\n this.operationCount++;\n }\n // Return the http request body with assembling the ending line to the sub request body.\n getHttpRequestBody() {\n return `${this.body}${this.batchRequestEnding}${HTTP_LINE_ENDING}`;\n }\n getMultipartContentType() {\n return this.multipartContentType;\n }\n getSubRequests() {\n return this.subRequests;\n }\n}\nclass BatchRequestAssemblePolicy extends BaseRequestPolicy {\n constructor(batchRequest, nextPolicy, options) {\n super(nextPolicy, options);\n this.dummyResponse = {\n request: new WebResource(),\n status: 200,\n headers: new HttpHeaders()\n };\n this.batchRequest = batchRequest;\n }\n async sendRequest(request) {\n await this.batchRequest.appendSubRequestToBody(request);\n return this.dummyResponse; // Intercept request from going to wire\n }\n}\nclass BatchRequestAssemblePolicyFactory {\n constructor(batchRequest) {\n this.batchRequest = batchRequest;\n }\n create(nextPolicy, options) {\n return new BatchRequestAssemblePolicy(this.batchRequest, nextPolicy, options);\n }\n}\nclass BatchHeaderFilterPolicy extends BaseRequestPolicy {\n // The base class has a protected constructor. Adding a public one to enable constructing of this class.\n /* eslint-disable-next-line @typescript-eslint/no-useless-constructor*/\n constructor(nextPolicy, options) {\n super(nextPolicy, options);\n }\n async sendRequest(request) {\n let xMsHeaderName = \"\";\n for (const header of request.headers.headersArray()) {\n if (iEqual(header.name, HeaderConstants.X_MS_VERSION)) {\n xMsHeaderName = header.name;\n }\n }\n if (xMsHeaderName !== \"\") {\n request.headers.remove(xMsHeaderName); // The subrequests should not have the x-ms-version header.\n }\n return this._nextPolicy.sendRequest(request);\n }\n}\nclass BatchHeaderFilterPolicyFactory {\n create(nextPolicy, options) {\n return new BatchHeaderFilterPolicy(nextPolicy, options);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { BatchResponseParser } from \"./BatchResponseParser\";\nimport { utf8ByteLength } from \"./BatchUtils\";\nimport { BlobBatch } from \"./BlobBatch\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { convertTracingToRequestOptionsBase, createSpan } from \"./utils/tracing\";\nimport { Service, Container } from \"./generated/src/operations\";\nimport { AnonymousCredential } from \"./credentials/AnonymousCredential\";\nimport { StorageClientContext } from \"./generated/src/storageClientContext\";\nimport { newPipeline, isPipelineLike } from \"./Pipeline\";\nimport { getURLPath } from \"./utils/utils.common\";\n/**\n * A BlobBatchClient allows you to make batched requests to the Azure Storage Blob service.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch\n */\nexport class BlobBatchClient {\n constructor(url, credentialOrPipeline,\n // Legacy, no fix for eslint error without breaking. Disable it for this interface.\n /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/\n options) {\n let pipeline;\n if (isPipelineLike(credentialOrPipeline)) {\n pipeline = credentialOrPipeline;\n } else if (!credentialOrPipeline) {\n // no credential provided\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else {\n pipeline = newPipeline(credentialOrPipeline, options);\n }\n const storageClientContext = new StorageClientContext(url, pipeline.toServiceClientOptions());\n const path = getURLPath(url);\n if (path && path !== \"/\") {\n // Container scoped.\n this.serviceOrContainerContext = new Container(storageClientContext);\n } else {\n this.serviceOrContainerContext = new Service(storageClientContext);\n }\n }\n /**\n * Creates a {@link BlobBatch}.\n * A BlobBatch represents an aggregated set of operations on blobs.\n */\n createBatch() {\n return new BlobBatch();\n }\n async deleteBlobs(urlsOrBlobClients, credentialOrOptions,\n // Legacy, no fix for eslint error without breaking. Disable it for this interface.\n /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/\n options) {\n const batch = new BlobBatch();\n for (const urlOrBlobClient of urlsOrBlobClients) {\n if (typeof urlOrBlobClient === \"string\") {\n await batch.deleteBlob(urlOrBlobClient, credentialOrOptions, options);\n } else {\n await batch.deleteBlob(urlOrBlobClient, credentialOrOptions);\n }\n }\n return this.submitBatch(batch);\n }\n async setBlobsAccessTier(urlsOrBlobClients, credentialOrTier, tierOrOptions,\n // Legacy, no fix for eslint error without breaking. Disable it for this interface.\n /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/\n options) {\n const batch = new BlobBatch();\n for (const urlOrBlobClient of urlsOrBlobClients) {\n if (typeof urlOrBlobClient === \"string\") {\n await batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions, options);\n } else {\n await batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions);\n }\n }\n return this.submitBatch(batch);\n }\n /**\n * Submit batch request which consists of multiple subrequests.\n *\n * Get `blobBatchClient` and other details before running the snippets.\n * `blobServiceClient.getBlobBatchClient()` gives the `blobBatchClient`\n *\n * Example usage:\n *\n * ```js\n * let batchRequest = new BlobBatch();\n * await batchRequest.deleteBlob(urlInString0, credential0);\n * await batchRequest.deleteBlob(urlInString1, credential1, {\n * deleteSnapshots: \"include\"\n * });\n * const batchResp = await blobBatchClient.submitBatch(batchRequest);\n * console.log(batchResp.subResponsesSucceededCount);\n * ```\n *\n * Example using a lease:\n *\n * ```js\n * let batchRequest = new BlobBatch();\n * await batchRequest.setBlobAccessTier(blockBlobClient0, \"Cool\");\n * await batchRequest.setBlobAccessTier(blockBlobClient1, \"Cool\", {\n * conditions: { leaseId: leaseId }\n * });\n * const batchResp = await blobBatchClient.submitBatch(batchRequest);\n * console.log(batchResp.subResponsesSucceededCount);\n * ```\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch\n *\n * @param batchRequest - A set of Delete or SetTier operations.\n * @param options -\n */\n async submitBatch(batchRequest, options = {}) {\n if (!batchRequest || batchRequest.getSubRequests().size === 0) {\n throw new RangeError(\"Batch request should contain one or more sub requests.\");\n }\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobBatchClient-submitBatch\", options);\n try {\n const batchRequestBody = batchRequest.getHttpRequestBody();\n // ServiceSubmitBatchResponseModel and ContainerSubmitBatchResponse are compatible for now.\n const rawBatchResponse = await this.serviceOrContainerContext.submitBatch(utf8ByteLength(batchRequestBody), batchRequest.getMultiPartContentType(), batchRequestBody, Object.assign(Object.assign({}, options), convertTracingToRequestOptionsBase(updatedOptions)));\n // Parse the sub responses result, if logic reaches here(i.e. the batch request succeeded with status code 202).\n const batchResponseParser = new BatchResponseParser(rawBatchResponse, batchRequest.getSubRequests());\n const responseSummary = await batchResponseParser.parseBatchResponse();\n const res = {\n _response: rawBatchResponse._response,\n contentType: rawBatchResponse.contentType,\n errorCode: rawBatchResponse.errorCode,\n requestId: rawBatchResponse.requestId,\n clientRequestId: rawBatchResponse.clientRequestId,\n version: rawBatchResponse.version,\n subResponses: responseSummary.subResponses,\n subResponsesSucceededCount: responseSummary.subResponsesSucceededCount,\n subResponsesFailedCount: responseSummary.subResponsesFailedCount\n };\n return res;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n}\n","import { __asyncDelegator, __asyncGenerator, __asyncValues, __await } from \"tslib\";\nimport { getDefaultProxySettings, isNode, isTokenCredential, URLBuilder } from \"@azure/core-http\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { AnonymousCredential } from \"./credentials/AnonymousCredential\";\nimport { StorageSharedKeyCredential } from \"./credentials/StorageSharedKeyCredential\";\nimport { Container } from \"./generated/src/operations\";\nimport { newPipeline, isPipelineLike } from \"./Pipeline\";\nimport { StorageClient } from \"./StorageClient\";\nimport { convertTracingToRequestOptionsBase, createSpan } from \"./utils/tracing\";\nimport { appendToURLPath, appendToURLQuery, BlobNameToString, ConvertInternalResponseOfListBlobFlat, ConvertInternalResponseOfListBlobHierarchy, EscapePath, extractConnectionStringParts, isIpEndpointStyle, parseObjectReplicationRecord, toTags, truncatedISO8061Date } from \"./utils/utils.common\";\nimport { generateBlobSASQueryParameters } from \"./sas/BlobSASSignatureValues\";\nimport { BlobLeaseClient } from \"./BlobLeaseClient\";\nimport { AppendBlobClient, BlobClient, BlockBlobClient, PageBlobClient } from \"./Clients\";\nimport { BlobBatchClient } from \"./BlobBatchClient\";\n/**\n * A ContainerClient represents a URL to the Azure Storage container allowing you to manipulate its blobs.\n */\nexport class ContainerClient extends StorageClient {\n constructor(urlOrConnectionString, credentialOrPipelineOrContainerName,\n // Legacy, no fix for eslint error without breaking. Disable it for this interface.\n /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/\n options) {\n let pipeline;\n let url;\n options = options || {};\n if (isPipelineLike(credentialOrPipelineOrContainerName)) {\n // (url: string, pipeline: Pipeline)\n url = urlOrConnectionString;\n pipeline = credentialOrPipelineOrContainerName;\n } else if (isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential || credentialOrPipelineOrContainerName instanceof AnonymousCredential || isTokenCredential(credentialOrPipelineOrContainerName)) {\n // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)\n url = urlOrConnectionString;\n pipeline = newPipeline(credentialOrPipelineOrContainerName, options);\n } else if (!credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName !== \"string\") {\n // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)\n // The second parameter is undefined. Use anonymous credential.\n url = urlOrConnectionString;\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else if (credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName === \"string\") {\n // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)\n const containerName = credentialOrPipelineOrContainerName;\n const extractedCreds = extractConnectionStringParts(urlOrConnectionString);\n if (extractedCreds.kind === \"AccountConnString\") {\n if (isNode) {\n const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);\n url = appendToURLPath(extractedCreds.url, encodeURIComponent(containerName));\n if (!options.proxyOptions) {\n options.proxyOptions = getDefaultProxySettings(extractedCreds.proxyUri);\n }\n pipeline = newPipeline(sharedKeyCredential, options);\n } else {\n throw new Error(\"Account connection string is only supported in Node.js environment\");\n }\n } else if (extractedCreds.kind === \"SASConnString\") {\n url = appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)) + \"?\" + extractedCreds.accountSas;\n pipeline = newPipeline(new AnonymousCredential(), options);\n } else {\n throw new Error(\"Connection string must be either an Account connection string or a SAS connection string\");\n }\n } else {\n throw new Error(\"Expecting non-empty strings for containerName parameter\");\n }\n super(url, pipeline);\n this._containerName = this.getContainerNameFromUrl();\n this.containerContext = new Container(this.storageClientContext);\n }\n /**\n * The name of the container.\n */\n get containerName() {\n return this._containerName;\n }\n /**\n * Creates a new container under the specified account. If the container with\n * the same name already exists, the operation fails.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-container\n * Naming rules: @see https://learn.microsoft.com/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata\n *\n * @param options - Options to Container Create operation.\n *\n *\n * Example usage:\n *\n * ```js\n * const containerClient = blobServiceClient.getContainerClient(\"\");\n * const createContainerResponse = await containerClient.create();\n * console.log(\"Container was created successfully\", createContainerResponse.requestId);\n * ```\n */\n async create(options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-create\", options);\n try {\n // Spread operator in destructuring assignments,\n // this will filter out unwanted properties from the response object into result object\n return await this.containerContext.create(Object.assign(Object.assign({}, options), convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Creates a new container under the specified account. If the container with\n * the same name already exists, it is not changed.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-container\n * Naming rules: @see https://learn.microsoft.com/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata\n *\n * @param options -\n */\n async createIfNotExists(options = {}) {\n var _a, _b;\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-createIfNotExists\", options);\n try {\n const res = await this.create(updatedOptions);\n return Object.assign(Object.assign({\n succeeded: true\n }, res), {\n _response: res._response\n });\n } catch (e) {\n if (((_a = e.details) === null || _a === void 0 ? void 0 : _a.errorCode) === \"ContainerAlreadyExists\") {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Expected exception when creating a container only if it does not already exist.\"\n });\n return Object.assign(Object.assign({\n succeeded: false\n }, (_b = e.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), {\n _response: e.response\n });\n }\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns true if the Azure container resource represented by this client exists; false otherwise.\n *\n * NOTE: use this function with care since an existing container might be deleted by other clients or\n * applications. Vice versa new containers with the same name might be added by other clients or\n * applications after this function completes.\n *\n * @param options -\n */\n async exists(options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-exists\", options);\n try {\n await this.getProperties({\n abortSignal: options.abortSignal,\n tracingOptions: updatedOptions.tracingOptions\n });\n return true;\n } catch (e) {\n if (e.statusCode === 404) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Expected exception when checking container existence\"\n });\n return false;\n }\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Creates a {@link BlobClient}\n *\n * @param blobName - A blob name\n * @returns A new BlobClient object for the given blob name.\n */\n getBlobClient(blobName) {\n return new BlobClient(appendToURLPath(this.url, EscapePath(blobName)), this.pipeline);\n }\n /**\n * Creates an {@link AppendBlobClient}\n *\n * @param blobName - An append blob name\n */\n getAppendBlobClient(blobName) {\n return new AppendBlobClient(appendToURLPath(this.url, EscapePath(blobName)), this.pipeline);\n }\n /**\n * Creates a {@link BlockBlobClient}\n *\n * @param blobName - A block blob name\n *\n *\n * Example usage:\n *\n * ```js\n * const content = \"Hello world!\";\n *\n * const blockBlobClient = containerClient.getBlockBlobClient(\"\");\n * const uploadBlobResponse = await blockBlobClient.upload(content, content.length);\n * ```\n */\n getBlockBlobClient(blobName) {\n return new BlockBlobClient(appendToURLPath(this.url, EscapePath(blobName)), this.pipeline);\n }\n /**\n * Creates a {@link PageBlobClient}\n *\n * @param blobName - A page blob name\n */\n getPageBlobClient(blobName) {\n return new PageBlobClient(appendToURLPath(this.url, EscapePath(blobName)), this.pipeline);\n }\n /**\n * Returns all user-defined metadata and system properties for the specified\n * container. The data returned does not include the container's list of blobs.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-container-properties\n *\n * WARNING: The `metadata` object returned in the response will have its keys in lowercase, even if\n * they originally contained uppercase characters. This differs from the metadata keys returned by\n * the `listContainers` method of {@link BlobServiceClient} using the `includeMetadata` option, which\n * will retain their original casing.\n *\n * @param options - Options to Container Get Properties operation.\n */\n async getProperties(options = {}) {\n if (!options.conditions) {\n options.conditions = {};\n }\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-getProperties\", options);\n try {\n return await this.containerContext.getProperties(Object.assign(Object.assign({\n abortSignal: options.abortSignal\n }, options.conditions), convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Marks the specified container for deletion. The container and any blobs\n * contained within it are later deleted during garbage collection.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-container\n *\n * @param options - Options to Container Delete operation.\n */\n async delete(options = {}) {\n if (!options.conditions) {\n options.conditions = {};\n }\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-delete\", options);\n try {\n return await this.containerContext.delete(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: options.conditions\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Marks the specified container for deletion if it exists. The container and any blobs\n * contained within it are later deleted during garbage collection.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-container\n *\n * @param options - Options to Container Delete operation.\n */\n async deleteIfExists(options = {}) {\n var _a, _b;\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-deleteIfExists\", options);\n try {\n const res = await this.delete(updatedOptions);\n return Object.assign(Object.assign({\n succeeded: true\n }, res), {\n _response: res._response\n });\n } catch (e) {\n if (((_a = e.details) === null || _a === void 0 ? void 0 : _a.errorCode) === \"ContainerNotFound\") {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Expected exception when deleting a container only if it exists.\"\n });\n return Object.assign(Object.assign({\n succeeded: false\n }, (_b = e.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), {\n _response: e.response\n });\n }\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Sets one or more user-defined name-value pairs for the specified container.\n *\n * If no option provided, or no metadata defined in the parameter, the container\n * metadata will be removed.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-metadata\n *\n * @param metadata - Replace existing metadata with this value.\n * If no value provided the existing metadata will be removed.\n * @param options - Options to Container Set Metadata operation.\n */\n async setMetadata(metadata, options = {}) {\n if (!options.conditions) {\n options.conditions = {};\n }\n if (options.conditions.ifUnmodifiedSince) {\n throw new RangeError(\"the IfUnmodifiedSince must have their default values because they are ignored by the blob service\");\n }\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-setMetadata\", options);\n try {\n return await this.containerContext.setMetadata(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions,\n metadata,\n modifiedAccessConditions: options.conditions\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Gets the permissions for the specified container. The permissions indicate\n * whether container data may be accessed publicly.\n *\n * WARNING: JavaScript Date will potentially lose precision when parsing startsOn and expiresOn strings.\n * For example, new Date(\"2018-12-31T03:44:23.8827891Z\").toISOString() will get \"2018-12-31T03:44:23.882Z\".\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-container-acl\n *\n * @param options - Options to Container Get Access Policy operation.\n */\n async getAccessPolicy(options = {}) {\n if (!options.conditions) {\n options.conditions = {};\n }\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-getAccessPolicy\", options);\n try {\n const response = await this.containerContext.getAccessPolicy(Object.assign({\n abortSignal: options.abortSignal,\n leaseAccessConditions: options.conditions\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n const res = {\n _response: response._response,\n blobPublicAccess: response.blobPublicAccess,\n date: response.date,\n etag: response.etag,\n errorCode: response.errorCode,\n lastModified: response.lastModified,\n requestId: response.requestId,\n clientRequestId: response.clientRequestId,\n signedIdentifiers: [],\n version: response.version\n };\n for (const identifier of response) {\n let accessPolicy = undefined;\n if (identifier.accessPolicy) {\n accessPolicy = {\n permissions: identifier.accessPolicy.permissions\n };\n if (identifier.accessPolicy.expiresOn) {\n accessPolicy.expiresOn = new Date(identifier.accessPolicy.expiresOn);\n }\n if (identifier.accessPolicy.startsOn) {\n accessPolicy.startsOn = new Date(identifier.accessPolicy.startsOn);\n }\n }\n res.signedIdentifiers.push({\n accessPolicy,\n id: identifier.id\n });\n }\n return res;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Sets the permissions for the specified container. The permissions indicate\n * whether blobs in a container may be accessed publicly.\n *\n * When you set permissions for a container, the existing permissions are replaced.\n * If no access or containerAcl provided, the existing container ACL will be\n * removed.\n *\n * When you establish a stored access policy on a container, it may take up to 30 seconds to take effect.\n * During this interval, a shared access signature that is associated with the stored access policy will\n * fail with status code 403 (Forbidden), until the access policy becomes active.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-acl\n *\n * @param access - The level of public access to data in the container.\n * @param containerAcl - Array of elements each having a unique Id and details of the access policy.\n * @param options - Options to Container Set Access Policy operation.\n */\n async setAccessPolicy(access, containerAcl, options = {}) {\n options.conditions = options.conditions || {};\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-setAccessPolicy\", options);\n try {\n const acl = [];\n for (const identifier of containerAcl || []) {\n acl.push({\n accessPolicy: {\n expiresOn: identifier.accessPolicy.expiresOn ? truncatedISO8061Date(identifier.accessPolicy.expiresOn) : \"\",\n permissions: identifier.accessPolicy.permissions,\n startsOn: identifier.accessPolicy.startsOn ? truncatedISO8061Date(identifier.accessPolicy.startsOn) : \"\"\n },\n id: identifier.id\n });\n }\n return await this.containerContext.setAccessPolicy(Object.assign({\n abortSignal: options.abortSignal,\n access,\n containerAcl: acl,\n leaseAccessConditions: options.conditions,\n modifiedAccessConditions: options.conditions\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Get a {@link BlobLeaseClient} that manages leases on the container.\n *\n * @param proposeLeaseId - Initial proposed lease Id.\n * @returns A new BlobLeaseClient object for managing leases on the container.\n */\n getBlobLeaseClient(proposeLeaseId) {\n return new BlobLeaseClient(this, proposeLeaseId);\n }\n /**\n * Creates a new block blob, or updates the content of an existing block blob.\n *\n * Updating an existing block blob overwrites any existing metadata on the blob.\n * Partial updates are not supported; the content of the existing blob is\n * overwritten with the new content. To perform a partial update of a block blob's,\n * use {@link BlockBlobClient.stageBlock} and {@link BlockBlobClient.commitBlockList}.\n *\n * This is a non-parallel uploading method, please use {@link BlockBlobClient.uploadFile},\n * {@link BlockBlobClient.uploadStream} or {@link BlockBlobClient.uploadBrowserData} for better\n * performance with concurrency uploading.\n *\n * @see https://docs.microsoft.com/rest/api/storageservices/put-blob\n *\n * @param blobName - Name of the block blob to create or update.\n * @param body - Blob, string, ArrayBuffer, ArrayBufferView or a function\n * which returns a new Readable stream whose offset is from data source beginning.\n * @param contentLength - Length of body in bytes. Use Buffer.byteLength() to calculate body length for a\n * string including non non-Base64/Hex-encoded characters.\n * @param options - Options to configure the Block Blob Upload operation.\n * @returns Block Blob upload response data and the corresponding BlockBlobClient instance.\n */\n async uploadBlockBlob(blobName, body, contentLength, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-uploadBlockBlob\", options);\n try {\n const blockBlobClient = this.getBlockBlobClient(blobName);\n const response = await blockBlobClient.upload(body, contentLength, updatedOptions);\n return {\n blockBlobClient,\n response\n };\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Marks the specified blob or snapshot for deletion. The blob is later deleted\n * during garbage collection. Note that in order to delete a blob, you must delete\n * all of its snapshots. You can delete both at the same time with the Delete\n * Blob operation.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob\n *\n * @param blobName -\n * @param options - Options to Blob Delete operation.\n * @returns Block blob deletion response data.\n */\n async deleteBlob(blobName, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-deleteBlob\", options);\n try {\n let blobClient = this.getBlobClient(blobName);\n if (options.versionId) {\n blobClient = blobClient.withVersion(options.versionId);\n }\n return await blobClient.delete(updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * listBlobFlatSegment returns a single segment of blobs starting from the\n * specified Marker. Use an empty Marker to start enumeration from the beginning.\n * After getting a segment, process it, and then call listBlobsFlatSegment again\n * (passing the the previously-returned Marker) to get the next segment.\n * @see https://docs.microsoft.com/rest/api/storageservices/list-blobs\n *\n * @param marker - A string value that identifies the portion of the list to be returned with the next list operation.\n * @param options - Options to Container List Blob Flat Segment operation.\n */\n async listBlobFlatSegment(marker, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-listBlobFlatSegment\", options);\n try {\n const response = await this.containerContext.listBlobFlatSegment(Object.assign(Object.assign({\n marker\n }, options), convertTracingToRequestOptionsBase(updatedOptions)));\n const wrappedResponse = Object.assign(Object.assign({}, response), {\n _response: Object.assign(Object.assign({}, response._response), {\n parsedBody: ConvertInternalResponseOfListBlobFlat(response._response.parsedBody)\n }),\n segment: Object.assign(Object.assign({}, response.segment), {\n blobItems: response.segment.blobItems.map(blobItemInteral => {\n const blobItem = Object.assign(Object.assign({}, blobItemInteral), {\n name: BlobNameToString(blobItemInteral.name),\n tags: toTags(blobItemInteral.blobTags),\n objectReplicationSourceProperties: parseObjectReplicationRecord(blobItemInteral.objectReplicationMetadata)\n });\n return blobItem;\n })\n })\n });\n return wrappedResponse;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * listBlobHierarchySegment returns a single segment of blobs starting from\n * the specified Marker. Use an empty Marker to start enumeration from the\n * beginning. After getting a segment, process it, and then call listBlobsHierarchicalSegment\n * again (passing the the previously-returned Marker) to get the next segment.\n * @see https://docs.microsoft.com/rest/api/storageservices/list-blobs\n *\n * @param delimiter - The character or string used to define the virtual hierarchy\n * @param marker - A string value that identifies the portion of the list to be returned with the next list operation.\n * @param options - Options to Container List Blob Hierarchy Segment operation.\n */\n async listBlobHierarchySegment(delimiter, marker, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-listBlobHierarchySegment\", options);\n try {\n const response = await this.containerContext.listBlobHierarchySegment(delimiter, Object.assign(Object.assign({\n marker\n }, options), convertTracingToRequestOptionsBase(updatedOptions)));\n const wrappedResponse = Object.assign(Object.assign({}, response), {\n _response: Object.assign(Object.assign({}, response._response), {\n parsedBody: ConvertInternalResponseOfListBlobHierarchy(response._response.parsedBody)\n }),\n segment: Object.assign(Object.assign({}, response.segment), {\n blobItems: response.segment.blobItems.map(blobItemInteral => {\n const blobItem = Object.assign(Object.assign({}, blobItemInteral), {\n name: BlobNameToString(blobItemInteral.name),\n tags: toTags(blobItemInteral.blobTags),\n objectReplicationSourceProperties: parseObjectReplicationRecord(blobItemInteral.objectReplicationMetadata)\n });\n return blobItem;\n }),\n blobPrefixes: (_a = response.segment.blobPrefixes) === null || _a === void 0 ? void 0 : _a.map(blobPrefixInternal => {\n const blobPrefix = Object.assign(Object.assign({}, blobPrefixInternal), {\n name: BlobNameToString(blobPrefixInternal.name)\n });\n return blobPrefix;\n })\n })\n });\n return wrappedResponse;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns an AsyncIterableIterator for ContainerListBlobFlatSegmentResponse\n *\n * @param marker - A string value that identifies the portion of\n * the list of blobs to be returned with the next listing operation. The\n * operation returns the ContinuationToken value within the response body if the\n * listing operation did not return all blobs remaining to be listed\n * with the current page. The ContinuationToken value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of list\n * items. The marker value is opaque to the client.\n * @param options - Options to list blobs operation.\n */\n listSegments(marker, options = {}) {\n return __asyncGenerator(this, arguments, function* listSegments_1() {\n let listBlobsFlatSegmentResponse;\n if (!!marker || marker === undefined) {\n do {\n listBlobsFlatSegmentResponse = yield __await(this.listBlobFlatSegment(marker, options));\n marker = listBlobsFlatSegmentResponse.continuationToken;\n yield yield __await(yield __await(listBlobsFlatSegmentResponse));\n } while (marker);\n }\n });\n }\n /**\n * Returns an AsyncIterableIterator of {@link BlobItem} objects\n *\n * @param options - Options to list blobs operation.\n */\n listItems(options = {}) {\n return __asyncGenerator(this, arguments, function* listItems_1() {\n var e_1, _a;\n let marker;\n try {\n for (var _b = __asyncValues(this.listSegments(marker, options)), _c; _c = yield __await(_b.next()), !_c.done;) {\n const listBlobsFlatSegmentResponse = _c.value;\n yield __await(yield* __asyncDelegator(__asyncValues(listBlobsFlatSegmentResponse.segment.blobItems)));\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) yield __await(_a.call(_b));\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n });\n }\n /**\n * Returns an async iterable iterator to list all the blobs\n * under the specified account.\n *\n * .byPage() returns an async iterable iterator to list the blobs in pages.\n *\n * Example using `for await` syntax:\n *\n * ```js\n * // Get the containerClient before you run these snippets,\n * // Can be obtained from `blobServiceClient.getContainerClient(\"\");`\n * let i = 1;\n * for await (const blob of containerClient.listBlobsFlat()) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n * ```\n *\n * Example using `iter.next()`:\n *\n * ```js\n * let i = 1;\n * let iter = containerClient.listBlobsFlat();\n * let blobItem = await iter.next();\n * while (!blobItem.done) {\n * console.log(`Blob ${i++}: ${blobItem.value.name}`);\n * blobItem = await iter.next();\n * }\n * ```\n *\n * Example using `byPage()`:\n *\n * ```js\n * // passing optional maxPageSize in the page settings\n * let i = 1;\n * for await (const response of containerClient.listBlobsFlat().byPage({ maxPageSize: 20 })) {\n * for (const blob of response.segment.blobItems) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n * }\n * ```\n *\n * Example using paging with a marker:\n *\n * ```js\n * let i = 1;\n * let iterator = containerClient.listBlobsFlat().byPage({ maxPageSize: 2 });\n * let response = (await iterator.next()).value;\n *\n * // Prints 2 blob names\n * for (const blob of response.segment.blobItems) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n *\n * // Gets next marker\n * let marker = response.continuationToken;\n *\n * // Passing next marker as continuationToken\n *\n * iterator = containerClient.listBlobsFlat().byPage({ continuationToken: marker, maxPageSize: 10 });\n * response = (await iterator.next()).value;\n *\n * // Prints 10 blob names\n * for (const blob of response.segment.blobItems) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n * ```\n *\n * @param options - Options to list blobs.\n * @returns An asyncIterableIterator that supports paging.\n */\n listBlobsFlat(options = {}) {\n const include = [];\n if (options.includeCopy) {\n include.push(\"copy\");\n }\n if (options.includeDeleted) {\n include.push(\"deleted\");\n }\n if (options.includeMetadata) {\n include.push(\"metadata\");\n }\n if (options.includeSnapshots) {\n include.push(\"snapshots\");\n }\n if (options.includeVersions) {\n include.push(\"versions\");\n }\n if (options.includeUncommitedBlobs) {\n include.push(\"uncommittedblobs\");\n }\n if (options.includeTags) {\n include.push(\"tags\");\n }\n if (options.includeDeletedWithVersions) {\n include.push(\"deletedwithversions\");\n }\n if (options.includeImmutabilityPolicy) {\n include.push(\"immutabilitypolicy\");\n }\n if (options.includeLegalHold) {\n include.push(\"legalhold\");\n }\n if (options.prefix === \"\") {\n options.prefix = undefined;\n }\n const updatedOptions = Object.assign(Object.assign({}, options), include.length > 0 ? {\n include: include\n } : {});\n // AsyncIterableIterator to iterate over blobs\n const iter = this.listItems(updatedOptions);\n return {\n /**\n * The next method, part of the iteration protocol\n */\n next() {\n return iter.next();\n },\n /**\n * The connection to the async iterator, part of the iteration protocol\n */\n [Symbol.asyncIterator]() {\n return this;\n },\n /**\n * Return an AsyncIterableIterator that works a page at a time\n */\n byPage: (settings = {}) => {\n return this.listSegments(settings.continuationToken, Object.assign({\n maxPageSize: settings.maxPageSize\n }, updatedOptions));\n }\n };\n }\n /**\n * Returns an AsyncIterableIterator for ContainerListBlobHierarchySegmentResponse\n *\n * @param delimiter - The character or string used to define the virtual hierarchy\n * @param marker - A string value that identifies the portion of\n * the list of blobs to be returned with the next listing operation. The\n * operation returns the ContinuationToken value within the response body if the\n * listing operation did not return all blobs remaining to be listed\n * with the current page. The ContinuationToken value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of list\n * items. The marker value is opaque to the client.\n * @param options - Options to list blobs operation.\n */\n listHierarchySegments(delimiter, marker, options = {}) {\n return __asyncGenerator(this, arguments, function* listHierarchySegments_1() {\n let listBlobsHierarchySegmentResponse;\n if (!!marker || marker === undefined) {\n do {\n listBlobsHierarchySegmentResponse = yield __await(this.listBlobHierarchySegment(delimiter, marker, options));\n marker = listBlobsHierarchySegmentResponse.continuationToken;\n yield yield __await(yield __await(listBlobsHierarchySegmentResponse));\n } while (marker);\n }\n });\n }\n /**\n * Returns an AsyncIterableIterator for {@link BlobPrefix} and {@link BlobItem} objects.\n *\n * @param delimiter - The character or string used to define the virtual hierarchy\n * @param options - Options to list blobs operation.\n */\n listItemsByHierarchy(delimiter, options = {}) {\n return __asyncGenerator(this, arguments, function* listItemsByHierarchy_1() {\n var e_2, _a;\n let marker;\n try {\n for (var _b = __asyncValues(this.listHierarchySegments(delimiter, marker, options)), _c; _c = yield __await(_b.next()), !_c.done;) {\n const listBlobsHierarchySegmentResponse = _c.value;\n const segment = listBlobsHierarchySegmentResponse.segment;\n if (segment.blobPrefixes) {\n for (const prefix of segment.blobPrefixes) {\n yield yield __await(Object.assign({\n kind: \"prefix\"\n }, prefix));\n }\n }\n for (const blob of segment.blobItems) {\n yield yield __await(Object.assign({\n kind: \"blob\"\n }, blob));\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) yield __await(_a.call(_b));\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n });\n }\n /**\n * Returns an async iterable iterator to list all the blobs by hierarchy.\n * under the specified account.\n *\n * .byPage() returns an async iterable iterator to list the blobs by hierarchy in pages.\n *\n * Example using `for await` syntax:\n *\n * ```js\n * for await (const item of containerClient.listBlobsByHierarchy(\"/\")) {\n * if (item.kind === \"prefix\") {\n * console.log(`\\tBlobPrefix: ${item.name}`);\n * } else {\n * console.log(`\\tBlobItem: name - ${item.name}`);\n * }\n * }\n * ```\n *\n * Example using `iter.next()`:\n *\n * ```js\n * let iter = containerClient.listBlobsByHierarchy(\"/\", { prefix: \"prefix1/\" });\n * let entity = await iter.next();\n * while (!entity.done) {\n * let item = entity.value;\n * if (item.kind === \"prefix\") {\n * console.log(`\\tBlobPrefix: ${item.name}`);\n * } else {\n * console.log(`\\tBlobItem: name - ${item.name}`);\n * }\n * entity = await iter.next();\n * }\n * ```\n *\n * Example using `byPage()`:\n *\n * ```js\n * console.log(\"Listing blobs by hierarchy by page\");\n * for await (const response of containerClient.listBlobsByHierarchy(\"/\").byPage()) {\n * const segment = response.segment;\n * if (segment.blobPrefixes) {\n * for (const prefix of segment.blobPrefixes) {\n * console.log(`\\tBlobPrefix: ${prefix.name}`);\n * }\n * }\n * for (const blob of response.segment.blobItems) {\n * console.log(`\\tBlobItem: name - ${blob.name}`);\n * }\n * }\n * ```\n *\n * Example using paging with a max page size:\n *\n * ```js\n * console.log(\"Listing blobs by hierarchy by page, specifying a prefix and a max page size\");\n *\n * let i = 1;\n * for await (const response of containerClient\n * .listBlobsByHierarchy(\"/\", { prefix: \"prefix2/sub1/\" })\n * .byPage({ maxPageSize: 2 })) {\n * console.log(`Page ${i++}`);\n * const segment = response.segment;\n *\n * if (segment.blobPrefixes) {\n * for (const prefix of segment.blobPrefixes) {\n * console.log(`\\tBlobPrefix: ${prefix.name}`);\n * }\n * }\n *\n * for (const blob of response.segment.blobItems) {\n * console.log(`\\tBlobItem: name - ${blob.name}`);\n * }\n * }\n * ```\n *\n * @param delimiter - The character or string used to define the virtual hierarchy\n * @param options - Options to list blobs operation.\n */\n listBlobsByHierarchy(delimiter, options = {}) {\n if (delimiter === \"\") {\n throw new RangeError(\"delimiter should contain one or more characters\");\n }\n const include = [];\n if (options.includeCopy) {\n include.push(\"copy\");\n }\n if (options.includeDeleted) {\n include.push(\"deleted\");\n }\n if (options.includeMetadata) {\n include.push(\"metadata\");\n }\n if (options.includeSnapshots) {\n include.push(\"snapshots\");\n }\n if (options.includeVersions) {\n include.push(\"versions\");\n }\n if (options.includeUncommitedBlobs) {\n include.push(\"uncommittedblobs\");\n }\n if (options.includeTags) {\n include.push(\"tags\");\n }\n if (options.includeDeletedWithVersions) {\n include.push(\"deletedwithversions\");\n }\n if (options.includeImmutabilityPolicy) {\n include.push(\"immutabilitypolicy\");\n }\n if (options.includeLegalHold) {\n include.push(\"legalhold\");\n }\n if (options.prefix === \"\") {\n options.prefix = undefined;\n }\n const updatedOptions = Object.assign(Object.assign({}, options), include.length > 0 ? {\n include: include\n } : {});\n // AsyncIterableIterator to iterate over blob prefixes and blobs\n const iter = this.listItemsByHierarchy(delimiter, updatedOptions);\n return {\n /**\n * The next method, part of the iteration protocol\n */\n async next() {\n return iter.next();\n },\n /**\n * The connection to the async iterator, part of the iteration protocol\n */\n [Symbol.asyncIterator]() {\n return this;\n },\n /**\n * Return an AsyncIterableIterator that works a page at a time\n */\n byPage: (settings = {}) => {\n return this.listHierarchySegments(delimiter, settings.continuationToken, Object.assign({\n maxPageSize: settings.maxPageSize\n }, updatedOptions));\n }\n };\n }\n /**\n * The Filter Blobs operation enables callers to list blobs in the container whose tags\n * match a given search expression.\n *\n * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.\n * The given expression must evaluate to true for a blob to be returned in the results.\n * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;\n * however, only a subset of the OData filter syntax is supported in the Blob service.\n * @param marker - A string value that identifies the portion of\n * the list of blobs to be returned with the next listing operation. The\n * operation returns the continuationToken value within the response body if the\n * listing operation did not return all blobs remaining to be listed\n * with the current page. The continuationToken value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of list\n * items. The marker value is opaque to the client.\n * @param options - Options to find blobs by tags.\n */\n async findBlobsByTagsSegment(tagFilterSqlExpression, marker, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"ContainerClient-findBlobsByTagsSegment\", options);\n try {\n const response = await this.containerContext.filterBlobs(Object.assign({\n abortSignal: options.abortSignal,\n where: tagFilterSqlExpression,\n marker,\n maxPageSize: options.maxPageSize\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n const wrappedResponse = Object.assign(Object.assign({}, response), {\n _response: response._response,\n blobs: response.blobs.map(blob => {\n var _a;\n let tagValue = \"\";\n if (((_a = blob.tags) === null || _a === void 0 ? void 0 : _a.blobTagSet.length) === 1) {\n tagValue = blob.tags.blobTagSet[0].value;\n }\n return Object.assign(Object.assign({}, blob), {\n tags: toTags(blob.tags),\n tagValue\n });\n })\n });\n return wrappedResponse;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns an AsyncIterableIterator for ContainerFindBlobsByTagsSegmentResponse.\n *\n * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.\n * The given expression must evaluate to true for a blob to be returned in the results.\n * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;\n * however, only a subset of the OData filter syntax is supported in the Blob service.\n * @param marker - A string value that identifies the portion of\n * the list of blobs to be returned with the next listing operation. The\n * operation returns the continuationToken value within the response body if the\n * listing operation did not return all blobs remaining to be listed\n * with the current page. The continuationToken value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of list\n * items. The marker value is opaque to the client.\n * @param options - Options to find blobs by tags.\n */\n findBlobsByTagsSegments(tagFilterSqlExpression, marker, options = {}) {\n return __asyncGenerator(this, arguments, function* findBlobsByTagsSegments_1() {\n let response;\n if (!!marker || marker === undefined) {\n do {\n response = yield __await(this.findBlobsByTagsSegment(tagFilterSqlExpression, marker, options));\n response.blobs = response.blobs || [];\n marker = response.continuationToken;\n yield yield __await(response);\n } while (marker);\n }\n });\n }\n /**\n * Returns an AsyncIterableIterator for blobs.\n *\n * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.\n * The given expression must evaluate to true for a blob to be returned in the results.\n * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;\n * however, only a subset of the OData filter syntax is supported in the Blob service.\n * @param options - Options to findBlobsByTagsItems.\n */\n findBlobsByTagsItems(tagFilterSqlExpression, options = {}) {\n return __asyncGenerator(this, arguments, function* findBlobsByTagsItems_1() {\n var e_3, _a;\n let marker;\n try {\n for (var _b = __asyncValues(this.findBlobsByTagsSegments(tagFilterSqlExpression, marker, options)), _c; _c = yield __await(_b.next()), !_c.done;) {\n const segment = _c.value;\n yield __await(yield* __asyncDelegator(__asyncValues(segment.blobs)));\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) yield __await(_a.call(_b));\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n });\n }\n /**\n * Returns an async iterable iterator to find all blobs with specified tag\n * under the specified container.\n *\n * .byPage() returns an async iterable iterator to list the blobs in pages.\n *\n * Example using `for await` syntax:\n *\n * ```js\n * let i = 1;\n * for await (const blob of containerClient.findBlobsByTags(\"tagkey='tagvalue'\")) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n * ```\n *\n * Example using `iter.next()`:\n *\n * ```js\n * let i = 1;\n * const iter = containerClient.findBlobsByTags(\"tagkey='tagvalue'\");\n * let blobItem = await iter.next();\n * while (!blobItem.done) {\n * console.log(`Blob ${i++}: ${blobItem.value.name}`);\n * blobItem = await iter.next();\n * }\n * ```\n *\n * Example using `byPage()`:\n *\n * ```js\n * // passing optional maxPageSize in the page settings\n * let i = 1;\n * for await (const response of containerClient.findBlobsByTags(\"tagkey='tagvalue'\").byPage({ maxPageSize: 20 })) {\n * if (response.blobs) {\n * for (const blob of response.blobs) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n * }\n * }\n * ```\n *\n * Example using paging with a marker:\n *\n * ```js\n * let i = 1;\n * let iterator = containerClient.findBlobsByTags(\"tagkey='tagvalue'\").byPage({ maxPageSize: 2 });\n * let response = (await iterator.next()).value;\n *\n * // Prints 2 blob names\n * if (response.blobs) {\n * for (const blob of response.blobs) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n * }\n *\n * // Gets next marker\n * let marker = response.continuationToken;\n * // Passing next marker as continuationToken\n * iterator = containerClient\n * .findBlobsByTags(\"tagkey='tagvalue'\")\n * .byPage({ continuationToken: marker, maxPageSize: 10 });\n * response = (await iterator.next()).value;\n *\n * // Prints blob names\n * if (response.blobs) {\n * for (const blob of response.blobs) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n * }\n * ```\n *\n * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.\n * The given expression must evaluate to true for a blob to be returned in the results.\n * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;\n * however, only a subset of the OData filter syntax is supported in the Blob service.\n * @param options - Options to find blobs by tags.\n */\n findBlobsByTags(tagFilterSqlExpression, options = {}) {\n // AsyncIterableIterator to iterate over blobs\n const listSegmentOptions = Object.assign({}, options);\n const iter = this.findBlobsByTagsItems(tagFilterSqlExpression, listSegmentOptions);\n return {\n /**\n * The next method, part of the iteration protocol\n */\n next() {\n return iter.next();\n },\n /**\n * The connection to the async iterator, part of the iteration protocol\n */\n [Symbol.asyncIterator]() {\n return this;\n },\n /**\n * Return an AsyncIterableIterator that works a page at a time\n */\n byPage: (settings = {}) => {\n return this.findBlobsByTagsSegments(tagFilterSqlExpression, settings.continuationToken, Object.assign({\n maxPageSize: settings.maxPageSize\n }, listSegmentOptions));\n }\n };\n }\n getContainerNameFromUrl() {\n let containerName;\n try {\n // URL may look like the following\n // \"https://myaccount.blob.core.windows.net/mycontainer?sasString\";\n // \"https://myaccount.blob.core.windows.net/mycontainer\";\n // IPv4/IPv6 address hosts, Endpoints - `http://127.0.0.1:10000/devstoreaccount1/containername`\n // http://localhost:10001/devstoreaccount1/containername\n const parsedUrl = URLBuilder.parse(this.url);\n if (parsedUrl.getHost().split(\".\")[1] === \"blob\") {\n // \"https://myaccount.blob.core.windows.net/containername\".\n // \"https://customdomain.com/containername\".\n // .getPath() -> /containername\n containerName = parsedUrl.getPath().split(\"/\")[1];\n } else if (isIpEndpointStyle(parsedUrl)) {\n // IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/containername\n // Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/containername\n // .getPath() -> /devstoreaccount1/containername\n containerName = parsedUrl.getPath().split(\"/\")[2];\n } else {\n // \"https://customdomain.com/containername\".\n // .getPath() -> /containername\n containerName = parsedUrl.getPath().split(\"/\")[1];\n }\n // decode the encoded containerName - to get all the special characters that might be present in it\n containerName = decodeURIComponent(containerName);\n if (!containerName) {\n throw new Error(\"Provided containerName is invalid.\");\n }\n return containerName;\n } catch (error) {\n throw new Error(\"Unable to extract containerName with provided information.\");\n }\n }\n /**\n * Only available for ContainerClient constructed with a shared key credential.\n *\n * Generates a Blob Container Service Shared Access Signature (SAS) URI based on the client properties\n * and parameters passed in. The SAS is signed by the shared key credential of the client.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas\n *\n * @param options - Optional parameters.\n * @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.\n */\n generateSasUrl(options) {\n return new Promise(resolve => {\n if (!(this.credential instanceof StorageSharedKeyCredential)) {\n throw new RangeError(\"Can only generate the SAS when the client is initialized with a shared key credential\");\n }\n const sas = generateBlobSASQueryParameters(Object.assign({\n containerName: this._containerName\n }, options), this.credential).toString();\n resolve(appendToURLQuery(this.url, sas));\n });\n }\n /**\n * Creates a BlobBatchClient object to conduct batch operations.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch\n *\n * @returns A new BlobBatchClient object for this container.\n */\n getBlobBatchClient() {\n return new BlobBatchClient(this.url, this.pipeline);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n *\n * This is a helper class to construct a string representing the permissions granted by an AccountSAS. Setting a value\n * to true means that any SAS which uses these permissions will grant permissions for that operation. Once all the\n * values are set, this should be serialized with toString and set as the permissions field on an\n * {@link AccountSASSignatureValues} object. It is possible to construct the permissions string without this class, but\n * the order of the permissions is particular and this class guarantees correctness.\n */\nexport class AccountSASPermissions {\n constructor() {\n /**\n * Permission to read resources and list queues and tables granted.\n */\n this.read = false;\n /**\n * Permission to write resources granted.\n */\n this.write = false;\n /**\n * Permission to create blobs and files granted.\n */\n this.delete = false;\n /**\n * Permission to delete versions granted.\n */\n this.deleteVersion = false;\n /**\n * Permission to list blob containers, blobs, shares, directories, and files granted.\n */\n this.list = false;\n /**\n * Permission to add messages, table entities, and append to blobs granted.\n */\n this.add = false;\n /**\n * Permission to create blobs and files granted.\n */\n this.create = false;\n /**\n * Permissions to update messages and table entities granted.\n */\n this.update = false;\n /**\n * Permission to get and delete messages granted.\n */\n this.process = false;\n /**\n * Specfies Tag access granted.\n */\n this.tag = false;\n /**\n * Permission to filter blobs.\n */\n this.filter = false;\n /**\n * Permission to set immutability policy.\n */\n this.setImmutabilityPolicy = false;\n /**\n * Specifies that Permanent Delete is permitted.\n */\n this.permanentDelete = false;\n }\n /**\n * Parse initializes the AccountSASPermissions fields from a string.\n *\n * @param permissions -\n */\n static parse(permissions) {\n const accountSASPermissions = new AccountSASPermissions();\n for (const c of permissions) {\n switch (c) {\n case \"r\":\n accountSASPermissions.read = true;\n break;\n case \"w\":\n accountSASPermissions.write = true;\n break;\n case \"d\":\n accountSASPermissions.delete = true;\n break;\n case \"x\":\n accountSASPermissions.deleteVersion = true;\n break;\n case \"l\":\n accountSASPermissions.list = true;\n break;\n case \"a\":\n accountSASPermissions.add = true;\n break;\n case \"c\":\n accountSASPermissions.create = true;\n break;\n case \"u\":\n accountSASPermissions.update = true;\n break;\n case \"p\":\n accountSASPermissions.process = true;\n break;\n case \"t\":\n accountSASPermissions.tag = true;\n break;\n case \"f\":\n accountSASPermissions.filter = true;\n break;\n case \"i\":\n accountSASPermissions.setImmutabilityPolicy = true;\n break;\n case \"y\":\n accountSASPermissions.permanentDelete = true;\n break;\n default:\n throw new RangeError(`Invalid permission character: ${c}`);\n }\n }\n return accountSASPermissions;\n }\n /**\n * Creates a {@link AccountSASPermissions} from a raw object which contains same keys as it\n * and boolean values for them.\n *\n * @param permissionLike -\n */\n static from(permissionLike) {\n const accountSASPermissions = new AccountSASPermissions();\n if (permissionLike.read) {\n accountSASPermissions.read = true;\n }\n if (permissionLike.write) {\n accountSASPermissions.write = true;\n }\n if (permissionLike.delete) {\n accountSASPermissions.delete = true;\n }\n if (permissionLike.deleteVersion) {\n accountSASPermissions.deleteVersion = true;\n }\n if (permissionLike.filter) {\n accountSASPermissions.filter = true;\n }\n if (permissionLike.tag) {\n accountSASPermissions.tag = true;\n }\n if (permissionLike.list) {\n accountSASPermissions.list = true;\n }\n if (permissionLike.add) {\n accountSASPermissions.add = true;\n }\n if (permissionLike.create) {\n accountSASPermissions.create = true;\n }\n if (permissionLike.update) {\n accountSASPermissions.update = true;\n }\n if (permissionLike.process) {\n accountSASPermissions.process = true;\n }\n if (permissionLike.setImmutabilityPolicy) {\n accountSASPermissions.setImmutabilityPolicy = true;\n }\n if (permissionLike.permanentDelete) {\n accountSASPermissions.permanentDelete = true;\n }\n return accountSASPermissions;\n }\n /**\n * Produces the SAS permissions string for an Azure Storage account.\n * Call this method to set AccountSASSignatureValues Permissions field.\n *\n * Using this method will guarantee the resource types are in\n * an order accepted by the service.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas\n *\n */\n toString() {\n // The order of the characters should be as specified here to ensure correctness:\n // https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas\n // Use a string array instead of string concatenating += operator for performance\n const permissions = [];\n if (this.read) {\n permissions.push(\"r\");\n }\n if (this.write) {\n permissions.push(\"w\");\n }\n if (this.delete) {\n permissions.push(\"d\");\n }\n if (this.deleteVersion) {\n permissions.push(\"x\");\n }\n if (this.filter) {\n permissions.push(\"f\");\n }\n if (this.tag) {\n permissions.push(\"t\");\n }\n if (this.list) {\n permissions.push(\"l\");\n }\n if (this.add) {\n permissions.push(\"a\");\n }\n if (this.create) {\n permissions.push(\"c\");\n }\n if (this.update) {\n permissions.push(\"u\");\n }\n if (this.process) {\n permissions.push(\"p\");\n }\n if (this.setImmutabilityPolicy) {\n permissions.push(\"i\");\n }\n if (this.permanentDelete) {\n permissions.push(\"y\");\n }\n return permissions.join(\"\");\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n *\n * This is a helper class to construct a string representing the resources accessible by an AccountSAS. Setting a value\n * to true means that any SAS which uses these permissions will grant access to that resource type. Once all the\n * values are set, this should be serialized with toString and set as the resources field on an\n * {@link AccountSASSignatureValues} object. It is possible to construct the resources string without this class, but\n * the order of the resources is particular and this class guarantees correctness.\n */\nexport class AccountSASResourceTypes {\n constructor() {\n /**\n * Permission to access service level APIs granted.\n */\n this.service = false;\n /**\n * Permission to access container level APIs (Blob Containers, Tables, Queues, File Shares) granted.\n */\n this.container = false;\n /**\n * Permission to access object level APIs (Blobs, Table Entities, Queue Messages, Files) granted.\n */\n this.object = false;\n }\n /**\n * Creates an {@link AccountSASResourceTypes} from the specified resource types string. This method will throw an\n * Error if it encounters a character that does not correspond to a valid resource type.\n *\n * @param resourceTypes -\n */\n static parse(resourceTypes) {\n const accountSASResourceTypes = new AccountSASResourceTypes();\n for (const c of resourceTypes) {\n switch (c) {\n case \"s\":\n accountSASResourceTypes.service = true;\n break;\n case \"c\":\n accountSASResourceTypes.container = true;\n break;\n case \"o\":\n accountSASResourceTypes.object = true;\n break;\n default:\n throw new RangeError(`Invalid resource type: ${c}`);\n }\n }\n return accountSASResourceTypes;\n }\n /**\n * Converts the given resource types to a string.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas\n *\n */\n toString() {\n const resourceTypes = [];\n if (this.service) {\n resourceTypes.push(\"s\");\n }\n if (this.container) {\n resourceTypes.push(\"c\");\n }\n if (this.object) {\n resourceTypes.push(\"o\");\n }\n return resourceTypes.join(\"\");\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n *\n * This is a helper class to construct a string representing the services accessible by an AccountSAS. Setting a value\n * to true means that any SAS which uses these permissions will grant access to that service. Once all the\n * values are set, this should be serialized with toString and set as the services field on an\n * {@link AccountSASSignatureValues} object. It is possible to construct the services string without this class, but\n * the order of the services is particular and this class guarantees correctness.\n */\nexport class AccountSASServices {\n constructor() {\n /**\n * Permission to access blob resources granted.\n */\n this.blob = false;\n /**\n * Permission to access file resources granted.\n */\n this.file = false;\n /**\n * Permission to access queue resources granted.\n */\n this.queue = false;\n /**\n * Permission to access table resources granted.\n */\n this.table = false;\n }\n /**\n * Creates an {@link AccountSASServices} from the specified services string. This method will throw an\n * Error if it encounters a character that does not correspond to a valid service.\n *\n * @param services -\n */\n static parse(services) {\n const accountSASServices = new AccountSASServices();\n for (const c of services) {\n switch (c) {\n case \"b\":\n accountSASServices.blob = true;\n break;\n case \"f\":\n accountSASServices.file = true;\n break;\n case \"q\":\n accountSASServices.queue = true;\n break;\n case \"t\":\n accountSASServices.table = true;\n break;\n default:\n throw new RangeError(`Invalid service character: ${c}`);\n }\n }\n return accountSASServices;\n }\n /**\n * Converts the given services to a string.\n *\n */\n toString() {\n const services = [];\n if (this.blob) {\n services.push(\"b\");\n }\n if (this.table) {\n services.push(\"t\");\n }\n if (this.queue) {\n services.push(\"q\");\n }\n if (this.file) {\n services.push(\"f\");\n }\n return services.join(\"\");\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { AccountSASPermissions } from \"./AccountSASPermissions\";\nimport { AccountSASResourceTypes } from \"./AccountSASResourceTypes\";\nimport { AccountSASServices } from \"./AccountSASServices\";\nimport { ipRangeToString } from \"./SasIPRange\";\nimport { SASQueryParameters } from \"./SASQueryParameters\";\nimport { SERVICE_VERSION } from \"../utils/constants\";\nimport { truncatedISO8061Date } from \"../utils/utils.common\";\n/**\n * ONLY AVAILABLE IN NODE.JS RUNTIME.\n *\n * Generates a {@link SASQueryParameters} object which contains all SAS query parameters needed to make an actual\n * REST request.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas\n *\n * @param accountSASSignatureValues -\n * @param sharedKeyCredential -\n */\nexport function generateAccountSASQueryParameters(accountSASSignatureValues, sharedKeyCredential) {\n const version = accountSASSignatureValues.version ? accountSASSignatureValues.version : SERVICE_VERSION;\n if (accountSASSignatureValues.permissions && accountSASSignatureValues.permissions.setImmutabilityPolicy && version < \"2020-08-04\") {\n throw RangeError(\"'version' must be >= '2020-08-04' when provided 'i' permission.\");\n }\n if (accountSASSignatureValues.permissions && accountSASSignatureValues.permissions.deleteVersion && version < \"2019-10-10\") {\n throw RangeError(\"'version' must be >= '2019-10-10' when provided 'x' permission.\");\n }\n if (accountSASSignatureValues.permissions && accountSASSignatureValues.permissions.permanentDelete && version < \"2019-10-10\") {\n throw RangeError(\"'version' must be >= '2019-10-10' when provided 'y' permission.\");\n }\n if (accountSASSignatureValues.permissions && accountSASSignatureValues.permissions.tag && version < \"2019-12-12\") {\n throw RangeError(\"'version' must be >= '2019-12-12' when provided 't' permission.\");\n }\n if (accountSASSignatureValues.permissions && accountSASSignatureValues.permissions.filter && version < \"2019-12-12\") {\n throw RangeError(\"'version' must be >= '2019-12-12' when provided 'f' permission.\");\n }\n if (accountSASSignatureValues.encryptionScope && version < \"2020-12-06\") {\n throw RangeError(\"'version' must be >= '2020-12-06' when provided 'encryptionScope' in SAS.\");\n }\n const parsedPermissions = AccountSASPermissions.parse(accountSASSignatureValues.permissions.toString());\n const parsedServices = AccountSASServices.parse(accountSASSignatureValues.services).toString();\n const parsedResourceTypes = AccountSASResourceTypes.parse(accountSASSignatureValues.resourceTypes).toString();\n let stringToSign;\n if (version >= \"2020-12-06\") {\n stringToSign = [sharedKeyCredential.accountName, parsedPermissions, parsedServices, parsedResourceTypes, accountSASSignatureValues.startsOn ? truncatedISO8061Date(accountSASSignatureValues.startsOn, false) : \"\", truncatedISO8061Date(accountSASSignatureValues.expiresOn, false), accountSASSignatureValues.ipRange ? ipRangeToString(accountSASSignatureValues.ipRange) : \"\", accountSASSignatureValues.protocol ? accountSASSignatureValues.protocol : \"\", version, accountSASSignatureValues.encryptionScope ? accountSASSignatureValues.encryptionScope : \"\", \"\" // Account SAS requires an additional newline character\n ].join(\"\\n\");\n } else {\n stringToSign = [sharedKeyCredential.accountName, parsedPermissions, parsedServices, parsedResourceTypes, accountSASSignatureValues.startsOn ? truncatedISO8061Date(accountSASSignatureValues.startsOn, false) : \"\", truncatedISO8061Date(accountSASSignatureValues.expiresOn, false), accountSASSignatureValues.ipRange ? ipRangeToString(accountSASSignatureValues.ipRange) : \"\", accountSASSignatureValues.protocol ? accountSASSignatureValues.protocol : \"\", version, \"\" // Account SAS requires an additional newline character\n ].join(\"\\n\");\n }\n const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);\n return new SASQueryParameters(version, signature, parsedPermissions.toString(), parsedServices, parsedResourceTypes, accountSASSignatureValues.protocol, accountSASSignatureValues.startsOn, accountSASSignatureValues.expiresOn, accountSASSignatureValues.ipRange, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, accountSASSignatureValues.encryptionScope);\n}\n","import { __asyncDelegator, __asyncGenerator, __asyncValues, __await } from \"tslib\";\n// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { isTokenCredential, isNode, getDefaultProxySettings } from \"@azure/core-http\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { Container, Service } from \"./generated/src/operations\";\nimport { newPipeline, isPipelineLike } from \"./Pipeline\";\nimport { ContainerClient } from \"./ContainerClient\";\nimport { appendToURLPath, appendToURLQuery, extractConnectionStringParts, toTags } from \"./utils/utils.common\";\nimport { StorageSharedKeyCredential } from \"./credentials/StorageSharedKeyCredential\";\nimport { AnonymousCredential } from \"./credentials/AnonymousCredential\";\nimport \"@azure/core-paging\";\nimport { truncatedISO8061Date } from \"./utils/utils.common\";\nimport { convertTracingToRequestOptionsBase, createSpan } from \"./utils/tracing\";\nimport { BlobBatchClient } from \"./BlobBatchClient\";\nimport { StorageClient } from \"./StorageClient\";\nimport { AccountSASPermissions } from \"./sas/AccountSASPermissions\";\nimport { generateAccountSASQueryParameters } from \"./sas/AccountSASSignatureValues\";\nimport { AccountSASServices } from \"./sas/AccountSASServices\";\n/**\n * A BlobServiceClient represents a Client to the Azure Storage Blob service allowing you\n * to manipulate blob containers.\n */\nexport class BlobServiceClient extends StorageClient {\n constructor(url, credentialOrPipeline,\n // Legacy, no fix for eslint error without breaking. Disable it for this interface.\n /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/\n options) {\n let pipeline;\n if (isPipelineLike(credentialOrPipeline)) {\n pipeline = credentialOrPipeline;\n } else if (isNode && credentialOrPipeline instanceof StorageSharedKeyCredential || credentialOrPipeline instanceof AnonymousCredential || isTokenCredential(credentialOrPipeline)) {\n pipeline = newPipeline(credentialOrPipeline, options);\n } else {\n // The second parameter is undefined. Use anonymous credential\n pipeline = newPipeline(new AnonymousCredential(), options);\n }\n super(url, pipeline);\n this.serviceContext = new Service(this.storageClientContext);\n }\n /**\n *\n * Creates an instance of BlobServiceClient from connection string.\n *\n * @param connectionString - Account connection string or a SAS connection string of an Azure storage account.\n * [ Note - Account connection string can only be used in NODE.JS runtime. ]\n * Account connection string example -\n * `DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=accountKey;EndpointSuffix=core.windows.net`\n * SAS connection string example -\n * `BlobEndpoint=https://myaccount.blob.core.windows.net/;QueueEndpoint=https://myaccount.queue.core.windows.net/;FileEndpoint=https://myaccount.file.core.windows.net/;TableEndpoint=https://myaccount.table.core.windows.net/;SharedAccessSignature=sasString`\n * @param options - Optional. Options to configure the HTTP pipeline.\n */\n static fromConnectionString(connectionString,\n // Legacy, no fix for eslint error without breaking. Disable it for this interface.\n /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/\n options) {\n options = options || {};\n const extractedCreds = extractConnectionStringParts(connectionString);\n if (extractedCreds.kind === \"AccountConnString\") {\n if (isNode) {\n const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);\n if (!options.proxyOptions) {\n options.proxyOptions = getDefaultProxySettings(extractedCreds.proxyUri);\n }\n const pipeline = newPipeline(sharedKeyCredential, options);\n return new BlobServiceClient(extractedCreds.url, pipeline);\n } else {\n throw new Error(\"Account connection string is only supported in Node.js environment\");\n }\n } else if (extractedCreds.kind === \"SASConnString\") {\n const pipeline = newPipeline(new AnonymousCredential(), options);\n return new BlobServiceClient(extractedCreds.url + \"?\" + extractedCreds.accountSas, pipeline);\n } else {\n throw new Error(\"Connection string must be either an Account connection string or a SAS connection string\");\n }\n }\n /**\n * Creates a {@link ContainerClient} object\n *\n * @param containerName - A container name\n * @returns A new ContainerClient object for the given container name.\n *\n * Example usage:\n *\n * ```js\n * const containerClient = blobServiceClient.getContainerClient(\"\");\n * ```\n */\n getContainerClient(containerName) {\n return new ContainerClient(appendToURLPath(this.url, encodeURIComponent(containerName)), this.pipeline);\n }\n /**\n * Create a Blob container. @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-container\n *\n * @param containerName - Name of the container to create.\n * @param options - Options to configure Container Create operation.\n * @returns Container creation response and the corresponding container client.\n */\n async createContainer(containerName, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-createContainer\", options);\n try {\n const containerClient = this.getContainerClient(containerName);\n const containerCreateResponse = await containerClient.create(updatedOptions);\n return {\n containerClient,\n containerCreateResponse\n };\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Deletes a Blob container.\n *\n * @param containerName - Name of the container to delete.\n * @param options - Options to configure Container Delete operation.\n * @returns Container deletion response.\n */\n async deleteContainer(containerName, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-deleteContainer\", options);\n try {\n const containerClient = this.getContainerClient(containerName);\n return await containerClient.delete(updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Restore a previously deleted Blob container.\n * This API is only functional if Container Soft Delete is enabled for the storage account associated with the container.\n *\n * @param deletedContainerName - Name of the previously deleted container.\n * @param deletedContainerVersion - Version of the previously deleted container, used to uniquely identify the deleted container.\n * @param options - Options to configure Container Restore operation.\n * @returns Container deletion response.\n */\n async undeleteContainer(deletedContainerName, deletedContainerVersion, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-undeleteContainer\", options);\n try {\n const containerClient = this.getContainerClient(options.destinationContainerName || deletedContainerName);\n // Hack to access a protected member.\n const containerContext = new Container(containerClient[\"storageClientContext\"]);\n const containerUndeleteResponse = await containerContext.restore(Object.assign({\n deletedContainerName,\n deletedContainerVersion\n }, updatedOptions));\n return {\n containerClient,\n containerUndeleteResponse\n };\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Rename an existing Blob Container.\n *\n * @param sourceContainerName - The name of the source container.\n * @param destinationContainerName - The new name of the container.\n * @param options - Options to configure Container Rename operation.\n */\n /* eslint-disable-next-line @typescript-eslint/ban-ts-comment */\n // @ts-ignore Need to hide this interface for now. Make it public and turn on the live tests for it when the service is ready.\n async renameContainer(sourceContainerName, destinationContainerName, options = {}) {\n var _a;\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-renameContainer\", options);\n try {\n const containerClient = this.getContainerClient(destinationContainerName);\n // Hack to access a protected member.\n const containerContext = new Container(containerClient[\"storageClientContext\"]);\n const containerRenameResponse = await containerContext.rename(sourceContainerName, Object.assign(Object.assign({}, updatedOptions), {\n sourceLeaseId: (_a = options.sourceCondition) === null || _a === void 0 ? void 0 : _a.leaseId\n }));\n return {\n containerClient,\n containerRenameResponse\n };\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Gets the properties of a storage account’s Blob service, including properties\n * for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-properties\n *\n * @param options - Options to the Service Get Properties operation.\n * @returns Response data for the Service Get Properties operation.\n */\n async getProperties(options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-getProperties\", options);\n try {\n return await this.serviceContext.getProperties(Object.assign({\n abortSignal: options.abortSignal\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Sets properties for a storage account’s Blob service endpoint, including properties\n * for Storage Analytics, CORS (Cross-Origin Resource Sharing) rules and soft delete settings.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-service-properties\n *\n * @param properties -\n * @param options - Options to the Service Set Properties operation.\n * @returns Response data for the Service Set Properties operation.\n */\n async setProperties(properties, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-setProperties\", options);\n try {\n return await this.serviceContext.setProperties(properties, Object.assign({\n abortSignal: options.abortSignal\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Retrieves statistics related to replication for the Blob service. It is only\n * available on the secondary location endpoint when read-access geo-redundant\n * replication is enabled for the storage account.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-stats\n *\n * @param options - Options to the Service Get Statistics operation.\n * @returns Response data for the Service Get Statistics operation.\n */\n async getStatistics(options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-getStatistics\", options);\n try {\n return await this.serviceContext.getStatistics(Object.assign({\n abortSignal: options.abortSignal\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * The Get Account Information operation returns the sku name and account kind\n * for the specified account.\n * The Get Account Information operation is available on service versions beginning\n * with version 2018-03-28.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-account-information\n *\n * @param options - Options to the Service Get Account Info operation.\n * @returns Response data for the Service Get Account Info operation.\n */\n async getAccountInfo(options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-getAccountInfo\", options);\n try {\n return await this.serviceContext.getAccountInfo(Object.assign({\n abortSignal: options.abortSignal\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns a list of the containers under the specified account.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/list-containers2\n *\n * @param marker - A string value that identifies the portion of\n * the list of containers to be returned with the next listing operation. The\n * operation returns the continuationToken value within the response body if the\n * listing operation did not return all containers remaining to be listed\n * with the current page. The continuationToken value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of list\n * items. The marker value is opaque to the client.\n * @param options - Options to the Service List Container Segment operation.\n * @returns Response data for the Service List Container Segment operation.\n */\n async listContainersSegment(marker, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-listContainersSegment\", options);\n try {\n return await this.serviceContext.listContainersSegment(Object.assign(Object.assign(Object.assign({\n abortSignal: options.abortSignal,\n marker\n }, options), {\n include: typeof options.include === \"string\" ? [options.include] : options.include\n }), convertTracingToRequestOptionsBase(updatedOptions)));\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * The Filter Blobs operation enables callers to list blobs across all containers whose tags\n * match a given search expression. Filter blobs searches across all containers within a\n * storage account but can be scoped within the expression to a single container.\n *\n * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.\n * The given expression must evaluate to true for a blob to be returned in the results.\n * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;\n * however, only a subset of the OData filter syntax is supported in the Blob service.\n * @param marker - A string value that identifies the portion of\n * the list of blobs to be returned with the next listing operation. The\n * operation returns the continuationToken value within the response body if the\n * listing operation did not return all blobs remaining to be listed\n * with the current page. The continuationToken value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of list\n * items. The marker value is opaque to the client.\n * @param options - Options to find blobs by tags.\n */\n async findBlobsByTagsSegment(tagFilterSqlExpression, marker, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-findBlobsByTagsSegment\", options);\n try {\n const response = await this.serviceContext.filterBlobs(Object.assign({\n abortSignal: options.abortSignal,\n where: tagFilterSqlExpression,\n marker,\n maxPageSize: options.maxPageSize\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n const wrappedResponse = Object.assign(Object.assign({}, response), {\n _response: response._response,\n blobs: response.blobs.map(blob => {\n var _a;\n let tagValue = \"\";\n if (((_a = blob.tags) === null || _a === void 0 ? void 0 : _a.blobTagSet.length) === 1) {\n tagValue = blob.tags.blobTagSet[0].value;\n }\n return Object.assign(Object.assign({}, blob), {\n tags: toTags(blob.tags),\n tagValue\n });\n })\n });\n return wrappedResponse;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Returns an AsyncIterableIterator for ServiceFindBlobsByTagsSegmentResponse.\n *\n * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.\n * The given expression must evaluate to true for a blob to be returned in the results.\n * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;\n * however, only a subset of the OData filter syntax is supported in the Blob service.\n * @param marker - A string value that identifies the portion of\n * the list of blobs to be returned with the next listing operation. The\n * operation returns the continuationToken value within the response body if the\n * listing operation did not return all blobs remaining to be listed\n * with the current page. The continuationToken value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of list\n * items. The marker value is opaque to the client.\n * @param options - Options to find blobs by tags.\n */\n findBlobsByTagsSegments(tagFilterSqlExpression, marker, options = {}) {\n return __asyncGenerator(this, arguments, function* findBlobsByTagsSegments_1() {\n let response;\n if (!!marker || marker === undefined) {\n do {\n response = yield __await(this.findBlobsByTagsSegment(tagFilterSqlExpression, marker, options));\n response.blobs = response.blobs || [];\n marker = response.continuationToken;\n yield yield __await(response);\n } while (marker);\n }\n });\n }\n /**\n * Returns an AsyncIterableIterator for blobs.\n *\n * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.\n * The given expression must evaluate to true for a blob to be returned in the results.\n * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;\n * however, only a subset of the OData filter syntax is supported in the Blob service.\n * @param options - Options to findBlobsByTagsItems.\n */\n findBlobsByTagsItems(tagFilterSqlExpression, options = {}) {\n return __asyncGenerator(this, arguments, function* findBlobsByTagsItems_1() {\n var e_1, _a;\n let marker;\n try {\n for (var _b = __asyncValues(this.findBlobsByTagsSegments(tagFilterSqlExpression, marker, options)), _c; _c = yield __await(_b.next()), !_c.done;) {\n const segment = _c.value;\n yield __await(yield* __asyncDelegator(__asyncValues(segment.blobs)));\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) yield __await(_a.call(_b));\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n });\n }\n /**\n * Returns an async iterable iterator to find all blobs with specified tag\n * under the specified account.\n *\n * .byPage() returns an async iterable iterator to list the blobs in pages.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-properties\n *\n * Example using `for await` syntax:\n *\n * ```js\n * let i = 1;\n * for await (const blob of blobServiceClient.findBlobsByTags(\"tagkey='tagvalue'\")) {\n * console.log(`Blob ${i++}: ${container.name}`);\n * }\n * ```\n *\n * Example using `iter.next()`:\n *\n * ```js\n * let i = 1;\n * const iter = blobServiceClient.findBlobsByTags(\"tagkey='tagvalue'\");\n * let blobItem = await iter.next();\n * while (!blobItem.done) {\n * console.log(`Blob ${i++}: ${blobItem.value.name}`);\n * blobItem = await iter.next();\n * }\n * ```\n *\n * Example using `byPage()`:\n *\n * ```js\n * // passing optional maxPageSize in the page settings\n * let i = 1;\n * for await (const response of blobServiceClient.findBlobsByTags(\"tagkey='tagvalue'\").byPage({ maxPageSize: 20 })) {\n * if (response.blobs) {\n * for (const blob of response.blobs) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n * }\n * }\n * ```\n *\n * Example using paging with a marker:\n *\n * ```js\n * let i = 1;\n * let iterator = blobServiceClient.findBlobsByTags(\"tagkey='tagvalue'\").byPage({ maxPageSize: 2 });\n * let response = (await iterator.next()).value;\n *\n * // Prints 2 blob names\n * if (response.blobs) {\n * for (const blob of response.blobs) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n * }\n *\n * // Gets next marker\n * let marker = response.continuationToken;\n * // Passing next marker as continuationToken\n * iterator = blobServiceClient\n * .findBlobsByTags(\"tagkey='tagvalue'\")\n * .byPage({ continuationToken: marker, maxPageSize: 10 });\n * response = (await iterator.next()).value;\n *\n * // Prints blob names\n * if (response.blobs) {\n * for (const blob of response.blobs) {\n * console.log(`Blob ${i++}: ${blob.name}`);\n * }\n * }\n * ```\n *\n * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.\n * The given expression must evaluate to true for a blob to be returned in the results.\n * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;\n * however, only a subset of the OData filter syntax is supported in the Blob service.\n * @param options - Options to find blobs by tags.\n */\n findBlobsByTags(tagFilterSqlExpression, options = {}) {\n // AsyncIterableIterator to iterate over blobs\n const listSegmentOptions = Object.assign({}, options);\n const iter = this.findBlobsByTagsItems(tagFilterSqlExpression, listSegmentOptions);\n return {\n /**\n * The next method, part of the iteration protocol\n */\n next() {\n return iter.next();\n },\n /**\n * The connection to the async iterator, part of the iteration protocol\n */\n [Symbol.asyncIterator]() {\n return this;\n },\n /**\n * Return an AsyncIterableIterator that works a page at a time\n */\n byPage: (settings = {}) => {\n return this.findBlobsByTagsSegments(tagFilterSqlExpression, settings.continuationToken, Object.assign({\n maxPageSize: settings.maxPageSize\n }, listSegmentOptions));\n }\n };\n }\n /**\n * Returns an AsyncIterableIterator for ServiceListContainersSegmentResponses\n *\n * @param marker - A string value that identifies the portion of\n * the list of containers to be returned with the next listing operation. The\n * operation returns the continuationToken value within the response body if the\n * listing operation did not return all containers remaining to be listed\n * with the current page. The continuationToken value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of list\n * items. The marker value is opaque to the client.\n * @param options - Options to list containers operation.\n */\n listSegments(marker, options = {}) {\n return __asyncGenerator(this, arguments, function* listSegments_1() {\n let listContainersSegmentResponse;\n if (!!marker || marker === undefined) {\n do {\n listContainersSegmentResponse = yield __await(this.listContainersSegment(marker, options));\n listContainersSegmentResponse.containerItems = listContainersSegmentResponse.containerItems || [];\n marker = listContainersSegmentResponse.continuationToken;\n yield yield __await(yield __await(listContainersSegmentResponse));\n } while (marker);\n }\n });\n }\n /**\n * Returns an AsyncIterableIterator for Container Items\n *\n * @param options - Options to list containers operation.\n */\n listItems(options = {}) {\n return __asyncGenerator(this, arguments, function* listItems_1() {\n var e_2, _a;\n let marker;\n try {\n for (var _b = __asyncValues(this.listSegments(marker, options)), _c; _c = yield __await(_b.next()), !_c.done;) {\n const segment = _c.value;\n yield __await(yield* __asyncDelegator(__asyncValues(segment.containerItems)));\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) yield __await(_a.call(_b));\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n });\n }\n /**\n * Returns an async iterable iterator to list all the containers\n * under the specified account.\n *\n * .byPage() returns an async iterable iterator to list the containers in pages.\n *\n * Example using `for await` syntax:\n *\n * ```js\n * let i = 1;\n * for await (const container of blobServiceClient.listContainers()) {\n * console.log(`Container ${i++}: ${container.name}`);\n * }\n * ```\n *\n * Example using `iter.next()`:\n *\n * ```js\n * let i = 1;\n * const iter = blobServiceClient.listContainers();\n * let containerItem = await iter.next();\n * while (!containerItem.done) {\n * console.log(`Container ${i++}: ${containerItem.value.name}`);\n * containerItem = await iter.next();\n * }\n * ```\n *\n * Example using `byPage()`:\n *\n * ```js\n * // passing optional maxPageSize in the page settings\n * let i = 1;\n * for await (const response of blobServiceClient.listContainers().byPage({ maxPageSize: 20 })) {\n * if (response.containerItems) {\n * for (const container of response.containerItems) {\n * console.log(`Container ${i++}: ${container.name}`);\n * }\n * }\n * }\n * ```\n *\n * Example using paging with a marker:\n *\n * ```js\n * let i = 1;\n * let iterator = blobServiceClient.listContainers().byPage({ maxPageSize: 2 });\n * let response = (await iterator.next()).value;\n *\n * // Prints 2 container names\n * if (response.containerItems) {\n * for (const container of response.containerItems) {\n * console.log(`Container ${i++}: ${container.name}`);\n * }\n * }\n *\n * // Gets next marker\n * let marker = response.continuationToken;\n * // Passing next marker as continuationToken\n * iterator = blobServiceClient\n * .listContainers()\n * .byPage({ continuationToken: marker, maxPageSize: 10 });\n * response = (await iterator.next()).value;\n *\n * // Prints 10 container names\n * if (response.containerItems) {\n * for (const container of response.containerItems) {\n * console.log(`Container ${i++}: ${container.name}`);\n * }\n * }\n * ```\n *\n * @param options - Options to list containers.\n * @returns An asyncIterableIterator that supports paging.\n */\n listContainers(options = {}) {\n if (options.prefix === \"\") {\n options.prefix = undefined;\n }\n const include = [];\n if (options.includeDeleted) {\n include.push(\"deleted\");\n }\n if (options.includeMetadata) {\n include.push(\"metadata\");\n }\n if (options.includeSystem) {\n include.push(\"system\");\n }\n // AsyncIterableIterator to iterate over containers\n const listSegmentOptions = Object.assign(Object.assign({}, options), include.length > 0 ? {\n include\n } : {});\n const iter = this.listItems(listSegmentOptions);\n return {\n /**\n * The next method, part of the iteration protocol\n */\n next() {\n return iter.next();\n },\n /**\n * The connection to the async iterator, part of the iteration protocol\n */\n [Symbol.asyncIterator]() {\n return this;\n },\n /**\n * Return an AsyncIterableIterator that works a page at a time\n */\n byPage: (settings = {}) => {\n return this.listSegments(settings.continuationToken, Object.assign({\n maxPageSize: settings.maxPageSize\n }, listSegmentOptions));\n }\n };\n }\n /**\n * ONLY AVAILABLE WHEN USING BEARER TOKEN AUTHENTICATION (TokenCredential).\n *\n * Retrieves a user delegation key for the Blob service. This is only a valid operation when using\n * bearer token authentication.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-user-delegation-key\n *\n * @param startsOn - The start time for the user delegation SAS. Must be within 7 days of the current time\n * @param expiresOn - The end time for the user delegation SAS. Must be within 7 days of the current time\n */\n async getUserDelegationKey(startsOn, expiresOn, options = {}) {\n const {\n span,\n updatedOptions\n } = createSpan(\"BlobServiceClient-getUserDelegationKey\", options);\n try {\n const response = await this.serviceContext.getUserDelegationKey({\n startsOn: truncatedISO8061Date(startsOn, false),\n expiresOn: truncatedISO8061Date(expiresOn, false)\n }, Object.assign({\n abortSignal: options.abortSignal\n }, convertTracingToRequestOptionsBase(updatedOptions)));\n const userDelegationKey = {\n signedObjectId: response.signedObjectId,\n signedTenantId: response.signedTenantId,\n signedStartsOn: new Date(response.signedStartsOn),\n signedExpiresOn: new Date(response.signedExpiresOn),\n signedService: response.signedService,\n signedVersion: response.signedVersion,\n value: response.value\n };\n const res = Object.assign({\n _response: response._response,\n requestId: response.requestId,\n clientRequestId: response.clientRequestId,\n version: response.version,\n date: response.date,\n errorCode: response.errorCode\n }, userDelegationKey);\n return res;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n /**\n * Creates a BlobBatchClient object to conduct batch operations.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch\n *\n * @returns A new BlobBatchClient object for this service.\n */\n getBlobBatchClient() {\n return new BlobBatchClient(this.url, this.pipeline);\n }\n /**\n * Only available for BlobServiceClient constructed with a shared key credential.\n *\n * Generates a Blob account Shared Access Signature (SAS) URI based on the client properties\n * and parameters passed in. The SAS is signed by the shared key credential of the client.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-account-sas\n *\n * @param expiresOn - Optional. The time at which the shared access signature becomes invalid. Default to an hour later if not provided.\n * @param permissions - Specifies the list of permissions to be associated with the SAS.\n * @param resourceTypes - Specifies the resource types associated with the shared access signature.\n * @param options - Optional parameters.\n * @returns An account SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.\n */\n generateAccountSasUrl(expiresOn, permissions = AccountSASPermissions.parse(\"r\"), resourceTypes = \"sco\", options = {}) {\n if (!(this.credential instanceof StorageSharedKeyCredential)) {\n throw RangeError(\"Can only generate the account SAS when the client is initialized with a shared key credential\");\n }\n if (expiresOn === undefined) {\n const now = new Date();\n expiresOn = new Date(now.getTime() + 3600 * 1000);\n }\n const sas = generateAccountSASQueryParameters(Object.assign({\n permissions,\n expiresOn,\n resourceTypes,\n services: AccountSASServices.parse(\"b\").toString()\n }, options), this.credential).toString();\n return appendToURLQuery(this.url, sas);\n }\n}\n","\"stream\" in Blob.prototype || Object.defineProperty(Blob.prototype, \"stream\", {\n value() {\n return new Response(this).body;\n }\n}), \"setBigUint64\" in DataView.prototype || Object.defineProperty(DataView.prototype, \"setBigUint64\", {\n value(e, n, t) {\n const i = Number(0xffffffffn & n),\n r = Number(n >> 32n);\n this.setUint32(e + (t ? 0 : 4), i, t), this.setUint32(e + (t ? 4 : 0), r, t);\n }\n});\nvar e = e => new DataView(new ArrayBuffer(e)),\n n = e => new Uint8Array(e.buffer || e),\n t = e => new TextEncoder().encode(String(e)),\n i = e => Math.min(4294967295, Number(e)),\n r = e => Math.min(65535, Number(e));\nfunction f(e, i) {\n if (void 0 === i || i instanceof Date || (i = new Date(i)), e instanceof File) return {\n isFile: 1,\n t: i || new Date(e.lastModified),\n i: e.stream()\n };\n if (e instanceof Response) return {\n isFile: 1,\n t: i || new Date(e.headers.get(\"Last-Modified\") || Date.now()),\n i: e.body\n };\n if (void 0 === i) i = new Date();else if (isNaN(i)) throw new Error(\"Invalid modification date.\");\n if (void 0 === e) return {\n isFile: 0,\n t: i\n };\n if (\"string\" == typeof e) return {\n isFile: 1,\n t: i,\n i: t(e)\n };\n if (e instanceof Blob) return {\n isFile: 1,\n t: i,\n i: e.stream()\n };\n if (e instanceof Uint8Array || e instanceof ReadableStream) return {\n isFile: 1,\n t: i,\n i: e\n };\n if (e instanceof ArrayBuffer || ArrayBuffer.isView(e)) return {\n isFile: 1,\n t: i,\n i: n(e)\n };\n if (Symbol.asyncIterator in e) return {\n isFile: 1,\n t: i,\n i: o(e[Symbol.asyncIterator]())\n };\n throw new TypeError(\"Unsupported input format.\");\n}\nfunction o(e, n = e) {\n return new ReadableStream({\n async pull(n) {\n let t = 0;\n for (; n.desiredSize > t;) {\n const i = await e.next();\n if (!i.value) {\n n.close();\n break;\n }\n {\n const e = a(i.value);\n n.enqueue(e), t += e.byteLength;\n }\n }\n },\n cancel(e) {\n n.throw?.(e);\n }\n });\n}\nfunction a(e) {\n return \"string\" == typeof e ? t(e) : e instanceof Uint8Array ? e : n(e);\n}\nfunction s(e, i, r) {\n let [f, o] = function (e) {\n return e ? e instanceof Uint8Array ? [e, 1] : ArrayBuffer.isView(e) || e instanceof ArrayBuffer ? [n(e), 1] : [t(e), 0] : [void 0, 0];\n }(i);\n if (e instanceof File) return {\n o: d(f || t(e.name)),\n u: BigInt(e.size),\n l: o\n };\n if (e instanceof Response) {\n const n = e.headers.get(\"content-disposition\"),\n i = n && n.match(/;\\s*filename\\*?=[\"']?(.*?)[\"']?$/i),\n a = i && i[1] || e.url && new URL(e.url).pathname.split(\"/\").findLast(Boolean),\n s = a && decodeURIComponent(a),\n u = r || +e.headers.get(\"content-length\");\n return {\n o: d(f || t(s)),\n u: BigInt(u),\n l: o\n };\n }\n return f = d(f, void 0 !== e || void 0 !== r), \"string\" == typeof e ? {\n o: f,\n u: BigInt(t(e).length),\n l: o\n } : e instanceof Blob ? {\n o: f,\n u: BigInt(e.size),\n l: o\n } : e instanceof ArrayBuffer || ArrayBuffer.isView(e) ? {\n o: f,\n u: BigInt(e.byteLength),\n l: o\n } : {\n o: f,\n u: u(e, r),\n l: o\n };\n}\nfunction u(e, n) {\n return n > -1 ? BigInt(n) : e ? void 0 : 0n;\n}\nfunction d(e, n = 1) {\n if (!e || e.every(c => 47 === c)) throw new Error(\"The file must have a name.\");\n if (n) for (; 47 === e[e.length - 1];) e = e.subarray(0, -1);else 47 !== e[e.length - 1] && (e = new Uint8Array([...e, 47]));\n return e;\n}\nvar l = new Uint32Array(256);\nfor (let e = 0; e < 256; ++e) {\n let n = e;\n for (let e = 0; e < 8; ++e) n = n >>> 1 ^ (1 & n && 3988292384);\n l[e] = n;\n}\nfunction y(e, n = 0) {\n n ^= -1;\n for (var t = 0, i = e.length; t < i; t++) n = n >>> 8 ^ l[255 & n ^ e[t]];\n return (-1 ^ n) >>> 0;\n}\nfunction B(e, n, t = 0) {\n const i = e.getSeconds() >> 1 | e.getMinutes() << 5 | e.getHours() << 11,\n r = e.getDate() | e.getMonth() + 1 << 5 | e.getFullYear() - 1980 << 9;\n n.setUint16(t, i, 1), n.setUint16(t + 2, r, 1);\n}\nfunction w({\n o: e,\n l: n\n}, t) {\n return 8 * (!n || (t ?? function (e) {\n try {\n b.decode(e);\n } catch {\n return 0;\n }\n return 1;\n }(e)));\n}\nvar b = new TextDecoder(\"utf8\", {\n fatal: 1\n});\nfunction p(t, i = 0) {\n const r = e(30);\n return r.setUint32(0, 1347093252), r.setUint32(4, 754976768 | i), B(t.t, r, 10), r.setUint16(26, t.o.length, 1), n(r);\n}\nasync function* g(e) {\n let {\n i: n\n } = e;\n if (\"then\" in n && (n = await n), n instanceof Uint8Array) yield n, e.m = y(n, 0), e.u = BigInt(n.length);else {\n e.u = 0n;\n const t = n.getReader();\n for (;;) {\n const {\n value: n,\n done: i\n } = await t.read();\n if (i) break;\n e.m = y(n, e.m), e.u += BigInt(n.length), yield n;\n }\n }\n}\nfunction I(t, r) {\n const f = e(16 + (r ? 8 : 0));\n return f.setUint32(0, 1347094280), f.setUint32(4, t.isFile ? t.m : 0, 1), r ? (f.setBigUint64(8, t.u, 1), f.setBigUint64(16, t.u, 1)) : (f.setUint32(8, i(t.u), 1), f.setUint32(12, i(t.u), 1)), n(f);\n}\nfunction v(t, r, f = 0, o = 0) {\n const a = e(46);\n return a.setUint32(0, 1347092738), a.setUint32(4, 755182848), a.setUint16(8, 2048 | f), B(t.t, a, 12), a.setUint32(16, t.isFile ? t.m : 0, 1), a.setUint32(20, i(t.u), 1), a.setUint32(24, i(t.u), 1), a.setUint16(28, t.o.length, 1), a.setUint16(30, o, 1), a.setUint16(40, t.isFile ? 33204 : 16893, 1), a.setUint32(42, i(r), 1), n(a);\n}\nfunction h(t, i, r) {\n const f = e(r);\n return f.setUint16(0, 1, 1), f.setUint16(2, r - 4, 1), 16 & r && (f.setBigUint64(4, t.u, 1), f.setBigUint64(12, t.u, 1)), f.setBigUint64(r - 8, i, 1), n(f);\n}\nfunction D(e) {\n return e instanceof File || e instanceof Response ? [[e], [e]] : [[e.input, e.name, e.size], [e.input, e.lastModified]];\n}\nvar S = e => function (e) {\n let n = BigInt(22),\n t = 0n,\n i = 0;\n for (const r of e) {\n if (!r.o) throw new Error(\"Every file must have a non-empty name.\");\n if (void 0 === r.u) throw new Error(`Missing size for file \"${new TextDecoder().decode(r.o)}\".`);\n const e = r.u >= 0xffffffffn,\n f = t >= 0xffffffffn;\n t += BigInt(46 + r.o.length + (e && 8)) + r.u, n += BigInt(r.o.length + 46 + (12 * f | 28 * e)), i || (i = e);\n }\n return (i || t >= 0xffffffffn) && (n += BigInt(76)), n + t;\n}(function* (e) {\n for (const n of e) yield s(...D(n)[0]);\n}(e));\nfunction A(e, n = {}) {\n const t = {\n \"Content-Type\": \"application/zip\",\n \"Content-Disposition\": \"attachment\"\n };\n return (\"bigint\" == typeof n.length || Number.isInteger(n.length)) && n.length > 0 && (t[\"Content-Length\"] = String(n.length)), n.metadata && (t[\"Content-Length\"] = String(S(n.metadata))), new Response(N(e, n), {\n headers: t\n });\n}\nfunction N(t, a = {}) {\n const u = function (e) {\n const n = e[Symbol.iterator in e ? Symbol.iterator : Symbol.asyncIterator]();\n return {\n async next() {\n const e = await n.next();\n if (e.done) return e;\n const [t, i] = D(e.value);\n return {\n done: 0,\n value: Object.assign(f(...i), s(...t))\n };\n },\n throw: n.throw?.bind(n),\n [Symbol.asyncIterator]() {\n return this;\n }\n };\n }(t);\n return o(async function* (t, f) {\n const o = [];\n let a = 0n,\n s = 0n,\n u = 0;\n for await (const e of t) {\n const n = w(e, f.buffersAreUTF8);\n yield p(e, n), yield e.o, e.isFile && (yield* g(e));\n const t = e.u >= 0xffffffffn,\n i = 12 * (a >= 0xffffffffn) | 28 * t;\n yield I(e, t), o.push(v(e, a, n, i)), o.push(e.o), i && o.push(h(e, a, i)), t && (a += 8n), s++, a += BigInt(46 + e.o.length) + e.u, u || (u = t);\n }\n let d = 0n;\n for (const e of o) yield e, d += BigInt(e.length);\n if (u || a >= 0xffffffffn) {\n const t = e(76);\n t.setUint32(0, 1347094022), t.setBigUint64(4, BigInt(44), 1), t.setUint32(12, 755182848), t.setBigUint64(24, s, 1), t.setBigUint64(32, s, 1), t.setBigUint64(40, d, 1), t.setBigUint64(48, a, 1), t.setUint32(56, 1347094023), t.setBigUint64(64, a + d, 1), t.setUint32(72, 1, 1), yield n(t);\n }\n const l = e(22);\n l.setUint32(0, 1347093766), l.setUint16(8, r(s), 1), l.setUint16(10, r(s), 1), l.setUint32(12, i(d), 1), l.setUint32(16, i(a), 1), yield n(l);\n }(u, a), u);\n}\nexport { A as downloadZip, N as makeZip, S as predictLength };","import * as i0 from '@angular/core';\nimport { InjectionToken, booleanAttribute, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Optional, Input, Directive, QueryList, EventEmitter, TemplateRef, ContentChildren, ViewChild, ContentChild, Output, inject, ChangeDetectorRef, Self, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/a11y';\nimport { FocusKeyManager, isFakeTouchstartFromScreenReader, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y';\nimport { UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW, ESCAPE, hasModifierKey, ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { Subject, merge, Subscription, of, asapScheduler } from 'rxjs';\nimport { startWith, switchMap, take, takeUntil, filter, delay } from 'rxjs/operators';\nimport { DOCUMENT, NgClass, CommonModule } from '@angular/common';\nimport { MatRipple, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { TemplatePortal, DomPortalOutlet } from '@angular/cdk/portal';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i3 from '@angular/cdk/bidi';\nimport * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\n\n/**\n * Injection token used to provide the parent menu to menu-specific components.\n * @docs-private\n */\nconst _c0 = [\"mat-menu-item\", \"\"];\nfunction MatMenuItem_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"svg\", 3);\n i0.ɵɵelement(1, \"polygon\", 4);\n i0.ɵɵelementEnd();\n }\n}\nconst _c1 = [[[\"mat-icon\"], [\"\", \"matMenuItemIcon\", \"\"]], \"*\"];\nconst _c2 = [\"mat-icon, [matMenuItemIcon]\", \"*\"];\nfunction MatMenu_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n const _r2 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵlistener(\"keydown\", function MatMenu_ng_template_0_Template_div_keydown_0_listener($event) {\n i0.ɵɵrestoreView(_r2);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._handleKeydown($event));\n })(\"click\", function MatMenu_ng_template_0_Template_div_click_0_listener() {\n i0.ɵɵrestoreView(_r2);\n const ctx_r3 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r3.closed.emit(\"click\"));\n })(\"@transformMenu.start\", function MatMenu_ng_template_0_Template_div_animation_transformMenu_start_0_listener($event) {\n i0.ɵɵrestoreView(_r2);\n const ctx_r4 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r4._onAnimationStart($event));\n })(\"@transformMenu.done\", function MatMenu_ng_template_0_Template_div_animation_transformMenu_done_0_listener($event) {\n i0.ɵɵrestoreView(_r2);\n const ctx_r5 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r5._onAnimationDone($event));\n });\n i0.ɵɵelementStart(1, \"div\", 1);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"id\", ctx_r0.panelId)(\"ngClass\", ctx_r0._classList)(\"@transformMenu\", ctx_r0._panelAnimationState);\n i0.ɵɵattribute(\"aria-label\", ctx_r0.ariaLabel || null)(\"aria-labelledby\", ctx_r0.ariaLabelledby || null)(\"aria-describedby\", ctx_r0.ariaDescribedby || null);\n }\n}\nconst _c3 = [\"*\"];\nconst MAT_MENU_PANEL = /*#__PURE__*/new InjectionToken('MAT_MENU_PANEL');\n\n/**\n * Single item inside a `mat-menu`. Provides the menu item styling and accessibility treatment.\n */\nlet MatMenuItem = /*#__PURE__*/(() => {\n class MatMenuItem {\n constructor(_elementRef, _document, _focusMonitor, _parentMenu, _changeDetectorRef) {\n this._elementRef = _elementRef;\n this._document = _document;\n this._focusMonitor = _focusMonitor;\n this._parentMenu = _parentMenu;\n this._changeDetectorRef = _changeDetectorRef;\n /** ARIA role for the menu item. */\n this.role = 'menuitem';\n /** Whether the menu item is disabled. */\n this.disabled = false;\n /** Whether ripples are disabled on the menu item. */\n this.disableRipple = false;\n /** Stream that emits when the menu item is hovered. */\n this._hovered = new Subject();\n /** Stream that emits when the menu item is focused. */\n this._focused = new Subject();\n /** Whether the menu item is highlighted. */\n this._highlighted = false;\n /** Whether the menu item acts as a trigger for a sub-menu. */\n this._triggersSubmenu = false;\n _parentMenu?.addItem?.(this);\n }\n /** Focuses the menu item. */\n focus(origin, options) {\n if (this._focusMonitor && origin) {\n this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n } else {\n this._getHostElement().focus(options);\n }\n this._focused.next(this);\n }\n ngAfterViewInit() {\n if (this._focusMonitor) {\n // Start monitoring the element, so it gets the appropriate focused classes. We want\n // to show the focus style for menu items only when the focus was not caused by a\n // mouse or touch interaction.\n this._focusMonitor.monitor(this._elementRef, false);\n }\n }\n ngOnDestroy() {\n if (this._focusMonitor) {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n if (this._parentMenu && this._parentMenu.removeItem) {\n this._parentMenu.removeItem(this);\n }\n this._hovered.complete();\n this._focused.complete();\n }\n /** Used to set the `tabindex`. */\n _getTabIndex() {\n return this.disabled ? '-1' : '0';\n }\n /** Returns the host DOM element. */\n _getHostElement() {\n return this._elementRef.nativeElement;\n }\n /** Prevents the default element actions if it is disabled. */\n _checkDisabled(event) {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n /** Emits to the hover stream. */\n _handleMouseEnter() {\n this._hovered.next(this);\n }\n /** Gets the label to be used when determining whether the option should be focused. */\n getLabel() {\n const clone = this._elementRef.nativeElement.cloneNode(true);\n const icons = clone.querySelectorAll('mat-icon, .material-icons');\n // Strip away icons, so they don't show up in the text.\n for (let i = 0; i < icons.length; i++) {\n icons[i].remove();\n }\n return clone.textContent?.trim() || '';\n }\n _setHighlighted(isHighlighted) {\n // We need to mark this for check for the case where the content is coming from a\n // `matMenuContent` whose change detection tree is at the declaration position,\n // not the insertion position. See #23175.\n // @breaking-change 12.0.0 Remove null check for `_changeDetectorRef`.\n this._highlighted = isHighlighted;\n this._changeDetectorRef?.markForCheck();\n }\n _setTriggersSubmenu(triggersSubmenu) {\n // @breaking-change 12.0.0 Remove null check for `_changeDetectorRef`.\n this._triggersSubmenu = triggersSubmenu;\n this._changeDetectorRef?.markForCheck();\n }\n _hasFocus() {\n return this._document && this._document.activeElement === this._getHostElement();\n }\n static {\n this.ɵfac = function MatMenuItem_Factory(t) {\n return new (t || MatMenuItem)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i1.FocusMonitor), i0.ɵɵdirectiveInject(MAT_MENU_PANEL, 8), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatMenuItem,\n selectors: [[\"\", \"mat-menu-item\", \"\"]],\n hostAttrs: [1, \"mat-mdc-menu-item\", \"mat-mdc-focus-indicator\"],\n hostVars: 8,\n hostBindings: function MatMenuItem_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatMenuItem_click_HostBindingHandler($event) {\n return ctx._checkDisabled($event);\n })(\"mouseenter\", function MatMenuItem_mouseenter_HostBindingHandler() {\n return ctx._handleMouseEnter();\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"role\", ctx.role)(\"tabindex\", ctx._getTabIndex())(\"aria-disabled\", ctx.disabled)(\"disabled\", ctx.disabled || null);\n i0.ɵɵclassProp(\"mat-mdc-menu-item-highlighted\", ctx._highlighted)(\"mat-mdc-menu-item-submenu-trigger\", ctx._triggersSubmenu);\n }\n },\n inputs: {\n role: \"role\",\n disabled: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"disabled\", \"disabled\", booleanAttribute],\n disableRipple: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"disableRipple\", \"disableRipple\", booleanAttribute]\n },\n exportAs: [\"matMenuItem\"],\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n attrs: _c0,\n ngContentSelectors: _c2,\n decls: 5,\n vars: 3,\n consts: [[1, \"mat-mdc-menu-item-text\"], [\"matRipple\", \"\", 1, \"mat-mdc-menu-ripple\", 3, \"matRippleDisabled\", \"matRippleTrigger\"], [\"class\", \"mat-mdc-menu-submenu-icon\", \"viewBox\", \"0 0 5 10\", \"focusable\", \"false\", \"aria-hidden\", \"true\"], [\"viewBox\", \"0 0 5 10\", \"focusable\", \"false\", \"aria-hidden\", \"true\", 1, \"mat-mdc-menu-submenu-icon\"], [\"points\", \"0,0 5,5 0,10\"]],\n template: function MatMenuItem_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c1);\n i0.ɵɵprojection(0);\n i0.ɵɵelementStart(1, \"span\", 0);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵelementEnd();\n i0.ɵɵelement(3, \"div\", 1);\n i0.ɵɵtemplate(4, MatMenuItem_Conditional_4_Template, 2, 0, \":svg:svg\", 2);\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"matRippleDisabled\", ctx.disableRipple || ctx.disabled)(\"matRippleTrigger\", ctx._getHostElement());\n i0.ɵɵadvance();\n i0.ɵɵconditional(4, ctx._triggersSubmenu ? 4 : -1);\n }\n },\n dependencies: [MatRipple],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatMenuItem;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Throws an exception for the case when menu's x-position value isn't valid.\n * In other words, it doesn't match 'before' or 'after'.\n * @docs-private\n */\nfunction throwMatMenuInvalidPositionX() {\n throw Error(`xPosition value must be either 'before' or after'.\n Example: `);\n}\n/**\n * Throws an exception for the case when menu's y-position value isn't valid.\n * In other words, it doesn't match 'above' or 'below'.\n * @docs-private\n */\nfunction throwMatMenuInvalidPositionY() {\n throw Error(`yPosition value must be either 'above' or below'.\n Example: `);\n}\n/**\n * Throws an exception for the case when a menu is assigned\n * to a trigger that is placed inside the same menu.\n * @docs-private\n */\nfunction throwMatMenuRecursiveError() {\n throw Error(`matMenuTriggerFor: menu cannot contain its own trigger. Assign a menu that is ` + `not a parent of the trigger or move the trigger outside of the menu.`);\n}\n\n/**\n * Injection token that can be used to reference instances of `MatMenuContent`. It serves\n * as alternative token to the actual `MatMenuContent` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_MENU_CONTENT = /*#__PURE__*/new InjectionToken('MatMenuContent');\n/** Menu content that will be rendered lazily once the menu is opened. */\nlet MatMenuContent = /*#__PURE__*/(() => {\n class MatMenuContent {\n constructor(_template, _componentFactoryResolver, _appRef, _injector, _viewContainerRef, _document, _changeDetectorRef) {\n this._template = _template;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._appRef = _appRef;\n this._injector = _injector;\n this._viewContainerRef = _viewContainerRef;\n this._document = _document;\n this._changeDetectorRef = _changeDetectorRef;\n /** Emits when the menu content has been attached. */\n this._attached = new Subject();\n }\n /**\n * Attaches the content with a particular context.\n * @docs-private\n */\n attach(context = {}) {\n if (!this._portal) {\n this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n }\n this.detach();\n if (!this._outlet) {\n this._outlet = new DomPortalOutlet(this._document.createElement('div'), this._componentFactoryResolver, this._appRef, this._injector);\n }\n const element = this._template.elementRef.nativeElement;\n // Because we support opening the same menu from different triggers (which in turn have their\n // own `OverlayRef` panel), we have to re-insert the host element every time, otherwise we\n // risk it staying attached to a pane that's no longer in the DOM.\n element.parentNode.insertBefore(this._outlet.outletElement, element);\n // When `MatMenuContent` is used in an `OnPush` component, the insertion of the menu\n // content via `createEmbeddedView` does not cause the content to be seen as \"dirty\"\n // by Angular. This causes the `@ContentChildren` for menu items within the menu to\n // not be updated by Angular. By explicitly marking for check here, we tell Angular that\n // it needs to check for new menu items and update the `@ContentChild` in `MatMenu`.\n // @breaking-change 9.0.0 Make change detector ref required\n this._changeDetectorRef?.markForCheck();\n this._portal.attach(this._outlet, context);\n this._attached.next();\n }\n /**\n * Detaches the content.\n * @docs-private\n */\n detach() {\n if (this._portal.isAttached) {\n this._portal.detach();\n }\n }\n ngOnDestroy() {\n if (this._outlet) {\n this._outlet.dispose();\n }\n }\n static {\n this.ɵfac = function MatMenuContent_Factory(t) {\n return new (t || MatMenuContent)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver), i0.ɵɵdirectiveInject(i0.ApplicationRef), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatMenuContent,\n selectors: [[\"ng-template\", \"matMenuContent\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_MENU_CONTENT,\n useExisting: MatMenuContent\n }])]\n });\n }\n }\n return MatMenuContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Animations used by the mat-menu component.\n * Animation duration and timing values are based on:\n * https://material.io/guidelines/components/menus.html#menus-usage\n * @docs-private\n */\nconst matMenuAnimations = {\n /**\n * This animation controls the menu panel's entry and exit from the page.\n *\n * When the menu panel is added to the DOM, it scales in and fades in its border.\n *\n * When the menu panel is removed from the DOM, it simply fades out after a brief\n * delay to display the ripple.\n */\n transformMenu: /*#__PURE__*/trigger('transformMenu', [/*#__PURE__*/state('void', /*#__PURE__*/style({\n opacity: 0,\n transform: 'scale(0.8)'\n })), /*#__PURE__*/transition('void => enter', /*#__PURE__*/animate('120ms cubic-bezier(0, 0, 0.2, 1)', /*#__PURE__*/style({\n opacity: 1,\n transform: 'scale(1)'\n }))), /*#__PURE__*/transition('* => void', /*#__PURE__*/animate('100ms 25ms linear', /*#__PURE__*/style({\n opacity: 0\n })))]),\n /**\n * This animation fades in the background color and content of the menu panel\n * after its containing element is scaled in.\n */\n fadeInItems: /*#__PURE__*/trigger('fadeInItems', [\n /*#__PURE__*/\n // TODO(crisbeto): this is inside the `transformMenu`\n // now. Remove next time we do breaking changes.\n state('showing', /*#__PURE__*/style({\n opacity: 1\n })), /*#__PURE__*/transition('void => *', [/*#__PURE__*/style({\n opacity: 0\n }), /*#__PURE__*/animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')])])\n};\n/**\n * @deprecated\n * @breaking-change 8.0.0\n * @docs-private\n */\nconst fadeInItems = matMenuAnimations.fadeInItems;\n/**\n * @deprecated\n * @breaking-change 8.0.0\n * @docs-private\n */\nconst transformMenu = matMenuAnimations.transformMenu;\nlet menuPanelUid = 0;\n/** Injection token to be used to override the default options for `mat-menu`. */\nconst MAT_MENU_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-menu-default-options', {\n providedIn: 'root',\n factory: MAT_MENU_DEFAULT_OPTIONS_FACTORY\n});\n/** @docs-private */\nfunction MAT_MENU_DEFAULT_OPTIONS_FACTORY() {\n return {\n overlapTrigger: false,\n xPosition: 'after',\n yPosition: 'below',\n backdropClass: 'cdk-overlay-transparent-backdrop'\n };\n}\nlet MatMenu = /*#__PURE__*/(() => {\n class MatMenu {\n /** Position of the menu in the X axis. */\n get xPosition() {\n return this._xPosition;\n }\n set xPosition(value) {\n if (value !== 'before' && value !== 'after' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatMenuInvalidPositionX();\n }\n this._xPosition = value;\n this.setPositionClasses();\n }\n /** Position of the menu in the Y axis. */\n get yPosition() {\n return this._yPosition;\n }\n set yPosition(value) {\n if (value !== 'above' && value !== 'below' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatMenuInvalidPositionY();\n }\n this._yPosition = value;\n this.setPositionClasses();\n }\n /**\n * This method takes classes set on the host mat-menu element and applies them on the\n * menu template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing menu from outside the component.\n * @param classes list of class names\n */\n set panelClass(classes) {\n const previousPanelClass = this._previousPanelClass;\n if (previousPanelClass && previousPanelClass.length) {\n previousPanelClass.split(' ').forEach(className => {\n this._classList[className] = false;\n });\n }\n this._previousPanelClass = classes;\n if (classes && classes.length) {\n classes.split(' ').forEach(className => {\n this._classList[className] = true;\n });\n this._elementRef.nativeElement.className = '';\n }\n }\n /**\n * This method takes classes set on the host mat-menu element and applies them on the\n * menu template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing menu from outside the component.\n * @deprecated Use `panelClass` instead.\n * @breaking-change 8.0.0\n */\n get classList() {\n return this.panelClass;\n }\n set classList(classes) {\n this.panelClass = classes;\n }\n constructor(_elementRef, _ngZone, defaultOptions,\n // @breaking-change 15.0.0 `_changeDetectorRef` to become a required parameter.\n _changeDetectorRef) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._elevationPrefix = 'mat-elevation-z';\n this._baseElevation = 8;\n /** Only the direct descendant menu items. */\n this._directDescendantItems = new QueryList();\n /** Config object to be passed into the menu's ngClass */\n this._classList = {};\n /** Current state of the panel animation. */\n this._panelAnimationState = 'void';\n /** Emits whenever an animation on the menu completes. */\n this._animationDone = new Subject();\n /** Event emitted when the menu is closed. */\n this.closed = new EventEmitter();\n /**\n * Event emitted when the menu is closed.\n * @deprecated Switch to `closed` instead\n * @breaking-change 8.0.0\n */\n this.close = this.closed;\n this.panelId = `mat-menu-panel-${menuPanelUid++}`;\n this.overlayPanelClass = defaultOptions.overlayPanelClass || '';\n this._xPosition = defaultOptions.xPosition;\n this._yPosition = defaultOptions.yPosition;\n this.backdropClass = defaultOptions.backdropClass;\n this.overlapTrigger = defaultOptions.overlapTrigger;\n this.hasBackdrop = defaultOptions.hasBackdrop;\n }\n ngOnInit() {\n this.setPositionClasses();\n }\n ngAfterContentInit() {\n this._updateDirectDescendants();\n this._keyManager = new FocusKeyManager(this._directDescendantItems).withWrap().withTypeAhead().withHomeAndEnd();\n this._keyManager.tabOut.subscribe(() => this.closed.emit('tab'));\n // If a user manually (programmatically) focuses a menu item, we need to reflect that focus\n // change back to the key manager. Note that we don't need to unsubscribe here because _focused\n // is internal and we know that it gets completed on destroy.\n this._directDescendantItems.changes.pipe(startWith(this._directDescendantItems), switchMap(items => merge(...items.map(item => item._focused)))).subscribe(focusedItem => this._keyManager.updateActiveItem(focusedItem));\n this._directDescendantItems.changes.subscribe(itemsList => {\n // Move focus to another item, if the active item is removed from the list.\n // We need to debounce the callback, because multiple items might be removed\n // in quick succession.\n const manager = this._keyManager;\n if (this._panelAnimationState === 'enter' && manager.activeItem?._hasFocus()) {\n const items = itemsList.toArray();\n const index = Math.max(0, Math.min(items.length - 1, manager.activeItemIndex || 0));\n if (items[index] && !items[index].disabled) {\n manager.setActiveItem(index);\n } else {\n manager.setNextItemActive();\n }\n }\n });\n }\n ngOnDestroy() {\n this._keyManager?.destroy();\n this._directDescendantItems.destroy();\n this.closed.complete();\n this._firstItemFocusSubscription?.unsubscribe();\n }\n /** Stream that emits whenever the hovered menu item changes. */\n _hovered() {\n // Coerce the `changes` property because Angular types it as `Observable`\n const itemChanges = this._directDescendantItems.changes;\n return itemChanges.pipe(startWith(this._directDescendantItems), switchMap(items => merge(...items.map(item => item._hovered))));\n }\n /*\n * Registers a menu item with the menu.\n * @docs-private\n * @deprecated No longer being used. To be removed.\n * @breaking-change 9.0.0\n */\n addItem(_item) {}\n /**\n * Removes an item from the menu.\n * @docs-private\n * @deprecated No longer being used. To be removed.\n * @breaking-change 9.0.0\n */\n removeItem(_item) {}\n /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n _handleKeydown(event) {\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n switch (keyCode) {\n case ESCAPE:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this.closed.emit('keydown');\n }\n break;\n case LEFT_ARROW:\n if (this.parentMenu && this.direction === 'ltr') {\n this.closed.emit('keydown');\n }\n break;\n case RIGHT_ARROW:\n if (this.parentMenu && this.direction === 'rtl') {\n this.closed.emit('keydown');\n }\n break;\n default:\n if (keyCode === UP_ARROW || keyCode === DOWN_ARROW) {\n manager.setFocusOrigin('keyboard');\n }\n manager.onKeydown(event);\n return;\n }\n // Don't allow the event to propagate if we've already handled it, or it may\n // end up reaching other overlays that were opened earlier (see #22694).\n event.stopPropagation();\n }\n /**\n * Focus the first item in the menu.\n * @param origin Action from which the focus originated. Used to set the correct styling.\n */\n focusFirstItem(origin = 'program') {\n // Wait for `onStable` to ensure iOS VoiceOver screen reader focuses the first item (#24735).\n this._firstItemFocusSubscription?.unsubscribe();\n this._firstItemFocusSubscription = this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n let menuPanel = null;\n if (this._directDescendantItems.length) {\n // Because the `mat-menuPanel` is at the DOM insertion point, not inside the overlay, we don't\n // have a nice way of getting a hold of the menuPanel panel. We can't use a `ViewChild` either\n // because the panel is inside an `ng-template`. We work around it by starting from one of\n // the items and walking up the DOM.\n menuPanel = this._directDescendantItems.first._getHostElement().closest('[role=\"menu\"]');\n }\n // If an item in the menuPanel is already focused, avoid overriding the focus.\n if (!menuPanel || !menuPanel.contains(document.activeElement)) {\n const manager = this._keyManager;\n manager.setFocusOrigin(origin).setFirstItemActive();\n // If there's no active item at this point, it means that all the items are disabled.\n // Move focus to the menuPanel panel so keyboard events like Escape still work. Also this will\n // give _some_ feedback to screen readers.\n if (!manager.activeItem && menuPanel) {\n menuPanel.focus();\n }\n }\n });\n }\n /**\n * Resets the active item in the menu. This is used when the menu is opened, allowing\n * the user to start from the first option when pressing the down arrow.\n */\n resetActiveItem() {\n this._keyManager.setActiveItem(-1);\n }\n /**\n * Sets the menu panel elevation.\n * @param depth Number of parent menus that come before the menu.\n */\n setElevation(depth) {\n // The elevation starts at the base and increases by one for each level.\n // Capped at 24 because that's the maximum elevation defined in the Material design spec.\n const elevation = Math.min(this._baseElevation + depth, 24);\n const newElevation = `${this._elevationPrefix}${elevation}`;\n const customElevation = Object.keys(this._classList).find(className => {\n return className.startsWith(this._elevationPrefix);\n });\n if (!customElevation || customElevation === this._previousElevation) {\n if (this._previousElevation) {\n this._classList[this._previousElevation] = false;\n }\n this._classList[newElevation] = true;\n this._previousElevation = newElevation;\n }\n }\n /**\n * Adds classes to the menu panel based on its position. Can be used by\n * consumers to add specific styling based on the position.\n * @param posX Position of the menu along the x axis.\n * @param posY Position of the menu along the y axis.\n * @docs-private\n */\n setPositionClasses(posX = this.xPosition, posY = this.yPosition) {\n const classes = this._classList;\n classes['mat-menu-before'] = posX === 'before';\n classes['mat-menu-after'] = posX === 'after';\n classes['mat-menu-above'] = posY === 'above';\n classes['mat-menu-below'] = posY === 'below';\n // @breaking-change 15.0.0 Remove null check for `_changeDetectorRef`.\n this._changeDetectorRef?.markForCheck();\n }\n /** Starts the enter animation. */\n _startAnimation() {\n // @breaking-change 8.0.0 Combine with _resetAnimation.\n this._panelAnimationState = 'enter';\n }\n /** Resets the panel animation to its initial state. */\n _resetAnimation() {\n // @breaking-change 8.0.0 Combine with _startAnimation.\n this._panelAnimationState = 'void';\n }\n /** Callback that is invoked when the panel animation completes. */\n _onAnimationDone(event) {\n this._animationDone.next(event);\n this._isAnimating = false;\n }\n _onAnimationStart(event) {\n this._isAnimating = true;\n // Scroll the content element to the top as soon as the animation starts. This is necessary,\n // because we move focus to the first item while it's still being animated, which can throw\n // the browser off when it determines the scroll position. Alternatively we can move focus\n // when the animation is done, however moving focus asynchronously will interrupt screen\n // readers which are in the process of reading out the menu already. We take the `element`\n // from the `event` since we can't use a `ViewChild` to access the pane.\n if (event.toState === 'enter' && this._keyManager.activeItemIndex === 0) {\n event.element.scrollTop = 0;\n }\n }\n /**\n * Sets up a stream that will keep track of any newly-added menu items and will update the list\n * of direct descendants. We collect the descendants this way, because `_allItems` can include\n * items that are part of child menus, and using a custom way of registering items is unreliable\n * when it comes to maintaining the item order.\n */\n _updateDirectDescendants() {\n this._allItems.changes.pipe(startWith(this._allItems)).subscribe(items => {\n this._directDescendantItems.reset(items.filter(item => item._parentMenu === this));\n this._directDescendantItems.notifyOnChanges();\n });\n }\n static {\n this.ɵfac = function MatMenu_Factory(t) {\n return new (t || MatMenu)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(MAT_MENU_DEFAULT_OPTIONS), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatMenu,\n selectors: [[\"mat-menu\"]],\n contentQueries: function MatMenu_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MAT_MENU_CONTENT, 5);\n i0.ɵɵcontentQuery(dirIndex, MatMenuItem, 5);\n i0.ɵɵcontentQuery(dirIndex, MatMenuItem, 4);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.lazyContent = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._allItems = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.items = _t);\n }\n },\n viewQuery: function MatMenu_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(TemplateRef, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateRef = _t.first);\n }\n },\n hostVars: 3,\n hostBindings: function MatMenu_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-label\", null)(\"aria-labelledby\", null)(\"aria-describedby\", null);\n }\n },\n inputs: {\n backdropClass: \"backdropClass\",\n ariaLabel: [i0.ɵɵInputFlags.None, \"aria-label\", \"ariaLabel\"],\n ariaLabelledby: [i0.ɵɵInputFlags.None, \"aria-labelledby\", \"ariaLabelledby\"],\n ariaDescribedby: [i0.ɵɵInputFlags.None, \"aria-describedby\", \"ariaDescribedby\"],\n xPosition: \"xPosition\",\n yPosition: \"yPosition\",\n overlapTrigger: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"overlapTrigger\", \"overlapTrigger\", booleanAttribute],\n hasBackdrop: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"hasBackdrop\", \"hasBackdrop\", value => value == null ? null : booleanAttribute(value)],\n panelClass: [i0.ɵɵInputFlags.None, \"class\", \"panelClass\"],\n classList: \"classList\"\n },\n outputs: {\n closed: \"closed\",\n close: \"close\"\n },\n exportAs: [\"matMenu\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_MENU_PANEL,\n useExisting: MatMenu\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c3,\n decls: 1,\n vars: 0,\n consts: [[\"tabindex\", \"-1\", \"role\", \"menu\", 1, \"mat-mdc-menu-panel\", \"mat-mdc-elevation-specific\", 3, \"id\", \"ngClass\", \"keydown\", \"click\"], [1, \"mat-mdc-menu-content\"]],\n template: function MatMenu_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵtemplate(0, MatMenu_ng_template_0_Template, 3, 6, \"ng-template\");\n }\n },\n dependencies: [NgClass],\n styles: [\"mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;list-style-type:none}.mat-mdc-menu-content:focus{outline:none}.mat-mdc-menu-content,.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;flex:1;white-space:normal;font-family:var(--mat-menu-item-label-text-font);line-height:var(--mat-menu-item-label-text-line-height);font-size:var(--mat-menu-item-label-text-size);letter-spacing:var(--mat-menu-item-label-text-tracking);font-weight:var(--mat-menu-item-label-text-weight)}.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box;outline:0;border-radius:var(--mat-menu-container-shape);background-color:var(--mat-menu-container-color);will-change:transform,opacity}.mat-mdc-menu-panel.ng-animating{pointer-events:none}.cdk-high-contrast-active .mat-mdc-menu-panel{outline:solid 1px}.mat-divider{color:var(--mat-menu-divider-color);margin-bottom:var(--mat-menu-divider-bottom-spacing);margin-top:var(--mat-menu-divider-top-spacing)}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;padding-left:var(--mat-menu-item-leading-spacing);padding-right:var(--mat-menu-item-trailing-spacing);-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0);cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;align-items:center;min-height:48px}.mat-mdc-menu-item:focus{outline:none}[dir=rtl] .mat-mdc-menu-item,.mat-mdc-menu-item[dir=rtl]{padding-left:var(--mat-menu-item-trailing-spacing);padding-right:var(--mat-menu-item-leading-spacing)}.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-leading-spacing);padding-right:var(--mat-menu-item-with-icon-trailing-spacing)}[dir=rtl] .mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]),.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon])[dir=rtl]{padding-left:var(--mat-menu-item-with-icon-trailing-spacing);padding-right:var(--mat-menu-item-with-icon-leading-spacing)}.mat-mdc-menu-item::-moz-focus-inner{border:0}.mat-mdc-menu-item,.mat-mdc-menu-item:visited,.mat-mdc-menu-item:link{color:var(--mat-menu-item-label-text-color)}.mat-mdc-menu-item .mat-icon-no-color,.mat-mdc-menu-item .mat-mdc-menu-submenu-icon{color:var(--mat-menu-item-icon-color)}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:\\\"\\\";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item .mat-icon{flex-shrink:0;margin-right:var(--mat-menu-item-spacing);height:var(--mat-menu-item-icon-size);width:var(--mat-menu-item-icon-size)}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:var(--mat-menu-item-spacing)}.mat-mdc-menu-item:not([disabled]):hover{background-color:var(--mat-menu-item-hover-state-layer-color)}.mat-mdc-menu-item:not([disabled]).cdk-program-focused,.mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused,.mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted{background-color:var(--mat-menu-item-focus-state-layer-color)}.cdk-high-contrast-active .mat-mdc-menu-item{margin-top:1px}.mat-mdc-menu-submenu-icon{width:var(--mat-menu-item-icon-size);height:10px;fill:currentColor;padding-left:var(--mat-menu-item-spacing)}[dir=rtl] .mat-mdc-menu-submenu-icon{right:auto;padding-right:var(--mat-menu-item-spacing);padding-left:0}.cdk-high-contrast-active .mat-mdc-menu-submenu-icon{fill:CanvasText}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\"],\n encapsulation: 2,\n data: {\n animation: [matMenuAnimations.transformMenu, matMenuAnimations.fadeInItems]\n },\n changeDetection: 0\n });\n }\n }\n return MatMenu;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Injection token that determines the scroll handling while the menu is open. */\nconst MAT_MENU_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('mat-menu-scroll-strategy', {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.reposition();\n }\n});\n/** @docs-private */\nfunction MAT_MENU_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_MENU_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_MENU_SCROLL_STRATEGY_FACTORY\n};\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n passive: true\n});\n/**\n * Default top padding of the menu panel.\n * @deprecated No longer being used. Will be removed.\n * @breaking-change 15.0.0\n */\nconst MENU_PANEL_TOP_PADDING = 8;\n/** Directive applied to an element that should trigger a `mat-menu`. */\nlet MatMenuTrigger = /*#__PURE__*/(() => {\n class MatMenuTrigger {\n /**\n * @deprecated\n * @breaking-change 8.0.0\n */\n get _deprecatedMatMenuTriggerFor() {\n return this.menu;\n }\n set _deprecatedMatMenuTriggerFor(v) {\n this.menu = v;\n }\n /** References the menu instance that the trigger is associated with. */\n get menu() {\n return this._menu;\n }\n set menu(menu) {\n if (menu === this._menu) {\n return;\n }\n this._menu = menu;\n this._menuCloseSubscription.unsubscribe();\n if (menu) {\n if (menu === this._parentMaterialMenu && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatMenuRecursiveError();\n }\n this._menuCloseSubscription = menu.close.subscribe(reason => {\n this._destroyMenu(reason);\n // If a click closed the menu, we should close the entire chain of nested menus.\n if ((reason === 'click' || reason === 'tab') && this._parentMaterialMenu) {\n this._parentMaterialMenu.closed.emit(reason);\n }\n });\n }\n this._menuItemInstance?._setTriggersSubmenu(this.triggersSubmenu());\n }\n constructor(_overlay, _element, _viewContainerRef, scrollStrategy, parentMenu,\n // `MatMenuTrigger` is commonly used in combination with a `MatMenuItem`.\n // tslint:disable-next-line: lightweight-tokens\n _menuItemInstance, _dir, _focusMonitor, _ngZone) {\n this._overlay = _overlay;\n this._element = _element;\n this._viewContainerRef = _viewContainerRef;\n this._menuItemInstance = _menuItemInstance;\n this._dir = _dir;\n this._focusMonitor = _focusMonitor;\n this._ngZone = _ngZone;\n this._overlayRef = null;\n this._menuOpen = false;\n this._closingActionsSubscription = Subscription.EMPTY;\n this._hoverSubscription = Subscription.EMPTY;\n this._menuCloseSubscription = Subscription.EMPTY;\n this._changeDetectorRef = inject(ChangeDetectorRef);\n /**\n * Handles touch start events on the trigger.\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n this._handleTouchStart = event => {\n if (!isFakeTouchstartFromScreenReader(event)) {\n this._openedBy = 'touch';\n }\n };\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the menu is opened via the keyboard\n this._openedBy = undefined;\n /**\n * Whether focus should be restored when the menu is closed.\n * Note that disabling this option can have accessibility implications\n * and it's up to you to manage focus, if you decide to turn it off.\n */\n this.restoreFocus = true;\n /** Event emitted when the associated menu is opened. */\n this.menuOpened = new EventEmitter();\n /**\n * Event emitted when the associated menu is opened.\n * @deprecated Switch to `menuOpened` instead\n * @breaking-change 8.0.0\n */\n // tslint:disable-next-line:no-output-on-prefix\n this.onMenuOpen = this.menuOpened;\n /** Event emitted when the associated menu is closed. */\n this.menuClosed = new EventEmitter();\n /**\n * Event emitted when the associated menu is closed.\n * @deprecated Switch to `menuClosed` instead\n * @breaking-change 8.0.0\n */\n // tslint:disable-next-line:no-output-on-prefix\n this.onMenuClose = this.menuClosed;\n this._scrollStrategy = scrollStrategy;\n this._parentMaterialMenu = parentMenu instanceof MatMenu ? parentMenu : undefined;\n _element.nativeElement.addEventListener('touchstart', this._handleTouchStart, passiveEventListenerOptions);\n }\n ngAfterContentInit() {\n this._handleHover();\n }\n ngOnDestroy() {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n this._element.nativeElement.removeEventListener('touchstart', this._handleTouchStart, passiveEventListenerOptions);\n this._menuCloseSubscription.unsubscribe();\n this._closingActionsSubscription.unsubscribe();\n this._hoverSubscription.unsubscribe();\n }\n /** Whether the menu is open. */\n get menuOpen() {\n return this._menuOpen;\n }\n /** The text direction of the containing app. */\n get dir() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Whether the menu triggers a sub-menu or a top-level one. */\n triggersSubmenu() {\n return !!(this._menuItemInstance && this._parentMaterialMenu && this.menu);\n }\n /** Toggles the menu between the open and closed states. */\n toggleMenu() {\n return this._menuOpen ? this.closeMenu() : this.openMenu();\n }\n /** Opens the menu. */\n openMenu() {\n const menu = this.menu;\n if (this._menuOpen || !menu) {\n return;\n }\n const overlayRef = this._createOverlay(menu);\n const overlayConfig = overlayRef.getConfig();\n const positionStrategy = overlayConfig.positionStrategy;\n this._setPosition(menu, positionStrategy);\n overlayConfig.hasBackdrop = menu.hasBackdrop == null ? !this.triggersSubmenu() : menu.hasBackdrop;\n overlayRef.attach(this._getPortal(menu));\n if (menu.lazyContent) {\n menu.lazyContent.attach(this.menuData);\n }\n this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.closeMenu());\n this._initMenu(menu);\n if (menu instanceof MatMenu) {\n menu._startAnimation();\n menu._directDescendantItems.changes.pipe(takeUntil(menu.close)).subscribe(() => {\n // Re-adjust the position without locking when the amount of items\n // changes so that the overlay is allowed to pick a new optimal position.\n positionStrategy.withLockedPosition(false).reapplyLastPosition();\n positionStrategy.withLockedPosition(true);\n });\n }\n }\n /** Closes the menu. */\n closeMenu() {\n this.menu?.close.emit();\n }\n /**\n * Focuses the menu trigger.\n * @param origin Source of the menu trigger's focus.\n */\n focus(origin, options) {\n if (this._focusMonitor && origin) {\n this._focusMonitor.focusVia(this._element, origin, options);\n } else {\n this._element.nativeElement.focus(options);\n }\n }\n /**\n * Updates the position of the menu to ensure that it fits all options within the viewport.\n */\n updatePosition() {\n this._overlayRef?.updatePosition();\n }\n /** Closes the menu and does the necessary cleanup. */\n _destroyMenu(reason) {\n if (!this._overlayRef || !this.menuOpen) {\n return;\n }\n const menu = this.menu;\n this._closingActionsSubscription.unsubscribe();\n this._overlayRef.detach();\n // Always restore focus if the user is navigating using the keyboard or the menu was opened\n // programmatically. We don't restore for non-root triggers, because it can prevent focus\n // from making it back to the root trigger when closing a long chain of menus by clicking\n // on the backdrop.\n if (this.restoreFocus && (reason === 'keydown' || !this._openedBy || !this.triggersSubmenu())) {\n this.focus(this._openedBy);\n }\n this._openedBy = undefined;\n if (menu instanceof MatMenu) {\n menu._resetAnimation();\n if (menu.lazyContent) {\n // Wait for the exit animation to finish before detaching the content.\n menu._animationDone.pipe(filter(event => event.toState === 'void'), take(1),\n // Interrupt if the content got re-attached.\n takeUntil(menu.lazyContent._attached)).subscribe({\n next: () => menu.lazyContent.detach(),\n // No matter whether the content got re-attached, reset the menu.\n complete: () => this._setIsMenuOpen(false)\n });\n } else {\n this._setIsMenuOpen(false);\n }\n } else {\n this._setIsMenuOpen(false);\n menu?.lazyContent?.detach();\n }\n }\n /**\n * This method sets the menu state to open and focuses the first item if\n * the menu was opened via the keyboard.\n */\n _initMenu(menu) {\n menu.parentMenu = this.triggersSubmenu() ? this._parentMaterialMenu : undefined;\n menu.direction = this.dir;\n this._setMenuElevation(menu);\n menu.focusFirstItem(this._openedBy || 'program');\n this._setIsMenuOpen(true);\n }\n /** Updates the menu elevation based on the amount of parent menus that it has. */\n _setMenuElevation(menu) {\n if (menu.setElevation) {\n let depth = 0;\n let parentMenu = menu.parentMenu;\n while (parentMenu) {\n depth++;\n parentMenu = parentMenu.parentMenu;\n }\n menu.setElevation(depth);\n }\n }\n // set state rather than toggle to support triggers sharing a menu\n _setIsMenuOpen(isOpen) {\n if (isOpen !== this._menuOpen) {\n this._menuOpen = isOpen;\n this._menuOpen ? this.menuOpened.emit() : this.menuClosed.emit();\n if (this.triggersSubmenu()) {\n this._menuItemInstance._setHighlighted(isOpen);\n }\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * This method creates the overlay from the provided menu's template and saves its\n * OverlayRef so that it can be attached to the DOM when openMenu is called.\n */\n _createOverlay(menu) {\n if (!this._overlayRef) {\n const config = this._getOverlayConfig(menu);\n this._subscribeToPositions(menu, config.positionStrategy);\n this._overlayRef = this._overlay.create(config);\n // Consume the `keydownEvents` in order to prevent them from going to another overlay.\n // Ideally we'd also have our keyboard event logic in here, however doing so will\n // break anybody that may have implemented the `MatMenuPanel` themselves.\n this._overlayRef.keydownEvents().subscribe();\n }\n return this._overlayRef;\n }\n /**\n * This method builds the configuration object needed to create the overlay, the OverlayState.\n * @returns OverlayConfig\n */\n _getOverlayConfig(menu) {\n return new OverlayConfig({\n positionStrategy: this._overlay.position().flexibleConnectedTo(this._element).withLockedPosition().withGrowAfterOpen().withTransformOriginOn('.mat-menu-panel, .mat-mdc-menu-panel'),\n backdropClass: menu.backdropClass || 'cdk-overlay-transparent-backdrop',\n panelClass: menu.overlayPanelClass,\n scrollStrategy: this._scrollStrategy(),\n direction: this._dir\n });\n }\n /**\n * Listens to changes in the position of the overlay and sets the correct classes\n * on the menu based on the new position. This ensures the animation origin is always\n * correct, even if a fallback position is used for the overlay.\n */\n _subscribeToPositions(menu, position) {\n if (menu.setPositionClasses) {\n position.positionChanges.subscribe(change => {\n const posX = change.connectionPair.overlayX === 'start' ? 'after' : 'before';\n const posY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';\n // @breaking-change 15.0.0 Remove null check for `ngZone`.\n // `positionChanges` fires outside of the `ngZone` and `setPositionClasses` might be\n // updating something in the view so we need to bring it back in.\n if (this._ngZone) {\n this._ngZone.run(() => menu.setPositionClasses(posX, posY));\n } else {\n menu.setPositionClasses(posX, posY);\n }\n });\n }\n }\n /**\n * Sets the appropriate positions on a position strategy\n * so the overlay connects with the trigger correctly.\n * @param positionStrategy Strategy whose position to update.\n */\n _setPosition(menu, positionStrategy) {\n let [originX, originFallbackX] = menu.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];\n let [overlayY, overlayFallbackY] = menu.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];\n let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n let [overlayX, overlayFallbackX] = [originX, originFallbackX];\n let offsetY = 0;\n if (this.triggersSubmenu()) {\n // When the menu is a sub-menu, it should always align itself\n // to the edges of the trigger, instead of overlapping it.\n overlayFallbackX = originX = menu.xPosition === 'before' ? 'start' : 'end';\n originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';\n if (this._parentMaterialMenu) {\n if (this._parentInnerPadding == null) {\n const firstItem = this._parentMaterialMenu.items.first;\n this._parentInnerPadding = firstItem ? firstItem._getHostElement().offsetTop : 0;\n }\n offsetY = overlayY === 'bottom' ? this._parentInnerPadding : -this._parentInnerPadding;\n }\n } else if (!menu.overlapTrigger) {\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n }\n positionStrategy.withPositions([{\n originX,\n originY,\n overlayX,\n overlayY,\n offsetY\n }, {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetY\n }, {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY\n }, {\n originX: originFallbackX,\n originY: originFallbackY,\n overlayX: overlayFallbackX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY\n }]);\n }\n /** Returns a stream that emits whenever an action that should close the menu occurs. */\n _menuClosingActions() {\n const backdrop = this._overlayRef.backdropClick();\n const detachments = this._overlayRef.detachments();\n const parentClose = this._parentMaterialMenu ? this._parentMaterialMenu.closed : of();\n const hover = this._parentMaterialMenu ? this._parentMaterialMenu._hovered().pipe(filter(active => active !== this._menuItemInstance), filter(() => this._menuOpen)) : of();\n return merge(backdrop, parentClose, hover, detachments);\n }\n /** Handles mouse presses on the trigger. */\n _handleMousedown(event) {\n if (!isFakeMousedownFromScreenReader(event)) {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the menu as opened by mouse in those cases.\n this._openedBy = event.button === 0 ? 'mouse' : undefined;\n // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n // we should prevent focus from moving onto it via click to avoid the\n // highlight from lingering on the menu item.\n if (this.triggersSubmenu()) {\n event.preventDefault();\n }\n }\n }\n /** Handles key presses on the trigger. */\n _handleKeydown(event) {\n const keyCode = event.keyCode;\n // Pressing enter on the trigger will trigger the click handler later.\n if (keyCode === ENTER || keyCode === SPACE) {\n this._openedBy = 'keyboard';\n }\n if (this.triggersSubmenu() && (keyCode === RIGHT_ARROW && this.dir === 'ltr' || keyCode === LEFT_ARROW && this.dir === 'rtl')) {\n this._openedBy = 'keyboard';\n this.openMenu();\n }\n }\n /** Handles click events on the trigger. */\n _handleClick(event) {\n if (this.triggersSubmenu()) {\n // Stop event propagation to avoid closing the parent menu.\n event.stopPropagation();\n this.openMenu();\n } else {\n this.toggleMenu();\n }\n }\n /** Handles the cases where the user hovers over the trigger. */\n _handleHover() {\n // Subscribe to changes in the hovered item in order to toggle the panel.\n if (!this.triggersSubmenu() || !this._parentMaterialMenu) {\n return;\n }\n this._hoverSubscription = this._parentMaterialMenu._hovered()\n // Since we might have multiple competing triggers for the same menu (e.g. a sub-menu\n // with different data and triggers), we have to delay it by a tick to ensure that\n // it won't be closed immediately after it is opened.\n .pipe(filter(active => active === this._menuItemInstance && !active.disabled), delay(0, asapScheduler)).subscribe(() => {\n this._openedBy = 'mouse';\n // If the same menu is used between multiple triggers, it might still be animating\n // while the new trigger tries to re-open it. Wait for the animation to finish\n // before doing so. Also interrupt if the user moves to another item.\n if (this.menu instanceof MatMenu && this.menu._isAnimating) {\n // We need the `delay(0)` here in order to avoid\n // 'changed after checked' errors in some cases. See #12194.\n this.menu._animationDone.pipe(take(1), delay(0, asapScheduler), takeUntil(this._parentMaterialMenu._hovered())).subscribe(() => this.openMenu());\n } else {\n this.openMenu();\n }\n });\n }\n /** Gets the portal that should be attached to the overlay. */\n _getPortal(menu) {\n // Note that we can avoid this check by keeping the portal on the menu panel.\n // While it would be cleaner, we'd have to introduce another required method on\n // `MatMenuPanel`, making it harder to consume.\n if (!this._portal || this._portal.templateRef !== menu.templateRef) {\n this._portal = new TemplatePortal(menu.templateRef, this._viewContainerRef);\n }\n return this._portal;\n }\n static {\n this.ɵfac = function MatMenuTrigger_Factory(t) {\n return new (t || MatMenuTrigger)(i0.ɵɵdirectiveInject(i1$1.Overlay), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(MAT_MENU_SCROLL_STRATEGY), i0.ɵɵdirectiveInject(MAT_MENU_PANEL, 8), i0.ɵɵdirectiveInject(MatMenuItem, 10), i0.ɵɵdirectiveInject(i3.Directionality, 8), i0.ɵɵdirectiveInject(i1.FocusMonitor), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatMenuTrigger,\n selectors: [[\"\", \"mat-menu-trigger-for\", \"\"], [\"\", \"matMenuTriggerFor\", \"\"]],\n hostAttrs: [1, \"mat-mdc-menu-trigger\"],\n hostVars: 3,\n hostBindings: function MatMenuTrigger_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatMenuTrigger_click_HostBindingHandler($event) {\n return ctx._handleClick($event);\n })(\"mousedown\", function MatMenuTrigger_mousedown_HostBindingHandler($event) {\n return ctx._handleMousedown($event);\n })(\"keydown\", function MatMenuTrigger_keydown_HostBindingHandler($event) {\n return ctx._handleKeydown($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-haspopup\", ctx.menu ? \"menu\" : null)(\"aria-expanded\", ctx.menuOpen)(\"aria-controls\", ctx.menuOpen ? ctx.menu.panelId : null);\n }\n },\n inputs: {\n _deprecatedMatMenuTriggerFor: [i0.ɵɵInputFlags.None, \"mat-menu-trigger-for\", \"_deprecatedMatMenuTriggerFor\"],\n menu: [i0.ɵɵInputFlags.None, \"matMenuTriggerFor\", \"menu\"],\n menuData: [i0.ɵɵInputFlags.None, \"matMenuTriggerData\", \"menuData\"],\n restoreFocus: [i0.ɵɵInputFlags.None, \"matMenuTriggerRestoreFocus\", \"restoreFocus\"]\n },\n outputs: {\n menuOpened: \"menuOpened\",\n onMenuOpen: \"onMenuOpen\",\n menuClosed: \"menuClosed\",\n onMenuClose: \"onMenuClose\"\n },\n exportAs: [\"matMenuTrigger\"],\n standalone: true\n });\n }\n }\n return MatMenuTrigger;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatMenuModule = /*#__PURE__*/(() => {\n class MatMenuModule {\n static {\n this.ɵfac = function MatMenuModule_Factory(t) {\n return new (t || MatMenuModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatMenuModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER],\n imports: [CommonModule, MatRippleModule, MatCommonModule, OverlayModule, CdkScrollableModule, MatCommonModule]\n });\n }\n }\n return MatMenuModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_MENU_CONTENT, MAT_MENU_DEFAULT_OPTIONS, MAT_MENU_PANEL, MAT_MENU_SCROLL_STRATEGY, MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER, MENU_PANEL_TOP_PADDING, MatMenu, MatMenuContent, MatMenuItem, MatMenuModule, MatMenuTrigger, fadeInItems, matMenuAnimations, transformMenu };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, inject, EventEmitter, ANIMATION_MODULE_TYPE, numberAttribute, Component, ChangeDetectionStrategy, ViewEncapsulation, Optional, Inject, Input, Output, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** Injection token to be used to override the default options for `mat-progress-bar`. */\nconst MAT_PROGRESS_BAR_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('MAT_PROGRESS_BAR_DEFAULT_OPTIONS');\n/**\n * Injection token used to provide the current location to `MatProgressBar`.\n * Used to handle server-side rendering and to stub out during unit tests.\n * @docs-private\n */\nconst MAT_PROGRESS_BAR_LOCATION = /*#__PURE__*/new InjectionToken('mat-progress-bar-location', {\n providedIn: 'root',\n factory: MAT_PROGRESS_BAR_LOCATION_FACTORY\n});\n/** @docs-private */\nfunction MAT_PROGRESS_BAR_LOCATION_FACTORY() {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\n return {\n // Note that this needs to be a function, rather than a property, because Angular\n // will only resolve it once, but we want the current path on each call.\n getPathname: () => _location ? _location.pathname + _location.search : ''\n };\n}\nlet MatProgressBar = /*#__PURE__*/(() => {\n class MatProgressBar {\n constructor(_elementRef, _ngZone, _changeDetectorRef, _animationMode, defaults) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** Flag that indicates whether NoopAnimations mode is set to true. */\n this._isNoopAnimation = false;\n this._defaultColor = 'primary';\n this._value = 0;\n this._bufferValue = 0;\n /**\n * Event emitted when animation of the primary progress bar completes. This event will not\n * be emitted when animations are disabled, nor will it be emitted for modes with continuous\n * animations (indeterminate and query).\n */\n this.animationEnd = new EventEmitter();\n this._mode = 'determinate';\n /** Event handler for `transitionend` events. */\n this._transitionendHandler = event => {\n if (this.animationEnd.observers.length === 0 || !event.target || !event.target.classList.contains('mdc-linear-progress__primary-bar')) {\n return;\n }\n if (this.mode === 'determinate' || this.mode === 'buffer') {\n this._ngZone.run(() => this.animationEnd.next({\n value: this.value\n }));\n }\n };\n this._isNoopAnimation = _animationMode === 'NoopAnimations';\n if (defaults) {\n if (defaults.color) {\n this.color = this._defaultColor = defaults.color;\n }\n this.mode = defaults.mode || this.mode;\n }\n }\n // TODO: should be typed as `ThemePalette` but internal apps pass in arbitrary strings.\n /** Theme palette color of the progress bar. */\n get color() {\n return this._color || this._defaultColor;\n }\n set color(value) {\n this._color = value;\n }\n /** Value of the progress bar. Defaults to zero. Mirrored to aria-valuenow. */\n get value() {\n return this._value;\n }\n set value(v) {\n this._value = clamp(v || 0);\n this._changeDetectorRef.markForCheck();\n }\n /** Buffer value of the progress bar. Defaults to zero. */\n get bufferValue() {\n return this._bufferValue || 0;\n }\n set bufferValue(v) {\n this._bufferValue = clamp(v || 0);\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Mode of the progress bar.\n *\n * Input must be one of these values: determinate, indeterminate, buffer, query, defaults to\n * 'determinate'.\n * Mirrored to mode attribute.\n */\n get mode() {\n return this._mode;\n }\n set mode(value) {\n // Note that we don't technically need a getter and a setter here,\n // but we use it to match the behavior of the existing mat-progress-bar.\n this._mode = value;\n this._changeDetectorRef.markForCheck();\n }\n ngAfterViewInit() {\n // Run outside angular so change detection didn't get triggered on every transition end\n // instead only on the animation that we care about (primary value bar's transitionend)\n this._ngZone.runOutsideAngular(() => {\n this._elementRef.nativeElement.addEventListener('transitionend', this._transitionendHandler);\n });\n }\n ngOnDestroy() {\n this._elementRef.nativeElement.removeEventListener('transitionend', this._transitionendHandler);\n }\n /** Gets the transform style that should be applied to the primary bar. */\n _getPrimaryBarTransform() {\n return `scaleX(${this._isIndeterminate() ? 1 : this.value / 100})`;\n }\n /** Gets the `flex-basis` value that should be applied to the buffer bar. */\n _getBufferBarFlexBasis() {\n return `${this.mode === 'buffer' ? this.bufferValue : 100}%`;\n }\n /** Returns whether the progress bar is indeterminate. */\n _isIndeterminate() {\n return this.mode === 'indeterminate' || this.mode === 'query';\n }\n static {\n this.ɵfac = function MatProgressBar_Factory(t) {\n return new (t || MatProgressBar)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(MAT_PROGRESS_BAR_DEFAULT_OPTIONS, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatProgressBar,\n selectors: [[\"mat-progress-bar\"]],\n hostAttrs: [\"role\", \"progressbar\", \"aria-valuemin\", \"0\", \"aria-valuemax\", \"100\", \"tabindex\", \"-1\", 1, \"mat-mdc-progress-bar\", \"mdc-linear-progress\"],\n hostVars: 10,\n hostBindings: function MatProgressBar_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-valuenow\", ctx._isIndeterminate() ? null : ctx.value)(\"mode\", ctx.mode);\n i0.ɵɵclassMap(\"mat-\" + ctx.color);\n i0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._isNoopAnimation)(\"mdc-linear-progress--animation-ready\", !ctx._isNoopAnimation)(\"mdc-linear-progress--indeterminate\", ctx._isIndeterminate());\n }\n },\n inputs: {\n color: \"color\",\n value: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"value\", \"value\", numberAttribute],\n bufferValue: [i0.ɵɵInputFlags.HasDecoratorInputTransform, \"bufferValue\", \"bufferValue\", numberAttribute],\n mode: \"mode\"\n },\n outputs: {\n animationEnd: \"animationEnd\"\n },\n exportAs: [\"matProgressBar\"],\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n decls: 7,\n vars: 4,\n consts: [[\"aria-hidden\", \"true\", 1, \"mdc-linear-progress__buffer\"], [1, \"mdc-linear-progress__buffer-bar\"], [1, \"mdc-linear-progress__buffer-dots\"], [\"aria-hidden\", \"true\", 1, \"mdc-linear-progress__bar\", \"mdc-linear-progress__primary-bar\"], [1, \"mdc-linear-progress__bar-inner\"], [\"aria-hidden\", \"true\", 1, \"mdc-linear-progress__bar\", \"mdc-linear-progress__secondary-bar\"]],\n template: function MatProgressBar_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵelement(1, \"div\", 1)(2, \"div\", 2);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(3, \"div\", 3);\n i0.ɵɵelement(4, \"span\", 4);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(5, \"div\", 5);\n i0.ɵɵelement(6, \"span\", 4);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵstyleProp(\"flex-basis\", ctx._getBufferBarFlexBasis());\n i0.ɵɵadvance(2);\n i0.ɵɵstyleProp(\"transform\", ctx._getPrimaryBarTransform());\n }\n },\n styles: [\"@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(var(--mdc-linear-progress-primary-half))}100%{transform:translateX(var(--mdc-linear-progress-primary-full))}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(var(--mdc-linear-progress-secondary-quarter))}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(var(--mdc-linear-progress-secondary-half))}100%{transform:translateX(var(--mdc-linear-progress-secondary-full))}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(var(--mdc-linear-progress-primary-half-neg))}100%{transform:translateX(var(--mdc-linear-progress-primary-full-neg))}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(var(--mdc-linear-progress-secondary-quarter-neg))}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(var(--mdc-linear-progress-secondary-half-neg))}100%{transform:translateX(var(--mdc-linear-progress-secondary-full-neg))}}@keyframes mdc-linear-progress-buffering-reverse{from{transform:translateX(-10px)}}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid rgba(0,0,0,0);overflow-x:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}@media screen and (forced-colors: active){.mdc-linear-progress{outline-color:CanvasText}}.mdc-linear-progress__bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid}.mdc-linear-progress__buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden}.mdc-linear-progress__buffer-dots{background-repeat:repeat-x;flex:auto;transform:rotate(180deg);-webkit-mask-image:url(\\\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E\\\");mask-image:url(\\\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E\\\");animation:mdc-linear-progress-buffering 250ms infinite linear}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation:mdc-linear-progress-primary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-primary-indeterminate-scale 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation:mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress:not([dir=ltr]) .mdc-linear-progress__bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]) .mdc-linear-progress__bar{right:0;-webkit-transform-origin:center right;transform-origin:center right}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress:not([dir=ltr]) .mdc-linear-progress__buffer-dots,.mdc-linear-progress[dir=rtl]:not([dir=ltr]) .mdc-linear-progress__buffer-dots{animation:mdc-linear-progress-buffering-reverse 250ms infinite linear;transform:rotate(0)}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}.mdc-linear-progress--closed{opacity:0}.mdc-linear-progress--closed-animation-off .mdc-linear-progress__buffer-dots{animation:none}.mdc-linear-progress--closed-animation-off.mdc-linear-progress--indeterminate .mdc-linear-progress__bar,.mdc-linear-progress--closed-animation-off.mdc-linear-progress--indeterminate .mdc-linear-progress__bar .mdc-linear-progress__bar-inner{animation:none}@keyframes mdc-linear-progress-buffering{from{transform:rotate(180deg) translateX(calc(var(--mdc-linear-progress-track-height) * -2.5))}}.mdc-linear-progress__bar-inner{border-color:var(--mdc-linear-progress-active-indicator-color)}.mdc-linear-progress__buffer-dots{background-color:var(--mdc-linear-progress-track-color)}@media(forced-colors: active){.mdc-linear-progress__buffer-dots{background-color:ButtonBorder}}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.mdc-linear-progress__buffer-dots{background-color:rgba(0,0,0,0);background-image:url(\\\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='none slice'%3E%3Ccircle cx='1' cy='1' r='1' fill='rgba(244, 67, 54, 0.25)'/%3E%3C/svg%3E\\\")}}.mdc-linear-progress__buffer-bar{background-color:var(--mdc-linear-progress-track-color)}.mdc-linear-progress{height:max(var(--mdc-linear-progress-track-height), var(--mdc-linear-progress-active-indicator-height))}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.mdc-linear-progress{height:4px}}.mdc-linear-progress__bar{height:var(--mdc-linear-progress-active-indicator-height)}.mdc-linear-progress__bar-inner{border-top-width:var(--mdc-linear-progress-active-indicator-height)}.mdc-linear-progress__buffer{height:var(--mdc-linear-progress-track-height)}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.mdc-linear-progress__buffer-dots{background-size:10px var(--mdc-linear-progress-track-height)}}.mdc-linear-progress__buffer{border-radius:var(--mdc-linear-progress-track-shape)}.mat-mdc-progress-bar{display:block;text-align:start;--mdc-linear-progress-primary-half: 83.67142%;--mdc-linear-progress-primary-full: 200.611057%;--mdc-linear-progress-secondary-quarter: 37.651913%;--mdc-linear-progress-secondary-half: 84.386165%;--mdc-linear-progress-secondary-full: 160.277782%;--mdc-linear-progress-primary-half-neg: -83.67142%;--mdc-linear-progress-primary-full-neg: -200.611057%;--mdc-linear-progress-secondary-quarter-neg: -37.651913%;--mdc-linear-progress-secondary-half-neg: -84.386165%;--mdc-linear-progress-secondary-full-neg: -160.277782%}.mat-mdc-progress-bar[mode=query]{transform:scaleX(-1)}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-dots,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__secondary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__bar-inner.mdc-linear-progress__bar-inner{animation:none}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-bar{transition:transform 1ms}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatProgressBar;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Clamps a value to be between two numbers, by default 0 and 100. */\nfunction clamp(v, min = 0, max = 100) {\n return Math.max(min, Math.min(max, v));\n}\nlet MatProgressBarModule = /*#__PURE__*/(() => {\n class MatProgressBarModule {\n static {\n this.ɵfac = function MatProgressBarModule_Factory(t) {\n return new (t || MatProgressBarModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatProgressBarModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule]\n });\n }\n }\n return MatProgressBarModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PROGRESS_BAR_DEFAULT_OPTIONS, MAT_PROGRESS_BAR_LOCATION, MAT_PROGRESS_BAR_LOCATION_FACTORY, MatProgressBar, MatProgressBarModule };\n","import { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, Inject, InjectionToken, EventEmitter, Directive, Optional, Input, Output, NgModule } from '@angular/core';\n\n/**\n * A pending copy-to-clipboard operation.\n *\n * The implementation of copying text to the clipboard modifies the DOM and\n * forces a re-layout. This re-layout can take too long if the string is large,\n * causing the execCommand('copy') to happen too long after the user clicked.\n * This results in the browser refusing to copy. This object lets the\n * re-layout happen in a separate tick from copying by providing a copy function\n * that can be called later.\n *\n * Destroy must be called when no longer in use, regardless of whether `copy` is\n * called.\n */\nclass PendingCopy {\n constructor(text, _document) {\n this._document = _document;\n const textarea = this._textarea = this._document.createElement('textarea');\n const styles = textarea.style;\n // Hide the element for display and accessibility. Set a fixed position so the page layout\n // isn't affected. We use `fixed` with `top: 0`, because focus is moved into the textarea\n // for a split second and if it's off-screen, some browsers will attempt to scroll it into view.\n styles.position = 'fixed';\n styles.top = styles.opacity = '0';\n styles.left = '-999em';\n textarea.setAttribute('aria-hidden', 'true');\n textarea.value = text;\n // Making the textarea `readonly` prevents the screen from jumping on iOS Safari (see #25169).\n textarea.readOnly = true;\n // The element needs to be inserted into the fullscreen container, if the page\n // is in fullscreen mode, otherwise the browser won't execute the copy command.\n (this._document.fullscreenElement || this._document.body).appendChild(textarea);\n }\n /** Finishes copying the text. */\n copy() {\n const textarea = this._textarea;\n let successful = false;\n try {\n // Older browsers could throw if copy is not supported.\n if (textarea) {\n const currentFocus = this._document.activeElement;\n textarea.select();\n textarea.setSelectionRange(0, textarea.value.length);\n successful = this._document.execCommand('copy');\n if (currentFocus) {\n currentFocus.focus();\n }\n }\n } catch {\n // Discard error.\n // Initial setting of {@code successful} will represent failure here.\n }\n return successful;\n }\n /** Cleans up DOM changes used to perform the copy operation. */\n destroy() {\n const textarea = this._textarea;\n if (textarea) {\n textarea.remove();\n this._textarea = undefined;\n }\n }\n}\n\n/**\n * A service for copying text to the clipboard.\n */\nlet Clipboard = /*#__PURE__*/(() => {\n class Clipboard {\n constructor(document) {\n this._document = document;\n }\n /**\n * Copies the provided text into the user's clipboard.\n *\n * @param text The string to copy.\n * @returns Whether the operation was successful.\n */\n copy(text) {\n const pendingCopy = this.beginCopy(text);\n const successful = pendingCopy.copy();\n pendingCopy.destroy();\n return successful;\n }\n /**\n * Prepares a string to be copied later. This is useful for large strings\n * which take too long to successfully render and be copied in the same tick.\n *\n * The caller must call `destroy` on the returned `PendingCopy`.\n *\n * @param text The string to copy.\n * @returns the pending copy operation.\n */\n beginCopy(text) {\n return new PendingCopy(text, this._document);\n }\n static {\n this.ɵfac = function Clipboard_Factory(t) {\n return new (t || Clipboard)(i0.ɵɵinject(DOCUMENT));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Clipboard,\n factory: Clipboard.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return Clipboard;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Injection token that can be used to provide the default options to `CdkCopyToClipboard`. */\nconst CDK_COPY_TO_CLIPBOARD_CONFIG = /*#__PURE__*/new InjectionToken('CDK_COPY_TO_CLIPBOARD_CONFIG');\n/**\n * Provides behavior for a button that when clicked copies content into user's\n * clipboard.\n */\nlet CdkCopyToClipboard = /*#__PURE__*/(() => {\n class CdkCopyToClipboard {\n constructor(_clipboard, _ngZone, config) {\n this._clipboard = _clipboard;\n this._ngZone = _ngZone;\n /** Content to be copied. */\n this.text = '';\n /**\n * How many times to attempt to copy the text. This may be necessary for longer text, because\n * the browser needs time to fill an intermediate textarea element and copy the content.\n */\n this.attempts = 1;\n /**\n * Emits when some text is copied to the clipboard. The\n * emitted value indicates whether copying was successful.\n */\n this.copied = new EventEmitter();\n /** Copies that are currently being attempted. */\n this._pending = new Set();\n if (config && config.attempts != null) {\n this.attempts = config.attempts;\n }\n }\n /** Copies the current text to the clipboard. */\n copy(attempts = this.attempts) {\n if (attempts > 1) {\n let remainingAttempts = attempts;\n const pending = this._clipboard.beginCopy(this.text);\n this._pending.add(pending);\n const attempt = () => {\n const successful = pending.copy();\n if (!successful && --remainingAttempts && !this._destroyed) {\n // We use 1 for the timeout since it's more predictable when flushing in unit tests.\n this._currentTimeout = this._ngZone.runOutsideAngular(() => setTimeout(attempt, 1));\n } else {\n this._currentTimeout = null;\n this._pending.delete(pending);\n pending.destroy();\n this.copied.emit(successful);\n }\n };\n attempt();\n } else {\n this.copied.emit(this._clipboard.copy(this.text));\n }\n }\n ngOnDestroy() {\n if (this._currentTimeout) {\n clearTimeout(this._currentTimeout);\n }\n this._pending.forEach(copy => copy.destroy());\n this._pending.clear();\n this._destroyed = true;\n }\n static {\n this.ɵfac = function CdkCopyToClipboard_Factory(t) {\n return new (t || CdkCopyToClipboard)(i0.ɵɵdirectiveInject(Clipboard), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(CDK_COPY_TO_CLIPBOARD_CONFIG, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkCopyToClipboard,\n selectors: [[\"\", \"cdkCopyToClipboard\", \"\"]],\n hostBindings: function CdkCopyToClipboard_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function CdkCopyToClipboard_click_HostBindingHandler() {\n return ctx.copy();\n });\n }\n },\n inputs: {\n text: [i0.ɵɵInputFlags.None, \"cdkCopyToClipboard\", \"text\"],\n attempts: [i0.ɵɵInputFlags.None, \"cdkCopyToClipboardAttempts\", \"attempts\"]\n },\n outputs: {\n copied: \"cdkCopyToClipboardCopied\"\n },\n standalone: true\n });\n }\n }\n return CdkCopyToClipboard;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ClipboardModule = /*#__PURE__*/(() => {\n class ClipboardModule {\n static {\n this.ɵfac = function ClipboardModule_Factory(t) {\n return new (t || ClipboardModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: ClipboardModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return ClipboardModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CDK_COPY_TO_CLIPBOARD_CONFIG, CdkCopyToClipboard, Clipboard, ClipboardModule, PendingCopy };\n","import * as i0 from '@angular/core';\nimport { NgModule, Injectable, Inject, EventEmitter, Directive, Input, Output, Component, Pipe, ViewChildren, HostBinding, HostListener, ViewChild, ViewEncapsulation } from '@angular/core';\nimport * as i2 from '@highfieldabc/angular-highfieldauth';\nimport { AngularHighfieldauthModule } from '@highfieldabc/angular-highfieldauth';\nimport * as i4$1 from '@highfieldabc/angular-highfieldcommon';\nimport { AngularHighfieldcommonModule } from '@highfieldabc/angular-highfieldcommon';\nimport * as i3 from '@highfieldabc/angular-highfieldlayout';\nimport { AngularHighfieldlayoutModule, LoginComponent } from '@highfieldabc/angular-highfieldlayout';\nimport * as i1 from '@highfieldabc/angular-highfieldwebapi';\nimport { AngularHighfieldwebapiModule } from '@highfieldabc/angular-highfieldwebapi';\nimport * as i3$1 from '@angular/common';\nimport { Location, LocationStrategy, PathLocationStrategy, CommonModule } from '@angular/common';\nimport * as i1$2 from '@angular/router';\nimport { NavigationEnd, RouterModule, NavigationStart } from '@angular/router';\nimport { catchError, of, Subject, Observable, BehaviorSubject, from, EMPTY, concatMap } from 'rxjs';\nimport { BlobServiceClient, AnonymousCredential } from '@azure/storage-blob';\nimport * as ClientZip from 'client-zip';\nimport { mergeMap, map, toArray, expand, distinct, switchMap } from 'rxjs/operators';\nimport * as i1$1 from '@angular/common/http';\nimport { HttpClientModule } from '@angular/common/http';\nimport * as i4 from '@angular/forms';\nimport { FormsModule } from '@angular/forms';\nimport * as i2$1 from '@angular/material/menu';\nimport { MatMenuModule } from '@angular/material/menu';\nimport * as i3$2 from '@angular/material/dialog';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport * as i6 from '@angular/material/progress-bar';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport * as i8 from '@angular/material/progress-spinner';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport * as i5 from '@angular/cdk/clipboard';\nimport { ClipboardModule } from '@angular/cdk/clipboard';\nfunction NodeActionComponent_ng_container_0_button_7_Template(rf, ctx) {\n if (rf & 1) {\n const _r6 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 9);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_button_7_Template_button_click_0_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r6);\n const action_r4 = restoredCtx.$implicit;\n const ctx_r5 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r5.onActionClicked(action_r4));\n });\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const action_r4 = ctx.$implicit;\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(action_r4);\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r23 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 23);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_1_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r23);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r21 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r21.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 24);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r26 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 25);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_2_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r26);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r24 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r24.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 26);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r29 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 27);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_3_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r29);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r27 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r27.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 28);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_4_Template(rf, ctx) {\n if (rf & 1) {\n const _r32 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 29);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_4_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r32);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r30 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r30.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 30);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r35 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 31);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_5_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r35);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r33 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r33.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 32);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_6_Template(rf, ctx) {\n if (rf & 1) {\n const _r38 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 33);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_6_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r38);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r36 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r36.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 34);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_7_Template(rf, ctx) {\n if (rf & 1) {\n const _r41 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 35);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_7_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r41);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r39 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r39.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 36);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_8_Template(rf, ctx) {\n if (rf & 1) {\n const _r44 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 37);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_8_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r44);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r42 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r42.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 38);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_9_Template(rf, ctx) {\n if (rf & 1) {\n const _r47 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 39);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_9_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r47);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r45 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r45.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 40);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_10_Template(rf, ctx) {\n if (rf & 1) {\n const _r50 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 41);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_10_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r50);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r48 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r48.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 42);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_11_Template(rf, ctx) {\n if (rf & 1) {\n const _r53 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 43);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_11_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r53);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r51 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r51.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 44);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_12_Template(rf, ctx) {\n if (rf & 1) {\n const _r56 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 45);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_12_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r56);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r54 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r54.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 46);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_button_13_Template(rf, ctx) {\n if (rf & 1) {\n const _r59 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 47);\n i0.ɵɵlistener(\"click\", function NodeActionComponent_ng_container_0_div_8_button_13_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r59);\n const action_r7 = i0.ɵɵnextContext().$implicit;\n const ctx_r57 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r57.onActionClicked(action_r7));\n });\n i0.ɵɵelement(1, \"i\", 44);\n i0.ɵɵelementEnd();\n }\n}\nfunction NodeActionComponent_ng_container_0_div_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\");\n i0.ɵɵtemplate(1, NodeActionComponent_ng_container_0_div_8_button_1_Template, 2, 0, \"button\", 10)(2, NodeActionComponent_ng_container_0_div_8_button_2_Template, 2, 0, \"button\", 11)(3, NodeActionComponent_ng_container_0_div_8_button_3_Template, 2, 0, \"button\", 12)(4, NodeActionComponent_ng_container_0_div_8_button_4_Template, 2, 0, \"button\", 13)(5, NodeActionComponent_ng_container_0_div_8_button_5_Template, 2, 0, \"button\", 14)(6, NodeActionComponent_ng_container_0_div_8_button_6_Template, 2, 0, \"button\", 15)(7, NodeActionComponent_ng_container_0_div_8_button_7_Template, 2, 0, \"button\", 16)(8, NodeActionComponent_ng_container_0_div_8_button_8_Template, 2, 0, \"button\", 17)(9, NodeActionComponent_ng_container_0_div_8_button_9_Template, 2, 0, \"button\", 18)(10, NodeActionComponent_ng_container_0_div_8_button_10_Template, 2, 0, \"button\", 19)(11, NodeActionComponent_ng_container_0_div_8_button_11_Template, 2, 0, \"button\", 20)(12, NodeActionComponent_ng_container_0_div_8_button_12_Template, 2, 0, \"button\", 21)(13, NodeActionComponent_ng_container_0_div_8_button_13_Template, 2, 0, \"button\", 22);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const action_r7 = ctx.$implicit;\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Add File\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Add Folder\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Open Folder\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Download All\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Download\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Play Video\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Play Audio\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"View Image\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Upload New Version\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"View Previous Versions\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Delete File\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Delete Contents\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", action_r7 == \"Delete Folder\");\n }\n}\nfunction NodeActionComponent_ng_container_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelementStart(1, \"div\", 1)(2, \"div\", 2)(3, \"button\", 3);\n i0.ɵɵelement(4, \"i\", 4);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(5, \"mat-menu\", 5, 6);\n i0.ɵɵtemplate(7, NodeActionComponent_ng_container_0_button_7_Template, 2, 1, \"button\", 7);\n i0.ɵɵelementEnd()();\n i0.ɵɵtemplate(8, NodeActionComponent_ng_container_0_div_8_Template, 14, 13, \"div\", 8);\n i0.ɵɵelementEnd();\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const _r1 = i0.ɵɵreference(6);\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"matMenuTriggerFor\", _r1);\n i0.ɵɵadvance(4);\n i0.ɵɵproperty(\"ngForOf\", ctx_r0.actions);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx_r0.actions);\n }\n}\nfunction TreeListComponent_Conditional_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"th\", 13);\n i0.ɵɵtext(1, \"Type\");\n i0.ɵɵelementEnd();\n }\n}\nfunction TreeListComponent_Conditional_13_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"th\", 14);\n i0.ɵɵtext(1, \"Version\");\n i0.ɵɵelementEnd();\n }\n}\nfunction TreeListComponent_Conditional_14_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"th\", 15);\n i0.ɵɵtext(1, \"Uploaded by\");\n i0.ɵɵelementEnd();\n }\n}\nfunction TreeListComponent_Conditional_15_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"th\", 16);\n i0.ɵɵtext(1, \"Upload date\");\n i0.ɵɵelementEnd();\n }\n}\nfunction TreeListComponent_Conditional_16_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"th\", 17);\n i0.ɵɵtext(1, \"Actions\");\n i0.ɵɵelementEnd();\n }\n}\nfunction TreeListComponent_tr_18_Conditional_3_div_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 22)(1, \"span\", 23);\n i0.ɵɵelement(2, \"i\");\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext(2).$implicit;\n i0.ɵɵattribute(\"aria-expanded\", node_r6.expanded);\n i0.ɵɵadvance(2);\n i0.ɵɵclassMapInterpolate1(\"\", node_r6.icon, \" fa-lg\");\n }\n}\nfunction TreeListComponent_tr_18_Conditional_3_ng_container_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r19 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelementStart(1, \"div\", 22)(2, \"span\", 24);\n i0.ɵɵlistener(\"click\", function TreeListComponent_tr_18_Conditional_3_ng_container_2_Template_span_click_2_listener() {\n i0.ɵɵrestoreView(_r19);\n const node_r6 = i0.ɵɵnextContext(2).$implicit;\n const ctx_r17 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r17.emitAction(node_r6.id, \"Open Folder\"));\n });\n i0.ɵɵelement(3, \"i\");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext(2).$implicit;\n i0.ɵɵadvance(3);\n i0.ɵɵclassMap(node_r6.icon);\n }\n}\nfunction TreeListComponent_tr_18_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"td\", 13);\n i0.ɵɵtemplate(1, TreeListComponent_tr_18_Conditional_3_div_1_Template, 3, 4, \"div\", 19)(2, TreeListComponent_tr_18_Conditional_3_ng_container_2_Template, 4, 3, \"ng-container\", 20);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext().$implicit;\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", node_r6.icon !== \"fa-solid fa-folder fa-xl\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", node_r6.children && node_r6.icon === \"fa-solid fa-folder fa-xl\");\n }\n}\nfunction TreeListComponent_tr_18_div_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r24 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 22)(1, \"span\", 24);\n i0.ɵɵlistener(\"click\", function TreeListComponent_tr_18_div_5_Template_span_click_1_listener() {\n i0.ɵɵrestoreView(_r24);\n const node_r6 = i0.ɵɵnextContext().$implicit;\n const ctx_r22 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r22.emitAction(node_r6.id, \"Details\"));\n });\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd();\n i0.ɵɵtext(3, \"\\xA0\\xA0 \");\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext().$implicit;\n i0.ɵɵattribute(\"aria-expanded\", node_r6.expanded);\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate1(\"\\xA0\", node_r6.name, \"\");\n }\n}\nfunction TreeListComponent_tr_18_ng_container_6_Template(rf, ctx) {\n if (rf & 1) {\n const _r28 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelementStart(1, \"div\", 22)(2, \"span\", 24);\n i0.ɵɵlistener(\"click\", function TreeListComponent_tr_18_ng_container_6_Template_span_click_2_listener() {\n i0.ɵɵrestoreView(_r28);\n const node_r6 = i0.ɵɵnextContext().$implicit;\n const ctx_r26 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r26.emitAction(node_r6.id, \"Open Folder\"));\n });\n i0.ɵɵtext(3);\n i0.ɵɵelementEnd();\n i0.ɵɵtext(4, \"\\xA0\\xA0 \");\n i0.ɵɵelementEnd();\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext().$implicit;\n i0.ɵɵadvance(3);\n i0.ɵɵtextInterpolate1(\"\\xA0\", node_r6.name, \"\");\n }\n}\nfunction TreeListComponent_tr_18_Conditional_7_ng_container_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtext(1);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext(2).$implicit;\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", node_r6.versionCount, \" \");\n }\n}\nfunction TreeListComponent_tr_18_Conditional_7_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"td\", 14);\n i0.ɵɵtemplate(1, TreeListComponent_tr_18_Conditional_7_ng_container_1_Template, 2, 1, \"ng-container\", 20);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext().$implicit;\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", node_r6.icon !== \"fa-solid fa-folder fa-xl\");\n }\n}\nfunction TreeListComponent_tr_18_Conditional_8_ng_container_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtext(1);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext(2).$implicit;\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", node_r6.uploadedByName, \" \");\n }\n}\nfunction TreeListComponent_tr_18_Conditional_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"td\", 15);\n i0.ɵɵtemplate(1, TreeListComponent_tr_18_Conditional_8_ng_container_1_Template, 2, 1, \"ng-container\", 20);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext().$implicit;\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", node_r6.icon !== \"fa-solid fa-folder fa-xl\");\n }\n}\nfunction TreeListComponent_tr_18_Conditional_9_ng_container_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtext(1);\n i0.ɵɵpipe(2, \"date\");\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext(2).$implicit;\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", i0.ɵɵpipeBind2(2, 1, node_r6.lastUploadedDate + \"Z\", \"dd/MM/yyyy HH:mm:ss a\"), \" \");\n }\n}\nfunction TreeListComponent_tr_18_Conditional_9_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"td\", 16);\n i0.ɵɵtemplate(1, TreeListComponent_tr_18_Conditional_9_ng_container_1_Template, 3, 4, \"ng-container\", 20);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext().$implicit;\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", node_r6.icon !== \"fa-solid fa-folder fa-xl\");\n }\n}\nfunction TreeListComponent_tr_18_Conditional_10_Template(rf, ctx) {\n if (rf & 1) {\n const _r41 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"td\", 25)(1, \"app-node-action\", 26);\n i0.ɵɵlistener(\"actionClick\", function TreeListComponent_tr_18_Conditional_10_Template_app_node_action_actionClick_1_listener($event) {\n i0.ɵɵrestoreView(_r41);\n const node_r6 = i0.ɵɵnextContext().$implicit;\n const ctx_r39 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r39.emitAction(node_r6.id, $event));\n });\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const node_r6 = i0.ɵɵnextContext().$implicit;\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"actions\", node_r6.actions);\n }\n}\nfunction TreeListComponent_tr_18_Template(rf, ctx) {\n if (rf & 1) {\n const _r44 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"tr\")(1, \"td\", 13)(2, \"input\", 5);\n i0.ɵɵtwoWayListener(\"ngModelChange\", function TreeListComponent_tr_18_Template_input_ngModelChange_2_listener($event) {\n const restoredCtx = i0.ɵɵrestoreView(_r44);\n const node_r6 = restoredCtx.$implicit;\n i0.ɵɵtwoWayBindingSet(node_r6.selected, $event) || (node_r6.selected = $event);\n return i0.ɵɵresetView($event);\n });\n i0.ɵɵlistener(\"change\", function TreeListComponent_tr_18_Template_input_change_2_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r44);\n const node_r6 = restoredCtx.$implicit;\n const ctx_r45 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r45.onSelectionChange(node_r6));\n });\n i0.ɵɵelementEnd()();\n i0.ɵɵtemplate(3, TreeListComponent_tr_18_Conditional_3_Template, 3, 2, \"td\", 6);\n i0.ɵɵelementStart(4, \"td\", 18);\n i0.ɵɵtemplate(5, TreeListComponent_tr_18_div_5_Template, 4, 2, \"div\", 19)(6, TreeListComponent_tr_18_ng_container_6_Template, 5, 1, \"ng-container\", 20);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(7, TreeListComponent_tr_18_Conditional_7_Template, 2, 1, \"td\", 8)(8, TreeListComponent_tr_18_Conditional_8_Template, 2, 1, \"td\", 9)(9, TreeListComponent_tr_18_Conditional_9_Template, 2, 1, \"td\", 10)(10, TreeListComponent_tr_18_Conditional_10_Template, 2, 1, \"td\", 21);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const node_r6 = ctx.$implicit;\n const ctx_r5 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵtwoWayProperty(\"ngModel\", node_r6.selected);\n i0.ɵɵadvance();\n i0.ɵɵconditional(3, ctx_r5.configuration.showTypeColumn ? 3 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", node_r6.icon !== \"fa-solid fa-folder fa-xl\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", node_r6.children && node_r6.icon === \"fa-solid fa-folder fa-xl\");\n i0.ɵɵadvance();\n i0.ɵɵconditional(7, ctx_r5.configuration.showVersionColumn ? 7 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(8, ctx_r5.configuration.showUploadedByColumn ? 8 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(9, ctx_r5.configuration.showUploadedDateColumn ? 9 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(10, ctx_r5.configuration.showActionColumn ? 10 : -1);\n }\n}\nfunction AddFolderComponent_div_11_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 12);\n i0.ɵɵelement(1, \"i\", 13);\n i0.ɵɵtext(2, \" \\xA0 Folder Name is required. \");\n i0.ɵɵelementEnd();\n }\n}\nfunction AddFolderComponent_div_12_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 12);\n i0.ɵɵelement(1, \"i\", 13);\n i0.ɵɵtext(2, \" \\xA0 Folder Name must be less than 255 characters. \");\n i0.ɵɵelementEnd();\n }\n}\nfunction AddFolderComponent_button_14_Template(rf, ctx) {\n if (rf & 1) {\n const _r5 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 14);\n i0.ɵɵlistener(\"click\", function AddFolderComponent_button_14_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r5);\n const ctx_r4 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r4.save());\n });\n i0.ɵɵelement(1, \"i\", 15);\n i0.ɵɵtext(2, \" \\xA0 Save \");\n i0.ɵɵelementEnd();\n }\n}\nfunction FileUploadComponent_div_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r7 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 11);\n i0.ɵɵlistener(\"filesChangeEmitter\", function FileUploadComponent_div_3_Template_div_filesChangeEmitter_0_listener($event) {\n i0.ɵɵrestoreView(_r7);\n const ctx_r6 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r6.filesSelectedByDrop($event));\n });\n i0.ɵɵelementStart(1, \"div\", 12);\n i0.ɵɵelement(2, \"i\", 13)(3, \"br\");\n i0.ɵɵelementStart(4, \"p\", 14);\n i0.ɵɵtext(5, \"Drag and drop files here\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(6, \"p\", 14);\n i0.ɵɵtext(7, \"or\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(8, \"input\", 15);\n i0.ɵɵlistener(\"change\", function FileUploadComponent_div_3_Template_input_change_8_listener($event) {\n i0.ɵɵrestoreView(_r7);\n const ctx_r8 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r8.filesSelectedByClick($event));\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(9, \"label\", 16)(10, \"span\", 17);\n i0.ɵɵtext(11, \"Browse for files\");\n i0.ɵɵelementEnd()()()();\n }\n}\nfunction FileUploadComponent_div_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\")(1, \"div\", 18)(2, \"div\", 19);\n i0.ɵɵelement(3, \"i\", 20);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"div\", 21)(5, \"h5\", 22)(6, \"strong\");\n i0.ɵɵtext(7, \"Warning\");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(8, \"p\", 14);\n i0.ɵɵtext(9, \" Your files are being submitted. Please do not close this window or click the Back button on your browser. Please wait until the progression bar has completed and closed automatically. \");\n i0.ɵɵelementEnd()()()();\n }\n}\nfunction FileUploadComponent_button_7_Template(rf, ctx) {\n if (rf & 1) {\n const _r10 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 23);\n i0.ɵɵlistener(\"click\", function FileUploadComponent_button_7_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r10);\n const ctx_r9 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r9.upload());\n });\n i0.ɵɵelement(1, \"i\", 24);\n i0.ɵɵtext(2, \" \\xA0 Upload\");\n i0.ɵɵelementEnd();\n }\n}\nfunction FileUploadComponent_button_9_Template(rf, ctx) {\n if (rf & 1) {\n const _r12 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 25);\n i0.ɵɵlistener(\"click\", function FileUploadComponent_button_9_Template_button_click_0_listener($event) {\n i0.ɵɵrestoreView(_r12);\n const ctx_r11 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r11.removeAllFiles($event));\n });\n i0.ɵɵelement(1, \"i\", 26);\n i0.ɵɵtext(2, \" \\xA0 Clear All\");\n i0.ɵɵelementEnd();\n }\n}\nfunction FileUploadComponent_div_10_ng_container_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r17 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelementStart(1, \"div\", 28)(2, \"div\", 29)(3, \"div\", 30)(4, \"div\", 31)(5, \"p\", 14);\n i0.ɵɵtext(6);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(7, \"p\", 32);\n i0.ɵɵtext(8);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(9, \"button\", 33);\n i0.ɵɵlistener(\"click\", function FileUploadComponent_div_10_ng_container_1_Template_button_click_9_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r17);\n const i_r15 = restoredCtx.index;\n const ctx_r16 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r16.removeSingleFile(i_r15));\n });\n i0.ɵɵelement(10, \"i\", 34);\n i0.ɵɵelementEnd()()()();\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const item_r14 = ctx.$implicit;\n i0.ɵɵadvance(6);\n i0.ɵɵtextInterpolate(item_r14.file.name);\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate1(\"\", (item_r14.file.size / 1024 / 1024).toFixed(2), \" MB\");\n }\n}\nfunction FileUploadComponent_div_10_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\");\n i0.ɵɵtemplate(1, FileUploadComponent_div_10_ng_container_1_Template, 11, 2, \"ng-container\", 27);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r4 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx_r4.filesToUpload);\n }\n}\nfunction FileUploadComponent_ng_container_11_ng_container_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelement(1, \"div\", 35);\n i0.ɵɵelementStart(2, \"div\", 36)(3, \"div\", 37)(4, \"p\", 14);\n i0.ɵɵtext(5);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(6, \"p\", 14)(7, \"strong\");\n i0.ɵɵtext(8);\n i0.ɵɵelementEnd()()();\n i0.ɵɵelementStart(9, \"div\");\n i0.ɵɵelement(10, \"mat-progress-bar\", 38);\n i0.ɵɵelementEnd();\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const upload_r19 = ctx.$implicit;\n i0.ɵɵadvance(5);\n i0.ɵɵtextInterpolate(upload_r19 == null ? null : upload_r19.file == null ? null : upload_r19.file.name);\n i0.ɵɵadvance(3);\n i0.ɵɵtextInterpolate1(\"\", upload_r19 == null ? null : upload_r19.progress, \"%\");\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"value\", upload_r19 == null ? null : upload_r19.progress)(\"color\", \"success\");\n }\n}\nfunction FileUploadComponent_ng_container_11_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtemplate(1, FileUploadComponent_ng_container_11_ng_container_1_Template, 11, 4, \"ng-container\", 27);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r5 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx_r5.filesToUpload);\n }\n}\nfunction FilePreviousVersionsComponent_table_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r3 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"table\", 4)(1, \"tbody\")(2, \"tr\")(3, \"td\");\n i0.ɵɵtext(4, \"File name:\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(5, \"td\");\n i0.ɵɵtext(6);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(7, \"tr\")(8, \"td\");\n i0.ɵɵtext(9, \"Version number: \");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(10, \"td\");\n i0.ɵɵtext(11);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(12, \"tr\")(13, \"td\");\n i0.ɵɵtext(14, \"Uploaded date:\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(15, \"td\");\n i0.ɵɵtext(16);\n i0.ɵɵpipe(17, \"date\");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(18, \"tr\")(19, \"td\", 5)(20, \"button\", 6);\n i0.ɵɵlistener(\"click\", function FilePreviousVersionsComponent_table_3_Template_button_click_20_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r3);\n const displayFileDetails_r1 = restoredCtx.$implicit;\n const ctx_r2 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r2.downloadPreviousFileVersion(displayFileDetails_r1.id));\n });\n i0.ɵɵelement(21, \"i\", 7);\n i0.ɵɵtext(22, \" \\xA0 Download file \");\n i0.ɵɵelementEnd()()()()();\n }\n if (rf & 2) {\n const displayFileDetails_r1 = ctx.$implicit;\n i0.ɵɵadvance(6);\n i0.ɵɵtextInterpolate1(\" \", displayFileDetails_r1.fileName, \"\");\n i0.ɵɵadvance(5);\n i0.ɵɵtextInterpolate(displayFileDetails_r1.versionNumber);\n i0.ɵɵadvance(5);\n i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(17, 3, displayFileDetails_r1.uploadedDate + \"Z\", \"dd/MM/yyyy HH:mm:ss a\"));\n }\n}\nfunction UploadedFilesComponent_Conditional_1_ng_container_1_button_1_ng_container_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelement(1, \"i\", 16);\n i0.ɵɵelementContainerEnd();\n }\n}\nconst _c0 = a0 => ({\n \"fa-solid fa-house\": a0\n});\nfunction UploadedFilesComponent_Conditional_1_ng_container_1_button_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r14 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 14);\n i0.ɵɵlistener(\"click\", function UploadedFilesComponent_Conditional_1_ng_container_1_button_1_Template_button_click_0_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r14);\n const crumb_r9 = restoredCtx.$implicit;\n const ctx_r13 = i0.ɵɵnextContext(3);\n return i0.ɵɵresetView(ctx_r13.onOpenFolder(crumb_r9.id));\n });\n i0.ɵɵtext(1);\n i0.ɵɵelement(2, \"i\", 15);\n i0.ɵɵtemplate(3, UploadedFilesComponent_Conditional_1_ng_container_1_button_1_ng_container_3_Template, 2, 0, \"ng-container\", 9);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const crumb_r9 = ctx.$implicit;\n const i_r10 = ctx.index;\n const c_r11 = ctx.count;\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", crumb_r9.name, \"\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngClass\", i0.ɵɵpureFunction1(3, _c0, i_r10 == 0));\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", i_r10 < c_r11);\n }\n}\nfunction UploadedFilesComponent_Conditional_1_ng_container_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0, 12);\n i0.ɵɵtemplate(1, UploadedFilesComponent_Conditional_1_ng_container_1_button_1_Template, 4, 5, \"button\", 13);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r7 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx_r7.breadCrumbs.slice().reverse());\n }\n}\nfunction UploadedFilesComponent_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 10);\n i0.ɵɵtemplate(1, UploadedFilesComponent_Conditional_1_ng_container_1_Template, 2, 1, \"ng-container\", 11);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx_r0.breadCrumbs && ctx_r0.breadCrumbs.length > 0);\n }\n}\nfunction UploadedFilesComponent_button_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r16 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 17);\n i0.ɵɵlistener(\"click\", function UploadedFilesComponent_button_3_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r16);\n const ctx_r15 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r15.onAddFile(ctx_r15.parentId, ctx_r15.categoryId));\n });\n i0.ɵɵelement(1, \"i\", 18);\n i0.ɵɵtext(2, \" \\xA0 Add File(s)\");\n i0.ɵɵelementEnd();\n }\n}\nfunction UploadedFilesComponent_button_4_Template(rf, ctx) {\n if (rf & 1) {\n const _r18 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 17);\n i0.ɵɵlistener(\"click\", function UploadedFilesComponent_button_4_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r18);\n const ctx_r17 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r17.onAddFolder(ctx_r17.parentId, ctx_r17.categoryId));\n });\n i0.ɵɵelement(1, \"i\", 19);\n i0.ɵɵtext(2, \" \\xA0 Create Folder\");\n i0.ɵɵelementEnd();\n }\n}\nfunction UploadedFilesComponent_button_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r20 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 20);\n i0.ɵɵlistener(\"click\", function UploadedFilesComponent_button_5_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r20);\n const ctx_r19 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r19.downloadSelectedFiles());\n });\n i0.ɵɵtext(1, \" Download Selected\");\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r3 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"disabled\", ctx_r3.enableButtonOnSelected());\n }\n}\nfunction UploadedFilesComponent_button_6_Template(rf, ctx) {\n if (rf & 1) {\n const _r22 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 21);\n i0.ɵɵlistener(\"click\", function UploadedFilesComponent_button_6_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r22);\n const ctx_r21 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r21.deleteSelectedFiles());\n });\n i0.ɵɵtext(1, \" Delete Selected\");\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r4 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"disabled\", ctx_r4.enableButtonOnSelected());\n }\n}\nfunction UploadedFilesComponent_ng_container_10_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelement(1, \"app-tree-list\", 22);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r5 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"nodes\", ctx_r5.nodes)(\"configuration\", ctx_r5.configuration);\n }\n}\nfunction UploadedFilesComponent_div_11_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\")(1, \"div\", 23);\n i0.ɵɵelement(2, \"mat-spinner\", 24);\n i0.ɵɵelementEnd()();\n }\n}\nfunction PlayVideoComponent_ng_container_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelementStart(1, \"video\", 1);\n i0.ɵɵelement(2, \"source\", 2);\n i0.ɵɵtext(3, \" Your browser does not support the video tag. \");\n i0.ɵɵelementEnd();\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"src\", ctx_r0.url, i0.ɵɵsanitizeUrl);\n }\n}\nfunction PlayAudioComponent_ng_container_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelementStart(1, \"audio\", 1);\n i0.ɵɵelement(2, \"source\", 2);\n i0.ɵɵtext(3, \" Your browser does not support the video tag. \");\n i0.ɵɵelementEnd();\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"src\", ctx_r0.audioUrl, i0.ɵɵsanitizeUrl)(\"type\", ctx_r0.audioMimeType);\n }\n}\nfunction FileUploadMultipleComponent_span_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 5);\n i0.ɵɵtext(1, \"All Uploads Complete\");\n i0.ɵɵelementEnd();\n }\n}\nfunction FileUploadMultipleComponent_highfieldlayout_button_5_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"highfieldlayout-button\", 6);\n }\n}\nfunction FileDetailsComponent_div_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 1)(1, \"div\", 2);\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(3, \"div\", 3)(4, \"div\", 4)(5, \"div\", 5)(6, \"b\");\n i0.ɵɵtext(7, \"File Name:\");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(8, \"div\", 6);\n i0.ɵɵtext(9);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(10, \"div\", 4)(11, \"div\", 5)(12, \"b\");\n i0.ɵɵtext(13, \"Version Number:\");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(14, \"div\", 6);\n i0.ɵɵtext(15);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(16, \"div\", 4)(17, \"div\", 5)(18, \"b\");\n i0.ɵɵtext(19, \"Uploaded Date:\");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(20, \"div\", 6);\n i0.ɵɵtext(21);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(22, \"div\", 4)(23, \"div\", 5)(24, \"b\");\n i0.ɵɵtext(25, \"Uploaded By:\");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(26, \"div\", 6);\n i0.ɵɵtext(27);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(28, \"div\", 4)(29, \"div\", 5)(30, \"b\");\n i0.ɵɵtext(31, \"Mime Type:\");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(32, \"div\", 6);\n i0.ɵɵtext(33);\n i0.ɵɵelementEnd()()();\n i0.ɵɵelementStart(34, \"div\", 7);\n i0.ɵɵelement(35, \"highfieldlayout-button\", 8);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate(ctx_r0.displayFileDetails.entityName);\n i0.ɵɵadvance(7);\n i0.ɵɵtextInterpolate1(\" \", ctx_r0.displayFileDetails.fileName, \" \");\n i0.ɵɵadvance(6);\n i0.ɵɵtextInterpolate1(\" \", ctx_r0.displayFileDetails.versionNumber, \" \");\n i0.ɵɵadvance(6);\n i0.ɵɵtextInterpolate1(\" \", ctx_r0.dateTimeService.convertUtcToFormattedLocalString(ctx_r0.displayFileDetails.uploadedDate, \"DD/MM/YYYY HH:mm\"), \" \");\n i0.ɵɵadvance(6);\n i0.ɵɵtextInterpolate1(\" \", ctx_r0.displayFileDetails.uploadedBy, \" \");\n i0.ɵɵadvance(6);\n i0.ɵɵtextInterpolate1(\" \", ctx_r0.displayFileDetails.mimeType, \" \");\n }\n}\nfunction FileDetailsSideViewComponent_div_0_Template(rf, ctx) {\n if (rf & 1) {\n const _r2 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 1)(1, \"H4\");\n i0.ɵɵelement(2, \"i\");\n i0.ɵɵtext(3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"div\", 2)(5, \"div\", 3)(6, \"table\", 4)(7, \"tbody\")(8, \"tr\")(9, \"td\", 5);\n i0.ɵɵtext(10, \"File name:\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(11, \"td\");\n i0.ɵɵtext(12);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(13, \"tr\")(14, \"td\");\n i0.ɵɵtext(15, \"Version number:\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(16, \"td\");\n i0.ɵɵtext(17);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(18, \"tr\")(19, \"td\");\n i0.ɵɵtext(20, \"Uploaded by:\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(21, \"td\");\n i0.ɵɵtext(22);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(23, \"tr\")(24, \"td\");\n i0.ɵɵtext(25, \"Uploaded date:\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(26, \"td\");\n i0.ɵɵtext(27);\n i0.ɵɵpipe(28, \"date\");\n i0.ɵɵelementEnd()()()()();\n i0.ɵɵelementStart(29, \"div\", 3)(30, \"div\", 6)(31, \"button\", 7);\n i0.ɵɵlistener(\"cdkCopyToClipboardCopied\", function FileDetailsSideViewComponent_div_0_Template_button_cdkCopyToClipboardCopied_31_listener($event) {\n i0.ɵɵrestoreView(_r2);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1.onClipboardCopy($event));\n });\n i0.ɵɵelement(32, \"i\", 8);\n i0.ɵɵtext(33);\n i0.ɵɵelementEnd();\n i0.ɵɵtext(34, \"\\xA0 \");\n i0.ɵɵelementStart(35, \"a\", 9)(36, \"i\", 10);\n i0.ɵɵlistener(\"click\", function FileDetailsSideViewComponent_div_0_Template_i_click_36_listener() {\n i0.ɵɵrestoreView(_r2);\n const ctx_r3 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r3.downloadFile(ctx_r3.displayFileDetails.id));\n });\n i0.ɵɵelementEnd();\n i0.ɵɵtext(37, \" \\xA0 Download file \");\n i0.ɵɵelementEnd()()()()();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵclassMap(ctx_r0.fileIcon);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \\xA0\", ctx_r0.displayFileDetails.entityName, \"\");\n i0.ɵɵadvance(9);\n i0.ɵɵtextInterpolate(ctx_r0.displayFileDetails.fileName);\n i0.ɵɵadvance(5);\n i0.ɵɵtextInterpolate(ctx_r0.displayFileDetails.versionNumber);\n i0.ɵɵadvance(5);\n i0.ɵɵtextInterpolate(ctx_r0.displayFileDetails.uploadedBy);\n i0.ɵɵadvance(5);\n i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(28, 11, ctx_r0.displayFileDetails.uploadedDate + \"Z\", \"dd/MM/yyyy h:mm:ss a\"));\n i0.ɵɵadvance(4);\n i0.ɵɵproperty(\"cdkCopyToClipboard\", ctx_r0.downloadLink);\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate1(\" \\xA0\", ctx_r0.copyText, \"\");\n i0.ɵɵadvance(2);\n i0.ɵɵpropertyInterpolate(\"href\", ctx_r0.downloadLink, i0.ɵɵsanitizeUrl);\n }\n}\nlet AngularHighfieldCdnModule = /*#__PURE__*/(() => {\n class AngularHighfieldCdnModule {\n static {\n this.ɵfac = function AngularHighfieldCdnModule_Factory(t) {\n return new (t || AngularHighfieldCdnModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: AngularHighfieldCdnModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [AngularHighfieldcommonModule, AngularHighfieldauthModule, AngularHighfieldwebapiModule, AngularHighfieldlayoutModule]\n });\n }\n }\n return AngularHighfieldCdnModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass NewUploadVersion {}\nclass RequestService {\n constructor() {\n this.contentType = \"application/json\";\n }\n getResponse(response) {\n if (response.responseCode === 200 || response.responseCode === 201 || response.responseCode === 204) {\n return response.responseData ? response.responseData : null;\n }\n if (response.responseCode === 400) {\n throw new Error(response.responseData.error);\n }\n if (response.responseCode === 401) {\n throw new Error(\"Unauthorised\");\n }\n throw new Error(\"Internal server error\");\n }\n}\nlet AuthRequestService = /*#__PURE__*/(() => {\n class AuthRequestService extends RequestService {\n constructor(authenticatedService, baseUrl) {\n super();\n this.authenticatedService = authenticatedService;\n this.baseUrl = baseUrl;\n }\n async get(resource) {\n const response = await this.authenticatedService.getAsync(this.baseUrl, resource, this.contentType);\n return this.getResponse(response);\n }\n async post(resource, data) {\n const response = await this.authenticatedService.postAsync(this.baseUrl, resource, data);\n return this.getResponse(response);\n }\n async put(resource, data) {\n const response = await this.authenticatedService.putAsync(this.baseUrl, resource, data);\n return this.getResponse(response);\n }\n async delete(resource) {\n await this.authenticatedService.deleteAsync(this.baseUrl, resource);\n }\n static {\n this.ɵfac = function AuthRequestService_Factory(t) {\n return new (t || AuthRequestService)(i0.ɵɵinject(i2.AuthenticatedService), i0.ɵɵinject('CDNApiBaseUrl'));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AuthRequestService,\n factory: AuthRequestService.ɵfac,\n providedIn: \"root\"\n });\n }\n }\n return AuthRequestService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet UnauthorisedService = /*#__PURE__*/(() => {\n class UnauthorisedService {\n constructor(apiService, settingService) {\n this.apiService = apiService;\n this.settingService = settingService;\n }\n //#region Promise functions\n async getAsync(serviceBaseURL, requestUri, contentType = 'application/json') {\n const response = await new Promise(resolve => {\n this.apiService.getAsync(serviceBaseURL, requestUri, null).then(res => {\n resolve(res);\n }, async err => {\n resolve(err);\n });\n });\n return response;\n }\n async postAsync(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const response = await new Promise(resolve => {\n this.apiService.postAsync(serviceBaseURL, requestUri, null, body).then(res => {\n resolve(res);\n }, async err => {\n resolve(err);\n });\n });\n return response;\n }\n async putAsync(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const response = await new Promise(resolve => {\n this.apiService.putAsync(serviceBaseURL, requestUri, null, body).then(res => {\n resolve(res);\n }, async err => {\n resolve(err);\n });\n });\n return response;\n }\n async deleteAsync(serviceBaseURL, requestUri, contentType = 'application/json') {\n const response = await new Promise(resolve => {\n this.apiService.deleteAsync(serviceBaseURL, requestUri, null).then(res => {\n resolve(res);\n }, async err => {\n resolve(err);\n });\n });\n return response;\n }\n async getTypedAsync(serviceBaseURL, requestUri, contentType = 'application/json') {\n const response = await this.getAsync(serviceBaseURL, requestUri, contentType);\n return this.getResponse(response);\n }\n async postTypedAsync(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const response = await this.postAsync(serviceBaseURL, requestUri, body, contentType);\n return this.getResponse(response);\n }\n async putTypedAsync(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const response = await this.putAsync(serviceBaseURL, requestUri, body, contentType);\n return this.getResponse(response);\n }\n async getFileAsync(serviceBaseURL, requestUri, contentType = 'application/pdf') {\n const response = await new Promise(resolve => {\n this.apiService.getFileAsync(serviceBaseURL, requestUri, null).then(res => {\n resolve(res);\n }, async err => {\n resolve(err);\n });\n });\n return response;\n }\n getResponse(response) {\n if (response.responseCode === 200 || response.responseCode === 201 || response.responseCode === 204) {\n if (response.responseData == null || response.responseData == undefined) {\n return null;\n }\n return response.responseData;\n }\n if (response.responseCode === 400) {\n throw new Error(response.responseError);\n }\n if (response.responseCode === 401) {\n throw new Error(\"Unauthorised\");\n }\n throw new Error(\"Internal server error\");\n }\n //#endregion Promise functions\n //#region Observable functions\n getObservable(serviceBaseURL, requestUri, contentType = 'application/json') {\n const getRequest = () => this.apiService.getObservable(serviceBaseURL, requestUri, null);\n return getRequest().pipe(catchError(error => this.getDefaultError(error) // Non-401 error, return GenericAPIResponse with error messages\n ));\n }\n postObservable(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const postRequest = () => this.apiService.postObservable(serviceBaseURL, requestUri, null, body);\n return postRequest().pipe(catchError(error => this.getDefaultError(error) // Non-401 error, return GenericAPIResponse with error messages\n ));\n }\n putObservable(serviceBaseURL, requestUri, body, contentType = 'application/json') {\n const putRequest = () => this.apiService.putObservable(serviceBaseURL, requestUri, null, body);\n return putRequest().pipe(catchError(error => this.getDefaultError(error) // Non-401 error, return GenericAPIResponse with error messages\n ));\n }\n deleteObservable(serviceBaseURL, requestUri, contentType = 'application/json') {\n const deleteRequest = () => this.apiService.deleteObservable(serviceBaseURL, requestUri, null);\n return deleteRequest().pipe(catchError(error => this.getDefaultError(error) // Non-401 error, return GenericAPIResponse with error messages\n ));\n }\n //#endregion Observable functions\n //#region Support functions\n getDefaultError(error) {\n return of({\n responseCode: error.status,\n responseMessage: error.name,\n responseError: error.message\n });\n }\n static {\n this.ɵfac = function UnauthorisedService_Factory(t) {\n return new (t || UnauthorisedService)(i0.ɵɵinject(i1.APIService), i0.ɵɵinject(i1.StoredSettingService));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: UnauthorisedService,\n factory: UnauthorisedService.ɵfac,\n providedIn: \"root\"\n });\n }\n }\n return UnauthorisedService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CdnProxyRequestService = /*#__PURE__*/(() => {\n class CdnProxyRequestService extends RequestService {\n constructor(baseUrl, unauthorisedService) {\n super();\n this.baseUrl = baseUrl;\n this.unauthorisedService = unauthorisedService;\n }\n async get(resource) {\n const response = await this.unauthorisedService.getAsync(this.baseUrl, resource, this.contentType);\n return this.getResponse(response);\n }\n async post(resource, data) {\n const response = await this.unauthorisedService.postAsync(this.baseUrl, resource, data);\n return this.getResponse(response);\n }\n async put(resource, data) {\n const response = await this.unauthorisedService.putAsync(this.baseUrl, resource, data);\n return this.getResponse(response);\n }\n async delete(resource) {\n await this.unauthorisedService.deleteAsync(this.baseUrl, resource);\n }\n static {\n this.ɵfac = function CdnProxyRequestService_Factory(t) {\n return new (t || CdnProxyRequestService)(i0.ɵɵinject('CDNApiBaseUrl'), i0.ɵɵinject(UnauthorisedService));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: CdnProxyRequestService,\n factory: CdnProxyRequestService.ɵfac,\n providedIn: \"root\"\n });\n }\n }\n return CdnProxyRequestService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FileService = /*#__PURE__*/(() => {\n class FileService {\n constructor(authRequestService, proxyRequestService) {\n this.authRequestService = authRequestService;\n this.proxyRequestService = proxyRequestService;\n }\n async deleteFileInfo(fileId, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n return await this.proxyRequestService.get(`api/Proxy/DeleteFileInfo/${fileId}/${proxyUser}/${categoryId}`);\n } else {\n return await this.authRequestService.get(`api/File/DeleteFileInfo/${fileId}`);\n }\n }\n async deleteEntity(entityId, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n return await this.proxyRequestService.delete(`api/Proxy/Delete/${entityId}/${proxyUser}/${categoryId}`);\n } else {\n return await this.authRequestService.delete(`api/File/Delete/${entityId}`);\n }\n }\n async deleteVersion(entityVersionId, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n return await this.proxyRequestService.delete(`api/Proxy/DeleteVersion/${entityVersionId}/${proxyUser}/${categoryId}`);\n } else {\n return await this.authRequestService.delete(`api/File/DeleteVersion/${entityVersionId}`);\n }\n }\n async deleteContents(folderId, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n return await this.proxyRequestService.delete(`api/Proxy/DeleteContents/${folderId}/${proxyUser}/${categoryId}`);\n } else {\n return await this.authRequestService.delete(`api/File/DeleteContents/${folderId}`);\n }\n }\n async uploadFile(file, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n let proxyUpload = file;\n proxyUpload.userId = proxyUser;\n proxyUpload.categoryId = categoryId;\n return await this.proxyRequestService.post(\"api/Proxy/Upload\", proxyUpload);\n } else {\n return await this.authRequestService.post(\"api/File/Upload\", file);\n }\n }\n async uploadFileVersion(versionFile, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n let proxyUpload = versionFile;\n proxyUpload.userId = proxyUser;\n proxyUpload.categoryId = categoryId;\n return await this.proxyRequestService.post(\"api/Proxy/UploadVersion\", proxyUpload);\n } else {\n return await this.authRequestService.post(\"api/File/UploadVersion\", versionFile);\n }\n }\n async confirmUpload(versionId, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n return await this.proxyRequestService.get(`api/Proxy/ConfirmUpload/${versionId}/${proxyUser}/${categoryId}`);\n } else {\n return await this.authRequestService.get(\"api/File/ConfirmUpload/\" + versionId);\n }\n }\n async getUploadedFiles(params, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n let proxyParams = params;\n proxyParams.userId = proxyUser;\n proxyParams.categoryId = categoryId;\n return await this.proxyRequestService.post(\"api/Proxy/GetUploadedFiles\", params);\n } else {\n return await this.authRequestService.post(\"api/File/GetUploadedFiles\", params);\n }\n }\n async getUploadedFilesForMany(paramsList, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n let proxyUploadList = paramsList;\n proxyUploadList.forEach(proxyUpload => {\n proxyUpload.userId = proxyUser;\n proxyUpload.categoryId = categoryId;\n });\n return await this.proxyRequestService.post(\"api/Proxy/GetUploadedFilesForMany\", paramsList);\n } else {\n return await this.authRequestService.post(\"api/File/GetUploadedFilesForMany\", paramsList);\n }\n }\n async getUploadedFilesbyIds(paramsList) {\n return await this.authRequestService.post(\"api/File/GetUploadedSummariesById\", paramsList);\n }\n async downloadFile(id, useProxy, proxyUser, categoryId) {\n let providerId = sessionStorage.getItem('cpProviderId');\n if (useProxy) {\n return await this.proxyRequestService.get(`api/Proxy/DownloadLatestVersion/${id}/${providerId}/${proxyUser}/${categoryId}`);\n } else {\n return await this.authRequestService.get(`api/File/DownloadLatestVersion/${id}/${providerId}`);\n }\n }\n async getFileDetails(fileId, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n return await this.proxyRequestService.get(`api/Proxy/GetFileDetails/${fileId}/${proxyUser}/${categoryId}`);\n } else {\n return await this.authRequestService.get(`api/File/GetFileDetails/${fileId}`);\n }\n }\n static getFullUrl(file, useProxy, proxyUser) {\n return `${file.fileContainer}/${file.fileURL}?${file.accessToken}`;\n }\n async incrementDownloads(fileId, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n return await this.proxyRequestService.post(`api/Proxy/IncrementDownloads/${fileId}/${proxyUser}/${categoryId}`, null);\n } else {\n return await this.authRequestService.post(`api/File/IncrementDownloads/${fileId}`, null);\n }\n }\n async getFilePreviousVersions(fileId, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n return await this.proxyRequestService.get(`api/Proxy/GetFilePreviousVersions/${fileId}/${proxyUser}/${categoryId}`);\n } else {\n return await this.authRequestService.get(`api/File/GetFilePreviousVersions/${fileId}`);\n }\n }\n async downloadFilePreviousVersion(fileId, useProxy, proxyUser, categoryId) {\n if (useProxy) {\n return await this.proxyRequestService.get(`api/Proxy/DownloadPreviousVersion/${fileId}/${proxyUser}/${categoryId}`);\n } else {\n return await this.authRequestService.get(`api/File/DownloadPreviousVersion/${fileId}`);\n }\n }\n static {\n this.ɵfac = function FileService_Factory(t) {\n return new (t || FileService)(i0.ɵɵinject(AuthRequestService), i0.ɵɵinject(CdnProxyRequestService));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FileService,\n factory: FileService.ɵfac,\n providedIn: \"root\"\n });\n }\n }\n return FileService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass TreeListService {\n constructor() {\n this.actionSource = new Subject();\n this.actionClick$ = this.actionSource.asObservable();\n this.selectedIdSource = new Subject();\n this.selectedIdClick$ = this.selectedIdSource.asObservable();\n }\n updateActionClick(item) {\n this.actionSource.next(item);\n }\n selectedUpdateIdAction(item) {\n this.selectedIdSource.next(item);\n }\n}\nlet BlobService = /*#__PURE__*/(() => {\n class BlobService {\n async delete(uploadFile, options) {\n const blobServiceClient = new BlobServiceClient(`${uploadFile.containerURL}${uploadFile.sharedAccessSignature ?? null}`, new AnonymousCredential());\n const containerClient = blobServiceClient.getContainerClient(uploadFile.containerName);\n const blockBlobClient = containerClient.getBlockBlobClient(uploadFile.deletePath);\n try {\n const response = await blockBlobClient.deleteIfExists(options);\n return response.succeeded;\n } catch (e) {\n throw new Error(`Deleting blob failed, statusCode - ${e.statusCode}, errorCode - ${e.details.errorCode}`);\n }\n }\n upload(uploadFile, file, options) {\n if (!options) {\n options = {};\n }\n options.blobHTTPHeaders = {\n blobContentType: file.type\n };\n const blobServiceClient = new BlobServiceClient(`${uploadFile.containerURL}${uploadFile.sharedAccessSignature ?? null}`, new AnonymousCredential());\n const containerClient = blobServiceClient.getContainerClient(uploadFile.containerName);\n const blockBlobClient = containerClient.getBlockBlobClient(uploadFile.filePath);\n return new Observable(observer => {\n blockBlobClient.uploadData(file, {\n blockSize: file.size > 1024 * 1024 * 32 ? 1024 * 1024 * 4 : 1024 * 512,\n concurrency: 8,\n onProgress: this.onProgress(observer),\n blobHTTPHeaders: {\n blobContentType: file.type\n }\n }).then(this.onUploadComplete(observer, file), this.onUploadError(observer));\n });\n }\n onUploadError(observer) {\n return error => observer.error(error);\n }\n onUploadComplete(observer, file) {\n return () => {\n observer.next(file.size);\n observer.complete();\n };\n }\n onProgress(observer) {\n return progress => {\n observer.next(progress.loadedBytes);\n };\n }\n static {\n this.ɵfac = function BlobService_Factory(t) {\n return new (t || BlobService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: BlobService,\n factory: BlobService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return BlobService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst rotate = {\n asc: 'desc',\n desc: '',\n '': 'asc'\n};\nconst compare = (v1, v2) => v1 < v2 ? -1 : v1 > v2 ? 1 : 0;\nlet SortableHeaderDirective = /*#__PURE__*/(() => {\n class SortableHeaderDirective {\n constructor() {\n this.sortable = '';\n this.direction = '';\n this.sort = new EventEmitter();\n }\n rotate() {\n this.direction = rotate[this.direction];\n this.sort.emit({\n column: this.sortable,\n direction: this.direction\n });\n }\n static {\n this.ɵfac = function SortableHeaderDirective_Factory(t) {\n return new (t || SortableHeaderDirective)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: SortableHeaderDirective,\n selectors: [[\"th\", \"sortable\", \"\"]],\n hostVars: 4,\n hostBindings: function SortableHeaderDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function SortableHeaderDirective_click_HostBindingHandler() {\n return ctx.rotate();\n });\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"asc\", ctx.direction === \"asc\")(\"desc\", ctx.direction === \"desc\");\n }\n },\n inputs: {\n sortable: \"sortable\",\n direction: \"direction\"\n },\n outputs: {\n sort: \"sort\"\n }\n });\n }\n }\n return SortableHeaderDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass DownloadModel {\n constructor() {\n this.filepath = '';\n }\n}\nclass FilePathModel {\n constructor() {\n this.id = '';\n this.linkId = '';\n this.name = '';\n }\n}\nlet FolderDownloadService = /*#__PURE__*/(() => {\n class FolderDownloadService {\n setLoading(loading) {\n this.loadingSubject.next(loading);\n }\n constructor(httpClient, fileService, loadingService) {\n this.httpClient = httpClient;\n this.fileService = fileService;\n this.loadingService = loadingService;\n this.flatStructure = [];\n this.linkId = '';\n this.categoryId = '';\n this.loading = false;\n this.crumbs = [];\n this.loadingSubject = new BehaviorSubject(false);\n this.loading$ = this.loadingSubject.asObservable();\n }\n async downloadZip(parentFolderName, uploadSummary) {\n this.setLoading(true);\n this.flatStructure = [];\n let uploadSummary$ = of(uploadSummary);\n let flatStructure$ = this.flattenStructure(uploadSummary$);\n let fileDownloadDetails$ = this.getFileDownloadDetails(flatStructure$);\n let getFolderPath$ = this.generateFolderPath(fileDownloadDetails$);\n let downloadArray$ = getFolderPath$.pipe(mergeMap(value => {\n return from(value).pipe(map(b => {\n const file1 = new DownloadModel();\n file1.filepath = b.filepath;\n file1.filePathModel = b.filePathModel;\n return file1;\n }), toArray());\n }));\n let files = [];\n downloadArray$.subscribe(async d => {\n files = d;\n console.log(\"download Array:\", d);\n await this.createZip(files, parentFolderName);\n });\n }\n generateFolderPath(flatStructure$) {\n return new Observable(subscriber => {\n flatStructure$.pipe(map(val => {\n this.flatStructure = val;\n return from(val).pipe(map(v => {\n let filepath = this.buildFilePaths(v).reverse().join('/');\n let filePathModel = v;\n this.crumbs = [];\n return {\n filePathModel: filePathModel,\n filepath: filepath\n };\n }), toArray());\n }), mergeMap(data => {\n return data;\n })).subscribe({\n next: data => {\n subscriber.next(data);\n },\n complete: () => {\n subscriber.complete();\n },\n error: error => {}\n });\n });\n }\n flattenStructure(uploadSummary$) {\n return new Observable(subscriber => {\n uploadSummary$.subscribe(files => {\n from(files).pipe(expand(x => {\n return x.children && x.children.length ? from(x.children) : EMPTY;\n }), map(y => {\n let model = new FilePathModel();\n model.id = y.id;\n model.linkId = y.linkId;\n model.name = y.name;\n model.type = y.type;\n return model;\n }), distinct(downloadFile => downloadFile.id), toArray()).subscribe({\n next: data => {\n subscriber.next(data);\n },\n complete: () => {\n subscriber.complete();\n },\n error: error => {}\n });\n });\n });\n }\n getFileDownloadDetails(flatStructure$) {\n return new Observable(subscriber => {\n flatStructure$.subscribe(files => {\n from(files).pipe(concatMap(val => {\n {\n if (val.type.hasChildren) {\n return of(val);\n } else {\n return this.fetchFileDownloadDetails(val.id).pipe(map(x => {\n let model = new FilePathModel();\n model.id = val.id;\n model.linkId = val.linkId;\n model.name = val.name;\n model.type = val.type;\n model.downloadFile = x;\n return model;\n }));\n }\n }\n }), toArray()).subscribe({\n next: data => {\n subscriber.next(data);\n },\n complete: () => {\n subscriber.complete();\n },\n error: error => {}\n });\n });\n });\n }\n fetchFileDownloadDetails(id) {\n return from(this.fileService.downloadFile(id));\n }\n buildFilePaths(file) {\n let summary = this.flatStructure.find(x => x.id.toLowerCase() === file.id.toLowerCase());\n if (summary) {\n if (this.crumbs === undefined) {\n this.crumbs = new Array();\n }\n if (summary.type.hasChildren) {\n this.crumbs.push(summary.name);\n } else {\n const filename = summary.downloadFile?.filename;\n const lastDotIndex = filename.lastIndexOf('.');\n const fileExtension = lastDotIndex !== -1 ? filename.substring(lastDotIndex + 1) : '';\n this.crumbs.push(summary.name + '.' + fileExtension);\n }\n let node = this.flatStructure.find(x => x.id.toLowerCase() === summary?.linkId.toLowerCase());\n if (node) {\n this.buildFilePaths(node);\n }\n }\n return this.crumbs;\n }\n async createZip(files, zipName) {\n let arr = [];\n await Promise.all(files.map(async downloadModel => {\n if (!downloadModel.filePathModel.type.hasChildren) {\n arr.push({\n input: (await fetch(FileService.getFullUrl(downloadModel?.filePathModel?.downloadFile))).body,\n name: downloadModel.filepath\n });\n } else {\n arr.push({\n name: downloadModel.filepath\n });\n }\n }));\n streamSaver.mitm = \"https://highfieldcdnstorage.blob.core.windows.net/resources/html/mitm.html\";\n var fileStream = streamSaver.createWriteStream(`${zipName}.zip`);\n const content = await ClientZip.downloadZip(arr);\n // Modern implementation\n if (window.WritableStream && !!content.body.pipeTo) {\n content.body.pipeTo(fileStream).then(() => console.log('done writing'));\n } else {\n // Backup for older browsers\n const writer = fileStream.getWriter();\n const reader = content.body.getReader();\n const pump = () => reader.read().then(res => res.done ? writer.close() : writer.write(res.value).then(pump));\n pump();\n }\n // Stops the spinner as the ZIP file is compiled and is ready to be downloaded\n this.setLoading(false);\n }\n static {\n this.ɵfac = function FolderDownloadService_Factory(t) {\n return new (t || FolderDownloadService)(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(FileService), i0.ɵɵinject(i3.LoadingService));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FolderDownloadService,\n factory: FolderDownloadService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return FolderDownloadService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NodeActionComponent = /*#__PURE__*/(() => {\n class NodeActionComponent {\n constructor() {\n this.actions = [];\n this.actionClick = new EventEmitter();\n }\n onActionClicked(action) {\n this.actionClick.emit(action);\n }\n static {\n this.ɵfac = function NodeActionComponent_Factory(t) {\n return new (t || NodeActionComponent)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NodeActionComponent,\n selectors: [[\"app-node-action\"]],\n inputs: {\n actions: \"actions\",\n nodeId: \"nodeId\",\n selectedNodes: \"selectedNodes\"\n },\n outputs: {\n actionClick: \"actionClick\"\n },\n decls: 1,\n vars: 1,\n consts: [[4, \"ngIf\"], [1, \"d-flex\", \"flex-row\", \"justify-content-end\"], [1, \"dropdown\"], [1, \"dropbtn\", 3, \"matMenuTriggerFor\"], [1, \"fas\", \"fa-ellipsis-h\"], [\"yPosition\", \"above\", 1, \"dropdown-content\"], [\"menu\", \"matMenu\"], [\"mat-menu-item\", \"\", 3, \"click\", 4, \"ngFor\", \"ngForOf\"], [4, \"ngFor\", \"ngForOf\"], [\"mat-menu-item\", \"\", 3, \"click\"], [\"class\", \"btn btn-primary btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Add file\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-primary btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Add folder\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-primary btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Open folder\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-primary btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Download all\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-primary btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Download\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-primary btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Play video\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-primary btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Play audio\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-primary btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"View image\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-primary btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Upload new version\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-primary btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"View previous versions\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-danger btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Delete file\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-danger btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Delete contents\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-danger btn-icon me-2\", \"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Delete folder\", 3, \"click\", 4, \"ngIf\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Add file\", 1, \"btn\", \"btn-primary\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-file-plus\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Add folder\", 1, \"btn\", \"btn-primary\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-folder-plus\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Open folder\", 1, \"btn\", \"btn-primary\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-folder-open\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Download all\", 1, \"btn\", \"btn-primary\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-folder-arrow-down\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Download\", 1, \"btn\", \"btn-primary\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-download\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Play video\", 1, \"btn\", \"btn-primary\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-play\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Play audio\", 1, \"btn\", \"btn-primary\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-headphones\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"View image\", 1, \"btn\", \"btn-primary\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-image\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Upload new version\", 1, \"btn\", \"btn-primary\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-upload\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"View previous versions\", 1, \"btn\", \"btn-primary\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-eye\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Delete file\", 1, \"btn\", \"btn-danger\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-trash\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Delete contents\", 1, \"btn\", \"btn-danger\", \"btn-icon\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-trash-list\", \"fa-lg\"], [\"data-bs-toggle\", \"tooltip\", \"data-bs-placement\", \"top\", \"title\", \"Delete folder\", 1, \"btn\", \"btn-danger\", \"btn-icon\", \"me-2\", 3, \"click\"]],\n template: function NodeActionComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NodeActionComponent_ng_container_0_Template, 9, 3, \"ng-container\", 0);\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"ngIf\", ctx.actions && ctx.actions.length > 0);\n }\n },\n dependencies: [i3$1.NgForOf, i3$1.NgIf, i2$1.MatMenu, i2$1.MatMenuItem, i2$1.MatMenuTrigger],\n styles: [\"table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:4px 0}.dropbtn[_ngcontent-%COMP%]{background-color:#fff;font-size:1rem;border:none;cursor:pointer}.dropbtn[_ngcontent-%COMP%]:hover{background-color:#d7d7d7}.dropbtn[_ngcontent-%COMP%]:focus{background-color:#d7d7d7}.dropdown[_ngcontent-%COMP%]{position:relative;display:inline-block}.dropdown-content[_ngcontent-%COMP%]{display:none;position:absolute;background-color:#f1f1f1;min-width:160px;box-shadow:0 8px 16px #0003;z-index:1}.dropdown-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{cursor:pointer;color:#000;padding:12px 16px;text-decoration:none;display:block}.dropdown-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%] [_ngcontent-%COMP%]:hover{background-color:#ddd}.show[_ngcontent-%COMP%]{display:block}.hidden[_ngcontent-%COMP%]{display:none}.btn-icon[_ngcontent-%COMP%]{color:#fff;height:35px;width:35px;border-radius:50%;padding:0;margin-right:.25em}\"]\n });\n }\n }\n return NodeActionComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet TreeListPipe = /*#__PURE__*/(() => {\n class TreeListPipe {\n transform(values, filter) {\n if (!filter || filter.length === 0 || filter === '') {\n return values;\n }\n if (values.length === 0) {\n return values;\n }\n return values.filter(value => {\n return value.name.toLocaleLowerCase().includes(filter.toLocaleLowerCase());\n });\n }\n static {\n this.ɵfac = function TreeListPipe_Factory(t) {\n return new (t || TreeListPipe)();\n };\n }\n static {\n this.ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"FilterEntitys\",\n type: TreeListPipe,\n pure: true\n });\n }\n }\n return TreeListPipe;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet TreeListComponent = /*#__PURE__*/(() => {\n class TreeListComponent {\n constructor(treeListService, folderDownloadService) {\n this.treeListService = treeListService;\n this.folderDownloadService = folderDownloadService;\n this.filter = '';\n this.sortIcon = \"far fa-chevron-down\";\n this.entities = this.nodes;\n this.selectedNodes = [];\n this.selectAll = false;\n }\n ngOnChanges() {\n this.refreshTreeList();\n }\n refreshTreeList() {\n this.entities = this.nodes;\n this.sortIcon = \"\";\n this.selectAll = false;\n }\n onSelectionChange(node) {\n if (node.selected) {\n this.selectedNodes.push(node);\n } else {\n const index = this.selectedNodes.indexOf(node);\n if (index !== -1) {\n this.selectedNodes.splice(index, 1);\n }\n }\n this.selectAll = this.selectedNodes.length === this.nodes.length;\n this.updateSelectedIds();\n }\n onSelectAllChange() {\n if (this.selectAll) {\n this.selectedNodes = this.nodes.map(node => {\n node.selected = true;\n return node;\n });\n } else {\n this.nodes.forEach(node => node.selected = false);\n this.selectedNodes = [];\n }\n this.updateSelectedIds();\n }\n updateSelectedIds() {\n const selectedFileIds = this.selectedNodes.map(node => node.id);\n this.treeListService.selectedUpdateIdAction(selectedFileIds);\n }\n onSort({\n column,\n direction\n }) {\n this.headers.forEach(header => {\n if (header.sortable !== column) {\n header.direction = '';\n }\n });\n if (direction === '' || column === '') {\n this.entities = this.nodes;\n this.sortIcon = \"far fa-chevron-down\";\n } else {\n this.entities = [...this.nodes].sort((a, b) => {\n const res = compare(a[column], b[column]);\n this.sortIcon = direction === 'asc' ? \"far fa-sort-alpha-down\" : \"far fa-sort-alpha-up\";\n return direction === 'asc' ? res : -res;\n });\n }\n }\n emitAction(id, action) {\n const x = {\n id: id,\n action: action\n };\n this.treeListService.updateActionClick(x);\n }\n static {\n this.ɵfac = function TreeListComponent_Factory(t) {\n return new (t || TreeListComponent)(i0.ɵɵdirectiveInject(TreeListService), i0.ɵɵdirectiveInject(FolderDownloadService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: TreeListComponent,\n selectors: [[\"app-tree-list\"]],\n viewQuery: function TreeListComponent_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(SortableHeaderDirective, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headers = _t);\n }\n },\n inputs: {\n nodes: \"nodes\",\n configuration: \"configuration\"\n },\n features: [i0.ɵɵNgOnChangesFeature],\n decls: 20,\n vars: 13,\n consts: [[1, \"tree\"], [1, \"table-responsive\"], [1, \"table\", \"table-hover\", \"w-100\"], [1, \"thead-light\"], [1, \"col-1\", 2, \"align-items\", \"center\", \"white-space\", \"nowrap\"], [\"type\", \"checkbox\", 3, \"ngModel\", \"ngModelChange\", \"change\"], [\"class\", \"col-1\"], [\"scope\", \"col\", \"sortable\", \"name\", 1, \"col\", 3, \"sort\"], [\"class\", \"col-1 text-center\"], [\"class\", \"col-2 text-center\"], [\"class\", \"col-2\"], [\"class\", \"col-3 text-center\"], [4, \"ngFor\", \"ngForOf\"], [1, \"col-1\"], [1, \"col-1\", \"text-center\"], [1, \"col-2\", \"text-center\"], [1, \"col-2\"], [1, \"col-3\", \"text-center\"], [1, \"col\"], [\"class\", \"node\", 4, \"ngIf\"], [4, \"ngIf\"], [\"class\", \"col-3\"], [1, \"node\"], [1, \"pad-left\"], [1, \"pad-left\", 3, \"click\"], [1, \"col-3\"], [3, \"actions\", \"actionClick\"]],\n template: function TreeListComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1)(2, \"table\", 2)(3, \"thead\", 3)(4, \"tr\")(5, \"th\", 4)(6, \"input\", 5);\n i0.ɵɵtwoWayListener(\"ngModelChange\", function TreeListComponent_Template_input_ngModelChange_6_listener($event) {\n i0.ɵɵtwoWayBindingSet(ctx.selectAll, $event) || (ctx.selectAll = $event);\n return $event;\n });\n i0.ɵɵlistener(\"change\", function TreeListComponent_Template_input_change_6_listener() {\n return ctx.onSelectAllChange();\n });\n i0.ɵɵelementEnd();\n i0.ɵɵtext(7, \" Select All\");\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(8, TreeListComponent_Conditional_8_Template, 2, 0, \"th\", 6);\n i0.ɵɵelementStart(9, \"th\", 7);\n i0.ɵɵlistener(\"sort\", function TreeListComponent_Template_th_sort_9_listener($event) {\n return ctx.onSort($event);\n });\n i0.ɵɵtext(10, \"\\xA0\");\n i0.ɵɵelement(11, \"i\");\n i0.ɵɵtext(12, \"\\xA0Name\");\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(13, TreeListComponent_Conditional_13_Template, 2, 0, \"th\", 8)(14, TreeListComponent_Conditional_14_Template, 2, 0, \"th\", 9)(15, TreeListComponent_Conditional_15_Template, 2, 0, \"th\", 10)(16, TreeListComponent_Conditional_16_Template, 2, 0, \"th\", 11);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(17, \"tbody\");\n i0.ɵɵtemplate(18, TreeListComponent_tr_18_Template, 11, 8, \"tr\", 12);\n i0.ɵɵpipe(19, \"FilterEntitys\");\n i0.ɵɵelementEnd()()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(6);\n i0.ɵɵtwoWayProperty(\"ngModel\", ctx.selectAll);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(8, ctx.configuration.showTypeColumn ? 8 : -1);\n i0.ɵɵadvance(3);\n i0.ɵɵclassMap(ctx.sortIcon);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(13, ctx.configuration.showVersionColumn ? 13 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(14, ctx.configuration.showUploadedByColumn ? 14 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(15, ctx.configuration.showUploadedDateColumn ? 15 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(16, ctx.configuration.showActionColumn ? 16 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngForOf\", i0.ɵɵpipeBind2(19, 10, ctx.entities, ctx.filter));\n }\n },\n dependencies: [i3$1.NgForOf, i3$1.NgIf, i4.CheckboxControlValueAccessor, i4.NgControlStatus, i4.NgModel, NodeActionComponent, SortableHeaderDirective, i3$1.DatePipe, TreeListPipe],\n styles: [\".tree[_ngcontent-%COMP%]{width:100%}.tree[_ngcontent-%COMP%] table[_ngcontent-%COMP%], .tree[_ngcontent-%COMP%] .table[_ngcontent-%COMP%]{width:auto}.tree[_ngcontent-%COMP%] table[_ngcontent-%COMP%] .col-1[_ngcontent-%COMP%], .tree[_ngcontent-%COMP%] .table[_ngcontent-%COMP%] .col-1[_ngcontent-%COMP%]{width:55px}.tree[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{vertical-align:middle}.tree[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%]{padding-bottom:.5rem}.tree[_ngcontent-%COMP%] th[sortable][_ngcontent-%COMP%]{cursor:pointer;user-select:none;-webkit-user-select:none}.tree[_ngcontent-%COMP%] table[_ngcontent-%COMP%] > tbody[_ngcontent-%COMP%] > tr[_ngcontent-%COMP%] > td[_ngcontent-%COMP%]{padding:10px}.tree[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{background-color:#fff;cursor:pointer}.tree[_ngcontent-%COMP%] .node[_ngcontent-%COMP%]{display:flex;align-items:center;flex:1;padding-bottom:5px;padding-top:5px;overflow-wrap:break-word;word-break:break-all;cursor:pointer}.tree[_ngcontent-%COMP%] .node[_ngcontent-%COMP%] .pad-left[_ngcontent-%COMP%]{padding-left:20px}.tree[_ngcontent-%COMP%] .node[_ngcontent-%COMP%] .pad-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{padding-right:15px}.tree[_ngcontent-%COMP%] .expand-btn[_ngcontent-%COMP%]{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%;color:#000;border-bottom:none;outline:none}.card[_ngcontent-%COMP%]:hover{border:2px solid #159ed9}.card-body[_ngcontent-%COMP%]{padding:1rem!important}.node-name[_ngcontent-%COMP%]{max-width:780px}.title[_ngcontent-%COMP%]{font-size:small;font-weight:500}.file-info[_ngcontent-%COMP%]{font-size:larger}\"]\n });\n }\n }\n return TreeListComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet OverviewComponent = /*#__PURE__*/(() => {\n class OverviewComponent {\n constructor(fileService, treeListService, blobService) {\n this.fileService = fileService;\n this.treeListService = treeListService;\n this.blobService = blobService;\n this.nodes = [];\n }\n async ngOnInit() {\n this.treeListService.actionClick$.subscribe(async val => {\n const result = await this.fileService.downloadFile(val.id);\n if (val.action === 'Download') {\n await this.download(result);\n }\n });\n const files = await this.fileService.getUploadedFiles({\n categoryId: \"EC6A309E-1C47-44C4-A1CE-D02112039D42\",\n linkId: \"D4770FEF-621D-42BC-94E8-4DE0C8CC431B\"\n });\n this.setNodes(files);\n }\n handleFileInput(event) {\n this.fileUpload = event.target.files[0];\n }\n async upload() {\n const upload = new NewUploadVersion();\n upload.entityId = '98C4CF82-481A-4228-9B20-01095206654A';\n upload.filename = this.fileUpload.name;\n upload.mimeType = this.fileUpload.type;\n const result = await this.fileService.uploadFileVersion(upload);\n // await this.blobService.upload(result, this.fileUpload);\n }\n async download(result) {\n if (result) {\n const url = `${result.fileContainer}/${result.fileURL}?${result.accessToken}`;\n let blob = await fetch(url).then(r => r.blob());\n const link = document.createElement(\"a\");\n link.setAttribute('download', 'download');\n link.download = result.filename;\n link.target = \"_blank\";\n link.href = window.URL.createObjectURL(blob);\n document.body.appendChild(link);\n link.click();\n link.remove();\n }\n }\n setNodes(files) {\n this.nodes = files.map(f => {\n return {\n id: f.id,\n name: f.name,\n children: this.setChildModeOptions(f.children),\n actions: f.fileType?.downloadOptions?.map(o => o.downloadOptionName)\n };\n });\n }\n setChildModeOptions(children) {\n let node;\n for (node of children) {\n node.actions = node.fileType?.downloadOptions?.map(o => o.downloadOptionName);\n }\n return children;\n }\n static {\n this.ɵfac = function OverviewComponent_Factory(t) {\n return new (t || OverviewComponent)(i0.ɵɵdirectiveInject(FileService), i0.ɵɵdirectiveInject(TreeListService), i0.ɵɵdirectiveInject(BlobService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: OverviewComponent,\n selectors: [[\"app-overview\"]],\n decls: 11,\n vars: 1,\n consts: [[2, \"padding\", \"30px\"], [3, \"nodes\"], [\"for\", \"filename\"], [\"type\", \"file\", \"name\", \"filename\", 3, \"change\"], [\"type\", \"button\", 3, \"click\"]],\n template: function OverviewComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"h1\");\n i0.ɵɵtext(1, \"Welcome to the Highfield Uploads System\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(2, \"div\", 0);\n i0.ɵɵelement(3, \"app-tree-list\", 1);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"div\")(5, \"form\")(6, \"label\", 2);\n i0.ɵɵtext(7, \"Click \\\"Choose File\\\" button to upload a file:\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(8, \"input\", 3);\n i0.ɵɵlistener(\"change\", function OverviewComponent_Template_input_change_8_listener($event) {\n return ctx.handleFileInput($event);\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(9, \"button\", 4);\n i0.ɵɵlistener(\"click\", function OverviewComponent_Template_button_click_9_listener() {\n return ctx.upload();\n });\n i0.ɵɵtext(10, \"Upload\");\n i0.ɵɵelementEnd()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"nodes\", ctx.nodes);\n }\n },\n dependencies: [TreeListComponent]\n });\n }\n }\n return OverviewComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass NewUpload {}\nlet AddFolderComponent = /*#__PURE__*/(() => {\n class AddFolderComponent {\n constructor(fileService, data, dialogRef) {\n this.fileService = fileService;\n this.data = data;\n this.dialogRef = dialogRef;\n this.folderName = '';\n this.clicked = false;\n this.uploaded = new EventEmitter();\n this.linkId = data.linkId;\n this.categoryId = data.categoryId;\n this.folderId = data.folderId;\n }\n async save() {\n if (this.linkId && this.linkId.length) {\n this.clicked = true;\n await this.addNewFolder();\n this.dialogRef.close({\n event: true\n });\n }\n }\n closeDialog() {\n this.dialogRef.close({\n event: false\n });\n }\n async addNewFolder() {\n const upload = new NewUpload();\n upload.typeId = '554FC026-EFD6-40AF-8F53-B15B90ECDBC4';\n upload.linkId = this.linkId;\n upload.categoryId = this.categoryId;\n upload.title = this.folderName;\n upload.description = '';\n upload.filename = this.folderName;\n upload.mimeType = '';\n await this.fileService.uploadFile(upload);\n }\n static {\n this.ɵfac = function AddFolderComponent_Factory(t) {\n return new (t || AddFolderComponent)(i0.ɵɵdirectiveInject(FileService), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA), i0.ɵɵdirectiveInject(i3$2.MatDialogRef));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: AddFolderComponent,\n selectors: [[\"highfield-uploads-shared-add-folder\"]],\n outputs: {\n uploaded: \"uploaded\"\n },\n decls: 18,\n vars: 4,\n consts: [[\"id\", \"highfield-uploads-shared-add-folder-container\"], [\"mat-dialog-title\", \"\"], [1, \"row\"], [1, \"col-12\"], [\"for\", \"foldername\", 2, \"font-weight\", \"500\"], [\"type\", \"text\", \"id\", \"name\", \"name\", \"name\", \"required\", \"\", 1, \"folder-input\", 3, \"ngModel\", \"ngModelChange\"], [\"name\", \"ngModel\"], [\"class\", \"error\", 4, \"ngIf\"], [1, \"gap-1\"], [\"class\", \"btn btn-success\", 3, \"click\", 4, \"ngIf\"], [1, \"btn\", \"btn-danger\", 3, \"click\"], [1, \"fa-solid\", \"fa-xmark\"], [1, \"error\"], [1, \"fa-solid\", \"fa-circle-exclamation\"], [1, \"btn\", \"btn-success\", 3, \"click\"], [1, \"fa-solid\", \"fa-floppy-disk\"]],\n template: function AddFolderComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"h2\", 1);\n i0.ɵɵtext(2, \"Add folder\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(3, \"mat-dialog-content\")(4, \"div\", 2)(5, \"div\", 3)(6, \"form\")(7, \"label\", 4);\n i0.ɵɵtext(8, \"Folder Name\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(9, \"input\", 5, 6);\n i0.ɵɵtwoWayListener(\"ngModelChange\", function AddFolderComponent_Template_input_ngModelChange_9_listener($event) {\n i0.ɵɵtwoWayBindingSet(ctx.folderName, $event) || (ctx.folderName = $event);\n return $event;\n });\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(11, AddFolderComponent_div_11_Template, 3, 0, \"div\", 7)(12, AddFolderComponent_div_12_Template, 3, 0, \"div\", 7);\n i0.ɵɵelementEnd()()()();\n i0.ɵɵelementStart(13, \"mat-dialog-actions\", 8);\n i0.ɵɵtemplate(14, AddFolderComponent_button_14_Template, 3, 0, \"button\", 9);\n i0.ɵɵelementStart(15, \"button\", 10);\n i0.ɵɵlistener(\"click\", function AddFolderComponent_Template_button_click_15_listener() {\n return ctx.closeDialog();\n });\n i0.ɵɵelement(16, \"i\", 11);\n i0.ɵɵtext(17, \" \\xA0 Cancel\");\n i0.ɵɵelementEnd()()();\n }\n if (rf & 2) {\n const _r0 = i0.ɵɵreference(10);\n i0.ɵɵadvance(9);\n i0.ɵɵtwoWayProperty(\"ngModel\", ctx.folderName);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", _r0.invalid && (_r0.dirty || _r0.touched) && (_r0.errors == null ? null : _r0.errors[\"required\"]));\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.folderName.length > 255);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", !ctx.clicked);\n }\n },\n dependencies: [i3$1.NgIf, i4.ɵNgNoValidate, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.RequiredValidator, i4.NgModel, i4.NgForm, i3$2.MatDialogTitle, i3$2.MatDialogActions, i3$2.MatDialogContent],\n styles: [\"#highfield-uploads-shared-file-upload-container[_ngcontent-%COMP%]{height:50px}input[_ngcontent-%COMP%], label[_ngcontent-%COMP%]{display:block}.error[_ngcontent-%COMP%]{border:1px solid;margin-top:5px;padding:5px;background-repeat:no-repeat;background-position:10px center;color:#d8000c;background-color:#ffbaba;font-weight:500}.folder-input[_ngcontent-%COMP%]{padding:5px;width:100%;margin-top:5px}\"]\n });\n }\n }\n return AddFolderComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FileUploadService = /*#__PURE__*/(() => {\n class FileUploadService {\n constructor(blobService, fileService) {\n this.blobService = blobService;\n this.fileService = fileService;\n }\n async uploadNewFile(fileToUpload, linkId, categoryId, useProxy, proxyUserId) {\n const upload = new NewUpload();\n upload.typeId = '5B88CEB4-FCD7-43B8-9608-A9DB372A69D4';\n upload.linkId = linkId;\n upload.categoryId = categoryId;\n if (fileToUpload.file.name.lastIndexOf(\".\") > -1 == true) {\n upload.title = fileToUpload.file.name.substring(0, fileToUpload.file.name.lastIndexOf(\".\"));\n } else {\n upload.title = fileToUpload.file.name;\n }\n upload.description = '';\n upload.filename = fileToUpload.file.name;\n upload.mimeType = fileToUpload.file.type;\n return await this.fileService.uploadFile(upload, useProxy, proxyUserId, categoryId);\n }\n async confirmUpload(id) {\n try {\n await this.fileService.confirmUpload(id);\n } catch (e) {\n console.log(\"Failed Upload Confirmation\", e);\n }\n }\n async uploadNewVersion(fileToUpload, fileId, useProxy, proxyUserId, categoryId) {\n const upload = new NewUploadVersion();\n upload.entityId = fileId;\n upload.filename = fileToUpload.file.name;\n upload.mimeType = fileToUpload.file.type;\n return await this.fileService.uploadFileVersion(upload, useProxy, proxyUserId, categoryId);\n }\n static {\n this.ɵfac = function FileUploadService_Factory(t) {\n return new (t || FileUploadService)(i0.ɵɵinject(BlobService), i0.ɵɵinject(FileService));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FileUploadService,\n factory: FileUploadService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return FileUploadService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FileDragAndDropDirective = /*#__PURE__*/(() => {\n class FileDragAndDropDirective {\n constructor() {\n this.filesChangeEmitter = new EventEmitter();\n this.files = [];\n this.background = '#eee';\n this.borderStyle = '2px dashed';\n this.borderColor = '#696D7D';\n this.borderRadius = '5px';\n }\n onDragOver(event) {\n event.preventDefault();\n event.stopPropagation();\n this.background = 'lightgray';\n this.borderColor = '#159ed9';\n this.borderStyle = '3px solid';\n }\n onDragLeave(event) {\n event.preventDefault();\n event.stopPropagation();\n this.background = '#eee';\n this.borderColor = '#696D7D';\n this.borderStyle = '2px dashed';\n }\n onDrop(event) {\n event.preventDefault();\n event.stopPropagation();\n this.background = '#eee';\n this.borderColor = '#696D7D';\n this.borderStyle = '2px dashed';\n this.files = event.dataTransfer.files;\n let valid_files = this.files;\n this.filesChangeEmitter.emit(valid_files);\n }\n static {\n this.ɵfac = function FileDragAndDropDirective_Factory(t) {\n return new (t || FileDragAndDropDirective)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FileDragAndDropDirective,\n selectors: [[\"\", \"fileDragAndDrop\", \"\"]],\n hostVars: 8,\n hostBindings: function FileDragAndDropDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"dragover\", function FileDragAndDropDirective_dragover_HostBindingHandler($event) {\n return ctx.onDragOver($event);\n })(\"dragleave\", function FileDragAndDropDirective_dragleave_HostBindingHandler($event) {\n return ctx.onDragLeave($event);\n })(\"drop\", function FileDragAndDropDirective_drop_HostBindingHandler($event) {\n return ctx.onDrop($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵstyleProp(\"background\", ctx.background)(\"border\", ctx.borderStyle)(\"border-color\", ctx.borderColor)(\"border-radius\", ctx.borderRadius);\n }\n },\n outputs: {\n filesChangeEmitter: \"filesChangeEmitter\"\n }\n });\n }\n }\n return FileDragAndDropDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FileUploadComponent = /*#__PURE__*/(() => {\n class FileUploadComponent {\n constructor(fileUploadService, data, dialogRef, blobService, fileService) {\n this.fileUploadService = fileUploadService;\n this.data = data;\n this.dialogRef = dialogRef;\n this.blobService = blobService;\n this.fileService = fileService;\n this.files = [];\n this.filesToUpload = [];\n this.allComplete = false;\n this.uploadsStarted = false;\n this.newFile = true;\n this.useProxy = false;\n this.proxyUserId = \"\";\n }\n ngOnInit() {\n this.linkId = this.data.linkId;\n this.categoryId = this.data.categoryId;\n this.fileId = this.data.fileId;\n this.newFile = this.data.newFile;\n this.useProxy = this.data.useProxy;\n this.proxyUserId = this.data.proxyUserId;\n }\n filesSelectedByClick(event) {\n this.files = event.target.files;\n let filesNames = '';\n for (var i = 0; i < this.files.length; i++) {\n this.filesToUpload.push({\n file: this.files[i],\n progress: 0,\n uploadCompleted: false\n });\n filesNames.concat(`\"${this.files[i].name}\"`);\n }\n }\n filesSelectedByDrop(event) {\n this.files = event;\n let filesNames = '';\n for (var i = 0; i < this.files.length; i++) {\n this.filesToUpload.push({\n file: this.files[i],\n progress: 0,\n uploadCompleted: false\n });\n filesNames.concat(`\"${this.files[i].name}\"`);\n }\n }\n removeSingleFile(index) {\n this.filesToUpload.splice(index, 1);\n }\n removeAllFiles(event) {\n this.files = event.target.files;\n this.filesToUpload = [];\n }\n closeDialog() {\n this.dialogRef.close();\n this.filesToUpload = [];\n }\n async upload() {\n this.uploadsStarted = true;\n const uploadTasks = [];\n const subscriptions = [];\n // TODO: Rewrite this so that it doesn't just rely on linkId/fileId \"having a value\" to determine which request should be called\n if (this.linkId && this.linkId.length) {\n for (let item of this.filesToUpload) {\n this.fileUploadService.uploadNewFile(item, this.linkId, this.categoryId, this.useProxy, this.proxyUserId).then(result => {\n let subscription = this.blobService.upload(result, item.file, {\n onProgress: progress => {\n const percent = progress.loadedBytes / item.file.size * 100;\n item.progress = Math.trunc(percent);\n }\n }).subscribe({\n next: x => {\n const percent = x / item.file.size * 100;\n item.progress = Math.trunc(percent);\n if (item.progress === 100 && !item.uploadCompleted) {\n this.fileService.confirmUpload(result.id, this.useProxy, this.proxyUserId, this.categoryId).then(() => {\n item.uploadCompleted = true;\n subscriptions.push(subscription);\n }).catch(error => {\n console.error('Error confirming upload: ', error);\n });\n }\n if (this.filesToUpload.every(y => y.progress === 100)) {\n this.allComplete = true;\n this.uploadsStarted = false;\n this.dialogRef.close();\n subscriptions.forEach(x => {\n x.unsubscribe();\n });\n }\n },\n error: err => {\n console.error('An error occured: ' + err);\n }\n });\n });\n }\n }\n if (this.fileId && this.fileId.length) {\n for (let item of this.filesToUpload) {\n this.fileUploadService.uploadNewVersion(item, this.fileId, this.useProxy, this.proxyUserId, this.categoryId).then(result => {\n let subscription = this.blobService.upload(result, item.file, {\n onProgress: progress => {\n const percent = progress.loadedBytes / item.file.size * 100;\n item.progress = Math.trunc(percent);\n }\n }).subscribe({\n next: x => {\n const percent = x / item.file.size * 100;\n item.progress = Math.trunc(percent);\n if (item.progress === 100 && !item.uploadCompleted) {\n this.fileService.confirmUpload(result.id, this.useProxy, this.proxyUserId, this.categoryId).then(() => {\n item.uploadCompleted = true;\n subscriptions.push(subscription);\n }).catch(error => {\n console.error('Error confirming upload: ', error);\n });\n }\n if (this.filesToUpload.every(y => y.progress === 100)) {\n this.allComplete = true;\n this.uploadsStarted = false;\n this.dialogRef.close();\n subscriptions.forEach(x => {\n x.unsubscribe();\n });\n }\n },\n error: err => {\n console.error('An error occured: ' + err);\n }\n });\n });\n }\n }\n }\n static {\n this.ɵfac = function FileUploadComponent_Factory(t) {\n return new (t || FileUploadComponent)(i0.ɵɵdirectiveInject(FileUploadService), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA), i0.ɵɵdirectiveInject(i3$2.MatDialogRef), i0.ɵɵdirectiveInject(BlobService), i0.ɵɵdirectiveInject(FileService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: FileUploadComponent,\n selectors: [[\"lib-file-upload\"]],\n decls: 17,\n vars: 6,\n consts: [[1, \"row\", \"d-flex\", \"justify-content-center\"], [1, \"col-12\"], [\"class\", \"dropzone\", \"fileDragAndDrop\", \"\", 3, \"filesChangeEmitter\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"row\", \"d-flex\", \"justify-content-between\", \"my-3\"], [1, \"col-6\"], [\"class\", \"btn btn-success btn-upload\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-danger btn-upload\", 3, \"click\", 4, \"ngIf\"], [1, \"gap-1\"], [1, \"row\", \"mt-3\"], [1, \"btn\", \"btn-secondary\", 3, \"click\"], [\"fileDragAndDrop\", \"\", 1, \"dropzone\", 3, \"filesChangeEmitter\"], [1, \"text-wrapper\"], [1, \"fa-regular\", \"fa-upload\", \"upload-icon\"], [1, \"m-0\"], [\"type\", \"file\", \"name\", \"file\", \"id\", \"file\", \"multiple\", \"\", 3, \"change\"], [\"for\", \"file\", 1, \"mt-3\"], [1, \"btn\", \"btn-primary\", \"text-link\"], [1, \"warning\", \"d-flex\", \"align-items-center\"], [2, \"padding\", \"15px\"], [1, \"far\", \"fa-exclamation-triangle\", \"fa-2x\"], [2, \"padding\", \"10px\"], [1, \"mb-1\"], [1, \"btn\", \"btn-success\", \"btn-upload\", 3, \"click\"], [1, \"fa-solid\", \"fa-upload\"], [1, \"btn\", \"btn-danger\", \"btn-upload\", 3, \"click\"], [1, \"fa-solid\", \"fa-times\"], [4, \"ngFor\", \"ngForOf\"], [1, \"row\", \"m-auto\"], [1, \"card\", \"m-1\", \"w-100\"], [1, \"card-body\", \"d-flex\", \"justify-content-between\", \"align-items-center\"], [1, \"file-detail\", 2, \"width\", \"260px\"], [1, \"m-0\", \"file-detail\"], [1, \"btn\", \"btn-danger\", \"btn-icon-clear\", 3, \"click\"], [1, \"fa-solid\", \"fa-xmark\", \"fa-lg\"], [1, \"row\", \"mb-3\"], [1, \"d-flex\", \"justify-content-between\", \"mt-3\", \"mb-1\"], [1, \"upload-file\"], [\"mode\", \"determinate\", 3, \"value\", \"color\"]],\n template: function FileUploadComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"mat-dialog-content\")(1, \"div\", 0)(2, \"div\", 1);\n i0.ɵɵtemplate(3, FileUploadComponent_div_3_Template, 12, 0, \"div\", 2)(4, FileUploadComponent_div_4_Template, 10, 0, \"div\", 3);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(5, \"div\", 4)(6, \"div\", 5);\n i0.ɵɵtemplate(7, FileUploadComponent_button_7_Template, 3, 0, \"button\", 6);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(8, \"div\", 5);\n i0.ɵɵtemplate(9, FileUploadComponent_button_9_Template, 3, 0, \"button\", 7);\n i0.ɵɵelementEnd()();\n i0.ɵɵtemplate(10, FileUploadComponent_div_10_Template, 2, 1, \"div\", 3)(11, FileUploadComponent_ng_container_11_Template, 2, 1, \"ng-container\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(12, \"mat-dialog-actions\", 8)(13, \"div\", 9)(14, \"div\", 1)(15, \"button\", 10);\n i0.ɵɵlistener(\"click\", function FileUploadComponent_Template_button_click_15_listener() {\n return ctx.closeDialog();\n });\n i0.ɵɵtext(16, \"Cancel\");\n i0.ɵɵelementEnd()()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"ngIf\", !ctx.uploadsStarted);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.uploadsStarted);\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"ngIf\", !ctx.uploadsStarted && ctx.filesToUpload.length > 0);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", !ctx.uploadsStarted && ctx.filesToUpload.length > 0);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", !ctx.uploadsStarted);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.uploadsStarted);\n }\n },\n dependencies: [i3$1.NgForOf, i3$1.NgIf, i3$2.MatDialogActions, i3$2.MatDialogContent, i6.MatProgressBar, FileDragAndDropDirective],\n styles: [\"#highfield-uploads-shared-file-upload-container[_ngcontent-%COMP%]{height:90px;overflow-wrap:break-word;word-break:break-all}#highfield-uploads-shared-file-upload-container[_ngcontent-%COMP%] .mat-dialog-content[_ngcontent-%COMP%]{overflow:unset;max-height:500px;min-width:100px}.mat-progress-bar[_ngcontent-%COMP%]{height:30px}.file-select[_ngcontent-%COMP%]{background-color:#f4f4f4;border:1px solid #C8C8C8;border-bottom:none;border-radius:4px 4px 0 0;padding:10px}.selected-files[_ngcontent-%COMP%]{border:1px solid #C8C8C8;border-radius:0 0 4px 4px;padding:10px}.warning[_ngcontent-%COMP%]{padding:5px;background-color:#ffc107;font-weight:500}.btn-icon[_ngcontent-%COMP%]{border-radius:50%;height:35px;width:35px;padding:0}.btn-upload[_ngcontent-%COMP%]{width:100%}.btn-icon-clear[_ngcontent-%COMP%]{border-radius:50%;height:25px;width:25px;padding:0}.dropzone[_ngcontent-%COMP%]{height:220px;display:table;width:100%;background-color:#eee;padding:23px}input[type=file][_ngcontent-%COMP%]{display:none}.text-wrapper[_ngcontent-%COMP%]{text-align:center}.text-link[_ngcontent-%COMP%]{color:#fff;padding:10px 20px;border-radius:25px;cursor:pointer}.upload-icon[_ngcontent-%COMP%]{font-size:4em;margin-bottom:10px;opacity:.2}.file-detail[_ngcontent-%COMP%]{overflow-wrap:break-word;font-weight:500}.upload-file[_ngcontent-%COMP%]{width:400px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\"]\n });\n }\n }\n return FileUploadComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FilePreviousVersionsComponent = /*#__PURE__*/(() => {\n class FilePreviousVersionsComponent {\n constructor(fileService, userService, data, dialogRef, dateTimeService, loadingService) {\n this.fileService = fileService;\n this.userService = userService;\n this.data = data;\n this.dialogRef = dialogRef;\n this.dateTimeService = dateTimeService;\n this.loadingService = loadingService;\n this.fileVersionDetails = [];\n this.fileId = data.fileId;\n }\n async ngOnInit() {\n this.loadingService.setLoading(true);\n let fileVersions = await this.fileService.getFilePreviousVersions(this.fileId);\n for (let fileVersion of fileVersions) {\n if (fileVersion && fileVersion.uploadedBy) {\n let _uploadedBy = await this.userService.getUserAsync(fileVersion.uploadedBy);\n if (_uploadedBy) {\n fileVersion.uploadedBy = _uploadedBy.FirstName + ' ' + _uploadedBy.LastName;\n }\n }\n }\n this.fileVersionDetails = fileVersions;\n this.loadingService.setLoading(false);\n }\n async downloadPreviousFileVersion(fileId) {\n let result = await this.fileService.downloadFilePreviousVersion(fileId);\n await this.download(result);\n }\n closeDialog() {\n this.dialogRef.close();\n }\n async download(result) {\n if (result) {\n const url = FileService.getFullUrl(result);\n //let blob: Blob = await fetch(url).then(r => r.blob());\n const link = document.createElement(\"a\");\n link.setAttribute('download', 'download');\n link.download = result.filename;\n link.target = \"_blank\";\n link.href = url; // window.URL.createObjectURL(blob);\n document.body.appendChild(link);\n link.click();\n link.remove();\n }\n }\n static {\n this.ɵfac = function FilePreviousVersionsComponent_Factory(t) {\n return new (t || FilePreviousVersionsComponent)(i0.ɵɵdirectiveInject(FileService), i0.ɵɵdirectiveInject(i2.UserService), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA), i0.ɵɵdirectiveInject(i3$2.MatDialogRef), i0.ɵɵdirectiveInject(i4$1.DateTimeService), i0.ɵɵdirectiveInject(i3.LoadingService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: FilePreviousVersionsComponent,\n selectors: [[\"highfield-uploads-shared-file-previous-versions\"]],\n decls: 8,\n vars: 1,\n consts: [[\"mat-dialog-title\", \"\"], [\"class\", \"table table-striped table-border mb-3\", 4, \"ngFor\", \"ngForOf\"], [1, \"btn\", \"btn-secondary\", 3, \"click\"], [1, \"fa-solid\", \"fa-xmark\", \"fa-lg\"], [1, \"table\", \"table-striped\", \"table-border\", \"mb-3\"], [\"colspan\", \"2\"], [\"target\", \"_blank\", 1, \"btn\", \"btn-success\", \"w-100\", 3, \"click\"], [1, \"fas\", \"fa-file-download\"]],\n template: function FilePreviousVersionsComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"h2\", 0);\n i0.ɵɵtext(1, \"Previous file versions\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(2, \"mat-dialog-content\");\n i0.ɵɵtemplate(3, FilePreviousVersionsComponent_table_3_Template, 23, 6, \"table\", 1);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"mat-dialog-actions\")(5, \"button\", 2);\n i0.ɵɵlistener(\"click\", function FilePreviousVersionsComponent_Template_button_click_5_listener() {\n return ctx.closeDialog();\n });\n i0.ɵɵelement(6, \"i\", 3);\n i0.ɵɵtext(7, \"\\xA0 Close\");\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"ngForOf\", ctx.fileVersionDetails);\n }\n },\n dependencies: [i3$1.NgForOf, i3$2.MatDialogTitle, i3$2.MatDialogActions, i3$2.MatDialogContent, i3$1.DatePipe],\n styles: [\".table-border[_ngcontent-%COMP%]{border-bottom:2px solid #ccc}\"]\n });\n }\n }\n return FilePreviousVersionsComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet YesNoDialogComponent = /*#__PURE__*/(() => {\n class YesNoDialogComponent {\n constructor(data, dialogRef, router) {\n this.data = data;\n this.dialogRef = dialogRef;\n this.router = router;\n }\n ngOnInit() {}\n submit() {\n this.dialogRef.close(true);\n }\n cancel() {\n this.dialogRef.close(false);\n }\n static {\n this.ɵfac = function YesNoDialogComponent_Factory(t) {\n return new (t || YesNoDialogComponent)(i0.ɵɵdirectiveInject(MAT_DIALOG_DATA), i0.ɵɵdirectiveInject(i3$2.MatDialogRef), i0.ɵɵdirectiveInject(i1$2.Router));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: YesNoDialogComponent,\n selectors: [[\"lib-yes-no-dialog\"]],\n decls: 7,\n vars: 1,\n consts: [[\"mat-dialog-title\", \"\", 3, \"innerHTML\"], [1, \"gap-1\"], [\"type\", \"button\", 1, \"button\", \"btn\", \"btn-success\", 3, \"click\"], [\"type\", \"button\", 1, \"button\", \"btn\", \"btn-danger\", 3, \"click\"]],\n template: function YesNoDialogComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"h2\", 0)(1, \"mat-dialog-content\");\n i0.ɵɵelementStart(2, \"mat-dialog-actions\", 1)(3, \"button\", 2);\n i0.ɵɵlistener(\"click\", function YesNoDialogComponent_Template_button_click_3_listener() {\n return ctx.submit();\n });\n i0.ɵɵtext(4, \"Yes\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(5, \"button\", 3);\n i0.ɵɵlistener(\"click\", function YesNoDialogComponent_Template_button_click_5_listener() {\n return ctx.cancel();\n });\n i0.ɵɵtext(6, \"No\");\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"innerHTML\", ctx.data.message, i0.ɵɵsanitizeHtml);\n }\n },\n dependencies: [i3$2.MatDialogTitle, i3$2.MatDialogActions, i3$2.MatDialogContent]\n });\n }\n }\n return YesNoDialogComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet UploadedFilesComponent = /*#__PURE__*/(() => {\n class UploadedFilesComponent {\n constructor(fileService, treeListService, loadingService, blobService, dialog, folderDownloadService) {\n this.fileService = fileService;\n this.treeListService = treeListService;\n this.loadingService = loadingService;\n this.blobService = blobService;\n this.dialog = dialog;\n this.folderDownloadService = folderDownloadService;\n this.nodeCountChanged = new EventEmitter();\n this.uploadSummary = [];\n this.loading = false;\n this.isSelectionEmpty = true;\n }\n ngOnDestroy() {\n this.treeListSub.unsubscribe();\n }\n async ngOnChanges() {\n this.parentId = this.linkId;\n await this.refreshFiles();\n }\n async ngOnInit() {\n this.treeListSub = this.treeListService.actionClick$.subscribe(action => this.handleActionSubscription(action));\n this.parentId = this.linkId;\n this.flattenStructure();\n of(this.setBreadCrumbs(this.parentId)).subscribe(async () => {\n if (this.breadCrumbs.length > 0) {\n await this.refreshFiles();\n }\n });\n this.treeListService.selectedIdClick$.subscribe(async val => {\n /*this.selectedNodes = val;*/\n this.selectedNodes = val || [];\n this.isSelectionEmpty = this.selectedNodes.length === 0;\n });\n }\n setBreadCrumbs(parentId) {\n this.crumbs = [];\n of(this.buildBreadCrumb(parentId)).subscribe(() => {\n this.breadCrumbs = [];\n this.breadCrumbs = this.crumbs;\n });\n }\n enableButtonOnSelected() {\n return !this.nodes || !this.nodes.some(node => node && node.selected);\n }\n deleteSelectedFiles() {\n this.deleteSelected(this.selectedNodes);\n }\n downloadSelectedFiles() {\n this.downloadSelected(this.selectedNodes);\n }\n onOpenFolder(id) {\n this.parentId = id.toString();\n this.fileId = undefined;\n this.crumbs = [];\n of(this.setBreadCrumbs(this.parentId)).subscribe(async () => {\n if (!(this.breadCrumbs.length < 0)) {\n await this.refreshFiles();\n }\n });\n }\n refreshFiles() {\n this.loading = true;\n console.log(\"Refreshing\");\n from(this.fileService.getUploadedFiles({\n categoryId: this.categoryId,\n linkId: this.parentId\n }, this.useProxy, this.proxyUserId, this.categoryId)).subscribe(files => {\n this.nodes = [];\n this.loading = true;\n //this.loadingService.setLoading(true);\n of(this.setNodes(files)).subscribe(() => {\n this.loading = false;\n //this.loadingService.setLoading(false);\n if (this.nodes?.length > 0) {\n this.nodeCountChanged.emit(this.nodes.length);\n }\n });\n });\n }\n onAddFile(fileLinkId, fileCategoryId) {\n if (this.linkId !== fileLinkId) {\n fileCategoryId = null;\n }\n const dialogRef = this.dialog.open(FileUploadComponent, {\n data: {\n linkId: fileLinkId,\n categoryId: fileCategoryId,\n fileId: null,\n newFile: true,\n useProxy: this.useProxy,\n proxyUserId: this.proxyUserId\n },\n disableClose: true,\n minHeight: '300px',\n width: \"600px\"\n });\n dialogRef.afterClosed().subscribe(() => {\n this.loadingService.setLoading(true);\n this.refreshFiles();\n this.loadingService.setLoading(false);\n });\n }\n onNewVersion(fileId) {\n const dialogRef = this.dialog.open(FileUploadComponent, {\n data: {\n linkId: null,\n categoryId: null,\n fileId: fileId,\n newFile: false,\n useProxy: this.useProxy,\n proxyUserId: this.proxyUserId\n },\n disableClose: true,\n minHeight: '300px',\n width: \"600px\"\n });\n dialogRef.afterClosed().subscribe(() => {\n this.refreshFiles();\n });\n }\n onDetails(fileId) {\n this.fileId = undefined;\n this.fileId = fileId;\n // this.dialog.open(FileDetailsComponent, { data: { linkId: null, categoryId: null, fileId: fileId }, disableClose: true, height: \"300px\", minWidth: \"500px\" });\n }\n onShowPreviousVersions(fileId) {\n this.dialog.open(FilePreviousVersionsComponent, {\n data: {\n linkId: null,\n categoryId: null,\n fileId: fileId\n },\n disableClose: false,\n minWidth: \"550px\"\n });\n }\n onAddFolder(folderLinkId, fileCategoryId) {\n if (this.linkId !== folderLinkId) {\n fileCategoryId = null;\n }\n const dialogRef = this.dialog.open(AddFolderComponent, {\n data: {\n linkId: folderLinkId,\n categoryId: fileCategoryId,\n fileId: null\n },\n disableClose: true,\n width: \"600px\"\n });\n dialogRef.afterClosed().subscribe(async value => {\n this.loadingService.setLoading(true);\n this.loading = true;\n if (value.event) {\n await this.flattenStructure();\n await this.refreshFiles();\n }\n this.loading = false;\n this.loadingService.setLoading(false);\n });\n }\n async onDeleteFolder(folderId) {\n this.loading = true;\n from(this.onDeleteFiles(folderId)).pipe(switchMap(() => {\n return this.fileService.deleteEntity(folderId, this.useProxy, this.proxyUserId, this.categoryId);\n })).subscribe(() => {\n this.refreshFiles();\n });\n this.loading = false;\n //this.loadingService.setLoading(false);\n }\n async onDeleteFiles(fileId) {\n this.loading = true;\n const info = await this.fileService.deleteFileInfo(fileId, this.useProxy, this.proxyUserId, this.categoryId);\n for (const fileInfo of info) {\n if (fileInfo.deletePath) {\n try {\n await this.blobService.delete(fileInfo);\n } catch (ex) {\n console.log(ex.message);\n } finally {\n await this.fileService.deleteVersion(fileInfo.entityId, this.useProxy, this.proxyUserId, this.categoryId);\n }\n } else {\n await this.fileService.deleteEntity(fileInfo.entityId, this.useProxy, this.proxyUserId, this.categoryId);\n }\n }\n this.refreshFiles();\n this.loading = false;\n }\n async download(result) {\n if (result) {\n streamSaver.mitm = 'https://highfieldcdnstorage.blob.core.windows.net/resources/html/mitm.html';\n const url = (await fetch(FileService.getFullUrl(result))).body;\n var fileStream = streamSaver.createWriteStream(`${result.filename}`);\n // Modern implementation\n if (window.WritableStream && !!url.pipeTo) {\n return url.pipeTo(fileStream).then(() => console.log('done writing'));\n }\n // Backup for older browsers\n const writer = fileStream.getWriter();\n const reader = url.getReader();\n const pump = () => reader.read().then(res => res.done ? writer.close() : writer.write(res.value).then(pump));\n pump();\n }\n }\n async onDownloadAllZip(fileLinkId, fileCategoryId) {\n this.loading = true;\n let name = this.flatStructure.find(x => x.id === fileLinkId)?.name !== undefined ? this.flatStructure.find(x => x.id === fileLinkId)?.name : \"information resources\";\n await this.fileService.getUploadedFiles({\n categoryId: fileCategoryId ?? this.categoryId,\n linkId: fileLinkId\n }, this.useProxy, this.proxyUserId, this.categoryId).then(async val => {\n await this.folderDownloadService.downloadZip(name, val);\n this.folderDownloadService.loading$.subscribe(val => {\n this.loading = val;\n });\n });\n }\n async downloadSelected(fileIdList) {\n const zipFileName = `selected_files_${new Date().toISOString()}`;\n this.loading = true;\n await this.fileService.getUploadedFilesbyIds(fileIdList).then(async val => {\n await this.folderDownloadService.downloadZip(zipFileName, val);\n });\n this.folderDownloadService.loading$.subscribe(val => {\n this.loading = val;\n });\n }\n async deleteSelected(fileIdList) {\n this.dialog.open(YesNoDialogComponent, {\n data: {\n message: 'Are you sure that you want to delete these files?'\n }\n }).afterClosed().subscribe(answer => {\n if (answer) {\n fileIdList.forEach(i => {\n this.onDeleteFiles(i);\n });\n }\n });\n }\n async handleActionSubscription(val) {\n if (val) {\n let result;\n this.fileId = undefined;\n switch (val.action) {\n case 'Download':\n result = await this.fileService.downloadFile(val.id, this.useProxy, this.proxyUserId, this.categoryId);\n await this.download(result);\n break;\n case 'Add File':\n await this.onAddFile(val.id, null);\n break;\n case 'Play Audio':\n if (window.location.pathname.toLowerCase().indexOf('embedded') > -1) {\n window.open(`${window.location.protocol}//${window.location.host}/embedded/audio/${val.id}`, '_blank');\n } else {\n window.open(`${window.location.protocol}//${window.location.host}/audio/${val.id}`, '_blank');\n }\n break;\n case 'Play Video':\n if (window.location.pathname.toLowerCase().indexOf('embedded') > -1) {\n window.open(`${window.location.protocol}//${window.location.host}/embedded/video/${val.id}`, '_blank');\n } else {\n window.open(`${window.location.protocol}//${window.location.host}/video/${val.id}`, '_blank');\n }\n break;\n case 'Add Folder':\n await this.onAddFolder(val.id, null);\n break;\n case 'Upload New Version':\n await this.onNewVersion(val.id);\n break;\n case \"View Previous Versions\":\n await this.onShowPreviousVersions(val.id);\n break;\n case 'View Image':\n result = await this.fileService.downloadFile(val.id, this.useProxy, this.proxyUserId, this.categoryId);\n this.fileService.incrementDownloads(result.id, this.useProxy, this.proxyUserId, this.categoryId);\n if (result) {\n window.open(FileService.getFullUrl(result), '_blank');\n }\n break;\n case 'Open Folder':\n this.onOpenFolder(val.id);\n break;\n case 'Download All':\n this.onDownloadAllZip(val.id, null);\n break;\n case 'Delete Contents':\n this.dialog.open(YesNoDialogComponent, {\n data: {\n message: 'Are you sure that you want to delete the contents of this folder?'\n }\n }).afterClosed().subscribe(answer => {\n if (answer) {\n this.onDeleteFiles(val.id);\n }\n });\n break;\n case 'Delete Folder':\n this.dialog.open(YesNoDialogComponent, {\n data: {\n message: 'Are you sure that you want to delete this folder?'\n }\n }).afterClosed().subscribe(answer => {\n if (answer) {\n this.onDeleteFolder(val.id);\n }\n });\n break;\n case 'Delete File':\n this.dialog.open(YesNoDialogComponent, {\n data: {\n message: 'Are you sure that you want to delete this file?'\n }\n }).afterClosed().subscribe(answer => {\n if (answer) {\n this.onDeleteFiles(val.id);\n }\n });\n break;\n //case 'Details':\n // await this.onDetails(val.id);\n // break;\n }\n }\n }\n setChildModeOptions(children) {\n let node;\n for (node of children) {\n node.icon = node.type.hasChildren ? 'far fa-folder' : 'far fa-file';\n node.actions = this.setActions(node);\n node.children = this.setChildModeOptions(node.children);\n }\n return children;\n }\n setActions(entity) {\n let actions = [];\n actions = entity.fileType?.downloadOptions?.map(o => o.downloadOptionName) == undefined ? actions : actions.concat(entity.fileType?.downloadOptions?.map(o => o.downloadOptionName));\n if (entity.type) {\n if (entity.type.hasChildren) {\n actions.push('Open Folder');\n if (this.configuration.showAddFileButton) actions.push('Add File');\n if (this.configuration.showCreateFolderButton) actions.push('Add Folder');\n if (this.configuration.showDownloadButton) actions.push('Download All');\n if (this.configuration.showDeleteButton) {\n actions.push('Delete Contents');\n actions.push('Delete Folder');\n }\n } else {\n if (this.configuration.showDeleteButton) actions.push('Delete File');\n }\n if (entity.type.hasVersions) {\n if (this.configuration.showAddFileButton) actions.push('Upload New Version');\n if (entity.versionCount > 1) actions.push(\"View Previous Versions\");\n }\n }\n return actions;\n }\n setNodes(files) {\n this.nodes = files.map(f => {\n return {\n id: f.id,\n name: f.name,\n icon: f.type.hasChildren ? 'fa-solid fa-folder fa-xl' : this.setFileIcon(f.fileType.mimePrefix),\n children: this.setChildModeOptions(f.children),\n actions: this.setActions(f),\n versionCount: f.versionCount,\n uploadedByName: f.uploadedByName,\n lastUploadedDate: f.lastUploadedDate\n };\n });\n }\n setFileIcon(fileType) {\n switch (fileType) {\n case 'audio':\n return 'fa-solid fa-volume fa-xl';\n case 'image':\n return 'fa-solid fa-image fa-xl';\n case 'video':\n return 'fa-solid fa-video fa-xl';\n case 'text':\n return 'fa-solid fa-file-lines fa-xl';\n default:\n return 'fa-solid fa-file fa-xl';\n }\n }\n async flattenStructure() {\n this.flatStructure = [];\n this.uploadSummary = await this.fileService.getUploadedFiles({\n categoryId: this.categoryId,\n linkId: this.linkId\n }, this.useProxy, this.proxyUserId, this.categoryId);\n of(this.uploadSummary).subscribe(files => {\n from(files.filter(item => item.type.hasChildren)).pipe(expand(x => {\n return x.children && x.children.length ? from(x.children) : EMPTY;\n }), map(y => ({\n id: y.id,\n linkId: y.linkId,\n name: y.name,\n type: y.type\n })), toArray()).subscribe(data => {\n this.flatStructure = data;\n });\n });\n }\n buildBreadCrumb(parentId) {\n if (!Array.isArray(this.flatStructure) || this.flatStructure.length < 0) {\n of(this.flattenStructure).subscribe();\n }\n let summary = this.flatStructure.find(x => x.id.toLowerCase() === parentId.toLowerCase());\n if (summary === undefined) {\n of(this.flattenStructure).subscribe(() => {\n summary = this.flatStructure.find(x => x.id.toLowerCase() === parentId.toLowerCase());\n });\n }\n if (summary) {\n if (this.crumbs === undefined) {\n this.crumbs = new Array();\n }\n let link = {\n id: summary.id,\n parentId: summary.linkId,\n name: summary.name !== 'undefined' && summary.name.length > 50 ? summary.name.slice(0, 50) + '...' : summary.name\n };\n this.crumbs.push(link);\n this.buildBreadCrumb(summary.linkId);\n } else {\n let link = {\n id: parentId,\n parentId: '',\n name: ''\n };\n this.crumbs.push(link);\n }\n }\n responsiveClass() {\n if (this.fileId !== undefined) {\n return \"col-xxl-6 col-xl-6 col-lg-6 col-md-8 col-sm-8 col-xs-8\";\n } else {\n return \"col-xxl-8 col-xl-8 col-lg-8 col-md-8 col-sm-8 col-xs-8\";\n }\n }\n static {\n this.ɵfac = function UploadedFilesComponent_Factory(t) {\n return new (t || UploadedFilesComponent)(i0.ɵɵdirectiveInject(FileService), i0.ɵɵdirectiveInject(TreeListService), i0.ɵɵdirectiveInject(i3.LoadingService), i0.ɵɵdirectiveInject(BlobService), i0.ɵɵdirectiveInject(i3$2.MatDialog), i0.ɵɵdirectiveInject(FolderDownloadService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: UploadedFilesComponent,\n selectors: [[\"highfield-uploads-shared-uploaded-files\"]],\n inputs: {\n linkId: \"linkId\",\n categoryId: \"categoryId\",\n useProxy: \"useProxy\",\n proxyUserId: \"proxyUserId\",\n configuration: \"configuration\"\n },\n outputs: {\n nodeCountChanged: \"nodeCountChanged\"\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: TreeListService,\n useFactory: () => new TreeListService()\n }]), i0.ɵɵNgOnChangesFeature],\n decls: 12,\n vars: 7,\n consts: [[1, \"container-fluid\"], [\"class\", \"col-xxl-8 col-xl-8 col-lg-8 col-md-8 col-sm-8 col-xs-8\"], [1, \"my-3\"], [\"class\", \"btn btn-primary me-2\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-primary btn btn-primary me-2\", 3, \"disabled\", \"click\", 4, \"ngIf\"], [\"class\", \"btn btn-danger btn btn-primary me-2\", 3, \"disabled\", \"click\", 4, \"ngIf\"], [1, \"row\"], [1, \"col-12\"], [\"id\", \"highfield-uploads-shared-uploaded-files-container\"], [4, \"ngIf\"], [1, \"col-xxl-8\", \"col-xl-8\", \"col-lg-8\", \"col-md-8\", \"col-sm-8\", \"col-xs-8\"], [\"class\", \"ml-1\", 4, \"ngIf\"], [1, \"ml-1\"], [\"class\", \"btn btn-link mt-3 p-0\", 3, \"click\", 4, \"ngFor\", \"ngForOf\"], [1, \"btn\", \"btn-link\", \"mt-3\", \"p-0\", 3, \"click\"], [3, \"ngClass\"], [1, \"fas\", \"fa-chevron-right\", \"mx-3\"], [1, \"btn\", \"btn-primary\", \"me-2\", 3, \"click\"], [1, \"fa-solid\", \"fa-file-plus\", \"fa-lg\"], [1, \"fa-solid\", \"fa-folder-plus\", \"fa-lg\"], [1, \"btn\", \"btn-primary\", \"btn\", \"btn-primary\", \"me-2\", 3, \"disabled\", \"click\"], [1, \"btn\", \"btn-danger\", \"btn\", \"btn-primary\", \"me-2\", 3, \"disabled\", \"click\"], [3, \"nodes\", \"configuration\"], [1, \"loading-container\"], [1, \"spinner\"]],\n template: function UploadedFilesComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵtemplate(1, UploadedFilesComponent_Conditional_1_Template, 2, 1, \"div\", 1);\n i0.ɵɵelementStart(2, \"div\", 2);\n i0.ɵɵtemplate(3, UploadedFilesComponent_button_3_Template, 3, 0, \"button\", 3)(4, UploadedFilesComponent_button_4_Template, 3, 0, \"button\", 3)(5, UploadedFilesComponent_button_5_Template, 2, 1, \"button\", 4)(6, UploadedFilesComponent_button_6_Template, 2, 1, \"button\", 5);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(7, \"div\", 6)(8, \"div\", 7)(9, \"div\", 8);\n i0.ɵɵtemplate(10, UploadedFilesComponent_ng_container_10_Template, 2, 2, \"ng-container\", 9);\n i0.ɵɵelementEnd()()();\n i0.ɵɵtemplate(11, UploadedFilesComponent_div_11_Template, 3, 0, \"div\", 9);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵconditional(1, ctx.configuration.showBreadCrumbs ? 1 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", ctx.configuration.showAddFileButton);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.configuration.showCreateFolderButton);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.configuration.showDownloadButton);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.configuration.showDeleteButton);\n i0.ɵɵadvance(4);\n i0.ɵɵproperty(\"ngIf\", ctx.nodes && ctx.nodes.length > 0);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.loading);\n }\n },\n dependencies: [i3$1.NgClass, i3$1.NgForOf, i3$1.NgIf, i8.MatProgressSpinner, TreeListComponent],\n styles: [\"#highfield-uploads-shared-uploaded-files-container[_ngcontent-%COMP%]{height:calc(100% - 50px);width:100%}#highfield-uploads-shared-file-details-container[_ngcontent-%COMP%]{height:calc(100% - 50px);border:5px solid #ddd;border-radius:5px;background-color:#fff;padding:25px}.btn-link[_ngcontent-%COMP%]{padding-right:0;padding-left:6px}.container[_ngcontent-%COMP%], .container-lg[_ngcontent-%COMP%], .container-md[_ngcontent-%COMP%], .container-sm[_ngcontent-%COMP%], .container-xl[_ngcontent-%COMP%]{margin-left:0!important}.loading-container[_ngcontent-%COMP%]{height:100vh;width:100vw;display:flex;justify-content:center;align-items:center;position:absolute;top:0;left:0;z-index:99;background-color:#fff;opacity:.9}\"]\n });\n }\n }\n return UploadedFilesComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass FileUploadConfig {\n constructor() {\n this.showAddFileButton = true;\n this.showDownloadButton = true;\n this.showCreateFolderButton = true;\n this.showDeleteButton = true;\n this.showVersionColumn = true;\n this.showTypeColumn = true;\n this.showUploadedByColumn = true;\n this.showUploadedDateColumn = true;\n this.showActionColumn = true;\n this.showBreadCrumbs = true;\n }\n}\nfunction convertReadonly(config, readonly) {\n const isEditable = readonly === \"0\";\n config.showAddFileButton = isEditable;\n config.showCreateFolderButton = isEditable;\n config.showDeleteButton = isEditable;\n}\nlet ManageComponent = /*#__PURE__*/(() => {\n class ManageComponent {\n constructor(route, router, location) {\n this.route = route;\n this.router = router;\n this.uploadConfig = new FileUploadConfig();\n this.loaded = false;\n this.navigationSubscription = this.router.events.subscribe(e => {\n if (e instanceof NavigationEnd) {\n if (this.loaded) {\n this.child.ngOnChanges();\n }\n }\n });\n this.location = location;\n }\n ngOnInit() {\n this.loaded = false;\n this.route.data.subscribe(({\n access\n }) => {\n this.linkId = access.linkId;\n this.categoryId = access.categoryId;\n convertReadonly(this.uploadConfig, access.readonly);\n });\n this.loaded = true;\n }\n ngOnDestroy() {\n if (this.navigationSubscription) {\n this.navigationSubscription.unsubscribe();\n }\n }\n static {\n this.ɵfac = function ManageComponent_Factory(t) {\n return new (t || ManageComponent)(i0.ɵɵdirectiveInject(i1$2.ActivatedRoute), i0.ɵɵdirectiveInject(i1$2.Router), i0.ɵɵdirectiveInject(i3$1.Location));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: ManageComponent,\n selectors: [[\"lib-manage\"]],\n viewQuery: function ManageComponent_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(UploadedFilesComponent, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.child = _t.first);\n }\n },\n features: [i0.ɵɵProvidersFeature([Location, {\n provide: LocationStrategy,\n useClass: PathLocationStrategy\n }])],\n decls: 4,\n vars: 3,\n consts: [[\"id\", \"highfield-cdn-admin-manage-container\"], [1, \"row\", \"h-25\"], [1, \"row\"], [3, \"linkId\", \"categoryId\", \"configuration\"]],\n template: function ManageComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1)(2, \"div\", 2);\n i0.ɵɵelement(3, \"highfield-uploads-shared-uploaded-files\", 3);\n i0.ɵɵelementEnd()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵpropertyInterpolate(\"linkId\", ctx.linkId);\n i0.ɵɵpropertyInterpolate(\"categoryId\", ctx.categoryId);\n i0.ɵɵproperty(\"configuration\", ctx.uploadConfig);\n }\n },\n dependencies: [UploadedFilesComponent],\n styles: [\"#highfield-cdn-admin-manage-container[_ngcontent-%COMP%]{background-color:#fff;margin-right:2vw!important;padding:20px}#highfield-cdn-admin-manage-container[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] > .row[_ngcontent-%COMP%]{width:80vw}\"]\n });\n }\n }\n return ManageComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PageAccessResolver$1 = class PageAccessResolver {\n resolve(route, state) {\n return of({\n linkId: \"39C9B4D1-974D-42A4-9F9C-2E21A491BA94\",\n categoryId: \"8290C34D-8680-46AE-9EAC-E6ACF5B178D5\",\n readonly: \"0\"\n });\n }\n static {\n this.ɵfac = function PageAccessResolver_Factory(t) {\n return new (t || PageAccessResolver)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: PageAccessResolver,\n factory: PageAccessResolver.ɵfac,\n providedIn: 'root'\n });\n }\n};\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PlayVideoComponent = /*#__PURE__*/(() => {\n class PlayVideoComponent {\n constructor(route, fileService) {\n this.route = route;\n this.fileService = fileService;\n }\n async ngOnInit() {\n const id = this.route.snapshot.params[\"id\"];\n const result = await this.fileService.downloadFile(id);\n this.url = FileService.getFullUrl(result);\n }\n static {\n this.ɵfac = function PlayVideoComponent_Factory(t) {\n return new (t || PlayVideoComponent)(i0.ɵɵdirectiveInject(i1$2.ActivatedRoute), i0.ɵɵdirectiveInject(FileService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: PlayVideoComponent,\n selectors: [[\"highfield-uploads-play-video\"]],\n decls: 1,\n vars: 1,\n consts: [[4, \"ngIf\"], [\"autoplay\", \"\", \"controls\", \"\"], [\"type\", \"video/mp4\", 3, \"src\"]],\n template: function PlayVideoComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, PlayVideoComponent_ng_container_0_Template, 4, 1, \"ng-container\", 0);\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"ngIf\", ctx.url);\n }\n },\n dependencies: [i3$1.NgIf]\n });\n }\n }\n return PlayVideoComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PlayAudioComponent = /*#__PURE__*/(() => {\n class PlayAudioComponent {\n constructor(route, fileService) {\n this.route = route;\n this.fileService = fileService;\n }\n async ngOnInit() {\n const id = this.route.snapshot.params[\"id\"];\n const result = await this.fileService.downloadFile(id);\n this.fileService.incrementDownloads(result.id);\n this.audioUrl = FileService.getFullUrl(result);\n this.audioMimeType = result.mimeType;\n }\n static {\n this.ɵfac = function PlayAudioComponent_Factory(t) {\n return new (t || PlayAudioComponent)(i0.ɵɵdirectiveInject(i1$2.ActivatedRoute), i0.ɵɵdirectiveInject(FileService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: PlayAudioComponent,\n selectors: [[\"highfield-uploads-play-audio\"]],\n decls: 1,\n vars: 1,\n consts: [[4, \"ngIf\"], [\"autoplay\", \"\", \"controls\", \"\"], [3, \"src\", \"type\"]],\n template: function PlayAudioComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, PlayAudioComponent_ng_container_0_Template, 4, 2, \"ng-container\", 0);\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"ngIf\", ctx.audioUrl);\n }\n },\n dependencies: [i3$1.NgIf]\n });\n }\n }\n return PlayAudioComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst adminRoutes = [{\n path: \"\",\n redirectTo: 'manage',\n pathMatch: 'full'\n}, {\n path: \"overview\",\n component: OverviewComponent\n}, {\n path: 'manage',\n component: ManageComponent,\n resolve: {\n access: PageAccessResolver$1\n }\n}, {\n path: \"video/:id\",\n component: PlayVideoComponent\n}, {\n path: \"audio/:id\",\n component: PlayAudioComponent\n}];\nlet AdminRoutingModule = /*#__PURE__*/(() => {\n class AdminRoutingModule {\n static {\n this.ɵfac = function AdminRoutingModule_Factory(t) {\n return new (t || AdminRoutingModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: AdminRoutingModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [RouterModule.forChild(adminRoutes), RouterModule]\n });\n }\n }\n return AdminRoutingModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FileUploadMultipleComponent = /*#__PURE__*/(() => {\n class FileUploadMultipleComponent {\n constructor(router, blobService, fileService, data) {\n this.router = router;\n this.blobService = blobService;\n this.fileService = fileService;\n this.data = data;\n this.filesToUpload = [];\n this.allComplete = false;\n this.uploadsStarted = false;\n this.newFile = true;\n this.linkId = data.linkId;\n this.categoryId = data.categoryId;\n this.fileId = data.fileId;\n this.newFile = data.newFile;\n router.events.subscribe(event => {\n if (event instanceof NavigationStart) {}\n });\n }\n onBeforeUnload($event) {\n if (this.uploadsStarted == true && this.allComplete == false) {\n $event.preventDefault();\n $event.returnValue = 'You currently have files uploading. Closing the browser may result in these files being lost.';\n }\n }\n ngAfterViewInit() {\n this.allComplete = false;\n this.uploadsStarted = false;\n const toolbars = document.getElementsByClassName('ui-fileupload-buttonbar');\n const toolbar = toolbars.item(0);\n this.setStylesUploadBtn(toolbar);\n this.setStylesClearFileListBtn(toolbar);\n }\n handleFilesInput(files) {\n let filesNames = '';\n for (var i = 0; i < files.length; i++) {\n this.filesToUpload.push({\n file: files[i],\n progress: 0,\n uploadCompleted: false\n });\n filesNames.concat(`\"${files[i].name}\" `);\n }\n }\n async primeUploadHandler(event, primeUpload) {\n this.handleFilesInput(event.files);\n primeUpload.clear();\n await this.upload(primeUpload);\n }\n primeFilesSelected(event, primeUpload) {\n this.filesToUpload = [];\n this.allComplete = false;\n }\n async upload(primeUpload) {\n this.uploadsStarted = true;\n const uploadTasks = [];\n if (this.linkId && this.linkId.length) {\n for (let item of this.filesToUpload) {\n uploadTasks.push(this.uploadNewFile(item));\n }\n }\n if (this.fileId && this.fileId.length) {\n for (let item of this.filesToUpload) {\n uploadTasks.push(this.uploadNewVersion(item));\n }\n }\n if (uploadTasks.length > 0) {\n Promise.all(uploadTasks).then(values => {\n this.allComplete = true;\n this.uploadsStarted = false;\n });\n } else {\n this.allComplete = true;\n this.uploadsStarted = false;\n }\n }\n async uploadNewFile(fileToUpload) {\n const upload = new NewUpload();\n upload.typeId = '5B88CEB4-FCD7-43B8-9608-A9DB372A69D4';\n upload.linkId = this.linkId;\n upload.categoryId = this.categoryId;\n if (fileToUpload.file.name.lastIndexOf(\".\") > -1 == true) {\n upload.title = fileToUpload.file.name.substring(0, fileToUpload.file.name.lastIndexOf(\".\"));\n } else {\n upload.title = fileToUpload.file.name;\n }\n upload.description = '';\n upload.filename = fileToUpload.file.name;\n upload.mimeType = fileToUpload.file.type;\n const result = await this.fileService.uploadFile(upload);\n // await this.blobService.upload(result,\n // fileToUpload.file,\n // {\n // onProgress: (progress: TransferProgressEvent) => {\n // const percent = (progress.loadedBytes / fileToUpload.file.size) * 100;\n // fileToUpload.progress = Math.trunc(percent);\n // }\n // });\n await this.fileService.confirmUpload(result.id);\n }\n async uploadNewVersion(fileToUpload) {\n const upload = new NewUploadVersion();\n upload.entityId = this.fileId;\n upload.filename = fileToUpload.file.name;\n upload.mimeType = fileToUpload.file.type;\n const result = await this.fileService.uploadFileVersion(upload);\n // await this.blobService.upload(result,\n // fileToUpload.file,\n // {\n // onProgress: (progress: TransferProgressEvent) => {\n // const percent = (progress.loadedBytes / fileToUpload.file.size) * 100;\n // fileToUpload.progress = Math.trunc(percent);\n // }\n // });\n await this.fileService.confirmUpload(result.id);\n }\n setStylesUploadBtn(toolbar) {\n const pbutton = toolbar?.children.item(1);\n const button = pbutton?.children.item(0);\n button?.classList.add('ui-button-success');\n }\n setStylesClearFileListBtn(toolbar) {\n const pbutton = toolbar?.children.item(2);\n const button = pbutton?.children.item(0);\n button?.classList.add('ui-button-danger');\n }\n static {\n this.ɵfac = function FileUploadMultipleComponent_Factory(t) {\n return new (t || FileUploadMultipleComponent)(i0.ɵɵdirectiveInject(i1$2.Router), i0.ɵɵdirectiveInject(BlobService), i0.ɵɵdirectiveInject(FileService), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: FileUploadMultipleComponent,\n selectors: [[\"highfield-uploads-shared-file-upload-multiple\"]],\n hostBindings: function FileUploadMultipleComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"beforeunload\", function FileUploadMultipleComponent_beforeunload_HostBindingHandler($event) {\n return ctx.onBeforeUnload($event);\n }, false, i0.ɵɵresolveWindow);\n }\n },\n decls: 6,\n vars: 2,\n consts: [[\"id\", \"highfield-uploads-shared-file-upload-container\"], [\"mat-dialog-content\", \"\"], [\"mat-dialog-actions\", \"\"], [\"class\", \"UploadComplete\", 4, \"ngIf\"], [\"class\", \"ui-button-danger\", \"icon\", \"fa fa-times\", \"label\", \"Close\", \"mat-button\", \"\", \"mat-dialog-close\", \"\", 4, \"ngIf\"], [1, \"UploadComplete\"], [\"icon\", \"fa fa-times\", \"label\", \"Close\", \"mat-button\", \"\", \"mat-dialog-close\", \"\", 1, \"ui-button-danger\"]],\n template: function FileUploadMultipleComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵelement(1, \"div\", 1);\n i0.ɵɵelementStart(2, \"div\", 2);\n i0.ɵɵtemplate(3, FileUploadMultipleComponent_span_3_Template, 2, 0, \"span\", 3);\n i0.ɵɵelement(4, \"br\");\n i0.ɵɵtemplate(5, FileUploadMultipleComponent_highfieldlayout_button_5_Template, 1, 0, \"highfieldlayout-button\", 4);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"ngIf\", ctx.allComplete);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", ctx.allComplete == true || ctx.uploadsStarted == false);\n }\n },\n dependencies: [i3$1.NgIf, i3$2.MatDialogClose, i3$2.MatDialogActions, i3$2.MatDialogContent],\n styles: [\"#highfield-uploads-shared-file-upload-container{height:100%}.mat-dialog-content{height:calc(100% - 52px)}.mat-dialog-actions{height:52px}.hide-text{color:transparent}.ui-fileupload-content .ui-fileupload-row .ui-progressbar{position:relative!important;width:100px!important;height:25px!important}.UploadComplete{width:100%;text-align:center;font-weight:700}\\n\"],\n encapsulation: 2\n });\n }\n }\n return FileUploadMultipleComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FileDetailsComponent = /*#__PURE__*/(() => {\n class FileDetailsComponent {\n constructor(fileService, userService, data, dialogRef, dateTimeService, loadingService) {\n this.fileService = fileService;\n this.userService = userService;\n this.data = data;\n this.dialogRef = dialogRef;\n this.dateTimeService = dateTimeService;\n this.loadingService = loadingService;\n this.fileId = data.fileId;\n }\n async ngOnInit() {\n let fileDetails = await this.fileService.getFileDetails(this.fileId);\n if (fileDetails && fileDetails.uploadedBy) {\n let _uploadedBy = await this.userService.getUserAsync(fileDetails.uploadedBy);\n if (_uploadedBy) {\n fileDetails.uploadedBy = _uploadedBy.FirstName + ' ' + _uploadedBy.LastName;\n }\n }\n this.displayFileDetails = fileDetails;\n }\n static {\n this.ɵfac = function FileDetailsComponent_Factory(t) {\n return new (t || FileDetailsComponent)(i0.ɵɵdirectiveInject(FileService), i0.ɵɵdirectiveInject(i2.UserService), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA), i0.ɵɵdirectiveInject(i3$2.MatDialogRef), i0.ɵɵdirectiveInject(i4$1.DateTimeService), i0.ɵɵdirectiveInject(i3.LoadingService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: FileDetailsComponent,\n selectors: [[\"highfield-uploads-shared-file-details\"]],\n decls: 1,\n vars: 1,\n consts: [[\"id\", \"highfield-uploads-shared-file-details-container\", 4, \"ngIf\"], [\"id\", \"highfield-uploads-shared-file-details-container\"], [\"mat-dialog-title\", \"\"], [\"mat-dialog-content\", \"\"], [1, \"row\"], [1, \"col-4\", 2, \"white-space\", \"nowrap\"], [1, \"col-8\"], [\"mat-dialog-actions\", \"\"], [\"icon\", \"fa fa-times\", \"label\", \"Close\", \"mat-button\", \"\", \"mat-dialog-close\", \"\", 1, \"ui-button-danger\"]],\n template: function FileDetailsComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, FileDetailsComponent_div_0_Template, 36, 6, \"div\", 0);\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"ngIf\", ctx.displayFileDetails);\n }\n },\n dependencies: [i3$1.NgIf, i3$2.MatDialogClose, i3$2.MatDialogTitle, i3$2.MatDialogActions, i3$2.MatDialogContent],\n styles: [\"#highfield-uploads-shared-file-upload-container[_ngcontent-%COMP%]{height:50px}\"]\n });\n }\n }\n return FileDetailsComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FileDetailsSideViewComponent = /*#__PURE__*/(() => {\n class FileDetailsSideViewComponent {\n constructor(fileService, userService, loadingService) {\n this.fileService = fileService;\n this.userService = userService;\n this.loadingService = loadingService;\n this.downloadLink = '';\n this.fileIcon = '';\n this.copyText = \" Copy link\";\n }\n async ngOnChanges() {\n if (this.fileId !== undefined) {\n let fileDetails = await this.fileService.getFileDetails(this.fileId.toString());\n this.fileIcon = this.getFileIcon(fileDetails.mimeType);\n let downlodedFile = await this.fileService.downloadFile(this.fileId.toString());\n this.downloadLink = FileService.getFullUrl(downlodedFile);\n if (fileDetails && fileDetails.uploadedBy) {\n let _uploadedBy = await this.userService.getUserAsync(fileDetails.uploadedBy);\n if (_uploadedBy) {\n fileDetails.uploadedBy = _uploadedBy.FirstName + ' ' + _uploadedBy.LastName;\n }\n }\n this.displayFileDetails = fileDetails;\n }\n }\n getFileIcon(mimeType) {\n let extentions = mimeType.split('/');\n if (extentions[0].startsWith(\"application\")) {\n switch (extentions[1]) {\n case \"msword\":\n case \"vnd.openxmlformats-officedocument.wordprocessingml.document\":\n case \"vnd.oasis.opendocument.text\":\n return \"fa-regular fa-file-word fa-lg\";\n case \"pdf\":\n return \"fa-regular fa-file-pdf fa-lg\";\n case \"vnd.ms-excel\":\n case \"vnd.oasis.opendocument.spreadsheet\":\n case \"vnd.openxmlformats-officedocument.spreadsheetml.sheet\":\n return \"fa-regular fa-file-powerpoint fa-lg\";\n case \"zip\":\n case \"x-zip-compressed\":\n return \"fa-regular fa-file-zip fa-lg\";\n default:\n return \"fa-regular fa-file fa-lg\";\n }\n } else {\n switch (extentions[0]) {\n case \"audio\":\n return \"fa-regular fa-volume fa-lg\";\n case \"image\":\n return \"fa-regular fa-image fa-lg\";\n case \"video\":\n return \"fa-regular fa-video fa-lg\";\n case \"text\":\n return \"fa-regular fa-file-lines fa-lg\";\n default:\n return \"fa-regular fa-file fa-lg\";\n }\n }\n }\n downloadFile(fileId) {\n this.fileService.incrementDownloads(fileId);\n }\n onClipboardCopy(successful) {\n if (successful) {\n this.copyText = \" Link Copied\";\n setTimeout(() => {\n this.copyText = \" Copy Link\";\n }, 5000);\n }\n }\n static {\n this.ɵfac = function FileDetailsSideViewComponent_Factory(t) {\n return new (t || FileDetailsSideViewComponent)(i0.ɵɵdirectiveInject(FileService), i0.ɵɵdirectiveInject(i2.UserService), i0.ɵɵdirectiveInject(i3.LoadingService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: FileDetailsSideViewComponent,\n selectors: [[\"lib-file-details-side-view\"]],\n inputs: {\n fileId: \"fileId\"\n },\n features: [i0.ɵɵNgOnChangesFeature],\n decls: 1,\n vars: 1,\n consts: [[\"id\", \"highfield-uploads-shared-file-details-side-view-container\", 4, \"ngIf\"], [\"id\", \"highfield-uploads-shared-file-details-side-view-container\"], [1, \"my-3\"], [1, \"row\"], [1, \"table\", \"table-striped\"], [1, \"cell-1\"], [1, \"col-xxl-4\", \"col-xl-4\", \"col-lg-4\", \"col-md-12\", \"col-sm-12\", \"p-0\", \"detals\"], [1, \"btn\", \"btn-light\", \"me-1\", \"mb-1\", 3, \"cdkCopyToClipboard\", \"cdkCopyToClipboardCopied\"], [1, \"fa-regular\", \"fa-link\", \"fa-lg\"], [\"target\", \"_blank\", 1, \"btn\", \"btn-success\", \"me-1\", \"mb-1\", 3, \"href\"], [1, \"fa-regular\", \"fa-file-arrow-down\", \"fa-lg\", 3, \"click\"]],\n template: function FileDetailsSideViewComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, FileDetailsSideViewComponent_div_0_Template, 38, 14, \"div\", 0);\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"ngIf\", ctx.displayFileDetails);\n }\n },\n dependencies: [i3$1.NgIf, i5.CdkCopyToClipboard, i3$1.DatePipe],\n styles: [\"#highfield-uploads-shared-file-details-side-view-container[_ngcontent-%COMP%], #highfield-uploads-shared-file-details-side-view-container[_ngcontent-%COMP%] .detals[_ngcontent-%COMP%]{overflow-wrap:break-word;word-break:break-all}#highfield-uploads-shared-file-details-side-view-container[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] > .col-lg-4[_ngcontent-%COMP%]{overflow-wrap:break-word;word-break:break-all;white-space:nowrap}#highfield-uploads-shared-file-details-side-view-container[_ngcontent-%COMP%] .h4[_ngcontent-%COMP%], #highfield-uploads-shared-file-details-side-view-container[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{overflow-wrap:break-word;word-break:break-all}#highfield-uploads-shared-file-details-side-view-container[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{min-width:161px;min-height:40px;text-align:center;line-height:1.1em;font-size:1.1em}.cell-1[_ngcontent-%COMP%]{width:170px}\"]\n });\n }\n }\n return FileDetailsSideViewComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet SharedModule = /*#__PURE__*/(() => {\n class SharedModule {\n static forRoot() {\n return {\n ngModule: SharedModule\n };\n }\n static {\n this.ɵfac = function SharedModule_Factory(t) {\n return new (t || SharedModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: SharedModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule, FormsModule, AngularHighfieldauthModule, AngularHighfieldlayoutModule, MatDialogModule, MatMenuModule, MatProgressBarModule, HttpClientModule, ClipboardModule, MatProgressSpinnerModule]\n });\n }\n }\n return SharedModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AdminModule = /*#__PURE__*/(() => {\n class AdminModule {\n static forRoot() {\n return {\n ngModule: AdminModule\n };\n }\n static {\n this.ɵfac = function AdminModule_Factory(t) {\n return new (t || AdminModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: AdminModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule, AdminRoutingModule, AngularHighfieldauthModule, AngularHighfieldwebapiModule, AngularHighfieldlayoutModule, SharedModule]\n });\n }\n }\n return AdminModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ManagePublicComponent = /*#__PURE__*/(() => {\n class ManagePublicComponent {\n constructor(route, router, location) {\n this.route = route;\n this.router = router;\n this.uploadConfig = new FileUploadConfig();\n this.loaded = false;\n this.navigationSubscription = this.router.events.subscribe(e => {\n if (e instanceof NavigationEnd) {\n if (this.loaded) {\n this.child.ngOnChanges();\n }\n }\n });\n this.location = location;\n }\n ngOnInit() {\n this.loaded = false;\n this.route.data.subscribe(({\n access\n }) => {\n this.linkId = access.linkId;\n this.categoryId = access.categoryId;\n convertReadonly(this.uploadConfig, access.readonly);\n });\n this.loaded = true;\n }\n ngOnDestroy() {\n if (this.navigationSubscription) {\n this.navigationSubscription.unsubscribe();\n }\n }\n static {\n this.ɵfac = function ManagePublicComponent_Factory(t) {\n return new (t || ManagePublicComponent)(i0.ɵɵdirectiveInject(i1$2.ActivatedRoute), i0.ɵɵdirectiveInject(i1$2.Router), i0.ɵɵdirectiveInject(i3$1.Location));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: ManagePublicComponent,\n selectors: [[\"lib-manage\"]],\n viewQuery: function ManagePublicComponent_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(UploadedFilesComponent, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.child = _t.first);\n }\n },\n features: [i0.ɵɵProvidersFeature([Location, {\n provide: LocationStrategy,\n useClass: PathLocationStrategy\n }])],\n decls: 4,\n vars: 3,\n consts: [[\"id\", \"highfield-cdn-admin-manage-container\"], [1, \"row\", \"h-25\"], [1, \"row\"], [3, \"linkId\", \"categoryId\", \"configuration\"]],\n template: function ManagePublicComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1)(2, \"div\", 2);\n i0.ɵɵelement(3, \"highfield-uploads-shared-uploaded-files\", 3);\n i0.ɵɵelementEnd()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵpropertyInterpolate(\"linkId\", ctx.linkId);\n i0.ɵɵpropertyInterpolate(\"categoryId\", ctx.categoryId);\n i0.ɵɵproperty(\"configuration\", ctx.uploadConfig);\n }\n },\n dependencies: [UploadedFilesComponent],\n styles: [\"#highfield-cdn-admin-manage-container[_ngcontent-%COMP%]{background-color:#fff;margin-right:2vw!important}#highfield-cdn-admin-manage-container[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] > .row[_ngcontent-%COMP%]{width:80vw}\"]\n });\n }\n }\n return ManagePublicComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet SummaryPublicComponent = /*#__PURE__*/(() => {\n class SummaryPublicComponent {\n constructor(route, router, location) {\n this.route = route;\n this.router = router;\n this.uploadConfig = new FileUploadConfig();\n this.loaded = false;\n this.location = location;\n this.navigationSubscription = this.router.events.subscribe(e => {\n if (e instanceof NavigationEnd) {\n if (this.loaded) {\n this.child.ngOnInit();\n }\n }\n });\n }\n ngOnInit() {\n this.loaded = false;\n this.route.data.subscribe(({\n access\n }) => {\n this.linkId = access.linkId;\n this.categoryId = access.categoryId;\n convertReadonly(this.uploadConfig, access.readonly);\n });\n this.loaded = true;\n }\n ngOnDestroy() {\n if (this.navigationSubscription) {\n this.navigationSubscription.unsubscribe();\n }\n }\n static {\n this.ɵfac = function SummaryPublicComponent_Factory(t) {\n return new (t || SummaryPublicComponent)(i0.ɵɵdirectiveInject(i1$2.ActivatedRoute), i0.ɵɵdirectiveInject(i1$2.Router), i0.ɵɵdirectiveInject(i3$1.Location));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: SummaryPublicComponent,\n selectors: [[\"lib-overview\"]],\n viewQuery: function SummaryPublicComponent_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(UploadedFilesComponent, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.child = _t.first);\n }\n },\n features: [i0.ɵɵProvidersFeature([Location, {\n provide: LocationStrategy,\n useClass: PathLocationStrategy\n }])],\n decls: 4,\n vars: 3,\n consts: [[\"id\", \"highfield-cdn-admin-manage-container\"], [1, \"row\", \"h-25\"], [1, \"row\"], [3, \"linkId\", \"categoryId\", \"configuration\"]],\n template: function SummaryPublicComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1)(2, \"div\", 2);\n i0.ɵɵelement(3, \"highfield-uploads-shared-uploaded-files\", 3);\n i0.ɵɵelementEnd()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵpropertyInterpolate(\"linkId\", ctx.linkId);\n i0.ɵɵpropertyInterpolate(\"categoryId\", ctx.categoryId);\n i0.ɵɵproperty(\"configuration\", ctx.uploadConfig);\n }\n },\n dependencies: [UploadedFilesComponent],\n styles: [\".row[_ngcontent-%COMP%]{width:max-content;display:flex}#highfield-cdn-admin-manage-container[_ngcontent-%COMP%]{background-color:#fff;margin-right:2vw!important}#highfield-cdn-admin-manage-container[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] > .row[_ngcontent-%COMP%]{width:80vw}\"]\n });\n }\n }\n return SummaryPublicComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PageAccessResolver = /*#__PURE__*/(() => {\n class PageAccessResolver {\n resolve(route, state) {\n return of({\n linkId: '39C9B4D1-974D-42A4-9F9C-2E21A491BA94',\n categoryId: '8290C34D-8680-46AE-9EAC-E6ACF5B178D5',\n readonly: '0'\n });\n }\n static {\n this.ɵfac = function PageAccessResolver_Factory(t) {\n return new (t || PageAccessResolver)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: PageAccessResolver,\n factory: PageAccessResolver.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return PageAccessResolver;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PageReadonlyAccessResolver = /*#__PURE__*/(() => {\n class PageReadonlyAccessResolver {\n resolve(route, state) {\n return of({\n linkId: \"39C9B4D1-974D-42A4-9F9C-2E21A491BA94\",\n categoryId: \"8290C34D-8680-46AE-9EAC-E6ACF5B178D5\",\n readonly: \"1\"\n });\n }\n static {\n this.ɵfac = function PageReadonlyAccessResolver_Factory(t) {\n return new (t || PageReadonlyAccessResolver)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: PageReadonlyAccessResolver,\n factory: PageReadonlyAccessResolver.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return PageReadonlyAccessResolver;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet WelcomeComponent = /*#__PURE__*/(() => {\n class WelcomeComponent {\n static {\n this.ɵfac = function WelcomeComponent_Factory(t) {\n return new (t || WelcomeComponent)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: WelcomeComponent,\n selectors: [[\"highfield-uploads-welcome\"]],\n decls: 9,\n vars: 0,\n consts: [[\"routerLink\", \"/login\", \"routerLinkActive\", \"active\"], [\"routerLink\", \"/admin\", \"routerLinkActive\", \"active\"]],\n template: function WelcomeComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"h1\");\n i0.ɵɵtext(1, \"Welcome to the Highfield Uploads System\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(2, \"ul\")(3, \"li\")(4, \"a\", 0);\n i0.ɵɵtext(5, \"Login\");\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(6, \"li\")(7, \"a\", 1);\n i0.ɵɵtext(8, \"Admin Area\");\n i0.ɵɵelementEnd()()();\n }\n },\n dependencies: [i1$2.RouterLink, i1$2.RouterLinkActive]\n });\n }\n }\n return WelcomeComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst publicRoutes = [{\n path: \"\",\n redirectTo: 'welcome',\n pathMatch: 'full'\n}, {\n path: \"welcome\",\n component: WelcomeComponent\n}, {\n path: \"login\",\n component: LoginComponent\n}, {\n path: \"summary\",\n component: SummaryPublicComponent,\n resolve: {\n access: PageReadonlyAccessResolver\n }\n}, {\n path: \"manage\",\n component: ManagePublicComponent,\n resolve: {\n access: PageAccessResolver\n }\n}, {\n path: \"video/:id\",\n component: PlayVideoComponent\n}, {\n path: \"audio/:id\",\n component: PlayAudioComponent\n}];\nlet PublicRoutingModule = /*#__PURE__*/(() => {\n class PublicRoutingModule {\n static {\n this.ɵfac = function PublicRoutingModule_Factory(t) {\n return new (t || PublicRoutingModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: PublicRoutingModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [RouterModule.forChild(publicRoutes), RouterModule]\n });\n }\n }\n return PublicRoutingModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PublicModule = /*#__PURE__*/(() => {\n class PublicModule {\n static forRoot() {\n return {\n ngModule: PublicModule\n };\n }\n static {\n this.ɵfac = function PublicModule_Factory(t) {\n return new (t || PublicModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: PublicModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule, PublicRoutingModule, AngularHighfieldauthModule, AngularHighfieldlayoutModule, AngularHighfieldwebapiModule, SharedModule]\n });\n }\n }\n return PublicModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet LinkService = /*#__PURE__*/(() => {\n class LinkService {\n constructor() {\n this.linkId = '';\n this.parameters = new Map();\n }\n setLinkId(value) {\n this.linkId = value;\n }\n getLinkId() {\n return this.linkId;\n }\n setCategoryId(value) {\n this.categoryId = value;\n }\n getCategoryId() {\n return this.categoryId;\n }\n setParameterValue(name, value) {\n this.parameters.set(name.toLowerCase(), value);\n }\n getParameterValue(name) {\n if (this.parameters.has(name.toLowerCase())) {\n return this.parameters.get(name.toLowerCase());\n } else {\n return '';\n }\n }\n setupLinks(routeSnapshot) {\n if (routeSnapshot.queryParams['linkid'] !== '') {\n this.setLinkId(routeSnapshot.queryParams['linkid']);\n this.setCategoryId(routeSnapshot.queryParams['categoryid']);\n }\n for (var i = 0; i < routeSnapshot.queryParamMap.keys.length; i++) {\n if (routeSnapshot.queryParamMap.keys[i].toLowerCase() !== 'linkid' && routeSnapshot.queryParamMap.keys[i].toLowerCase() !== 'categoryid') {\n this.setParameterValue(routeSnapshot.queryParamMap.keys[i], routeSnapshot.queryParams[routeSnapshot.queryParamMap.keys[i]]);\n }\n }\n }\n static {\n this.ɵfac = function LinkService_Factory(t) {\n return new (t || LinkService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: LinkService,\n factory: LinkService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return LinkService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet FileManagerComponent = /*#__PURE__*/(() => {\n class FileManagerComponent {\n constructor(router, route, linkService) {\n this.router = router;\n this.route = route;\n this.linkService = linkService;\n this.uploadConfig = new FileUploadConfig();\n }\n async ngOnInit() {\n if (this.route.snapshot.queryParams['linkid'] !== '') {\n this.linkService.setLinkId(this.route.snapshot.queryParams['linkid']);\n this.linkService.setCategoryId(this.route.snapshot.queryParams['categoryid']);\n }\n for (var i = 0; i < this.route.snapshot.queryParamMap.keys.length; i++) {\n if (this.route.snapshot.queryParamMap.keys[i].toLowerCase() !== 'linkid' && this.route.snapshot.queryParamMap.keys[i].toLowerCase() !== 'categoryid') {\n this.linkService.setParameterValue(this.route.snapshot.queryParamMap.keys[i], this.route.snapshot.queryParams[this.route.snapshot.queryParamMap.keys[i]]);\n }\n }\n this.route.data.subscribe(({\n access\n }) => {\n convertReadonly(this.uploadConfig, access.readonly);\n });\n this.linkId = this.linkService.getLinkId();\n this.categoryId = this.linkService.getCategoryId();\n }\n static {\n this.ɵfac = function FileManagerComponent_Factory(t) {\n return new (t || FileManagerComponent)(i0.ɵɵdirectiveInject(i1$2.Router), i0.ɵɵdirectiveInject(i1$2.ActivatedRoute), i0.ɵɵdirectiveInject(LinkService));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: FileManagerComponent,\n selectors: [[\"highfield-uploads-embedded\"]],\n decls: 1,\n vars: 3,\n consts: [[3, \"linkId\", \"categoryId\", \"configuration\"]],\n template: function FileManagerComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"highfield-uploads-shared-uploaded-files\", 0);\n }\n if (rf & 2) {\n i0.ɵɵpropertyInterpolate(\"linkId\", ctx.linkId);\n i0.ɵɵpropertyInterpolate(\"categoryId\", ctx.categoryId);\n i0.ɵɵproperty(\"configuration\", ctx.uploadConfig);\n }\n },\n dependencies: [UploadedFilesComponent],\n styles: [\"#highfield-cdn-admin-manage-container[_ngcontent-%COMP%]{width:80vw;background-color:#fff;margin-right:2vw!important}\"]\n });\n }\n }\n return FileManagerComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AdminPageAccessResolver = /*#__PURE__*/(() => {\n class AdminPageAccessResolver {\n resolve(route, state) {\n return of({\n linkId: route.paramMap.get(\"linkid\"),\n categoryId: route.paramMap.get(\"categoryid\"),\n readonly: '0'\n });\n }\n static {\n this.ɵfac = function AdminPageAccessResolver_Factory(t) {\n return new (t || AdminPageAccessResolver)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AdminPageAccessResolver,\n factory: AdminPageAccessResolver.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return AdminPageAccessResolver;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CustomerPageAccessResolver = /*#__PURE__*/(() => {\n class CustomerPageAccessResolver {\n resolve(route, state) {\n return of({\n linkId: route.paramMap.get(\"linkid\"),\n categoryId: route.paramMap.get(\"categoryid\"),\n readonly: '1'\n });\n }\n static {\n this.ɵfac = function CustomerPageAccessResolver_Factory(t) {\n return new (t || CustomerPageAccessResolver)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: CustomerPageAccessResolver,\n factory: CustomerPageAccessResolver.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return CustomerPageAccessResolver;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst embeddedRoutes = [{\n path: \"\",\n redirectTo: 'filemanager',\n pathMatch: 'full'\n}, {\n path: \"filemanager\",\n component: FileManagerComponent,\n resolve: {\n access: AdminPageAccessResolver\n }\n}, {\n path: \"customerfilemanager\",\n component: FileManagerComponent,\n resolve: {\n access: CustomerPageAccessResolver\n }\n}, {\n path: \"video/:id\",\n component: PlayVideoComponent\n}, {\n path: \"audio/:id\",\n component: PlayAudioComponent\n}];\nlet EmbeddedRoutingModule = /*#__PURE__*/(() => {\n class EmbeddedRoutingModule {\n static {\n this.ɵfac = function EmbeddedRoutingModule_Factory(t) {\n return new (t || EmbeddedRoutingModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: EmbeddedRoutingModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [RouterModule.forChild(embeddedRoutes), RouterModule]\n });\n }\n }\n return EmbeddedRoutingModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet EmbeddedModule = /*#__PURE__*/(() => {\n class EmbeddedModule {\n static forRoot() {\n return {\n ngModule: EmbeddedModule\n };\n }\n static {\n this.ɵfac = function EmbeddedModule_Factory(t) {\n return new (t || EmbeddedModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: EmbeddedModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule, EmbeddedRoutingModule, AngularHighfieldauthModule, AngularHighfieldwebapiModule, AngularHighfieldlayoutModule, SharedModule]\n });\n }\n }\n return EmbeddedModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass UploadedSummary {}\nconst CDNPortalAdminLinks = [{\n name: 'Information Resources',\n iconClass: 'fa-solid fa-address-card',\n baseRoute: '/InformationResources',\n order: 0,\n default: true,\n topMenuItems: [{\n name: 'Manage',\n childRoute: '/manage',\n order: 0,\n default: true\n }]\n}];\nconst CDNPortalPublicLinks = [{\n name: 'Information Resources',\n iconClass: 'fa-solid fa-address-card',\n baseRoute: '/InformationResources',\n order: 0,\n default: true,\n topMenuItems: [{\n name: 'DownLoads',\n childRoute: '/manage',\n order: 0,\n default: true\n }]\n}];\nconst CDNPortalReadonlyLinks = [{\n name: 'Information Resources',\n iconClass: 'fa-solid fa-address-card',\n baseRoute: '/InformationResources',\n order: 0,\n default: true,\n topMenuItems: [{\n name: 'Summary',\n childRoute: '/summary',\n order: 0,\n default: true\n }]\n}];\n\n/*\n * Public API Surface of angular-highfield-cdn\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AddFolderComponent, AdminModule, AdminRoutingModule, AngularHighfieldCdnModule, BlobService, CDNPortalAdminLinks, CDNPortalPublicLinks, CDNPortalReadonlyLinks, EmbeddedModule, EmbeddedRoutingModule, FileDetailsComponent, FileManagerComponent, FileService, FileUploadConfig, FileUploadMultipleComponent, ManageComponent, ManagePublicComponent, NodeActionComponent, OverviewComponent, PlayAudioComponent, PlayVideoComponent, PublicModule, PublicRoutingModule, SharedModule, SummaryPublicComponent, TreeListComponent, UploadedFilesComponent, UploadedSummary, WelcomeComponent, adminRoutes, convertReadonly, embeddedRoutes, publicRoutes };\n","import { Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { DocumentUploadAnswerDto } from '../../model/answer/document-upload/document-upload-answer-dto';\r\nimport { FileUploadConfig } from '@highfieldabc/angular-highfield-cdn/lib/shared/models/file-upload-config';\r\n\r\n@Component({\r\n\tselector: 'app-document-upload',\r\n\ttemplateUrl: './document-upload.component.html',\r\n\tstyleUrls: ['./document-upload.component.scss']\r\n})\r\nexport class DocumentUploadComponent{\r\n\r\n\t@Input() public answer!: DocumentUploadAnswerDto;\r\n\t@Input() public isPreview: Boolean = false;\r\n\t@Input() public isMock: Boolean = false;\r\n\r\n\tpublic fileUploadConfig: FileUploadConfig = {\r\n\t\tshowCreateFolderButton: false,\r\n\t\tshowDownloadButton: false,\r\n\t\tshowAddFileButton: true,\r\n\t\tshowDeleteButton: true,\r\n\t\tshowActionColumn: false,\r\n\t\tshowTypeColumn: false,\r\n\t\tshowUploadedByColumn: false,\r\n\t\tshowUploadedDateColumn: false,\r\n\t\tshowVersionColumn: false,\r\n\t\tshowBreadCrumbs: false\r\n\t}\r\n\r\n\tpublic shouldUseProxy: boolean = true;\r\n\tconstructor(@Inject('CoreExamCDNCategoryId') public coreExamCDNCategoryId: string, @Inject('CoreExamsUserId') public coreExamsUserId: string) { }\r\n\r\n\tpublic markAsAnswered(): void {\r\n\t\tthis.answer.hasInteracted = true;\r\n\t}\r\n}\r\n","
\r\n\t
\r\n\t\t

Upload your documents below:

\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n\t
\r\n\t\t
\r\n\t\t\t

Question preview does not support document upload answers

\r\n\t\t
\r\n\t
\r\n\t
\r\n\t\t
\r\n\t\t\t

Mock exams do not support document upload answers

\r\n\t\t
\r\n\t
\r\n
\r\n","export enum FormBuilderElementTypeIdentifier {\r\n\tUnknown = 0,\r\n\tInput = 1,\r\n\tSelect = 2,\r\n\tImage = 3,\r\n\tLineBreak = 4,\r\n\tHeading = 5,\r\n\tParagraph = 6\r\n}\r\n","export enum FormBuilderElementInputTypeIdentifier {\r\n\tUnknown = 0,\r\n\tText = 1,\r\n\tNumber = 2,\r\n\tDate = 3,\r\n\tCheckbox = 4,\r\n\tTextArea = 5\r\n}\r\n","import { Component, EventEmitter, Input, LOCALE_ID, OnInit, Output } from '@angular/core';\r\nimport { FormAnswerDTO } from '../../model/answer/form/form-answer-dto';\r\nimport { FormAnswerItemDTO } from '../../model/answer/form/form-answer-item-dto';\r\nimport { FormBuilderElementTypeIdentifier } from '../../model/answer/form/form-builder-element-type-identifier';\r\nimport { FormBuilderElementInputTypeIdentifier } from '../../model/answer/form/form-builder-element-input-type-identifier';\r\nimport { formatDate } from '@angular/common';\r\n\r\n@Component({\r\n\tselector: 'app-form-item',\r\n\ttemplateUrl: './form.component.html',\r\n\tstyleUrls: ['./form.component.scss']\r\n})\r\nexport class FormComponent implements OnInit {\r\n\r\n\t@Input() public answer!: FormAnswerDTO;\r\n\r\n\tpublic FormBuilderElementTypeIdentifier = FormBuilderElementTypeIdentifier;\r\n\tpublic FormBuilderElementInputTypeIdentifier = FormBuilderElementInputTypeIdentifier;\r\n\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.answer.formItems = this.setupFormItems(this.answer!.formItems!)\r\n\t}\r\n\r\n\tpublic setupFormItems(formItems: FormAnswerItemDTO[]): FormAnswerItemDTO[] {\r\n\r\n\t\tformItems.sort((a: FormAnswerItemDTO, b: FormAnswerItemDTO) => a.index - b.index);\r\n\r\n\t\tformItems.forEach(item => {\r\n\t\t\tif ((item.userInput == null || item.userInput == \"\") && (item.defaultValue || item.checkedByDefault)) {\r\n\t\t\t\tswitch (item.formBuilderInputTypeNumericalIdentifier) {\r\n\t\t\t\t\tcase FormBuilderElementInputTypeIdentifier.Date:\r\n\t\t\t\t\t\tvar stringValue = formatDate(item.defaultValue!, \"yyyy-MM-dd\", \"en-GB\")\r\n\t\t\t\t\t\titem.userInput = stringValue\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase FormBuilderElementInputTypeIdentifier.Checkbox: \r\n\t\t\t\t\t\titem.userInput = item.checkedByDefault == true ? \"True\" : \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\titem.userInput = item.defaultValue!;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\treturn formItems;\r\n\t}\r\n\r\n\tonCheckboxChange(checked: boolean, index: number) {\r\n\t\tthis.answer.formItems[index].userInput = checked ? 'True' : 'False';\r\n\t}\r\n}\r\n","
\r\n\t
\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t@switch (formItem.formBuilderElementTypeNumericalIdentifier) {\r\n\t\t\t\t\t\t@case(FormBuilderElementTypeIdentifier.Input){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t@switch (formItem.formBuilderInputTypeNumericalIdentifier) {\r\n\t\t\t\t\t\t@case (FormBuilderElementInputTypeIdentifier.Text) {\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@case (FormBuilderElementInputTypeIdentifier.Number) {\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@case (FormBuilderElementInputTypeIdentifier.Date) {\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@case (FormBuilderElementInputTypeIdentifier.Checkbox) {\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@case (FormBuilderElementInputTypeIdentifier.TextArea) {\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@case(FormBuilderElementTypeIdentifier.Select){\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@case(FormBuilderElementTypeIdentifier.Image){\r\n\t\t\t\t\t\t

Image

\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@case(FormBuilderElementTypeIdentifier.LineBreak){\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@case(FormBuilderElementTypeIdentifier.Heading){\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@case(FormBuilderElementTypeIdentifier.Paragraph){\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n
\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { MaterialModule } from '../material/material.module';\r\nimport { CalculatorComponent } from './calculator/calculator.component';\r\nimport { DrawingCanvasControlsComponent } from './drawing-canvas/controls/drawing-canvas-controls.component';\r\nimport { DrawingCanvasComponent } from './drawing-canvas/drawing-canvas.component';\r\nimport { ProtractorComponent } from './protractor/protractor.component';\r\nimport { ReorderComponent } from './reorder/reorder.component';\r\nimport { RulerComponent } from './ruler/ruler.component';\r\nimport { TableComponent } from './table/table.component';\r\nimport { OpenResponseComponent } from './open-response/open-response.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { QuillModule } from 'ngx-quill';\r\nimport { MathsToolbarComponent } from '../site/exam/toolbars/maths-toolbar/maths-toolbar.component';\r\nimport { ScaleComponent } from './scale/scale.component';\r\nimport { SimpleResponseComponent } from './open-response/simple/simple-response.component';\r\nimport { AdvancedResponseComponent } from './open-response/advanced/advanced-response.component';\r\nimport { ChartConfirmComponent } from './charts/chart-selector/chart-confirm/chart-confirm.component';\r\nimport { MultiChoiceComponent } from './multi-choice/multi-choice.component';\r\nimport { DocumentUploadComponent } from './document-upload/document-upload.component';\r\nimport { SharedModule as CDNSharedModule } from '@highfieldabc/angular-highfield-cdn';\r\nimport { FormComponent } from './form/form.component';\r\n\r\n\r\n@NgModule({\r\n\tdeclarations: [\r\n\t\tProtractorComponent,\r\n\t\tRulerComponent,\r\n\t\tDrawingCanvasComponent,\r\n\t\tDrawingCanvasControlsComponent,\r\n\t\tReorderComponent,\r\n\t\tCalculatorComponent,\r\n\t\tTableComponent,\r\n\t\tOpenResponseComponent,\r\n\t\tMathsToolbarComponent,\r\n\t\tScaleComponent,\r\n\t\tSimpleResponseComponent,\r\n\t\tAdvancedResponseComponent,\r\n\t\tChartConfirmComponent,\r\n\t\tMultiChoiceComponent,\r\n\t\tFormComponent,\r\n\t\tDocumentUploadComponent\r\n\t],\r\n\timports: [\r\n\t\tFormsModule,\r\n\t\tCommonModule,\r\n\t\tMaterialModule,\r\n\t\tQuillModule.forRoot({\r\n\t\t\tmodules: {\r\n\t\t\t\ttoolbar: [\r\n\t\t\t\t\t['bold', 'italic', 'underline'], // toggled buttons\r\n\t\t\t\t\t[{ 'list': 'ordered' }, { 'list': 'bullet' }],\r\n\t\t\t\t\t[{ 'script': 'sub' }, { 'script': 'super' }], // superscript/subscript\r\n\t\t\t\t\t[{ 'indent': '-1' }, { 'indent': '+1' }], // outdent/indent\r\n\t\t\t\t\t[{ 'direction': 'rtl' }], // text direction\r\n\t\t\t\t\t[{ 'align': [] }],\r\n\t\t\t\t\t['clean'], // remove formatting button\r\n\t\t\t\t\t[{ 'header': [1, 2, 3, 4, 5, 6, false] }],\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\tcustomOptions: [{\r\n\t\t\t\timport: 'attributors/style/size',\r\n\t\t\t\twhitelist: ['8px', '10px', '12px', '14px', '16px', '18px', '20px']\r\n\t\t\t}]\r\n\t\t}),\r\n\t\tCDNSharedModule\r\n\t],\r\n\texports: [\r\n\t\tProtractorComponent,\r\n\t\tRulerComponent,\r\n\t\tDrawingCanvasComponent,\r\n\t\tDrawingCanvasControlsComponent,\r\n\t\tCalculatorComponent,\r\n\t\tTableComponent,\r\n\t\tReorderComponent,\r\n\t\tOpenResponseComponent,\r\n\t\tMathsToolbarComponent,\r\n\t\tScaleComponent,\r\n\t\tSimpleResponseComponent,\r\n\t\tAdvancedResponseComponent,\r\n\t\tChartConfirmComponent,\r\n\t\tMultiChoiceComponent,\r\n\t\tDocumentUploadComponent,\r\n\t\tCDNSharedModule,\r\n\t\tFormComponent\r\n\t]\r\n})\r\nexport class ToolModule { }\r\n","import * as i0 from '@angular/core';\nimport { Injectable, inject, ElementRef, NgZone, EventEmitter, Directive, Input, Output, ViewContainerRef, TemplateRef, ContentChild, ChangeDetectorRef, DestroyRef, ContentChildren, NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, PLATFORM_ID, LOCALE_ID, ViewChild, Injector, forwardRef, ApplicationRef, EnvironmentInjector, createComponent, Attribute, ViewChildren, HostBinding, InjectionToken } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, EMPTY, of, Subject, fromEvent, timer, race, BehaviorSubject, combineLatest, NEVER, zip, merge } from 'rxjs';\nimport { endWith, takeUntil, filter, map, distinctUntilChanged, startWith, switchMap, take, tap, withLatestFrom, delay, mergeMap, skip, finalize } from 'rxjs/operators';\nimport { isPlatformBrowser, NgTemplateOutlet, FormStyle, TranslationWidth, getLocaleMonthNames, getLocaleDayNames, formatDate, DOCUMENT, PercentPipe, getLocaleDayPeriods } from '@angular/common';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';\nimport { flip, preventOverflow, arrow, createPopperLite, offset } from '@popperjs/core';\nfunction NgbAlert_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r2 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 1);\n i0.ɵɵlistener(\"click\", function NgbAlert_Conditional_1_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r2);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1.close());\n });\n i0.ɵɵelementEnd();\n }\n}\nconst _c0 = [\"*\"];\nfunction NgbCarousel_For_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r9 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 2);\n i0.ɵɵlistener(\"click\", function NgbCarousel_For_2_Template_button_click_0_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r9);\n const slide_r3 = restoredCtx.$implicit;\n const ctx_r8 = i0.ɵɵnextContext();\n ctx_r8.focus();\n return i0.ɵɵresetView(ctx_r8.select(slide_r3.id, ctx_r8.NgbSlideEventSource.INDICATOR));\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const slide_r3 = ctx.$implicit;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"active\", slide_r3.id === ctx_r0.activeId);\n i0.ɵɵattribute(\"aria-labelledby\", \"slide-\" + slide_r3.id)(\"aria-controls\", \"slide-\" + slide_r3.id)(\"aria-selected\", slide_r3.id === ctx_r0.activeId);\n }\n}\nfunction NgbCarousel_For_5_ng_template_3_Template(rf, ctx) {}\nfunction NgbCarousel_For_5_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 3)(1, \"span\", 4);\n i0.ɵɵi18n(2, 5);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(3, NgbCarousel_For_5_ng_template_3_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const slide_r10 = ctx.$implicit;\n const i_r11 = ctx.$index;\n const c_r13 = ctx.$count;\n i0.ɵɵproperty(\"id\", \"slide-\" + slide_r10.id);\n i0.ɵɵadvance(2);\n i0.ɵɵi18nExp(i_r11 + 1)(c_r13);\n i0.ɵɵi18nApply(2);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", slide_r10.templateRef);\n }\n}\nfunction NgbCarousel_Conditional_6_Template(rf, ctx) {\n if (rf & 1) {\n const _r17 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 7);\n i0.ɵɵlistener(\"click\", function NgbCarousel_Conditional_6_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r17);\n const ctx_r16 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r16.arrowLeft());\n });\n i0.ɵɵelement(1, \"span\", 8);\n i0.ɵɵelementStart(2, \"span\", 9);\n i0.ɵɵi18n(3, 10);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(4, \"button\", 11);\n i0.ɵɵlistener(\"click\", function NgbCarousel_Conditional_6_Template_button_click_4_listener() {\n i0.ɵɵrestoreView(_r17);\n const ctx_r18 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r18.arrowRight());\n });\n i0.ɵɵelement(5, \"span\", 12);\n i0.ɵɵelementStart(6, \"span\", 9);\n i0.ɵɵi18n(7, 13);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext();\n i0.ɵɵattribute(\"aria-labelledby\", ctx_r2.id + \"-previous\");\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"id\", ctx_r2.id + \"-previous\");\n i0.ɵɵadvance(2);\n i0.ɵɵattribute(\"aria-labelledby\", ctx_r2.id + \"-next\");\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"id\", ctx_r2.id + \"-next\");\n }\n}\nconst _c1 = [\"ngbDatepickerDayView\", \"\"];\nconst _c2 = [\"month\"];\nconst _c3 = [\"year\"];\nfunction NgbDatepickerNavigationSelect_For_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"option\", 4);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const m_r4 = ctx.$implicit;\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"value\", m_r4);\n i0.ɵɵattribute(\"aria-label\", ctx_r1.i18n.getMonthFullName(m_r4, ctx_r1.date.year));\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r1.i18n.getMonthShortName(m_r4, ctx_r1.date.year));\n }\n}\nfunction NgbDatepickerNavigationSelect_For_7_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"option\", 4);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const y_r9 = ctx.$implicit;\n const ctx_r3 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"value\", y_r9);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r3.i18n.getYearNumerals(y_r9));\n }\n}\nfunction NgbDatepickerNavigation_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r3 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"ngb-datepicker-navigation-select\", 6);\n i0.ɵɵlistener(\"select\", function NgbDatepickerNavigation_Conditional_3_Template_ngb_datepicker_navigation_select_select_0_listener($event) {\n i0.ɵɵrestoreView(_r3);\n const ctx_r2 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r2.select.emit($event));\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"date\", ctx_r0.date)(\"disabled\", ctx_r0.disabled)(\"months\", ctx_r0.selectBoxes.months)(\"years\", ctx_r0.selectBoxes.years);\n }\n}\nfunction NgbDatepickerNavigation_Conditional_4_For_1_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 9);\n }\n}\nfunction NgbDatepickerNavigation_Conditional_4_For_1_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 9);\n }\n}\nfunction NgbDatepickerNavigation_Conditional_4_For_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepickerNavigation_Conditional_4_For_1_Conditional_0_Template, 1, 0, \"div\", 7);\n i0.ɵɵelementStart(1, \"div\", 8);\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(3, NgbDatepickerNavigation_Conditional_4_For_1_Conditional_3_Template, 1, 0, \"div\", 7);\n }\n if (rf & 2) {\n const month_r5 = ctx.$implicit;\n const i_r6 = ctx.$index;\n const ctx_r4 = i0.ɵɵnextContext(2);\n i0.ɵɵconditional(0, i_r6 > 0 ? 0 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate1(\" \", ctx_r4.i18n.getMonthLabel(month_r5.firstDate), \" \");\n i0.ɵɵadvance();\n i0.ɵɵconditional(3, i_r6 !== ctx_r4.months.length - 1 ? 3 : -1);\n }\n}\nfunction NgbDatepickerNavigation_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵrepeaterCreate(0, NgbDatepickerNavigation_Conditional_4_For_1_Template, 4, 3, null, null, i0.ɵɵrepeaterTrackByIdentity);\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵrepeater(ctx_r1.months);\n }\n}\nfunction NgbDatepickerMonth_Conditional_0_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 3);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r2.i18n.getWeekLabel());\n }\n}\nfunction NgbDatepickerMonth_Conditional_0_For_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 4);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const weekday_r4 = ctx.$implicit;\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(weekday_r4);\n }\n}\nfunction NgbDatepickerMonth_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 1);\n i0.ɵɵtemplate(1, NgbDatepickerMonth_Conditional_0_Conditional_1_Template, 2, 1, \"div\", 2);\n i0.ɵɵrepeaterCreate(2, NgbDatepickerMonth_Conditional_0_For_3_Template, 2, 1, \"div\", 5, i0.ɵɵrepeaterTrackByIdentity);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵconditional(1, ctx_r0.datepicker.showWeekNumbers ? 1 : -1);\n i0.ɵɵadvance();\n i0.ɵɵrepeater(ctx_r0.viewModel.weekdays);\n }\n}\nfunction NgbDatepickerMonth_For_2_Conditional_0_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 9);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const week_r9 = i0.ɵɵnextContext(2).$implicit;\n const ctx_r15 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r15.i18n.getWeekNumerals(week_r9.number));\n }\n}\nfunction NgbDatepickerMonth_For_2_Conditional_0_For_3_Conditional_1_ng_template_0_Template(rf, ctx) {}\nfunction NgbDatepickerMonth_For_2_Conditional_0_For_3_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepickerMonth_For_2_Conditional_0_For_3_Conditional_1_ng_template_0_Template, 0, 0, \"ng-template\", 11);\n }\n if (rf & 2) {\n const day_r18 = i0.ɵɵnextContext().$implicit;\n const ctx_r23 = i0.ɵɵnextContext(3);\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r23.datepicker.dayTemplate)(\"ngTemplateOutletContext\", day_r18.context);\n }\n}\nfunction NgbDatepickerMonth_For_2_Conditional_0_For_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r27 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 10);\n i0.ɵɵlistener(\"click\", function NgbDatepickerMonth_For_2_Conditional_0_For_3_Template_div_click_0_listener($event) {\n const restoredCtx = i0.ɵɵrestoreView(_r27);\n const day_r18 = restoredCtx.$implicit;\n const ctx_r26 = i0.ɵɵnextContext(3);\n ctx_r26.doSelect(day_r18);\n return i0.ɵɵresetView($event.preventDefault());\n });\n i0.ɵɵtemplate(1, NgbDatepickerMonth_For_2_Conditional_0_For_3_Conditional_1_Template, 1, 2, null, 11);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const day_r18 = ctx.$implicit;\n i0.ɵɵclassProp(\"disabled\", day_r18.context.disabled)(\"hidden\", day_r18.hidden)(\"ngb-dp-today\", day_r18.context.today);\n i0.ɵɵproperty(\"tabindex\", day_r18.tabindex);\n i0.ɵɵattribute(\"aria-label\", day_r18.ariaLabel);\n i0.ɵɵadvance();\n i0.ɵɵconditional(1, !day_r18.hidden ? 1 : -1);\n }\n}\nfunction NgbDatepickerMonth_For_2_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 7);\n i0.ɵɵtemplate(1, NgbDatepickerMonth_For_2_Conditional_0_Conditional_1_Template, 2, 1, \"div\", 8);\n i0.ɵɵrepeaterCreate(2, NgbDatepickerMonth_For_2_Conditional_0_For_3_Template, 2, 9, \"div\", 12, i0.ɵɵrepeaterTrackByIdentity);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const week_r9 = i0.ɵɵnextContext().$implicit;\n const ctx_r14 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵconditional(1, ctx_r14.datepicker.showWeekNumbers ? 1 : -1);\n i0.ɵɵadvance();\n i0.ɵɵrepeater(week_r9.days);\n }\n}\nfunction NgbDatepickerMonth_For_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepickerMonth_For_2_Conditional_0_Template, 4, 1, \"div\", 6);\n }\n if (rf & 2) {\n const week_r9 = ctx.$implicit;\n i0.ɵɵconditional(0, !week_r9.collapsed ? 0 : -1);\n }\n}\nconst _c4 = [\"defaultDayTemplate\"];\nconst _c5 = [\"content\"];\nfunction NgbDatepicker_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 8);\n }\n if (rf & 2) {\n const date_r8 = ctx.date;\n const currentMonth_r9 = ctx.currentMonth;\n const selected_r10 = ctx.selected;\n const disabled_r11 = ctx.disabled;\n const focused_r12 = ctx.focused;\n i0.ɵɵproperty(\"date\", date_r8)(\"currentMonth\", currentMonth_r9)(\"selected\", selected_r10)(\"disabled\", disabled_r11)(\"focused\", focused_r12);\n }\n}\nfunction NgbDatepicker_ng_template_2_For_1_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 12);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const month_r14 = i0.ɵɵnextContext().$implicit;\n const ctx_r19 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx_r19.i18n.getMonthLabel(month_r14.firstDate), \" \");\n }\n}\nfunction NgbDatepicker_ng_template_2_For_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 9);\n i0.ɵɵtemplate(1, NgbDatepicker_ng_template_2_For_1_Conditional_1_Template, 2, 1, \"div\", 10);\n i0.ɵɵelement(2, \"ngb-datepicker-month\", 11);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const month_r14 = ctx.$implicit;\n const ctx_r13 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance();\n i0.ɵɵconditional(1, ctx_r13.navigation === \"none\" || ctx_r13.displayMonths > 1 && ctx_r13.navigation === \"select\" ? 1 : -1);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"month\", month_r14.firstDate);\n }\n}\nfunction NgbDatepicker_ng_template_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵrepeaterCreate(0, NgbDatepicker_ng_template_2_For_1_Template, 3, 2, \"div\", 13, i0.ɵɵrepeaterTrackByIdentity);\n }\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext();\n i0.ɵɵrepeater(ctx_r2.model.months);\n }\n}\nfunction NgbDatepicker_Conditional_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r22 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"ngb-datepicker-navigation\", 14);\n i0.ɵɵlistener(\"navigate\", function NgbDatepicker_Conditional_5_Template_ngb_datepicker_navigation_navigate_0_listener($event) {\n i0.ɵɵrestoreView(_r22);\n const ctx_r21 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r21.onNavigateEvent($event));\n })(\"select\", function NgbDatepicker_Conditional_5_Template_ngb_datepicker_navigation_select_0_listener($event) {\n i0.ɵɵrestoreView(_r22);\n const ctx_r23 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r23.onNavigateDateSelect($event));\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r4 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"date\", ctx_r4.model.firstDate)(\"months\", ctx_r4.model.months)(\"disabled\", ctx_r4.model.disabled)(\"showSelect\", ctx_r4.model.navigation === \"select\")(\"prevDisabled\", ctx_r4.model.prevDisabled)(\"nextDisabled\", ctx_r4.model.nextDisabled)(\"selectBoxes\", ctx_r4.model.selectBoxes);\n }\n}\nfunction NgbDatepicker_ng_template_8_Template(rf, ctx) {}\nfunction NgbDatepicker_ng_template_9_Template(rf, ctx) {}\nconst _c6 = a0 => ({\n $implicit: a0\n});\nconst _c7 = [\"dialog\"];\nconst _c8 = [\"ngbNavOutlet\", \"\"];\nfunction NgbNavOutlet_For_1_Conditional_0_ng_template_1_Template(rf, ctx) {}\nfunction NgbNavOutlet_For_1_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵtemplate(1, NgbNavOutlet_For_1_Conditional_0_ng_template_1_Template, 0, 0, \"ng-template\", 1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const item_r1 = i0.ɵɵnextContext().$implicit;\n const ctx_r6 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"item\", item_r1)(\"nav\", ctx_r6.nav)(\"role\", ctx_r6.paneRole);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", (item_r1.contentTpl == null ? null : item_r1.contentTpl.templateRef) || null)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction1(5, _c6, item_r1.active || ctx_r6.isPanelTransitioning(item_r1)));\n }\n}\nfunction NgbNavOutlet_For_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbNavOutlet_For_1_Conditional_0_Template, 2, 7, \"div\", 0);\n }\n if (rf & 2) {\n const item_r1 = ctx.$implicit;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵconditional(0, item_r1.isPanelInDom() || ctx_r0.isPanelTransitioning(item_r1) ? 0 : -1);\n }\n}\nfunction NgbPagination_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵi18n(1, 10);\n i0.ɵɵelementEnd();\n }\n}\nfunction NgbPagination_ng_template_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵi18n(1, 11);\n i0.ɵɵelementEnd();\n }\n}\nfunction NgbPagination_ng_template_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵi18n(1, 12);\n i0.ɵɵelementEnd();\n }\n}\nfunction NgbPagination_ng_template_6_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵi18n(1, 13);\n i0.ɵɵelementEnd();\n }\n}\nfunction NgbPagination_ng_template_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0, \"...\");\n }\n}\nfunction NgbPagination_ng_template_10_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0);\n }\n if (rf & 2) {\n const page_r19 = ctx.$implicit;\n i0.ɵɵtextInterpolate(page_r19);\n }\n}\nfunction NgbPagination_ng_template_12_For_1_Conditional_1_ng_template_1_Template(rf, ctx) {}\nconst _c9 = a1 => ({\n disabled: true,\n currentPage: a1\n});\nfunction NgbPagination_ng_template_12_For_1_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"a\", 16);\n i0.ɵɵtemplate(1, NgbPagination_ng_template_12_For_1_Conditional_1_ng_template_1_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const page_r21 = i0.ɵɵnextContext(2).$implicit;\n const ctx_r30 = i0.ɵɵnextContext();\n const _r9 = i0.ɵɵreference(9);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r30.tplEllipsis == null ? null : ctx_r30.tplEllipsis.templateRef) || _r9)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction1(2, _c9, page_r21));\n }\n}\nfunction NgbPagination_ng_template_12_For_1_Conditional_2_ng_template_1_Template(rf, ctx) {}\nconst _c10 = (a0, a1, a2) => ({\n disabled: a0,\n $implicit: a1,\n currentPage: a2\n});\nfunction NgbPagination_ng_template_12_For_1_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r37 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"a\", 17);\n i0.ɵɵlistener(\"click\", function NgbPagination_ng_template_12_For_1_Conditional_2_Template_a_click_0_listener($event) {\n i0.ɵɵrestoreView(_r37);\n const pageNumber_r25 = i0.ɵɵnextContext().$implicit;\n const ctx_r35 = i0.ɵɵnextContext(2);\n ctx_r35.selectPage(pageNumber_r25);\n return i0.ɵɵresetView($event.preventDefault());\n });\n i0.ɵɵtemplate(1, NgbPagination_ng_template_12_For_1_Conditional_2_ng_template_1_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const pageNumber_r25 = i0.ɵɵnextContext().$implicit;\n const ctx_r38 = i0.ɵɵnextContext();\n const disabled_r23 = ctx_r38.disabled;\n const page_r21 = ctx_r38.$implicit;\n const ctx_r31 = i0.ɵɵnextContext();\n const _r11 = i0.ɵɵreference(11);\n i0.ɵɵattribute(\"tabindex\", disabled_r23 ? \"-1\" : null)(\"aria-disabled\", disabled_r23 ? \"true\" : null);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r31.tplNumber == null ? null : ctx_r31.tplNumber.templateRef) || _r11)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction3(4, _c10, disabled_r23, pageNumber_r25, page_r21));\n }\n}\nfunction NgbPagination_ng_template_12_For_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"li\", 14);\n i0.ɵɵtemplate(1, NgbPagination_ng_template_12_For_1_Conditional_1_Template, 2, 4, \"a\", 15)(2, NgbPagination_ng_template_12_For_1_Conditional_2_Template, 2, 8);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const pageNumber_r25 = ctx.$implicit;\n const ctx_r40 = i0.ɵɵnextContext();\n const page_r21 = ctx_r40.$implicit;\n const disabled_r23 = ctx_r40.disabled;\n const ctx_r24 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"active\", pageNumber_r25 === page_r21)(\"disabled\", ctx_r24.isEllipsis(pageNumber_r25) || disabled_r23);\n i0.ɵɵattribute(\"aria-current\", pageNumber_r25 === page_r21 ? \"page\" : null);\n i0.ɵɵadvance();\n i0.ɵɵconditional(1, ctx_r24.isEllipsis(pageNumber_r25) ? 1 : 2);\n }\n}\nfunction NgbPagination_ng_template_12_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵrepeaterCreate(0, NgbPagination_ng_template_12_For_1_Template, 3, 6, \"li\", 18, i0.ɵɵrepeaterTrackByIdentity);\n }\n if (rf & 2) {\n const pages_r22 = ctx.pages;\n i0.ɵɵrepeater(pages_r22);\n }\n}\nfunction NgbPagination_Conditional_15_ng_template_2_Template(rf, ctx) {}\nconst _c11 = (a0, a1) => ({\n disabled: a0,\n currentPage: a1\n});\nfunction NgbPagination_Conditional_15_Template(rf, ctx) {\n if (rf & 1) {\n const _r43 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"li\", 14)(1, \"a\", 19);\n i0.ɵɵlistener(\"click\", function NgbPagination_Conditional_15_Template_a_click_1_listener($event) {\n i0.ɵɵrestoreView(_r43);\n const ctx_r42 = i0.ɵɵnextContext();\n ctx_r42.selectPage(1);\n return i0.ɵɵresetView($event.preventDefault());\n });\n i0.ɵɵtemplate(2, NgbPagination_Conditional_15_ng_template_2_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r14 = i0.ɵɵnextContext();\n const _r1 = i0.ɵɵreference(1);\n i0.ɵɵclassProp(\"disabled\", ctx_r14.previousDisabled());\n i0.ɵɵadvance();\n i0.ɵɵattribute(\"tabindex\", ctx_r14.previousDisabled() ? \"-1\" : null)(\"aria-disabled\", ctx_r14.previousDisabled() ? \"true\" : null);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r14.tplFirst == null ? null : ctx_r14.tplFirst.templateRef) || _r1)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction2(6, _c11, ctx_r14.previousDisabled(), ctx_r14.page));\n }\n}\nfunction NgbPagination_Conditional_16_ng_template_2_Template(rf, ctx) {}\nconst _c12 = a0 => ({\n disabled: a0\n});\nfunction NgbPagination_Conditional_16_Template(rf, ctx) {\n if (rf & 1) {\n const _r46 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"li\", 14)(1, \"a\", 20);\n i0.ɵɵlistener(\"click\", function NgbPagination_Conditional_16_Template_a_click_1_listener($event) {\n i0.ɵɵrestoreView(_r46);\n const ctx_r45 = i0.ɵɵnextContext();\n ctx_r45.selectPage(ctx_r45.page - 1);\n return i0.ɵɵresetView($event.preventDefault());\n });\n i0.ɵɵtemplate(2, NgbPagination_Conditional_16_ng_template_2_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r15 = i0.ɵɵnextContext();\n const _r3 = i0.ɵɵreference(3);\n i0.ɵɵclassProp(\"disabled\", ctx_r15.previousDisabled());\n i0.ɵɵadvance();\n i0.ɵɵattribute(\"tabindex\", ctx_r15.previousDisabled() ? \"-1\" : null)(\"aria-disabled\", ctx_r15.previousDisabled() ? \"true\" : null);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r15.tplPrevious == null ? null : ctx_r15.tplPrevious.templateRef) || _r3)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction1(6, _c12, ctx_r15.previousDisabled()));\n }\n}\nfunction NgbPagination_ng_template_17_Template(rf, ctx) {}\nfunction NgbPagination_Conditional_18_ng_template_2_Template(rf, ctx) {}\nfunction NgbPagination_Conditional_18_Template(rf, ctx) {\n if (rf & 1) {\n const _r49 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"li\", 14)(1, \"a\", 21);\n i0.ɵɵlistener(\"click\", function NgbPagination_Conditional_18_Template_a_click_1_listener($event) {\n i0.ɵɵrestoreView(_r49);\n const ctx_r48 = i0.ɵɵnextContext();\n ctx_r48.selectPage(ctx_r48.page + 1);\n return i0.ɵɵresetView($event.preventDefault());\n });\n i0.ɵɵtemplate(2, NgbPagination_Conditional_18_ng_template_2_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r17 = i0.ɵɵnextContext();\n const _r5 = i0.ɵɵreference(5);\n i0.ɵɵclassProp(\"disabled\", ctx_r17.nextDisabled());\n i0.ɵɵadvance();\n i0.ɵɵattribute(\"tabindex\", ctx_r17.nextDisabled() ? \"-1\" : null)(\"aria-disabled\", ctx_r17.nextDisabled() ? \"true\" : null);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r17.tplNext == null ? null : ctx_r17.tplNext.templateRef) || _r5)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction2(6, _c11, ctx_r17.nextDisabled(), ctx_r17.page));\n }\n}\nfunction NgbPagination_Conditional_19_ng_template_2_Template(rf, ctx) {}\nfunction NgbPagination_Conditional_19_Template(rf, ctx) {\n if (rf & 1) {\n const _r52 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"li\", 14)(1, \"a\", 22);\n i0.ɵɵlistener(\"click\", function NgbPagination_Conditional_19_Template_a_click_1_listener($event) {\n i0.ɵɵrestoreView(_r52);\n const ctx_r51 = i0.ɵɵnextContext();\n ctx_r51.selectPage(ctx_r51.pageCount);\n return i0.ɵɵresetView($event.preventDefault());\n });\n i0.ɵɵtemplate(2, NgbPagination_Conditional_19_ng_template_2_Template, 0, 0, \"ng-template\", 8);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r18 = i0.ɵɵnextContext();\n const _r7 = i0.ɵɵreference(7);\n i0.ɵɵclassProp(\"disabled\", ctx_r18.nextDisabled());\n i0.ɵɵadvance();\n i0.ɵɵattribute(\"tabindex\", ctx_r18.nextDisabled() ? \"-1\" : null)(\"aria-disabled\", ctx_r18.nextDisabled() ? \"true\" : null);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx_r18.tplLast == null ? null : ctx_r18.tplLast.templateRef) || _r7)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction2(6, _c11, ctx_r18.nextDisabled(), ctx_r18.page));\n }\n}\nconst _c13 = (a0, a1, a2) => ({\n $implicit: a0,\n pages: a1,\n disabled: a2\n});\nfunction NgbPopoverWindow_Conditional_1_ng_template_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0);\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵtextInterpolate(ctx_r1.title);\n }\n}\nfunction NgbPopoverWindow_Conditional_1_ng_template_3_Template(rf, ctx) {}\nfunction NgbPopoverWindow_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"h3\", 3);\n i0.ɵɵtemplate(1, NgbPopoverWindow_Conditional_1_ng_template_1_Template, 1, 1, \"ng-template\", null, 4, i0.ɵɵtemplateRefExtractor)(3, NgbPopoverWindow_Conditional_1_ng_template_3_Template, 0, 0, \"ng-template\", 5);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const _r2 = i0.ɵɵreference(2);\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r0.isTitleTemplate() ? ctx_r0.title : _r2)(\"ngTemplateOutletContext\", ctx_r0.context);\n }\n}\nfunction NgbProgressbar_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\");\n i0.ɵɵi18n(1, 0);\n i0.ɵɵpipe(2, \"percent\");\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵi18nExp(i0.ɵɵpipeBind1(2, 1, ctx_r0.getValue() / ctx_r0.max));\n i0.ɵɵi18nApply(1);\n }\n}\nfunction NgbRating_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0);\n }\n if (rf & 2) {\n const fill_r3 = ctx.fill;\n i0.ɵɵtextInterpolate(fill_r3 === 100 ? \"\\u2605\" : \"\\u2606\");\n }\n}\nfunction NgbRating_For_3_ng_template_3_Template(rf, ctx) {}\nfunction NgbRating_For_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r11 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"span\", 1);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(2, \"span\", 2);\n i0.ɵɵlistener(\"mouseenter\", function NgbRating_For_3_Template_span_mouseenter_2_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r11);\n const index_r5 = restoredCtx.$index;\n const ctx_r10 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r10.enter(index_r5 + 1));\n })(\"click\", function NgbRating_For_3_Template_span_click_2_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r11);\n const index_r5 = restoredCtx.$index;\n const ctx_r12 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r12.handleClick(index_r5 + 1));\n });\n i0.ɵɵtemplate(3, NgbRating_For_3_ng_template_3_Template, 0, 0, \"ng-template\", 3);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const index_r5 = ctx.$index;\n const ctx_r2 = i0.ɵɵnextContext();\n const _r1 = i0.ɵɵreference(1);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\"(\", index_r5 < ctx_r2.nextRate ? \"*\" : \" \", \")\");\n i0.ɵɵadvance();\n i0.ɵɵstyleProp(\"cursor\", ctx_r2.isInteractive() ? \"pointer\" : \"default\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r2.starTemplate || ctx_r2.starTemplateFromContent || _r1)(\"ngTemplateOutletContext\", ctx_r2.contexts[index_r5]);\n }\n}\nfunction NgbTimepicker_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r7 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 8);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_Conditional_3_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r7);\n const ctx_r6 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r6.changeHour(ctx_r6.hourStep));\n });\n i0.ɵɵelement(1, \"span\", 9);\n i0.ɵɵelementStart(2, \"span\", 10);\n i0.ɵɵi18n(3, 11);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"btn-sm\", ctx_r0.isSmallSize)(\"btn-lg\", ctx_r0.isLargeSize)(\"disabled\", ctx_r0.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r0.disabled);\n }\n}\nfunction NgbTimepicker_Conditional_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r9 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 8);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_Conditional_5_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r9);\n const ctx_r8 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r8.changeHour(-ctx_r8.hourStep));\n });\n i0.ɵɵelement(1, \"span\", 12);\n i0.ɵɵelementStart(2, \"span\", 10);\n i0.ɵɵi18n(3, 13);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"btn-sm\", ctx_r1.isSmallSize)(\"btn-lg\", ctx_r1.isLargeSize)(\"disabled\", ctx_r1.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r1.disabled);\n }\n}\nfunction NgbTimepicker_Conditional_9_Template(rf, ctx) {\n if (rf & 1) {\n const _r11 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 8);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_Conditional_9_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r11);\n const ctx_r10 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r10.changeMinute(ctx_r10.minuteStep));\n });\n i0.ɵɵelement(1, \"span\", 9);\n i0.ɵɵelementStart(2, \"span\", 10);\n i0.ɵɵi18n(3, 14);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"btn-sm\", ctx_r2.isSmallSize)(\"btn-lg\", ctx_r2.isLargeSize)(\"disabled\", ctx_r2.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r2.disabled);\n }\n}\nfunction NgbTimepicker_Conditional_11_Template(rf, ctx) {\n if (rf & 1) {\n const _r13 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 8);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_Conditional_11_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r13);\n const ctx_r12 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r12.changeMinute(-ctx_r12.minuteStep));\n });\n i0.ɵɵelement(1, \"span\", 12);\n i0.ɵɵelementStart(2, \"span\", 10);\n i0.ɵɵi18n(3, 15);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r3 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"btn-sm\", ctx_r3.isSmallSize)(\"btn-lg\", ctx_r3.isLargeSize)(\"disabled\", ctx_r3.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r3.disabled);\n }\n}\nfunction NgbTimepicker_Conditional_12_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r17 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 8);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_Conditional_12_Conditional_3_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r17);\n const ctx_r16 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r16.changeSecond(ctx_r16.secondStep));\n });\n i0.ɵɵelement(1, \"span\", 9);\n i0.ɵɵelementStart(2, \"span\", 10);\n i0.ɵɵi18n(3, 18);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r14 = i0.ɵɵnextContext(2);\n i0.ɵɵclassProp(\"btn-sm\", ctx_r14.isSmallSize)(\"btn-lg\", ctx_r14.isLargeSize)(\"disabled\", ctx_r14.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r14.disabled);\n }\n}\nfunction NgbTimepicker_Conditional_12_Conditional_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r19 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 8);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_Conditional_12_Conditional_5_Template_button_click_0_listener() {\n i0.ɵɵrestoreView(_r19);\n const ctx_r18 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r18.changeSecond(-ctx_r18.secondStep));\n });\n i0.ɵɵelement(1, \"span\", 12);\n i0.ɵɵelementStart(2, \"span\", 10);\n i0.ɵɵi18n(3, 19);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r15 = i0.ɵɵnextContext(2);\n i0.ɵɵclassProp(\"btn-sm\", ctx_r15.isSmallSize)(\"btn-lg\", ctx_r15.isLargeSize)(\"disabled\", ctx_r15.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r15.disabled);\n }\n}\nfunction NgbTimepicker_Conditional_12_Template(rf, ctx) {\n if (rf & 1) {\n const _r21 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 5);\n i0.ɵɵtext(1, \":\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(2, \"div\", 16);\n i0.ɵɵtemplate(3, NgbTimepicker_Conditional_12_Conditional_3_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementStart(4, \"input\", 17);\n i0.ɵɵlistener(\"change\", function NgbTimepicker_Conditional_12_Template_input_change_4_listener($event) {\n i0.ɵɵrestoreView(_r21);\n const ctx_r20 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r20.updateSecond($event.target.value));\n })(\"blur\", function NgbTimepicker_Conditional_12_Template_input_blur_4_listener() {\n i0.ɵɵrestoreView(_r21);\n const ctx_r22 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r22.handleBlur());\n })(\"input\", function NgbTimepicker_Conditional_12_Template_input_input_4_listener($event) {\n i0.ɵɵrestoreView(_r21);\n const ctx_r23 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r23.formatInput($event.target));\n })(\"keydown.ArrowUp\", function NgbTimepicker_Conditional_12_Template_input_keydown_ArrowUp_4_listener($event) {\n i0.ɵɵrestoreView(_r21);\n const ctx_r24 = i0.ɵɵnextContext();\n ctx_r24.changeSecond(ctx_r24.secondStep);\n return i0.ɵɵresetView($event.preventDefault());\n })(\"keydown.ArrowDown\", function NgbTimepicker_Conditional_12_Template_input_keydown_ArrowDown_4_listener($event) {\n i0.ɵɵrestoreView(_r21);\n const ctx_r25 = i0.ɵɵnextContext();\n ctx_r25.changeSecond(-ctx_r25.secondStep);\n return i0.ɵɵresetView($event.preventDefault());\n });\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(5, NgbTimepicker_Conditional_12_Conditional_5_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r4 = i0.ɵɵnextContext();\n i0.ɵɵadvance(3);\n i0.ɵɵconditional(3, ctx_r4.spinners ? 3 : -1);\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"form-control-sm\", ctx_r4.isSmallSize)(\"form-control-lg\", ctx_r4.isLargeSize);\n i0.ɵɵproperty(\"value\", ctx_r4.formatMinSec(ctx_r4.model == null ? null : ctx_r4.model.second))(\"readOnly\", ctx_r4.readonlyInputs)(\"disabled\", ctx_r4.disabled);\n i0.ɵɵadvance();\n i0.ɵɵconditional(5, ctx_r4.spinners ? 5 : -1);\n }\n}\nfunction NgbTimepicker_Conditional_13_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵi18n(1, 22);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r26 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance();\n i0.ɵɵi18nExp(ctx_r26.i18n.getAfternoonPeriod());\n i0.ɵɵi18nApply(1);\n }\n}\nfunction NgbTimepicker_Conditional_13_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtext(1);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r27 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r27.i18n.getMorningPeriod());\n }\n}\nfunction NgbTimepicker_Conditional_13_Template(rf, ctx) {\n if (rf & 1) {\n const _r29 = i0.ɵɵgetCurrentView();\n i0.ɵɵelement(0, \"div\", 5);\n i0.ɵɵelementStart(1, \"div\", 20)(2, \"button\", 21);\n i0.ɵɵlistener(\"click\", function NgbTimepicker_Conditional_13_Template_button_click_2_listener() {\n i0.ɵɵrestoreView(_r29);\n const ctx_r28 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r28.toggleMeridian());\n });\n i0.ɵɵtemplate(3, NgbTimepicker_Conditional_13_Conditional_3_Template, 2, 1, \"ng-container\")(4, NgbTimepicker_Conditional_13_Conditional_4_Template, 2, 1);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r5 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵclassProp(\"btn-sm\", ctx_r5.isSmallSize)(\"btn-lg\", ctx_r5.isLargeSize)(\"disabled\", ctx_r5.disabled);\n i0.ɵɵproperty(\"disabled\", ctx_r5.disabled);\n i0.ɵɵadvance();\n i0.ɵɵconditional(3, ctx_r5.model && ctx_r5.model.hour >= 12 ? 3 : 4);\n }\n}\nfunction NgbToast_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"strong\", 3);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r0.header);\n }\n}\nfunction NgbToast_Conditional_2_ng_template_1_Template(rf, ctx) {}\nfunction NgbToast_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r5 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 4);\n i0.ɵɵtemplate(1, NgbToast_Conditional_2_ng_template_1_Template, 0, 0, \"ng-template\", 5);\n i0.ɵɵelementStart(2, \"button\", 6);\n i0.ɵɵlistener(\"click\", function NgbToast_Conditional_2_Template_button_click_2_listener() {\n i0.ɵɵrestoreView(_r5);\n const ctx_r4 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r4.hide());\n });\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r2 = i0.ɵɵnextContext();\n const _r1 = i0.ɵɵreference(1);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r2.contentHeaderTpl || _r1);\n }\n}\nfunction NgbHighlight_For_1_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\");\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const part_r1 = i0.ɵɵnextContext().$implicit;\n const ctx_r6 = i0.ɵɵnextContext();\n i0.ɵɵclassMap(ctx_r6.highlightClass);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(part_r1);\n }\n}\nfunction NgbHighlight_For_1_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵtext(1);\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const part_r1 = i0.ɵɵnextContext().$implicit;\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(part_r1);\n }\n}\nfunction NgbHighlight_For_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbHighlight_For_1_Conditional_0_Template, 2, 4, \"span\", 0)(1, NgbHighlight_For_1_Conditional_1_Template, 2, 1);\n }\n if (rf & 2) {\n const $index_r2 = ctx.$index;\n i0.ɵɵconditional(0, $index_r2 % 2 !== 0 ? 0 : 1);\n }\n}\nfunction NgbTypeaheadWindow_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"ngb-highlight\", 1);\n }\n if (rf & 2) {\n const result_r3 = ctx.result;\n const term_r4 = ctx.term;\n const formatter_r5 = ctx.formatter;\n i0.ɵɵproperty(\"result\", formatter_r5(result_r3))(\"term\", term_r4);\n }\n}\nfunction NgbTypeaheadWindow_For_3_ng_template_1_Template(rf, ctx) {}\nconst _c14 = (a0, a1, a2) => ({\n result: a0,\n term: a1,\n formatter: a2\n});\nfunction NgbTypeaheadWindow_For_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r13 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"button\", 2);\n i0.ɵɵlistener(\"mouseenter\", function NgbTypeaheadWindow_For_3_Template_button_mouseenter_0_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r13);\n const idx_r7 = restoredCtx.$index;\n const ctx_r12 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r12.markActive(idx_r7));\n })(\"click\", function NgbTypeaheadWindow_For_3_Template_button_click_0_listener() {\n const restoredCtx = i0.ɵɵrestoreView(_r13);\n const result_r6 = restoredCtx.$implicit;\n const ctx_r14 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r14.select(result_r6));\n });\n i0.ɵɵtemplate(1, NgbTypeaheadWindow_For_3_ng_template_1_Template, 0, 0, \"ng-template\", 3);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const result_r6 = ctx.$implicit;\n const idx_r7 = ctx.$index;\n const ctx_r2 = i0.ɵɵnextContext();\n const _r1 = i0.ɵɵreference(1);\n i0.ɵɵclassProp(\"active\", idx_r7 === ctx_r2.activeIdx);\n i0.ɵɵproperty(\"id\", ctx_r2.id + \"-\" + idx_r7);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r2.resultTemplate || _r1)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction3(5, _c14, result_r6, ctx_r2.term, ctx_r2.formatter));\n }\n}\nconst environment = {\n animation: true,\n transitionTimerDelayMs: 5\n};\n\n/**\n * Global ng-bootstrap config\n *\n * @since 8.0.0\n */\nlet NgbConfig = /*#__PURE__*/(() => {\n class NgbConfig {\n constructor() {\n this.animation = environment.animation;\n }\n static {\n this.ɵfac = function NgbConfig_Factory(t) {\n return new (t || NgbConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbConfig,\n factory: NgbConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbAccordionDirective`](#/components/accordion/api#NgbAccordionDirective).\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all accordions used in the application.\n */\nlet NgbAccordionConfig = /*#__PURE__*/(() => {\n class NgbAccordionConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.closeOthers = false;\n this.destroyOnHide = true;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static {\n this.ɵfac = function NgbAccordionConfig_Factory(t) {\n return new (t || NgbAccordionConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbAccordionConfig,\n factory: NgbAccordionConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbAccordionConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction getTransitionDurationMs(element) {\n const {\n transitionDelay,\n transitionDuration\n } = window.getComputedStyle(element);\n const transitionDelaySec = parseFloat(transitionDelay);\n const transitionDurationSec = parseFloat(transitionDuration);\n return (transitionDelaySec + transitionDurationSec) * 1000;\n}\nfunction toInteger(value) {\n return parseInt(`${value}`, 10);\n}\nfunction toString(value) {\n return value !== undefined && value !== null ? `${value}` : '';\n}\nfunction getValueInRange(value, max, min = 0) {\n return Math.max(Math.min(value, max), min);\n}\nfunction isString(value) {\n return typeof value === 'string';\n}\nfunction isNumber(value) {\n return !isNaN(toInteger(value));\n}\nfunction isInteger(value) {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\nfunction isPromise(v) {\n return v && v.then;\n}\nfunction padNumber(value) {\n if (isNumber(value)) {\n return `0${value}`.slice(-2);\n } else {\n return '';\n }\n}\nfunction regExpEscape(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\nfunction closest(element, selector) {\n if (!selector) {\n return null;\n }\n /*\n * In certain browsers (e.g. Edge 44.18362.449.0) HTMLDocument does\n * not support `Element.prototype.closest`. To emulate the correct behaviour\n * we return null when the method is missing.\n *\n * Note that in evergreen browsers `closest(document.documentElement, 'html')`\n * will return the document element whilst in Edge null will be returned. This\n * compromise was deemed good enough.\n */\n if (typeof element.closest === 'undefined') {\n return null;\n }\n return element.closest(selector);\n}\n/**\n * Force a browser reflow\n * @param element element where to apply the reflow\n */\nfunction reflow(element) {\n return (element || document.body).getBoundingClientRect();\n}\n/**\n * Creates an observable where all callbacks are executed inside a given zone\n *\n * @param zone\n */\nfunction runInZone(zone) {\n return source => {\n return new Observable(observer => {\n const next = value => zone.run(() => observer.next(value));\n const error = e => zone.run(() => observer.error(e));\n const complete = () => zone.run(() => observer.complete());\n return source.subscribe({\n next,\n error,\n complete\n });\n });\n };\n}\nfunction removeAccents(str) {\n return str.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n/**\n * Returns the active element in the given root.\n * If the active element is inside a shadow root, it is searched recursively.\n */\nfunction getActiveElement(root = document) {\n const activeEl = root?.activeElement;\n if (!activeEl) {\n return null;\n }\n return activeEl.shadowRoot ? getActiveElement(activeEl.shadowRoot) : activeEl;\n}\nconst noopFn = () => {};\nconst {\n transitionTimerDelayMs\n} = environment;\nconst runningTransitions = new Map();\nconst ngbRunTransition = (zone, element, startFn, options) => {\n // Getting initial context from options\n let context = options.context || {};\n // Checking if there are already running transitions on the given element.\n const running = runningTransitions.get(element);\n if (running) {\n switch (options.runningTransition) {\n // If there is one running and we want for it to 'continue' to run, we have to cancel the new one.\n // We're not emitting any values, but simply completing the observable (EMPTY).\n case 'continue':\n return EMPTY;\n // If there is one running and we want for it to 'stop', we have to complete the running one.\n // We're simply completing the running one and not emitting any values and merging newly provided context\n // with the one coming from currently running transition.\n case 'stop':\n zone.run(() => running.transition$.complete());\n context = Object.assign(running.context, context);\n runningTransitions.delete(element);\n }\n }\n // Running the start function\n const endFn = startFn(element, options.animation, context) || noopFn;\n // If 'prefer-reduced-motion' is enabled, the 'transition' will be set to 'none'.\n // If animations are disabled, we have to emit a value and complete the observable\n // In this case we have to call the end function, but can finish immediately by emitting a value,\n // completing the observable and executing end functions synchronously.\n if (!options.animation || window.getComputedStyle(element).transitionProperty === 'none') {\n zone.run(() => endFn());\n return of(undefined).pipe(runInZone(zone));\n }\n // Starting a new transition\n const transition$ = new Subject();\n const finishTransition$ = new Subject();\n const stop$ = transition$.pipe(endWith(true));\n runningTransitions.set(element, {\n transition$,\n complete: () => {\n finishTransition$.next();\n finishTransition$.complete();\n },\n context\n });\n const transitionDurationMs = getTransitionDurationMs(element);\n // 1. We have to both listen for the 'transitionend' event and have a 'just-in-case' timer,\n // because 'transitionend' event might not be fired in some browsers, if the transitioning\n // element becomes invisible (ex. when scrolling, making browser tab inactive, etc.). The timer\n // guarantees, that we'll release the DOM element and complete 'ngbRunTransition'.\n // 2. We need to filter transition end events, because they might bubble from shorter transitions\n // on inner DOM elements. We're only interested in the transition on the 'element' itself.\n zone.runOutsideAngular(() => {\n const transitionEnd$ = fromEvent(element, 'transitionend').pipe(takeUntil(stop$), filter(({\n target\n }) => target === element));\n const timer$ = timer(transitionDurationMs + transitionTimerDelayMs).pipe(takeUntil(stop$));\n race(timer$, transitionEnd$, finishTransition$).pipe(takeUntil(stop$)).subscribe(() => {\n runningTransitions.delete(element);\n zone.run(() => {\n endFn();\n transition$.next();\n transition$.complete();\n });\n });\n });\n return transition$.asObservable();\n};\nconst ngbCompleteTransition = element => {\n runningTransitions.get(element)?.complete();\n};\nfunction measureCollapsingElementDimensionPx(element, dimension) {\n // SSR fix for without injecting the PlatformId\n if (typeof navigator === 'undefined') {\n return '0px';\n }\n const {\n classList\n } = element;\n const hasShownClass = classList.contains('show');\n if (!hasShownClass) {\n classList.add('show');\n }\n element.style[dimension] = '';\n const dimensionSize = element.getBoundingClientRect()[dimension] + 'px';\n if (!hasShownClass) {\n classList.remove('show');\n }\n return dimensionSize;\n}\nconst ngbCollapsingTransition = (element, animation, context) => {\n let {\n direction,\n maxSize,\n dimension\n } = context;\n const {\n classList\n } = element;\n function setInitialClasses() {\n classList.add('collapse');\n if (direction === 'show') {\n classList.add('show');\n } else {\n classList.remove('show');\n }\n }\n // without animations we just need to set initial classes\n if (!animation) {\n setInitialClasses();\n return;\n }\n // No maxHeight -> running the transition for the first time\n if (!maxSize) {\n maxSize = measureCollapsingElementDimensionPx(element, dimension);\n context.maxSize = maxSize;\n // Fix the height before starting the animation\n element.style[dimension] = direction !== 'show' ? maxSize : '0px';\n classList.remove('collapse');\n classList.remove('collapsing');\n classList.remove('show');\n reflow(element);\n // Start the animation\n classList.add('collapsing');\n }\n // Start or revert the animation\n element.style[dimension] = direction === 'show' ? maxSize : '0px';\n return () => {\n setInitialClasses();\n classList.remove('collapsing');\n element.style[dimension] = '';\n };\n};\n\n/**\n * A configuration service for the [NgbCollapse](#/components/collapse/api#NgbCollapse) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all collapses used in the application.\n */\nlet NgbCollapseConfig = /*#__PURE__*/(() => {\n class NgbCollapseConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.horizontal = false;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static {\n this.ɵfac = function NgbCollapseConfig_Factory(t) {\n return new (t || NgbCollapseConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCollapseConfig,\n factory: NgbCollapseConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbCollapseConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A directive to provide a simple way of hiding and showing elements on the\n * page.\n */\nlet NgbCollapse = /*#__PURE__*/(() => {\n class NgbCollapse {\n constructor() {\n this._config = inject(NgbCollapseConfig);\n this._element = inject(ElementRef);\n this._zone = inject(NgZone);\n /**\n * If `true`, collapse will be animated.\n *\n * Animation is triggered only when clicked on triggering element\n * or via the `.toggle()` function\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * Flag used to track if the collapse setter is invoked during initialization\n * or not. This distinction is made in order to avoid running the transition during initialization.\n */\n this._afterInit = false;\n this._isCollapsed = false;\n this.ngbCollapseChange = new EventEmitter();\n /**\n * If `true`, will collapse horizontally.\n *\n * @since 13.1.0\n */\n this.horizontal = this._config.horizontal;\n /**\n * An event emitted when the collapse element is shown, after the transition.\n * It has no payload.\n *\n * @since 8.0.0\n */\n this.shown = new EventEmitter();\n /**\n * An event emitted when the collapse element is hidden, after the transition.\n * It has no payload.\n *\n * @since 8.0.0\n */\n this.hidden = new EventEmitter();\n }\n /**\n * If `true`, will collapse the element or show it otherwise.\n */\n set collapsed(isCollapsed) {\n if (this._isCollapsed !== isCollapsed) {\n this._isCollapsed = isCollapsed;\n if (this._afterInit) {\n this._runTransitionWithEvents(isCollapsed, this.animation);\n }\n }\n }\n ngOnInit() {\n this._runTransition(this._isCollapsed, false);\n this._afterInit = true;\n }\n /**\n * Triggers collapsing programmatically.\n *\n * If there is a collapsing transition running already, it will be reversed.\n * If the animations are turned off this happens synchronously.\n *\n * @since 8.0.0\n */\n toggle(open = this._isCollapsed) {\n this.collapsed = !open;\n this.ngbCollapseChange.next(this._isCollapsed);\n }\n _runTransition(collapsed, animation) {\n return ngbRunTransition(this._zone, this._element.nativeElement, ngbCollapsingTransition, {\n animation,\n runningTransition: 'stop',\n context: {\n direction: collapsed ? 'hide' : 'show',\n dimension: this.horizontal ? 'width' : 'height'\n }\n });\n }\n _runTransitionWithEvents(collapsed, animation) {\n this._runTransition(collapsed, animation).subscribe(() => {\n if (collapsed) {\n this.hidden.emit();\n } else {\n this.shown.emit();\n }\n });\n }\n static {\n this.ɵfac = function NgbCollapse_Factory(t) {\n return new (t || NgbCollapse)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbCollapse,\n selectors: [[\"\", \"ngbCollapse\", \"\"]],\n hostVars: 2,\n hostBindings: function NgbCollapse_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"collapse-horizontal\", ctx.horizontal);\n }\n },\n inputs: {\n animation: \"animation\",\n collapsed: [i0.ɵɵInputFlags.None, \"ngbCollapse\", \"collapsed\"],\n horizontal: \"horizontal\"\n },\n outputs: {\n ngbCollapseChange: \"ngbCollapseChange\",\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbCollapse\"],\n standalone: true\n });\n }\n }\n return NgbCollapse;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextId$3 = 0;\n/**\n * A directive that wraps the content of an accordion item's collapsible body.\n *\n * The actual content is provided in a child `ng-template` element.\n * Depending on the state of the accordion, the template will be either inserted or removed from the DOM.\n *\n * @since 14.1.0\n */\nlet NgbAccordionBody = /*#__PURE__*/(() => {\n class NgbAccordionBody {\n constructor() {\n this._vcr = inject(ViewContainerRef);\n this._element = inject(ElementRef).nativeElement;\n this._item = inject(NgbAccordionItem);\n this._viewRef = null;\n }\n ngAfterContentChecked() {\n if (this._bodyTpl) {\n if (this._item._shouldBeInDOM) {\n this._createViewIfNotExists();\n } else {\n this._destroyViewIfExists();\n }\n }\n }\n ngOnDestroy() {\n this._destroyViewIfExists();\n }\n _destroyViewIfExists() {\n if (this._viewRef) {\n this._viewRef.destroy();\n this._viewRef = null;\n }\n }\n _createViewIfNotExists() {\n if (!this._viewRef) {\n this._viewRef = this._vcr.createEmbeddedView(this._bodyTpl);\n this._viewRef.detectChanges();\n for (const node of this._viewRef.rootNodes) {\n this._element.appendChild(node);\n }\n }\n }\n static {\n this.ɵfac = function NgbAccordionBody_Factory(t) {\n return new (t || NgbAccordionBody)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbAccordionBody,\n selectors: [[\"\", \"ngbAccordionBody\", \"\"]],\n contentQueries: function NgbAccordionBody_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, TemplateRef, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._bodyTpl = _t.first);\n }\n },\n hostVars: 2,\n hostBindings: function NgbAccordionBody_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"accordion-body\", true);\n }\n },\n standalone: true\n });\n }\n }\n return NgbAccordionBody;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that wraps the collapsible item's content of the accordion.\n *\n * Internally it reuses the [`NgbCollapse` directive](#/components/collapse)\n *\n * @since 14.1.0\n */\nlet NgbAccordionCollapse = /*#__PURE__*/(() => {\n class NgbAccordionCollapse {\n constructor() {\n this.item = inject(NgbAccordionItem);\n this.ngbCollapse = inject(NgbCollapse);\n }\n static {\n this.ɵfac = function NgbAccordionCollapse_Factory(t) {\n return new (t || NgbAccordionCollapse)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbAccordionCollapse,\n selectors: [[\"\", \"ngbAccordionCollapse\", \"\"]],\n hostAttrs: [\"role\", \"region\"],\n hostVars: 4,\n hostBindings: function NgbAccordionCollapse_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.item.collapseId);\n i0.ɵɵattribute(\"aria-labelledby\", ctx.item.toggleId);\n i0.ɵɵclassProp(\"accordion-collapse\", true);\n }\n },\n exportAs: [\"ngbAccordionCollapse\"],\n standalone: true,\n features: [i0.ɵɵHostDirectivesFeature([NgbCollapse])]\n });\n }\n }\n return NgbAccordionCollapse;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to put on a toggling element inside the accordion item's header.\n * It will register click handlers that toggle the associated panel and will handle accessibility attributes.\n *\n * This directive is used internally by the [`NgbAccordionButton` directive](#/components/accordion/api#NgbAccordionButton).\n *\n * @since 14.1.0\n */\nlet NgbAccordionToggle = /*#__PURE__*/(() => {\n class NgbAccordionToggle {\n constructor() {\n this.item = inject(NgbAccordionItem);\n this.accordion = inject(NgbAccordionDirective);\n }\n static {\n this.ɵfac = function NgbAccordionToggle_Factory(t) {\n return new (t || NgbAccordionToggle)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbAccordionToggle,\n selectors: [[\"\", \"ngbAccordionToggle\", \"\"]],\n hostVars: 5,\n hostBindings: function NgbAccordionToggle_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function NgbAccordionToggle_click_HostBindingHandler() {\n return !ctx.item.disabled && ctx.accordion.toggle(ctx.item.id);\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.item.toggleId);\n i0.ɵɵattribute(\"aria-controls\", ctx.item.collapseId)(\"aria-expanded\", !ctx.item.collapsed);\n i0.ɵɵclassProp(\"collapsed\", ctx.item.collapsed);\n }\n },\n standalone: true\n });\n }\n }\n return NgbAccordionToggle;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to put on a button element inside an accordion item's header.\n *\n * If you want a custom markup for the header, you can also use the [`NgbAccordionToggle` directive](#/components/accordion/api#NgbAccordionToggle).\n *\n * @since 14.1.0\n */\nlet NgbAccordionButton = /*#__PURE__*/(() => {\n class NgbAccordionButton {\n constructor() {\n this.item = inject(NgbAccordionItem);\n }\n static {\n this.ɵfac = function NgbAccordionButton_Factory(t) {\n return new (t || NgbAccordionButton)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbAccordionButton,\n selectors: [[\"button\", \"ngbAccordionButton\", \"\"]],\n hostAttrs: [\"type\", \"button\"],\n hostVars: 3,\n hostBindings: function NgbAccordionButton_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"disabled\", ctx.item.disabled);\n i0.ɵɵclassProp(\"accordion-button\", true);\n }\n },\n standalone: true,\n features: [i0.ɵɵHostDirectivesFeature([NgbAccordionToggle])]\n });\n }\n }\n return NgbAccordionButton;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that wraps an accordion item's header.\n *\n * @since 14.1.0\n */\nlet NgbAccordionHeader = /*#__PURE__*/(() => {\n class NgbAccordionHeader {\n constructor() {\n this.item = inject(NgbAccordionItem);\n }\n static {\n this.ɵfac = function NgbAccordionHeader_Factory(t) {\n return new (t || NgbAccordionHeader)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbAccordionHeader,\n selectors: [[\"\", \"ngbAccordionHeader\", \"\"]],\n hostAttrs: [\"role\", \"heading\"],\n hostVars: 4,\n hostBindings: function NgbAccordionHeader_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"accordion-header\", true)(\"collapsed\", ctx.item.collapsed);\n }\n },\n standalone: true\n });\n }\n }\n return NgbAccordionHeader;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that wraps an accordion item: a toggleable header + body that collapses.\n *\n * You can get hold of the `NgbAccordionItem` instance in the template with `#item=\"ngbAccordionItem\"`.\n * It allows to check if the item is collapsed or not, toggle the collapse state, etc.\n *\n * Every accordion item has a string ID that is automatically generated in the `ngb-accordion-item-XX` format, unless provided explicitly.\n *\n * @since 14.1.0\n */\nlet NgbAccordionItem = /*#__PURE__*/(() => {\n class NgbAccordionItem {\n constructor() {\n this._accordion = inject(NgbAccordionDirective);\n this._cd = inject(ChangeDetectorRef);\n this._destroyRef = inject(DestroyRef);\n this._collapsed = true;\n this._id = `ngb-accordion-item-${nextId$3++}`;\n this._collapseAnimationRunning = false;\n /**\n * If `true`, the accordion item will be disabled.\n * It won't react to user's clicks, but still will be toggelable programmatically.\n */\n this.disabled = false;\n /**\n * Event emitted before the expanding animation starts. It has no payload.\n *\n * @since 15.1.0\n */\n this.show = new EventEmitter();\n /**\n * Event emitted when the expanding animation is finished. It has no payload.\n */\n this.shown = new EventEmitter();\n /**\n * Event emitted before the collapsing animation starts. It has no payload.\n *\n * @since 15.1.0\n */\n this.hide = new EventEmitter();\n /**\n * Event emitted when the collapsing animation is finished and before the content is removed from DOM.\n * It has no payload.\n */\n this.hidden = new EventEmitter();\n }\n /**\n * Sets the custom ID of the accordion item. It must be unique for the document.\n *\n * @param id The ID of the accordion item, must be a non-empty string\n */\n set id(id) {\n if (isString(id) && id !== '') {\n this._id = id;\n }\n }\n /**\n * If `true`, the content of the accordion item's body will be removed from the DOM. It will be just hidden otherwise.\n *\n * This property can also be set up on the parent [`NgbAccordion` directive](#/components/accordion/api#NgbAccordionDirective).\n */\n set destroyOnHide(destroyOnHide) {\n this._destroyOnHide = destroyOnHide;\n }\n get destroyOnHide() {\n return this._destroyOnHide === undefined ? this._accordion.destroyOnHide : this._destroyOnHide;\n }\n /**\n *\tIf `true`, the accordion item will be collapsed. Otherwise, it will be expanded.\n *\n * @param collapsed New state of the accordion item.\n */\n set collapsed(collapsed) {\n if (collapsed) {\n this.collapse();\n } else {\n this.expand();\n }\n }\n get collapsed() {\n return this._collapsed;\n }\n get id() {\n return `${this._id}`;\n }\n get toggleId() {\n return `${this.id}-toggle`;\n }\n get collapseId() {\n return `${this.id}-collapse`;\n }\n get _shouldBeInDOM() {\n return !this.collapsed || this._collapseAnimationRunning || !this.destroyOnHide;\n }\n ngAfterContentInit() {\n const {\n ngbCollapse\n } = this._collapse;\n // we need to disable the animation for the first init\n ngbCollapse.animation = false;\n ngbCollapse.collapsed = this.collapsed;\n // we set the animation to the default of the accordion\n ngbCollapse.animation = this._accordion.animation;\n // event forwarding from 'ngbCollapse' to 'ngbAccordion'\n ngbCollapse.hidden.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n // when the animation finishes we can remove the template from DOM\n this._collapseAnimationRunning = false;\n this.hidden.emit();\n this._accordion.hidden.emit(this.id);\n });\n ngbCollapse.shown.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.shown.emit();\n this._accordion.shown.emit(this.id);\n });\n }\n /**\n * Toggles an accordion item.\n */\n toggle() {\n this.collapsed = !this.collapsed;\n }\n /**\n * Expands an accordion item.\n */\n expand() {\n if (this.collapsed) {\n // checking if accordion allows to expand the panel in respect to 'closeOthers' flag\n if (!this._accordion._ensureCanExpand(this)) {\n return;\n }\n this._collapsed = false;\n // need if the accordion is used inside a component having OnPush change detection strategy\n this._cd.markForCheck();\n // we need force CD to get template into DOM before starting animation to calculate its height correctly\n // this will synchronously put the item body into DOM, because `this._collapsed` was flipped to `false`\n this._cd.detectChanges();\n // firing events before starting animations\n this.show.emit();\n this._accordion.show.emit(this.id);\n // we also need to make sure 'animation' flag is up-to- date\n this._collapse.ngbCollapse.animation = this._accordion.animation;\n this._collapse.ngbCollapse.collapsed = false;\n }\n }\n /**\n * Collapses an accordion item.\n */\n collapse() {\n if (!this.collapsed) {\n this._collapsed = true;\n this._collapseAnimationRunning = true;\n // need if the accordion is used inside a component having OnPush change detection strategy\n this._cd.markForCheck();\n // firing events before starting animations\n this.hide.emit();\n this._accordion.hide.emit(this.id);\n // we also need to make sure 'animation' flag is up-to- date\n this._collapse.ngbCollapse.animation = this._accordion.animation;\n this._collapse.ngbCollapse.collapsed = true;\n }\n }\n static {\n this.ɵfac = function NgbAccordionItem_Factory(t) {\n return new (t || NgbAccordionItem)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbAccordionItem,\n selectors: [[\"\", \"ngbAccordionItem\", \"\"]],\n contentQueries: function NgbAccordionItem_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbAccordionCollapse, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._collapse = _t.first);\n }\n },\n hostVars: 3,\n hostBindings: function NgbAccordionItem_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n i0.ɵɵclassProp(\"accordion-item\", true);\n }\n },\n inputs: {\n id: [i0.ɵɵInputFlags.None, \"ngbAccordionItem\", \"id\"],\n destroyOnHide: \"destroyOnHide\",\n disabled: \"disabled\",\n collapsed: \"collapsed\"\n },\n outputs: {\n show: \"show\",\n shown: \"shown\",\n hide: \"hide\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbAccordionItem\"],\n standalone: true\n });\n }\n }\n return NgbAccordionItem;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Accordion is a stack of cards that have a header and collapsible body.\n *\n * This directive is a container for these items and provides an API to handle them.\n *\n * @since 14.1.0\n */\nlet NgbAccordionDirective = /*#__PURE__*/(() => {\n class NgbAccordionDirective {\n constructor() {\n this._config = inject(NgbAccordionConfig);\n this._anItemWasAlreadyExpandedDuringInitialisation = false;\n /**\n * If `true`, accordion will be animated.\n */\n this.animation = this._config.animation;\n /**\n * If `true`, only one item at the time can stay open.\n */\n this.closeOthers = this._config.closeOthers;\n /**\n * If `true`, the content of the accordion items body will be removed from the DOM. It will be just hidden otherwise.\n *\n * This property can be overwritten at the [`NgbAccordionItem`](#/components/accordion/api#NgbAccordionItem) level\n */\n this.destroyOnHide = this._config.destroyOnHide;\n /**\n * Event emitted before expanding animation starts. The payload is the id of shown accordion item.\n *\n * @since 15.1.0\n */\n this.show = new EventEmitter();\n /**\n * Event emitted when the expanding animation is finished. The payload is the id of shown accordion item.\n */\n this.shown = new EventEmitter();\n /**\n * Event emitted before the collapsing animation starts. The payload is the id of hidden accordion item.\n *\n * @since 15.1.0\n */\n this.hide = new EventEmitter();\n /**\n * Event emitted when the collapsing animation is finished and before the content is removed from DOM.\n * The payload is the id of hidden accordion item.\n */\n this.hidden = new EventEmitter();\n }\n /**\n * Toggles an item with the given id.\n *\n * It will toggle an item, even if it is disabled.\n *\n * @param itemId The id of the item to toggle.\n */\n toggle(itemId) {\n this._getItem(itemId)?.toggle();\n }\n /**\n * Expands an item with the given id.\n *\n * If `closeOthers` is `true`, it will collapse other panels.\n *\n * @param itemId The id of the item to expand.\n */\n expand(itemId) {\n this._getItem(itemId)?.expand();\n }\n /**\n * Expands all items.\n *\n * If `closeOthers` is `true` and all items are closed, it will open the first one. Otherwise, it will keep the opened one.\n */\n expandAll() {\n if (this._items) {\n if (this.closeOthers) {\n // we check if there is an item open and if it is not we can expand the first item\n // (otherwise we toggle nothing)\n if (!this._items.find(item => !item.collapsed)) {\n this._items.first.expand();\n }\n } else {\n this._items.forEach(item => item.expand());\n }\n }\n }\n /**\n * Collapses an item with the given id.\n *\n * Has no effect if the `itemId` does not correspond to any item.\n *\n * @param itemId The id of the item to collapse.\n */\n collapse(itemId) {\n this._getItem(itemId)?.collapse();\n }\n /**\n * Collapses all items.\n */\n collapseAll() {\n this._items?.forEach(item => item.collapse());\n }\n /**\n * Checks if an item with the given id is expanded.\n *\n * If the `itemId` does not correspond to any item, it returns `false`.\n *\n * @param itemId The id of the item to check.\n */\n isExpanded(itemId) {\n const item = this._getItem(itemId);\n return item ? !item.collapsed : false;\n }\n /**\n * It checks, if the item can be expanded in the current state of the accordion.\n * With `closeOthers` there can be only one expanded item at a time.\n *\n * @internal\n */\n _ensureCanExpand(toExpand) {\n if (!this.closeOthers) {\n return true;\n }\n // special case during the initialization of the [collapse]=\"false\" inputs\n // `this._items` QueryList is not yet initialized, but we need to ensure only one item can be expanded at a time\n if (!this._items) {\n if (!this._anItemWasAlreadyExpandedDuringInitialisation) {\n this._anItemWasAlreadyExpandedDuringInitialisation = true;\n return true;\n }\n return false;\n }\n // if there is an expanded item, we need to collapse it first\n this._items.find(item => !item.collapsed && toExpand !== item)?.collapse();\n return true;\n }\n _getItem(itemId) {\n return this._items?.find(item => item.id === itemId);\n }\n static {\n this.ɵfac = function NgbAccordionDirective_Factory(t) {\n return new (t || NgbAccordionDirective)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbAccordionDirective,\n selectors: [[\"\", \"ngbAccordion\", \"\"]],\n contentQueries: function NgbAccordionDirective_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbAccordionItem, 4);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._items = _t);\n }\n },\n hostVars: 2,\n hostBindings: function NgbAccordionDirective_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"accordion\", true);\n }\n },\n inputs: {\n animation: \"animation\",\n closeOthers: \"closeOthers\",\n destroyOnHide: \"destroyOnHide\"\n },\n outputs: {\n show: \"show\",\n shown: \"shown\",\n hide: \"hide\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbAccordion\"],\n standalone: true\n });\n }\n }\n return NgbAccordionDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NGB_ACCORDION_DIRECTIVES = [NgbAccordionButton, NgbAccordionDirective, NgbAccordionItem, NgbAccordionHeader, NgbAccordionToggle, NgbAccordionBody, NgbAccordionCollapse];\nlet NgbAccordionModule = /*#__PURE__*/(() => {\n class NgbAccordionModule {\n static {\n this.ɵfac = function NgbAccordionModule_Factory(t) {\n return new (t || NgbAccordionModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbAccordionModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbAccordionModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\nlet NgbAlertConfig = /*#__PURE__*/(() => {\n class NgbAlertConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.dismissible = true;\n this.type = 'warning';\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static {\n this.ɵfac = function NgbAlertConfig_Factory(t) {\n return new (t || NgbAlertConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbAlertConfig,\n factory: NgbAlertConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbAlertConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst ngbAlertFadingTransition = ({\n classList\n}) => {\n classList.remove('show');\n};\n\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\nlet NgbAlert = /*#__PURE__*/(() => {\n class NgbAlert {\n constructor() {\n this._config = inject(NgbAlertConfig);\n this._elementRef = inject(ElementRef);\n this._zone = inject(NgZone);\n /**\n * If `true`, alert closing will be animated.\n *\n * Animation is triggered only when clicked on the close button (×)\n * or via the `.close()` function\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * If `true`, alert can be dismissed by the user.\n *\n * The close button (×) will be displayed and you can be notified\n * of the event with the `(closed)` output.\n */\n this.dismissible = this._config.dismissible;\n /**\n * Type of the alert.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n this.type = this._config.type;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n *\n * @since 8.0.0\n */\n this.closed = new EventEmitter();\n }\n /**\n * Triggers alert closing programmatically (same as clicking on the close button (×)).\n *\n * The returned observable will emit and be completed once the closing transition has finished.\n * If the animations are turned off this happens synchronously.\n *\n * Alternatively you could listen or subscribe to the `(closed)` output\n *\n * @since 8.0.0\n */\n close() {\n const transition = ngbRunTransition(this._zone, this._elementRef.nativeElement, ngbAlertFadingTransition, {\n animation: this.animation,\n runningTransition: 'continue'\n });\n transition.subscribe(() => this.closed.emit());\n return transition;\n }\n static {\n this.ɵfac = function NgbAlert_Factory(t) {\n return new (t || NgbAlert)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbAlert,\n selectors: [[\"ngb-alert\"]],\n hostAttrs: [\"role\", \"alert\"],\n hostVars: 6,\n hostBindings: function NgbAlert_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassMap(\"alert show\" + (ctx.type ? \" alert-\" + ctx.type : \"\"));\n i0.ɵɵclassProp(\"fade\", ctx.animation)(\"alert-dismissible\", ctx.dismissible);\n }\n },\n inputs: {\n animation: \"animation\",\n dismissible: \"dismissible\",\n type: \"type\"\n },\n outputs: {\n closed: \"closed\"\n },\n exportAs: [\"ngbAlert\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 2,\n vars: 1,\n consts: () => {\n let i18n_0;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_0 = goog.getMsg(\"Close\");\n i18n_0 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_0;\n } else {\n i18n_0 = $localize`:@@ngb.alert.close:Close`;\n }\n return [[\"type\", \"button\", \"class\", \"btn-close\", \"aria-label\", i18n_0], [\"type\", \"button\", \"aria-label\", i18n_0, 1, \"btn-close\", 3, \"click\"]];\n },\n template: function NgbAlert_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n i0.ɵɵtemplate(1, NgbAlert_Conditional_1_Template, 1, 0, \"button\", 0);\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵconditional(1, ctx.dismissible ? 1 : -1);\n }\n },\n styles: [\"ngb-alert{display:block}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbAlert;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbAlertModule = /*#__PURE__*/(() => {\n class NgbAlertModule {\n static {\n this.ɵfac = function NgbAlertModule_Factory(t) {\n return new (t || NgbAlertModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbAlertModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbAlertModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all carousels used in the application.\n */\nlet NgbCarouselConfig = /*#__PURE__*/(() => {\n class NgbCarouselConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.interval = 5000;\n this.wrap = true;\n this.keyboard = true;\n this.pauseOnHover = true;\n this.pauseOnFocus = true;\n this.showNavigationArrows = true;\n this.showNavigationIndicators = true;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static {\n this.ɵfac = function NgbCarouselConfig_Factory(t) {\n return new (t || NgbCarouselConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCarouselConfig,\n factory: NgbCarouselConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbCarouselConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Defines the carousel slide transition direction.\n */\nvar NgbSlideEventDirection = /*#__PURE__*/function (NgbSlideEventDirection) {\n NgbSlideEventDirection[\"START\"] = \"start\";\n NgbSlideEventDirection[\"END\"] = \"end\";\n return NgbSlideEventDirection;\n}(NgbSlideEventDirection || {});\nconst isBeingAnimated = ({\n classList\n}) => {\n return classList.contains('carousel-item-start') || classList.contains('carousel-item-end');\n};\nconst removeDirectionClasses = classList => {\n classList.remove('carousel-item-start');\n classList.remove('carousel-item-end');\n};\nconst removeClasses = classList => {\n removeDirectionClasses(classList);\n classList.remove('carousel-item-prev');\n classList.remove('carousel-item-next');\n};\nconst ngbCarouselTransitionIn = (element, animation, {\n direction\n}) => {\n const {\n classList\n } = element;\n if (!animation) {\n removeDirectionClasses(classList);\n removeClasses(classList);\n classList.add('active');\n return;\n }\n if (isBeingAnimated(element)) {\n // Revert the transition\n removeDirectionClasses(classList);\n } else {\n // For the 'in' transition, a 'pre-class' is applied to the element to ensure its visibility\n classList.add('carousel-item-' + (direction === NgbSlideEventDirection.START ? 'next' : 'prev'));\n reflow(element);\n classList.add('carousel-item-' + direction);\n }\n return () => {\n removeClasses(classList);\n classList.add('active');\n };\n};\nconst ngbCarouselTransitionOut = (element, animation, {\n direction\n}) => {\n const {\n classList\n } = element;\n if (!animation) {\n removeDirectionClasses(classList);\n removeClasses(classList);\n classList.remove('active');\n return;\n }\n // direction is left or right, depending on the way the slide goes out.\n if (isBeingAnimated(element)) {\n // Revert the transition\n removeDirectionClasses(classList);\n } else {\n classList.add('carousel-item-' + direction);\n }\n return () => {\n removeClasses(classList);\n classList.remove('active');\n };\n};\nlet nextId$2 = 0;\nlet carouselId = 0;\n/**\n * A directive that wraps the individual carousel slide.\n */\nlet NgbSlide = /*#__PURE__*/(() => {\n class NgbSlide {\n constructor() {\n this.templateRef = inject(TemplateRef);\n /**\n * Slide id that must be unique for the entire document.\n *\n * If not provided, will be generated in the `ngb-slide-xx` format.\n */\n this.id = `ngb-slide-${nextId$2++}`;\n /**\n * An event emitted when the slide transition is finished\n *\n * @since 8.0.0\n */\n this.slid = new EventEmitter();\n }\n static {\n this.ɵfac = function NgbSlide_Factory(t) {\n return new (t || NgbSlide)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbSlide,\n selectors: [[\"ng-template\", \"ngbSlide\", \"\"]],\n inputs: {\n id: \"id\"\n },\n outputs: {\n slid: \"slid\"\n },\n standalone: true\n });\n }\n }\n return NgbSlide;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Carousel is a component to easily create and control slideshows.\n *\n * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API.\n */\nlet NgbCarousel = /*#__PURE__*/(() => {\n class NgbCarousel {\n constructor() {\n this.NgbSlideEventSource = NgbSlideEventSource;\n this._config = inject(NgbCarouselConfig);\n this._platformId = inject(PLATFORM_ID);\n this._ngZone = inject(NgZone);\n this._cd = inject(ChangeDetectorRef);\n this._container = inject(ElementRef);\n this._destroyRef = inject(DestroyRef);\n this._interval$ = new BehaviorSubject(this._config.interval);\n this._mouseHover$ = new BehaviorSubject(false);\n this._focused$ = new BehaviorSubject(false);\n this._pauseOnHover$ = new BehaviorSubject(this._config.pauseOnHover);\n this._pauseOnFocus$ = new BehaviorSubject(this._config.pauseOnFocus);\n this._pause$ = new BehaviorSubject(false);\n this._wrap$ = new BehaviorSubject(this._config.wrap);\n this.id = `ngb-carousel-${carouselId++}`;\n /**\n * A flag to enable/disable the animations.\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * If `true`, allows to interact with carousel using keyboard 'arrow left' and 'arrow right'.\n */\n this.keyboard = this._config.keyboard;\n /**\n * If `true`, 'previous' and 'next' navigation arrows will be visible on the slide.\n *\n * @since 2.2.0\n */\n this.showNavigationArrows = this._config.showNavigationArrows;\n /**\n * If `true`, navigation indicators at the bottom of the slide will be visible.\n *\n * @since 2.2.0\n */\n this.showNavigationIndicators = this._config.showNavigationIndicators;\n /**\n * An event emitted just before the slide transition starts.\n *\n * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.\n */\n this.slide = new EventEmitter();\n /**\n * An event emitted right after the slide transition is completed.\n *\n * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.\n *\n * @since 8.0.0\n */\n this.slid = new EventEmitter();\n /*\n * Keep the ids of the panels currently transitionning\n * in order to allow only the transition revertion\n */\n this._transitionIds = null;\n }\n /**\n * Time in milliseconds before the next slide is shown.\n */\n set interval(value) {\n this._interval$.next(value);\n }\n get interval() {\n return this._interval$.value;\n }\n /**\n * If `true`, will 'wrap' the carousel by switching from the last slide back to the first.\n */\n set wrap(value) {\n this._wrap$.next(value);\n }\n get wrap() {\n return this._wrap$.value;\n }\n /**\n * If `true`, will pause slide switching when mouse cursor hovers the slide.\n *\n * @since 2.2.0\n */\n set pauseOnHover(value) {\n this._pauseOnHover$.next(value);\n }\n get pauseOnHover() {\n return this._pauseOnHover$.value;\n }\n /**\n * If `true`, will pause slide switching when the focus is inside the carousel.\n */\n set pauseOnFocus(value) {\n this._pauseOnFocus$.next(value);\n }\n get pauseOnFocus() {\n return this._pauseOnFocus$.value;\n }\n set mouseHover(value) {\n this._mouseHover$.next(value);\n }\n get mouseHover() {\n return this._mouseHover$.value;\n }\n set focused(value) {\n this._focused$.next(value);\n }\n get focused() {\n return this._focused$.value;\n }\n arrowLeft() {\n this.focus();\n this.prev(NgbSlideEventSource.ARROW_LEFT);\n }\n arrowRight() {\n this.focus();\n this.next(NgbSlideEventSource.ARROW_RIGHT);\n }\n ngAfterContentInit() {\n // setInterval() doesn't play well with SSR and protractor,\n // so we should run it in the browser and outside Angular\n if (isPlatformBrowser(this._platformId)) {\n this._ngZone.runOutsideAngular(() => {\n const hasNextSlide$ = combineLatest([this.slide.pipe(map(slideEvent => slideEvent.current), startWith(this.activeId)), this._wrap$, this.slides.changes.pipe(startWith(null))]).pipe(map(([currentSlideId, wrap]) => {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1;\n }), distinctUntilChanged());\n combineLatest([this._pause$, this._pauseOnHover$, this._mouseHover$, this._pauseOnFocus$, this._focused$, this._interval$, hasNextSlide$]).pipe(map(([pause, pauseOnHover, mouseHover, pauseOnFocus, focused, interval, hasNextSlide]) => pause || pauseOnHover && mouseHover || pauseOnFocus && focused || !hasNextSlide ? 0 : interval), distinctUntilChanged(), switchMap(interval => interval > 0 ? timer(interval, interval) : NEVER), takeUntilDestroyed(this._destroyRef)).subscribe(() => this._ngZone.run(() => this.next(NgbSlideEventSource.TIMER)));\n });\n }\n this.slides.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._transitionIds?.forEach(id => ngbCompleteTransition(this._getSlideElement(id)));\n this._transitionIds = null;\n this._cd.markForCheck();\n // The following code need to be done asynchronously, after the dom becomes stable,\n // otherwise all changes will be undone.\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n for (const {\n id\n } of this.slides) {\n const element = this._getSlideElement(id);\n if (id === this.activeId) {\n element.classList.add('active');\n } else {\n element.classList.remove('active');\n }\n }\n });\n });\n }\n ngAfterContentChecked() {\n let activeSlide = this._getSlideById(this.activeId);\n this.activeId = activeSlide ? activeSlide.id : this.slides.length ? this.slides.first.id : '';\n }\n ngAfterViewInit() {\n // Initialize the 'active' class (not managed by the template)\n if (this.activeId) {\n const element = this._getSlideElement(this.activeId);\n if (element) {\n element.classList.add('active');\n }\n }\n }\n /**\n * Navigates to a slide with the specified identifier.\n */\n select(slideId, source) {\n this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source);\n }\n /**\n * Navigates to the previous slide.\n */\n prev(source) {\n this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.END, source);\n }\n /**\n * Navigates to the next slide.\n */\n next(source) {\n this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.START, source);\n }\n /**\n * Pauses cycling through the slides.\n */\n pause() {\n this._pause$.next(true);\n }\n /**\n * Restarts cycling through the slides from start to end.\n */\n cycle() {\n this._pause$.next(false);\n }\n /**\n * Set the focus on the carousel.\n */\n focus() {\n this._container.nativeElement.focus();\n }\n _cycleToSelected(slideIdx, direction, source) {\n const transitionIds = this._transitionIds;\n if (transitionIds && (transitionIds[0] !== slideIdx || transitionIds[1] !== this.activeId)) {\n // Revert prevented\n return;\n }\n let selectedSlide = this._getSlideById(slideIdx);\n if (selectedSlide && selectedSlide.id !== this.activeId) {\n this._transitionIds = [this.activeId, slideIdx];\n this.slide.emit({\n prev: this.activeId,\n current: selectedSlide.id,\n direction: direction,\n paused: this._pause$.value,\n source\n });\n const options = {\n animation: this.animation,\n runningTransition: 'stop',\n context: {\n direction\n }\n };\n const transitions = [];\n const activeSlide = this._getSlideById(this.activeId);\n if (activeSlide) {\n const activeSlideTransition = ngbRunTransition(this._ngZone, this._getSlideElement(activeSlide.id), ngbCarouselTransitionOut, options);\n activeSlideTransition.subscribe(() => {\n activeSlide.slid.emit({\n isShown: false,\n direction,\n source\n });\n });\n transitions.push(activeSlideTransition);\n }\n const previousId = this.activeId;\n this.activeId = selectedSlide.id;\n const nextSlide = this._getSlideById(this.activeId);\n const transition = ngbRunTransition(this._ngZone, this._getSlideElement(selectedSlide.id), ngbCarouselTransitionIn, options);\n transition.subscribe(() => {\n nextSlide?.slid.emit({\n isShown: true,\n direction,\n source\n });\n });\n transitions.push(transition);\n zip(...transitions).pipe(take(1)).subscribe(() => {\n this._transitionIds = null;\n this.slid.emit({\n prev: previousId,\n current: selectedSlide.id,\n direction: direction,\n paused: this._pause$.value,\n source\n });\n });\n }\n // we get here after the interval fires or any external API call like next(), prev() or select()\n this._cd.markForCheck();\n }\n _getSlideEventDirection(currentActiveSlideId, nextActiveSlideId) {\n const currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId);\n const nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId);\n return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.END : NgbSlideEventDirection.START;\n }\n _getSlideById(slideId) {\n return this.slides.find(slide => slide.id === slideId) || null;\n }\n _getSlideIdxById(slideId) {\n const slide = this._getSlideById(slideId);\n return slide != null ? this.slides.toArray().indexOf(slide) : -1;\n }\n _getNextSlide(currentSlideId) {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isLastSlide = currentSlideIdx === slideArr.length - 1;\n return isLastSlide ? this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id : slideArr[currentSlideIdx + 1].id;\n }\n _getPrevSlide(currentSlideId) {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isFirstSlide = currentSlideIdx === 0;\n return isFirstSlide ? this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id : slideArr[currentSlideIdx - 1].id;\n }\n _getSlideElement(slideId) {\n return this._container.nativeElement.querySelector(`#slide-${slideId}`);\n }\n static {\n this.ɵfac = function NgbCarousel_Factory(t) {\n return new (t || NgbCarousel)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbCarousel,\n selectors: [[\"ngb-carousel\"]],\n contentQueries: function NgbCarousel_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbSlide, 4);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slides = _t);\n }\n },\n hostAttrs: [\"tabIndex\", \"0\", 1, \"carousel\", \"slide\"],\n hostVars: 3,\n hostBindings: function NgbCarousel_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown.arrowLeft\", function NgbCarousel_keydown_arrowLeft_HostBindingHandler() {\n return ctx.keyboard && ctx.arrowLeft();\n })(\"keydown.arrowRight\", function NgbCarousel_keydown_arrowRight_HostBindingHandler() {\n return ctx.keyboard && ctx.arrowRight();\n })(\"mouseenter\", function NgbCarousel_mouseenter_HostBindingHandler() {\n return ctx.mouseHover = true;\n })(\"mouseleave\", function NgbCarousel_mouseleave_HostBindingHandler() {\n return ctx.mouseHover = false;\n })(\"focusin\", function NgbCarousel_focusin_HostBindingHandler() {\n return ctx.focused = true;\n })(\"focusout\", function NgbCarousel_focusout_HostBindingHandler() {\n return ctx.focused = false;\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-activedescendant\", \"slide-\" + ctx.activeId);\n i0.ɵɵstyleProp(\"display\", \"block\");\n }\n },\n inputs: {\n animation: \"animation\",\n activeId: \"activeId\",\n interval: \"interval\",\n wrap: \"wrap\",\n keyboard: \"keyboard\",\n pauseOnHover: \"pauseOnHover\",\n pauseOnFocus: \"pauseOnFocus\",\n showNavigationArrows: \"showNavigationArrows\",\n showNavigationIndicators: \"showNavigationIndicators\"\n },\n outputs: {\n slide: \"slide\",\n slid: \"slid\"\n },\n exportAs: [\"ngbCarousel\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 7,\n vars: 3,\n consts: () => {\n let i18n_1;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc Currently selected slide number read by screen reader\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__0 = goog.getMsg(\" Slide {$interpolation} of {$interpolation_1} \", {\n \"interpolation\": \"\\uFFFD0\\uFFFD\",\n \"interpolation_1\": \"\\uFFFD1\\uFFFD\"\n }, {\n original_code: {\n \"interpolation\": \"{{ i + 1 }}\",\n \"interpolation_1\": \"{{ c }}\"\n }\n });\n i18n_1 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__0;\n } else {\n i18n_1 = $localize`:Currently selected slide number read by screen reader@@ngb.carousel.slide-number: Slide ${\"\\uFFFD0\\uFFFD\"}:INTERPOLATION: of ${\"\\uFFFD1\\uFFFD\"}:INTERPOLATION_1: `;\n }\n let i18n_2;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__1 = goog.getMsg(\"Previous\");\n i18n_2 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__1;\n } else {\n i18n_2 = $localize`:@@ngb.carousel.previous:Previous`;\n }\n let i18n_3;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__2 = goog.getMsg(\"Next\");\n i18n_3 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__2;\n } else {\n i18n_3 = $localize`:@@ngb.carousel.next:Next`;\n }\n return [[\"role\", \"tablist\", 1, \"carousel-indicators\"], [1, \"carousel-inner\"], [\"type\", \"button\", \"data-bs-target\", \"\", \"role\", \"tab\", 3, \"click\"], [\"role\", \"tabpanel\", 1, \"carousel-item\", 3, \"id\"], [1, \"visually-hidden\"], i18n_1, [3, \"ngTemplateOutlet\"], [\"type\", \"button\", 1, \"carousel-control-prev\", 3, \"click\"], [\"aria-hidden\", \"true\", 1, \"carousel-control-prev-icon\"], [1, \"visually-hidden\", 3, \"id\"], i18n_2, [\"type\", \"button\", 1, \"carousel-control-next\", 3, \"click\"], [\"aria-hidden\", \"true\", 1, \"carousel-control-next-icon\"], i18n_3, [\"type\", \"button\", \"data-bs-target\", \"\", \"role\", \"tab\", 3, \"active\"], [\"class\", \"carousel-item\", \"role\", \"tabpanel\", 3, \"id\"]];\n },\n template: function NgbCarousel_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵrepeaterCreate(1, NgbCarousel_For_2_Template, 1, 5, \"button\", 14, i0.ɵɵrepeaterTrackByIdentity);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(3, \"div\", 1);\n i0.ɵɵrepeaterCreate(4, NgbCarousel_For_5_Template, 4, 4, \"div\", 15, i0.ɵɵrepeaterTrackByIdentity);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(6, NgbCarousel_Conditional_6_Template, 8, 4);\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"visually-hidden\", !ctx.showNavigationIndicators);\n i0.ɵɵadvance();\n i0.ɵɵrepeater(ctx.slides);\n i0.ɵɵadvance(3);\n i0.ɵɵrepeater(ctx.slides);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(6, ctx.showNavigationArrows ? 6 : -1);\n }\n },\n dependencies: [NgTemplateOutlet],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbCarousel;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar NgbSlideEventSource = /*#__PURE__*/function (NgbSlideEventSource) {\n NgbSlideEventSource[\"TIMER\"] = \"timer\";\n NgbSlideEventSource[\"ARROW_LEFT\"] = \"arrowLeft\";\n NgbSlideEventSource[\"ARROW_RIGHT\"] = \"arrowRight\";\n NgbSlideEventSource[\"INDICATOR\"] = \"indicator\";\n return NgbSlideEventSource;\n}(NgbSlideEventSource || {});\nlet NgbCarouselModule = /*#__PURE__*/(() => {\n class NgbCarouselModule {\n static {\n this.ɵfac = function NgbCarouselModule_Factory(t) {\n return new (t || NgbCarouselModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbCarouselModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbCarouselModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbCollapseModule = /*#__PURE__*/(() => {\n class NgbCollapseModule {\n static {\n this.ɵfac = function NgbCollapseModule_Factory(t) {\n return new (t || NgbCollapseModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbCollapseModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbCollapseModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A simple class that represents a date that datepicker also uses internally.\n *\n * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods,\n * like `.equals()`, `.before()`, etc.\n *\n * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`.\n *\n * In many cases it is simpler to manipulate these objects together with\n * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n *\n * @since 3.0.0\n */\nclass NgbDate {\n /**\n * A **static method** that creates a new date object from the `NgbDateStruct`,\n *\n * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`.\n *\n * If the `date` is already of `NgbDate` type, the method will return the same object.\n */\n static from(date) {\n if (date instanceof NgbDate) {\n return date;\n }\n return date ? new NgbDate(date.year, date.month, date.day) : null;\n }\n constructor(year, month, day) {\n this.year = isInteger(year) ? year : null;\n this.month = isInteger(month) ? month : null;\n this.day = isInteger(day) ? day : null;\n }\n /**\n * Checks if the current date is equal to another date.\n */\n equals(other) {\n return other != null && this.year === other.year && this.month === other.month && this.day === other.day;\n }\n /**\n * Checks if the current date is before another date.\n */\n before(other) {\n if (!other) {\n return false;\n }\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day < other.day;\n } else {\n return this.month < other.month;\n }\n } else {\n return this.year < other.year;\n }\n }\n /**\n * Checks if the current date is after another date.\n */\n after(other) {\n if (!other) {\n return false;\n }\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day > other.day;\n } else {\n return this.month > other.month;\n }\n } else {\n return this.year > other.year;\n }\n }\n}\nfunction fromJSDate(jsDate) {\n return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());\n}\nfunction toJSDate(date) {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // this is done avoid 30 -> 1930 conversion\n if (!isNaN(jsDate.getTime())) {\n jsDate.setFullYear(date.year);\n }\n return jsDate;\n}\nfunction NGB_DATEPICKER_CALENDAR_FACTORY() {\n return new NgbCalendarGregorian();\n}\n/**\n * A service that represents the calendar used by the datepicker.\n *\n * The default implementation uses the Gregorian calendar. You can inject it in your own\n * implementations if necessary to simplify `NgbDate` calculations.\n */\nlet NgbCalendar = /*#__PURE__*/(() => {\n class NgbCalendar {\n static {\n this.ɵfac = function NgbCalendar_Factory(t) {\n return new (t || NgbCalendar)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendar,\n factory: () => NGB_DATEPICKER_CALENDAR_FACTORY(),\n providedIn: 'root'\n });\n }\n }\n return NgbCalendar;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbCalendarGregorian = /*#__PURE__*/(() => {\n class NgbCalendarGregorian extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n getMonths() {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n getWeeksPerMonth() {\n return 6;\n }\n getNext(date, period = 'd', number = 1) {\n let jsDate = toJSDate(date);\n let checkMonth = true;\n let expectedMonth = jsDate.getMonth();\n switch (period) {\n case 'y':\n jsDate.setFullYear(jsDate.getFullYear() + number);\n break;\n case 'm':\n expectedMonth += number;\n jsDate.setMonth(expectedMonth);\n expectedMonth = expectedMonth % 12;\n if (expectedMonth < 0) {\n expectedMonth = expectedMonth + 12;\n }\n break;\n case 'd':\n jsDate.setDate(jsDate.getDate() + number);\n checkMonth = false;\n break;\n default:\n return date;\n }\n if (checkMonth && jsDate.getMonth() !== expectedMonth) {\n // this means the destination month has less days than the initial month\n // let's go back to the end of the previous month:\n jsDate.setDate(0);\n }\n return fromJSDate(jsDate);\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n let jsDate = toJSDate(date);\n let day = jsDate.getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n let date = week[thursdayIndex];\n const jsDate = toJSDate(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n jsDate.setMonth(0); // Compare with Jan 1\n jsDate.setDate(1);\n return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;\n }\n getToday() {\n return fromJSDate(new Date());\n }\n isValid(date) {\n if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {\n return false;\n }\n // year 0 doesn't exist in Gregorian calendar\n if (date.year === 0) {\n return false;\n }\n const jsDate = toJSDate(date);\n return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month && jsDate.getDate() === date.day;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbCalendarGregorian_BaseFactory;\n return function NgbCalendarGregorian_Factory(t) {\n return (ɵNgbCalendarGregorian_BaseFactory || (ɵNgbCalendarGregorian_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarGregorian)))(t || NgbCalendarGregorian);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarGregorian,\n factory: NgbCalendarGregorian.ɵfac\n });\n }\n }\n return NgbCalendarGregorian;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isChangedDate(prev, next) {\n return !dateComparator(prev, next);\n}\nfunction isChangedMonth(prev, next) {\n return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month;\n}\nfunction dateComparator(prev, next) {\n return !prev && !next || !!prev && !!next && prev.equals(next);\n}\nfunction checkMinBeforeMax(minDate, maxDate) {\n if (maxDate && minDate && maxDate.before(minDate)) {\n throw new Error(`'maxDate' ${maxDate} should be greater than 'minDate' ${minDate}`);\n }\n}\nfunction checkDateInRange(date, minDate, maxDate) {\n if (date && minDate && date.before(minDate)) {\n return minDate;\n }\n if (date && maxDate && date.after(maxDate)) {\n return maxDate;\n }\n return date || null;\n}\nfunction isDateSelectable(date, state) {\n const {\n minDate,\n maxDate,\n disabled,\n markDisabled\n } = state;\n return !(date === null || date === undefined || disabled || markDisabled && markDisabled(date, {\n year: date.year,\n month: date.month\n }) || minDate && date.before(minDate) || maxDate && date.after(maxDate));\n}\nfunction generateSelectBoxMonths(calendar, date, minDate, maxDate) {\n if (!date) {\n return [];\n }\n let months = calendar.getMonths(date.year);\n if (minDate && date.year === minDate.year) {\n const index = months.findIndex(month => month === minDate.month);\n months = months.slice(index);\n }\n if (maxDate && date.year === maxDate.year) {\n const index = months.findIndex(month => month === maxDate.month);\n months = months.slice(0, index + 1);\n }\n return months;\n}\nfunction generateSelectBoxYears(date, minDate, maxDate) {\n if (!date) {\n return [];\n }\n const start = minDate ? Math.max(minDate.year, date.year - 500) : date.year - 10;\n const end = maxDate ? Math.min(maxDate.year, date.year + 500) : date.year + 10;\n const length = end - start + 1;\n const numbers = Array(length);\n for (let i = 0; i < length; i++) {\n numbers[i] = start + i;\n }\n return numbers;\n}\nfunction nextMonthDisabled(calendar, date, maxDate) {\n const nextDate = Object.assign(calendar.getNext(date, 'm'), {\n day: 1\n });\n return maxDate != null && nextDate.after(maxDate);\n}\nfunction prevMonthDisabled(calendar, date, minDate) {\n const prevDate = Object.assign(calendar.getPrev(date, 'm'), {\n day: 1\n });\n return minDate != null && (prevDate.year === minDate.year && prevDate.month < minDate.month || prevDate.year < minDate.year && minDate.month === 1);\n}\nfunction buildMonths(calendar, date, state, i18n, force) {\n const {\n displayMonths,\n months\n } = state;\n // move old months to a temporary array\n const monthsToReuse = months.splice(0, months.length);\n // generate new first dates, nullify or reuse months\n const firstDates = Array.from({\n length: displayMonths\n }, (_, i) => {\n const firstDate = Object.assign(calendar.getNext(date, 'm', i), {\n day: 1\n });\n months[i] = null;\n if (!force) {\n const reusedIndex = monthsToReuse.findIndex(month => month.firstDate.equals(firstDate));\n // move reused month back to months\n if (reusedIndex !== -1) {\n months[i] = monthsToReuse.splice(reusedIndex, 1)[0];\n }\n }\n return firstDate;\n });\n // rebuild nullified months\n firstDates.forEach((firstDate, i) => {\n if (months[i] === null) {\n months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || {});\n }\n });\n return months;\n}\nfunction buildMonth(calendar, date, state, i18n, month = {}) {\n const {\n dayTemplateData,\n minDate,\n maxDate,\n firstDayOfWeek,\n markDisabled,\n outsideDays,\n weekdayWidth,\n weekdaysVisible\n } = state;\n const calendarToday = calendar.getToday();\n month.firstDate = null;\n month.lastDate = null;\n month.number = date.month;\n month.year = date.year;\n month.weeks = month.weeks || [];\n month.weekdays = month.weekdays || [];\n date = getFirstViewDate(calendar, date, firstDayOfWeek);\n // clearing weekdays, if not visible\n if (!weekdaysVisible) {\n month.weekdays.length = 0;\n }\n // month has weeks\n for (let week = 0; week < calendar.getWeeksPerMonth(); week++) {\n let weekObject = month.weeks[week];\n if (!weekObject) {\n weekObject = month.weeks[week] = {\n number: 0,\n days: [],\n collapsed: true\n };\n }\n const days = weekObject.days;\n // week has days\n for (let day = 0; day < calendar.getDaysPerWeek(); day++) {\n if (week === 0 && weekdaysVisible) {\n month.weekdays[day] = i18n.getWeekdayLabel(calendar.getWeekday(date), weekdayWidth);\n }\n const newDate = new NgbDate(date.year, date.month, date.day);\n const nextDate = calendar.getNext(newDate);\n const ariaLabel = i18n.getDayAriaLabel(newDate);\n // marking date as disabled\n let disabled = !!(minDate && newDate.before(minDate) || maxDate && newDate.after(maxDate));\n if (!disabled && markDisabled) {\n disabled = markDisabled(newDate, {\n month: month.number,\n year: month.year\n });\n }\n // today\n let today = newDate.equals(calendarToday);\n // adding user-provided data to the context\n let contextUserData = dayTemplateData ? dayTemplateData(newDate, {\n month: month.number,\n year: month.year\n }) : undefined;\n // saving first date of the month\n if (month.firstDate === null && newDate.month === month.number) {\n month.firstDate = newDate;\n }\n // saving last date of the month\n if (newDate.month === month.number && nextDate.month !== month.number) {\n month.lastDate = newDate;\n }\n let dayObject = days[day];\n if (!dayObject) {\n dayObject = days[day] = {};\n }\n dayObject.date = newDate;\n dayObject.context = Object.assign(dayObject.context || {}, {\n $implicit: newDate,\n date: newDate,\n data: contextUserData,\n currentMonth: month.number,\n currentYear: month.year,\n disabled,\n focused: false,\n selected: false,\n today\n });\n dayObject.tabindex = -1;\n dayObject.ariaLabel = ariaLabel;\n dayObject.hidden = false;\n date = nextDate;\n }\n weekObject.number = calendar.getWeekNumber(days.map(day => day.date), firstDayOfWeek);\n // marking week as collapsed\n weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number && days[days.length - 1].date.month !== month.number;\n }\n return month;\n}\nfunction getFirstViewDate(calendar, date, firstDayOfWeek) {\n const daysPerWeek = calendar.getDaysPerWeek();\n const firstMonthDate = new NgbDate(date.year, date.month, 1);\n const dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek;\n return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek);\n}\n\n/**\n * A service supplying i18n data to the datepicker component.\n *\n * The default implementation of this service uses the Angular locale and registered locale data for\n * weekdays and month names (as explained in the Angular i18n guide).\n *\n * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year\n * numerals. For other static labels the datepicker uses the default Angular i18n.\n *\n * See the [i18n demo](#/components/datepicker/examples#i18n) and\n * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define\n * a custom provider for i18n.\n */\nlet NgbDatepickerI18n = /*#__PURE__*/(() => {\n class NgbDatepickerI18n {\n /**\n * Returns the text label to display above the day view.\n *\n * @since 9.1.0\n */\n getMonthLabel(date) {\n return `${this.getMonthFullName(date.month, date.year)} ${this.getYearNumerals(date.year)}`;\n }\n /**\n * Returns the textual representation of a day that is rendered in a day cell.\n *\n * @since 3.0.0\n */\n getDayNumerals(date) {\n return `${date.day}`;\n }\n /**\n * Returns the textual representation of a week number rendered by datepicker.\n *\n * @since 3.0.0\n */\n getWeekNumerals(weekNumber) {\n return `${weekNumber}`;\n }\n /**\n * Returns the textual representation of a year that is rendered in the datepicker year select box.\n *\n * @since 3.0.0\n */\n getYearNumerals(year) {\n return `${year}`;\n }\n /**\n * Returns the week label to display in the heading of the month view.\n *\n * @since 9.1.0\n */\n getWeekLabel() {\n return '';\n }\n static {\n this.ɵfac = function NgbDatepickerI18n_Factory(t) {\n return new (t || NgbDatepickerI18n)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerI18n,\n factory: () => (() => new NgbDatepickerI18nDefault())(),\n providedIn: 'root'\n });\n }\n }\n return NgbDatepickerI18n;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A service providing default implementation for the datepicker i18n.\n * It can be used as a base implementation if necessary.\n *\n * @since 9.1.0\n */\nlet NgbDatepickerI18nDefault = /*#__PURE__*/(() => {\n class NgbDatepickerI18nDefault extends NgbDatepickerI18n {\n constructor() {\n super(...arguments);\n this._locale = inject(LOCALE_ID);\n this._monthsShort = getLocaleMonthNames(this._locale, FormStyle.Standalone, TranslationWidth.Abbreviated);\n this._monthsFull = getLocaleMonthNames(this._locale, FormStyle.Standalone, TranslationWidth.Wide);\n }\n getWeekdayLabel(weekday, width) {\n const weekdaysStartingOnSunday = getLocaleDayNames(this._locale, FormStyle.Standalone, width === undefined ? TranslationWidth.Short : width);\n const weekdays = weekdaysStartingOnSunday.map((day, index) => weekdaysStartingOnSunday[(index + 1) % 7]);\n return weekdays[weekday - 1] || '';\n }\n getMonthShortName(month) {\n return this._monthsShort[month - 1] || '';\n }\n getMonthFullName(month) {\n return this._monthsFull[month - 1] || '';\n }\n getDayAriaLabel(date) {\n const jsDate = new Date(date.year, date.month - 1, date.day);\n return formatDate(jsDate, 'fullDate', this._locale);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbDatepickerI18nDefault_BaseFactory;\n return function NgbDatepickerI18nDefault_Factory(t) {\n return (ɵNgbDatepickerI18nDefault_BaseFactory || (ɵNgbDatepickerI18nDefault_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDatepickerI18nDefault)))(t || NgbDatepickerI18nDefault);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerI18nDefault,\n factory: NgbDatepickerI18nDefault.ɵfac\n });\n }\n }\n return NgbDatepickerI18nDefault;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbDatepickerService = /*#__PURE__*/(() => {\n class NgbDatepickerService {\n constructor() {\n this._VALIDATORS = {\n dayTemplateData: dayTemplateData => {\n if (this._state.dayTemplateData !== dayTemplateData) {\n return {\n dayTemplateData\n };\n }\n },\n displayMonths: displayMonths => {\n displayMonths = toInteger(displayMonths);\n if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) {\n return {\n displayMonths\n };\n }\n },\n disabled: disabled => {\n if (this._state.disabled !== disabled) {\n return {\n disabled\n };\n }\n },\n firstDayOfWeek: firstDayOfWeek => {\n firstDayOfWeek = toInteger(firstDayOfWeek);\n if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) {\n return {\n firstDayOfWeek\n };\n }\n },\n focusVisible: focusVisible => {\n if (this._state.focusVisible !== focusVisible && !this._state.disabled) {\n return {\n focusVisible\n };\n }\n },\n markDisabled: markDisabled => {\n if (this._state.markDisabled !== markDisabled) {\n return {\n markDisabled\n };\n }\n },\n maxDate: date => {\n const maxDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.maxDate, maxDate)) {\n return {\n maxDate\n };\n }\n },\n minDate: date => {\n const minDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.minDate, minDate)) {\n return {\n minDate\n };\n }\n },\n navigation: navigation => {\n if (this._state.navigation !== navigation) {\n return {\n navigation\n };\n }\n },\n outsideDays: outsideDays => {\n if (this._state.outsideDays !== outsideDays) {\n return {\n outsideDays\n };\n }\n },\n weekdays: weekdays => {\n const weekdayWidth = weekdays === true || weekdays === false ? TranslationWidth.Short : weekdays;\n const weekdaysVisible = weekdays === true || weekdays === false ? weekdays : true;\n if (this._state.weekdayWidth !== weekdayWidth || this._state.weekdaysVisible !== weekdaysVisible) {\n return {\n weekdayWidth,\n weekdaysVisible\n };\n }\n }\n };\n this._calendar = inject(NgbCalendar);\n this._i18n = inject(NgbDatepickerI18n);\n this._model$ = new Subject();\n this._dateSelect$ = new Subject();\n this._state = {\n dayTemplateData: null,\n markDisabled: null,\n maxDate: null,\n minDate: null,\n disabled: false,\n displayMonths: 1,\n firstDate: null,\n firstDayOfWeek: 1,\n lastDate: null,\n focusDate: null,\n focusVisible: false,\n months: [],\n navigation: 'select',\n outsideDays: 'visible',\n prevDisabled: false,\n nextDisabled: false,\n selectedDate: null,\n selectBoxes: {\n years: [],\n months: []\n },\n weekdayWidth: TranslationWidth.Short,\n weekdaysVisible: true\n };\n }\n get model$() {\n return this._model$.pipe(filter(model => model.months.length > 0));\n }\n get dateSelect$() {\n return this._dateSelect$.pipe(filter(date => date !== null));\n }\n set(options) {\n let patch = Object.keys(options).map(key => this._VALIDATORS[key](options[key])).reduce((obj, part) => ({\n ...obj,\n ...part\n }), {});\n if (Object.keys(patch).length > 0) {\n this._nextState(patch);\n }\n }\n focus(date) {\n const focusedDate = this.toValidDate(date, null);\n if (focusedDate != null && !this._state.disabled && isChangedDate(this._state.focusDate, focusedDate)) {\n this._nextState({\n focusDate: date\n });\n }\n }\n focusSelect() {\n if (isDateSelectable(this._state.focusDate, this._state)) {\n this.select(this._state.focusDate, {\n emitEvent: true\n });\n }\n }\n open(date) {\n const firstDate = this.toValidDate(date, this._calendar.getToday());\n if (firstDate != null && !this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, firstDate))) {\n this._nextState({\n firstDate\n });\n }\n }\n select(date, options = {}) {\n const selectedDate = this.toValidDate(date, null);\n if (selectedDate != null && !this._state.disabled) {\n if (isChangedDate(this._state.selectedDate, selectedDate)) {\n this._nextState({\n selectedDate\n });\n }\n if (options.emitEvent && isDateSelectable(selectedDate, this._state)) {\n this._dateSelect$.next(selectedDate);\n }\n }\n }\n toValidDate(date, defaultValue) {\n const ngbDate = NgbDate.from(date);\n if (defaultValue === undefined) {\n defaultValue = this._calendar.getToday();\n }\n return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue;\n }\n getMonth(struct) {\n for (let month of this._state.months) {\n if (struct.month === month.number && struct.year === month.year) {\n return month;\n }\n }\n throw new Error(`month ${struct.month} of year ${struct.year} not found`);\n }\n _nextState(patch) {\n const newState = this._updateState(patch);\n this._patchContexts(newState);\n this._state = newState;\n this._model$.next(this._state);\n }\n _patchContexts(state) {\n const {\n months,\n displayMonths,\n selectedDate,\n focusDate,\n focusVisible,\n disabled,\n outsideDays\n } = state;\n state.months.forEach(month => {\n month.weeks.forEach(week => {\n week.days.forEach(day => {\n // patch focus flag\n if (focusDate) {\n day.context.focused = focusDate.equals(day.date) && focusVisible;\n }\n // calculating tabindex\n day.tabindex = !disabled && focusDate && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1;\n // override context disabled\n if (disabled === true) {\n day.context.disabled = true;\n }\n // patch selection flag\n if (selectedDate !== undefined) {\n day.context.selected = selectedDate !== null && selectedDate.equals(day.date);\n }\n // visibility\n if (month.number !== day.date.month) {\n day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' || displayMonths > 1 && day.date.after(months[0].firstDate) && day.date.before(months[displayMonths - 1].lastDate);\n }\n });\n });\n });\n }\n _updateState(patch) {\n // patching fields\n const state = Object.assign({}, this._state, patch);\n let startDate = state.firstDate;\n // min/max dates changed\n if ('minDate' in patch || 'maxDate' in patch) {\n checkMinBeforeMax(state.minDate, state.maxDate);\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n }\n // disabled\n if ('disabled' in patch) {\n state.focusVisible = false;\n }\n // initial rebuild via 'select()'\n if ('selectedDate' in patch && this._state.months.length === 0) {\n startDate = state.selectedDate;\n }\n // terminate early if only focus visibility was changed\n if ('focusVisible' in patch) {\n return state;\n }\n // focus date changed\n if ('focusDate' in patch) {\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n // nothing to rebuild if only focus changed and it is still visible\n if (state.months.length !== 0 && state.focusDate && !state.focusDate.before(state.firstDate) && !state.focusDate.after(state.lastDate)) {\n return state;\n }\n }\n // first date changed\n if ('firstDate' in patch) {\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.firstDate;\n }\n // rebuilding months\n if (startDate) {\n const forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch || 'weekdaysVisible' in patch;\n const months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild);\n // updating months and boundary dates\n state.months = months;\n state.firstDate = months[0].firstDate;\n state.lastDate = months[months.length - 1].lastDate;\n // reset selected date if 'markDisabled' returns true\n if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) {\n state.selectedDate = null;\n }\n // adjusting focus after months were built\n if ('firstDate' in patch) {\n if (!state.focusDate || state.focusDate.before(state.firstDate) || state.focusDate.after(state.lastDate)) {\n state.focusDate = startDate;\n }\n }\n // adjusting months/years for the select box navigation\n const yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year;\n const monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month;\n if (state.navigation === 'select') {\n // years -> boundaries (min/max were changed)\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) {\n state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate);\n }\n // months -> when current year or boundaries change\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) {\n state.selectBoxes.months = generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate);\n }\n } else {\n state.selectBoxes = {\n years: [],\n months: []\n };\n }\n // updating navigation arrows -> boundaries change (min/max) or month/year changes\n if ((state.navigation === 'arrows' || state.navigation === 'select') && (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) {\n state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate);\n state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate);\n }\n }\n return state;\n }\n static {\n this.ɵfac = function NgbDatepickerService_Factory(t) {\n return new (t || NgbDatepickerService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerService,\n factory: NgbDatepickerService.ɵfac\n });\n }\n }\n return NgbDatepickerService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar NavigationEvent = /*#__PURE__*/function (NavigationEvent) {\n NavigationEvent[NavigationEvent[\"PREV\"] = 0] = \"PREV\";\n NavigationEvent[NavigationEvent[\"NEXT\"] = 1] = \"NEXT\";\n return NavigationEvent;\n}(NavigationEvent || {});\n/**\n * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the datepickers used in the application.\n */\nlet NgbDatepickerConfig = /*#__PURE__*/(() => {\n class NgbDatepickerConfig {\n constructor() {\n this.displayMonths = 1;\n this.firstDayOfWeek = 1;\n this.navigation = 'select';\n this.outsideDays = 'visible';\n this.showWeekNumbers = false;\n this.weekdays = TranslationWidth.Short;\n }\n static {\n this.ɵfac = function NgbDatepickerConfig_Factory(t) {\n return new (t || NgbDatepickerConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerConfig,\n factory: NgbDatepickerConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbDatepickerConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction NGB_DATEPICKER_DATE_ADAPTER_FACTORY() {\n return new NgbDateStructAdapter();\n}\n/**\n * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and\n * any provided user date model `D`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding datepicker to a form control,\n * ex. `[(ngModel)]=\"userDateModel\"`. Here `userDateModel` can be of any type.\n *\n * The default datepicker implementation assumes we use `NgbDateStruct` as a user model.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details\n * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example.\n */\nlet NgbDateAdapter = /*#__PURE__*/(() => {\n class NgbDateAdapter {\n static {\n this.ɵfac = function NgbDateAdapter_Factory(t) {\n return new (t || NgbDateAdapter)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateAdapter,\n factory: () => NGB_DATEPICKER_DATE_ADAPTER_FACTORY(),\n providedIn: 'root'\n });\n }\n }\n return NgbDateAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbDateStructAdapter = /*#__PURE__*/(() => {\n class NgbDateStructAdapter extends NgbDateAdapter {\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n fromModel(date) {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? {\n year: date.year,\n month: date.month,\n day: date.day\n } : null;\n }\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n toModel(date) {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? {\n year: date.year,\n month: date.month,\n day: date.day\n } : null;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbDateStructAdapter_BaseFactory;\n return function NgbDateStructAdapter_Factory(t) {\n return (ɵNgbDateStructAdapter_BaseFactory || (ɵNgbDateStructAdapter_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDateStructAdapter)))(t || NgbDateStructAdapter);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateStructAdapter,\n factory: NgbDateStructAdapter.ɵfac\n });\n }\n }\n return NgbDateStructAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar Key = /*#__PURE__*/function (Key) {\n Key[Key[\"Tab\"] = 9] = \"Tab\";\n Key[Key[\"Enter\"] = 13] = \"Enter\";\n Key[Key[\"Escape\"] = 27] = \"Escape\";\n Key[Key[\"Space\"] = 32] = \"Space\";\n Key[Key[\"PageUp\"] = 33] = \"PageUp\";\n Key[Key[\"PageDown\"] = 34] = \"PageDown\";\n Key[Key[\"End\"] = 35] = \"End\";\n Key[Key[\"Home\"] = 36] = \"Home\";\n Key[Key[\"ArrowLeft\"] = 37] = \"ArrowLeft\";\n Key[Key[\"ArrowUp\"] = 38] = \"ArrowUp\";\n Key[Key[\"ArrowRight\"] = 39] = \"ArrowRight\";\n Key[Key[\"ArrowDown\"] = 40] = \"ArrowDown\";\n return Key;\n}(Key || {});\n/**\n * A service that represents the keyboard navigation.\n *\n * Default keyboard shortcuts [are documented in the overview](#/components/datepicker/overview#keyboard-shortcuts)\n *\n * @since 5.2.0\n */\nlet NgbDatepickerKeyboardService = /*#__PURE__*/(() => {\n class NgbDatepickerKeyboardService {\n /**\n * Processes a keyboard event.\n */\n processKey(event, datepicker) {\n const {\n state,\n calendar\n } = datepicker;\n /* eslint-disable-next-line deprecation/deprecation */\n switch (event.which) {\n case Key.PageUp:\n datepicker.focusDate(calendar.getPrev(state.focusedDate, event.shiftKey ? 'y' : 'm', 1));\n break;\n case Key.PageDown:\n datepicker.focusDate(calendar.getNext(state.focusedDate, event.shiftKey ? 'y' : 'm', 1));\n break;\n case Key.End:\n datepicker.focusDate(event.shiftKey ? state.maxDate : state.lastDate);\n break;\n case Key.Home:\n datepicker.focusDate(event.shiftKey ? state.minDate : state.firstDate);\n break;\n case Key.ArrowLeft:\n datepicker.focusDate(calendar.getPrev(state.focusedDate, 'd', 1));\n break;\n case Key.ArrowUp:\n datepicker.focusDate(calendar.getPrev(state.focusedDate, 'd', calendar.getDaysPerWeek()));\n break;\n case Key.ArrowRight:\n datepicker.focusDate(calendar.getNext(state.focusedDate, 'd', 1));\n break;\n case Key.ArrowDown:\n datepicker.focusDate(calendar.getNext(state.focusedDate, 'd', calendar.getDaysPerWeek()));\n break;\n case Key.Enter:\n case Key.Space:\n datepicker.focusSelect();\n break;\n default:\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n }\n static {\n this.ɵfac = function NgbDatepickerKeyboardService_Factory(t) {\n return new (t || NgbDatepickerKeyboardService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerKeyboardService,\n factory: NgbDatepickerKeyboardService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbDatepickerKeyboardService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbDatepickerDayView = /*#__PURE__*/(() => {\n class NgbDatepickerDayView {\n constructor() {\n this.i18n = inject(NgbDatepickerI18n);\n }\n isMuted() {\n return !this.selected && (this.date.month !== this.currentMonth || this.disabled);\n }\n static {\n this.ɵfac = function NgbDatepickerDayView_Factory(t) {\n return new (t || NgbDatepickerDayView)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbDatepickerDayView,\n selectors: [[\"\", \"ngbDatepickerDayView\", \"\"]],\n hostAttrs: [1, \"btn-light\"],\n hostVars: 10,\n hostBindings: function NgbDatepickerDayView_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"bg-primary\", ctx.selected)(\"text-white\", ctx.selected)(\"text-muted\", ctx.isMuted())(\"outside\", ctx.isMuted())(\"active\", ctx.focused);\n }\n },\n inputs: {\n currentMonth: \"currentMonth\",\n date: \"date\",\n disabled: \"disabled\",\n focused: \"focused\",\n selected: \"selected\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n attrs: _c1,\n decls: 1,\n vars: 1,\n template: function NgbDatepickerDayView_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtext(0);\n }\n if (rf & 2) {\n i0.ɵɵtextInterpolate(ctx.i18n.getDayNumerals(ctx.date));\n }\n },\n styles: [\"[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:transparent}[ngbDatepickerDayView]:hover:not(.bg-primary),[ngbDatepickerDayView].active:not(.bg-primary){background-color:var(--bs-tertiary-bg);outline:1px solid var(--bs-border-color)}[ngbDatepickerDayView].outside{opacity:.5}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbDatepickerDayView;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbDatepickerNavigationSelect = /*#__PURE__*/(() => {\n class NgbDatepickerNavigationSelect {\n constructor() {\n this._month = -1;\n this._year = -1;\n this.i18n = inject(NgbDatepickerI18n);\n this.select = new EventEmitter();\n }\n changeMonth(month) {\n this.select.emit(new NgbDate(this.date.year, toInteger(month), 1));\n }\n changeYear(year) {\n this.select.emit(new NgbDate(toInteger(year), this.date.month, 1));\n }\n ngAfterViewChecked() {\n if (this.date) {\n if (this.date.month !== this._month) {\n this._month = this.date.month;\n this.monthSelect.nativeElement.value = `${this._month}`;\n }\n if (this.date.year !== this._year) {\n this._year = this.date.year;\n this.yearSelect.nativeElement.value = `${this._year}`;\n }\n }\n }\n static {\n this.ɵfac = function NgbDatepickerNavigationSelect_Factory(t) {\n return new (t || NgbDatepickerNavigationSelect)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbDatepickerNavigationSelect,\n selectors: [[\"ngb-datepicker-navigation-select\"]],\n viewQuery: function NgbDatepickerNavigationSelect_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c2, 7, ElementRef);\n i0.ɵɵviewQuery(_c3, 7, ElementRef);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.monthSelect = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.yearSelect = _t.first);\n }\n },\n inputs: {\n date: \"date\",\n disabled: \"disabled\",\n months: \"months\",\n years: \"years\"\n },\n outputs: {\n select: \"select\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 8,\n vars: 2,\n consts: () => {\n let i18n_4;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_1 = goog.getMsg(\"Select month\");\n i18n_4 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_1;\n } else {\n i18n_4 = $localize`:@@ngb.datepicker.select-month:Select month`;\n }\n let i18n_5;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_2 = goog.getMsg(\"Select month\");\n i18n_5 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_2;\n } else {\n i18n_5 = $localize`:@@ngb.datepicker.select-month:Select month`;\n }\n let i18n_6;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_3 = goog.getMsg(\"Select year\");\n i18n_6 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_3;\n } else {\n i18n_6 = $localize`:@@ngb.datepicker.select-year:Select year`;\n }\n let i18n_7;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_4 = goog.getMsg(\"Select year\");\n i18n_7 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_4;\n } else {\n i18n_7 = $localize`:@@ngb.datepicker.select-year:Select year`;\n }\n return [[\"aria-label\", i18n_4, \"title\", i18n_5, 1, \"form-select\", 3, \"disabled\", \"change\"], [\"month\", \"\"], [\"aria-label\", i18n_6, \"title\", i18n_7, 1, \"form-select\", 3, \"disabled\", \"change\"], [\"year\", \"\"], [3, \"value\"]];\n },\n template: function NgbDatepickerNavigationSelect_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"select\", 0, 1);\n i0.ɵɵlistener(\"change\", function NgbDatepickerNavigationSelect_Template_select_change_0_listener($event) {\n return ctx.changeMonth($event.target.value);\n });\n i0.ɵɵrepeaterCreate(2, NgbDatepickerNavigationSelect_For_3_Template, 2, 3, \"option\", 4, i0.ɵɵrepeaterTrackByIdentity);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"select\", 2, 3);\n i0.ɵɵlistener(\"change\", function NgbDatepickerNavigationSelect_Template_select_change_4_listener($event) {\n return ctx.changeYear($event.target.value);\n });\n i0.ɵɵrepeaterCreate(6, NgbDatepickerNavigationSelect_For_7_Template, 2, 2, \"option\", 4, i0.ɵɵrepeaterTrackByIdentity);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"disabled\", ctx.disabled);\n i0.ɵɵadvance(2);\n i0.ɵɵrepeater(ctx.months);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"disabled\", ctx.disabled);\n i0.ɵɵadvance(2);\n i0.ɵɵrepeater(ctx.years);\n }\n },\n styles: [\"ngb-datepicker-navigation-select>.form-select{flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}ngb-datepicker-navigation-select>.form-select:focus{z-index:1}ngb-datepicker-navigation-select>.form-select::-ms-value{background-color:transparent!important}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbDatepickerNavigationSelect;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbDatepickerNavigation = /*#__PURE__*/(() => {\n class NgbDatepickerNavigation {\n constructor() {\n this.navigation = NavigationEvent;\n this.i18n = inject(NgbDatepickerI18n);\n this.months = [];\n this.navigate = new EventEmitter();\n this.select = new EventEmitter();\n }\n onClickPrev(event) {\n event.currentTarget.focus();\n this.navigate.emit(this.navigation.PREV);\n }\n onClickNext(event) {\n event.currentTarget.focus();\n this.navigate.emit(this.navigation.NEXT);\n }\n static {\n this.ɵfac = function NgbDatepickerNavigation_Factory(t) {\n return new (t || NgbDatepickerNavigation)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbDatepickerNavigation,\n selectors: [[\"ngb-datepicker-navigation\"]],\n inputs: {\n date: \"date\",\n disabled: \"disabled\",\n months: \"months\",\n showSelect: \"showSelect\",\n prevDisabled: \"prevDisabled\",\n nextDisabled: \"nextDisabled\",\n selectBoxes: \"selectBoxes\"\n },\n outputs: {\n navigate: \"navigate\",\n select: \"select\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 8,\n vars: 4,\n consts: () => {\n let i18n_8;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_5 = goog.getMsg(\"Previous month\");\n i18n_8 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_5;\n } else {\n i18n_8 = $localize`:@@ngb.datepicker.previous-month:Previous month`;\n }\n let i18n_9;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_6 = goog.getMsg(\"Previous month\");\n i18n_9 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_6;\n } else {\n i18n_9 = $localize`:@@ngb.datepicker.previous-month:Previous month`;\n }\n let i18n_10;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_7 = goog.getMsg(\"Next month\");\n i18n_10 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_7;\n } else {\n i18n_10 = $localize`:@@ngb.datepicker.next-month:Next month`;\n }\n let i18n_11;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_8 = goog.getMsg(\"Next month\");\n i18n_11 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_8;\n } else {\n i18n_11 = $localize`:@@ngb.datepicker.next-month:Next month`;\n }\n return [[1, \"ngb-dp-arrow\", \"ngb-dp-arrow-prev\"], [\"type\", \"button\", \"aria-label\", i18n_8, \"title\", i18n_9, 1, \"btn\", \"btn-link\", \"ngb-dp-arrow-btn\", 3, \"disabled\", \"click\"], [1, \"ngb-dp-navigation-chevron\"], [\"class\", \"ngb-dp-navigation-select\", 3, \"date\", \"disabled\", \"months\", \"years\"], [1, \"ngb-dp-arrow\", \"ngb-dp-arrow-next\"], [\"type\", \"button\", \"aria-label\", i18n_10, \"title\", i18n_11, 1, \"btn\", \"btn-link\", \"ngb-dp-arrow-btn\", 3, \"disabled\", \"click\"], [1, \"ngb-dp-navigation-select\", 3, \"date\", \"disabled\", \"months\", \"years\", \"select\"], [\"class\", \"ngb-dp-arrow\"], [1, \"ngb-dp-month-name\"], [1, \"ngb-dp-arrow\"]];\n },\n template: function NgbDatepickerNavigation_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"button\", 1);\n i0.ɵɵlistener(\"click\", function NgbDatepickerNavigation_Template_button_click_1_listener($event) {\n return ctx.onClickPrev($event);\n });\n i0.ɵɵelement(2, \"span\", 2);\n i0.ɵɵelementEnd()();\n i0.ɵɵtemplate(3, NgbDatepickerNavigation_Conditional_3_Template, 1, 4, \"ngb-datepicker-navigation-select\", 3)(4, NgbDatepickerNavigation_Conditional_4_Template, 2, 0);\n i0.ɵɵelementStart(5, \"div\", 4)(6, \"button\", 5);\n i0.ɵɵlistener(\"click\", function NgbDatepickerNavigation_Template_button_click_6_listener($event) {\n return ctx.onClickNext($event);\n });\n i0.ɵɵelement(7, \"span\", 2);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"disabled\", ctx.prevDisabled);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(3, ctx.showSelect ? 3 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(4, !ctx.showSelect ? 4 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"disabled\", ctx.nextDisabled);\n }\n },\n dependencies: [NgbDatepickerNavigationSelect],\n styles: [\"ngb-datepicker-navigation{display:flex;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg)}.ngb-dp-arrow{display:flex;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow-next{justify-content:flex-end}.ngb-dp-arrow-next .ngb-dp-navigation-chevron{transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:flex;flex:1 1 9rem}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbDatepickerNavigation;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A directive that marks the content template that customizes the way datepicker months are displayed\n *\n * @since 5.3.0\n */\nlet NgbDatepickerContent = /*#__PURE__*/(() => {\n class NgbDatepickerContent {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static {\n this.ɵfac = function NgbDatepickerContent_Factory(t) {\n return new (t || NgbDatepickerContent)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDatepickerContent,\n selectors: [[\"ng-template\", \"ngbDatepickerContent\", \"\"]],\n standalone: true\n });\n }\n }\n return NgbDatepickerContent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A component that renders one month including all the days, weekdays and week numbers. Can be used inside\n * the `` when you want to customize months layout.\n *\n * For a usage example, see [custom month layout demo](#/components/datepicker/examples#custommonth)\n *\n * @since 5.3.0\n */\nlet NgbDatepickerMonth = /*#__PURE__*/(() => {\n class NgbDatepickerMonth {\n constructor() {\n this._keyboardService = inject(NgbDatepickerKeyboardService);\n this._service = inject(NgbDatepickerService);\n this.i18n = inject(NgbDatepickerI18n);\n this.datepicker = inject(NgbDatepicker);\n }\n /**\n * The first date of month to be rendered.\n *\n * This month must one of the months present in the\n * [datepicker state](#/components/datepicker/api#NgbDatepickerState).\n */\n set month(month) {\n this.viewModel = this._service.getMonth(month);\n }\n onKeyDown(event) {\n this._keyboardService.processKey(event, this.datepicker);\n }\n doSelect(day) {\n if (!day.context.disabled && !day.hidden) {\n this.datepicker.onDateSelect(day.date);\n }\n }\n static {\n this.ɵfac = function NgbDatepickerMonth_Factory(t) {\n return new (t || NgbDatepickerMonth)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbDatepickerMonth,\n selectors: [[\"ngb-datepicker-month\"]],\n hostAttrs: [\"role\", \"grid\"],\n hostBindings: function NgbDatepickerMonth_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown\", function NgbDatepickerMonth_keydown_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n });\n }\n },\n inputs: {\n month: \"month\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 3,\n vars: 1,\n consts: [[\"class\", \"ngb-dp-week ngb-dp-weekdays\", \"role\", \"row\"], [\"role\", \"row\", 1, \"ngb-dp-week\", \"ngb-dp-weekdays\"], [\"class\", \"ngb-dp-weekday ngb-dp-showweek small\"], [1, \"ngb-dp-weekday\", \"ngb-dp-showweek\", \"small\"], [\"role\", \"columnheader\", 1, \"ngb-dp-weekday\", \"small\"], [\"class\", \"ngb-dp-weekday small\", \"role\", \"columnheader\"], [\"class\", \"ngb-dp-week\", \"role\", \"row\"], [\"role\", \"row\", 1, \"ngb-dp-week\"], [\"class\", \"ngb-dp-week-number small text-muted\"], [1, \"ngb-dp-week-number\", \"small\", \"text-muted\"], [\"role\", \"gridcell\", 1, \"ngb-dp-day\", 3, \"tabindex\", \"click\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"class\", \"ngb-dp-day\", \"role\", \"gridcell\", 3, \"disabled\", \"tabindex\", \"hidden\", \"ngb-dp-today\"]],\n template: function NgbDatepickerMonth_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepickerMonth_Conditional_0_Template, 4, 1, \"div\", 0);\n i0.ɵɵrepeaterCreate(1, NgbDatepickerMonth_For_2_Template, 1, 1, null, null, i0.ɵɵrepeaterTrackByIdentity);\n }\n if (rf & 2) {\n i0.ɵɵconditional(0, ctx.viewModel.weekdays.length > 0 ? 0 : -1);\n i0.ɵɵadvance();\n i0.ɵɵrepeater(ctx.viewModel.weeks);\n }\n },\n dependencies: [NgTemplateOutlet],\n styles: [\"ngb-datepicker-month{display:block}.ngb-dp-weekday,.ngb-dp-week-number{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:var(--bs-info)}.ngb-dp-week{border-radius:.25rem;display:flex}.ngb-dp-weekdays{border-bottom:1px solid var(--bs-border-color);border-radius:0;background-color:var(--bs-tertiary-bg)}.ngb-dp-day,.ngb-dp-weekday,.ngb-dp-week-number{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex=\\\"0\\\"]{z-index:1}\\n\"],\n encapsulation: 2\n });\n }\n }\n return NgbDatepickerMonth;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A highly configurable component that helps you with selecting calendar dates.\n *\n * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup.\n */\nlet NgbDatepicker = /*#__PURE__*/(() => {\n class NgbDatepicker {\n constructor() {\n this.injector = inject(Injector);\n this._service = inject(NgbDatepickerService);\n this._calendar = inject(NgbCalendar);\n this._i18n = inject(NgbDatepickerI18n);\n this._config = inject(NgbDatepickerConfig);\n this._nativeElement = inject(ElementRef).nativeElement;\n this._ngbDateAdapter = inject(NgbDateAdapter);\n this._ngZone = inject(NgZone);\n this._destroyRef = inject(DestroyRef);\n this._controlValue = null;\n this._publicState = {};\n /**\n * The reference to a custom template for the day.\n *\n * Allows to completely override the way a day 'cell' in the calendar is displayed.\n *\n * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside.\n */\n this.dayTemplate = this._config.dayTemplate;\n /**\n * The callback to pass any arbitrary data to the template cell via the\n * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter.\n *\n * `current` is the month that is currently displayed by the datepicker.\n *\n * @since 3.3.0\n */\n this.dayTemplateData = this._config.dayTemplateData;\n /**\n * The number of months to display.\n */\n this.displayMonths = this._config.displayMonths;\n /**\n * The first day of the week.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n this.firstDayOfWeek = this._config.firstDayOfWeek;\n /**\n * The reference to the custom template for the datepicker footer.\n *\n * @since 3.3.0\n */\n this.footerTemplate = this._config.footerTemplate;\n /**\n * The callback to mark some dates as disabled.\n *\n * It is called for each new date when navigating to a different month.\n *\n * `current` is the month that is currently displayed by the datepicker.\n */\n this.markDisabled = this._config.markDisabled;\n /**\n * The latest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years after the current month.\n */\n this.maxDate = this._config.maxDate;\n /**\n * The earliest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years before the current month.\n */\n this.minDate = this._config.minDate;\n /**\n * Navigation type.\n *\n * * `\"select\"` - select boxes for month and navigation arrows\n * * `\"arrows\"` - only navigation arrows\n * * `\"none\"` - no navigation visible at all\n */\n this.navigation = this._config.navigation;\n /**\n * The way of displaying days that don't belong to the current month.\n *\n * * `\"visible\"` - days are visible\n * * `\"hidden\"` - days are hidden, white space preserved\n * * `\"collapsed\"` - days are collapsed, so the datepicker height might change between months\n *\n * For the 2+ months view, days in between months are never shown.\n */\n this.outsideDays = this._config.outsideDays;\n /**\n * If `true`, week numbers will be displayed.\n */\n this.showWeekNumbers = this._config.showWeekNumbers;\n /**\n * The date to open calendar with.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date is provided, calendar will open with current month.\n *\n * You could use `navigateTo(date)` method as an alternative.\n */\n this.startDate = this._config.startDate;\n /**\n * The way weekdays should be displayed.\n *\n * * `true` - weekdays are displayed using default width\n * * `false` - weekdays are not displayed\n * * `TranslationWidth` - weekdays are displayed using specified width\n *\n * @since 9.1.0\n */\n this.weekdays = this._config.weekdays;\n /**\n * An event emitted right before the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n this.navigate = new EventEmitter();\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n *\n * @since 5.2.0\n */\n this.dateSelect = new EventEmitter();\n this.onChange = _ => {};\n this.onTouched = () => {};\n const cd = inject(ChangeDetectorRef);\n this._service.dateSelect$.pipe(takeUntilDestroyed()).subscribe(date => {\n this.dateSelect.emit(date);\n });\n this._service.model$.pipe(takeUntilDestroyed()).subscribe(model => {\n const newDate = model.firstDate;\n const oldDate = this.model ? this.model.firstDate : null;\n // update public state\n this._publicState = {\n maxDate: model.maxDate,\n minDate: model.minDate,\n firstDate: model.firstDate,\n lastDate: model.lastDate,\n focusedDate: model.focusDate,\n months: model.months.map(viewModel => viewModel.firstDate)\n };\n let navigationPrevented = false;\n // emitting navigation event if the first month changes\n if (!newDate.equals(oldDate)) {\n this.navigate.emit({\n current: oldDate ? {\n year: oldDate.year,\n month: oldDate.month\n } : null,\n next: {\n year: newDate.year,\n month: newDate.month\n },\n preventDefault: () => navigationPrevented = true\n });\n // can't prevent the very first navigation\n if (navigationPrevented && oldDate !== null) {\n this._service.open(oldDate);\n return;\n }\n }\n const newSelectedDate = model.selectedDate;\n const newFocusedDate = model.focusDate;\n const oldFocusedDate = this.model ? this.model.focusDate : null;\n this.model = model;\n // handling selection change\n if (isChangedDate(newSelectedDate, this._controlValue)) {\n this._controlValue = newSelectedDate;\n this.onTouched();\n this.onChange(this._ngbDateAdapter.toModel(newSelectedDate));\n }\n // handling focus change\n if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) {\n this.focus();\n }\n cd.markForCheck();\n });\n }\n /**\n * Returns the readonly public state of the datepicker\n *\n * @since 5.2.0\n */\n get state() {\n return this._publicState;\n }\n /**\n * Returns the calendar service used in the specific datepicker instance.\n *\n * @since 5.3.0\n */\n get calendar() {\n return this._calendar;\n }\n /**\n * Returns the i18n service used in the specific datepicker instance.\n *\n * @since 14.2.0\n */\n get i18n() {\n return this._i18n;\n }\n /**\n * Focuses on given date.\n */\n focusDate(date) {\n this._service.focus(NgbDate.from(date));\n }\n /**\n * Selects focused date.\n */\n focusSelect() {\n this._service.focusSelect();\n }\n focus() {\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => this._nativeElement.querySelector('div.ngb-dp-day[tabindex=\"0\"]')?.focus());\n }\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date) {\n this._service.open(NgbDate.from(date ? date.day ? date : {\n ...date,\n day: 1\n } : null));\n }\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n const focusIns$ = fromEvent(this._contentEl.nativeElement, 'focusin');\n const focusOuts$ = fromEvent(this._contentEl.nativeElement, 'focusout');\n // we're changing 'focusVisible' only when entering or leaving months view\n // and ignoring all focus events where both 'target' and 'related' target are day cells\n merge(focusIns$, focusOuts$).pipe(filter(focusEvent => {\n const target = focusEvent.target;\n const relatedTarget = focusEvent.relatedTarget;\n return !(target?.classList.contains('ngb-dp-day') && relatedTarget?.classList.contains('ngb-dp-day') && this._nativeElement.contains(target) && this._nativeElement.contains(relatedTarget));\n }), takeUntilDestroyed(this._destroyRef)).subscribe(({\n type\n }) => this._ngZone.run(() => this._service.set({\n focusVisible: type === 'focusin'\n })));\n });\n }\n ngOnInit() {\n if (this.model === undefined) {\n const inputs = {};\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', 'outsideDays', 'weekdays'].forEach(name => inputs[name] = this[name]);\n this._service.set(inputs);\n this.navigateTo(this.startDate);\n }\n if (!this.dayTemplate) {\n this.dayTemplate = this._defaultDayTemplate;\n }\n }\n ngOnChanges(changes) {\n const inputs = {};\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', 'outsideDays', 'weekdays'].filter(name => name in changes).forEach(name => inputs[name] = this[name]);\n this._service.set(inputs);\n if ('startDate' in changes) {\n const {\n currentValue,\n previousValue\n } = changes.startDate;\n if (isChangedMonth(previousValue, currentValue)) {\n this.navigateTo(this.startDate);\n }\n }\n }\n onDateSelect(date) {\n this._service.focus(date);\n this._service.select(date, {\n emitEvent: true\n });\n }\n onNavigateDateSelect(date) {\n this._service.open(date);\n }\n onNavigateEvent(event) {\n switch (event) {\n case NavigationEvent.PREV:\n this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1));\n break;\n case NavigationEvent.NEXT:\n this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1));\n break;\n }\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n setDisabledState(disabled) {\n this._service.set({\n disabled\n });\n }\n writeValue(value) {\n this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value));\n this._service.select(this._controlValue);\n }\n static {\n this.ɵfac = function NgbDatepicker_Factory(t) {\n return new (t || NgbDatepicker)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbDatepicker,\n selectors: [[\"ngb-datepicker\"]],\n contentQueries: function NgbDatepicker_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbDatepickerContent, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentTemplateFromContent = _t.first);\n }\n },\n viewQuery: function NgbDatepicker_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c4, 7);\n i0.ɵɵviewQuery(_c5, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._defaultDayTemplate = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentEl = _t.first);\n }\n },\n hostVars: 2,\n hostBindings: function NgbDatepicker_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"disabled\", ctx.model.disabled);\n }\n },\n inputs: {\n contentTemplate: \"contentTemplate\",\n dayTemplate: \"dayTemplate\",\n dayTemplateData: \"dayTemplateData\",\n displayMonths: \"displayMonths\",\n firstDayOfWeek: \"firstDayOfWeek\",\n footerTemplate: \"footerTemplate\",\n markDisabled: \"markDisabled\",\n maxDate: \"maxDate\",\n minDate: \"minDate\",\n navigation: \"navigation\",\n outsideDays: \"outsideDays\",\n showWeekNumbers: \"showWeekNumbers\",\n startDate: \"startDate\",\n weekdays: \"weekdays\"\n },\n outputs: {\n navigate: \"navigate\",\n dateSelect: \"dateSelect\"\n },\n exportAs: [\"ngbDatepicker\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbDatepicker),\n multi: true\n }, NgbDatepickerService]), i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n decls: 10,\n vars: 9,\n consts: [[\"defaultDayTemplate\", \"\"], [\"defaultContentTemplate\", \"\"], [1, \"ngb-dp-header\"], [3, \"date\", \"months\", \"disabled\", \"showSelect\", \"prevDisabled\", \"nextDisabled\", \"selectBoxes\"], [1, \"ngb-dp-content\"], [\"content\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\", \"ngTemplateOutletInjector\"], [3, \"ngTemplateOutlet\"], [\"ngbDatepickerDayView\", \"\", 3, \"date\", \"currentMonth\", \"selected\", \"disabled\", \"focused\"], [1, \"ngb-dp-month\"], [\"class\", \"ngb-dp-month-name\"], [3, \"month\"], [1, \"ngb-dp-month-name\"], [\"class\", \"ngb-dp-month\"], [3, \"date\", \"months\", \"disabled\", \"showSelect\", \"prevDisabled\", \"nextDisabled\", \"selectBoxes\", \"navigate\", \"select\"]],\n template: function NgbDatepicker_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbDatepicker_ng_template_0_Template, 1, 5, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor)(2, NgbDatepicker_ng_template_2_Template, 2, 0, \"ng-template\", null, 1, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵelementStart(4, \"div\", 2);\n i0.ɵɵtemplate(5, NgbDatepicker_Conditional_5_Template, 1, 7, \"ngb-datepicker-navigation\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(6, \"div\", 4, 5);\n i0.ɵɵtemplate(8, NgbDatepicker_ng_template_8_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(9, NgbDatepicker_ng_template_9_Template, 0, 0, \"ng-template\", 7);\n }\n if (rf & 2) {\n const _r3 = i0.ɵɵreference(3);\n i0.ɵɵadvance(5);\n i0.ɵɵconditional(5, ctx.navigation !== \"none\" ? 5 : -1);\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"ngb-dp-months\", !ctx.contentTemplate);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx.contentTemplate || (ctx.contentTemplateFromContent == null ? null : ctx.contentTemplateFromContent.templateRef) || _r3)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction1(7, _c6, ctx))(\"ngTemplateOutletInjector\", ctx.injector);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx.footerTemplate);\n }\n },\n dependencies: [NgTemplateOutlet, NgbDatepickerDayView, NgbDatepickerMonth, NgbDatepickerNavigation],\n styles: [\"ngb-datepicker{border:1px solid var(--bs-border-color);border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}ngb-datepicker.disabled .ngb-dp-weekday,ngb-datepicker.disabled .ngb-dp-week-number,ngb-datepicker.disabled .ngb-dp-month-name{color:var(--bs-text-muted)}.ngb-dp-body{z-index:1055}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:var(--bs-tertiary-bg)}.ngb-dp-months{display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:var(--bs-tertiary-bg)}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbDatepicker;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst isContainedIn = (element, array) => array ? array.some(item => item.contains(element)) : false;\nconst matchesSelectorIfAny = (element, selector) => !selector || closest(element, selector) != null;\n// we have to add a more significant delay to avoid re-opening when handling (click) on a toggling element\n// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID\nconst isMobile = (() => {\n const isIOS = () => /iPad|iPhone|iPod/.test(navigator.userAgent) || /Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2;\n const isAndroid = () => /Android/.test(navigator.userAgent);\n return typeof navigator !== 'undefined' ? !!navigator.userAgent && (isIOS() || isAndroid()) : false;\n})();\n// setting 'ngbAutoClose' synchronously on mobile results in immediate popup closing\n// when tapping on the triggering element\nconst wrapAsyncForMobile = fn => isMobile ? () => setTimeout(() => fn(), 100) : fn;\nfunction ngbAutoClose(zone, document, type, close, closed$, insideElements, ignoreElements, insideSelector) {\n // closing on ESC and outside clicks\n if (type) {\n zone.runOutsideAngular(wrapAsyncForMobile(() => {\n const shouldCloseOnClick = event => {\n const element = event.target;\n if (event.button === 2 || isContainedIn(element, ignoreElements)) {\n return false;\n }\n if (type === 'inside') {\n return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector);\n } else if (type === 'outside') {\n return !isContainedIn(element, insideElements);\n } /* if (type === true) */else {\n return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements);\n }\n };\n const escapes$ = fromEvent(document, 'keydown').pipe(takeUntil(closed$), /* eslint-disable-next-line deprecation/deprecation */\n filter(e => e.which === Key.Escape), tap(e => e.preventDefault()));\n // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown',\n // because on 'mouseup' DOM nodes might be detached\n const mouseDowns$ = fromEvent(document, 'mousedown').pipe(map(shouldCloseOnClick), takeUntil(closed$));\n const closeableClicks$ = fromEvent(document, 'mouseup').pipe(withLatestFrom(mouseDowns$), filter(([_, shouldClose]) => shouldClose), delay(0), takeUntil(closed$));\n race([escapes$.pipe(map(_ => 0 /* SOURCE.ESCAPE */)), closeableClicks$.pipe(map(_ => 1 /* SOURCE.CLICK */))]).subscribe(source => zone.run(() => close(source)));\n }));\n }\n}\nconst FOCUSABLE_ELEMENTS_SELECTOR = ['a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type=\"hidden\"])', 'select:not([disabled])', 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex=\"-1\"])'].join(', ');\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nfunction getFocusableBoundaryElements(element) {\n const list = Array.from(element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)).filter(el => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n}\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param zone Angular zone\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nconst ngbFocusTrap = (zone, element, stopFocusTrap$, refocusOnClick = false) => {\n zone.runOutsideAngular(() => {\n // last focused element\n const lastFocusedElement$ = fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map(e => e.target));\n // 'tab' / 'shift+tab' stream\n fromEvent(element, 'keydown').pipe(takeUntil(stopFocusTrap$), /* eslint-disable-next-line deprecation/deprecation */\n filter(e => e.which === Key.Tab), withLatestFrom(lastFocusedElement$)).subscribe(([tabEvent, focusedElement]) => {\n const [first, last] = getFocusableBoundaryElements(element);\n if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) {\n last.focus();\n tabEvent.preventDefault();\n }\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n });\n // inside click\n if (refocusOnClick) {\n fromEvent(element, 'click').pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map(arr => arr[1])).subscribe(lastFocusedElement => lastFocusedElement.focus());\n }\n });\n};\nlet NgbRTL = /*#__PURE__*/(() => {\n class NgbRTL {\n constructor() {\n this._element = inject(DOCUMENT).documentElement;\n }\n isRTL() {\n return (this._element.getAttribute('dir') || '').toLowerCase() === 'rtl';\n }\n static {\n this.ɵfac = function NgbRTL_Factory(t) {\n return new (t || NgbRTL)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbRTL,\n factory: NgbRTL.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbRTL;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst placementSeparator = /\\s+/;\nconst spacesRegExp = / +/gi;\n/**\n * Matching classes from the Bootstrap ones to the poppers ones.\n * The first index of each array is used for the left to right direction,\n * the second one is used for the right to left, defaulting to the first index (when LTR and RTL lead to the same class)\n *\n * See [Bootstrap alignments](https://getbootstrap.com/docs/5.1/components/dropdowns/#alignment-options)\n * and [Popper placements](https://popper.js.org/docs/v2/constructors/#options)\n */\nconst bootstrapPopperMatches = {\n top: ['top'],\n bottom: ['bottom'],\n start: ['left', 'right'],\n left: ['left'],\n end: ['right', 'left'],\n right: ['right'],\n 'top-start': ['top-start', 'top-end'],\n 'top-left': ['top-start'],\n 'top-end': ['top-end', 'top-start'],\n 'top-right': ['top-end'],\n 'bottom-start': ['bottom-start', 'bottom-end'],\n 'bottom-left': ['bottom-start'],\n 'bottom-end': ['bottom-end', 'bottom-start'],\n 'bottom-right': ['bottom-end'],\n 'start-top': ['left-start', 'right-start'],\n 'left-top': ['left-start'],\n 'start-bottom': ['left-end', 'right-end'],\n 'left-bottom': ['left-end'],\n 'end-top': ['right-start', 'left-start'],\n 'right-top': ['right-start'],\n 'end-bottom': ['right-end', 'left-end'],\n 'right-bottom': ['right-end']\n};\nfunction getPopperClassPlacement(placement, isRTL) {\n const [leftClass, rightClass] = bootstrapPopperMatches[placement];\n return isRTL ? rightClass || leftClass : leftClass;\n}\nconst popperStartPrimaryPlacement = /^left/;\nconst popperEndPrimaryPlacement = /^right/;\nconst popperStartSecondaryPlacement = /^start/;\nconst popperEndSecondaryPlacement = /^end/;\nfunction getBootstrapBaseClassPlacement(baseClass, placement) {\n let [primary, secondary] = placement.split('-');\n const newPrimary = primary.replace(popperStartPrimaryPlacement, 'start').replace(popperEndPrimaryPlacement, 'end');\n let classnames = [newPrimary];\n if (secondary) {\n let newSecondary = secondary;\n if (primary === 'left' || primary === 'right') {\n newSecondary = newSecondary.replace(popperStartSecondaryPlacement, 'top').replace(popperEndSecondaryPlacement, 'bottom');\n }\n classnames.push(`${newPrimary}-${newSecondary}`);\n }\n if (baseClass) {\n classnames = classnames.map(classname => `${baseClass}-${classname}`);\n }\n return classnames.join(' ');\n}\n/*\n * Accept the placement array and applies the appropriate placement dependent on the viewport.\n * Returns the applied placement.\n * In case of auto placement, placements are selected in order\n * 'top', 'bottom', 'start', 'end',\n * 'top-start', 'top-end',\n * 'bottom-start', 'bottom-end',\n * 'start-top', 'start-bottom',\n * 'end-top', 'end-bottom'.\n * */\nfunction getPopperOptions({\n placement,\n baseClass\n}, rtl) {\n let placementVals = Array.isArray(placement) ? placement : placement.split(placementSeparator);\n // No need to consider left and right here, as start and end are enough, and it is used for 'auto' placement only\n const allowedPlacements = ['top', 'bottom', 'start', 'end', 'top-start', 'top-end', 'bottom-start', 'bottom-end', 'start-top', 'start-bottom', 'end-top', 'end-bottom'];\n // replace auto placement with other placements\n let hasAuto = placementVals.findIndex(val => val === 'auto');\n if (hasAuto >= 0) {\n allowedPlacements.forEach(function (obj) {\n if (placementVals.find(val => val.search('^' + obj) !== -1) == null) {\n placementVals.splice(hasAuto++, 1, obj);\n }\n });\n }\n const popperPlacements = placementVals.map(_placement => {\n return getPopperClassPlacement(_placement, rtl.isRTL());\n });\n let mainPlacement = popperPlacements.shift();\n const bsModifier = {\n name: 'bootstrapClasses',\n enabled: !!baseClass,\n phase: 'write',\n fn({\n state\n }) {\n const bsClassRegExp = new RegExp(baseClass + '(-[a-z]+)*', 'gi');\n const popperElement = state.elements.popper;\n const popperPlacement = state.placement;\n let className = popperElement.className;\n // Remove old bootstrap classes\n className = className.replace(bsClassRegExp, '');\n // Add current placements\n className += ` ${getBootstrapBaseClassPlacement(baseClass, popperPlacement)}`;\n // Remove multiple spaces\n className = className.trim().replace(spacesRegExp, ' ');\n // Reassign\n popperElement.className = className;\n }\n };\n return {\n placement: mainPlacement,\n modifiers: [bsModifier, flip, preventOverflow, arrow, {\n enabled: true,\n name: 'flip',\n options: {\n fallbackPlacements: popperPlacements\n }\n }, {\n enabled: true,\n name: 'preventOverflow',\n phase: 'main',\n fn: function () {}\n }]\n };\n}\nfunction noop(arg) {\n return arg;\n}\nfunction ngbPositioning() {\n const rtl = inject(NgbRTL);\n let popperInstance = null;\n return {\n createPopper(positioningOption) {\n if (!popperInstance) {\n const updatePopperOptions = positioningOption.updatePopperOptions || noop;\n let popperOptions = updatePopperOptions(getPopperOptions(positioningOption, rtl));\n popperInstance = createPopperLite(positioningOption.hostElement, positioningOption.targetElement, popperOptions);\n }\n },\n update() {\n if (popperInstance) {\n popperInstance.update();\n }\n },\n setOptions(positioningOption) {\n if (popperInstance) {\n const updatePopperOptions = positioningOption.updatePopperOptions || noop;\n let popperOptions = updatePopperOptions(getPopperOptions(positioningOption, rtl));\n popperInstance.setOptions(popperOptions);\n }\n },\n destroy() {\n if (popperInstance) {\n popperInstance.destroy();\n popperInstance = null;\n }\n }\n };\n}\nfunction NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() {\n return new NgbDateISOParserFormatter();\n}\n/**\n * An abstract service for parsing and formatting dates for the\n * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive.\n * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the\n * input element.\n *\n * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object.\n * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string`\n * in the input.\n *\n * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI\n * to use an alternative string format or a custom parsing logic.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n */\nlet NgbDateParserFormatter = /*#__PURE__*/(() => {\n class NgbDateParserFormatter {\n static {\n this.ɵfac = function NgbDateParserFormatter_Factory(t) {\n return new (t || NgbDateParserFormatter)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateParserFormatter,\n factory: () => NGB_DATEPICKER_PARSER_FORMATTER_FACTORY(),\n providedIn: 'root'\n });\n }\n }\n return NgbDateParserFormatter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbDateISOParserFormatter = /*#__PURE__*/(() => {\n class NgbDateISOParserFormatter extends NgbDateParserFormatter {\n parse(value) {\n if (value != null) {\n const dateParts = value.trim().split('-');\n if (dateParts.length === 1 && isNumber(dateParts[0])) {\n return {\n year: toInteger(dateParts[0]),\n month: null,\n day: null\n };\n } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {\n return {\n year: toInteger(dateParts[0]),\n month: toInteger(dateParts[1]),\n day: null\n };\n } else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {\n return {\n year: toInteger(dateParts[0]),\n month: toInteger(dateParts[1]),\n day: toInteger(dateParts[2])\n };\n }\n }\n return null;\n }\n format(date) {\n return date ? `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${isNumber(date.day) ? padNumber(date.day) : ''}` : '';\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbDateISOParserFormatter_BaseFactory;\n return function NgbDateISOParserFormatter_Factory(t) {\n return (ɵNgbDateISOParserFormatter_BaseFactory || (ɵNgbDateISOParserFormatter_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDateISOParserFormatter)))(t || NgbDateISOParserFormatter);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateISOParserFormatter,\n factory: NgbDateISOParserFormatter.ɵfac\n });\n }\n }\n return NgbDateISOParserFormatter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbDatepickerInput`](#/components/datepicker/api#NgbDatepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the datepicker inputs used in the application.\n *\n * @since 5.2.0\n */\nlet NgbInputDatepickerConfig = /*#__PURE__*/(() => {\n class NgbInputDatepickerConfig extends NgbDatepickerConfig {\n constructor() {\n super(...arguments);\n this.autoClose = true;\n this.placement = ['bottom-start', 'bottom-end', 'top-start', 'top-end'];\n this.popperOptions = options => options;\n this.restoreFocus = true;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbInputDatepickerConfig_BaseFactory;\n return function NgbInputDatepickerConfig_Factory(t) {\n return (ɵNgbInputDatepickerConfig_BaseFactory || (ɵNgbInputDatepickerConfig_BaseFactory = i0.ɵɵgetInheritedFactory(NgbInputDatepickerConfig)))(t || NgbInputDatepickerConfig);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbInputDatepickerConfig,\n factory: NgbInputDatepickerConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbInputDatepickerConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction addPopperOffset(offset$1) {\n return options => {\n options.modifiers.push(offset, {\n name: 'offset',\n options: {\n offset: () => offset$1\n }\n });\n return options;\n };\n}\n\n/**\n * A directive that allows to stick a datepicker popup to an input field.\n *\n * Manages interaction with the input field itself, does value formatting and provides forms integration.\n */\nlet NgbInputDatepicker = /*#__PURE__*/(() => {\n class NgbInputDatepicker {\n constructor() {\n this._parserFormatter = inject(NgbDateParserFormatter);\n this._elRef = inject(ElementRef);\n this._vcRef = inject(ViewContainerRef);\n this._ngZone = inject(NgZone);\n this._calendar = inject(NgbCalendar);\n this._dateAdapter = inject(NgbDateAdapter);\n this._document = inject(DOCUMENT);\n this._changeDetector = inject(ChangeDetectorRef);\n this._config = inject(NgbInputDatepickerConfig);\n this._cRef = null;\n this._disabled = false;\n this._elWithFocus = null;\n this._model = null;\n this._positioning = ngbPositioning();\n this._destroyCloseHandlers$ = new Subject();\n /**\n * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not.\n *\n * * `true` - the popup will close on both date selection and outside click.\n * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the popup will close on date selection, but not outside clicks.\n * * `\"outside\"` - the popup will close only on the outside click and not on date selection/inside clicks.\n *\n * @since 3.0.0\n */\n this.autoClose = this._config.autoClose;\n /**\n * The preferred placement of the datepicker popup, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"bottom-start bottom-end top-start top-end\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n this.placement = this._config.placement;\n /**\n * Allows to change default Popper options when positioning the popup.\n * Receives current popper options and returns modified ones.\n *\n * @since 13.1.0\n */\n this.popperOptions = this._config.popperOptions;\n /**\n * A selector specifying the element the datepicker popup should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n this.container = this._config.container;\n /**\n * A css selector or html element specifying the element the datepicker popup should be positioned against.\n *\n * By default the input is used as a target.\n *\n * @since 4.2.0\n */\n this.positionTarget = this._config.positionTarget;\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n *\n * @since 1.1.1\n */\n this.dateSelect = new EventEmitter();\n /**\n * Event emitted right after the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n this.navigate = new EventEmitter();\n /**\n * An event fired after closing datepicker window.\n *\n * @since 4.2.0\n */\n this.closed = new EventEmitter();\n this._onChange = _ => {};\n this._onTouched = () => {};\n this._validatorChange = () => {};\n }\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = value === '' || value && value !== 'false';\n if (this.isOpen()) {\n this._cRef.instance.setDisabledState(this._disabled);\n }\n }\n registerOnChange(fn) {\n this._onChange = fn;\n }\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n registerOnValidatorChange(fn) {\n this._validatorChange = fn;\n }\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n validate(c) {\n const {\n value\n } = c;\n if (value != null) {\n const ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value));\n if (!ngbDate) {\n return {\n ngbDate: {\n invalid: value\n }\n };\n }\n if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) {\n return {\n ngbDate: {\n minDate: {\n minDate: this.minDate,\n actual: value\n }\n }\n };\n }\n if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) {\n return {\n ngbDate: {\n maxDate: {\n maxDate: this.maxDate,\n actual: value\n }\n }\n };\n }\n }\n return null;\n }\n writeValue(value) {\n this._model = this._fromDateStruct(this._dateAdapter.fromModel(value));\n this._writeModelValue(this._model);\n }\n manualDateChange(value, updateView = false) {\n const inputValueChanged = value !== this._inputValue;\n if (inputValueChanged) {\n this._inputValue = value;\n this._model = this._fromDateStruct(this._parserFormatter.parse(value));\n }\n if (inputValueChanged || !updateView) {\n this._onChange(this._model ? this._dateAdapter.toModel(this._model) : value === '' ? null : value);\n }\n if (updateView && this._model) {\n this._writeModelValue(this._model);\n }\n }\n isOpen() {\n return !!this._cRef;\n }\n /**\n * Opens the datepicker popup.\n *\n * If the related form control contains a valid date, the corresponding month will be opened.\n */\n open() {\n if (!this.isOpen()) {\n this._cRef = this._vcRef.createComponent(NgbDatepicker);\n this._applyPopupStyling(this._cRef.location.nativeElement);\n this._applyDatepickerInputs(this._cRef);\n this._subscribeForDatepickerOutputs(this._cRef.instance);\n this._cRef.instance.ngOnInit();\n this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model));\n // date selection event handling\n this._cRef.instance.registerOnChange(selectedDate => {\n this.writeValue(selectedDate);\n this._onChange(selectedDate);\n this._onTouched();\n });\n this._cRef.changeDetectorRef.detectChanges();\n this._cRef.instance.setDisabledState(this.disabled);\n if (this.container === 'body') {\n this._document.querySelector(this.container)?.appendChild(this._cRef.location.nativeElement);\n }\n // focus handling\n this._elWithFocus = this._document.activeElement;\n ngbFocusTrap(this._ngZone, this._cRef.location.nativeElement, this.closed, true);\n setTimeout(() => this._cRef?.instance.focus());\n let hostElement;\n if (isString(this.positionTarget)) {\n hostElement = this._document.querySelector(this.positionTarget);\n } else if (this.positionTarget instanceof HTMLElement) {\n hostElement = this.positionTarget;\n } else {\n hostElement = this._elRef.nativeElement;\n }\n if (this.positionTarget && !hostElement) {\n throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.');\n }\n // Setting up popper and scheduling updates when zone is stable\n this._ngZone.runOutsideAngular(() => {\n if (this._cRef && hostElement) {\n this._positioning.createPopper({\n hostElement,\n targetElement: this._cRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n updatePopperOptions: options => this.popperOptions(addPopperOffset([0, 2])(options))\n });\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n }\n });\n this._setCloseHandlers();\n }\n }\n /**\n * Closes the datepicker popup.\n */\n close() {\n if (this.isOpen()) {\n this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView));\n this._cRef = null;\n this._positioning.destroy();\n this._zoneSubscription?.unsubscribe();\n this._destroyCloseHandlers$.next();\n this.closed.emit();\n this._changeDetector.markForCheck();\n // restore focus\n let elementToFocus = this._elWithFocus;\n if (isString(this.restoreFocus)) {\n elementToFocus = this._document.querySelector(this.restoreFocus);\n } else if (this.restoreFocus !== undefined) {\n elementToFocus = this.restoreFocus;\n }\n // in IE document.activeElement can contain an object without 'focus()' sometimes\n if (elementToFocus && elementToFocus['focus']) {\n elementToFocus.focus();\n } else {\n this._document.body.focus();\n }\n }\n }\n /**\n * Toggles the datepicker popup.\n */\n toggle() {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date) {\n if (this.isOpen()) {\n this._cRef.instance.navigateTo(date);\n }\n }\n onBlur() {\n this._onTouched();\n }\n onFocus() {\n this._elWithFocus = this._elRef.nativeElement;\n }\n ngOnChanges(changes) {\n if (changes['minDate'] || changes['maxDate']) {\n this._validatorChange();\n if (this.isOpen()) {\n if (changes['minDate']) {\n this._cRef.setInput('minDate', this.minDate);\n }\n if (changes['maxDate']) {\n this._cRef.setInput('maxDate', this.maxDate);\n }\n }\n }\n if (changes['datepickerClass']) {\n const {\n currentValue,\n previousValue\n } = changes['datepickerClass'];\n this._applyPopupClass(currentValue, previousValue);\n }\n if (changes['autoClose'] && this.isOpen()) {\n this._setCloseHandlers();\n }\n }\n ngOnDestroy() {\n this.close();\n }\n _applyDatepickerInputs(datepickerComponentRef) {\n ['contentTemplate', 'dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekNumbers', 'weekdays'].forEach(inputName => {\n if (this[inputName] !== undefined) {\n datepickerComponentRef.setInput(inputName, this[inputName]);\n }\n });\n datepickerComponentRef.setInput('startDate', this.startDate || this._model);\n }\n _applyPopupClass(newClass, oldClass) {\n const popupEl = this._cRef?.location.nativeElement;\n if (popupEl) {\n if (newClass) {\n popupEl.classList.add(newClass);\n }\n if (oldClass) {\n popupEl.classList.remove(oldClass);\n }\n }\n }\n _applyPopupStyling(nativeElement) {\n nativeElement.classList.add('dropdown-menu', 'show');\n if (this.container === 'body') {\n nativeElement.classList.add('ngb-dp-body');\n }\n this._applyPopupClass(this.datepickerClass);\n }\n _subscribeForDatepickerOutputs(datepickerInstance) {\n datepickerInstance.navigate.subscribe(navigateEvent => this.navigate.emit(navigateEvent));\n datepickerInstance.dateSelect.subscribe(date => {\n this.dateSelect.emit(date);\n if (this.autoClose === true || this.autoClose === 'inside') {\n this.close();\n }\n });\n }\n _writeModelValue(model) {\n const value = this._parserFormatter.format(model);\n this._inputValue = value;\n this._elRef.nativeElement.value = value;\n if (this.isOpen()) {\n this._cRef.instance.writeValue(this._dateAdapter.toModel(model));\n this._onTouched();\n }\n }\n _fromDateStruct(date) {\n const ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null;\n return this._calendar.isValid(ngbDate) ? ngbDate : null;\n }\n _setCloseHandlers() {\n this._destroyCloseHandlers$.next();\n ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this._destroyCloseHandlers$, [], [this._elRef.nativeElement, this._cRef.location.nativeElement]);\n }\n static {\n this.ɵfac = function NgbInputDatepicker_Factory(t) {\n return new (t || NgbInputDatepicker)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbInputDatepicker,\n selectors: [[\"input\", \"ngbDatepicker\", \"\"]],\n hostVars: 1,\n hostBindings: function NgbInputDatepicker_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function NgbInputDatepicker_input_HostBindingHandler($event) {\n return ctx.manualDateChange($event.target.value);\n })(\"change\", function NgbInputDatepicker_change_HostBindingHandler($event) {\n return ctx.manualDateChange($event.target.value, true);\n })(\"focus\", function NgbInputDatepicker_focus_HostBindingHandler() {\n return ctx.onFocus();\n })(\"blur\", function NgbInputDatepicker_blur_HostBindingHandler() {\n return ctx.onBlur();\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"disabled\", ctx.disabled);\n }\n },\n inputs: {\n autoClose: \"autoClose\",\n contentTemplate: \"contentTemplate\",\n datepickerClass: \"datepickerClass\",\n dayTemplate: \"dayTemplate\",\n dayTemplateData: \"dayTemplateData\",\n displayMonths: \"displayMonths\",\n firstDayOfWeek: \"firstDayOfWeek\",\n footerTemplate: \"footerTemplate\",\n markDisabled: \"markDisabled\",\n minDate: \"minDate\",\n maxDate: \"maxDate\",\n navigation: \"navigation\",\n outsideDays: \"outsideDays\",\n placement: \"placement\",\n popperOptions: \"popperOptions\",\n restoreFocus: \"restoreFocus\",\n showWeekNumbers: \"showWeekNumbers\",\n startDate: \"startDate\",\n container: \"container\",\n positionTarget: \"positionTarget\",\n weekdays: \"weekdays\",\n disabled: \"disabled\"\n },\n outputs: {\n dateSelect: \"dateSelect\",\n navigate: \"navigate\",\n closed: \"closed\"\n },\n exportAs: [\"ngbDatepicker\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n }, {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n }, {\n provide: NgbDatepickerConfig,\n useExisting: NgbInputDatepickerConfig\n }]), i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return NgbInputDatepicker;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbCalendarHijri = /*#__PURE__*/(() => {\n class NgbCalendarHijri extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n getMonths() {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n getWeeksPerMonth() {\n return 6;\n }\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n switch (period) {\n case 'y':\n date = this._setYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = this._setMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return this._setDay(date, date.day + number);\n default:\n return date;\n }\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n const day = this.toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n const jsDate = this.toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); // Compare with Muharram 1\n return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1;\n }\n getToday() {\n return this.fromGregorian(new Date());\n }\n isValid(date) {\n return date != null && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) && !isNaN(this.toGregorian(date).getTime());\n }\n _setDay(date, day) {\n day = +day;\n let mDays = this.getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = this._setMonth(date, date.month - 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = this._setMonth(date, date.month + 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n }\n _setMonth(date, month) {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n }\n _setYear(date, year) {\n date.year = +year;\n return date;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbCalendarHijri_BaseFactory;\n return function NgbCalendarHijri_Factory(t) {\n return (ɵNgbCalendarHijri_BaseFactory || (ɵNgbCalendarHijri_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarHijri)))(t || NgbCalendarHijri);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarHijri,\n factory: NgbCalendarHijri.ɵfac\n });\n }\n }\n return NgbCalendarHijri;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Checks if islamic year is a leap year\n */\nfunction isIslamicLeapYear(hYear) {\n return (14 + 11 * hYear) % 30 < 11;\n}\n/**\n * Checks if gregorian years is a leap year\n */\nfunction isGregorianLeapYear$1(gDate) {\n const year = gDate.getFullYear();\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n/**\n * Returns the start of Hijri Month.\n * `hMonth` is 0 for Muharram, 1 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\nfunction getIslamicMonthStart(hYear, hMonth) {\n return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0);\n}\n/**\n * Returns the start of Hijri year.\n * `year` is any Hijri year.\n */\nfunction getIslamicYearStart(year) {\n return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0);\n}\nfunction mod$1(a, b) {\n return a - b * Math.floor(a / b);\n}\n/**\n * The civil calendar is one type of Hijri calendars used in islamic countries.\n * Uses a fixed cycle of alternating 29- and 30-day months,\n * with a leap day added to the last month of 11 out of every 30 years.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n * All the calculations here are based on the equations from \"Calendrical Calculations\" By Edward M. Reingold, Nachum\n * Dershowitz.\n */\nconst GREGORIAN_EPOCH$1 = 1721425.5;\nconst ISLAMIC_EPOCH = 1948439.5;\nlet NgbCalendarIslamicCivil = /*#__PURE__*/(() => {\n class NgbCalendarIslamicCivil extends NgbCalendarHijri {\n /**\n * Returns the equivalent islamic(civil) date value for a give input Gregorian date.\n * `gDate` is a JS Date to be converted to Hijri.\n */\n fromGregorian(gDate) {\n const gYear = gDate.getFullYear(),\n gMonth = gDate.getMonth(),\n gDay = gDate.getDate();\n let julianDay = GREGORIAN_EPOCH$1 - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) + -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear$1(gDate) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay) + 0.5;\n const days = julianDay - ISLAMIC_EPOCH;\n const hYear = Math.floor((30 * days + 10646) / 10631.0);\n let hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5);\n hMonth = Math.min(hMonth, 11);\n const hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n /**\n * Returns the equivalent JS date value for a give input islamic(civil) date.\n * `hDate` is an islamic(civil) date to be converted to Gregorian.\n */\n toGregorian(hDate) {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n const julianDay = hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1;\n const wjd = Math.floor(julianDay - 0.5) + 0.5,\n depoch = wjd - GREGORIAN_EPOCH$1,\n quadricent = Math.floor(depoch / 146097),\n dqc = mod$1(depoch, 146097),\n cent = Math.floor(dqc / 36524),\n dcent = mod$1(dqc, 36524),\n quad = Math.floor(dcent / 1461),\n dquad = mod$1(dcent, 1461),\n yindex = Math.floor(dquad / 365);\n let year = quadricent * 400 + cent * 100 + quad * 4 + yindex;\n if (!(cent === 4 || yindex === 4)) {\n year++;\n }\n const gYearStart = GREGORIAN_EPOCH$1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + Math.floor((year - 1) / 400);\n const yearday = wjd - gYearStart;\n const tjd = GREGORIAN_EPOCH$1 - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear$1(new Date(year, 3, 1)) ? -1 : -2) + 1);\n const leapadj = wjd < tjd ? 0 : isGregorianLeapYear$1(new Date(year, 3, 1)) ? 1 : 2;\n const month = Math.floor(((yearday + leapadj) * 12 + 373) / 367);\n const tjd2 = GREGORIAN_EPOCH$1 - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + Math.floor((year - 1) / 400) + Math.floor((367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear$1(new Date(year, month - 1, 1)) ? -1 : -2) + 1);\n const day = wjd - tjd2 + 1;\n return new Date(year, month - 1, day);\n }\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n getDaysPerMonth(month, year) {\n year = year + Math.floor(month / 13);\n month = (month - 1) % 12 + 1;\n let length = 29 + month % 2;\n if (month === 12 && isIslamicLeapYear(year)) {\n length++;\n }\n return length;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbCalendarIslamicCivil_BaseFactory;\n return function NgbCalendarIslamicCivil_Factory(t) {\n return (ɵNgbCalendarIslamicCivil_BaseFactory || (ɵNgbCalendarIslamicCivil_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarIslamicCivil)))(t || NgbCalendarIslamicCivil);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarIslamicCivil,\n factory: NgbCalendarIslamicCivil.ɵfac\n });\n }\n }\n return NgbCalendarIslamicCivil;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Umalqura calendar is one type of Hijri calendars used in islamic countries.\n * This Calendar is used by Saudi Arabia for administrative purpose.\n * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n */\nconst GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);\nconst GREGORIAN_LAST_DATE = new Date(2174, 10, 25);\nconst HIJRI_BEGIN = 1300;\nconst HIJRI_END = 1600;\nconst ONE_DAY = 1000 * 60 * 60 * 24;\nconst MONTH_LENGTH = [\n// 1300-1304\n'101010101010', '110101010100', '111011001001', '011011010100', '011011101010',\n// 1305-1309\n'001101101100', '101010101101', '010101010101', '011010101001', '011110010010',\n// 1310-1314\n'101110101001', '010111010100', '101011011010', '010101011100', '110100101101',\n// 1315-1319\n'011010010101', '011101001010', '101101010100', '101101101010', '010110101101',\n// 1320-1324\n'010010101110', '101001001111', '010100010111', '011010001011', '011010100101',\n// 1325-1329\n'101011010101', '001011010110', '100101011011', '010010011101', '101001001101',\n// 1330-1334\n'110100100110', '110110010101', '010110101100', '100110110110', '001010111010',\n// 1335-1339\n'101001011011', '010100101011', '101010010101', '011011001010', '101011101001',\n// 1340-1344\n'001011110100', '100101110110', '001010110110', '100101010110', '101011001010',\n// 1345-1349\n'101110100100', '101111010010', '010111011001', '001011011100', '100101101101',\n// 1350-1354\n'010101001101', '101010100101', '101101010010', '101110100101', '010110110100',\n// 1355-1359\n'100110110110', '010101010111', '001010010111', '010101001011', '011010100011',\n// 1360-1364\n'011101010010', '101101100101', '010101101010', '101010101011', '010100101011',\n// 1365-1369\n'110010010101', '110101001010', '110110100101', '010111001010', '101011010110',\n// 1370-1374\n'100101010111', '010010101011', '100101001011', '101010100101', '101101010010',\n// 1375-1379\n'101101101010', '010101110101', '001001110110', '100010110111', '010001011011',\n// 1380-1384\n'010101010101', '010110101001', '010110110100', '100111011010', '010011011101',\n// 1385-1389\n'001001101110', '100100110110', '101010101010', '110101010100', '110110110010',\n// 1390-1394\n'010111010101', '001011011010', '100101011011', '010010101011', '101001010101',\n// 1395-1399\n'101101001001', '101101100100', '101101110001', '010110110100', '101010110101',\n// 1400-1404\n'101001010101', '110100100101', '111010010010', '111011001001', '011011010100',\n// 1405-1409\n'101011101001', '100101101011', '010010101011', '101010010011', '110101001001',\n// 1410-1414\n'110110100100', '110110110010', '101010111001', '010010111010', '101001011011',\n// 1415-1419\n'010100101011', '101010010101', '101100101010', '101101010101', '010101011100',\n// 1420-1424\n'010010111101', '001000111101', '100100011101', '101010010101', '101101001010',\n// 1425-1429\n'101101011010', '010101101101', '001010110110', '100100111011', '010010011011',\n// 1430-1434\n'011001010101', '011010101001', '011101010100', '101101101010', '010101101100',\n// 1435-1439\n'101010101101', '010101010101', '101100101001', '101110010010', '101110101001',\n// 1440-1444\n'010111010100', '101011011010', '010101011010', '101010101011', '010110010101',\n// 1445-1449\n'011101001001', '011101100100', '101110101010', '010110110101', '001010110110',\n// 1450-1454\n'101001010110', '111001001101', '101100100101', '101101010010', '101101101010',\n// 1455-1459\n'010110101101', '001010101110', '100100101111', '010010010111', '011001001011',\n// 1460-1464\n'011010100101', '011010101100', '101011010110', '010101011101', '010010011101',\n// 1465-1469\n'101001001101', '110100010110', '110110010101', '010110101010', '010110110101',\n// 1470-1474\n'001011011010', '100101011011', '010010101101', '010110010101', '011011001010',\n// 1475-1479\n'011011100100', '101011101010', '010011110101', '001010110110', '100101010110',\n// 1480-1484\n'101010101010', '101101010100', '101111010010', '010111011001', '001011101010',\n// 1485-1489\n'100101101101', '010010101101', '101010010101', '101101001010', '101110100101',\n// 1490-1494\n'010110110010', '100110110101', '010011010110', '101010010111', '010101000111',\n// 1495-1499\n'011010010011', '011101001001', '101101010101', '010101101010', '101001101011',\n// 1500-1504\n'010100101011', '101010001011', '110101000110', '110110100011', '010111001010',\n// 1505-1509\n'101011010110', '010011011011', '001001101011', '100101001011', '101010100101',\n// 1510-1514\n'101101010010', '101101101001', '010101110101', '000101110110', '100010110111',\n// 1515-1519\n'001001011011', '010100101011', '010101100101', '010110110100', '100111011010',\n// 1520-1524\n'010011101101', '000101101101', '100010110110', '101010100110', '110101010010',\n// 1525-1529\n'110110101001', '010111010100', '101011011010', '100101011011', '010010101011',\n// 1530-1534\n'011001010011', '011100101001', '011101100010', '101110101001', '010110110010',\n// 1535-1539\n'101010110101', '010101010101', '101100100101', '110110010010', '111011001001',\n// 1540-1544\n'011011010010', '101011101001', '010101101011', '010010101011', '101001010101',\n// 1545-1549\n'110100101001', '110101010100', '110110101010', '100110110101', '010010111010',\n// 1550-1554\n'101000111011', '010010011011', '101001001101', '101010101010', '101011010101',\n// 1555-1559\n'001011011010', '100101011101', '010001011110', '101000101110', '110010011010',\n// 1560-1564\n'110101010101', '011010110010', '011010111001', '010010111010', '101001011101',\n// 1565-1569\n'010100101101', '101010010101', '101101010010', '101110101000', '101110110100',\n// 1570-1574\n'010110111001', '001011011010', '100101011010', '101101001010', '110110100100',\n// 1575-1579\n'111011010001', '011011101000', '101101101010', '010101101101', '010100110101',\n// 1580-1584\n'011010010101', '110101001010', '110110101000', '110111010100', '011011011010',\n// 1585-1589\n'010101011011', '001010011101', '011000101011', '101100010101', '101101001010',\n// 1590-1594\n'101110010101', '010110101010', '101010101110', '100100101110', '110010001111',\n// 1595-1599\n'010100100111', '011010010101', '011010101010', '101011010110', '010101011101',\n// 1600\n'001010011101'];\nfunction getDaysDiff(date1, date2) {\n // Ignores the time part in date1 and date2:\n const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());\n const diff = Math.abs(time1 - time2);\n return Math.round(diff / ONE_DAY);\n}\nlet NgbCalendarIslamicUmalqura = /*#__PURE__*/(() => {\n class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil {\n /**\n * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.\n * `gdate` is s JS Date to be converted to Hijri.\n */\n fromGregorian(gDate) {\n let hDay = 1,\n hMonth = 0,\n hYear = 1300;\n let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);\n if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {\n let year = 1300;\n for (let i = 0; i < MONTH_LENGTH.length; i++, year++) {\n for (let j = 0; j < 12; j++) {\n let numOfDays = +MONTH_LENGTH[i][j] + 29;\n if (daysDiff <= numOfDays) {\n hDay = daysDiff + 1;\n if (hDay > numOfDays) {\n hDay = 1;\n j++;\n }\n if (j > 11) {\n j = 0;\n year++;\n }\n hMonth = j;\n hYear = year;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n daysDiff = daysDiff - numOfDays;\n }\n }\n return null;\n } else {\n return super.fromGregorian(gDate);\n }\n }\n /**\n * Converts the current Hijri date to Gregorian.\n */\n toGregorian(hDate) {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n let gDate = new Date(GREGORIAN_FIRST_DATE);\n let dayDiff = hDay - 1;\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n for (let y = 0; y < hYear - HIJRI_BEGIN; y++) {\n for (let m = 0; m < 12; m++) {\n dayDiff += +MONTH_LENGTH[y][m] + 29;\n }\n }\n for (let m = 0; m < hMonth; m++) {\n dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29;\n }\n gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);\n } else {\n gDate = super.toGregorian(hDate);\n }\n return gDate;\n }\n /**\n * Returns the number of days in a specific Hijri hMonth.\n * `hMonth` is 1 for Muharram, 2 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\n getDaysPerMonth(hMonth, hYear) {\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n const pos = hYear - HIJRI_BEGIN;\n return +MONTH_LENGTH[pos][hMonth - 1] + 29;\n }\n return super.getDaysPerMonth(hMonth, hYear);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbCalendarIslamicUmalqura_BaseFactory;\n return function NgbCalendarIslamicUmalqura_Factory(t) {\n return (ɵNgbCalendarIslamicUmalqura_BaseFactory || (ɵNgbCalendarIslamicUmalqura_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarIslamicUmalqura)))(t || NgbCalendarIslamicUmalqura);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarIslamicUmalqura,\n factory: NgbCalendarIslamicUmalqura.ɵfac\n });\n }\n }\n return NgbCalendarIslamicUmalqura;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Returns the equivalent JS date value for a give input Jalali date.\n * `jalaliDate` is an Jalali date to be converted to Gregorian.\n */\nfunction toGregorian$3(jalaliDate) {\n let jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day);\n let date = julianToGregorian$1(jdn);\n date.setHours(6, 30, 3, 200);\n return date;\n}\n/**\n * Returns the equivalent jalali date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to jalali.\n * utc to local\n */\nfunction fromGregorian$3(gdate) {\n let g2d = gregorianToJulian$1(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());\n return julianToJalali(g2d);\n}\nfunction setJalaliYear(date, yearValue) {\n date.year = +yearValue;\n return date;\n}\nfunction setJalaliMonth(date, month) {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n}\nfunction setJalaliDay(date, day) {\n let mDays = getDaysPerMonth$1(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = setJalaliMonth(date, date.month - 1);\n mDays = getDaysPerMonth$1(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = setJalaliMonth(date, date.month + 1);\n mDays = getDaysPerMonth$1(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n}\nfunction mod(a, b) {\n return a - b * Math.floor(a / b);\n}\nfunction div(a, b) {\n return Math.trunc(a / b);\n}\n/*\n This function determines if the Jalali (Persian) year is\n leap (366-day long) or is the common year (365 days), and\n finds the day in March (Gregorian calendar) of the first\n day of the Jalali year (jalaliYear).\n @param jalaliYear Jalali calendar year (-61 to 3177)\n @return\n leap: number of years since the last leap year (0 to 4)\n gYear: Gregorian year of the beginning of Jalali year\n march: the March day of Farvardin the 1st (1st day of jalaliYear)\n @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm\n @see: http://www.fourmilab.ch/documents/calendar/\n */\nfunction jalCal(jalaliYear) {\n // Jalali years starting the 33-year rule.\n let breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178];\n const breaksLength = breaks.length;\n const gYear = jalaliYear + 621;\n let leapJ = -14;\n let jp = breaks[0];\n if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) {\n throw new Error('Invalid Jalali year ' + jalaliYear);\n }\n // Find the limiting years for the Jalali year jalaliYear.\n let jump;\n for (let i = 1; i < breaksLength; i += 1) {\n const jm = breaks[i];\n jump = jm - jp;\n if (jalaliYear < jm) {\n break;\n }\n leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);\n jp = jm;\n }\n let n = jalaliYear - jp;\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalali year in the Persian calendar.\n leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);\n if (mod(jump, 33) === 4 && jump - n === 4) {\n leapJ += 1;\n }\n // And the same in the Gregorian calendar (until the year gYear).\n const leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150;\n // Determine the Gregorian date of Farvardin the 1st.\n const march = 20 + leapJ - leapG;\n // Find how many years have passed since the last leap year.\n if (jump - n < 6) {\n n = n - jump + div(jump + 4, 33) * 33;\n }\n let leap = mod(mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n return {\n leap: leap,\n gy: gYear,\n march: march\n };\n}\n/*\n Calculates Gregorian and Julian calendar dates from the Julian Day number\n (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\n calendars) to some millions years ahead of the present.\n @param jdn Julian Day number\n @return\n gYear: Calendar year (years BC numbered 0, -1, -2, ...)\n gMonth: Calendar month (1 to 12)\n gDay: Calendar day of the month M (1 to 28/29/30/31)\n */\nfunction julianToGregorian$1(julianDayNumber) {\n let j = 4 * julianDayNumber + 139361631;\n j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908;\n const i = div(mod(j, 1461), 4) * 5 + 308;\n const gDay = div(mod(i, 153), 5) + 1;\n const gMonth = mod(div(i, 153), 12) + 1;\n const gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6);\n return new Date(gYear, gMonth - 1, gDay);\n}\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jy Jalali year (1 to 3100)\n @param jm Jalali month (1 to 12)\n @param jd Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction gregorianToJulian$1(gy, gm, gd) {\n let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408;\n d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n}\n/*\n Converts the Julian Day number to a date in the Jalali calendar.\n @param julianDayNumber Julian Day number\n @return\n jalaliYear: Jalali year (1 to 3100)\n jalaliMonth: Jalali month (1 to 12)\n jalaliDay: Jalali day (1 to 29/31)\n */\nfunction julianToJalali(julianDayNumber) {\n let gy = julianToGregorian$1(julianDayNumber).getFullYear(),\n // Calculate Gregorian year (gy).\n jalaliYear = gy - 621,\n r = jalCal(jalaliYear),\n gregorianDay = gregorianToJulian$1(gy, 3, r.march),\n jalaliDay,\n jalaliMonth,\n numberOfDays;\n // Find number of days that passed since 1 Farvardin.\n numberOfDays = julianDayNumber - gregorianDay;\n if (numberOfDays >= 0) {\n if (numberOfDays <= 185) {\n // The first 6 months.\n jalaliMonth = 1 + div(numberOfDays, 31);\n jalaliDay = mod(numberOfDays, 31) + 1;\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n } else {\n // The remaining months.\n numberOfDays -= 186;\n }\n } else {\n // Previous Jalali year.\n jalaliYear -= 1;\n numberOfDays += 179;\n if (r.leap === 1) {\n numberOfDays += 1;\n }\n }\n jalaliMonth = 7 + div(numberOfDays, 30);\n jalaliDay = mod(numberOfDays, 30) + 1;\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n}\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jYear Jalali year (1 to 3100)\n @param jMonth Jalali month (1 to 12)\n @param jDay Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction jalaliToJulian(jYear, jMonth, jDay) {\n let r = jalCal(jYear);\n return gregorianToJulian$1(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1;\n}\n/**\n * Returns the number of days in a specific jalali month.\n */\nfunction getDaysPerMonth$1(month, year) {\n if (month <= 6) {\n return 31;\n }\n if (month <= 11) {\n return 30;\n }\n if (jalCal(year).leap === 0) {\n return 30;\n }\n return 29;\n}\nlet NgbCalendarPersian = /*#__PURE__*/(() => {\n class NgbCalendarPersian extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n getMonths() {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n getWeeksPerMonth() {\n return 6;\n }\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n switch (period) {\n case 'y':\n date = setJalaliYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setJalaliMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return setJalaliDay(date, date.day + number);\n default:\n return date;\n }\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n const day = toGregorian$3(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n const jsDate = toGregorian$3(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const startDate = toGregorian$3(new NgbDate(date.year, 1, 1));\n return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;\n }\n getToday() {\n return fromGregorian$3(new Date());\n }\n isValid(date) {\n return date != null && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) && !isNaN(toGregorian$3(date).getTime());\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbCalendarPersian_BaseFactory;\n return function NgbCalendarPersian_Factory(t) {\n return (ɵNgbCalendarPersian_BaseFactory || (ɵNgbCalendarPersian_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarPersian)))(t || NgbCalendarPersian);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarPersian,\n factory: NgbCalendarPersian.ɵfac\n });\n }\n }\n return NgbCalendarPersian;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst PARTS_PER_HOUR = 1080;\nconst PARTS_PER_DAY = 24 * PARTS_PER_HOUR;\nconst PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793;\nconst PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH;\nconst BAHARAD = 11 * PARTS_PER_HOUR + 204;\nconst HEBREW_DAY_ON_JAN_1_1970 = 2092591;\nconst GREGORIAN_EPOCH = 1721425.5;\nfunction isGregorianLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\nfunction numberOfFirstDayInYear(year) {\n let monthsBeforeYear = Math.floor((235 * year - 234) / 19);\n let fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD;\n let dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY);\n let timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY;\n let dayOfWeek = dayNumber % 7; // 0 == Monday\n if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) {\n dayNumber++;\n dayOfWeek = dayNumber % 7;\n }\n if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) {\n dayNumber += 2;\n } else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) {\n dayNumber++;\n }\n return dayNumber;\n}\nfunction getDaysInGregorianMonth(month, year) {\n let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (isGregorianLeapYear(year)) {\n days[1]++;\n }\n return days[month - 1];\n}\nfunction getHebrewMonths(year) {\n return isHebrewLeapYear(year) ? 13 : 12;\n}\n/**\n * Returns the number of days in a specific Hebrew year.\n * `year` is any Hebrew year.\n */\nfunction getDaysInHebrewYear(year) {\n return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n}\nfunction isHebrewLeapYear(year) {\n if (year != null) {\n let b = (year * 12 + 17) % 19;\n return b >= (b < 0 ? -7 : 12);\n }\n return false;\n}\n/**\n * Returns the number of days in a specific Hebrew month.\n * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months.\n * `year` is any Hebrew year.\n */\nfunction getDaysInHebrewMonth(month, year) {\n let yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n let yearType = (yearLength <= 380 ? yearLength : yearLength - 30) - 353;\n let leapYear = isHebrewLeapYear(year);\n let daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] : [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29];\n if (yearType > 0) {\n daysInMonth[2]++; // Kislev gets an extra day in normal or complete years.\n }\n if (yearType > 1) {\n daysInMonth[1]++; // Heshvan gets an extra day in complete years only.\n }\n return daysInMonth[month - 1];\n}\nfunction getDayNumberInHebrewYear(date) {\n let numberOfDay = 0;\n for (let i = 1; i < date.month; i++) {\n numberOfDay += getDaysInHebrewMonth(i, date.year);\n }\n return numberOfDay + date.day;\n}\nfunction setHebrewMonth(date, val) {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getHebrewMonths(date.year) - date.month) {\n val -= getHebrewMonths(date.year) - date.month + 1;\n date.year++;\n date.month = 1;\n } else {\n date.month += val;\n val = 0;\n }\n } else {\n if (val >= date.month) {\n date.year--;\n val -= date.month;\n date.month = getHebrewMonths(date.year);\n } else {\n date.month -= val;\n val = 0;\n }\n }\n }\n return date;\n}\nfunction setHebrewDay(date, val) {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) {\n val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1;\n date.year++;\n date.month = 1;\n date.day = 1;\n } else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) {\n val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1;\n date.month++;\n date.day = 1;\n } else {\n date.day += val;\n val = 0;\n }\n } else {\n if (val >= date.day) {\n val -= date.day;\n date.month--;\n if (date.month === 0) {\n date.year--;\n date.month = getHebrewMonths(date.year);\n }\n date.day = getDaysInHebrewMonth(date.month, date.year);\n } else {\n date.day -= val;\n val = 0;\n }\n }\n }\n return date;\n}\n/**\n * Returns the equivalent Hebrew date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to Hebrew date.\n */\nfunction fromGregorian$2(gdate) {\n const date = new Date(gdate);\n const gYear = date.getFullYear(),\n gMonth = date.getMonth(),\n gDay = date.getDate();\n let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) - Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gYear) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay + 0.5);\n let daysSinceHebEpoch = julianDay - 347997;\n let monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH);\n let hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1;\n let firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n let dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n while (dayOfYear < 1) {\n hYear--;\n firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n }\n let hMonth = 1;\n let hDay = dayOfYear;\n while (hDay > getDaysInHebrewMonth(hMonth, hYear)) {\n hDay -= getDaysInHebrewMonth(hMonth, hYear);\n hMonth++;\n }\n return new NgbDate(hYear, hMonth, hDay);\n}\n/**\n * Returns the equivalent JS date value for a given Hebrew date.\n * `hebrewDate` is an Hebrew date to be converted to Gregorian.\n */\nfunction toGregorian$2(hebrewDate) {\n const hYear = hebrewDate.year;\n const hMonth = hebrewDate.month;\n const hDay = hebrewDate.day;\n let days = numberOfFirstDayInYear(hYear);\n for (let i = 1; i < hMonth; i++) {\n days += getDaysInHebrewMonth(i, hYear);\n }\n days += hDay;\n let diffDays = days - HEBREW_DAY_ON_JAN_1_1970;\n let after = diffDays >= 0;\n if (!after) {\n diffDays = -diffDays;\n }\n let gYear = 1970;\n let gMonth = 1;\n let gDay = 1;\n while (diffDays > 0) {\n if (after) {\n if (diffDays >= (isGregorianLeapYear(gYear) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear) ? 366 : 365;\n gYear++;\n } else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n gMonth++;\n } else {\n gDay += diffDays;\n diffDays = 0;\n }\n } else {\n if (diffDays >= (isGregorianLeapYear(gYear - 1) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear - 1) ? 366 : 365;\n gYear--;\n } else {\n if (gMonth > 1) {\n gMonth--;\n } else {\n gMonth = 12;\n gYear--;\n }\n if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n } else {\n gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1;\n diffDays = 0;\n }\n }\n }\n }\n return new Date(gYear, gMonth - 1, gDay);\n}\nfunction hebrewNumerals(numerals) {\n if (!numerals) {\n return '';\n }\n const hArray0_9 = ['', '\\u05d0', '\\u05d1', '\\u05d2', '\\u05d3', '\\u05d4', '\\u05d5', '\\u05d6', '\\u05d7', '\\u05d8'];\n const hArray10_19 = ['\\u05d9', '\\u05d9\\u05d0', '\\u05d9\\u05d1', '\\u05d9\\u05d2', '\\u05d9\\u05d3', '\\u05d8\\u05d5', '\\u05d8\\u05d6', '\\u05d9\\u05d6', '\\u05d9\\u05d7', '\\u05d9\\u05d8'];\n const hArray20_90 = ['', '', '\\u05db', '\\u05dc', '\\u05de', '\\u05e0', '\\u05e1', '\\u05e2', '\\u05e4', '\\u05e6'];\n const hArray100_900 = ['', '\\u05e7', '\\u05e8', '\\u05e9', '\\u05ea', '\\u05ea\\u05e7', '\\u05ea\\u05e8', '\\u05ea\\u05e9', '\\u05ea\\u05ea', '\\u05ea\\u05ea\\u05e7'];\n const hArray1000_9000 = ['', '\\u05d0', '\\u05d1', '\\u05d1\\u05d0', '\\u05d1\\u05d1', '\\u05d4', '\\u05d4\\u05d0', '\\u05d4\\u05d1', '\\u05d4\\u05d1\\u05d0', '\\u05d4\\u05d1\\u05d1'];\n const geresh = '\\u05f3',\n gershaim = '\\u05f4';\n let mem = 0;\n let result = [];\n let step = 0;\n while (numerals > 0) {\n let m = numerals % 10;\n if (step === 0) {\n mem = m;\n } else if (step === 1) {\n if (m !== 1) {\n result.unshift(hArray20_90[m], hArray0_9[mem]);\n } else {\n result.unshift(hArray10_19[mem]);\n }\n } else if (step === 2) {\n result.unshift(hArray100_900[m]);\n } else {\n if (m !== 5) {\n result.unshift(hArray1000_9000[m], geresh, ' ');\n }\n break;\n }\n numerals = Math.floor(numerals / 10);\n if (step === 0 && numerals === 0) {\n result.unshift(hArray0_9[m]);\n }\n step++;\n }\n result = result.join('').split('');\n if (result.length === 1) {\n result.push(geresh);\n } else if (result.length > 1) {\n result.splice(result.length - 1, 0, gershaim);\n }\n return result.join('');\n}\n\n/**\n * @since 3.2.0\n */\nlet NgbCalendarHebrew = /*#__PURE__*/(() => {\n class NgbCalendarHebrew extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n getMonths(year) {\n if (year && isHebrewLeapYear(year)) {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];\n } else {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n }\n getWeeksPerMonth() {\n return 6;\n }\n isValid(date) {\n if (date != null) {\n let b = isNumber(date.year) && isNumber(date.month) && isNumber(date.day);\n b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12);\n b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year);\n return b && !isNaN(toGregorian$2(date).getTime());\n }\n return false;\n }\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n switch (period) {\n case 'y':\n date.year += number;\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setHebrewMonth(date, number);\n date.day = 1;\n return date;\n case 'd':\n return setHebrewDay(date, number);\n default:\n return date;\n }\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n const day = toGregorian$2(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n getWeekNumber(week, firstDayOfWeek) {\n const date = week[week.length - 1];\n return Math.ceil(getDayNumberInHebrewYear(date) / 7);\n }\n getToday() {\n return fromGregorian$2(new Date());\n }\n /**\n * @since 3.4.0\n */\n toGregorian(date) {\n return fromJSDate(toGregorian$2(date));\n }\n /**\n * @since 3.4.0\n */\n fromGregorian(date) {\n return fromGregorian$2(toJSDate(date));\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbCalendarHebrew_BaseFactory;\n return function NgbCalendarHebrew_Factory(t) {\n return (ɵNgbCalendarHebrew_BaseFactory || (ɵNgbCalendarHebrew_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarHebrew)))(t || NgbCalendarHebrew);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarHebrew,\n factory: NgbCalendarHebrew.ɵfac\n });\n }\n }\n return NgbCalendarHebrew;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst WEEKDAYS$1 = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון'];\nconst MONTHS$1 = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\nconst MONTHS_LEAP = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\n/**\n * @since 3.2.0\n */\nlet NgbDatepickerI18nHebrew = /*#__PURE__*/(() => {\n class NgbDatepickerI18nHebrew extends NgbDatepickerI18n {\n getMonthShortName(month, year) {\n return this.getMonthFullName(month, year);\n }\n getMonthFullName(month, year) {\n return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] || '' : MONTHS$1[month - 1] || '';\n }\n getWeekdayLabel(weekday, width) {\n return WEEKDAYS$1[weekday - 1] || '';\n }\n getDayAriaLabel(date) {\n return `${hebrewNumerals(date.day)} ${this.getMonthFullName(date.month, date.year)} ${hebrewNumerals(date.year)}`;\n }\n getDayNumerals(date) {\n return hebrewNumerals(date.day);\n }\n getWeekNumerals(weekNumber) {\n return hebrewNumerals(weekNumber);\n }\n getYearNumerals(year) {\n return hebrewNumerals(year);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbDatepickerI18nHebrew_BaseFactory;\n return function NgbDatepickerI18nHebrew_Factory(t) {\n return (ɵNgbDatepickerI18nHebrew_BaseFactory || (ɵNgbDatepickerI18nHebrew_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDatepickerI18nHebrew)))(t || NgbDatepickerI18nHebrew);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerI18nHebrew,\n factory: NgbDatepickerI18nHebrew.ɵfac\n });\n }\n }\n return NgbDatepickerI18nHebrew;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Returns the equivalent JS date value for a give input Buddhist date.\n * `date` is an Buddhist date to be converted to Gregorian.\n */\nfunction toGregorian$1(date) {\n return new Date(date.year - 543, date.month - 1, date.day);\n}\n/**\n * Returns the equivalent Buddhist date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to Buddhist.\n * utc to local\n */\nfunction fromGregorian$1(gdate) {\n return new NgbDate(gdate.getFullYear() + 543, gdate.getMonth() + 1, gdate.getDate());\n}\n\n/**\n * @since 9.1.0\n */\nlet NgbCalendarBuddhist = /*#__PURE__*/(() => {\n class NgbCalendarBuddhist extends NgbCalendarGregorian {\n getToday() {\n return fromGregorian$1(new Date());\n }\n getNext(date, period = 'd', number = 1) {\n let jsDate = toGregorian$1(date);\n let checkMonth = true;\n let expectedMonth = jsDate.getMonth();\n switch (period) {\n case 'y':\n jsDate.setFullYear(jsDate.getFullYear() + number);\n break;\n case 'm':\n expectedMonth += number;\n jsDate.setMonth(expectedMonth);\n expectedMonth = expectedMonth % 12;\n if (expectedMonth < 0) {\n expectedMonth = expectedMonth + 12;\n }\n break;\n case 'd':\n jsDate.setDate(jsDate.getDate() + number);\n checkMonth = false;\n break;\n default:\n return date;\n }\n if (checkMonth && jsDate.getMonth() !== expectedMonth) {\n // this means the destination month has less days than the initial month\n // let's go back to the end of the previous month:\n jsDate.setDate(0);\n }\n return fromGregorian$1(jsDate);\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n let jsDate = toGregorian$1(date);\n let day = jsDate.getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n getWeekNumber(week, firstDayOfWeek) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n let date = week[thursdayIndex];\n const jsDate = toGregorian$1(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n jsDate.setMonth(0); // Compare with Jan 1\n jsDate.setDate(1);\n return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;\n }\n isValid(date) {\n if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {\n return false;\n }\n // year 0 doesn't exist in Gregorian calendar\n if (date.year === 0) {\n return false;\n }\n const jsDate = toGregorian$1(date);\n return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year - 543 && jsDate.getMonth() + 1 === date.month && jsDate.getDate() === date.day;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbCalendarBuddhist_BaseFactory;\n return function NgbCalendarBuddhist_Factory(t) {\n return (ɵNgbCalendarBuddhist_BaseFactory || (ɵNgbCalendarBuddhist_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarBuddhist)))(t || NgbCalendarBuddhist);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarBuddhist,\n factory: NgbCalendarBuddhist.ɵfac\n });\n }\n }\n return NgbCalendarBuddhist;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst JD_EPOCH = 1724220.5;\nconst DAYSPERMONTH = [30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 5];\n/**\n * Determine whether this date is in a leap year.\n * * `year` is the year to examine\n * returns boolean - true if this is a leap year, false if not\n * */\nfunction isEthiopianLeapYear(year) {\n if (year != null) {\n return year % 4 == 3 || year % 4 == -1;\n }\n return false;\n}\n/**\n * Sets the Ethiopian year.\n * * `date` is Ethiopian date\n * * `yearValue` incremented year\n * returns NgbDate - ethiopian date\n * */\nfunction setEthiopianYear(date, yearValue) {\n date.year = +yearValue;\n return date;\n}\n/**\n * Sets the Ethiopian month.\n * * `date` is Ethiopian date\n * * `val` incremented month\n * returns NgbDate - Ethiopian date\n * */\nfunction setEthiopianMonth(date, val) {\n val = +val;\n date.year = date.year + Math.floor((val - 1) / 13);\n date.month = Math.floor(((val - 1) % 13 + 13) % 13) + 1;\n return date;\n}\n/**\n * Sets the Ethiopian day.\n * * `date` is Ethiopian date\n * * `day` incremented day\n * returns NgbDate - Ethiopian date\n * */\nfunction setEthiopianDay(date, day) {\n let mDays = getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = setEthiopianMonth(date, date.month - 1);\n mDays = getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = setEthiopianMonth(date, date.month + 1);\n mDays = getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n}\nfunction getDaysPerMonth(month, year) {\n let leapYear = isEthiopianLeapYear(year);\n return DAYSPERMONTH[month - 1] + (month === 13 && leapYear ? 1 : 0);\n}\nfunction toGregorian(ethiopianDate) {\n let jdn = ethiopianToJulian(ethiopianDate.year, ethiopianDate.month, ethiopianDate.day);\n let date = julianToGregorian(jdn);\n date.setHours(6, 30, 3, 200);\n return date;\n}\nfunction fromGregorian(gdate) {\n let g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());\n return juilianToEthiopia(g2d);\n}\nfunction ethiopianToJulian(year, month, day) {\n if (year < 0) {\n year++;\n } // No year zero\n return day + (month - 1) * 30 + (year - 1) * 365 + Math.floor(year / 4) + JD_EPOCH - 1;\n}\nfunction juilianToEthiopia(jd) {\n let c = Math.floor(jd) + 0.5 - JD_EPOCH;\n let year = Math.floor((c - Math.floor((c + 366) / 1461)) / 365) + 1;\n if (year <= 0) {\n year--;\n } // No year zero\n c = Math.floor(jd) + 0.5 - ethiopianToJulian(year, 1, 1);\n let month = Math.floor(c / 30) + 1;\n let day = c - (month - 1) * 30 + 1;\n return new NgbDate(year, month, day);\n}\nfunction julianToGregorian(jd) {\n let z = Math.floor(jd + 0.5);\n let a = Math.floor((z - 1867216.25) / 36524.25);\n a = z + 1 + a - Math.floor(a / 4);\n let b = a + 1524;\n let c = Math.floor((b - 122.1) / 365.25);\n let d = Math.floor(365.25 * c);\n let e = Math.floor((b - d) / 30.6001);\n let day = b - d - Math.floor(e * 30.6001);\n let month = e - (e > 13.5 ? 13 : 1);\n let year = c - (month > 2.5 ? 4716 : 4715);\n if (year <= 0) {\n year--;\n } // No year zero\n return new Date(year, month, day);\n}\nfunction gregorianToJulian(year, month, day) {\n if (year < 0) {\n year++;\n } // No year zero\n // Jean Meeus algorithm, \"Astronomical Algorithms\", 1991\n if (month < 3) {\n month += 12;\n year--;\n }\n let a = Math.floor(year / 100);\n let b = 2 - a + Math.floor(a / 4);\n return Math.floor(365.25 * (year + 4716)) + Math.floor(30.6001 * (month + 1)) + day + b - 1524.5;\n}\n\n/**\n * @since 16.0.0\n */\nlet NgbCalendarEthiopian = /*#__PURE__*/(() => {\n class NgbCalendarEthiopian extends NgbCalendar {\n getDaysPerWeek() {\n return 7;\n }\n getMonths(year) {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];\n }\n getNext(date, period = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n switch (period) {\n case 'y':\n date = setEthiopianYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setEthiopianMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return setEthiopianDay(date, date.day + number);\n default:\n return date;\n }\n }\n getPrev(date, period = 'd', number = 1) {\n return this.getNext(date, period, -number);\n }\n getWeekday(date) {\n const dt = Math.floor(ethiopianToJulian(date.year, date.month, date.day) + 3) % 7;\n return dt === 0 ? 7 : dt;\n }\n getWeekNumber(week, firstDayOfWeek) {\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n const jsDate = toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const startDate = toGregorian(new NgbDate(date.year, 1, 1));\n return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;\n }\n getWeeksPerMonth() {\n return 6;\n }\n getToday() {\n return fromGregorian(new Date());\n }\n isValid(date) {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) && !isNaN(toGregorian(date).getTime());\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbCalendarEthiopian_BaseFactory;\n return function NgbCalendarEthiopian_Factory(t) {\n return (ɵNgbCalendarEthiopian_BaseFactory || (ɵNgbCalendarEthiopian_BaseFactory = i0.ɵɵgetInheritedFactory(NgbCalendarEthiopian)))(t || NgbCalendarEthiopian);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbCalendarEthiopian,\n factory: NgbCalendarEthiopian.ɵfac\n });\n }\n }\n return NgbCalendarEthiopian;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst WEEKDAYS = ['እሑድ', 'ሰኞ', 'ማክሰኞ', 'ረቡዕ', 'ሓሙስ', 'ዓርብ', 'ቅዳሜ'];\nconst MONTHS = ['መስከረም', 'ጥቅምት', 'ኅዳር', 'ታህሣሥ', 'ጥር', 'የካቲት', 'መጋቢት', 'ሚያዝያ', 'ግንቦት', 'ሰኔ', 'ሐምሌ', 'ነሐሴ', 'ጳጉሜ'];\n/**\n * @since 16.0.0\n */\nlet NgbDatepickerI18nAmharic = /*#__PURE__*/(() => {\n class NgbDatepickerI18nAmharic extends NgbDatepickerI18n {\n getMonthShortName(month, year) {\n return this.getMonthFullName(month, year);\n }\n getMonthFullName(month, year) {\n return MONTHS[month - 1];\n }\n getWeekdayLabel(weekday, width) {\n return WEEKDAYS[weekday - 1];\n }\n getDayAriaLabel(date) {\n return `${date.day} ${this.getMonthFullName(date.month, date.year)} ${date.year}`;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbDatepickerI18nAmharic_BaseFactory;\n return function NgbDatepickerI18nAmharic_Factory(t) {\n return (ɵNgbDatepickerI18nAmharic_BaseFactory || (ɵNgbDatepickerI18nAmharic_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDatepickerI18nAmharic)))(t || NgbDatepickerI18nAmharic);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDatepickerI18nAmharic,\n factory: NgbDatepickerI18nAmharic.ɵfac\n });\n }\n }\n return NgbDatepickerI18nAmharic;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses\n * native javascript dates as a user date model.\n */\nlet NgbDateNativeAdapter = /*#__PURE__*/(() => {\n class NgbDateNativeAdapter extends NgbDateAdapter {\n /**\n * Converts a native `Date` to a `NgbDateStruct`.\n */\n fromModel(date) {\n return date instanceof Date && !isNaN(date.getTime()) ? this._fromNativeDate(date) : null;\n }\n /**\n * Converts a `NgbDateStruct` to a native `Date`.\n */\n toModel(date) {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) : null;\n }\n _fromNativeDate(date) {\n return {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n };\n }\n _toNativeDate(date) {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // avoid 30 -> 1930 conversion\n jsDate.setFullYear(date.year);\n return jsDate;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbDateNativeAdapter_BaseFactory;\n return function NgbDateNativeAdapter_Factory(t) {\n return (ɵNgbDateNativeAdapter_BaseFactory || (ɵNgbDateNativeAdapter_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDateNativeAdapter)))(t || NgbDateNativeAdapter);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateNativeAdapter,\n factory: NgbDateNativeAdapter.ɵfac\n });\n }\n }\n return NgbDateNativeAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates.\n *\n * @since 3.2.0\n */\nlet NgbDateNativeUTCAdapter = /*#__PURE__*/(() => {\n class NgbDateNativeUTCAdapter extends NgbDateNativeAdapter {\n _fromNativeDate(date) {\n return {\n year: date.getUTCFullYear(),\n month: date.getUTCMonth() + 1,\n day: date.getUTCDate()\n };\n }\n _toNativeDate(date) {\n const jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day));\n // avoid 30 -> 1930 conversion\n jsDate.setUTCFullYear(date.year);\n return jsDate;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbDateNativeUTCAdapter_BaseFactory;\n return function NgbDateNativeUTCAdapter_Factory(t) {\n return (ɵNgbDateNativeUTCAdapter_BaseFactory || (ɵNgbDateNativeUTCAdapter_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDateNativeUTCAdapter)))(t || NgbDateNativeUTCAdapter);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDateNativeUTCAdapter,\n factory: NgbDateNativeUTCAdapter.ɵfac\n });\n }\n }\n return NgbDateNativeUTCAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NGB_DATEPICKER_DIRECTIVES = [NgbDatepicker, NgbDatepickerContent, NgbInputDatepicker, NgbDatepickerMonth];\nlet NgbDatepickerModule = /*#__PURE__*/(() => {\n class NgbDatepickerModule {\n static {\n this.ɵfac = function NgbDatepickerModule_Factory(t) {\n return new (t || NgbDatepickerModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbDatepickerModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbDatepickerModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the dropdowns used in the application.\n */\nlet NgbDropdownConfig = /*#__PURE__*/(() => {\n class NgbDropdownConfig {\n constructor() {\n this.autoClose = true;\n this.placement = ['bottom-start', 'bottom-end', 'top-start', 'top-end'];\n this.popperOptions = options => options;\n this.container = null;\n }\n static {\n this.ɵfac = function NgbDropdownConfig_Factory(t) {\n return new (t || NgbDropdownConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbDropdownConfig,\n factory: NgbDropdownConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbDropdownConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A directive you should put on a dropdown item to enable keyboard navigation.\n * Arrow keys will move focus between items marked with this directive.\n *\n * @since 4.1.0\n */\nlet NgbDropdownItem = /*#__PURE__*/(() => {\n class NgbDropdownItem {\n constructor() {\n this._disabled = false;\n this.nativeElement = inject(ElementRef).nativeElement;\n this.tabindex = 0;\n }\n set disabled(value) {\n this._disabled = value === '' || value === true; // accept an empty attribute as true\n }\n get disabled() {\n return this._disabled;\n }\n static {\n this.ɵfac = function NgbDropdownItem_Factory(t) {\n return new (t || NgbDropdownItem)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdownItem,\n selectors: [[\"\", \"ngbDropdownItem\", \"\"]],\n hostAttrs: [1, \"dropdown-item\"],\n hostVars: 3,\n hostBindings: function NgbDropdownItem_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"tabIndex\", ctx.disabled ? -1 : ctx.tabindex);\n i0.ɵɵclassProp(\"disabled\", ctx.disabled);\n }\n },\n inputs: {\n tabindex: \"tabindex\",\n disabled: \"disabled\"\n },\n standalone: true\n });\n }\n }\n return NgbDropdownItem;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that will be applied if dropdown item is a button.\n * It will only set the disabled property.\n */\nlet NgbDropdownButtonItem = /*#__PURE__*/(() => {\n class NgbDropdownButtonItem {\n constructor() {\n this.item = inject(NgbDropdownItem);\n }\n static {\n this.ɵfac = function NgbDropdownButtonItem_Factory(t) {\n return new (t || NgbDropdownButtonItem)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdownButtonItem,\n selectors: [[\"button\", \"ngbDropdownItem\", \"\"]],\n hostVars: 1,\n hostBindings: function NgbDropdownButtonItem_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"disabled\", ctx.item.disabled);\n }\n },\n standalone: true\n });\n }\n }\n return NgbDropdownButtonItem;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that wraps dropdown menu content and dropdown items.\n */\nlet NgbDropdownMenu = /*#__PURE__*/(() => {\n class NgbDropdownMenu {\n constructor() {\n this.dropdown = inject(NgbDropdown);\n this.nativeElement = inject(ElementRef).nativeElement;\n }\n static {\n this.ɵfac = function NgbDropdownMenu_Factory(t) {\n return new (t || NgbDropdownMenu)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdownMenu,\n selectors: [[\"\", \"ngbDropdownMenu\", \"\"]],\n contentQueries: function NgbDropdownMenu_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbDropdownItem, 4);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.menuItems = _t);\n }\n },\n hostVars: 4,\n hostBindings: function NgbDropdownMenu_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown.ArrowUp\", function NgbDropdownMenu_keydown_ArrowUp_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.ArrowDown\", function NgbDropdownMenu_keydown_ArrowDown_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Home\", function NgbDropdownMenu_keydown_Home_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.End\", function NgbDropdownMenu_keydown_End_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Enter\", function NgbDropdownMenu_keydown_Enter_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Space\", function NgbDropdownMenu_keydown_Space_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Tab\", function NgbDropdownMenu_keydown_Tab_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Shift.Tab\", function NgbDropdownMenu_keydown_Shift_Tab_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"dropdown-menu\", true)(\"show\", ctx.dropdown.isOpen());\n }\n },\n standalone: true\n });\n }\n }\n return NgbDropdownMenu;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to mark an element to which dropdown menu will be anchored.\n *\n * This is a simple version of the `NgbDropdownToggle` directive.\n * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support\n * for events other than click.\n *\n * @since 1.1.0\n */\nlet NgbDropdownAnchor = /*#__PURE__*/(() => {\n class NgbDropdownAnchor {\n constructor() {\n this.dropdown = inject(NgbDropdown);\n this.nativeElement = inject(ElementRef).nativeElement;\n }\n static {\n this.ɵfac = function NgbDropdownAnchor_Factory(t) {\n return new (t || NgbDropdownAnchor)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdownAnchor,\n selectors: [[\"\", \"ngbDropdownAnchor\", \"\"]],\n hostAttrs: [1, \"dropdown-toggle\"],\n hostVars: 3,\n hostBindings: function NgbDropdownAnchor_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-expanded\", ctx.dropdown.isOpen());\n i0.ɵɵclassProp(\"show\", ctx.dropdown.isOpen());\n }\n },\n standalone: true\n });\n }\n }\n return NgbDropdownAnchor;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to mark an element that will toggle dropdown via the `click` event.\n *\n * You can also use `NgbDropdownAnchor` as an alternative.\n */\nlet NgbDropdownToggle = /*#__PURE__*/(() => {\n class NgbDropdownToggle extends NgbDropdownAnchor {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbDropdownToggle_BaseFactory;\n return function NgbDropdownToggle_Factory(t) {\n return (ɵNgbDropdownToggle_BaseFactory || (ɵNgbDropdownToggle_BaseFactory = i0.ɵɵgetInheritedFactory(NgbDropdownToggle)))(t || NgbDropdownToggle);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdownToggle,\n selectors: [[\"\", \"ngbDropdownToggle\", \"\"]],\n hostAttrs: [1, \"dropdown-toggle\"],\n hostVars: 3,\n hostBindings: function NgbDropdownToggle_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function NgbDropdownToggle_click_HostBindingHandler() {\n return ctx.dropdown.toggle();\n })(\"keydown.ArrowUp\", function NgbDropdownToggle_keydown_ArrowUp_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.ArrowDown\", function NgbDropdownToggle_keydown_ArrowDown_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Home\", function NgbDropdownToggle_keydown_Home_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.End\", function NgbDropdownToggle_keydown_End_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Tab\", function NgbDropdownToggle_keydown_Tab_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n })(\"keydown.Shift.Tab\", function NgbDropdownToggle_keydown_Shift_Tab_HostBindingHandler($event) {\n return ctx.dropdown.onKeyDown($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-expanded\", ctx.dropdown.isOpen());\n i0.ɵɵclassProp(\"show\", ctx.dropdown.isOpen());\n }\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NgbDropdownAnchor,\n useExisting: forwardRef(() => NgbDropdownToggle)\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return NgbDropdownToggle;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that provides contextual overlays for displaying lists of links and more.\n */\nlet NgbDropdown = /*#__PURE__*/(() => {\n class NgbDropdown {\n constructor() {\n this._changeDetector = inject(ChangeDetectorRef);\n this._config = inject(NgbDropdownConfig);\n this._document = inject(DOCUMENT);\n this._ngZone = inject(NgZone);\n this._nativeElement = inject(ElementRef).nativeElement;\n this._destroyCloseHandlers$ = new Subject();\n this._bodyContainer = null;\n this._positioning = ngbPositioning();\n /**\n * Indicates whether the dropdown should be closed when clicking one of dropdown items or pressing ESC.\n *\n * * `true` - the dropdown will close on both outside and inside (menu) clicks.\n * * `false` - the dropdown can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the dropdown will close on inside menu clicks, but not outside clicks.\n * * `\"outside\"` - the dropdown will close only on the outside clicks and not on menu clicks.\n */\n this.autoClose = this._config.autoClose;\n /**\n * Defines whether or not the dropdown menu is opened initially.\n */\n this._open = false;\n /**\n * The preferred placement of the dropdown, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"bottom-start bottom-end top-start top-end\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n this.placement = this._config.placement;\n /**\n * Allows to change default Popper options when positioning the dropdown.\n * Receives current popper options and returns modified ones.\n *\n * @since 13.1.0\n */\n this.popperOptions = this._config.popperOptions;\n /**\n * A selector specifying the element the dropdown should be appended to.\n * Currently only supports \"body\".\n *\n * @since 4.1.0\n */\n this.container = this._config.container;\n /**\n * An event fired when the dropdown is opened or closed.\n *\n * The event payload is a `boolean`:\n * * `true` - the dropdown was opened\n * * `false` - the dropdown was closed\n */\n this.openChange = new EventEmitter();\n }\n ngOnInit() {\n if (!this.display) {\n this.display = this._nativeElement.closest('.navbar') ? 'static' : 'dynamic';\n }\n }\n ngAfterContentInit() {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._applyPlacementClasses();\n if (this._open) {\n this._setCloseHandlers();\n }\n });\n }\n ngOnChanges(changes) {\n if (changes.container && this._open) {\n this._applyContainer(this.container);\n }\n if (changes.placement && !changes.placement.firstChange) {\n this._positioning.setOptions({\n hostElement: this._anchor.nativeElement,\n targetElement: this._bodyContainer || this._menu.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body'\n });\n this._applyPlacementClasses();\n }\n if (changes.dropdownClass) {\n const {\n currentValue,\n previousValue\n } = changes.dropdownClass;\n this._applyCustomDropdownClass(currentValue, previousValue);\n }\n if (changes.autoClose && this._open) {\n this.autoClose = changes.autoClose.currentValue;\n this._setCloseHandlers();\n }\n }\n /**\n * Checks if the dropdown menu is open.\n */\n isOpen() {\n return this._open;\n }\n /**\n * Opens the dropdown menu.\n */\n open() {\n if (!this._open) {\n this._open = true;\n this._applyContainer(this.container);\n this.openChange.emit(true);\n this._setCloseHandlers();\n if (this._anchor) {\n this._anchor.nativeElement.focus();\n if (this.display === 'dynamic') {\n this._ngZone.runOutsideAngular(() => {\n this._positioning.createPopper({\n hostElement: this._anchor.nativeElement,\n targetElement: this._bodyContainer || this._menu.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n updatePopperOptions: options => this.popperOptions(addPopperOffset([0, 2])(options))\n });\n this._applyPlacementClasses();\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positionMenu());\n });\n }\n }\n }\n }\n _setCloseHandlers() {\n this._destroyCloseHandlers$.next(); // destroy any existing close handlers\n ngbAutoClose(this._ngZone, this._document, this.autoClose, source => {\n this.close();\n if (source === 0 /* SOURCE.ESCAPE */) {\n this._anchor.nativeElement.focus();\n }\n }, this._destroyCloseHandlers$, this._menu ? [this._menu.nativeElement] : [], this._anchor ? [this._anchor.nativeElement] : [], '.dropdown-item,.dropdown-divider');\n }\n /**\n * Closes the dropdown menu.\n */\n close() {\n if (this._open) {\n this._open = false;\n this._resetContainer();\n this._positioning.destroy();\n this._zoneSubscription?.unsubscribe();\n this._destroyCloseHandlers$.next();\n this.openChange.emit(false);\n this._changeDetector.markForCheck();\n }\n }\n /**\n * Toggles the dropdown menu.\n */\n toggle() {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n ngOnDestroy() {\n this.close();\n }\n onKeyDown(event) {\n /* eslint-disable-next-line deprecation/deprecation */\n const key = event.which;\n const itemElements = this._getMenuElements();\n let position = -1;\n let itemElement = null;\n const isEventFromToggle = this._isEventFromToggle(event);\n if (!isEventFromToggle && itemElements.length) {\n itemElements.forEach((item, index) => {\n if (item.contains(event.target)) {\n itemElement = item;\n }\n if (item === getActiveElement(this._document)) {\n position = index;\n }\n });\n }\n // closing on Enter / Space\n if (key === Key.Space || key === Key.Enter) {\n if (itemElement && (this.autoClose === true || this.autoClose === 'inside')) {\n // Item is either a button or a link, so click will be triggered by the browser on Enter or Space.\n // So we have to register a one-time click handler that will fire after any user defined click handlers\n // to close the dropdown\n fromEvent(itemElement, 'click').pipe(take(1)).subscribe(() => this.close());\n }\n return;\n }\n if (key === Key.Tab) {\n if (event.target && this.isOpen() && this.autoClose) {\n if (this._anchor.nativeElement === event.target) {\n if (this.container === 'body' && !event.shiftKey) {\n /* This case is special: user is using [Tab] from the anchor/toggle.\n User expects the next focusable element in the dropdown menu to get focus.\n But the menu is not a sibling to anchor/toggle, it is at the end of the body.\n Trick is to synchronously focus the menu element, and let the [keydown.Tab] go\n so that browser will focus the proper element (first one focusable in the menu) */\n this._menu.nativeElement.setAttribute('tabindex', '0');\n this._menu.nativeElement.focus();\n this._menu.nativeElement.removeAttribute('tabindex');\n } else if (event.shiftKey) {\n this.close();\n }\n return;\n } else if (this.container === 'body') {\n const focusableElements = this._menu.nativeElement.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR);\n if (event.shiftKey && event.target === focusableElements[0]) {\n this._anchor.nativeElement.focus();\n event.preventDefault();\n } else if (!event.shiftKey && event.target === focusableElements[focusableElements.length - 1]) {\n this._anchor.nativeElement.focus();\n this.close();\n }\n } else {\n fromEvent(event.target, 'focusout').pipe(take(1)).subscribe(({\n relatedTarget\n }) => {\n if (!this._nativeElement.contains(relatedTarget)) {\n this.close();\n }\n });\n }\n }\n return;\n }\n // opening / navigating\n if (isEventFromToggle || itemElement) {\n this.open();\n if (itemElements.length) {\n switch (key) {\n case Key.ArrowDown:\n position = Math.min(position + 1, itemElements.length - 1);\n break;\n case Key.ArrowUp:\n if (this._isDropup() && position === -1) {\n position = itemElements.length - 1;\n break;\n }\n position = Math.max(position - 1, 0);\n break;\n case Key.Home:\n position = 0;\n break;\n case Key.End:\n position = itemElements.length - 1;\n break;\n }\n itemElements[position].focus();\n }\n event.preventDefault();\n }\n }\n _isDropup() {\n return this._nativeElement.classList.contains('dropup');\n }\n _isEventFromToggle(event) {\n return this._anchor.nativeElement.contains(event.target);\n }\n _getMenuElements() {\n return this._menu ? this._menu.menuItems.filter(({\n disabled\n }) => !disabled).map(({\n nativeElement\n }) => nativeElement) : [];\n }\n _positionMenu() {\n const menu = this._menu;\n if (this.isOpen() && menu) {\n if (this.display === 'dynamic') {\n this._positioning.update();\n this._applyPlacementClasses();\n } else {\n this._applyPlacementClasses(this._getFirstPlacement(this.placement));\n }\n }\n }\n _getFirstPlacement(placement) {\n return Array.isArray(placement) ? placement[0] : placement.split(' ')[0];\n }\n _resetContainer() {\n if (this._menu) {\n this._nativeElement.appendChild(this._menu.nativeElement);\n }\n if (this._bodyContainer) {\n this._document.body.removeChild(this._bodyContainer);\n this._bodyContainer = null;\n }\n }\n _applyContainer(container = null) {\n this._resetContainer();\n if (container === 'body') {\n const dropdownMenuElement = this._menu.nativeElement;\n const bodyContainer = this._bodyContainer = this._bodyContainer || this._document.createElement('div');\n // Override some styles to have the positioning working\n bodyContainer.style.position = 'absolute';\n dropdownMenuElement.style.position = 'static';\n bodyContainer.style.zIndex = '1055';\n bodyContainer.appendChild(dropdownMenuElement);\n this._document.body.appendChild(bodyContainer);\n }\n this._applyCustomDropdownClass(this.dropdownClass);\n }\n _applyCustomDropdownClass(newClass, oldClass) {\n const targetElement = this.container === 'body' ? this._bodyContainer : this._nativeElement;\n if (targetElement) {\n if (oldClass) {\n targetElement.classList.remove(oldClass);\n }\n if (newClass) {\n targetElement.classList.add(newClass);\n }\n }\n }\n _applyPlacementClasses(placement) {\n if (this._menu) {\n if (!placement) {\n placement = this._getFirstPlacement(this.placement);\n }\n // remove the current placement classes\n this._nativeElement.classList.remove('dropup', 'dropdown');\n if (this.display === 'static') {\n this._menu.nativeElement.setAttribute('data-bs-popper', 'static');\n } else {\n this._menu.nativeElement.removeAttribute('data-bs-popper');\n }\n /*\n * apply the new placement\n * in case of top use up-arrow or down-arrow otherwise\n */\n const dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown';\n this._nativeElement.classList.add(dropdownClass);\n if (this._bodyContainer) {\n this._bodyContainer.classList.remove('dropup', 'dropdown');\n this._bodyContainer.classList.add(dropdownClass);\n }\n }\n }\n static {\n this.ɵfac = function NgbDropdown_Factory(t) {\n return new (t || NgbDropdown)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbDropdown,\n selectors: [[\"\", \"ngbDropdown\", \"\"]],\n contentQueries: function NgbDropdown_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbDropdownMenu, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbDropdownAnchor, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._menu = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._anchor = _t.first);\n }\n },\n hostVars: 2,\n hostBindings: function NgbDropdown_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"show\", ctx.isOpen());\n }\n },\n inputs: {\n autoClose: \"autoClose\",\n dropdownClass: \"dropdownClass\",\n _open: [i0.ɵɵInputFlags.None, \"open\", \"_open\"],\n placement: \"placement\",\n popperOptions: \"popperOptions\",\n container: \"container\",\n display: \"display\"\n },\n outputs: {\n openChange: \"openChange\"\n },\n exportAs: [\"ngbDropdown\"],\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return NgbDropdown;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NGB_DROPDOWN_DIRECTIVES = [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbDropdownButtonItem];\nlet NgbDropdownModule = /*#__PURE__*/(() => {\n class NgbDropdownModule {\n static {\n this.ɵfac = function NgbDropdownModule_Factory(t) {\n return new (t || NgbDropdownModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbDropdownModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbDropdownModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all modals used in the application.\n *\n * @since 3.1.0\n */\nlet NgbModalConfig = /*#__PURE__*/(() => {\n class NgbModalConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.backdrop = true;\n this.fullscreen = false;\n this.keyboard = true;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static {\n this.ɵfac = function NgbModalConfig_Factory(t) {\n return new (t || NgbModalConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbModalConfig,\n factory: NgbModalConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbModalConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass ContentRef {\n constructor(nodes, viewRef, componentRef) {\n this.nodes = nodes;\n this.viewRef = viewRef;\n this.componentRef = componentRef;\n }\n}\nclass PopupService {\n constructor(_componentType) {\n this._componentType = _componentType;\n this._windowRef = null;\n this._contentRef = null;\n this._document = inject(DOCUMENT);\n this._applicationRef = inject(ApplicationRef);\n this._injector = inject(Injector);\n this._viewContainerRef = inject(ViewContainerRef);\n this._ngZone = inject(NgZone);\n }\n open(content, templateContext, animation = false) {\n if (!this._windowRef) {\n this._contentRef = this._getContentRef(content, templateContext);\n this._windowRef = this._viewContainerRef.createComponent(this._componentType, {\n injector: this._injector,\n projectableNodes: this._contentRef.nodes\n });\n }\n const {\n nativeElement\n } = this._windowRef.location;\n const transition$ = this._ngZone.onStable.pipe(take(1), mergeMap(() => ngbRunTransition(this._ngZone, nativeElement, ({\n classList\n }) => classList.add('show'), {\n animation,\n runningTransition: 'continue'\n })));\n return {\n windowRef: this._windowRef,\n transition$\n };\n }\n close(animation = false) {\n if (!this._windowRef) {\n return of(undefined);\n }\n return ngbRunTransition(this._ngZone, this._windowRef.location.nativeElement, ({\n classList\n }) => classList.remove('show'), {\n animation,\n runningTransition: 'stop'\n }).pipe(tap(() => {\n if (this._windowRef) {\n // this is required because of the container='body' option\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView));\n this._windowRef = null;\n }\n if (this._contentRef?.viewRef) {\n this._applicationRef.detachView(this._contentRef.viewRef);\n this._contentRef.viewRef.destroy();\n this._contentRef = null;\n }\n }));\n }\n _getContentRef(content, templateContext) {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n const viewRef = content.createEmbeddedView(templateContext);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n } else {\n return new ContentRef([[this._document.createTextNode(`${content}`)]]);\n }\n }\n}\n\n/**\n * Utility to handle the scrollbar.\n *\n * It allows to hide the scrollbar and compensate the lack of a vertical scrollbar\n * by adding an equivalent padding on the right of the body, and to revert this change.\n */\nlet ScrollBar = /*#__PURE__*/(() => {\n class ScrollBar {\n constructor() {\n this._document = inject(DOCUMENT);\n }\n /**\n * To be called to hide a potential vertical scrollbar:\n * - if a scrollbar is there and has a width greater than 0, adds some compensation\n * padding to the body to keep the same layout as when the scrollbar is there\n * - adds overflow: hidden\n *\n * @return a callback used to revert the change\n */\n hide() {\n const scrollbarWidth = Math.abs(window.innerWidth - this._document.documentElement.clientWidth);\n const body = this._document.body;\n const bodyStyle = body.style;\n const {\n overflow,\n paddingRight\n } = bodyStyle;\n if (scrollbarWidth > 0) {\n const actualPadding = parseFloat(window.getComputedStyle(body).paddingRight);\n bodyStyle.paddingRight = `${actualPadding + scrollbarWidth}px`;\n }\n bodyStyle.overflow = 'hidden';\n return () => {\n if (scrollbarWidth > 0) {\n bodyStyle.paddingRight = paddingRight;\n }\n bodyStyle.overflow = overflow;\n };\n }\n static {\n this.ɵfac = function ScrollBar_Factory(t) {\n return new (t || ScrollBar)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ScrollBar,\n factory: ScrollBar.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return ScrollBar;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbModalBackdrop = /*#__PURE__*/(() => {\n class NgbModalBackdrop {\n constructor() {\n this._nativeElement = inject(ElementRef).nativeElement;\n this._zone = inject(NgZone);\n }\n ngOnInit() {\n this._zone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n ngbRunTransition(this._zone, this._nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n element.classList.add('show');\n }, {\n animation: this.animation,\n runningTransition: 'continue'\n });\n });\n }\n hide() {\n return ngbRunTransition(this._zone, this._nativeElement, ({\n classList\n }) => classList.remove('show'), {\n animation: this.animation,\n runningTransition: 'stop'\n });\n }\n static {\n this.ɵfac = function NgbModalBackdrop_Factory(t) {\n return new (t || NgbModalBackdrop)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbModalBackdrop,\n selectors: [[\"ngb-modal-backdrop\"]],\n hostAttrs: [2, \"z-index\", \"1055\"],\n hostVars: 6,\n hostBindings: function NgbModalBackdrop_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassMap(\"modal-backdrop\" + (ctx.backdropClass ? \" \" + ctx.backdropClass : \"\"));\n i0.ɵɵclassProp(\"show\", !ctx.animation)(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n backdropClass: \"backdropClass\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 0,\n vars: 0,\n template: function NgbModalBackdrop_Template(rf, ctx) {},\n encapsulation: 2\n });\n }\n }\n return NgbModalBackdrop;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A reference to the currently opened (active) modal.\n *\n * Instances of this class can be injected into your component passed as modal content.\n * So you can `.update()`, `.close()` or `.dismiss()` the modal window from your component.\n */\nclass NgbActiveModal {\n /**\n * Updates options of an opened modal.\n *\n * @since 14.2.0\n */\n update(options) {}\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbModalRef.result` promise will be resolved with the provided value.\n */\n close(result) {}\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason) {}\n}\nconst WINDOW_ATTRIBUTES = ['animation', 'ariaLabelledBy', 'ariaDescribedBy', 'backdrop', 'centered', 'fullscreen', 'keyboard', 'scrollable', 'size', 'windowClass', 'modalDialogClass'];\nconst BACKDROP_ATTRIBUTES = ['animation', 'backdropClass'];\n/**\n * A reference to the newly opened modal returned by the `NgbModal.open()` method.\n */\nclass NgbModalRef {\n _applyWindowOptions(windowInstance, options) {\n WINDOW_ATTRIBUTES.forEach(optionName => {\n if (isDefined(options[optionName])) {\n windowInstance[optionName] = options[optionName];\n }\n });\n }\n _applyBackdropOptions(backdropInstance, options) {\n BACKDROP_ATTRIBUTES.forEach(optionName => {\n if (isDefined(options[optionName])) {\n backdropInstance[optionName] = options[optionName];\n }\n });\n }\n /**\n * Updates options of an opened modal.\n *\n * @since 14.2.0\n */\n update(options) {\n this._applyWindowOptions(this._windowCmptRef.instance, options);\n if (this._backdropCmptRef && this._backdropCmptRef.instance) {\n this._applyBackdropOptions(this._backdropCmptRef.instance, options);\n }\n }\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content or when the modal is closed, will return `undefined`.\n */\n get componentInstance() {\n if (this._contentRef && this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n /**\n * The observable that emits when the modal is closed via the `.close()` method.\n *\n * It will emit the result passed to the `.close()` method.\n *\n * @since 8.0.0\n */\n get closed() {\n return this._closed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when the modal is dismissed via the `.dismiss()` method.\n *\n * It will emit the reason passed to the `.dismissed()` method by the user, or one of the internal\n * reasons like backdrop click or ESC key press.\n *\n * @since 8.0.0\n */\n get dismissed() {\n return this._dismissed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when both modal window and backdrop are closed and animations were finished.\n * At this point modal and backdrop elements will be removed from the DOM tree.\n *\n * This observable will be completed after emitting.\n *\n * @since 8.0.0\n */\n get hidden() {\n return this._hidden.asObservable();\n }\n /**\n * The observable that emits when modal is fully visible and animation was finished.\n * Modal DOM element is always available synchronously after calling 'modal.open()' service.\n *\n * This observable will be completed after emitting.\n * It will not emit, if modal is closed before open animation is finished.\n *\n * @since 8.0.0\n */\n get shown() {\n return this._windowCmptRef.instance.shown.asObservable();\n }\n constructor(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) {\n this._windowCmptRef = _windowCmptRef;\n this._contentRef = _contentRef;\n this._backdropCmptRef = _backdropCmptRef;\n this._beforeDismiss = _beforeDismiss;\n this._closed = new Subject();\n this._dismissed = new Subject();\n this._hidden = new Subject();\n _windowCmptRef.instance.dismissEvent.subscribe(reason => {\n this.dismiss(reason);\n });\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result) {\n if (this._windowCmptRef) {\n this._closed.next(result);\n this._resolve(result);\n this._removeModalElements();\n }\n }\n _dismiss(reason) {\n this._dismissed.next(reason);\n this._reject(reason);\n this._removeModalElements();\n }\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason) {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n if (isPromise(dismiss)) {\n dismiss.then(result => {\n if (result !== false) {\n this._dismiss(reason);\n }\n }, () => {});\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n _removeModalElements() {\n const windowTransition$ = this._windowCmptRef.instance.hide();\n const backdropTransition$ = this._backdropCmptRef ? this._backdropCmptRef.instance.hide() : of(undefined);\n // hiding window\n windowTransition$.subscribe(() => {\n const {\n nativeElement\n } = this._windowCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n this._windowCmptRef.destroy();\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n this._windowCmptRef = null;\n this._contentRef = null;\n });\n // hiding backdrop\n backdropTransition$.subscribe(() => {\n if (this._backdropCmptRef) {\n const {\n nativeElement\n } = this._backdropCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n this._backdropCmptRef.destroy();\n this._backdropCmptRef = null;\n }\n });\n // all done\n zip(windowTransition$, backdropTransition$).subscribe(() => {\n this._hidden.next();\n this._hidden.complete();\n });\n }\n}\nvar ModalDismissReasons = /*#__PURE__*/function (ModalDismissReasons) {\n ModalDismissReasons[ModalDismissReasons[\"BACKDROP_CLICK\"] = 0] = \"BACKDROP_CLICK\";\n ModalDismissReasons[ModalDismissReasons[\"ESC\"] = 1] = \"ESC\";\n return ModalDismissReasons;\n}(ModalDismissReasons || {});\nlet NgbModalWindow = /*#__PURE__*/(() => {\n class NgbModalWindow {\n constructor() {\n this._document = inject(DOCUMENT);\n this._elRef = inject(ElementRef);\n this._zone = inject(NgZone);\n this._closed$ = new Subject();\n this._elWithFocus = null; // element that is focused prior to modal opening\n this.backdrop = true;\n this.keyboard = true;\n this.dismissEvent = new EventEmitter();\n this.shown = new Subject();\n this.hidden = new Subject();\n }\n get fullscreenClass() {\n return this.fullscreen === true ? ' modal-fullscreen' : isString(this.fullscreen) ? ` modal-fullscreen-${this.fullscreen}-down` : '';\n }\n dismiss(reason) {\n this.dismissEvent.emit(reason);\n }\n ngOnInit() {\n this._elWithFocus = this._document.activeElement;\n this._zone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this._show();\n });\n }\n ngOnDestroy() {\n this._disableEventHandling();\n }\n hide() {\n const {\n nativeElement\n } = this._elRef;\n const context = {\n animation: this.animation,\n runningTransition: 'stop'\n };\n const windowTransition$ = ngbRunTransition(this._zone, nativeElement, () => nativeElement.classList.remove('show'), context);\n const dialogTransition$ = ngbRunTransition(this._zone, this._dialogEl.nativeElement, () => {}, context);\n const transitions$ = zip(windowTransition$, dialogTransition$);\n transitions$.subscribe(() => {\n this.hidden.next();\n this.hidden.complete();\n });\n this._disableEventHandling();\n this._restoreFocus();\n return transitions$;\n }\n _show() {\n const context = {\n animation: this.animation,\n runningTransition: 'continue'\n };\n const windowTransition$ = ngbRunTransition(this._zone, this._elRef.nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n element.classList.add('show');\n }, context);\n const dialogTransition$ = ngbRunTransition(this._zone, this._dialogEl.nativeElement, () => {}, context);\n zip(windowTransition$, dialogTransition$).subscribe(() => {\n this.shown.next();\n this.shown.complete();\n });\n this._enableEventHandling();\n this._setFocus();\n }\n _enableEventHandling() {\n const {\n nativeElement\n } = this._elRef;\n this._zone.runOutsideAngular(() => {\n fromEvent(nativeElement, 'keydown').pipe(takeUntil(this._closed$), /* eslint-disable-next-line deprecation/deprecation */\n filter(e => e.which === Key.Escape)).subscribe(event => {\n if (this.keyboard) {\n requestAnimationFrame(() => {\n if (!event.defaultPrevented) {\n this._zone.run(() => this.dismiss(ModalDismissReasons.ESC));\n }\n });\n } else if (this.backdrop === 'static') {\n this._bumpBackdrop();\n }\n });\n // We're listening to 'mousedown' and 'mouseup' to prevent modal from closing when pressing the mouse\n // inside the modal dialog and releasing it outside\n let preventClose = false;\n fromEvent(this._dialogEl.nativeElement, 'mousedown').pipe(takeUntil(this._closed$), tap(() => preventClose = false), switchMap(() => fromEvent(nativeElement, 'mouseup').pipe(takeUntil(this._closed$), take(1))), filter(({\n target\n }) => nativeElement === target)).subscribe(() => {\n preventClose = true;\n });\n // We're listening to 'click' to dismiss modal on modal window click, except when:\n // 1. clicking on modal dialog itself\n // 2. closing was prevented by mousedown/up handlers\n // 3. clicking on scrollbar when the viewport is too small and modal doesn't fit (click is not triggered at all)\n fromEvent(nativeElement, 'click').pipe(takeUntil(this._closed$)).subscribe(({\n target\n }) => {\n if (nativeElement === target) {\n if (this.backdrop === 'static') {\n this._bumpBackdrop();\n } else if (this.backdrop === true && !preventClose) {\n this._zone.run(() => this.dismiss(ModalDismissReasons.BACKDROP_CLICK));\n }\n }\n preventClose = false;\n });\n });\n }\n _disableEventHandling() {\n this._closed$.next();\n }\n _setFocus() {\n const {\n nativeElement\n } = this._elRef;\n if (!nativeElement.contains(document.activeElement)) {\n const autoFocusable = nativeElement.querySelector(`[ngbAutofocus]`);\n const firstFocusable = getFocusableBoundaryElements(nativeElement)[0];\n const elementToFocus = autoFocusable || firstFocusable || nativeElement;\n elementToFocus.focus();\n }\n }\n _restoreFocus() {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n let elementToFocus;\n if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n this._zone.runOutsideAngular(() => {\n setTimeout(() => elementToFocus.focus());\n this._elWithFocus = null;\n });\n }\n _bumpBackdrop() {\n if (this.backdrop === 'static') {\n ngbRunTransition(this._zone, this._elRef.nativeElement, ({\n classList\n }) => {\n classList.add('modal-static');\n return () => classList.remove('modal-static');\n }, {\n animation: this.animation,\n runningTransition: 'continue'\n });\n }\n }\n static {\n this.ɵfac = function NgbModalWindow_Factory(t) {\n return new (t || NgbModalWindow)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbModalWindow,\n selectors: [[\"ngb-modal-window\"]],\n viewQuery: function NgbModalWindow_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c7, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._dialogEl = _t.first);\n }\n },\n hostAttrs: [\"role\", \"dialog\", \"tabindex\", \"-1\"],\n hostVars: 7,\n hostBindings: function NgbModalWindow_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-modal\", true)(\"aria-labelledby\", ctx.ariaLabelledBy)(\"aria-describedby\", ctx.ariaDescribedBy);\n i0.ɵɵclassMap(\"modal d-block\" + (ctx.windowClass ? \" \" + ctx.windowClass : \"\"));\n i0.ɵɵclassProp(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n ariaLabelledBy: \"ariaLabelledBy\",\n ariaDescribedBy: \"ariaDescribedBy\",\n backdrop: \"backdrop\",\n centered: \"centered\",\n fullscreen: \"fullscreen\",\n keyboard: \"keyboard\",\n scrollable: \"scrollable\",\n size: \"size\",\n windowClass: \"windowClass\",\n modalDialogClass: \"modalDialogClass\"\n },\n outputs: {\n dismissEvent: \"dismiss\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 4,\n vars: 2,\n consts: [[\"role\", \"document\"], [\"dialog\", \"\"], [1, \"modal-content\"]],\n template: function NgbModalWindow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 0, 1)(2, \"div\", 2);\n i0.ɵɵprojection(3);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵclassMap(\"modal-dialog\" + (ctx.size ? \" modal-\" + ctx.size : \"\") + (ctx.centered ? \" modal-dialog-centered\" : \"\") + ctx.fullscreenClass + (ctx.scrollable ? \" modal-dialog-scrollable\" : \"\") + (ctx.modalDialogClass ? \" \" + ctx.modalDialogClass : \"\"));\n }\n },\n styles: [\"ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}\\n\"],\n encapsulation: 2\n });\n }\n }\n return NgbModalWindow;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbModalStack = /*#__PURE__*/(() => {\n class NgbModalStack {\n constructor() {\n this._applicationRef = inject(ApplicationRef);\n this._injector = inject(Injector);\n this._environmentInjector = inject(EnvironmentInjector);\n this._document = inject(DOCUMENT);\n this._scrollBar = inject(ScrollBar);\n this._activeWindowCmptHasChanged = new Subject();\n this._ariaHiddenValues = new Map();\n this._scrollBarRestoreFn = null;\n this._modalRefs = [];\n this._windowCmpts = [];\n this._activeInstances = new EventEmitter();\n const ngZone = inject(NgZone);\n // Trap focus on active WindowCmpt\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];\n ngbFocusTrap(ngZone, activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);\n this._revertAriaHidden();\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n _restoreScrollBar() {\n const scrollBarRestoreFn = this._scrollBarRestoreFn;\n if (scrollBarRestoreFn) {\n this._scrollBarRestoreFn = null;\n scrollBarRestoreFn();\n }\n }\n _hideScrollBar() {\n if (!this._scrollBarRestoreFn) {\n this._scrollBarRestoreFn = this._scrollBar.hide();\n }\n }\n open(contentInjector, content, options) {\n const containerEl = options.container instanceof HTMLElement ? options.container : isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body;\n if (!containerEl) {\n throw new Error(`The specified modal container \"${options.container || 'body'}\" was not found in the DOM.`);\n }\n this._hideScrollBar();\n const activeModal = new NgbActiveModal();\n contentInjector = options.injector || contentInjector;\n const environmentInjector = contentInjector.get(EnvironmentInjector, null) || this._environmentInjector;\n const contentRef = this._getContentRef(contentInjector, environmentInjector, content, activeModal, options);\n let backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(containerEl) : undefined;\n let windowCmptRef = this._attachWindowComponent(containerEl, contentRef.nodes);\n let ngbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n this._registerModalRef(ngbModalRef);\n this._registerWindowCmpt(windowCmptRef);\n // We have to cleanup DOM after the last modal when BOTH 'hidden' was emitted and 'result' promise was resolved:\n // - with animations OFF, 'hidden' emits synchronously, then 'result' is resolved asynchronously\n // - with animations ON, 'result' is resolved asynchronously, then 'hidden' emits asynchronously\n ngbModalRef.hidden.pipe(take(1)).subscribe(() => Promise.resolve(true).then(() => {\n if (!this._modalRefs.length) {\n this._document.body.classList.remove('modal-open');\n this._restoreScrollBar();\n this._revertAriaHidden();\n }\n }));\n activeModal.close = result => {\n ngbModalRef.close(result);\n };\n activeModal.dismiss = reason => {\n ngbModalRef.dismiss(reason);\n };\n activeModal.update = options => {\n ngbModalRef.update(options);\n };\n ngbModalRef.update(options);\n if (this._modalRefs.length === 1) {\n this._document.body.classList.add('modal-open');\n }\n if (backdropCmptRef && backdropCmptRef.instance) {\n backdropCmptRef.changeDetectorRef.detectChanges();\n }\n windowCmptRef.changeDetectorRef.detectChanges();\n return ngbModalRef;\n }\n get activeInstances() {\n return this._activeInstances;\n }\n dismissAll(reason) {\n this._modalRefs.forEach(ngbModalRef => ngbModalRef.dismiss(reason));\n }\n hasOpenModals() {\n return this._modalRefs.length > 0;\n }\n _attachBackdrop(containerEl) {\n let backdropCmptRef = createComponent(NgbModalBackdrop, {\n environmentInjector: this._applicationRef.injector,\n elementInjector: this._injector\n });\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n _attachWindowComponent(containerEl, projectableNodes) {\n let windowCmptRef = createComponent(NgbModalWindow, {\n environmentInjector: this._applicationRef.injector,\n elementInjector: this._injector,\n projectableNodes\n });\n this._applicationRef.attachView(windowCmptRef.hostView);\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n _getContentRef(contentInjector, environmentInjector, content, activeModal, options) {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n return this._createFromTemplateRef(content, activeModal);\n } else if (isString(content)) {\n return this._createFromString(content);\n } else {\n return this._createFromComponent(contentInjector, environmentInjector, content, activeModal, options);\n }\n }\n _createFromTemplateRef(templateRef, activeModal) {\n const context = {\n $implicit: activeModal,\n close(result) {\n activeModal.close(result);\n },\n dismiss(reason) {\n activeModal.dismiss(reason);\n }\n };\n const viewRef = templateRef.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n _createFromString(content) {\n const component = this._document.createTextNode(`${content}`);\n return new ContentRef([[component]]);\n }\n _createFromComponent(contentInjector, environmentInjector, componentType, context, options) {\n const elementInjector = Injector.create({\n providers: [{\n provide: NgbActiveModal,\n useValue: context\n }],\n parent: contentInjector\n });\n const componentRef = createComponent(componentType, {\n environmentInjector,\n elementInjector\n });\n const componentNativeEl = componentRef.location.nativeElement;\n if (options.scrollable) {\n componentNativeEl.classList.add('component-host-scrollable');\n }\n this._applicationRef.attachView(componentRef.hostView);\n // FIXME: we should here get rid of the component nativeElement\n // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class.\n return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);\n }\n _setAriaHidden(element) {\n const parent = element.parentElement;\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach(sibling => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n this._setAriaHidden(parent);\n }\n }\n _revertAriaHidden() {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenValues.clear();\n }\n _registerModalRef(ngbModalRef) {\n const unregisterModalRef = () => {\n const index = this._modalRefs.indexOf(ngbModalRef);\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n this._activeInstances.emit(this._modalRefs);\n }\n };\n this._modalRefs.push(ngbModalRef);\n this._activeInstances.emit(this._modalRefs);\n ngbModalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n _registerWindowCmpt(ngbWindowCmpt) {\n this._windowCmpts.push(ngbWindowCmpt);\n this._activeWindowCmptHasChanged.next();\n ngbWindowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(ngbWindowCmpt);\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n static {\n this.ɵfac = function NgbModalStack_Factory(t) {\n return new (t || NgbModalStack)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbModalStack,\n factory: NgbModalStack.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbModalStack;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A service for opening modal windows.\n *\n * Creating a modal is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n */\nlet NgbModal = /*#__PURE__*/(() => {\n class NgbModal {\n constructor() {\n this._injector = inject(Injector);\n this._modalStack = inject(NgbModalStack);\n this._config = inject(NgbModalConfig);\n }\n /**\n * Opens a new modal window with the specified content and supplied options.\n *\n * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then\n * use `NgbActiveModal` methods to close / dismiss modals from \"inside\" of your component.\n *\n * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options.\n */\n open(content, options = {}) {\n const combinedOptions = {\n ...this._config,\n animation: this._config.animation,\n ...options\n };\n return this._modalStack.open(this._injector, content, combinedOptions);\n }\n /**\n * Returns an observable that holds the active modal instances.\n */\n get activeInstances() {\n return this._modalStack.activeInstances;\n }\n /**\n * Dismisses all currently displayed modal windows with the supplied reason.\n *\n * @since 3.1.0\n */\n dismissAll(reason) {\n this._modalStack.dismissAll(reason);\n }\n /**\n * Indicates if there are currently any open modal windows in the application.\n *\n * @since 3.3.0\n */\n hasOpenModals() {\n return this._modalStack.hasOpenModals();\n }\n static {\n this.ɵfac = function NgbModal_Factory(t) {\n return new (t || NgbModal)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbModal,\n factory: NgbModal.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbModal;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbModalModule = /*#__PURE__*/(() => {\n class NgbModalModule {\n static {\n this.ɵfac = function NgbModalModule_Factory(t) {\n return new (t || NgbModalModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbModalModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [NgbModal]\n });\n }\n }\n return NgbModalModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbNav`](#/components/nav/api#NgbNav) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the navs used in the application.\n *\n * @since 5.2.0\n */\nlet NgbNavConfig = /*#__PURE__*/(() => {\n class NgbNavConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.destroyOnHide = true;\n this.orientation = 'horizontal';\n this.roles = 'tablist';\n this.keyboard = true;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static {\n this.ɵfac = function NgbNavConfig_Factory(t) {\n return new (t || NgbNavConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbNavConfig,\n factory: NgbNavConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbNavConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst isValidNavId = id => isDefined(id) && id !== '';\nlet navCounter = 0;\n/**\n * This directive must be used to wrap content to be displayed in the nav.\n *\n * @since 5.2.0\n */\nlet NgbNavContent = /*#__PURE__*/(() => {\n class NgbNavContent {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static {\n this.ɵfac = function NgbNavContent_Factory(t) {\n return new (t || NgbNavContent)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavContent,\n selectors: [[\"ng-template\", \"ngbNavContent\", \"\"]],\n standalone: true\n });\n }\n }\n return NgbNavContent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * This directive applies a specific role on a non-container based ngbNavItem.\n *\n * @since 14.1.0\n */\nlet NgbNavItemRole = /*#__PURE__*/(() => {\n class NgbNavItemRole {\n constructor(role) {\n this.role = role;\n this.nav = inject(NgbNav);\n }\n static {\n this.ɵfac = function NgbNavItemRole_Factory(t) {\n return new (t || NgbNavItemRole)(i0.ɵɵinjectAttribute('role'));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavItemRole,\n selectors: [[\"\", \"ngbNavItem\", \"\", 5, \"ng-container\"]],\n hostVars: 1,\n hostBindings: function NgbNavItemRole_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"role\", ctx.role ? ctx.role : ctx.nav.roles ? \"presentation\" : undefined);\n }\n },\n standalone: true\n });\n }\n }\n return NgbNavItemRole;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * The directive used to group nav link and related nav content. As well as set nav identifier and some options.\n *\n * @since 5.2.0\n */\nlet NgbNavItem = /*#__PURE__*/(() => {\n class NgbNavItem {\n constructor() {\n this._nav = inject(NgbNav);\n this._nativeElement = inject(ElementRef).nativeElement;\n /**\n * If `true`, the current nav item is disabled and can't be toggled by user.\n *\n * Nevertheless disabled nav can be selected programmatically via the `.select()` method and the `[activeId]` binding.\n */\n this.disabled = false;\n /**\n * An event emitted when the fade in transition is finished on the related nav content\n *\n * @since 8.0.0\n */\n this.shown = new EventEmitter();\n /**\n * An event emitted when the fade out transition is finished on the related nav content\n *\n * @since 8.0.0\n */\n this.hidden = new EventEmitter();\n }\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.contentTpl = this.contentTpls.first;\n }\n ngOnInit() {\n if (!isDefined(this.domId)) {\n this.domId = `ngb-nav-${navCounter++}`;\n }\n }\n get active() {\n return this._nav.activeId === this.id;\n }\n get id() {\n return isValidNavId(this._id) ? this._id : this.domId;\n }\n get panelDomId() {\n return `${this.domId}-panel`;\n }\n isPanelInDom() {\n return (isDefined(this.destroyOnHide) ? !this.destroyOnHide : !this._nav.destroyOnHide) || this.active;\n }\n /**\n * @internal\n */\n isNgContainer() {\n return this._nativeElement.nodeType === Node.COMMENT_NODE;\n }\n static {\n this.ɵfac = function NgbNavItem_Factory(t) {\n return new (t || NgbNavItem)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavItem,\n selectors: [[\"\", \"ngbNavItem\", \"\"]],\n contentQueries: function NgbNavItem_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbNavContent, 4);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentTpls = _t);\n }\n },\n hostVars: 2,\n hostBindings: function NgbNavItem_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"nav-item\", true);\n }\n },\n inputs: {\n destroyOnHide: \"destroyOnHide\",\n disabled: \"disabled\",\n domId: \"domId\",\n _id: [i0.ɵɵInputFlags.None, \"ngbNavItem\", \"_id\"]\n },\n outputs: {\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbNavItem\"],\n standalone: true\n });\n }\n }\n return NgbNavItem;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A nav directive that helps with implementing tabbed navigation components.\n *\n * @since 5.2.0\n */\nlet NgbNav = /*#__PURE__*/(() => {\n class NgbNav {\n constructor(role) {\n this.role = role;\n this._config = inject(NgbNavConfig);\n this._cd = inject(ChangeDetectorRef);\n this._document = inject(DOCUMENT);\n this._nativeElement = inject(ElementRef).nativeElement;\n this.destroyRef = inject(DestroyRef);\n this._navigatingWithKeyboard = false;\n /**\n * The event emitted after the active nav changes\n * The payload of the event is the newly active nav id\n *\n * If you want to prevent nav change, you should use `(navChange)` event\n */\n this.activeIdChange = new EventEmitter();\n /**\n * If `true`, nav change will be animated.\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * If `true`, non-active nav content will be removed from DOM\n * Otherwise it will just be hidden\n */\n this.destroyOnHide = this._config.destroyOnHide;\n /**\n * The orientation of navs.\n *\n * Using `vertical` will also add the `aria-orientation` attribute\n */\n this.orientation = this._config.orientation;\n /**\n * Role attribute generating strategy:\n * - `false` - no role attributes will be generated\n * - `'tablist'` - 'tablist', 'tab' and 'tabpanel' will be generated (default)\n */\n this.roles = this._config.roles;\n /**\n * Keyboard support for nav focus/selection using arrow keys.\n *\n * * `true` - navs will be focused using keyboard arrow keys\n * * `false` - no keyboard support\n * * `'changeWithArrows'` - nav will be selected using keyboard arrow keys\n *\n * See the [list of available keyboard shortcuts](#/components/nav/overview#keyboard-shortcuts).\n *\n * @since 6.1.0\n */\n this.keyboard = this._config.keyboard;\n /**\n * An event emitted when the fade in transition is finished for one of the items.\n *\n * Payload of the event is the nav id that was just shown.\n *\n * @since 8.0.0\n */\n this.shown = new EventEmitter();\n /**\n * An event emitted when the fade out transition is finished for one of the items.\n *\n * Payload of the event is the nav id that was just hidden.\n *\n * @since 8.0.0\n */\n this.hidden = new EventEmitter();\n this.navItemChange$ = new Subject();\n /**\n * The nav change event emitted right before the nav change happens on user click.\n *\n * This event won't be emitted if nav is changed programmatically via `[activeId]` or `.select()`.\n *\n * See [`NgbNavChangeEvent`](#/components/nav/api#NgbNavChangeEvent) for payload details.\n */\n this.navChange = new EventEmitter();\n }\n click(item) {\n if (!item.disabled) {\n this._updateActiveId(item.id);\n }\n }\n onFocusout({\n relatedTarget\n }) {\n if (!this._nativeElement.contains(relatedTarget)) {\n this._navigatingWithKeyboard = false;\n }\n }\n onKeyDown(event) {\n if (this.roles !== 'tablist' || !this.keyboard) {\n return;\n }\n /* eslint-disable-next-line deprecation/deprecation */\n const key = event.which;\n const enabledLinks = this.links.filter(link => !link.navItem.disabled);\n const {\n length\n } = enabledLinks;\n let position = -1;\n enabledLinks.forEach((link, index) => {\n if (link.nativeElement === this._document.activeElement) {\n position = index;\n }\n });\n if (length) {\n switch (key) {\n case Key.ArrowUp:\n case Key.ArrowLeft:\n position = (position - 1 + length) % length;\n break;\n case Key.ArrowRight:\n case Key.ArrowDown:\n position = (position + 1) % length;\n break;\n case Key.Home:\n position = 0;\n break;\n case Key.End:\n position = length - 1;\n break;\n }\n if (this.keyboard === 'changeWithArrows') {\n this.select(enabledLinks[position].navItem.id);\n }\n enabledLinks[position].nativeElement.focus();\n this._navigatingWithKeyboard = true;\n event.preventDefault();\n }\n }\n /**\n * Selects the nav with the given id and shows its associated pane.\n * Any other nav that was previously selected becomes unselected and its associated pane is hidden.\n */\n select(id) {\n this._updateActiveId(id, false);\n }\n ngAfterContentInit() {\n if (!isDefined(this.activeId)) {\n const nextId = this.items.first ? this.items.first.id : null;\n if (isValidNavId(nextId)) {\n this._updateActiveId(nextId, false);\n this._cd.detectChanges();\n }\n }\n this.items.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this._notifyItemChanged(this.activeId));\n }\n ngOnChanges({\n activeId\n }) {\n if (activeId && !activeId.firstChange) {\n this._notifyItemChanged(activeId.currentValue);\n }\n }\n _updateActiveId(nextId, emitNavChange = true) {\n if (this.activeId !== nextId) {\n let defaultPrevented = false;\n if (emitNavChange) {\n this.navChange.emit({\n activeId: this.activeId,\n nextId,\n preventDefault: () => {\n defaultPrevented = true;\n }\n });\n }\n if (!defaultPrevented) {\n this.activeId = nextId;\n this.activeIdChange.emit(nextId);\n this._notifyItemChanged(nextId);\n }\n }\n }\n _notifyItemChanged(nextItemId) {\n this.navItemChange$.next(this._getItemById(nextItemId));\n }\n _getItemById(itemId) {\n return this.items && this.items.find(item => item.id === itemId) || null;\n }\n static {\n this.ɵfac = function NgbNav_Factory(t) {\n return new (t || NgbNav)(i0.ɵɵinjectAttribute('role'));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNav,\n selectors: [[\"\", \"ngbNav\", \"\"]],\n contentQueries: function NgbNav_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbNavItem, 4);\n i0.ɵɵcontentQuery(dirIndex, NgbNavLinkBase, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.items = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.links = _t);\n }\n },\n hostVars: 6,\n hostBindings: function NgbNav_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown.arrowLeft\", function NgbNav_keydown_arrowLeft_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"keydown.arrowRight\", function NgbNav_keydown_arrowRight_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"keydown.arrowDown\", function NgbNav_keydown_arrowDown_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"keydown.arrowUp\", function NgbNav_keydown_arrowUp_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"keydown.Home\", function NgbNav_keydown_Home_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"keydown.End\", function NgbNav_keydown_End_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n })(\"focusout\", function NgbNav_focusout_HostBindingHandler($event) {\n return ctx.onFocusout($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-orientation\", ctx.orientation === \"vertical\" && ctx.roles === \"tablist\" ? \"vertical\" : undefined)(\"role\", ctx.role ? ctx.role : ctx.roles ? \"tablist\" : undefined);\n i0.ɵɵclassProp(\"nav\", true)(\"flex-column\", ctx.orientation === \"vertical\");\n }\n },\n inputs: {\n activeId: \"activeId\",\n animation: \"animation\",\n destroyOnHide: \"destroyOnHide\",\n orientation: \"orientation\",\n roles: \"roles\",\n keyboard: \"keyboard\"\n },\n outputs: {\n activeIdChange: \"activeIdChange\",\n shown: \"shown\",\n hidden: \"hidden\",\n navChange: \"navChange\"\n },\n exportAs: [\"ngbNav\"],\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return NgbNav;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbNavLinkBase = /*#__PURE__*/(() => {\n class NgbNavLinkBase {\n constructor(role) {\n this.role = role;\n this.navItem = inject(NgbNavItem);\n this.nav = inject(NgbNav);\n this.nativeElement = inject(ElementRef).nativeElement;\n }\n get tabindex() {\n if (this.nav.keyboard === false) {\n return this.navItem.disabled ? -1 : undefined;\n }\n if (this.nav._navigatingWithKeyboard) {\n return -1;\n }\n return this.navItem.disabled || !this.navItem.active ? -1 : undefined;\n }\n static {\n this.ɵfac = function NgbNavLinkBase_Factory(t) {\n return new (t || NgbNavLinkBase)(i0.ɵɵinjectAttribute('role'));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavLinkBase,\n selectors: [[\"\", \"ngbNavLink\", \"\"]],\n hostVars: 14,\n hostBindings: function NgbNavLinkBase_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.navItem.domId);\n i0.ɵɵattribute(\"role\", ctx.role ? ctx.role : ctx.nav.roles ? \"tab\" : undefined)(\"tabindex\", ctx.tabindex)(\"aria-controls\", ctx.navItem.isPanelInDom() ? ctx.navItem.panelDomId : null)(\"aria-selected\", ctx.navItem.active)(\"aria-disabled\", ctx.navItem.disabled);\n i0.ɵɵclassProp(\"nav-link\", true)(\"nav-item\", ctx.navItem.isNgContainer())(\"active\", ctx.navItem.active)(\"disabled\", ctx.navItem.disabled);\n }\n },\n standalone: true\n });\n }\n }\n return NgbNavLinkBase;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to mark the nav link when used on a button element.\n */\nlet NgbNavLinkButton = /*#__PURE__*/(() => {\n class NgbNavLinkButton extends NgbNavLinkBase {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbNavLinkButton_BaseFactory;\n return function NgbNavLinkButton_Factory(t) {\n return (ɵNgbNavLinkButton_BaseFactory || (ɵNgbNavLinkButton_BaseFactory = i0.ɵɵgetInheritedFactory(NgbNavLinkButton)))(t || NgbNavLinkButton);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavLinkButton,\n selectors: [[\"button\", \"ngbNavLink\", \"\"]],\n hostAttrs: [\"type\", \"button\"],\n hostVars: 1,\n hostBindings: function NgbNavLinkButton_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function NgbNavLinkButton_click_HostBindingHandler() {\n return ctx.nav.click(ctx.navItem);\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"disabled\", ctx.navItem.disabled);\n }\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return NgbNavLinkButton;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to mark the nav link when used on a link element.\n *\n * @since 5.2.0\n */\nlet NgbNavLink = /*#__PURE__*/(() => {\n class NgbNavLink extends NgbNavLinkBase {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbNavLink_BaseFactory;\n return function NgbNavLink_Factory(t) {\n return (ɵNgbNavLink_BaseFactory || (ɵNgbNavLink_BaseFactory = i0.ɵɵgetInheritedFactory(NgbNavLink)))(t || NgbNavLink);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavLink,\n selectors: [[\"a\", \"ngbNavLink\", \"\"]],\n hostAttrs: [\"href\", \"\"],\n hostBindings: function NgbNavLink_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function NgbNavLink_click_HostBindingHandler($event) {\n ctx.nav.click(ctx.navItem);\n return $event.preventDefault();\n });\n }\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return NgbNavLink;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst ngbNavFadeOutTransition = ({\n classList\n}) => {\n classList.remove('show');\n return () => classList.remove('active');\n};\nconst ngbNavFadeInTransition = (element, animation) => {\n if (animation) {\n reflow(element);\n }\n element.classList.add('show');\n};\nlet NgbNavPane = /*#__PURE__*/(() => {\n class NgbNavPane {\n constructor() {\n this.nativeElement = inject(ElementRef).nativeElement;\n }\n static {\n this.ɵfac = function NgbNavPane_Factory(t) {\n return new (t || NgbNavPane)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbNavPane,\n selectors: [[\"\", \"ngbNavPane\", \"\"]],\n hostAttrs: [1, \"tab-pane\"],\n hostVars: 5,\n hostBindings: function NgbNavPane_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.item.panelDomId);\n i0.ɵɵattribute(\"role\", ctx.role ? ctx.role : ctx.nav.roles ? \"tabpanel\" : undefined)(\"aria-labelledby\", ctx.item.domId);\n i0.ɵɵclassProp(\"fade\", ctx.nav.animation);\n }\n },\n inputs: {\n item: \"item\",\n nav: \"nav\",\n role: \"role\"\n },\n standalone: true\n });\n }\n }\n return NgbNavPane;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * The outlet where currently active nav content will be displayed.\n *\n * @since 5.2.0\n */\nlet NgbNavOutlet = /*#__PURE__*/(() => {\n class NgbNavOutlet {\n constructor() {\n this._cd = inject(ChangeDetectorRef);\n this._ngZone = inject(NgZone);\n this._activePane = null;\n }\n isPanelTransitioning(item) {\n return this._activePane?.item === item;\n }\n ngAfterViewInit() {\n // initial display\n this._updateActivePane();\n // this will be emitted for all 3 types of nav changes: .select(), [activeId] or (click)\n this.nav.navItemChange$.pipe(takeUntilDestroyed(this.nav.destroyRef), startWith(this._activePane?.item || null), distinctUntilChanged(), skip(1)).subscribe(nextItem => {\n const options = {\n animation: this.nav.animation,\n runningTransition: 'stop'\n };\n // next panel we're switching to will only appear in DOM after the change detection is done\n // and `this._panes` will be updated\n this._cd.detectChanges();\n // fading out\n if (this._activePane) {\n ngbRunTransition(this._ngZone, this._activePane.nativeElement, ngbNavFadeOutTransition, options).subscribe(() => {\n const activeItem = this._activePane?.item;\n this._activePane = this._getPaneForItem(nextItem);\n // mark for check when transition finishes as outlet or parent containers might be OnPush\n // without this the panes that have \"faded out\" will stay in DOM\n this._cd.markForCheck();\n // fading in\n if (this._activePane) {\n // we have to add the '.active' class before running the transition,\n // because it should be in place before `ngbRunTransition` does `reflow()`\n this._activePane.nativeElement.classList.add('active');\n ngbRunTransition(this._ngZone, this._activePane.nativeElement, ngbNavFadeInTransition, options).subscribe(() => {\n if (nextItem) {\n nextItem.shown.emit();\n this.nav.shown.emit(nextItem.id);\n }\n });\n }\n if (activeItem) {\n activeItem.hidden.emit();\n this.nav.hidden.emit(activeItem.id);\n }\n });\n } else {\n this._updateActivePane();\n }\n });\n }\n _updateActivePane() {\n this._activePane = this._getActivePane();\n this._activePane?.nativeElement.classList.add('show');\n this._activePane?.nativeElement.classList.add('active');\n }\n _getPaneForItem(item) {\n return this._panes && this._panes.find(pane => pane.item === item) || null;\n }\n _getActivePane() {\n return this._panes && this._panes.find(pane => pane.item.active) || null;\n }\n static {\n this.ɵfac = function NgbNavOutlet_Factory(t) {\n return new (t || NgbNavOutlet)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbNavOutlet,\n selectors: [[\"\", \"ngbNavOutlet\", \"\"]],\n viewQuery: function NgbNavOutlet_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(NgbNavPane, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._panes = _t);\n }\n },\n hostVars: 2,\n hostBindings: function NgbNavOutlet_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"tab-content\", true);\n }\n },\n inputs: {\n paneRole: \"paneRole\",\n nav: [i0.ɵɵInputFlags.None, \"ngbNavOutlet\", \"nav\"]\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n attrs: _c8,\n decls: 2,\n vars: 0,\n consts: [[\"ngbNavPane\", \"\", 3, \"item\", \"nav\", \"role\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]],\n template: function NgbNavOutlet_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵrepeaterCreate(0, NgbNavOutlet_For_1_Template, 1, 1, null, null, i0.ɵɵrepeaterTrackByIdentity);\n }\n if (rf & 2) {\n i0.ɵɵrepeater(ctx.nav.items);\n }\n },\n dependencies: [NgbNavPane, NgTemplateOutlet],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbNavOutlet;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NGB_NAV_DIRECTIVES = [NgbNavContent, NgbNav, NgbNavItem, NgbNavItemRole, NgbNavLink, NgbNavLinkButton, NgbNavLinkBase, NgbNavOutlet, NgbNavPane];\nlet NgbNavModule = /*#__PURE__*/(() => {\n class NgbNavModule {\n static {\n this.ɵfac = function NgbNavModule_Factory(t) {\n return new (t || NgbNavModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbNavModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbNavModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the paginations used in the application.\n */\nlet NgbPaginationConfig = /*#__PURE__*/(() => {\n class NgbPaginationConfig {\n constructor() {\n this.disabled = false;\n this.boundaryLinks = false;\n this.directionLinks = true;\n this.ellipses = true;\n this.maxSize = 0;\n this.pageSize = 10;\n this.rotate = false;\n }\n static {\n this.ɵfac = function NgbPaginationConfig_Factory(t) {\n return new (t || NgbPaginationConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbPaginationConfig,\n factory: NgbPaginationConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbPaginationConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A directive to match the 'ellipsis' link template\n *\n * @since 4.1.0\n */\nlet NgbPaginationEllipsis = /*#__PURE__*/(() => {\n class NgbPaginationEllipsis {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static {\n this.ɵfac = function NgbPaginationEllipsis_Factory(t) {\n return new (t || NgbPaginationEllipsis)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationEllipsis,\n selectors: [[\"ng-template\", \"ngbPaginationEllipsis\", \"\"]],\n standalone: true\n });\n }\n }\n return NgbPaginationEllipsis;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'first' link template\n *\n * @since 4.1.0\n */\nlet NgbPaginationFirst = /*#__PURE__*/(() => {\n class NgbPaginationFirst {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static {\n this.ɵfac = function NgbPaginationFirst_Factory(t) {\n return new (t || NgbPaginationFirst)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationFirst,\n selectors: [[\"ng-template\", \"ngbPaginationFirst\", \"\"]],\n standalone: true\n });\n }\n }\n return NgbPaginationFirst;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'last' link template\n *\n * @since 4.1.0\n */\nlet NgbPaginationLast = /*#__PURE__*/(() => {\n class NgbPaginationLast {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static {\n this.ɵfac = function NgbPaginationLast_Factory(t) {\n return new (t || NgbPaginationLast)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationLast,\n selectors: [[\"ng-template\", \"ngbPaginationLast\", \"\"]],\n standalone: true\n });\n }\n }\n return NgbPaginationLast;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'next' link template\n *\n * @since 4.1.0\n */\nlet NgbPaginationNext = /*#__PURE__*/(() => {\n class NgbPaginationNext {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static {\n this.ɵfac = function NgbPaginationNext_Factory(t) {\n return new (t || NgbPaginationNext)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationNext,\n selectors: [[\"ng-template\", \"ngbPaginationNext\", \"\"]],\n standalone: true\n });\n }\n }\n return NgbPaginationNext;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the page 'number' link template\n *\n * @since 4.1.0\n */\nlet NgbPaginationNumber = /*#__PURE__*/(() => {\n class NgbPaginationNumber {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static {\n this.ɵfac = function NgbPaginationNumber_Factory(t) {\n return new (t || NgbPaginationNumber)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationNumber,\n selectors: [[\"ng-template\", \"ngbPaginationNumber\", \"\"]],\n standalone: true\n });\n }\n }\n return NgbPaginationNumber;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'previous' link template\n *\n * @since 4.1.0\n */\nlet NgbPaginationPrevious = /*#__PURE__*/(() => {\n class NgbPaginationPrevious {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static {\n this.ɵfac = function NgbPaginationPrevious_Factory(t) {\n return new (t || NgbPaginationPrevious)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationPrevious,\n selectors: [[\"ng-template\", \"ngbPaginationPrevious\", \"\"]],\n standalone: true\n });\n }\n }\n return NgbPaginationPrevious;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to match the 'pages' whole content\n *\n * @since 9.1.0\n */\nlet NgbPaginationPages = /*#__PURE__*/(() => {\n class NgbPaginationPages {\n constructor() {\n this.templateRef = inject(TemplateRef);\n }\n static {\n this.ɵfac = function NgbPaginationPages_Factory(t) {\n return new (t || NgbPaginationPages)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPaginationPages,\n selectors: [[\"ng-template\", \"ngbPaginationPages\", \"\"]],\n standalone: true\n });\n }\n }\n return NgbPaginationPages;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A component that displays page numbers and allows to customize them in several ways.\n */\nlet NgbPagination = /*#__PURE__*/(() => {\n class NgbPagination {\n constructor() {\n this._config = inject(NgbPaginationConfig);\n this.pageCount = 0;\n this.pages = [];\n /**\n * If `true`, pagination links will be disabled.\n */\n this.disabled = this._config.disabled;\n /**\n * If `true`, the \"First\" and \"Last\" page links are shown.\n */\n this.boundaryLinks = this._config.boundaryLinks;\n /**\n * If `true`, the \"Next\" and \"Previous\" page links are shown.\n */\n this.directionLinks = this._config.directionLinks;\n /**\n * If `true`, the ellipsis symbols and first/last page numbers will be shown when `maxSize` > number of pages.\n */\n this.ellipses = this._config.ellipses;\n /**\n * Whether to rotate pages when `maxSize` > number of pages.\n *\n * The current page always stays in the middle if `true`.\n */\n this.rotate = this._config.rotate;\n /**\n * The maximum number of pages to display.\n */\n this.maxSize = this._config.maxSize;\n /**\n * The current page.\n *\n * Page numbers start with `1`.\n */\n this.page = 1;\n /**\n * The number of items per page.\n */\n this.pageSize = this._config.pageSize;\n /**\n * An event fired when the page is changed. Will fire only if collection size is set and all values are valid.\n *\n * Event payload is the number of the newly selected page.\n *\n * Page numbers start with `1`.\n */\n this.pageChange = new EventEmitter(true);\n /**\n * The pagination display size.\n *\n * Bootstrap currently supports small and large sizes.\n *\n * If the passed value is a string (ex. 'custom'), it will just add the `pagination-custom` css class\n */\n this.size = this._config.size;\n }\n hasPrevious() {\n return this.page > 1;\n }\n hasNext() {\n return this.page < this.pageCount;\n }\n nextDisabled() {\n return !this.hasNext() || this.disabled;\n }\n previousDisabled() {\n return !this.hasPrevious() || this.disabled;\n }\n selectPage(pageNumber) {\n this._updatePages(pageNumber);\n }\n ngOnChanges(changes) {\n this._updatePages(this.page);\n }\n isEllipsis(pageNumber) {\n return pageNumber === -1;\n }\n /**\n * Appends ellipses and first/last page number to the displayed pages\n */\n _applyEllipses(start, end) {\n if (this.ellipses) {\n if (start > 0) {\n // The first page will always be included. If the displayed range\n // starts after the third page, then add ellipsis. But if the range\n // starts on the third page, then add the second page instead of\n // an ellipsis, because the ellipsis would only hide a single page.\n if (start > 2) {\n this.pages.unshift(-1);\n } else if (start === 2) {\n this.pages.unshift(2);\n }\n this.pages.unshift(1);\n }\n if (end < this.pageCount) {\n // The last page will always be included. If the displayed range\n // ends before the third-last page, then add ellipsis. But if the range\n // ends on third-last page, then add the second-last page instead of\n // an ellipsis, because the ellipsis would only hide a single page.\n if (end < this.pageCount - 2) {\n this.pages.push(-1);\n } else if (end === this.pageCount - 2) {\n this.pages.push(this.pageCount - 1);\n }\n this.pages.push(this.pageCount);\n }\n }\n }\n /**\n * Rotates page numbers based on maxSize items visible.\n * Currently selected page stays in the middle:\n *\n * Ex. for selected page = 6:\n * [5,*6*,7] for maxSize = 3\n * [4,5,*6*,7] for maxSize = 4\n */\n _applyRotation() {\n let start = 0;\n let end = this.pageCount;\n let leftOffset = Math.floor(this.maxSize / 2);\n let rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset;\n if (this.page <= leftOffset) {\n // very beginning, no rotation -> [0..maxSize]\n end = this.maxSize;\n } else if (this.pageCount - this.page < leftOffset) {\n // very end, no rotation -> [len-maxSize..len]\n start = this.pageCount - this.maxSize;\n } else {\n // rotate\n start = this.page - leftOffset - 1;\n end = this.page + rightOffset;\n }\n return [start, end];\n }\n /**\n * Paginates page numbers based on maxSize items per page.\n */\n _applyPagination() {\n let page = Math.ceil(this.page / this.maxSize) - 1;\n let start = page * this.maxSize;\n let end = start + this.maxSize;\n return [start, end];\n }\n _setPageInRange(newPageNo) {\n const prevPageNo = this.page;\n this.page = getValueInRange(newPageNo, this.pageCount, 1);\n if (this.page !== prevPageNo && isNumber(this.collectionSize)) {\n this.pageChange.emit(this.page);\n }\n }\n _updatePages(newPage) {\n this.pageCount = Math.ceil(this.collectionSize / this.pageSize);\n if (!isNumber(this.pageCount)) {\n this.pageCount = 0;\n }\n // fill-in model needed to render pages\n this.pages.length = 0;\n for (let i = 1; i <= this.pageCount; i++) {\n this.pages.push(i);\n }\n // set page within 1..max range\n this._setPageInRange(newPage);\n // apply maxSize if necessary\n if (this.maxSize > 0 && this.pageCount > this.maxSize) {\n let start = 0;\n let end = this.pageCount;\n // either paginating or rotating page numbers\n if (this.rotate) {\n [start, end] = this._applyRotation();\n } else {\n [start, end] = this._applyPagination();\n }\n this.pages = this.pages.slice(start, end);\n // adding ellipses\n this._applyEllipses(start, end);\n }\n }\n static {\n this.ɵfac = function NgbPagination_Factory(t) {\n return new (t || NgbPagination)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbPagination,\n selectors: [[\"ngb-pagination\"]],\n contentQueries: function NgbPagination_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationEllipsis, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationFirst, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationLast, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationNext, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationNumber, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationPrevious, 5);\n i0.ɵɵcontentQuery(dirIndex, NgbPaginationPages, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplEllipsis = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplFirst = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplLast = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplNext = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplNumber = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplPrevious = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tplPages = _t.first);\n }\n },\n hostAttrs: [\"role\", \"navigation\"],\n inputs: {\n disabled: \"disabled\",\n boundaryLinks: \"boundaryLinks\",\n directionLinks: \"directionLinks\",\n ellipses: \"ellipses\",\n rotate: \"rotate\",\n collectionSize: \"collectionSize\",\n maxSize: \"maxSize\",\n page: \"page\",\n pageSize: \"pageSize\",\n size: \"size\"\n },\n outputs: {\n pageChange: \"pageChange\"\n },\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n decls: 20,\n vars: 12,\n consts: () => {\n let i18n_12;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__3 = goog.getMsg(\"\\xAB\\xAB\");\n i18n_12 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__3;\n } else {\n i18n_12 = $localize`:@@ngb.pagination.first:««`;\n }\n let i18n_13;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__4 = goog.getMsg(\"\\xAB\");\n i18n_13 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__4;\n } else {\n i18n_13 = $localize`:@@ngb.pagination.previous:«`;\n }\n let i18n_14;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__5 = goog.getMsg(\"\\xBB\");\n i18n_14 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__5;\n } else {\n i18n_14 = $localize`:@@ngb.pagination.next:»`;\n }\n let i18n_15;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__6 = goog.getMsg(\"\\xBB\\xBB\");\n i18n_15 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__6;\n } else {\n i18n_15 = $localize`:@@ngb.pagination.last:»»`;\n }\n let i18n_16;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__7 = goog.getMsg(\"First\");\n i18n_16 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__7;\n } else {\n i18n_16 = $localize`:@@ngb.pagination.first-aria:First`;\n }\n let i18n_17;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__8 = goog.getMsg(\"Previous\");\n i18n_17 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__8;\n } else {\n i18n_17 = $localize`:@@ngb.pagination.previous-aria:Previous`;\n }\n let i18n_18;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__9 = goog.getMsg(\"Next\");\n i18n_18 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__9;\n } else {\n i18n_18 = $localize`:@@ngb.pagination.next-aria:Next`;\n }\n let i18n_19;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__10 = goog.getMsg(\"Last\");\n i18n_19 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__10;\n } else {\n i18n_19 = $localize`:@@ngb.pagination.last-aria:Last`;\n }\n return [[\"first\", \"\"], [\"previous\", \"\"], [\"next\", \"\"], [\"last\", \"\"], [\"ellipsis\", \"\"], [\"defaultNumber\", \"\"], [\"defaultPages\", \"\"], [\"class\", \"page-item\", 3, \"disabled\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"aria-hidden\", \"true\"], i18n_12, i18n_13, i18n_14, i18n_15, [1, \"page-item\"], [\"class\", \"page-link\", \"tabindex\", \"-1\", \"aria-disabled\", \"true\"], [\"tabindex\", \"-1\", \"aria-disabled\", \"true\", 1, \"page-link\"], [\"href\", \"\", 1, \"page-link\", 3, \"click\"], [\"class\", \"page-item\", 3, \"active\", \"disabled\"], [\"aria-label\", i18n_16, \"href\", \"\", 1, \"page-link\", 3, \"click\"], [\"aria-label\", i18n_17, \"href\", \"\", 1, \"page-link\", 3, \"click\"], [\"aria-label\", i18n_18, \"href\", \"\", 1, \"page-link\", 3, \"click\"], [\"aria-label\", i18n_19, \"href\", \"\", 1, \"page-link\", 3, \"click\"]];\n },\n template: function NgbPagination_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbPagination_ng_template_0_Template, 2, 0, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor)(2, NgbPagination_ng_template_2_Template, 2, 0, \"ng-template\", null, 1, i0.ɵɵtemplateRefExtractor)(4, NgbPagination_ng_template_4_Template, 2, 0, \"ng-template\", null, 2, i0.ɵɵtemplateRefExtractor)(6, NgbPagination_ng_template_6_Template, 2, 0, \"ng-template\", null, 3, i0.ɵɵtemplateRefExtractor)(8, NgbPagination_ng_template_8_Template, 1, 0, \"ng-template\", null, 4, i0.ɵɵtemplateRefExtractor)(10, NgbPagination_ng_template_10_Template, 1, 1, \"ng-template\", null, 5, i0.ɵɵtemplateRefExtractor)(12, NgbPagination_ng_template_12_Template, 2, 0, \"ng-template\", null, 6, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵelementStart(14, \"ul\");\n i0.ɵɵtemplate(15, NgbPagination_Conditional_15_Template, 3, 9, \"li\", 7)(16, NgbPagination_Conditional_16_Template, 3, 8, \"li\", 7)(17, NgbPagination_ng_template_17_Template, 0, 0, \"ng-template\", 8)(18, NgbPagination_Conditional_18_Template, 3, 9, \"li\", 7)(19, NgbPagination_Conditional_19_Template, 3, 9, \"li\", 7);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const _r13 = i0.ɵɵreference(13);\n i0.ɵɵadvance(14);\n i0.ɵɵclassMap(\"pagination\" + (ctx.size ? \" pagination-\" + ctx.size : \"\"));\n i0.ɵɵadvance();\n i0.ɵɵconditional(15, ctx.boundaryLinks ? 15 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(16, ctx.directionLinks ? 16 : -1);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", (ctx.tplPages == null ? null : ctx.tplPages.templateRef) || _r13)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction3(8, _c13, ctx.page, ctx.pages, ctx.disabled));\n i0.ɵɵadvance();\n i0.ɵɵconditional(18, ctx.directionLinks ? 18 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(19, ctx.boundaryLinks ? 19 : -1);\n }\n },\n dependencies: [NgTemplateOutlet],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbPagination;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NGB_PAGINATION_DIRECTIVES = [NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious, NgbPaginationPages];\nlet NgbPaginationModule = /*#__PURE__*/(() => {\n class NgbPaginationModule {\n static {\n this.ɵfac = function NgbPaginationModule_Factory(t) {\n return new (t || NgbPaginationModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbPaginationModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbPaginationModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst ALIASES = {\n hover: ['mouseenter', 'mouseleave'],\n focus: ['focusin', 'focusout']\n};\nfunction parseTriggers(triggers) {\n const trimmedTriggers = (triggers || '').trim();\n if (trimmedTriggers.length === 0) {\n return [];\n }\n const parsedTriggers = trimmedTriggers.split(/\\s+/).map(trigger => trigger.split(':')).map(triggerPair => ALIASES[triggerPair[0]] || triggerPair);\n const manualTriggers = parsedTriggers.filter(triggerPair => triggerPair.includes('manual'));\n if (manualTriggers.length > 1) {\n throw `Triggers parse error: only one manual trigger is allowed`;\n }\n if (manualTriggers.length === 1 && parsedTriggers.length > 1) {\n throw `Triggers parse error: manual trigger can't be mixed with other triggers`;\n }\n return manualTriggers.length ? [] : parsedTriggers;\n}\nfunction listenToTriggers(element, triggers, isOpenedFn, openFn, closeFn, openDelayMs = 0, closeDelayMs = 0) {\n const parsedTriggers = parseTriggers(triggers);\n if (parsedTriggers.length === 0) {\n return () => {};\n }\n const activeOpenTriggers = new Set();\n const cleanupFns = [];\n let timeout;\n function addEventListener(name, listener) {\n element.addEventListener(name, listener);\n cleanupFns.push(() => element.removeEventListener(name, listener));\n }\n function withDelay(fn, delayMs) {\n clearTimeout(timeout);\n if (delayMs > 0) {\n timeout = setTimeout(fn, delayMs);\n } else {\n fn();\n }\n }\n for (const [openTrigger, closeTrigger] of parsedTriggers) {\n if (!closeTrigger) {\n addEventListener(openTrigger, () => isOpenedFn() ? withDelay(closeFn, closeDelayMs) : withDelay(openFn, openDelayMs));\n } else {\n addEventListener(openTrigger, () => {\n activeOpenTriggers.add(openTrigger);\n withDelay(() => activeOpenTriggers.size > 0 && openFn(), openDelayMs);\n });\n addEventListener(closeTrigger, () => {\n activeOpenTriggers.delete(openTrigger);\n withDelay(() => activeOpenTriggers.size === 0 && closeFn(), closeDelayMs);\n });\n }\n }\n return () => cleanupFns.forEach(cleanupFn => cleanupFn());\n}\n\n/**\n * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the popovers used in the application.\n */\nlet NgbPopoverConfig = /*#__PURE__*/(() => {\n class NgbPopoverConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.autoClose = true;\n this.placement = 'auto';\n this.popperOptions = options => options;\n this.triggers = 'click';\n this.disablePopover = false;\n this.openDelay = 0;\n this.closeDelay = 0;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static {\n this.ɵfac = function NgbPopoverConfig_Factory(t) {\n return new (t || NgbPopoverConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbPopoverConfig,\n factory: NgbPopoverConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbPopoverConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextId$1 = 0;\nlet NgbPopoverWindow = /*#__PURE__*/(() => {\n class NgbPopoverWindow {\n isTitleTemplate() {\n return this.title instanceof TemplateRef;\n }\n static {\n this.ɵfac = function NgbPopoverWindow_Factory(t) {\n return new (t || NgbPopoverWindow)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbPopoverWindow,\n selectors: [[\"ngb-popover-window\"]],\n hostAttrs: [\"role\", \"tooltip\", 2, \"position\", \"absolute\"],\n hostVars: 5,\n hostBindings: function NgbPopoverWindow_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n i0.ɵɵclassMap(\"popover\" + (ctx.popoverClass ? \" \" + ctx.popoverClass : \"\"));\n i0.ɵɵclassProp(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n title: \"title\",\n id: \"id\",\n popoverClass: \"popoverClass\",\n context: \"context\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 4,\n vars: 1,\n consts: [[\"data-popper-arrow\", \"\", 1, \"popover-arrow\"], [\"class\", \"popover-header\"], [1, \"popover-body\"], [1, \"popover-header\"], [\"simpleTitle\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]],\n template: function NgbPopoverWindow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelement(0, \"div\", 0);\n i0.ɵɵtemplate(1, NgbPopoverWindow_Conditional_1_Template, 4, 2, \"h3\", 1);\n i0.ɵɵelementStart(2, \"div\", 2);\n i0.ɵɵprojection(3);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵconditional(1, ctx.title ? 1 : -1);\n }\n },\n dependencies: [NgTemplateOutlet],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbPopoverWindow;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A lightweight and extensible directive for fancy popover creation.\n */\nlet NgbPopover = /*#__PURE__*/(() => {\n class NgbPopover {\n constructor() {\n this._config = inject(NgbPopoverConfig);\n /**\n * If `true`, popover opening and closing will be animated.\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * Indicates whether the popover should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n this.autoClose = this._config.autoClose;\n /**\n * The preferred placement of the popover, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"auto\"`.\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n this.placement = this._config.placement;\n /**\n * Allows to change default Popper options when positioning the popover.\n * Receives current popper options and returns modified ones.\n *\n * @since 13.1.0\n */\n this.popperOptions = this._config.popperOptions;\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/popover/examples#triggers).\n */\n this.triggers = this._config.triggers;\n /**\n * A selector specifying the element the popover should be appended to.\n *\n * Currently only supports `body`.\n */\n this.container = this._config.container;\n /**\n * If `true`, popover is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n this.disablePopover = this._config.disablePopover;\n /**\n * An optional class applied to the popover window element.\n *\n * @since 2.2.0\n */\n this.popoverClass = this._config.popoverClass;\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n this.openDelay = this._config.openDelay;\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n this.closeDelay = this._config.closeDelay;\n /**\n * An event emitted when the popover opening animation has finished. Contains no payload.\n */\n this.shown = new EventEmitter();\n /**\n * An event emitted when the popover closing animation has finished. Contains no payload.\n *\n * At this point popover is not in the DOM anymore.\n */\n this.hidden = new EventEmitter();\n this._nativeElement = inject(ElementRef).nativeElement;\n this._ngZone = inject(NgZone);\n this._document = inject(DOCUMENT);\n this._changeDetector = inject(ChangeDetectorRef);\n this._ngbPopoverWindowId = `ngb-popover-${nextId$1++}`;\n this._popupService = new PopupService(NgbPopoverWindow);\n this._windowRef = null;\n this._positioning = ngbPositioning();\n }\n /**\n * Opens the popover.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the popover template when it is created.\n */\n open(context) {\n if (!this._windowRef && !this._isDisabled()) {\n // this type assertion is safe because otherwise _isDisabled would return true\n const {\n windowRef,\n transition$\n } = this._popupService.open(this.ngbPopover, context ?? this.popoverContext, this.animation);\n this._windowRef = windowRef;\n this._windowRef.setInput('animation', this.animation);\n this._windowRef.setInput('title', this.popoverTitle);\n this._windowRef.setInput('context', context ?? this.popoverContext);\n this._windowRef.setInput('popoverClass', this.popoverClass);\n this._windowRef.setInput('id', this._ngbPopoverWindowId);\n this._getPositionTargetElement().setAttribute('aria-describedby', this._ngbPopoverWindowId);\n if (this.container === 'body') {\n this._document.body.appendChild(this._windowRef.location.nativeElement);\n }\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening popover from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n // We need to mark for check, because popover won't work inside the OnPush component.\n // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the popover from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n // Setting up popper and scheduling updates when zone is stable\n this._ngZone.runOutsideAngular(() => {\n this._positioning.createPopper({\n hostElement: this._getPositionTargetElement(),\n targetElement: this._windowRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n baseClass: 'bs-popover',\n updatePopperOptions: options => this.popperOptions(addPopperOffset([0, 8])(options))\n });\n Promise.resolve().then(() => {\n // This update is required for correct arrow placement\n this._positioning.update();\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n });\n });\n ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden, [this._windowRef.location.nativeElement]);\n transition$.subscribe(() => this.shown.emit());\n }\n }\n /**\n * Closes the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n close(animation = this.animation) {\n if (this._windowRef) {\n this._getPositionTargetElement().removeAttribute('aria-describedby');\n this._popupService.close(animation).subscribe(() => {\n this._windowRef = null;\n this._positioning.destroy();\n this._zoneSubscription?.unsubscribe();\n this.hidden.emit();\n this._changeDetector.markForCheck();\n });\n }\n }\n /**\n * Toggles the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n toggle() {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen() {\n return this._windowRef != null;\n }\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(this._nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n ngOnChanges({\n ngbPopover,\n popoverTitle,\n disablePopover,\n popoverClass\n }) {\n if (popoverClass && this.isOpen()) {\n this._windowRef.setInput('popoverClass', popoverClass.currentValue);\n }\n // close popover if title and content become empty, or disablePopover set to true\n if ((ngbPopover || popoverTitle || disablePopover) && this._isDisabled()) {\n this.close();\n }\n }\n ngOnDestroy() {\n this.close(false);\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n this._unregisterListenersFn?.();\n }\n _isDisabled() {\n return this.disablePopover ? true : !this.ngbPopover && !this.popoverTitle;\n }\n _getPositionTargetElement() {\n return (isString(this.positionTarget) ? this._document.querySelector(this.positionTarget) : this.positionTarget) || this._nativeElement;\n }\n static {\n this.ɵfac = function NgbPopover_Factory(t) {\n return new (t || NgbPopover)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbPopover,\n selectors: [[\"\", \"ngbPopover\", \"\"]],\n inputs: {\n animation: \"animation\",\n autoClose: \"autoClose\",\n ngbPopover: \"ngbPopover\",\n popoverTitle: \"popoverTitle\",\n placement: \"placement\",\n popperOptions: \"popperOptions\",\n triggers: \"triggers\",\n positionTarget: \"positionTarget\",\n container: \"container\",\n disablePopover: \"disablePopover\",\n popoverClass: \"popoverClass\",\n popoverContext: \"popoverContext\",\n openDelay: \"openDelay\",\n closeDelay: \"closeDelay\"\n },\n outputs: {\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbPopover\"],\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return NgbPopover;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbPopoverModule = /*#__PURE__*/(() => {\n class NgbPopoverModule {\n static {\n this.ɵfac = function NgbPopoverModule_Factory(t) {\n return new (t || NgbPopoverModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbPopoverModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbPopoverModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the progress bars used in the application.\n */\nlet NgbProgressbarConfig = /*#__PURE__*/(() => {\n class NgbProgressbarConfig {\n constructor() {\n this.max = 100;\n this.animated = false;\n this.ariaLabel = 'progress bar';\n this.striped = false;\n this.showValue = false;\n }\n static {\n this.ɵfac = function NgbProgressbarConfig_Factory(t) {\n return new (t || NgbProgressbarConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbProgressbarConfig,\n factory: NgbProgressbarConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbProgressbarConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A directive that provides feedback on the progress of a workflow or an action.\n */\nlet NgbProgressbar = /*#__PURE__*/(() => {\n class NgbProgressbar {\n /**\n * The maximal value to be displayed in the progress bar.\n *\n * Should be a positive number. Will default to 100 otherwise.\n */\n set max(max) {\n this._max = !isNumber(max) || max <= 0 ? 100 : max;\n }\n get max() {\n return this._max;\n }\n constructor() {\n this._config = inject(NgbProgressbarConfig);\n this.stacked = inject(NgbProgressbarStacked, {\n optional: true\n });\n /**\n * If `true`, the stripes on the progress bar are animated.\n *\n * Takes effect only for browsers supporting CSS3 animations, and if `striped` is `true`.\n */\n this.animated = this._config.animated;\n /**\n * The accessible progress bar name.\n *\n * @since 13.1.0\n */\n this.ariaLabel = this._config.ariaLabel;\n /**\n * If `true`, the progress bars will be displayed as striped.\n */\n this.striped = this._config.striped;\n /**\n * If `true`, the current percentage will be shown in the `xx%` format.\n */\n this.showValue = this._config.showValue;\n /**\n * Optional text variant type of the progress bar.\n *\n * Supports types based on Bootstrap background color variants, like:\n * `\"success\"`, `\"info\"`, `\"warning\"`, `\"danger\"`, `\"primary\"`, `\"secondary\"`, `\"dark\"` and so on.\n *\n * @since 5.2.0\n */\n this.textType = this._config.textType;\n /**\n * The type of the progress bar.\n *\n * Supports types based on Bootstrap background color variants, like:\n * `\"success\"`, `\"info\"`, `\"warning\"`, `\"danger\"`, `\"primary\"`, `\"secondary\"`, `\"dark\"` and so on.\n */\n this.type = this._config.type;\n /**\n * The current value for the progress bar.\n *\n * Should be in the `[0, max]` range.\n */\n this.value = 0;\n /**\n * The height of the progress bar.\n *\n * Accepts any valid CSS height values, ex. `\"2rem\"`\n */\n this.height = this._config.height;\n this.max = this._config.max;\n }\n getValue() {\n return getValueInRange(this.value, this.max);\n }\n getPercentValue() {\n return 100 * this.getValue() / this.max;\n }\n static {\n this.ɵfac = function NgbProgressbar_Factory(t) {\n return new (t || NgbProgressbar)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbProgressbar,\n selectors: [[\"ngb-progressbar\"]],\n hostAttrs: [\"role\", \"progressbar\", \"aria-valuemin\", \"0\", 1, \"progress\"],\n hostVars: 7,\n hostBindings: function NgbProgressbar_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-valuenow\", ctx.getValue())(\"aria-valuemax\", ctx.max)(\"aria-label\", ctx.ariaLabel);\n i0.ɵɵstyleProp(\"width\", ctx.stacked ? ctx.getPercentValue() : null, \"%\")(\"height\", ctx.height);\n }\n },\n inputs: {\n max: \"max\",\n animated: \"animated\",\n ariaLabel: \"ariaLabel\",\n striped: \"striped\",\n showValue: \"showValue\",\n textType: \"textType\",\n type: \"type\",\n value: \"value\",\n height: \"height\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 3,\n vars: 11,\n consts: () => {\n let i18n_20;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__11 = goog.getMsg(\"{$interpolation}\", {\n \"interpolation\": \"\\uFFFD0\\uFFFD\"\n }, {\n original_code: {\n \"interpolation\": \"{{ getValue() / max | percent }}\"\n }\n });\n i18n_20 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__11;\n } else {\n i18n_20 = $localize`:@@ngb.progressbar.value:${\"\\uFFFD0\\uFFFD\"}:INTERPOLATION:`;\n }\n return [i18n_20];\n },\n template: function NgbProgressbar_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\");\n i0.ɵɵtemplate(1, NgbProgressbar_Conditional_1_Template, 3, 3, \"span\");\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵclassMapInterpolate2(\"progress-bar\", ctx.type ? ctx.textType ? \" bg-\" + ctx.type : \" text-bg-\" + ctx.type : \"\", \"\", ctx.textType ? \" text-\" + ctx.textType : \"\", \"\");\n i0.ɵɵstyleProp(\"width\", !ctx.stacked ? ctx.getPercentValue() : null, \"%\");\n i0.ɵɵclassProp(\"progress-bar-animated\", ctx.animated)(\"progress-bar-striped\", ctx.striped);\n i0.ɵɵadvance();\n i0.ɵɵconditional(1, ctx.showValue ? 1 : -1);\n }\n },\n dependencies: [PercentPipe],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbProgressbar;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive that allow to stack progress bars.\n *\n * @since 16.0.0\n */\nlet NgbProgressbarStacked = /*#__PURE__*/(() => {\n class NgbProgressbarStacked {\n static {\n this.ɵfac = function NgbProgressbarStacked_Factory(t) {\n return new (t || NgbProgressbarStacked)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbProgressbarStacked,\n selectors: [[\"ngb-progressbar-stacked\"]],\n hostAttrs: [1, \"progress-stacked\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function NgbProgressbarStacked_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbProgressbarStacked;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbProgressbarModule = /*#__PURE__*/(() => {\n class NgbProgressbarModule {\n static {\n this.ɵfac = function NgbProgressbarModule_Factory(t) {\n return new (t || NgbProgressbarModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbProgressbarModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbProgressbarModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the ratings used in the application.\n */\nlet NgbRatingConfig = /*#__PURE__*/(() => {\n class NgbRatingConfig {\n constructor() {\n this.max = 10;\n this.readonly = false;\n this.resettable = false;\n this.tabindex = 0;\n }\n static {\n this.ɵfac = function NgbRatingConfig_Factory(t) {\n return new (t || NgbRatingConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbRatingConfig,\n factory: NgbRatingConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbRatingConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A directive that helps visualising and interacting with a star rating bar.\n */\nlet NgbRating = /*#__PURE__*/(() => {\n class NgbRating {\n constructor() {\n this.contexts = [];\n this._config = inject(NgbRatingConfig);\n this._changeDetectorRef = inject(ChangeDetectorRef);\n /**\n * If `true`, the rating can't be changed or focused.\n */\n this.disabled = false;\n /**\n * The maximal rating that can be given.\n */\n this.max = this._config.max;\n /**\n * If `true`, the rating can't be changed.\n */\n this.readonly = this._config.readonly;\n /**\n * If `true`, the rating can be reset to `0` by mouse clicking currently set rating.\n */\n this.resettable = this._config.resettable;\n /**\n * Allows setting a custom rating tabindex.\n * If the component is disabled, `tabindex` will still be set to `-1`.\n *\n * @since 13.1.0\n */\n this.tabindex = this._config.tabindex;\n /**\n * An event emitted when the user is hovering over a given rating.\n *\n * Event payload equals to the rating being hovered over.\n */\n this.hover = new EventEmitter();\n /**\n * An event emitted when the user stops hovering over a given rating.\n *\n * Event payload equals to the rating of the last item being hovered over.\n */\n this.leave = new EventEmitter();\n /**\n * An event emitted when the rating is changed.\n *\n * Event payload equals to the newly selected rating.\n */\n this.rateChange = new EventEmitter(true);\n this.onChange = _ => {};\n this.onTouched = () => {};\n }\n /**\n * Allows to provide a function to set a custom aria-valuetext\n *\n * @since 14.1.0\n */\n ariaValueText(current, max) {\n return `${current} out of ${max}`;\n }\n isInteractive() {\n return !this.readonly && !this.disabled;\n }\n enter(value) {\n if (this.isInteractive()) {\n this._updateState(value);\n }\n this.hover.emit(value);\n }\n handleBlur() {\n this.onTouched();\n }\n handleClick(value) {\n if (this.isInteractive()) {\n this.update(this.resettable && this.rate === value ? 0 : value);\n }\n }\n handleKeyDown(event) {\n /* eslint-disable-next-line deprecation/deprecation */\n switch (event.which) {\n case Key.ArrowDown:\n case Key.ArrowLeft:\n this.update(this.rate - 1);\n break;\n case Key.ArrowUp:\n case Key.ArrowRight:\n this.update(this.rate + 1);\n break;\n case Key.Home:\n this.update(0);\n break;\n case Key.End:\n this.update(this.max);\n break;\n default:\n return;\n }\n // note 'return' in default case\n event.preventDefault();\n }\n ngOnChanges(changes) {\n if (changes['rate']) {\n this.update(this.rate);\n }\n if (changes['max']) {\n this._updateMax();\n }\n }\n ngOnInit() {\n this._setupContexts();\n this._updateState(this.rate);\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n reset() {\n this.leave.emit(this.nextRate);\n this._updateState(this.rate);\n }\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n update(value, internalChange = true) {\n const newRate = getValueInRange(value, this.max, 0);\n if (this.isInteractive() && this.rate !== newRate) {\n this.rate = newRate;\n this.rateChange.emit(this.rate);\n }\n if (internalChange) {\n this.onChange(this.rate);\n this.onTouched();\n }\n this._updateState(this.rate);\n }\n writeValue(value) {\n this.update(value, false);\n this._changeDetectorRef.markForCheck();\n }\n _updateState(nextValue) {\n this.nextRate = nextValue;\n this.contexts.forEach((context, index) => context.fill = Math.round(getValueInRange(nextValue - index, 1, 0) * 100));\n }\n _updateMax() {\n if (this.max > 0) {\n this._setupContexts();\n this.update(this.rate);\n }\n }\n _setupContexts() {\n this.contexts = Array.from({\n length: this.max\n }, (v, k) => ({\n fill: 0,\n index: k\n }));\n }\n static {\n this.ɵfac = function NgbRating_Factory(t) {\n return new (t || NgbRating)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbRating,\n selectors: [[\"ngb-rating\"]],\n contentQueries: function NgbRating_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.starTemplateFromContent = _t.first);\n }\n },\n hostAttrs: [\"role\", \"slider\", \"aria-valuemin\", \"0\", 1, \"d-inline-flex\"],\n hostVars: 6,\n hostBindings: function NgbRating_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"blur\", function NgbRating_blur_HostBindingHandler() {\n return ctx.handleBlur();\n })(\"keydown\", function NgbRating_keydown_HostBindingHandler($event) {\n return ctx.handleKeyDown($event);\n })(\"mouseleave\", function NgbRating_mouseleave_HostBindingHandler() {\n return ctx.reset();\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"tabindex\", ctx.disabled ? -1 : ctx.tabindex);\n i0.ɵɵattribute(\"aria-valuemax\", ctx.max)(\"aria-valuenow\", ctx.nextRate)(\"aria-valuetext\", ctx.ariaValueText(ctx.nextRate, ctx.max))(\"aria-readonly\", ctx.readonly && !ctx.disabled ? true : null)(\"aria-disabled\", ctx.disabled ? true : null);\n }\n },\n inputs: {\n disabled: \"disabled\",\n max: \"max\",\n rate: \"rate\",\n readonly: \"readonly\",\n resettable: \"resettable\",\n starTemplate: \"starTemplate\",\n tabindex: \"tabindex\",\n ariaValueText: \"ariaValueText\"\n },\n outputs: {\n hover: \"hover\",\n leave: \"leave\",\n rateChange: \"rateChange\"\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRating),\n multi: true\n }]), i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n decls: 4,\n vars: 0,\n consts: [[\"t\", \"\"], [1, \"visually-hidden\"], [3, \"mouseenter\", \"click\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]],\n template: function NgbRating_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbRating_ng_template_0_Template, 1, 1, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵrepeaterCreate(2, NgbRating_For_3_Template, 4, 5, null, null, i0.ɵɵrepeaterTrackByIdentity);\n }\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵrepeater(ctx.contexts);\n }\n },\n dependencies: [NgTemplateOutlet],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbRating;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbRatingModule = /*#__PURE__*/(() => {\n class NgbRatingModule {\n static {\n this.ɵfac = function NgbRatingModule_Factory(t) {\n return new (t || NgbRatingModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbRatingModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbRatingModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction toFragmentElement(container, id) {\n if (!container || id == null) {\n return null;\n }\n return isString(id) ? container.querySelector(`#${CSS.escape(id)}`) : id;\n}\nfunction getOrderedFragments(container, fragments) {\n const selector = [...fragments].map(({\n id\n }) => `#${CSS.escape(id)}`).join(',');\n return Array.from(container.querySelectorAll(selector));\n}\nconst defaultProcessChanges = (state, changeActive, ctx) => {\n const {\n rootElement,\n fragments,\n scrollSpy,\n options,\n entries\n } = state;\n const orderedFragments = getOrderedFragments(rootElement, fragments);\n if (!ctx.initialized) {\n ctx.initialized = true;\n ctx.gapFragment = null;\n ctx.visibleFragments = new Set();\n // special case when one of the fragments was pre-selected\n const preSelectedFragment = toFragmentElement(rootElement, options?.initialFragment);\n if (preSelectedFragment) {\n scrollSpy.scrollTo(preSelectedFragment);\n return;\n }\n }\n for (const entry of entries) {\n const {\n isIntersecting,\n target: fragment\n } = entry;\n // 1. an entry became visible\n if (isIntersecting) {\n // if we were in-between two elements, we have to clear it up\n if (ctx.gapFragment) {\n ctx.visibleFragments.delete(ctx.gapFragment);\n ctx.gapFragment = null;\n }\n ctx.visibleFragments.add(fragment);\n }\n // 2. an entry became invisible\n else {\n ctx.visibleFragments.delete(fragment);\n // nothing is visible anymore, but something just was actually\n if (ctx.visibleFragments.size === 0 && scrollSpy.active !== '') {\n // 2.1 scrolling down - keeping the same element\n if (entry.boundingClientRect.top < entry.rootBounds.top) {\n ctx.gapFragment = fragment;\n ctx.visibleFragments.add(ctx.gapFragment);\n }\n // 2.2 scrolling up - getting the previous element\n else {\n // scrolling up and no more fragments above\n if (fragment === orderedFragments[0]) {\n ctx.gapFragment = null;\n ctx.visibleFragments.clear();\n changeActive('');\n return;\n }\n // getting previous fragment\n else {\n const fragmentIndex = orderedFragments.indexOf(fragment);\n ctx.gapFragment = orderedFragments[fragmentIndex - 1] || null;\n if (ctx.gapFragment) {\n ctx.visibleFragments.add(ctx.gapFragment);\n }\n }\n }\n }\n }\n }\n // getting the first visible element in the DOM order of the fragments\n for (const fragment of orderedFragments) {\n if (ctx.visibleFragments.has(fragment)) {\n changeActive(fragment.id);\n break;\n }\n }\n};\n\n/**\n * A configuration service for the [`NgbScrollSpyService`](#/components/scrollspy/api#NgbScrollSpyService).\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all scrollspies used in the application.\n *\n * @since 15.1.0\n */\nlet NgbScrollSpyConfig = /*#__PURE__*/(() => {\n class NgbScrollSpyConfig {\n constructor() {\n this.scrollBehavior = 'smooth';\n this.processChanges = defaultProcessChanges;\n }\n static {\n this.ɵfac = function NgbScrollSpyConfig_Factory(t) {\n return new (t || NgbScrollSpyConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbScrollSpyConfig,\n factory: NgbScrollSpyConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbScrollSpyConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MATCH_THRESHOLD = 3;\n/**\n * A scrollspy service that allows tracking of elements scrolling in and out of view.\n *\n * It can be instantiated manually, or automatically by the `ngbScrollSpy` directive.\n *\n * @since 15.1.0\n */\nlet NgbScrollSpyService = /*#__PURE__*/(() => {\n class NgbScrollSpyService {\n constructor() {\n this._observer = null;\n this._containerElement = null;\n this._fragments = new Set();\n this._preRegisteredFragments = new Set();\n this._active$ = new Subject();\n this._distinctActive$ = this._active$.pipe(distinctUntilChanged());\n this._active = '';\n this._config = inject(NgbScrollSpyConfig);\n this._document = inject(DOCUMENT);\n this._platformId = inject(PLATFORM_ID);\n this._scrollBehavior = this._config.scrollBehavior;\n this._diChangeDetectorRef = inject(ChangeDetectorRef, {\n optional: true\n });\n this._changeDetectorRef = this._diChangeDetectorRef;\n this._zone = inject(NgZone);\n this._distinctActive$.pipe(takeUntilDestroyed()).subscribe(active => {\n this._active = active;\n this._changeDetectorRef?.markForCheck();\n });\n }\n /**\n * Getter for the currently active fragment id. Returns empty string if none.\n */\n get active() {\n return this._active;\n }\n /**\n * An observable emitting the currently active fragment. Emits empty string if none.\n */\n get active$() {\n return this._distinctActive$;\n }\n /**\n * Starts the scrollspy service and observes specified fragments.\n *\n * You can specify a list of options to pass, like the root element, initial fragment, scroll behavior, etc.\n * See the [`NgbScrollSpyOptions`](#/components/scrollspy/api#NgbScrollSpyOptions) interface for more details.\n */\n start(options) {\n if (isPlatformBrowser(this._platformId)) {\n this._cleanup();\n const {\n root,\n rootMargin,\n scrollBehavior,\n threshold,\n fragments,\n changeDetectorRef,\n processChanges\n } = {\n ...options\n };\n this._containerElement = root ?? this._document.documentElement;\n this._changeDetectorRef = changeDetectorRef ?? this._diChangeDetectorRef;\n this._scrollBehavior = scrollBehavior ?? this._config.scrollBehavior;\n const processChangesFn = processChanges ?? this._config.processChanges;\n const context = {};\n this._observer = new IntersectionObserver(entries => processChangesFn({\n entries,\n rootElement: this._containerElement,\n fragments: this._fragments,\n scrollSpy: this,\n options: {\n ...options\n }\n }, active => this._active$.next(active), context), {\n root: root ?? this._document,\n ...(rootMargin && {\n rootMargin\n }),\n ...(threshold && {\n threshold\n })\n });\n // merging fragments added before starting and the ones passed as options\n for (const element of [...this._preRegisteredFragments, ...(fragments ?? [])]) {\n this.observe(element);\n }\n this._preRegisteredFragments.clear();\n }\n }\n /**\n * Stops the service and unobserves all fragments.\n */\n stop() {\n this._cleanup();\n this._active$.next('');\n }\n /**\n * Scrolls to a fragment, it must be known to the service and contained in the root element.\n * An id or an element reference can be passed.\n *\n * [`NgbScrollToOptions`](#/components/scrollspy/api#NgbScrollToOptions) can be passed.\n */\n scrollTo(fragment, options) {\n const {\n behavior\n } = {\n behavior: this._scrollBehavior,\n ...options\n };\n if (this._containerElement) {\n const fragmentElement = toFragmentElement(this._containerElement, fragment);\n if (fragmentElement) {\n const heightPx = fragmentElement.offsetTop - this._containerElement.offsetTop;\n this._containerElement.scrollTo({\n top: heightPx,\n behavior\n });\n let lastOffset = this._containerElement.scrollTop;\n let matchCounter = 0;\n // we should update the active section only after scrolling is finished\n // and there is no clean way to do it at the moment\n const containerElement = this._containerElement;\n this._zone.runOutsideAngular(() => {\n const updateActiveWhenScrollingIsFinished = () => {\n const sameOffsetAsLastTime = lastOffset === containerElement.scrollTop;\n if (sameOffsetAsLastTime) {\n matchCounter++;\n } else {\n matchCounter = 0;\n }\n if (!sameOffsetAsLastTime || sameOffsetAsLastTime && matchCounter < MATCH_THRESHOLD) {\n lastOffset = containerElement.scrollTop;\n requestAnimationFrame(updateActiveWhenScrollingIsFinished);\n } else {\n this._zone.run(() => this._active$.next(fragmentElement.id));\n }\n };\n requestAnimationFrame(updateActiveWhenScrollingIsFinished);\n });\n }\n }\n }\n /**\n * Adds a fragment to observe. It must be contained in the root element.\n * An id or an element reference can be passed.\n */\n observe(fragment) {\n if (!this._observer) {\n this._preRegisteredFragments.add(fragment);\n return;\n }\n const fragmentElement = toFragmentElement(this._containerElement, fragment);\n if (fragmentElement && !this._fragments.has(fragmentElement)) {\n this._fragments.add(fragmentElement);\n this._observer.observe(fragmentElement);\n }\n }\n /**\n * Unobserves a fragment.\n * An id or an element reference can be passed.\n */\n unobserve(fragment) {\n if (!this._observer) {\n this._preRegisteredFragments.delete(fragment);\n return;\n }\n const fragmentElement = toFragmentElement(this._containerElement, fragment);\n if (fragmentElement) {\n this._fragments.delete(fragmentElement);\n // we're removing and re-adding all current fragments to recompute active one\n this._observer.disconnect();\n for (const fragment of this._fragments) {\n this._observer.observe(fragment);\n }\n }\n }\n ngOnDestroy() {\n this._cleanup();\n }\n _cleanup() {\n this._fragments.clear();\n this._observer?.disconnect();\n this._changeDetectorRef = this._diChangeDetectorRef;\n this._scrollBehavior = this._config.scrollBehavior;\n this._observer = null;\n this._containerElement = null;\n }\n static {\n this.ɵfac = function NgbScrollSpyService_Factory(t) {\n return new (t || NgbScrollSpyService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbScrollSpyService,\n factory: NgbScrollSpyService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbScrollSpyService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A helper directive to that links menu items and fragments together.\n *\n * It will automatically add the `.active` class to the menu item when the associated fragment becomes active.\n *\n * @since 15.1.0\n */\nlet NgbScrollSpyItem = /*#__PURE__*/(() => {\n class NgbScrollSpyItem {\n constructor() {\n this._changeDetector = inject(ChangeDetectorRef);\n this._scrollSpyMenu = inject(NgbScrollSpyMenu, {\n optional: true\n });\n this._scrollSpyAPI = this._scrollSpyMenu ?? inject(NgbScrollSpyService);\n this._destroyRef = inject(DestroyRef);\n this._isActive = false;\n }\n /**\n * References the scroll spy directive, the id of the associated fragment and the parent menu item.\n *\n * Can be used like:\n * - `ngbScrollSpyItem=\"fragmentId\"`\n * - `[ngbScrollSpyItem]=\"scrollSpy\" fragment=\"fragmentId\"\n * - `[ngbScrollSpyItem]=\"[scrollSpy, 'fragmentId']\"` parent=\"parentId\"`\n * - `[ngbScrollSpyItem]=\"[scrollSpy, 'fragmentId', 'parentId']\"`\n *\n * As well as together with `[fragment]` and `[parent]` inputs.\n */\n set data(data) {\n if (Array.isArray(data)) {\n this._scrollSpyAPI = data[0];\n this.fragment = data[1];\n this.parent ??= data[2];\n } else if (data instanceof NgbScrollSpy) {\n this._scrollSpyAPI = data;\n } else if (isString(data)) {\n this.fragment = data;\n }\n }\n ngOnInit() {\n // if it is not a part of a bigger menu, it should handle activation itself\n if (!this._scrollSpyMenu) {\n this._scrollSpyAPI.active$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(active => {\n if (active === this.fragment) {\n this._activate();\n } else {\n this._deactivate();\n }\n this._changeDetector.markForCheck();\n });\n }\n }\n /**\n * @internal\n */\n _activate() {\n this._isActive = true;\n if (this._scrollSpyMenu) {\n this._scrollSpyMenu.getItem(this.parent ?? '')?._activate();\n }\n }\n /**\n * @internal\n */\n _deactivate() {\n this._isActive = false;\n if (this._scrollSpyMenu) {\n this._scrollSpyMenu.getItem(this.parent ?? '')?._deactivate();\n }\n }\n /**\n * Returns `true`, if the associated fragment is active.\n */\n isActive() {\n return this._isActive;\n }\n /**\n * Scrolls to the associated fragment.\n */\n scrollTo(options) {\n this._scrollSpyAPI.scrollTo(this.fragment, options);\n }\n static {\n this.ɵfac = function NgbScrollSpyItem_Factory(t) {\n return new (t || NgbScrollSpyItem)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbScrollSpyItem,\n selectors: [[\"\", \"ngbScrollSpyItem\", \"\"]],\n hostVars: 2,\n hostBindings: function NgbScrollSpyItem_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function NgbScrollSpyItem_click_HostBindingHandler() {\n return ctx.scrollTo();\n });\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"active\", ctx.isActive());\n }\n },\n inputs: {\n data: [i0.ɵɵInputFlags.None, \"ngbScrollSpyItem\", \"data\"],\n fragment: \"fragment\",\n parent: \"parent\"\n },\n exportAs: [\"ngbScrollSpyItem\"],\n standalone: true\n });\n }\n }\n return NgbScrollSpyItem;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * An optional scroll spy menu directive to build hierarchical menus\n * and simplify the [`NgbScrollSpyItem`](#/components/scrollspy/api#NgbScrollSpyItem) configuration.\n *\n * @since 15.1.0\n */\nlet NgbScrollSpyMenu = /*#__PURE__*/(() => {\n class NgbScrollSpyMenu {\n constructor() {\n this._scrollSpyRef = inject(NgbScrollSpyService);\n this._destroyRef = inject(DestroyRef);\n this._map = new Map();\n this._lastActiveItem = null;\n }\n set scrollSpy(scrollSpy) {\n this._scrollSpyRef = scrollSpy;\n }\n get active() {\n return this._scrollSpyRef.active;\n }\n get active$() {\n return this._scrollSpyRef.active$;\n }\n scrollTo(fragment, options) {\n this._scrollSpyRef.scrollTo(fragment, options);\n }\n getItem(id) {\n return this._map.get(id);\n }\n ngAfterViewInit() {\n this._items.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => this._rebuildMap());\n this._rebuildMap();\n this._scrollSpyRef.active$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(activeId => {\n this._lastActiveItem?._deactivate();\n const item = this._map.get(activeId);\n if (item) {\n item._activate();\n this._lastActiveItem = item;\n }\n });\n }\n _rebuildMap() {\n this._map.clear();\n for (let item of this._items) {\n this._map.set(item.fragment, item);\n }\n }\n static {\n this.ɵfac = function NgbScrollSpyMenu_Factory(t) {\n return new (t || NgbScrollSpyMenu)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbScrollSpyMenu,\n selectors: [[\"\", \"ngbScrollSpyMenu\", \"\"]],\n contentQueries: function NgbScrollSpyMenu_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbScrollSpyItem, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._items = _t);\n }\n },\n inputs: {\n scrollSpy: [i0.ɵɵInputFlags.None, \"ngbScrollSpyMenu\", \"scrollSpy\"]\n },\n standalone: true\n });\n }\n }\n return NgbScrollSpyMenu;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to put on a scrollable container.\n *\n * It will instantiate a [`NgbScrollSpyService`](#/components/scrollspy/api#NgbScrollSpyService).\n *\n * @since 15.1.0\n */\nlet NgbScrollSpy = /*#__PURE__*/(() => {\n class NgbScrollSpy {\n constructor() {\n this._initialFragment = null;\n this._service = inject(NgbScrollSpyService);\n this._nativeElement = inject(ElementRef).nativeElement;\n /**\n * An event raised when the active section changes.\n *\n * Payload is the id of the new active section, empty string if none.\n */\n this.activeChange = this._service.active$;\n }\n set active(fragment) {\n this._initialFragment = fragment;\n this.scrollTo(fragment);\n }\n /**\n * Getter/setter for the currently active fragment id.\n */\n get active() {\n return this._service.active;\n }\n /**\n * Returns an observable that emits currently active section id.\n */\n get active$() {\n return this._service.active$;\n }\n ngAfterViewInit() {\n this._service.start({\n processChanges: this.processChanges,\n root: this._nativeElement,\n rootMargin: this.rootMargin,\n threshold: this.threshold,\n ...(this._initialFragment && {\n initialFragment: this._initialFragment\n })\n });\n }\n /**\n * @internal\n */\n _registerFragment(fragment) {\n this._service.observe(fragment.id);\n }\n /**\n * @internal\n */\n _unregisterFragment(fragment) {\n this._service.unobserve(fragment.id);\n }\n /**\n * Scrolls to a fragment that is identified by the `ngbScrollSpyFragment` directive.\n * An id or an element reference can be passed.\n */\n scrollTo(fragment, options) {\n this._service.scrollTo(fragment, {\n ...(this.scrollBehavior && {\n behavior: this.scrollBehavior\n }),\n ...options\n });\n }\n static {\n this.ɵfac = function NgbScrollSpy_Factory(t) {\n return new (t || NgbScrollSpy)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbScrollSpy,\n selectors: [[\"\", \"ngbScrollSpy\", \"\"]],\n hostAttrs: [\"tabindex\", \"0\", 2, \"overflow-y\", \"auto\"],\n inputs: {\n processChanges: \"processChanges\",\n rootMargin: \"rootMargin\",\n scrollBehavior: \"scrollBehavior\",\n threshold: \"threshold\",\n active: \"active\"\n },\n outputs: {\n activeChange: \"activeChange\"\n },\n exportAs: [\"ngbScrollSpy\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([NgbScrollSpyService])]\n });\n }\n }\n return NgbScrollSpy;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A directive to put on a fragment observed inside a scrollspy container.\n *\n * @since 15.1.0\n */\nlet NgbScrollSpyFragment = /*#__PURE__*/(() => {\n class NgbScrollSpyFragment {\n constructor() {\n this._destroyRef = inject(DestroyRef);\n this._scrollSpy = inject(NgbScrollSpy);\n }\n ngAfterViewInit() {\n this._scrollSpy._registerFragment(this);\n this._destroyRef.onDestroy(() => this._scrollSpy._unregisterFragment(this));\n }\n static {\n this.ɵfac = function NgbScrollSpyFragment_Factory(t) {\n return new (t || NgbScrollSpyFragment)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbScrollSpyFragment,\n selectors: [[\"\", \"ngbScrollSpyFragment\", \"\"]],\n hostVars: 1,\n hostBindings: function NgbScrollSpyFragment_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n }\n },\n inputs: {\n id: [i0.ɵɵInputFlags.None, \"ngbScrollSpyFragment\", \"id\"]\n },\n standalone: true\n });\n }\n }\n return NgbScrollSpyFragment;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbScrollSpyModule = /*#__PURE__*/(() => {\n class NgbScrollSpyModule {\n static {\n this.ɵfac = function NgbScrollSpyModule_Factory(t) {\n return new (t || NgbScrollSpyModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbScrollSpyModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbScrollSpyModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass NgbTime {\n constructor(hour, minute, second) {\n this.hour = toInteger(hour);\n this.minute = toInteger(minute);\n this.second = toInteger(second);\n }\n changeHour(step = 1) {\n this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step);\n }\n updateHour(hour) {\n if (isNumber(hour)) {\n this.hour = (hour < 0 ? 24 + hour : hour) % 24;\n } else {\n this.hour = NaN;\n }\n }\n changeMinute(step = 1) {\n this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step);\n }\n updateMinute(minute) {\n if (isNumber(minute)) {\n this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60;\n this.changeHour(Math.floor(minute / 60));\n } else {\n this.minute = NaN;\n }\n }\n changeSecond(step = 1) {\n this.updateSecond((isNaN(this.second) ? 0 : this.second) + step);\n }\n updateSecond(second) {\n if (isNumber(second)) {\n this.second = second < 0 ? 60 + second % 60 : second % 60;\n this.changeMinute(Math.floor(second / 60));\n } else {\n this.second = NaN;\n }\n }\n isValid(checkSecs = true) {\n return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true);\n }\n toString() {\n return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`;\n }\n}\n\n/**\n * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the timepickers used in the application.\n */\nlet NgbTimepickerConfig = /*#__PURE__*/(() => {\n class NgbTimepickerConfig {\n constructor() {\n this.meridian = false;\n this.spinners = true;\n this.seconds = false;\n this.hourStep = 1;\n this.minuteStep = 1;\n this.secondStep = 1;\n this.disabled = false;\n this.readonlyInputs = false;\n this.size = 'medium';\n }\n static {\n this.ɵfac = function NgbTimepickerConfig_Factory(t) {\n return new (t || NgbTimepickerConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTimepickerConfig,\n factory: NgbTimepickerConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbTimepickerConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction NGB_DATEPICKER_TIME_ADAPTER_FACTORY() {\n return new NgbTimeStructAdapter();\n}\n/**\n * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and\n * any provided user time model `T`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding timepicker to a form control,\n * ex. `[(ngModel)]=\"userTimeModel\"`. Here `userTimeModel` can be of any type.\n *\n * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model.\n *\n * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example.\n *\n * @since 2.2.0\n */\nlet NgbTimeAdapter = /*#__PURE__*/(() => {\n class NgbTimeAdapter {\n static {\n this.ɵfac = function NgbTimeAdapter_Factory(t) {\n return new (t || NgbTimeAdapter)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTimeAdapter,\n factory: () => NGB_DATEPICKER_TIME_ADAPTER_FACTORY(),\n providedIn: 'root'\n });\n }\n }\n return NgbTimeAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbTimeStructAdapter = /*#__PURE__*/(() => {\n class NgbTimeStructAdapter extends NgbTimeAdapter {\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n fromModel(time) {\n return time && isInteger(time.hour) && isInteger(time.minute) ? {\n hour: time.hour,\n minute: time.minute,\n second: isInteger(time.second) ? time.second : null\n } : null;\n }\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n toModel(time) {\n return time && isInteger(time.hour) && isInteger(time.minute) ? {\n hour: time.hour,\n minute: time.minute,\n second: isInteger(time.second) ? time.second : null\n } : null;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbTimeStructAdapter_BaseFactory;\n return function NgbTimeStructAdapter_Factory(t) {\n return (ɵNgbTimeStructAdapter_BaseFactory || (ɵNgbTimeStructAdapter_BaseFactory = i0.ɵɵgetInheritedFactory(NgbTimeStructAdapter)))(t || NgbTimeStructAdapter);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTimeStructAdapter,\n factory: NgbTimeStructAdapter.ɵfac\n });\n }\n }\n return NgbTimeStructAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component.\n * The default implementation of this service honors the Angular locale, and uses the registered locale data,\n * as explained in the Angular i18n guide.\n */\nlet NgbTimepickerI18n = /*#__PURE__*/(() => {\n class NgbTimepickerI18n {\n static {\n this.ɵfac = function NgbTimepickerI18n_Factory(t) {\n return new (t || NgbTimepickerI18n)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTimepickerI18n,\n factory: () => (() => new NgbTimepickerI18nDefault())(),\n providedIn: 'root'\n });\n }\n }\n return NgbTimepickerI18n;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbTimepickerI18nDefault = /*#__PURE__*/(() => {\n class NgbTimepickerI18nDefault extends NgbTimepickerI18n {\n constructor() {\n super(...arguments);\n this._periods = getLocaleDayPeriods(inject(LOCALE_ID), FormStyle.Standalone, TranslationWidth.Narrow);\n }\n getMorningPeriod() {\n return this._periods[0];\n }\n getAfternoonPeriod() {\n return this._periods[1];\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgbTimepickerI18nDefault_BaseFactory;\n return function NgbTimepickerI18nDefault_Factory(t) {\n return (ɵNgbTimepickerI18nDefault_BaseFactory || (ɵNgbTimepickerI18nDefault_BaseFactory = i0.ɵɵgetInheritedFactory(NgbTimepickerI18nDefault)))(t || NgbTimepickerI18nDefault);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTimepickerI18nDefault,\n factory: NgbTimepickerI18nDefault.ɵfac\n });\n }\n }\n return NgbTimepickerI18nDefault;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst FILTER_REGEX = /[^0-9]/g;\n/**\n * A directive that helps with wth picking hours, minutes and seconds.\n */\nlet NgbTimepicker = /*#__PURE__*/(() => {\n class NgbTimepicker {\n /**\n * The number of hours to add/subtract when clicking hour spinners.\n */\n set hourStep(step) {\n this._hourStep = isInteger(step) ? step : this._config.hourStep;\n }\n get hourStep() {\n return this._hourStep;\n }\n /**\n * The number of minutes to add/subtract when clicking minute spinners.\n */\n set minuteStep(step) {\n this._minuteStep = isInteger(step) ? step : this._config.minuteStep;\n }\n get minuteStep() {\n return this._minuteStep;\n }\n /**\n * The number of seconds to add/subtract when clicking second spinners.\n */\n set secondStep(step) {\n this._secondStep = isInteger(step) ? step : this._config.secondStep;\n }\n get secondStep() {\n return this._secondStep;\n }\n constructor(_config, _ngbTimeAdapter, _cd, i18n) {\n this._config = _config;\n this._ngbTimeAdapter = _ngbTimeAdapter;\n this._cd = _cd;\n this.i18n = i18n;\n this.onChange = _ => {};\n this.onTouched = () => {};\n this.meridian = _config.meridian;\n this.spinners = _config.spinners;\n this.seconds = _config.seconds;\n this.hourStep = _config.hourStep;\n this.minuteStep = _config.minuteStep;\n this.secondStep = _config.secondStep;\n this.disabled = _config.disabled;\n this.readonlyInputs = _config.readonlyInputs;\n this.size = _config.size;\n }\n writeValue(value) {\n const structValue = this._ngbTimeAdapter.fromModel(value);\n this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime();\n if (!this.seconds && (!structValue || !isNumber(structValue.second))) {\n this.model.second = 0;\n }\n this._cd.markForCheck();\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * Increments the hours by the given step.\n */\n changeHour(step) {\n this.model?.changeHour(step);\n this.propagateModelChange();\n }\n /**\n * Increments the minutes by the given step.\n */\n changeMinute(step) {\n this.model?.changeMinute(step);\n this.propagateModelChange();\n }\n /**\n * Increments the seconds by the given step.\n */\n changeSecond(step) {\n this.model?.changeSecond(step);\n this.propagateModelChange();\n }\n /**\n * Update hours with the new value.\n */\n updateHour(newVal) {\n const isPM = this.model ? this.model.hour >= 12 : false;\n const enteredHour = toInteger(newVal);\n if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) {\n this.model?.updateHour(enteredHour + 12);\n } else {\n this.model?.updateHour(enteredHour);\n }\n this.propagateModelChange();\n }\n /**\n * Update minutes with the new value.\n */\n updateMinute(newVal) {\n this.model?.updateMinute(toInteger(newVal));\n this.propagateModelChange();\n }\n /**\n * Update seconds with the new value.\n */\n updateSecond(newVal) {\n this.model?.updateSecond(toInteger(newVal));\n this.propagateModelChange();\n }\n toggleMeridian() {\n if (this.meridian) {\n this.changeHour(12);\n }\n }\n formatInput(input) {\n input.value = input.value.replace(FILTER_REGEX, '');\n }\n formatHour(value) {\n if (isNumber(value)) {\n if (this.meridian) {\n return padNumber(value % 12 === 0 ? 12 : value % 12);\n } else {\n return padNumber(value % 24);\n }\n } else {\n return padNumber(NaN);\n }\n }\n formatMinSec(value) {\n return padNumber(isNumber(value) ? value : NaN);\n }\n handleBlur() {\n this.onTouched();\n }\n get isSmallSize() {\n return this.size === 'small';\n }\n get isLargeSize() {\n return this.size === 'large';\n }\n ngOnChanges(changes) {\n if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) {\n this.model.second = 0;\n this.propagateModelChange(false);\n }\n }\n propagateModelChange(touched = true) {\n if (touched) {\n this.onTouched();\n }\n if (this.model?.isValid(this.seconds)) {\n this.onChange(this._ngbTimeAdapter.toModel({\n hour: this.model.hour,\n minute: this.model.minute,\n second: this.model.second\n }));\n } else {\n this.onChange(this._ngbTimeAdapter.toModel(null));\n }\n }\n static {\n this.ɵfac = function NgbTimepicker_Factory(t) {\n return new (t || NgbTimepicker)(i0.ɵɵdirectiveInject(NgbTimepickerConfig), i0.ɵɵdirectiveInject(NgbTimeAdapter), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(NgbTimepickerI18n));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbTimepicker,\n selectors: [[\"ngb-timepicker\"]],\n inputs: {\n meridian: \"meridian\",\n spinners: \"spinners\",\n seconds: \"seconds\",\n hourStep: \"hourStep\",\n minuteStep: \"minuteStep\",\n secondStep: \"secondStep\",\n readonlyInputs: \"readonlyInputs\",\n size: \"size\"\n },\n exportAs: [\"ngbTimepicker\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTimepicker),\n multi: true\n }]), i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n decls: 14,\n vars: 23,\n consts: () => {\n let i18n_21;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_9 = goog.getMsg(\"HH\");\n i18n_21 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_9;\n } else {\n i18n_21 = $localize`:@@ngb.timepicker.HH:HH`;\n }\n let i18n_22;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_10 = goog.getMsg(\"Hours\");\n i18n_22 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_10;\n } else {\n i18n_22 = $localize`:@@ngb.timepicker.hours:Hours`;\n }\n let i18n_23;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_11 = goog.getMsg(\"MM\");\n i18n_23 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_11;\n } else {\n i18n_23 = $localize`:@@ngb.timepicker.MM:MM`;\n }\n let i18n_24;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_12 = goog.getMsg(\"Minutes\");\n i18n_24 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS_12;\n } else {\n i18n_24 = $localize`:@@ngb.timepicker.minutes:Minutes`;\n }\n let i18n_25;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__12 = goog.getMsg(\"Increment hours\");\n i18n_25 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__12;\n } else {\n i18n_25 = $localize`:@@ngb.timepicker.increment-hours:Increment hours`;\n }\n let i18n_26;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__13 = goog.getMsg(\"Decrement hours\");\n i18n_26 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__13;\n } else {\n i18n_26 = $localize`:@@ngb.timepicker.decrement-hours:Decrement hours`;\n }\n let i18n_27;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__14 = goog.getMsg(\"Increment minutes\");\n i18n_27 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__14;\n } else {\n i18n_27 = $localize`:@@ngb.timepicker.increment-minutes:Increment minutes`;\n }\n let i18n_28;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__15 = goog.getMsg(\"Decrement minutes\");\n i18n_28 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__15;\n } else {\n i18n_28 = $localize`:@@ngb.timepicker.decrement-minutes:Decrement minutes`;\n }\n let i18n_29;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__16 = goog.getMsg(\"SS\");\n i18n_29 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__16;\n } else {\n i18n_29 = $localize`:@@ngb.timepicker.SS:SS`;\n }\n let i18n_30;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__17 = goog.getMsg(\"Seconds\");\n i18n_30 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__17;\n } else {\n i18n_30 = $localize`:@@ngb.timepicker.seconds:Seconds`;\n }\n let i18n_31;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS___0 = goog.getMsg(\"Increment seconds\");\n i18n_31 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS___0;\n } else {\n i18n_31 = $localize`:@@ngb.timepicker.increment-seconds:Increment seconds`;\n }\n let i18n_32;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS___1 = goog.getMsg(\"Decrement seconds\");\n i18n_32 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS___1;\n } else {\n i18n_32 = $localize`:@@ngb.timepicker.decrement-seconds:Decrement seconds`;\n }\n let i18n_33;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS___2 = goog.getMsg(\"{$interpolation}\", {\n \"interpolation\": \"\\uFFFD0\\uFFFD\"\n }, {\n original_code: {\n \"interpolation\": \"{{ i18n.getAfternoonPeriod() }}\"\n }\n });\n i18n_33 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS___2;\n } else {\n i18n_33 = $localize`:@@ngb.timepicker.PM:${\"\\uFFFD0\\uFFFD\"}:INTERPOLATION:`;\n }\n return [[3, \"disabled\"], [1, \"ngb-tp\"], [1, \"ngb-tp-input-container\", \"ngb-tp-hour\"], [\"tabindex\", \"-1\", \"type\", \"button\", \"class\", \"btn btn-link\", 3, \"btn-sm\", \"btn-lg\", \"disabled\"], [\"type\", \"text\", \"maxlength\", \"2\", \"inputmode\", \"numeric\", \"placeholder\", i18n_21, \"aria-label\", i18n_22, 1, \"ngb-tp-input\", \"form-control\", 3, \"value\", \"readOnly\", \"disabled\", \"change\", \"blur\", \"input\", \"keydown.ArrowUp\", \"keydown.ArrowDown\"], [1, \"ngb-tp-spacer\"], [1, \"ngb-tp-input-container\", \"ngb-tp-minute\"], [\"type\", \"text\", \"maxlength\", \"2\", \"inputmode\", \"numeric\", \"placeholder\", i18n_23, \"aria-label\", i18n_24, 1, \"ngb-tp-input\", \"form-control\", 3, \"value\", \"readOnly\", \"disabled\", \"change\", \"blur\", \"input\", \"keydown.ArrowUp\", \"keydown.ArrowDown\"], [\"tabindex\", \"-1\", \"type\", \"button\", 1, \"btn\", \"btn-link\", 3, \"disabled\", \"click\"], [1, \"chevron\", \"ngb-tp-chevron\"], [1, \"visually-hidden\"], i18n_25, [1, \"chevron\", \"ngb-tp-chevron\", \"bottom\"], i18n_26, i18n_27, i18n_28, [1, \"ngb-tp-input-container\", \"ngb-tp-second\"], [\"type\", \"text\", \"maxlength\", \"2\", \"inputmode\", \"numeric\", \"placeholder\", i18n_29, \"aria-label\", i18n_30, 1, \"ngb-tp-input\", \"form-control\", 3, \"value\", \"readOnly\", \"disabled\", \"change\", \"blur\", \"input\", \"keydown.ArrowUp\", \"keydown.ArrowDown\"], i18n_31, i18n_32, [1, \"ngb-tp-meridian\"], [\"type\", \"button\", 1, \"btn\", \"btn-outline-primary\", 3, \"disabled\", \"click\"], i18n_33];\n },\n template: function NgbTimepicker_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"fieldset\", 0)(1, \"div\", 1)(2, \"div\", 2);\n i0.ɵɵtemplate(3, NgbTimepicker_Conditional_3_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementStart(4, \"input\", 4);\n i0.ɵɵlistener(\"change\", function NgbTimepicker_Template_input_change_4_listener($event) {\n return ctx.updateHour($event.target.value);\n })(\"blur\", function NgbTimepicker_Template_input_blur_4_listener() {\n return ctx.handleBlur();\n })(\"input\", function NgbTimepicker_Template_input_input_4_listener($event) {\n return ctx.formatInput($event.target);\n })(\"keydown.ArrowUp\", function NgbTimepicker_Template_input_keydown_ArrowUp_4_listener($event) {\n ctx.changeHour(ctx.hourStep);\n return $event.preventDefault();\n })(\"keydown.ArrowDown\", function NgbTimepicker_Template_input_keydown_ArrowDown_4_listener($event) {\n ctx.changeHour(-ctx.hourStep);\n return $event.preventDefault();\n });\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(5, NgbTimepicker_Conditional_5_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(6, \"div\", 5);\n i0.ɵɵtext(7, \":\");\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(8, \"div\", 6);\n i0.ɵɵtemplate(9, NgbTimepicker_Conditional_9_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementStart(10, \"input\", 7);\n i0.ɵɵlistener(\"change\", function NgbTimepicker_Template_input_change_10_listener($event) {\n return ctx.updateMinute($event.target.value);\n })(\"blur\", function NgbTimepicker_Template_input_blur_10_listener() {\n return ctx.handleBlur();\n })(\"input\", function NgbTimepicker_Template_input_input_10_listener($event) {\n return ctx.formatInput($event.target);\n })(\"keydown.ArrowUp\", function NgbTimepicker_Template_input_keydown_ArrowUp_10_listener($event) {\n ctx.changeMinute(ctx.minuteStep);\n return $event.preventDefault();\n })(\"keydown.ArrowDown\", function NgbTimepicker_Template_input_keydown_ArrowDown_10_listener($event) {\n ctx.changeMinute(-ctx.minuteStep);\n return $event.preventDefault();\n });\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(11, NgbTimepicker_Conditional_11_Template, 4, 7, \"button\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(12, NgbTimepicker_Conditional_12_Template, 6, 9)(13, NgbTimepicker_Conditional_13_Template, 5, 8);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"disabled\", ctx.disabled);\n i0.ɵɵproperty(\"disabled\", ctx.disabled);\n i0.ɵɵadvance(3);\n i0.ɵɵconditional(3, ctx.spinners ? 3 : -1);\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"form-control-sm\", ctx.isSmallSize)(\"form-control-lg\", ctx.isLargeSize);\n i0.ɵɵproperty(\"value\", ctx.formatHour(ctx.model == null ? null : ctx.model.hour))(\"readOnly\", ctx.readonlyInputs)(\"disabled\", ctx.disabled);\n i0.ɵɵadvance();\n i0.ɵɵconditional(5, ctx.spinners ? 5 : -1);\n i0.ɵɵadvance(4);\n i0.ɵɵconditional(9, ctx.spinners ? 9 : -1);\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"form-control-sm\", ctx.isSmallSize)(\"form-control-lg\", ctx.isLargeSize);\n i0.ɵɵproperty(\"value\", ctx.formatMinSec(ctx.model == null ? null : ctx.model.minute))(\"readOnly\", ctx.readonlyInputs)(\"disabled\", ctx.disabled);\n i0.ɵɵadvance();\n i0.ɵɵconditional(11, ctx.spinners ? 11 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(12, ctx.seconds ? 12 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(13, ctx.meridian ? 13 : -1);\n }\n },\n styles: [\"ngb-timepicker{font-size:1rem}.ngb-tp{display:flex;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{border-style:solid;border-width:.29em .29em 0 0;content:\\\"\\\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-minute,.ngb-tp-second,.ngb-tp-meridian{display:flex;flex-direction:column;align-items:center;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}\\n\"],\n encapsulation: 2\n });\n }\n }\n return NgbTimepicker;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbTimepickerModule = /*#__PURE__*/(() => {\n class NgbTimepickerModule {\n static {\n this.ɵfac = function NgbTimepickerModule_Factory(t) {\n return new (t || NgbTimepickerModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbTimepickerModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbTimepickerModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Configuration service for the NgbToast component. You can inject this service, typically in your root component,\n * and customize the values of its properties in order to provide default values for all the toasts used in the\n * application.\n *\n * @since 5.0.0\n */\nlet NgbToastConfig = /*#__PURE__*/(() => {\n class NgbToastConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.autohide = true;\n this.delay = 5000;\n this.ariaLive = 'polite';\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static {\n this.ɵfac = function NgbToastConfig_Factory(t) {\n return new (t || NgbToastConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbToastConfig,\n factory: NgbToastConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbToastConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst ngbToastFadeInTransition = (element, animation) => {\n const {\n classList\n } = element;\n if (animation) {\n classList.add('fade');\n } else {\n classList.add('show');\n return;\n }\n reflow(element);\n classList.add('show', 'showing');\n return () => {\n classList.remove('showing');\n };\n};\nconst ngbToastFadeOutTransition = ({\n classList\n}) => {\n classList.add('showing');\n return () => {\n classList.remove('show', 'showing');\n };\n};\n\n/**\n * This directive allows the usage of HTML markup or other directives\n * inside of the toast's header.\n *\n * @since 5.0.0\n */\nlet NgbToastHeader = /*#__PURE__*/(() => {\n class NgbToastHeader {\n static {\n this.ɵfac = function NgbToastHeader_Factory(t) {\n return new (t || NgbToastHeader)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbToastHeader,\n selectors: [[\"\", \"ngbToastHeader\", \"\"]],\n standalone: true\n });\n }\n }\n return NgbToastHeader;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Toasts provide feedback messages as notifications to the user.\n * Goal is to mimic the push notifications available both on mobile and desktop operating systems.\n *\n * @since 5.0.0\n */\nlet NgbToast = /*#__PURE__*/(() => {\n class NgbToast {\n constructor(ariaLive) {\n this.ariaLive = ariaLive;\n this._config = inject(NgbToastConfig);\n this._zone = inject(NgZone);\n this._element = inject(ElementRef);\n /**\n * If `true`, toast opening and closing will be animated.\n *\n * Animation is triggered only when the `.hide()` or `.show()` functions are called\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * Delay after which the toast will hide (ms).\n * default: `500` (ms) (inherited from NgbToastConfig)\n */\n this.delay = this._config.delay;\n /**\n * Auto hide the toast after a delay in ms.\n * default: `true` (inherited from NgbToastConfig)\n */\n this.autohide = this._config.autohide;\n /**\n * A template like `` can be\n * used in the projected content to allow markup usage.\n */\n this.contentHeaderTpl = null;\n /**\n * An event fired after the animation triggered by calling `.show()` method has finished.\n *\n * @since 8.0.0\n */\n this.shown = new EventEmitter();\n /**\n * An event fired after the animation triggered by calling `.hide()` method has finished.\n *\n * It can only occur in 2 different scenarios:\n * - `autohide` timeout fires\n * - user clicks on a closing cross\n *\n * Additionally this output is purely informative. The toast won't be removed from DOM automatically, it's up\n * to the user to take care of that.\n *\n * @since 8.0.0\n */\n this.hidden = new EventEmitter();\n this.ariaLive ??= this._config.ariaLive;\n }\n ngAfterContentInit() {\n this._zone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this._init();\n this.show();\n });\n }\n ngOnChanges(changes) {\n if ('autohide' in changes) {\n this._clearTimeout();\n this._init();\n }\n }\n /**\n * Triggers toast closing programmatically.\n *\n * The returned observable will emit and be completed once the closing transition has finished.\n * If the animations are turned off this happens synchronously.\n *\n * Alternatively you could listen or subscribe to the `(hidden)` output\n *\n * @since 8.0.0\n */\n hide() {\n this._clearTimeout();\n const transition = ngbRunTransition(this._zone, this._element.nativeElement, ngbToastFadeOutTransition, {\n animation: this.animation,\n runningTransition: 'stop'\n });\n transition.subscribe(() => {\n this.hidden.emit();\n });\n return transition;\n }\n /**\n * Triggers toast opening programmatically.\n *\n * The returned observable will emit and be completed once the opening transition has finished.\n * If the animations are turned off this happens synchronously.\n *\n * Alternatively you could listen or subscribe to the `(shown)` output\n *\n * @since 8.0.0\n */\n show() {\n const transition = ngbRunTransition(this._zone, this._element.nativeElement, ngbToastFadeInTransition, {\n animation: this.animation,\n runningTransition: 'continue'\n });\n transition.subscribe(() => {\n this.shown.emit();\n });\n return transition;\n }\n _init() {\n if (this.autohide && !this._timeoutID) {\n this._timeoutID = setTimeout(() => this.hide(), this.delay);\n }\n }\n _clearTimeout() {\n if (this._timeoutID) {\n clearTimeout(this._timeoutID);\n this._timeoutID = null;\n }\n }\n static {\n this.ɵfac = function NgbToast_Factory(t) {\n return new (t || NgbToast)(i0.ɵɵinjectAttribute('aria-live'));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbToast,\n selectors: [[\"ngb-toast\"]],\n contentQueries: function NgbToast_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, NgbToastHeader, 7, TemplateRef);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentHeaderTpl = _t.first);\n }\n },\n hostAttrs: [\"role\", \"alert\", \"aria-atomic\", \"true\", 1, \"toast\"],\n hostVars: 3,\n hostBindings: function NgbToast_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-live\", ctx.ariaLive);\n i0.ɵɵclassProp(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n delay: \"delay\",\n autohide: \"autohide\",\n header: \"header\"\n },\n outputs: {\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbToast\"],\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 5,\n vars: 1,\n consts: () => {\n let i18n_34;\n if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @suppress {msgDescriptions}\n */\n const MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__18 = goog.getMsg(\"Close\");\n i18n_34 = MSG_D__A_1_S_HIGHFIELDFUNCTIONALSKILLS_WEB_CLIENTAPP_NODE_MODULES__NG_BOOTSTRAP_NG_BOOTSTRAP_FESM2022_NG_BOOTSTRAP_MJS__18;\n } else {\n i18n_34 = $localize`:@@ngb.toast.close-aria:Close`;\n }\n return [[\"headerTpl\", \"\"], [\"class\", \"toast-header\"], [1, \"toast-body\"], [1, \"me-auto\"], [1, \"toast-header\"], [3, \"ngTemplateOutlet\"], [\"type\", \"button\", \"aria-label\", i18n_34, 1, \"btn-close\", 3, \"click\"]];\n },\n template: function NgbToast_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵtemplate(0, NgbToast_ng_template_0_Template, 2, 1, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor)(2, NgbToast_Conditional_2_Template, 3, 1, \"div\", 1);\n i0.ɵɵelementStart(3, \"div\", 2);\n i0.ɵɵprojection(4);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(2, ctx.contentHeaderTpl || ctx.header ? 2 : -1);\n }\n },\n dependencies: [NgTemplateOutlet],\n styles: [\"ngb-toast{display:block}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}\\n\"],\n encapsulation: 2\n });\n }\n }\n return NgbToast;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbToastModule = /*#__PURE__*/(() => {\n class NgbToastModule {\n static {\n this.ɵfac = function NgbToastModule_Factory(t) {\n return new (t || NgbToastModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbToastModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbToastModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tooltips used in the application.\n */\nlet NgbTooltipConfig = /*#__PURE__*/(() => {\n class NgbTooltipConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.autoClose = true;\n this.placement = 'auto';\n this.popperOptions = options => options;\n this.triggers = 'hover focus';\n this.disableTooltip = false;\n this.openDelay = 0;\n this.closeDelay = 0;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static {\n this.ɵfac = function NgbTooltipConfig_Factory(t) {\n return new (t || NgbTooltipConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTooltipConfig,\n factory: NgbTooltipConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbTooltipConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextId = 0;\nlet NgbTooltipWindow = /*#__PURE__*/(() => {\n class NgbTooltipWindow {\n static {\n this.ɵfac = function NgbTooltipWindow_Factory(t) {\n return new (t || NgbTooltipWindow)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbTooltipWindow,\n selectors: [[\"ngb-tooltip-window\"]],\n hostAttrs: [\"role\", \"tooltip\"],\n hostVars: 5,\n hostBindings: function NgbTooltipWindow_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n i0.ɵɵclassMap(\"tooltip\" + (ctx.tooltipClass ? \" \" + ctx.tooltipClass : \"\"));\n i0.ɵɵclassProp(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n id: \"id\",\n tooltipClass: \"tooltipClass\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 3,\n vars: 0,\n consts: [[\"data-popper-arrow\", \"\", 1, \"tooltip-arrow\"], [1, \"tooltip-inner\"]],\n template: function NgbTooltipWindow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelement(0, \"div\", 0);\n i0.ɵɵelementStart(1, \"div\", 1);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd();\n }\n },\n styles: [\"ngb-tooltip-window{pointer-events:none;position:absolute}ngb-tooltip-window .tooltip-inner{pointer-events:auto}ngb-tooltip-window.bs-tooltip-top,ngb-tooltip-window.bs-tooltip-bottom{padding-left:0;padding-right:0}ngb-tooltip-window.bs-tooltip-start,ngb-tooltip-window.bs-tooltip-end{padding-top:0;padding-bottom:0}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbTooltipWindow;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A lightweight and extensible directive for fancy tooltip creation.\n */\nlet NgbTooltip = /*#__PURE__*/(() => {\n class NgbTooltip {\n constructor() {\n this._config = inject(NgbTooltipConfig);\n /**\n * If `true`, tooltip opening and closing will be animated.\n *\n * @since 8.0.0\n */\n this.animation = this._config.animation;\n /**\n * Indicates whether the tooltip should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n this.autoClose = this._config.autoClose;\n /**\n * The preferred placement of the tooltip, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"auto\"`.\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n this.placement = this._config.placement;\n /**\n * Allows to change default Popper options when positioning the tooltip.\n * Receives current popper options and returns modified ones.\n *\n * @since 13.1.0\n */\n this.popperOptions = this._config.popperOptions;\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/tooltip/examples#triggers).\n */\n this.triggers = this._config.triggers;\n /**\n * A selector specifying the element the tooltip should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n this.container = this._config.container;\n /**\n * If `true`, tooltip is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n this.disableTooltip = this._config.disableTooltip;\n /**\n * An optional class applied to the tooltip window element.\n *\n * @since 3.2.0\n */\n this.tooltipClass = this._config.tooltipClass;\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n this.openDelay = this._config.openDelay;\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n this.closeDelay = this._config.closeDelay;\n /**\n * An event emitted when the tooltip opening animation has finished. Contains no payload.\n */\n this.shown = new EventEmitter();\n /**\n * An event emitted when the tooltip closing animation has finished. Contains no payload.\n */\n this.hidden = new EventEmitter();\n this._nativeElement = inject(ElementRef).nativeElement;\n this._ngZone = inject(NgZone);\n this._document = inject(DOCUMENT);\n this._changeDetector = inject(ChangeDetectorRef);\n this._ngbTooltipWindowId = `ngb-tooltip-${nextId++}`;\n this._popupService = new PopupService(NgbTooltipWindow);\n this._windowRef = null;\n this._positioning = ngbPositioning();\n }\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the tooltip.\n *\n * If the content if falsy, the tooltip won't open.\n */\n set ngbTooltip(value) {\n this._ngbTooltip = value;\n if (!value && this._windowRef) {\n this.close();\n }\n }\n get ngbTooltip() {\n return this._ngbTooltip;\n }\n /**\n * Opens the tooltip.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the tooltip template when it is created.\n */\n open(context) {\n if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) {\n const {\n windowRef,\n transition$\n } = this._popupService.open(this._ngbTooltip, context ?? this.tooltipContext, this.animation);\n this._windowRef = windowRef;\n this._windowRef.setInput('animation', this.animation);\n this._windowRef.setInput('tooltipClass', this.tooltipClass);\n this._windowRef.setInput('id', this._ngbTooltipWindowId);\n this._getPositionTargetElement().setAttribute('aria-describedby', this._ngbTooltipWindowId);\n if (this.container === 'body') {\n this._document.body.appendChild(this._windowRef.location.nativeElement);\n }\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening tooltip from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n // We need to mark for check, because tooltip won't work inside the OnPush component.\n // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the tooltip from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n // Setting up popper and scheduling updates when zone is stable\n this._ngZone.runOutsideAngular(() => {\n this._positioning.createPopper({\n hostElement: this._getPositionTargetElement(),\n targetElement: this._windowRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n baseClass: 'bs-tooltip',\n updatePopperOptions: options => this.popperOptions(addPopperOffset([0, 6])(options))\n });\n Promise.resolve().then(() => {\n // This update is required for correct arrow placement\n this._positioning.update();\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n });\n });\n ngbAutoClose(this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden, [this._windowRef.location.nativeElement], [this._nativeElement]);\n transition$.subscribe(() => this.shown.emit());\n }\n }\n /**\n * Closes the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n close(animation = this.animation) {\n if (this._windowRef != null) {\n this._getPositionTargetElement().removeAttribute('aria-describedby');\n this._popupService.close(animation).subscribe(() => {\n this._windowRef = null;\n this._positioning.destroy();\n this._zoneSubscription?.unsubscribe();\n this.hidden.emit();\n this._changeDetector.markForCheck();\n });\n }\n }\n /**\n * Toggles the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n toggle() {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen() {\n return this._windowRef != null;\n }\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(this._nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n ngOnChanges({\n tooltipClass\n }) {\n if (tooltipClass && this.isOpen()) {\n this._windowRef.setInput('tooltipClass', tooltipClass.currentValue);\n }\n }\n ngOnDestroy() {\n this.close(false);\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n this._unregisterListenersFn?.();\n }\n _getPositionTargetElement() {\n return (isString(this.positionTarget) ? this._document.querySelector(this.positionTarget) : this.positionTarget) || this._nativeElement;\n }\n static {\n this.ɵfac = function NgbTooltip_Factory(t) {\n return new (t || NgbTooltip)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbTooltip,\n selectors: [[\"\", \"ngbTooltip\", \"\"]],\n inputs: {\n animation: \"animation\",\n autoClose: \"autoClose\",\n placement: \"placement\",\n popperOptions: \"popperOptions\",\n triggers: \"triggers\",\n positionTarget: \"positionTarget\",\n container: \"container\",\n disableTooltip: \"disableTooltip\",\n tooltipClass: \"tooltipClass\",\n tooltipContext: \"tooltipContext\",\n openDelay: \"openDelay\",\n closeDelay: \"closeDelay\",\n ngbTooltip: \"ngbTooltip\"\n },\n outputs: {\n shown: \"shown\",\n hidden: \"hidden\"\n },\n exportAs: [\"ngbTooltip\"],\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return NgbTooltip;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbTooltipModule = /*#__PURE__*/(() => {\n class NgbTooltipModule {\n static {\n this.ɵfac = function NgbTooltipModule_Factory(t) {\n return new (t || NgbTooltipModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbTooltipModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbTooltipModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A component that helps with text highlighting.\n *\n * It splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify\n * highlighting:\n *\n * Ex. `result=\"Alaska\"` and `term=\"as\"` will produce `Alaska`.\n */\nlet NgbHighlight = /*#__PURE__*/(() => {\n class NgbHighlight {\n constructor() {\n /**\n * The CSS class for `` elements wrapping the `term` inside the `result`.\n */\n this.highlightClass = 'ngb-highlight';\n /**\n * Boolean option to determine if the highlighting should be sensitive to accents or not.\n *\n * This feature is only available for browsers that implement the `String.normalize` function\n * (typically not Internet Explorer).\n * If you want to use this feature in a browser that does not implement `String.normalize`,\n * you will have to include a polyfill in your application (`unorm` for example).\n *\n * @since 9.1.0\n */\n this.accentSensitive = true;\n }\n ngOnChanges(changes) {\n if (!this.accentSensitive && !String.prototype.normalize) {\n console.warn('The `accentSensitive` input in `ngb-highlight` cannot be set to `false` in a browser ' + 'that does not implement the `String.normalize` function. ' + 'You will have to include a polyfill in your application to use this feature in the current browser.');\n this.accentSensitive = true;\n }\n const result = toString(this.result);\n const terms = Array.isArray(this.term) ? this.term : [this.term];\n const prepareTerm = term => this.accentSensitive ? term : removeAccents(term);\n const escapedTerms = terms.map(term => regExpEscape(prepareTerm(toString(term)))).filter(term => term);\n const toSplit = this.accentSensitive ? result : removeAccents(result);\n const parts = escapedTerms.length ? toSplit.split(new RegExp(`(${escapedTerms.join('|')})`, 'gmi')) : [result];\n if (this.accentSensitive) {\n this.parts = parts;\n } else {\n let offset = 0;\n this.parts = parts.map(part => result.substring(offset, offset += part.length));\n }\n }\n static {\n this.ɵfac = function NgbHighlight_Factory(t) {\n return new (t || NgbHighlight)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbHighlight,\n selectors: [[\"ngb-highlight\"]],\n inputs: {\n highlightClass: \"highlightClass\",\n result: \"result\",\n term: \"term\",\n accentSensitive: \"accentSensitive\"\n },\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n decls: 2,\n vars: 0,\n consts: [[3, \"class\"]],\n template: function NgbHighlight_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵrepeaterCreate(0, NgbHighlight_For_1_Template, 2, 1, null, null, i0.ɵɵrepeaterTrackByIdentity);\n }\n if (rf & 2) {\n i0.ɵɵrepeater(ctx.parts);\n }\n },\n styles: [\".ngb-highlight{font-weight:700}\\n\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return NgbHighlight;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst ARIA_LIVE_DELAY = new InjectionToken('live announcer delay', {\n providedIn: 'root',\n factory: () => 100\n});\nfunction getLiveElement(document, lazyCreate = false) {\n let element = document.body.querySelector('#ngb-live');\n if (element == null && lazyCreate) {\n element = document.createElement('div');\n element.setAttribute('id', 'ngb-live');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n element.classList.add('visually-hidden');\n document.body.appendChild(element);\n }\n return element;\n}\nlet Live = /*#__PURE__*/(() => {\n class Live {\n constructor() {\n this._document = inject(DOCUMENT);\n this._delay = inject(ARIA_LIVE_DELAY);\n }\n ngOnDestroy() {\n const element = getLiveElement(this._document);\n if (element) {\n // if exists, it will always be attached to the \n element.parentElement.removeChild(element);\n }\n }\n say(message) {\n const element = getLiveElement(this._document, true);\n const delay = this._delay;\n if (element != null) {\n element.textContent = '';\n const setText = () => element.textContent = message;\n if (delay === null) {\n setText();\n } else {\n setTimeout(setText, delay);\n }\n }\n }\n static {\n this.ɵfac = function Live_Factory(t) {\n return new (t || Live)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Live,\n factory: Live.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return Live;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the typeaheads used in the application.\n */\nlet NgbTypeaheadConfig = /*#__PURE__*/(() => {\n class NgbTypeaheadConfig {\n constructor() {\n this.editable = true;\n this.focusFirst = true;\n this.selectOnExact = false;\n this.showHint = false;\n this.placement = ['bottom-start', 'bottom-end', 'top-start', 'top-end'];\n this.popperOptions = options => options;\n }\n static {\n this.ɵfac = function NgbTypeaheadConfig_Factory(t) {\n return new (t || NgbTypeaheadConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbTypeaheadConfig,\n factory: NgbTypeaheadConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbTypeaheadConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbTypeaheadWindow = /*#__PURE__*/(() => {\n class NgbTypeaheadWindow {\n constructor() {\n this.activeIdx = 0;\n /**\n * Flag indicating if the first row should be active initially\n */\n this.focusFirst = true;\n /**\n * A function used to format a given result before display. This function should return a formatted string without any\n * HTML markup\n */\n this.formatter = toString;\n /**\n * Event raised when user selects a particular result row\n */\n this.selectEvent = new EventEmitter();\n this.activeChangeEvent = new EventEmitter();\n }\n hasActive() {\n return this.activeIdx > -1 && this.activeIdx < this.results.length;\n }\n getActive() {\n return this.results[this.activeIdx];\n }\n markActive(activeIdx) {\n this.activeIdx = activeIdx;\n this._activeChanged();\n }\n next() {\n if (this.activeIdx === this.results.length - 1) {\n this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1;\n } else {\n this.activeIdx++;\n }\n this._activeChanged();\n }\n prev() {\n if (this.activeIdx < 0) {\n this.activeIdx = this.results.length - 1;\n } else if (this.activeIdx === 0) {\n this.activeIdx = this.focusFirst ? this.results.length - 1 : -1;\n } else {\n this.activeIdx--;\n }\n this._activeChanged();\n }\n resetActive() {\n this.activeIdx = this.focusFirst ? 0 : -1;\n this._activeChanged();\n }\n select(item) {\n this.selectEvent.emit(item);\n }\n ngOnInit() {\n this.resetActive();\n }\n _activeChanged() {\n this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined);\n }\n static {\n this.ɵfac = function NgbTypeaheadWindow_Factory(t) {\n return new (t || NgbTypeaheadWindow)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbTypeaheadWindow,\n selectors: [[\"ngb-typeahead-window\"]],\n hostAttrs: [\"role\", \"listbox\"],\n hostVars: 3,\n hostBindings: function NgbTypeaheadWindow_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"mousedown\", function NgbTypeaheadWindow_mousedown_HostBindingHandler($event) {\n return $event.preventDefault();\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n i0.ɵɵclassMap(\"dropdown-menu show\" + (ctx.popupClass ? \" \" + ctx.popupClass : \"\"));\n }\n },\n inputs: {\n id: \"id\",\n focusFirst: \"focusFirst\",\n results: \"results\",\n term: \"term\",\n formatter: \"formatter\",\n resultTemplate: \"resultTemplate\",\n popupClass: \"popupClass\"\n },\n outputs: {\n selectEvent: \"select\",\n activeChangeEvent: \"activeChange\"\n },\n exportAs: [\"ngbTypeaheadWindow\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 4,\n vars: 0,\n consts: [[\"rt\", \"\"], [3, \"result\", \"term\"], [\"type\", \"button\", \"role\", \"option\", 1, \"dropdown-item\", 3, \"id\", \"mouseenter\", \"click\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"type\", \"button\", \"class\", \"dropdown-item\", \"role\", \"option\", 3, \"id\", \"active\"]],\n template: function NgbTypeaheadWindow_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, NgbTypeaheadWindow_ng_template_0_Template, 1, 2, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵrepeaterCreate(2, NgbTypeaheadWindow_For_3_Template, 2, 9, \"button\", 4, i0.ɵɵrepeaterTrackByIdentity);\n }\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵrepeater(ctx.results);\n }\n },\n dependencies: [NgbHighlight, NgTemplateOutlet],\n encapsulation: 2\n });\n }\n }\n return NgbTypeaheadWindow;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextWindowId = 0;\n/**\n * A directive providing a simple way of creating powerful typeaheads from any text input.\n */\nlet NgbTypeahead = /*#__PURE__*/(() => {\n class NgbTypeahead {\n constructor() {\n this._nativeElement = inject(ElementRef).nativeElement;\n this._config = inject(NgbTypeaheadConfig);\n this._live = inject(Live);\n this._document = inject(DOCUMENT);\n this._ngZone = inject(NgZone);\n this._changeDetector = inject(ChangeDetectorRef);\n this._popupService = new PopupService(NgbTypeaheadWindow);\n this._positioning = ngbPositioning();\n this._subscription = null;\n this._closed$ = new Subject();\n this._inputValueBackup = null;\n this._inputValueForSelectOnExact = null;\n this._valueChanges$ = fromEvent(this._nativeElement, 'input').pipe(map($event => $event.target.value));\n this._resubscribeTypeahead$ = new BehaviorSubject(null);\n this._windowRef = null;\n /**\n * The value for the `autocomplete` attribute for the `` element.\n *\n * Defaults to `\"off\"` to disable the native browser autocomplete, but you can override it if necessary.\n *\n * @since 2.1.0\n */\n this.autocomplete = 'off';\n /**\n * A selector specifying the element the typeahead popup will be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n this.container = this._config.container;\n /**\n * If `true`, model values will not be restricted only to items selected from the popup.\n */\n this.editable = this._config.editable;\n /**\n * If `true`, the first item in the result list will always stay focused while typing.\n */\n this.focusFirst = this._config.focusFirst;\n /**\n * If `true`, automatically selects the item when it is the only one that exactly matches the user input\n *\n * @since 14.2.0\n */\n this.selectOnExact = this._config.selectOnExact;\n /**\n * If `true`, will show the hint in the `` when an item in the result list matches.\n */\n this.showHint = this._config.showHint;\n /**\n * The preferred placement of the typeahead, among the [possible values](#/guides/positioning#api).\n *\n * The default order of preference is `\"bottom-start bottom-end top-start top-end\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n this.placement = this._config.placement;\n /**\n * Allows to change default Popper options when positioning the typeahead.\n * Receives current popper options and returns modified ones.\n *\n * @since 13.1.0\n */\n this.popperOptions = this._config.popperOptions;\n /**\n * An event emitted right before an item is selected from the result list.\n *\n * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent).\n */\n this.selectItem = new EventEmitter();\n this.activeDescendant = null;\n this.popupId = `ngb-typeahead-${nextWindowId++}`;\n this._onTouched = () => {};\n this._onChange = _ => {};\n }\n ngOnInit() {\n this._subscribeToUserInput();\n }\n ngOnChanges({\n ngbTypeahead\n }) {\n if (ngbTypeahead && !ngbTypeahead.firstChange) {\n this._unsubscribeFromUserInput();\n this._subscribeToUserInput();\n }\n }\n ngOnDestroy() {\n this._closePopup();\n this._unsubscribeFromUserInput();\n }\n registerOnChange(fn) {\n this._onChange = fn;\n }\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n writeValue(value) {\n this._writeInputValue(this._formatItemForInput(value));\n if (this.showHint) {\n this._inputValueBackup = value;\n }\n }\n setDisabledState(isDisabled) {\n this._nativeElement.disabled = isDisabled;\n }\n /**\n * Dismisses typeahead popup window\n */\n dismissPopup() {\n if (this.isPopupOpen()) {\n this._resubscribeTypeahead$.next(null);\n this._closePopup();\n if (this.showHint && this._inputValueBackup !== null) {\n this._writeInputValue(this._inputValueBackup);\n }\n this._changeDetector.markForCheck();\n }\n }\n /**\n * Returns true if the typeahead popup window is displayed\n */\n isPopupOpen() {\n return this._windowRef != null;\n }\n handleBlur() {\n this._resubscribeTypeahead$.next(null);\n this._onTouched();\n }\n handleKeyDown(event) {\n if (!this.isPopupOpen()) {\n return;\n }\n /* eslint-disable-next-line deprecation/deprecation */\n switch (event.which) {\n case Key.ArrowDown:\n event.preventDefault();\n this._windowRef.instance.next();\n this._showHint();\n break;\n case Key.ArrowUp:\n event.preventDefault();\n this._windowRef.instance.prev();\n this._showHint();\n break;\n case Key.Enter:\n case Key.Tab:\n {\n const result = this._windowRef.instance.getActive();\n if (isDefined(result)) {\n event.preventDefault();\n event.stopPropagation();\n this._selectResult(result);\n }\n this._closePopup();\n break;\n }\n }\n }\n _openPopup() {\n if (!this.isPopupOpen()) {\n this._inputValueBackup = this._nativeElement.value;\n const {\n windowRef\n } = this._popupService.open();\n this._windowRef = windowRef;\n this._windowRef.setInput('id', this.popupId);\n this._windowRef.setInput('popupClass', this.popupClass);\n this._windowRef.instance.selectEvent.subscribe(result => this._selectResultClosePopup(result));\n this._windowRef.instance.activeChangeEvent.subscribe(activeId => this.activeDescendant = activeId);\n if (this.container === 'body') {\n this._windowRef.location.nativeElement.style.zIndex = '1055';\n this._document.body.appendChild(this._windowRef.location.nativeElement);\n }\n this._changeDetector.markForCheck();\n // Setting up popper and scheduling updates when zone is stable\n this._ngZone.runOutsideAngular(() => {\n if (this._windowRef) {\n this._positioning.createPopper({\n hostElement: this._nativeElement,\n targetElement: this._windowRef.location.nativeElement,\n placement: this.placement,\n appendToBody: this.container === 'body',\n updatePopperOptions: options => this.popperOptions(addPopperOffset([0, 2])(options))\n });\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => this._positioning.update());\n }\n });\n ngbAutoClose(this._ngZone, this._document, 'outside', () => this.dismissPopup(), this._closed$, [this._nativeElement, this._windowRef.location.nativeElement]);\n }\n }\n _closePopup() {\n this._popupService.close().subscribe(() => {\n this._positioning.destroy();\n this._zoneSubscription?.unsubscribe();\n this._closed$.next();\n this._windowRef = null;\n this.activeDescendant = null;\n });\n }\n _selectResult(result) {\n let defaultPrevented = false;\n this.selectItem.emit({\n item: result,\n preventDefault: () => {\n defaultPrevented = true;\n }\n });\n this._resubscribeTypeahead$.next(null);\n if (!defaultPrevented) {\n this.writeValue(result);\n this._onChange(result);\n }\n }\n _selectResultClosePopup(result) {\n this._selectResult(result);\n this._closePopup();\n }\n _showHint() {\n if (this.showHint && this._windowRef?.instance.hasActive() && this._inputValueBackup != null) {\n const userInputLowerCase = this._inputValueBackup.toLowerCase();\n const formattedVal = this._formatItemForInput(this._windowRef.instance.getActive());\n if (userInputLowerCase === formattedVal.substring(0, this._inputValueBackup.length).toLowerCase()) {\n this._writeInputValue(this._inputValueBackup + formattedVal.substring(this._inputValueBackup.length));\n this._nativeElement['setSelectionRange'].apply(this._nativeElement, [this._inputValueBackup.length, formattedVal.length]);\n } else {\n this._writeInputValue(formattedVal);\n }\n }\n }\n _formatItemForInput(item) {\n return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item);\n }\n _writeInputValue(value) {\n this._nativeElement.value = toString(value);\n }\n _subscribeToUserInput() {\n const results$ = this._valueChanges$.pipe(tap(value => {\n this._inputValueBackup = this.showHint ? value : null;\n this._inputValueForSelectOnExact = this.selectOnExact ? value : null;\n this._onChange(this.editable ? value : undefined);\n }), this.ngbTypeahead ? this.ngbTypeahead : () => of([]));\n this._subscription = this._resubscribeTypeahead$.pipe(switchMap(() => results$)).subscribe(results => {\n if (!results || results.length === 0) {\n this._closePopup();\n } else {\n // when there is only one result and this matches the input value\n if (this.selectOnExact && results.length === 1 && this._formatItemForInput(results[0]) === this._inputValueForSelectOnExact) {\n this._selectResult(results[0]);\n this._closePopup();\n } else {\n this._openPopup();\n this._windowRef.setInput('focusFirst', this.focusFirst);\n this._windowRef.setInput('results', results);\n this._windowRef.setInput('term', this._nativeElement.value);\n if (this.resultFormatter) {\n this._windowRef.setInput('formatter', this.resultFormatter);\n }\n if (this.resultTemplate) {\n this._windowRef.setInput('resultTemplate', this.resultTemplate);\n }\n this._windowRef.instance.resetActive();\n // The observable stream we are subscribing to might have async steps\n // and if a component containing typeahead is using the OnPush strategy\n // the change detection turn wouldn't be invoked automatically.\n this._windowRef.changeDetectorRef.detectChanges();\n this._showHint();\n }\n }\n // live announcer\n const count = results ? results.length : 0;\n this._live.say(count === 0 ? 'No results available' : `${count} result${count === 1 ? '' : 's'} available`);\n });\n }\n _unsubscribeFromUserInput() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n this._subscription = null;\n }\n static {\n this.ɵfac = function NgbTypeahead_Factory(t) {\n return new (t || NgbTypeahead)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgbTypeahead,\n selectors: [[\"input\", \"ngbTypeahead\", \"\"]],\n hostAttrs: [\"autocapitalize\", \"off\", \"autocorrect\", \"off\", \"role\", \"combobox\"],\n hostVars: 7,\n hostBindings: function NgbTypeahead_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"blur\", function NgbTypeahead_blur_HostBindingHandler() {\n return ctx.handleBlur();\n })(\"keydown\", function NgbTypeahead_keydown_HostBindingHandler($event) {\n return ctx.handleKeyDown($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"autocomplete\", ctx.autocomplete);\n i0.ɵɵattribute(\"aria-autocomplete\", ctx.showHint ? \"both\" : \"list\")(\"aria-activedescendant\", ctx.activeDescendant)(\"aria-owns\", ctx.isPopupOpen() ? ctx.popupId : null)(\"aria-expanded\", ctx.isPopupOpen());\n i0.ɵɵclassProp(\"open\", ctx.isPopupOpen());\n }\n },\n inputs: {\n autocomplete: \"autocomplete\",\n container: \"container\",\n editable: \"editable\",\n focusFirst: \"focusFirst\",\n inputFormatter: \"inputFormatter\",\n ngbTypeahead: \"ngbTypeahead\",\n resultFormatter: \"resultFormatter\",\n resultTemplate: \"resultTemplate\",\n selectOnExact: \"selectOnExact\",\n showHint: \"showHint\",\n placement: \"placement\",\n popperOptions: \"popperOptions\",\n popupClass: \"popupClass\"\n },\n outputs: {\n selectItem: \"selectItem\"\n },\n exportAs: [\"ngbTypeahead\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTypeahead),\n multi: true\n }]), i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return NgbTypeahead;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbTypeaheadModule = /*#__PURE__*/(() => {\n class NgbTypeaheadModule {\n static {\n this.ɵfac = function NgbTypeaheadModule_Factory(t) {\n return new (t || NgbTypeaheadModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbTypeaheadModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbTypeaheadModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A configuration service for the [`NgbOffcanvas`](#/components/offcanvas/api#NgbOffcanvas) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all offcanvases used in the application.\n *\n * @since 12.1.0\n */\nlet NgbOffcanvasConfig = /*#__PURE__*/(() => {\n class NgbOffcanvasConfig {\n constructor() {\n this._ngbConfig = inject(NgbConfig);\n this.backdrop = true;\n this.keyboard = true;\n this.position = 'start';\n this.scroll = false;\n }\n get animation() {\n return this._animation ?? this._ngbConfig.animation;\n }\n set animation(animation) {\n this._animation = animation;\n }\n static {\n this.ɵfac = function NgbOffcanvasConfig_Factory(t) {\n return new (t || NgbOffcanvasConfig)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbOffcanvasConfig,\n factory: NgbOffcanvasConfig.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbOffcanvasConfig;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A reference to the currently opened (active) offcanvas.\n *\n * Instances of this class can be injected into your component passed as offcanvas content.\n * So you can `.close()` or `.dismiss()` the offcanvas window from your component.\n *\n * @since 12.1.0\n */\nclass NgbActiveOffcanvas {\n /**\n * Closes the offcanvas with an optional `result` value.\n *\n * The `NgbOffcanvasRef.result` promise will be resolved with the provided value.\n */\n close(result) {}\n /**\n * Dismisses the offcanvas with an optional `reason` value.\n *\n * The `NgbOffcanvasRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason) {}\n}\n/**\n * A reference to the newly opened offcanvas returned by the `NgbOffcanvas.open()` method.\n *\n * @since 12.1.0\n */\nclass NgbOffcanvasRef {\n /**\n * The instance of a component used for the offcanvas content.\n *\n * When a `TemplateRef` is used as the content or when the offcanvas is closed, will return `undefined`.\n */\n get componentInstance() {\n if (this._contentRef && this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n /**\n * The observable that emits when the offcanvas is closed via the `.close()` method.\n *\n * It will emit the result passed to the `.close()` method.\n */\n get closed() {\n return this._closed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when the offcanvas is dismissed via the `.dismiss()` method.\n *\n * It will emit the reason passed to the `.dismissed()` method by the user, or one of the internal\n * reasons like backdrop click or ESC key press.\n */\n get dismissed() {\n return this._dismissed.asObservable().pipe(takeUntil(this._hidden));\n }\n /**\n * The observable that emits when both offcanvas window and backdrop are closed and animations were finished.\n * At this point offcanvas and backdrop elements will be removed from the DOM tree.\n *\n * This observable will be completed after emitting.\n */\n get hidden() {\n return this._hidden.asObservable();\n }\n /**\n * The observable that emits when offcanvas is fully visible and animation was finished.\n * The offcanvas DOM element is always available synchronously after calling 'offcanvas.open()' service.\n *\n * This observable will be completed after emitting.\n * It will not emit, if offcanvas is closed before open animation is finished.\n */\n get shown() {\n return this._panelCmptRef.instance.shown.asObservable();\n }\n constructor(_panelCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) {\n this._panelCmptRef = _panelCmptRef;\n this._contentRef = _contentRef;\n this._backdropCmptRef = _backdropCmptRef;\n this._beforeDismiss = _beforeDismiss;\n this._closed = new Subject();\n this._dismissed = new Subject();\n this._hidden = new Subject();\n _panelCmptRef.instance.dismissEvent.subscribe(reason => {\n this.dismiss(reason);\n });\n if (_backdropCmptRef) {\n _backdropCmptRef.instance.dismissEvent.subscribe(reason => {\n this.dismiss(reason);\n });\n }\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n /**\n * Closes the offcanvas with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result) {\n if (this._panelCmptRef) {\n this._closed.next(result);\n this._resolve(result);\n this._removeOffcanvasElements();\n }\n }\n _dismiss(reason) {\n this._dismissed.next(reason);\n this._reject(reason);\n this._removeOffcanvasElements();\n }\n /**\n * Dismisses the offcanvas with an optional `reason` value.\n *\n * The `NgbOffcanvasRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason) {\n if (this._panelCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n if (isPromise(dismiss)) {\n dismiss.then(result => {\n if (result !== false) {\n this._dismiss(reason);\n }\n }, () => {});\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n _removeOffcanvasElements() {\n const panelTransition$ = this._panelCmptRef.instance.hide();\n const backdropTransition$ = this._backdropCmptRef ? this._backdropCmptRef.instance.hide() : of(undefined);\n // hiding panel\n panelTransition$.subscribe(() => {\n const {\n nativeElement\n } = this._panelCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n this._panelCmptRef.destroy();\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n this._panelCmptRef = null;\n this._contentRef = null;\n });\n // hiding backdrop\n backdropTransition$.subscribe(() => {\n if (this._backdropCmptRef) {\n const {\n nativeElement\n } = this._backdropCmptRef.location;\n nativeElement.parentNode.removeChild(nativeElement);\n this._backdropCmptRef.destroy();\n this._backdropCmptRef = null;\n }\n });\n // all done\n zip(panelTransition$, backdropTransition$).subscribe(() => {\n this._hidden.next();\n this._hidden.complete();\n });\n }\n}\nvar OffcanvasDismissReasons = /*#__PURE__*/function (OffcanvasDismissReasons) {\n OffcanvasDismissReasons[OffcanvasDismissReasons[\"BACKDROP_CLICK\"] = 0] = \"BACKDROP_CLICK\";\n OffcanvasDismissReasons[OffcanvasDismissReasons[\"ESC\"] = 1] = \"ESC\";\n return OffcanvasDismissReasons;\n}(OffcanvasDismissReasons || {});\nlet NgbOffcanvasBackdrop = /*#__PURE__*/(() => {\n class NgbOffcanvasBackdrop {\n constructor() {\n this._nativeElement = inject(ElementRef).nativeElement;\n this._zone = inject(NgZone);\n this.dismissEvent = new EventEmitter();\n }\n ngOnInit() {\n this._zone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n ngbRunTransition(this._zone, this._nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n element.classList.add('show');\n }, {\n animation: this.animation,\n runningTransition: 'continue'\n });\n });\n }\n hide() {\n return ngbRunTransition(this._zone, this._nativeElement, ({\n classList\n }) => classList.remove('show'), {\n animation: this.animation,\n runningTransition: 'stop'\n });\n }\n dismiss() {\n if (!this.static) {\n this.dismissEvent.emit(OffcanvasDismissReasons.BACKDROP_CLICK);\n }\n }\n static {\n this.ɵfac = function NgbOffcanvasBackdrop_Factory(t) {\n return new (t || NgbOffcanvasBackdrop)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbOffcanvasBackdrop,\n selectors: [[\"ngb-offcanvas-backdrop\"]],\n hostVars: 6,\n hostBindings: function NgbOffcanvasBackdrop_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"mousedown\", function NgbOffcanvasBackdrop_mousedown_HostBindingHandler() {\n return ctx.dismiss();\n });\n }\n if (rf & 2) {\n i0.ɵɵclassMap(\"offcanvas-backdrop\" + (ctx.backdropClass ? \" \" + ctx.backdropClass : \"\"));\n i0.ɵɵclassProp(\"show\", !ctx.animation)(\"fade\", ctx.animation);\n }\n },\n inputs: {\n animation: \"animation\",\n backdropClass: \"backdropClass\",\n static: \"static\"\n },\n outputs: {\n dismissEvent: \"dismiss\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 0,\n vars: 0,\n template: function NgbOffcanvasBackdrop_Template(rf, ctx) {},\n encapsulation: 2\n });\n }\n }\n return NgbOffcanvasBackdrop;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbOffcanvasPanel = /*#__PURE__*/(() => {\n class NgbOffcanvasPanel {\n constructor() {\n this._document = inject(DOCUMENT);\n this._elRef = inject(ElementRef);\n this._zone = inject(NgZone);\n this._closed$ = new Subject();\n this._elWithFocus = null; // element that is focused prior to offcanvas opening\n this.keyboard = true;\n this.position = 'start';\n this.dismissEvent = new EventEmitter();\n this.shown = new Subject();\n this.hidden = new Subject();\n }\n dismiss(reason) {\n this.dismissEvent.emit(reason);\n }\n ngOnInit() {\n this._elWithFocus = this._document.activeElement;\n this._zone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this._show();\n });\n }\n ngOnDestroy() {\n this._disableEventHandling();\n }\n hide() {\n const context = {\n animation: this.animation,\n runningTransition: 'stop'\n };\n const offcanvasTransition$ = ngbRunTransition(this._zone, this._elRef.nativeElement, element => {\n element.classList.remove('showing');\n element.classList.add('hiding');\n return () => element.classList.remove('show', 'hiding');\n }, context);\n offcanvasTransition$.subscribe(() => {\n this.hidden.next();\n this.hidden.complete();\n });\n this._disableEventHandling();\n this._restoreFocus();\n return offcanvasTransition$;\n }\n _show() {\n const context = {\n animation: this.animation,\n runningTransition: 'continue'\n };\n const offcanvasTransition$ = ngbRunTransition(this._zone, this._elRef.nativeElement, (element, animation) => {\n if (animation) {\n reflow(element);\n }\n element.classList.add('show', 'showing');\n return () => element.classList.remove('showing');\n }, context);\n offcanvasTransition$.subscribe(() => {\n this.shown.next();\n this.shown.complete();\n });\n this._enableEventHandling();\n this._setFocus();\n }\n _enableEventHandling() {\n const {\n nativeElement\n } = this._elRef;\n this._zone.runOutsideAngular(() => {\n fromEvent(nativeElement, 'keydown').pipe(takeUntil(this._closed$), /* eslint-disable-next-line deprecation/deprecation */\n filter(e => e.which === Key.Escape)).subscribe(event => {\n if (this.keyboard) {\n requestAnimationFrame(() => {\n if (!event.defaultPrevented) {\n this._zone.run(() => this.dismiss(OffcanvasDismissReasons.ESC));\n }\n });\n }\n });\n });\n }\n _disableEventHandling() {\n this._closed$.next();\n }\n _setFocus() {\n const {\n nativeElement\n } = this._elRef;\n if (!nativeElement.contains(document.activeElement)) {\n const autoFocusable = nativeElement.querySelector(`[ngbAutofocus]`);\n const firstFocusable = getFocusableBoundaryElements(nativeElement)[0];\n const elementToFocus = autoFocusable || firstFocusable || nativeElement;\n elementToFocus.focus();\n }\n }\n _restoreFocus() {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n let elementToFocus;\n if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n this._zone.runOutsideAngular(() => {\n setTimeout(() => elementToFocus.focus());\n this._elWithFocus = null;\n });\n }\n static {\n this.ɵfac = function NgbOffcanvasPanel_Factory(t) {\n return new (t || NgbOffcanvasPanel)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgbOffcanvasPanel,\n selectors: [[\"ngb-offcanvas-panel\"]],\n hostAttrs: [\"role\", \"dialog\", \"tabindex\", \"-1\"],\n hostVars: 5,\n hostBindings: function NgbOffcanvasPanel_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-modal\", true)(\"aria-labelledby\", ctx.ariaLabelledBy)(\"aria-describedby\", ctx.ariaDescribedBy);\n i0.ɵɵclassMap(\"offcanvas offcanvas-\" + ctx.position + (ctx.panelClass ? \" \" + ctx.panelClass : \"\"));\n }\n },\n inputs: {\n animation: \"animation\",\n ariaLabelledBy: \"ariaLabelledBy\",\n ariaDescribedBy: \"ariaDescribedBy\",\n keyboard: \"keyboard\",\n panelClass: \"panelClass\",\n position: \"position\"\n },\n outputs: {\n dismissEvent: \"dismiss\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function NgbOffcanvasPanel_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n encapsulation: 2\n });\n }\n }\n return NgbOffcanvasPanel;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbOffcanvasStack = /*#__PURE__*/(() => {\n class NgbOffcanvasStack {\n constructor() {\n this._applicationRef = inject(ApplicationRef);\n this._injector = inject(Injector);\n this._document = inject(DOCUMENT);\n this._scrollBar = inject(ScrollBar);\n this._activePanelCmptHasChanged = new Subject();\n this._scrollBarRestoreFn = null;\n this._backdropAttributes = ['animation', 'backdropClass'];\n this._panelAttributes = ['animation', 'ariaDescribedBy', 'ariaLabelledBy', 'keyboard', 'panelClass', 'position'];\n this._activeInstance = new EventEmitter();\n const ngZone = inject(NgZone);\n // Trap focus on active PanelCmpt\n this._activePanelCmptHasChanged.subscribe(() => {\n if (this._panelCmpt) {\n ngbFocusTrap(ngZone, this._panelCmpt.location.nativeElement, this._activePanelCmptHasChanged);\n }\n });\n }\n _restoreScrollBar() {\n const scrollBarRestoreFn = this._scrollBarRestoreFn;\n if (scrollBarRestoreFn) {\n this._scrollBarRestoreFn = null;\n scrollBarRestoreFn();\n }\n }\n _hideScrollBar() {\n if (!this._scrollBarRestoreFn) {\n this._scrollBarRestoreFn = this._scrollBar.hide();\n }\n }\n open(contentInjector, content, options) {\n const containerEl = options.container instanceof HTMLElement ? options.container : isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body;\n if (!containerEl) {\n throw new Error(`The specified offcanvas container \"${options.container || 'body'}\" was not found in the DOM.`);\n }\n if (!options.scroll) {\n this._hideScrollBar();\n }\n const activeOffcanvas = new NgbActiveOffcanvas();\n const contentRef = this._getContentRef(options.injector || contentInjector, content, activeOffcanvas);\n let backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(containerEl) : undefined;\n let panelCmptRef = this._attachWindowComponent(containerEl, contentRef.nodes);\n let ngbOffcanvasRef = new NgbOffcanvasRef(panelCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n this._registerOffcanvasRef(ngbOffcanvasRef);\n this._registerPanelCmpt(panelCmptRef);\n ngbOffcanvasRef.hidden.pipe(finalize(() => this._restoreScrollBar())).subscribe();\n activeOffcanvas.close = result => {\n ngbOffcanvasRef.close(result);\n };\n activeOffcanvas.dismiss = reason => {\n ngbOffcanvasRef.dismiss(reason);\n };\n this._applyPanelOptions(panelCmptRef.instance, options);\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackdropOptions(backdropCmptRef.instance, options);\n backdropCmptRef.changeDetectorRef.detectChanges();\n }\n panelCmptRef.changeDetectorRef.detectChanges();\n return ngbOffcanvasRef;\n }\n get activeInstance() {\n return this._activeInstance;\n }\n dismiss(reason) {\n this._offcanvasRef?.dismiss(reason);\n }\n hasOpenOffcanvas() {\n return !!this._offcanvasRef;\n }\n _attachBackdrop(containerEl) {\n let backdropCmptRef = createComponent(NgbOffcanvasBackdrop, {\n environmentInjector: this._applicationRef.injector,\n elementInjector: this._injector\n });\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n _attachWindowComponent(containerEl, projectableNodes) {\n let panelCmptRef = createComponent(NgbOffcanvasPanel, {\n environmentInjector: this._applicationRef.injector,\n elementInjector: this._injector,\n projectableNodes\n });\n this._applicationRef.attachView(panelCmptRef.hostView);\n containerEl.appendChild(panelCmptRef.location.nativeElement);\n return panelCmptRef;\n }\n _applyPanelOptions(windowInstance, options) {\n this._panelAttributes.forEach(optionName => {\n if (isDefined(options[optionName])) {\n windowInstance[optionName] = options[optionName];\n }\n });\n }\n _applyBackdropOptions(backdropInstance, options) {\n this._backdropAttributes.forEach(optionName => {\n if (isDefined(options[optionName])) {\n backdropInstance[optionName] = options[optionName];\n }\n });\n backdropInstance.static = options.backdrop === 'static';\n }\n _getContentRef(contentInjector, content, activeOffcanvas) {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n return this._createFromTemplateRef(content, activeOffcanvas);\n } else if (isString(content)) {\n return this._createFromString(content);\n } else {\n return this._createFromComponent(contentInjector, content, activeOffcanvas);\n }\n }\n _createFromTemplateRef(templateRef, activeOffcanvas) {\n const context = {\n $implicit: activeOffcanvas,\n close(result) {\n activeOffcanvas.close(result);\n },\n dismiss(reason) {\n activeOffcanvas.dismiss(reason);\n }\n };\n const viewRef = templateRef.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n _createFromString(content) {\n const component = this._document.createTextNode(`${content}`);\n return new ContentRef([[component]]);\n }\n _createFromComponent(contentInjector, componentType, context) {\n const elementInjector = Injector.create({\n providers: [{\n provide: NgbActiveOffcanvas,\n useValue: context\n }],\n parent: contentInjector\n });\n const componentRef = createComponent(componentType, {\n environmentInjector: this._applicationRef.injector,\n elementInjector\n });\n const componentNativeEl = componentRef.location.nativeElement;\n this._applicationRef.attachView(componentRef.hostView);\n return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);\n }\n _registerOffcanvasRef(ngbOffcanvasRef) {\n const unregisterOffcanvasRef = () => {\n this._offcanvasRef = undefined;\n this._activeInstance.emit(this._offcanvasRef);\n };\n this._offcanvasRef = ngbOffcanvasRef;\n this._activeInstance.emit(this._offcanvasRef);\n ngbOffcanvasRef.result.then(unregisterOffcanvasRef, unregisterOffcanvasRef);\n }\n _registerPanelCmpt(ngbPanelCmpt) {\n this._panelCmpt = ngbPanelCmpt;\n this._activePanelCmptHasChanged.next();\n ngbPanelCmpt.onDestroy(() => {\n this._panelCmpt = undefined;\n this._activePanelCmptHasChanged.next();\n });\n }\n static {\n this.ɵfac = function NgbOffcanvasStack_Factory(t) {\n return new (t || NgbOffcanvasStack)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbOffcanvasStack,\n factory: NgbOffcanvasStack.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbOffcanvasStack;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * A service for opening an offcanvas.\n *\n * Creating an offcanvas is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n *\n * @since 12.1.0\n */\nlet NgbOffcanvas = /*#__PURE__*/(() => {\n class NgbOffcanvas {\n constructor() {\n this._injector = inject(Injector);\n this._offcanvasStack = inject(NgbOffcanvasStack);\n this._config = inject(NgbOffcanvasConfig);\n }\n /**\n * Opens a new offcanvas panel with the specified content and supplied options.\n *\n * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n * then instances of those components can be injected with an instance of the `NgbActiveOffcanvas` class. You can then\n * use `NgbActiveOffcanvas` methods to close / dismiss offcanvas from \"inside\" of your component.\n *\n * Also see the [`NgbOffcanvasOptions`](#/components/offcanvas/api#NgbOffcanvasOptions) for the list of supported\n * options.\n */\n open(content, options = {}) {\n const combinedOptions = {\n ...this._config,\n animation: this._config.animation,\n ...options\n };\n return this._offcanvasStack.open(this._injector, content, combinedOptions);\n }\n /**\n * Returns an observable that holds the active offcanvas instance.\n */\n get activeInstance() {\n return this._offcanvasStack.activeInstance;\n }\n /**\n * Dismisses the currently displayed offcanvas with the supplied reason.\n */\n dismiss(reason) {\n this._offcanvasStack.dismiss(reason);\n }\n /**\n * Indicates if there is currently an open offcanvas in the application.\n */\n hasOpenOffcanvas() {\n return this._offcanvasStack.hasOpenOffcanvas();\n }\n static {\n this.ɵfac = function NgbOffcanvas_Factory(t) {\n return new (t || NgbOffcanvas)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgbOffcanvas,\n factory: NgbOffcanvas.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return NgbOffcanvas;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgbOffcanvasModule = /*#__PURE__*/(() => {\n class NgbOffcanvasModule {\n static {\n this.ɵfac = function NgbOffcanvasModule_Factory(t) {\n return new (t || NgbOffcanvasModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbOffcanvasModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgbOffcanvasModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst NGB_MODULES = [NgbAccordionModule, NgbAlertModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbOffcanvasModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbScrollSpyModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule];\nlet NgbModule = /*#__PURE__*/(() => {\n class NgbModule {\n static {\n this.ɵfac = function NgbModule_Factory(t) {\n return new (t || NgbModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgbModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [NGB_MODULES, NgbAccordionModule, NgbAlertModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbOffcanvasModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbScrollSpyModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule]\n });\n }\n }\n return NgbModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ModalDismissReasons, NgbAccordionBody, NgbAccordionButton, NgbAccordionCollapse, NgbAccordionConfig, NgbAccordionDirective, NgbAccordionHeader, NgbAccordionItem, NgbAccordionModule, NgbAccordionToggle, NgbActiveModal, NgbActiveOffcanvas, NgbAlert, NgbAlertConfig, NgbAlertModule, NgbCalendar, NgbCalendarBuddhist, NgbCalendarEthiopian, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbCollapse, NgbCollapseConfig, NgbCollapseModule, NgbConfig, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDateStructAdapter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerContent, NgbDatepickerI18n, NgbDatepickerI18nAmharic, NgbDatepickerI18nDefault, NgbDatepickerI18nHebrew, NgbDatepickerKeyboardService, NgbDatepickerModule, NgbDatepickerMonth, NgbDropdown, NgbDropdownAnchor, NgbDropdownButtonItem, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle, NgbHighlight, NgbInputDatepicker, NgbInputDatepickerConfig, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef, NgbModule, NgbNav, NgbNavConfig, NgbNavContent, NgbNavItem, NgbNavItemRole, NgbNavLink, NgbNavLinkBase, NgbNavLinkButton, NgbNavModule, NgbNavOutlet, NgbNavPane, NgbOffcanvas, NgbOffcanvasConfig, NgbOffcanvasModule, NgbOffcanvasRef, NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPages, NgbPaginationPrevious, NgbPopover, NgbPopoverConfig, NgbPopoverModule, NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule, NgbProgressbarStacked, NgbRating, NgbRatingConfig, NgbRatingModule, NgbScrollSpy, NgbScrollSpyConfig, NgbScrollSpyFragment, NgbScrollSpyItem, NgbScrollSpyMenu, NgbScrollSpyModule, NgbScrollSpyService, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource, NgbTimeAdapter, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerI18n, NgbTimepickerModule, NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule, NgbTooltip, NgbTooltipConfig, NgbTooltipModule, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule, OffcanvasDismissReasons };\n","export enum ExamRoutes {\r\n\tHome,\r\n\tMocksHome\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatIconRegistry } from '@angular/material/icon';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { forkJoin } from 'rxjs';\r\nimport { first } from 'rxjs/operators';\r\nimport { KeyValueDataService } from '../../../../database/services/key-value-data.service';\r\nimport { QuestionStateDto } from '../../../../model/exam/state/question-state-dto';\r\nimport { DialogService } from '../../../../service/dialog.service';\r\nimport { ErrorService } from '../../../../service/error/error.service';\r\nimport { ExamToolsService } from '../../../../service/exam-tool.service';\r\nimport { MockExamNavigationService } from '../../../../service/mock-exam-navigation.service';\r\nimport { ProtractorService } from '../../../../service/protractor.service';\r\nimport { MathsTool } from '../../../exam/toolbars/maths-toolbar/classes/maths-tool';\r\nimport { ExamToolIdentifier } from '../../../exam/toolbars/maths-toolbar/classes/tool.enum';\r\nimport { ExamRoutes } from '../../../../enum/exam-routes';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n\tselector: 'app-mock-footer',\r\n\ttemplateUrl: './exam-footer.component.html',\r\n\tstyleUrls: ['./exam-footer.component.scss']\r\n})\r\nexport class MockExamFooterComponent implements OnInit {\r\n\r\n\t@Input() public text!: string;\r\n\t@Input() public enableFlagBtn: boolean = true;\r\n\t@Input() public enableErrorBtn: boolean = true;\r\n\t@Input() public nextButtonLabel: string = \"Next\";\r\n\t@Input() public previousButtonLabel: string = \"Previous\";\r\n\t@Input() public isExam: boolean = false;\r\n\t@Input() public enablePreviousButton: boolean = true;\r\n\t@Input() public enableNextButton: boolean = true;\r\n\t@Input() public isMathsExam: boolean = false;\r\n\r\n\t@Output() public previousButtonAction = new EventEmitter();\r\n\t@Output() public nextButtonAction = new EventEmitter();\r\n\t@Output() public endExamAction = new EventEmitter();\r\n\r\n\r\n\tpublic ExamRoutes = ExamRoutes;\r\n\tpublic isLastQuestion: boolean = false;\r\n\tpublic currentQuestionIndex!: number;\r\n\tpublic examType!: string;\r\n\tpublic ExamToolIdentifier = ExamToolIdentifier;\r\n\tpublic showProtractorSlider: boolean = false;\r\n\tpublic sizeRatio: number = 1;\r\n\r\n\tpublic selectedActions?: string[] = [];\r\n\tpublic flaggedQuestions: number[] = [];\r\n\r\n\tconstructor(private examNavigationService: MockExamNavigationService,\r\n\t\tprivate errorService: ErrorService,\r\n\t\tprivate dialogService: DialogService,\r\n\t\tprivate keyValueDataService: KeyValueDataService,\r\n\t\tprivate toolService: ExamToolsService,\r\n\t\tprivate protractorService: ProtractorService,\r\n\t\tprivate matIconRegistry: MatIconRegistry,\r\n\t\tprivate domSanitizer: DomSanitizer,\r\n\t\tprivate router: Router\r\n\t) {\r\n\t\tthis.matIconRegistry.addSvgIcon(\r\n\t\t\t'Protractor',\r\n\t\t\tthis.domSanitizer.bypassSecurityTrustResourceUrl('./assets/svgs/Protractor.svg')\r\n\t\t);\r\n\t\tthis.matIconRegistry.addSvgIcon(\r\n\t\t\t'Ruler',\r\n\t\t\tthis.domSanitizer.bypassSecurityTrustResourceUrl('./assets/svgs/Ruler.svg')\r\n\t\t);\r\n\t}\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tif (this.isExam) {\r\n\t\t\tforkJoin({\r\n\t\t\t\tlastQuestionIndex: this.examNavigationService.getLastQuestionIndex(),\r\n\t\t\t\tcurrentQuestion: this.examNavigationService.getCurrentQuestion(),\r\n\t\t\t\tflaggedQuestions: this.examNavigationService.getFlaggedQuestionNumbers()\r\n\t\t\t}).subscribe((data: { lastQuestionIndex: number, currentQuestion: QuestionStateDto, flaggedQuestions: number[] }) => {\r\n\t\t\t\tthis.flaggedQuestions = data.flaggedQuestions;\r\n\t\t\t\tthis.handleChanges(data.currentQuestion, data.lastQuestionIndex);\r\n\t\t\t});\r\n\r\n\t\t\tthis.examNavigationService.currentQuestionChange$.subscribe((currentQuestion: QuestionStateDto) => {\r\n\t\t\t\tthis.examNavigationService.getLastQuestionIndex()\r\n\t\t\t\t\t.pipe(first())\r\n\t\t\t\t\t.subscribe((lastQuestionIndex: number) => {\r\n\t\t\t\t\t\tthis.handleChanges(currentQuestion, lastQuestionIndex);\r\n\t\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tthis.keyValueDataService.getExamType().subscribe((examType: string) => {\r\n\t\t\t\tthis.examType = examType;\r\n\t\t\t});\r\n\r\n\t\t\tthis.examNavigationService.flaggedQuestionsChange$.subscribe((flaggedNumbers: number[]) => {\r\n\t\t\t\tthis.flaggedQuestions = flaggedNumbers;\r\n\t\t\t});\r\n\r\n\t\t\tthis.toolService.currentToolChange$.subscribe((val: MathsTool) => {\r\n\t\t\t\tif (val) {\r\n\t\t\t\t\tthis.showHideProtractorSlider(val.type, val.enabled);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic handleChanges(question: QuestionStateDto, lastQuestionIndex: number): void {\r\n\t\tthis.isLastQuestion = question.question.orderIndex === lastQuestionIndex;\r\n\t\tthis.currentQuestionIndex = question.question.orderIndex;\r\n\t}\r\n\r\n\tpublic questionIsFlagged(): boolean {\r\n\t\treturn this.flaggedQuestions.indexOf(this.currentQuestionIndex) !== -1;\r\n\t}\r\n\r\n\tpublic toggleTool(type: ExamToolIdentifier): void {\r\n\t\treturn this.toolService.showHideTool(type);\r\n\t}\r\n\r\n\tpublic flagCurrentQuestion(): void {\r\n\t\tthis.examNavigationService.flagCurrentQuestion();\r\n\t}\r\n\r\n\tpublic showThemesModal(): void {\r\n\t\tthis.dialogService.showThemeSelectionModal();\r\n\t}\r\n\r\n\tpublic invokeNext(): void {\r\n\t\tthis.nextButtonAction.emit();\r\n\t}\r\n\r\n\tpublic invokePrevious(): void {\r\n\t\tthis.previousButtonAction.emit();\r\n\t}\r\n\r\n\tpublic leaveExam(): void {\r\n\t\tif (confirm('Would you like to finish this mock exam?')) {\r\n\t\t\tthis.endExamAction.emit();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tpublic performBackNavigation(route: ExamRoutes): void {\r\n\t\tswitch (route) {\r\n\t\t\tcase ExamRoutes.Home:\r\n\t\t\t\tthis.router.navigateByUrl(\"/\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase ExamRoutes.MocksHome:\r\n\t\t\t\tthis.router.navigateByUrl('/mock/units');\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic updateProtractorSizeRatio(newSizeRatio: number) {\r\n\t\tthis.protractorService.updateProtractorSizeRatio(newSizeRatio);\r\n\t}\r\n\r\n\tprivate showHideProtractorSlider(type: ExamToolIdentifier, value: boolean): void {\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase ExamToolIdentifier.Protractor:\r\n\t\t\t\tthis.showProtractorSlider = value;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t}\r\n\t}\r\n}\r\n","
\r\n\t
\r\n\t\t@if (enablePreviousButton) {\r\n\t\t\r\n\t\t}\r\n\t\t@if (isExam) {\r\n\t\t\r\n\t\t\t@if (examType === 'Maths') {\r\n\t\t\t\r\n\t\t\t}\r\n\t\t\t@if (examType === 'Maths') {\r\n\t\t\t\r\n\t\t\t}\r\n\t\t\t@if (enableFlagBtn) {\r\n\t\t\tflag Flag\r\n\t\t\t}\r\n\t\t\r\n\t\t}\r\n\r\n\t\t@if (enableNextButton && !isLastQuestion) {\r\n\t\t\r\n\t\t}\r\n\t\t@if (isLastQuestion) {\r\n\t\t\r\n\t\t}\r\n\t
\r\n\t@if (showProtractorSlider) {\r\n\t
\r\n\t\tResize Protractor\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t
\r\n\t}\r\n\t@if(!isExam){\r\n\t
\r\n\t\t\r\n\t\t\r\n\t
\r\n\t}\r\n\r\n
\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'app-scroll',\r\n\ttemplateUrl: './scroll-to.component.html',\r\n\tstyleUrls: ['./scroll-to.component.scss']\r\n})\r\nexport class ScrollToComponent implements OnInit, OnDestroy {\r\n\r\n\tpublic pageYoffset: number = 0;\r\n\r\n public ngOnInit(): void {\r\n\t\tdocument.getElementById(\"examBody\")!.addEventListener(\"scroll\", e => this.onScroll(e));\r\n\t}\r\n\r\n\tpublic ngOnDestroy(): void {\r\n\t\tdocument.getElementById(\"examBody\")!.removeEventListener(\"scroll\", e => this.onScroll(e));\r\n\t}\r\n\r\n\tpublic onScroll(event: Event) {\r\n\t\tthis.pageYoffset = document.getElementById(\"examBody\")!.scrollTop;\r\n\t}\r\n\r\n\tpublic scrollToTop(): void {\r\n\t\tdocument.getElementById(\"examBody\")!.scrollTo({\r\n\t\t\tleft: 0,\r\n\t\t\ttop: 0,\r\n\t\t\tbehavior: 'smooth'\r\n\t\t});\r\n\t}\r\n}\r\n","
\r\n @if (pageYoffset > 0) {\r\n \r\n }\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { forkJoin, iif, Observable, of, Subscription } from 'rxjs';\r\nimport { first, map, mergeMap } from 'rxjs/operators';\r\n import { ProgressService } from '../../../../service/progress.service';\r\nimport { ArrayHelperService } from '../../../../common/services/array.service';\r\nimport { CandidateQuestionDataService } from '../../../../database/services/candidate-question-data.service';\r\nimport { QuestionAnswerDataService } from '../../../../database/services/question-answer-data.service';\r\nimport { CandidateQuestionDto } from '../../../../model/exam/candidate-question-dto';\r\nimport { QuestionStateDto } from '../../../../model/exam/state/question-state-dto';\r\nimport { QuestionSectionStateDto } from '../../../../model/exam/state/question-section-state-dto';\r\nimport { MockExamNavigationService } from '../../../../service/mock-exam-navigation.service';\r\n\r\n@Component({\r\n\tselector: 'app-mock-progress-bar',\r\n\ttemplateUrl: './progress-bar.component.html',\r\n\tstyleUrls: ['./progress-bar.component.scss']\r\n})\r\nexport class MockProgressBarComponent implements OnInit {\r\n\r\n\tpublic totalMarks: number = 0;\r\n\tpublic attemptedMarks: number = 0;\r\n\tpublic attemptedQuestionIds: string[] = [];\r\n\tpublic complete: boolean = false;\r\n\tpublic previousQuestion!: QuestionStateDto;\r\n\tpublic currentQuestionChangeSub!: Subscription;\r\n\r\n\tpublic sections: QuestionSectionStateDto[] = [];\r\n\r\n\tconstructor(private examNavigationService: MockExamNavigationService,\r\n\t\tprivate questionAnswerDataService: QuestionAnswerDataService,\r\n\t\tprivate candidateQuestionDataService: CandidateQuestionDataService,\r\n\t\tprivate progressService: ProgressService) { }\r\n\r\n\tpublic ngOnInit(): void {\r\n\r\n\t\tthis.examNavigationService.getQuestionSectionsWithCandidateQuestions()\r\n\t\t\t.pipe(first())\r\n\t\t\t.pipe(map((qsq: QuestionSectionStateDto[]) => qsq.map(x => x.questionStates)))\r\n\t\t\t.pipe(map((qs: QuestionStateDto[][]) => ArrayHelperService.flatten(qs).map((x) => x.question.potentialScore ?? 0)))\r\n\t\t\t.pipe(map((scores: number[]) => {\r\n\t\t\t\tthis.totalMarks = scores.reduce((a, b) => a + b);\r\n\t\t\t}))\r\n\t\t\t.pipe(mergeMap(() => this.updateProgress()))\r\n\t\t\t.subscribe();\r\n\r\n\t\tthis.currentQuestionChangeSub = this.examNavigationService.currentQuestionChange$\r\n\t\t\t.pipe(mergeMap(() => this.updateProgress()))\r\n\t\t\t.subscribe();\r\n\t}\r\n\r\n\tpublic calculateProgress(): string {\r\n\r\n\t\tif (this.attemptedMarks && this.totalMarks) {\r\n\t\t\tconst percentage = (this.attemptedMarks / this.totalMarks) * 100;\r\n\r\n\t\t\tif (percentage >= 100) {\r\n\t\t\t\tthis.complete = true;\r\n\t\t\t} else {\r\n\t\t\t\tthis.complete = false;\r\n\t\t\t}\r\n\r\n\t\t\tthis.progressService.isComplete = this.complete;\r\n\t\t\treturn percentage.toFixed(0);\r\n\t\t}\r\n\r\n\t\treturn '0';\r\n\t}\r\n\r\n\tprivate updateProgress(): Observable {\r\n\r\n\t\treturn this.questionAnswerDataService.getAllAnswers()\r\n\t\t\t.pipe(mergeMap((val) => of(val.filter(x => x.answer.answered()))))\r\n\t\t\t.pipe(mergeMap((val) => this.candidateQuestionDataService.getQuestionsById(val.map(x => x.candidateQuestionId))))\r\n\t\t\t.pipe(map((val) => {\r\n\t\t\t\tval.forEach((question: CandidateQuestionDto) => {\r\n\t\t\t\t\tif (!this.attemptedQuestionIds.includes(question.id)) {\r\n\t\t\t\t\t\tthis.attemptedMarks += question.potentialScore ?? 0;\r\n\t\t\t\t\t\tthis.attemptedQuestionIds.push(question.id);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}));\r\n\t}\r\n}\r\n","
\r\n
\r\n Progress:\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n @if (complete) {\r\n
\r\n Complete\r\n
\r\n }\r\n @if (!complete) {\r\n
\r\n {{calculateProgress()}}%\r\n
\r\n }\r\n
\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { DialogService } from '../../../../service/dialog.service';\r\nimport { ConnectionService } from '../../../../service/connection.service';\r\nimport { KeyValueDataService } from '../../../../database/services/key-value-data.service';\r\n\r\n@Component({\r\n\tselector: 'app-mock-header',\r\n\ttemplateUrl: './exam-header.component.html',\r\n\tstyleUrls: ['./exam-header.component.scss']\r\n})\r\nexport class MockExamHeaderComponent implements OnInit{\r\n\t@Input() public text!: string;\r\n\t@Input() public scheduledFinish!: Date;\r\n\t@Input() public enableTimer: boolean = true;\r\n\t@Input() public showConnectionIndicator: boolean = true;\r\n\t@Input() public showProgressBar: boolean = true;\r\n\t@Input() public isExam: boolean = false;\r\n\tpublic learnerName?: string;\r\n\r\n\t@Output() public timerAction: EventEmitter = new EventEmitter();\r\n\r\n\tconstructor(private connectionService: ConnectionService, private dialogService: DialogService, private keyValueDataService: KeyValueDataService) { }\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tthis.keyValueDataService.getLearnerName().subscribe((learnerName: string) => {\r\n\t\t\tthis.learnerName = learnerName;\r\n\t\t})\r\n\t}\r\n\r\n\tpublic isOnline(): boolean {\r\n\t\treturn this.connectionService.isOnline();\r\n\t}\r\n\r\n\tpublic isOffline(): boolean {\r\n\t\treturn this.connectionService.isOffline();\r\n\t}\r\n\r\n\tpublic showThemesModal(): void {\r\n\t\tthis.dialogService.showThemeSelectionModal();\r\n\t}\r\n\r\n\tpublic timerRedirect(url: string): void {\r\n\t\tthis.timerAction.emit(url);\r\n\t}\r\n}\r\n","
\r\n
\r\n @if (enableTimer) {\r\n \r\n }\r\n
\r\n
\r\n @if (isExam && learnerName) {\r\n Candidate: {{learnerName}}\r\n }\r\n
\r\n
\r\n @if (text) {\r\n @if (isExam) {\r\n Subject: \r\n }{{text}}\r\n }\r\n
\r\n
\r\n @if (showProgressBar) {\r\n \r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ExamLayoutComponent } from './exam-layout/exam-layout.component';\r\nimport { ExamHeaderComponent } from './exam-layout/header/exam-header.component';\r\nimport { ExamFooterComponent } from './exam-layout/footer/exam-footer.component';\r\nimport { ExamTimerComponent } from './exam-layout/header/exam-timer/exam-timer.component';\r\nimport { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { MaterialModule } from '../../material/material.module';\r\nimport { ToolModule } from '../../tool/tool.module';\r\nimport { ProgressBarComponent } from './exam-layout/progress-bar/progress-bar.component';\r\nimport { MockExamFooterComponent } from './exam-layout/mock-footer/exam-footer.component';\r\nimport { ScrollToComponent } from './exam-layout/scroll-to/scroll-to.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MockProgressBarComponent } from './exam-layout/mock-progress-bar/progress-bar.component';\r\nimport { MockExamHeaderComponent } from './exam-layout/mock-header/exam-header.component';\r\n\r\n\r\n@NgModule({\r\n\tdeclarations: [\r\n\t\tExamLayoutComponent,\r\n\t\tExamHeaderComponent,\r\n\t\tExamFooterComponent,\r\n\t\tExamTimerComponent,\r\n\t\tProgressBarComponent,\r\n\t\tMockExamFooterComponent,\r\n\t\tScrollToComponent,\r\n\t\tMockProgressBarComponent,\r\n\t\tMockExamHeaderComponent\r\n\t],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tMaterialModule,\r\n\t\tNgbPopoverModule,\r\n\t\tToolModule,\r\n\t\tFormsModule\r\n\t],\r\n\texports: [\r\n\t\tExamLayoutComponent,\r\n\t\tExamHeaderComponent,\r\n\t\tExamFooterComponent,\r\n\t\tExamTimerComponent,\r\n\t\tNgbPopoverModule,\r\n\t\tProgressBarComponent,\r\n\t\tMockExamFooterComponent,\r\n\t\tScrollToComponent,\r\n\t\tMockProgressBarComponent,\r\n\t\tMockExamHeaderComponent\r\n\t]\r\n})\r\nexport class LayoutModule { }\r\n"],"mappings":"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AAU,GACV,QAAS,QACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,gBAAiB,CACf,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,YACN,UAAW,iBACb,CACF,CACF,CACF,CACF,EACayB,GAAkB,CAC7B,eAAgB,kBAChB,KAAM,CACJ,KAAM,YACN,UAAW,kBACX,gBAAiB,CACf,QAAS,CACP,eAAgB,UAChB,SAAU,GACV,QAAS,UACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,KAAM,CACJ,YAAa,CACX,iBAAkB,CACpB,EACA,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaxB,GAAU,CACrB,eAAgB,UAChB,KAAM,CACJ,KAAM,YACN,UAAW,UACX,gBAAiB,CACf,QAAS,CACP,eAAgB,UAChB,QAAS,UACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,UAChB,SAAU,GACV,QAAS,UACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,YAAa,CACX,eAAgB,cAChB,QAAS,cACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,gBAAiB,CACf,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,YACN,UAAW,iBACb,CACF,CACF,CACF,CACF,EACaX,GAAW,CACtB,eAAgB,WAChB,KAAM,CACJ,KAAM,YACN,UAAW,WACX,gBAAiB,CACf,eAAgB,CACd,eAAgB,iBAChB,SAAU,GACV,QAAS,iBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,eAAgB,CACd,eAAgB,iBAChB,SAAU,GACV,QAAS,iBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,eAAgB,CACd,eAAgB,iBAChB,SAAU,GACV,QAAS,iBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,eAAgB,CACd,eAAgB,iBAChB,SAAU,GACV,QAAS,iBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,YAAa,CACX,iBAAkB,CACpB,EACA,eAAgB,kBAChB,SAAU,GACV,QAAS,kBACT,KAAM,CACJ,KAAM,QA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V,QAAS,cACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,eAAgB,eAChB,SAAU,GACV,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,cAAe,CACb,eAAgB,gBAChB,SAAU,GACV,QAAS,gBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,cAAe,CACb,eAAgB,gBAChB,SAAU,GACV,QAAS,gBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,MAAO,CACL,eAAgB,QAChB,SAAU,GACV,QAAS,QACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACapD,GAAoB,CAC/B,eAAgB,oBAChB,QAAS,qBACT,KAAM,CACJ,KAAM,YACN,UAAW,oBACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,kBAChB,SAAU,GACV,QAAS,kBACT,eAAgB,GAChB,KAAM,CACJ,KAAM,QACR,CACF,EACA,MAAO,CACL,eAAgB,QAChB,SAAU,GACV,QAAS,QACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,MAAO,CACL,eAAgB,QAChB,SAAU,GACV,QAAS,QACT,aAAc,GACd,eAAgB,OAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,YACN,UAAW,gBACb,CACF,CACF,CACF,EACA,kBAAmB,CACjB,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAiB,CAC5B,eAAgB,iBAChB,QAAS,OACT,KAAM,CACJ,KAAM,YACN,UAAW,iBACX,gBAAiB,CACf,KAAM,CACJ,eAAgB,OAChB,SAAU,GACV,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,cAAe,CACb,eAAgB,gBAChB,SAAU,GACV,QAAS,gBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,YACN,UAAW,UACb,CACF,CACF,CACF,CACF,EACa3D,GAAW,CACtB,eAAgB,WAChB,QAAS,OACT,KAAM,CACJ,KAAM,YACN,UAAW,WACX,gBAAiB,CACf,WAAY,CACV,eAAgB,aAChB,SAAU,GACV,QAAS,SACT,aAAc,GACd,eAAgB,MAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,YACN,UAAW,SACb,CACF,CACF,CACF,CACF,CACF,CACF,EACaD,GAAU,CACrB,eAAgB,UAChB,QAAS,MACT,KAAM,CACJ,KAAM,YACN,UAAW,UACX,gBAAiB,CACf,IAAK,CACH,eAAgB,MAChB,SAAU,GACV,QAAS,MACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,MAAO,CACL,eAAgB,QAChB,SAAU,GACV,QAAS,QACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACa8G,GAAmB,CAC9B,eAAgB,mBAChB,QAAS,mBACT,KAAM,CACJ,KAAM,YACN,UAAW,mBACX,gBAAiB,CACf,GAAI,CACF,eAAgB,KAChB,SAAU,GACV,QAAS,KACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,aAAc,CACZ,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,YACN,UAAW,cACb,CACF,CACF,CACF,CACF,EACa/K,GAAe,CAC1B,eAAgB,eAChB,KAAM,CACJ,KAAM,YACN,UAAW,eACX,gBAAiB,CACf,SAAU,CACR,eAAgB,QAChB,QAAS,QACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,SAChB,QAAS,SACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,YAAa,CACX,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACakI,GAA+B,CAC1C,eAAgB,+BAChB,QAAS,qBACT,KAAM,CACJ,KAAM,YACN,UAAW,+BACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,kBAChB,SAAU,GACV,QAAS,kBACT,eAAgB,GAChB,KAAM,CACJ,KAAM,QACR,CACF,EACA,cAAe,CACb,eAAgB,gBAChB,SAAU,GACV,QAAS,gBACT,eAAgB,GAChB,KAAM,CACJ,KAAM,QACR,CACF,EACA,OAAQ,CACN,eAAgB,SAChB,QAAS,SACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,OAAQ,CACN,eAAgB,SAChB,QAAS,SACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,YAAa,CACX,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,UAChB,QAAS,QACT,KAAM,CACJ,KAAM,YACN,UAAW,qBACb,CACF,EACA,kBAAmB,CACjB,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACarG,GAAsB,CACjC,eAAgB,sBAChB,QAAS,QACT,KAAM,CACJ,KAAM,YACN,UAAW,sBACX,gBAAiB,CACf,UAAW,CACT,eAAgB,YAChB,SAAU,GACV,QAAS,YACT,eAAgB,OAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,YACN,UAAW,kBACb,CACF,CACF,CACF,CACF,CACF,CACF,EACaQ,GAAmB,CAC9B,eAAgB,mBAChB,QAAS,OACT,KAAM,CACJ,KAAM,YACN,UAAW,mBACX,gBAAiB,CACf,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,YACN,UAAW,UACb,CACF,EACA,QAAS,CACP,eAAgB,UAChB,SAAU,GACV,QAAS,UACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,SAAU,CACR,eAAgB,WAChB,SAAU,GACV,QAAS,WACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,YAChB,QAAS,YACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,iBAAkB,CAChB,eAAgB,mBAChB,QAAS,mBACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,WAAY,CACV,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,YACN,UAAW,wBACb,CACF,EACA,SAAU,CACR,eAAgB,WAChB,QAAS,WACT,KAAM,CACJ,KAAM,aACN,MAAO,CACL,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,EACA,SAAU,CACR,eAAgB,WAChB,QAAS,OACT,KAAM,CACJ,KAAM,YACN,UAAW,UACb,CACF,EA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CACF,CACF,EACA,YAAa,CACX,eAAgB,cAChB,QAAS,cACT,eAAgB,cAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,EACA,OAAQ,CACN,eAAgB,SAChB,QAAS,SACT,eAAgB,SAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,CACF,CACF,EACaD,GAAY,CACvB,eAAgB,YAChB,KAAM,CACJ,KAAM,YACN,UAAW,YACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,kBAChB,QAAS,kBACT,aAAc,GACd,eAAgB,QAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,YACN,UAAW,OACb,CACF,CACF,CACF,EACA,kBAAmB,CACjB,eAAgB,oBAChB,QAAS,oBACT,aAAc,GACd,eAAgB,QAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,YACN,UAAW,OACb,CACF,CACF,CACF,CACF,CACF,CACF,EACab,GAAQ,CACnB,eAAgB,QAChB,KAAM,CACJ,KAAM,YACN,UAAW,QACX,gBAAiB,CACf,KAAM,CACJ,eAAgB,OAChB,SAAU,GACV,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,SAAU,GACV,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaoF,GAAW,CACtB,eAAgB,WAChB,KAAM,CACJ,KAAM,YACN,UAAW,WACX,gBAAiB,CACf,UAAW,CACT,eAAgB,YAChB,QAAS,YACT,eAAgB,YAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,YACN,UAAW,WACb,CACF,CACF,CACF,EACA,WAAY,CACV,eAAgB,aAChB,QAAS,aACT,eAAgB,aAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,YACN,UAAW,YACb,CACF,CACF,CACF,EACA,kBAAmB,CACjB,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaC,GAAY,CACvB,eAAgB,YAChB,QAAS,YACT,KAAM,CACJ,KAAM,YACN,UAAW,YACX,gBAAiB,CACf,MAAO,CACL,eAAgB,QAChB,SAAU,GACV,QAAS,QACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,IAAK,CACH,eAAgB,MAChB,SAAU,GACV,QAAS,MACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACatE,GAAa,CACxB,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,YACN,UAAW,aACX,gBAAiB,CACf,MAAO,CACL,eAAgB,QAChB,SAAU,GACV,QAAS,QACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,IAAK,CACH,eAAgB,MAChB,SAAU,GACV,QAAS,MACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACawE,GAAe,CAC1B,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,YACN,UAAW,eACX,gBAAiB,CACf,UAAW,CACT,eAAgB,YAChB,SAAU,GACV,QAAS,YACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,WAAY,CACV,eAAgB,aAChB,SAAU,GACV,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,mBAAoB,CAClB,eAAgB,qBAChB,QAAS,qBACT,KAAM,CACJ,KAAM,YACN,UAAW,oBACb,CACF,EACA,oBAAqB,CACnB,eAAgB,sBAChB,QAAS,sBACT,KAAM,CACJ,KAAM,YACN,UAAW,oBACb,CACF,CACF,CACF,CACF,EACaC,GAAqB,CAChC,eAAgB,qBAChB,KAAM,CACJ,KAAM,YACN,UAAW,qBACX,gBAAiB,CACf,OAAQ,CACN,eAAgB,SAChB,QAAS,SACT,KAAM,CACJ,KAAM,YACN,UAAW,aACb,CACF,CACF,CACF,CACF,EACaF,GAAc,CACzB,eAAgB,cAChB,KAAM,CACJ,KAAM,YACN,UAAW,cACX,gBAAiB,CACf,KAAM,CACJ,eAAgB,OAChB,SAAU,GACV,QAAS,OACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,YAAa,OAAQ,QAAS,SAAS,CACzD,CACF,EACA,2BAA4B,CAC1B,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,YACN,UAAW,4BACb,CACF,EACA,sBAAuB,CACrB,eAAgB,wBAChB,QAAS,wBACT,KAAM,CACJ,KAAM,YACN,UAAW,uBACb,CACF,EACA,mBAAoB,CAClB,eAAgB,qBAChB,QAAS,qBACT,KAAM,CACJ,KAAM,YACN,UAAW,oBACb,CACF,EACA,yBAA0B,CACxB,eAAgB,2BAChB,QAAS,2BACT,KAAM,CACJ,KAAM,KACR,CACF,CACF,CACF,CACF,EACa/B,GAA6B,CACxC,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,YACN,UAAW,6BACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,WAAY,CACV,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,WAAY,CACV,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,eAAgB,CACd,eAAgB,iBAChB,QAAS,aACT,KAAM,CACJ,KAAM,SACR,CACF,CACF,CACF,CACF,EACaI,GAAwB,CACnC,eAAgB,wBAChB,QAAS,wBACT,KAAM,CACJ,KAAM,YACN,UAAW,wBACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACavH,GAAqB,CAChC,eAAgB,qBAChB,QAAS,qBACT,KAAM,CACJ,KAAM,YACN,UAAW,qBACX,gBAAiB,CACf,OAAQ,CACN,eAAgB,SAChB,SAAU,GACV,QAAS,SACT,aAAc,GACd,eAAgB,QAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,YACN,UAAW,YACb,CACF,CACF,CACF,CACF,CACF,CACF,EACaC,GAAa,CACxB,eAAgB,aAChB,QAAS,QACT,KAAM,CACJ,KAAM,YACN,UAAW,aACX,gBAAiB,CACf,KAAM,CACJ,eAAgB,OAChB,SAAU,GACV,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,YAChB,QAAS,YACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,MAAO,CACL,eAAgB,QAChB,QAAS,QACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACakK,GAA8B,CACzC,eAAgB,+BAChB,KAAM,CACJ,KAAM,YACN,UAAW,8BACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAuC,CAClD,eAAgB,wCAChB,KAAM,CACJ,KAAM,YACN,UAAW,uCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaP,GAA8B,CACzC,eAAgB,+BAChB,KAAM,CACJ,KAAM,YACN,UAAW,8BACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAuC,CAClD,eAAgB,wCAChB,KAAM,CACJ,KAAM,YACN,UAAW,uCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaG,GAA8B,CACzC,eAAgB,+BAChB,KAAM,CACJ,KAAM,YACN,UAAW,8BACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAuC,CAClD,eAAgB,wCAChB,KAAM,CACJ,KAAM,YACN,UAAW,uCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaK,GAAsC,CACjD,eAAgB,uCAChB,KAAM,CACJ,KAAM,YACN,UAAW,sCACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAA+C,CAC1D,eAAgB,gDAChB,KAAM,CACJ,KAAM,YACN,UAAW,+CACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAqC,CAChD,eAAgB,sCAChB,KAAM,CACJ,KAAM,YACN,UAAW,qCACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAA8C,CACzD,eAAgB,+CAChB,KAAM,CACJ,KAAM,YACN,UAAW,8CACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaL,GAA+B,CAC1C,eAAgB,gCAChB,KAAM,CACJ,KAAM,YACN,UAAW,+BACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,QAAS,CACP,eAAgB,gBAChB,QAAS,gBACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,eAAgB,eAAgB,iBAAkB,eAAgB,aAAa,CACjG,CACF,EACA,YAAa,CACX,eAAgB,oBAChB,QAAS,oBACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,UAAW,cAAe,YAAa,cAAe,kBAAkB,CAC1F,CACF,EACA,+BAAgC,CAC9B,eAAgB,sBAChB,QAAS,sBACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAwC,CACnD,eAAgB,yCAChB,KAAM,CACJ,KAAM,YACN,UAAW,wCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaa,GAA4B,CACvC,eAAgB,6BAChB,KAAM,CACJ,KAAM,YACN,UAAW,4BACX,gBAAiB,CACf,YAAa,CACX,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAqC,CAChD,eAAgB,sCAChB,KAAM,CACJ,KAAM,YACN,UAAW,qCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACab,GAA4B,CACvC,eAAgB,6BAChB,KAAM,CACJ,KAAM,YACN,UAAW,4BACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAqC,CAChD,eAAgB,sCAChB,KAAM,CACJ,KAAM,YACN,UAAW,qCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,C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AW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAA0B,CACrC,eAAgB,2BAChB,KAAM,CACJ,KAAM,YACN,UAAW,0BACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAmC,CAC9C,eAAgB,oCAChB,KAAM,CACJ,KAAM,YACN,UAAW,mCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaH,GAAyB,CACpC,eAAgB,0BAChB,KAAM,CACJ,KAAM,YACN,UAAW,yBACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAkC,CAC7C,eAAgB,mCAChB,KAAM,CACJ,KAAM,YACN,UAAW,kCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaW,GAA8B,CACzC,eAAgB,+B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AAS,gBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,CACF,CACF,CACF,EACaD,GAAsC,CACjD,eAAgB,uCAChB,KAAM,CACJ,KAAM,YACN,UAAW,sCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACazB,GAA6B,CACxC,eAAgB,8BAChB,KAAM,CACJ,KAAM,YACN,UAAW,6BACX,gBAAiB,CACf,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,aAAc,CACZ,eAAgB,gBAChB,QAAS,gBACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,CACF,CACF,CACF,EACaD,GAAsC,CACjD,eAAgB,uCAChB,KAAM,CACJ,KAAM,YACN,UAAW,sCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaG,GAA8B,CACzC,eAAgB,+BAChB,KAAM,CACJ,KAAM,YACN,UAAW,8BACX,gBAAiB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M,QACR,CACF,EACA,aAAc,CACZ,eAAgB,qBAChB,QAAS,qBACT,KAAM,CACJ,KAAM,WACR,CACF,CACF,CACF,CACF,EACaD,GAA4B,CACvC,eAAgB,6BAChB,KAAM,CACJ,KAAM,YACN,UAAW,4BACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaN,GAAqB,CAChC,eAAgB,sBAChB,KAAM,CACJ,KAAM,YACN,UAAW,qBACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAA8B,CACzC,eAAgB,+BAChB,KAAM,CACJ,KAAM,YACN,UAAW,8BACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACa0B,GAAqB,CAChC,eAAgB,sBAChB,KAAM,CACJ,KAAM,YACN,UAAW,qBACX,gBAAiB,CACf,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,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,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,kBAAmB,CACjB,eAAgB,gCAChB,QAAS,gCACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,oBAAqB,CACnB,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,eAAgB,wBAChB,QAAS,wBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAA0C,CACrD,eAAgB,2CAChB,KAAM,CACJ,KAAM,YACN,UAAW,0CACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaK,GAA6B,CACxC,eAAgB,8BAChB,KAAM,CACJ,KAAM,YACN,UAAW,6BACX,gBAAiB,CACf,WAAY,CACV,eAAgB,cAChB,QAAS,cACT,KAAM,CACJ,KAAM,WACR,CACF,EACA,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,gBAAiB,CACf,eAAgB,qBAChB,QAAS,qBACT,KAAM,CACJ,KAAM,WACR,CACF,EACA,kBAAmB,CACjB,eAAgB,gCAChB,QAAS,gCACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,oBAAqB,CACnB,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,eAAgB,wBAChB,QAAS,wBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaH,GAAsC,CACjD,eAAgB,uCAChB,KAAM,CACJ,KAAM,YACN,UAAW,sCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaE,GAAoC,CAC/C,eAAgB,qCAChB,KAAM,CACJ,KAAM,YACN,UAAW,oCACX,gBAAiB,CACf,WAAY,CACV,eAAgB,cAChB,QAAS,cACT,KAAM,CACJ,KAAM,WACR,CACF,EACA,gBAAiB,CACf,eAAgB,qBAChB,QAAS,qBACT,KAAM,CACJ,KAAM,WACR,CACF,EACA,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,kBAAmB,CACjB,eAAgB,gCAChB,QAAS,gCACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,oBAAqB,CACnB,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,eAAgB,wBAChB,QAAS,wBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAA6C,CACxD,eAAgB,8CAChB,KAAM,CACJ,KAAM,YACN,UAAW,6CACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaN,GAAkC,CAC7C,eAAgB,mCAChB,KAAM,CACJ,KAAM,YACN,UAAW,kCACX,gBAAiB,CACf,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,aAAc,CACZ,eAAgB,gBAChB,QAAS,gBACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,WAAY,CACV,eAAgB,cAChB,QAAS,cACT,KAAM,CACJ,KAAM,WACR,CACF,EACA,gBAAiB,CACf,eAAgB,qBAChB,QAAS,qBACT,KAAM,CACJ,KAAM,WACR,CACF,EACA,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,kBAAmB,CACjB,eAAgB,gCAChB,QAAS,gCACT,KAAM,CACJ,KAAM,SACR,CACF,EACA,oBAAqB,CACnB,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,eAAgB,wBAChB,QAAS,wBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAA2C,CACtD,eAAgB,4CAChB,KAAM,CACJ,KAAM,YACN,UAAW,2CACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaG,GAA+B,CAC1C,eAAgB,gCAChB,KAAM,CACJ,KAAM,YACN,UAAW,+BACX,gBAAiB,CACf,aAAc,CACZ,eAAgB,gBAChB,QAAS,gBACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,YAAa,CACX,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,kBAAmB,CACjB,eAAgB,2BAChB,QAAS,2BACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,QAAS,CACP,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,KAAM,CACJ,eAAgB,OAChB,QAAS,OACT,KAAM,CACJ,KAAM,iBACR,CACF,EACA,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,EACaD,GAAwC,CACnD,eAAgB,yCAChB,KAAM,CACJ,KAAM,YACN,UAAW,wCACX,gBAAiB,CACf,UAAW,CACT,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,CACF,CACF,ECv8PO,IAAM2G,GAAc,CACzB,cAAe,CAAC,UAAW,aAAa,EACxC,OAAQ,CACN,aAAc,kBACd,WAAY,GACZ,eAAgB,eAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAwB,CACnC,cAAe,wBACf,OAAQC,EACV,EACaC,GAAS,CACpB,cAAe,SACf,OAAQ,CACN,aAAc,kBACd,WAAY,GACZ,eAAgB,SAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,EAAM,CACjB,cAAe,MACf,OAAQ,CACN,eAAgB,MAChB,SAAU,GACV,QAAS,MACT,KAAM,CACJ,KAAM,QACR,CACF,EACA,aAAc,EAChB,EACaC,GAAU,CACrB,cAAe,UACf,OAAQ,CACN,aAAc,UACd,WAAY,GACZ,eAAgB,UAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAO,CAClB,cAAe,OACf,OAAQ,CACN,aAAc,aACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,EAAmB,CAC9B,cAAe,CAAC,UAAW,kBAAkB,EAC7C,OAAQ,CACN,YAAa,CACX,iBAAkB,CACpB,EACA,eAAgB,UAChB,QAAS,UACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,EAAU,CACrB,cAAe,UACf,OAAQ,CACN,aAAc,aACd,WAAY,GACZ,eAAgB,eAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,EAAY,CACvB,cAAe,CAAC,UAAW,WAAW,EACtC,OAAQ,CACN,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,EAAU,CACrB,cAAe,SACf,OAAQ,CACN,aAAc,kBACd,WAAY,GACZ,eAAgB,SAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,aAAc,QACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,aAAc,OACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,CAAC,UAAW,QAAQ,EACnC,OAAQ,CACN,eAAgB,SAChB,QAAS,SACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,CAAC,UAAW,QAAQ,EACnC,OAAQ,CACN,eAAgB,SAChB,QAAS,SACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAc,CACzB,cAAe,CAAC,UAAW,aAAa,EACxC,OAAQ,CACN,YAAa,CACX,iBAAkB,CACpB,EACA,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAU,CACrB,cAAe,CAAC,UAAW,SAAS,EACpC,OAAQ,CACN,eAAgB,UAChB,QAAS,UACT,eAAgB,4BAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,WAAY,UAAW,QAAQ,CACjD,CACF,CACF,CACF,EACA,iBAAkBC,GAAsB,GAC1C,EACaC,GAAU,CACrB,cAAe,UACf,OAAQC,EACV,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,aAAc,oBACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAW,CACtB,cAAe,UACf,OAAQ,CACN,aAAc,UACd,WAAY,GACZ,eAAgB,UAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAO,CAClB,cAAe,OACf,OAAQ,CACN,eAAgB,OAChB,SAAU,GACV,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,aAAc,QACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAgB,CAC3B,cAAe,gBACf,OAAQ,CACN,eAAgB,iBAChB,SAAU,GACV,QAAS,iBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAuB,CAClC,cAAe,uBACf,OAAQ,CACN,eAAgB,eAChB,SAAU,GACV,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,aAAc,QACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,CAAC,UAAW,OAAO,EAClC,OAAQ,CACN,eAAgB,QAChB,QAAS,QACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAW,CACtB,cAAe,UACf,OAAQ,CACN,aAAc,YACd,WAAY,GACZ,eAAgB,UAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAW,CACtB,cAAe,CAAC,UAAW,UAAU,EACrC,OAAQ,CACN,eAAgB,YAChB,QAAS,YACT,KAAM,CACJ,KAAM,aACN,MAAO,CACL,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACA,uBAAwB,YAC1B,CACF,EACaC,GAAS,CACpB,cAAe,CAAC,UAAW,QAAQ,EACnC,OAAQ,CACN,eAAgB,0BAChB,QAAS,0BACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,YAAa,MAAM,CACrC,CACF,CACF,EACaC,GAAyB,CACpC,cAAe,CAAC,UAAW,2BAA4B,wBAAwB,EAC/E,OAAQ,CACN,eAAgB,gCAChB,QAAS,gCACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAiC,CAC5C,cAAe,CAAC,UAAW,2BAA4B,gCAAgC,EACvF,OAAQ,CACN,eAAgB,sCAChB,QAAS,sCACT,KAAM,CACJ,KAAM,SACR,CACF,CACF,EACaC,GAAU,CACrB,cAAe,CAAC,UAAW,wBAAyB,SAAS,EAC7D,OAAQ,CACN,eAAgB,gBAChB,QAAS,gBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAkB,CAC7B,cAAe,CAAC,UAAW,2BAA4B,iBAAiB,EACxE,OAAQ,CACN,eAAgB,oBAChB,QAAS,oBACT,KAAM,CACJ,KAAM,iBACR,CACF,CACF,EACaC,GAAoB,CAC/B,cAAe,CAAC,UAAW,2BAA4B,mBAAmB,EAC1E,OAAQ,CACN,eAAgB,sBAChB,QAAS,sBACT,KAAM,CACJ,KAAM,iBACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,aAAc,WACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,aAAc,MACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAe,CAC1B,cAAe,CAAC,UAAW,cAAc,EACzC,OAAQ,CACN,eAAgB,eAChB,QAAS,oBACT,aAAc,GACd,eAAgB,mBAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,YACN,UAAW,kBACb,CACF,CACF,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,aAAc,WACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAuB,CAClC,cAAe,CAAC,UAAW,sBAAsB,EACjD,OAAQ,CACN,eAAgB,8BAChB,QAAS,8BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAA0B,CACrC,cAAe,CAAC,UAAW,yBAAyB,EACpD,OAAQ,CACN,eAAgB,iCAChB,QAAS,iCACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,aAAc,SACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAsB,CACjC,cAAe,sBACf,OAAQ,CACN,eAAgB,6BAChB,SAAU,GACV,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAgB,CAC3B,cAAe,CAAC,UAAW,eAAe,EAC1C,OAAQ,CACN,eAAgB,uBAChB,QAAS,uBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,QACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,SACf,OAAQ,CACN,aAAc,UACd,WAAY,GACZ,eAAgB,oBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAW,CACtB,cAAe,CAAC,UAAW,UAAU,EACrC,OAAQ,CACN,eAAgB,sBAChB,QAAS,sBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAkB,CAC7B,cAAe,CAAC,UAAW,iBAAiB,EAC5C,OAAQ,CACN,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAU,CACrB,cAAe,SACf,OAAQ,CACN,aAAc,UACd,WAAY,GACZ,eAAgB,oBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAW,CACtB,cAAe,UACf,OAAQ,CACN,eAAgB,gBAChB,SAAU,GACV,QAAS,gBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAU,CACrB,cAAe,SACf,OAAQ,CACN,aAAc,QACd,WAAY,GACZ,eAAgB,oBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAU,CACrB,cAAe,SACf,OAAQ,CACN,aAAc,QACd,WAAY,GACZ,eAAgB,oBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAc,CACzB,cAAe,CAAC,UAAW,aAAa,EACxC,OAAQ,CACN,eAAgB,0BAChB,QAAS,0BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAU,CACrB,cAAe,SACf,OAAQ,CACN,aAAc,SACd,WAAY,GACZ,eAAgB,oBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAmB,CAC9B,cAAe,kBACf,OAAQ,CACN,eAAgB,yBAChB,SAAU,GACV,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAW,CACtB,cAAe,CAAC,UAAW,SAAS,EACpC,OAAQ,CACN,eAAgB,UAChB,QAAS,UACT,eAAgB,uBAChB,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,OAAQ,UAAW,WAAY,YAAa,mBAAoB,WAAY,OAAQ,qBAAsB,YAAa,qBAAqB,CAC9J,CACF,CACF,CACF,EACA,iBAAkBvC,GAAsB,GAC1C,EACawC,GAAY,CACvB,cAAe,YACf,OAAQ,CACN,eAAgB,YAChB,SAAU,GACV,QAAS,YACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAW,CACtB,cAAe,CAAC,UAAW,UAAU,EACrC,OAAQ,CACN,eAAgB,WAChB,QAAS,WACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAY,CACvB,cAAe,CAAC,UAAW,WAAW,EACtC,OAAQ,CACN,eAAgB,YAChB,QAAS,YACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,CAAC,UAAW,OAAO,EAClC,OAAQ,CACN,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAqB,CAChC,cAAe,CAAC,UAAW,oBAAoB,EAC/C,OAAQ,CACN,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,SACR,CACF,CACF,EACaC,GAAuB,CAClC,cAAe,CAAC,UAAW,sBAAsB,EACjD,OAAQ,CACN,eAAgB,+BAChB,QAAS,+BACT,KAAM,CACJ,KAAM,SACR,CACF,CACF,EACaC,GAAgB,CAC3B,cAAe,CAAC,UAAW,UAAW,eAAe,EACrD,OAAQ,CACN,eAAgB,sBAChB,QAAS,sBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAsB,CACjC,cAAe,CAAC,UAAW,UAAW,qBAAqB,EAC3D,OAAQ,CACN,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAsB,CACjC,cAAe,CAAC,UAAW,UAAW,qBAAqB,EAC3D,OAAQ,CACN,eAAgB,4BAChB,QAAS,4BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAU,CACrB,cAAe,CAAC,UAAW,2BAA4B,SAAS,EAChE,OAAQ,CACN,eAAgB,WAChB,QAAS,WACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAc,CACzB,cAAe,CAAC,UAAW,2BAA4B,aAAa,EACpE,OAAQ,CACN,eAAgB,gBAChB,QAAS,gBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,CAAC,UAAW,2BAA4B,QAAQ,EAC/D,OAAQ,CACN,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAkB,CAC7B,cAAe,CAAC,UAAW,iBAAiB,EAC5C,OAAQ,CACN,eAAgB,wBAChB,QAAS,wBACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,UAAW,MAAM,CACnC,CACF,CACF,EACaC,GAAiB,CAC5B,cAAe,CAAC,UAAW,gBAAgB,EAC3C,OAAQ,CACN,eAAgB,aAChB,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,SACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAgB,CAC3B,cAAe,gBACf,OAAQ,CACN,eAAgB,qBAChB,SAAU,GACV,QAAS,qBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAY,CACvB,cAAe,CAAC,UAAW,WAAW,EACtC,OAAQ,CACN,eAAgB,mBAChB,QAAS,mBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAmB,CAC9B,cAAe,CAAC,UAAW,kBAAmB,kBAAkB,EAChE,OAAQ,CACN,eAAgB,0BAChB,QAAS,0BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAkB,CAC7B,cAAe,CAAC,UAAW,kBAAmB,iBAAiB,EAC/D,OAAQ,CACN,eAAgB,yBAChB,QAAS,yBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAiB,CAC5B,cAAe,CAAC,UAAW,kBAAmB,gBAAgB,EAC9D,OAAQ,CACN,eAAgB,wBAChB,QAAS,wBACT,KAAM,CACJ,KAAM,WACR,CACF,CACF,EACaC,GAAsB,CACjC,cAAe,CAAC,UAAW,kBAAmB,qBAAqB,EACnE,OAAQ,CACN,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAsB,CACjC,cAAe,CAAC,UAAW,kBAAmB,qBAAqB,EACnE,OAAQ,CACN,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAyB,CACpC,cAAe,CAAC,UAAW,kBAAmB,wBAAwB,EACtE,OAAQ,CACN,eAAgB,gCAChB,QAAS,gCACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,uBACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAA2B,CACtC,cAAe,CAAC,UAAW,0BAA0B,EACrD,OAAQ,CACN,eAAgB,sCAChB,QAAS,sCACT,KAAM,CACJ,KAAM,iBACR,CACF,CACF,EACaC,GAAyB,CACpC,cAAe,CAAC,UAAW,wBAAwB,EACnD,OAAQ,CACN,eAAgB,gCAChB,QAAS,gCACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,UAAW,WAAY,QAAQ,CACjD,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,YACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAY,CACvB,cAAe,YACf,OAAQ,CACN,eAAgB,kBAChB,SAAU,GACV,QAAS,kBACT,KAAM,CACJ,KAAM,SACR,CACF,CACF,EACaC,GAAkB,CAC7B,cAAe,CAAC,UAAW,iBAAiB,EAC5C,OAAQ,CACN,eAAgB,wBAChB,QAAS,wBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,WACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAO,CAClB,cAAe,CAAC,UAAW,MAAM,EACjC,OAAQ,CACN,eAAgB,mBAChB,QAAS,mBACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,UAAW,MAAM,CAC7H,CACF,CACF,EACaC,GAAoB,CAC/B,cAAe,CAAC,UAAW,mBAAmB,EAC9C,OAAQ,CACN,eAAgB,0BAChB,QAAS,0BACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,OAAQ,UAAU,CACpC,CACF,CACF,EACaC,GAAwB,CACnC,cAAe,CAAC,UAAW,iCAAkC,uBAAuB,EACpF,OAAQ,CACN,eAAgB,gCAChB,QAAS,gCACT,KAAM,CACJ,KAAM,iBACR,CACF,CACF,EACaC,GAA0B,CACrC,cAAe,CAAC,UAAW,iCAAkC,yBAAyB,EACtF,OAAQ,CACN,eAAgB,kCAChB,QAAS,kCACT,KAAM,CACJ,KAAM,iBACR,CACF,CACF,EACaC,GAAgB,CAC3B,cAAe,CAAC,UAAW,iCAAkC,eAAe,EAC5E,OAAQ,CACN,eAAgB,uBAChB,QAAS,uBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAoB,CAC/B,cAAe,CAAC,UAAW,iCAAkC,mBAAmB,EAChF,OAAQ,CACN,eAAgB,4BAChB,QAAS,4BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAe,CAC1B,cAAe,CAAC,UAAW,iCAAkC,cAAc,EAC3E,OAAQ,CACN,eAAgB,sBAChB,QAAS,sBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAa,CACxB,cAAe,aACf,OAAQ,CACN,eAAgB,mBAChB,SAAU,GACV,QAAS,mBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAiB,CAC5B,cAAe,CAAC,UAAW,gBAAgB,EAC3C,OAAQ,CACN,eAAgB,YAChB,QAAS,YACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAW,CACtB,cAAe,CAAC,UAAW,UAAU,EACrC,OAAQ,CACN,eAAgB,iBAChB,QAAS,iBACT,KAAM,CACJ,KAAM,SACR,CACF,CACF,EACaC,GAAa,CACxB,cAAe,CAAC,UAAW,WAAW,EACtC,OAAQ,CACN,eAAgB,kBAChB,QAAS,kBACT,KAAM,CACJ,KAAM,SACR,CACF,CACF,EACaC,GAAkB,CAC7B,cAAe,kBACf,OAAQ,CACN,aAAc,OACd,WAAY,GACZ,eAAgB,qBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAmB,CAC9B,cAAe,CAAC,UAAW,kBAAkB,EAC7C,OAAQ,CACN,eAAgB,0BAChB,QAAS,0BACT,KAAM,CACJ,KAAM,WACR,CACF,CACF,EACaC,GAA0B,CACrC,cAAe,CAAC,UAAW,yBAAyB,EACpD,OAAQ,CACN,eAAgB,iCAChB,QAAS,iCACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAiB,CAC5B,cAAe,CAAC,UAAW,gBAAgB,EAC3C,OAAQ,CACN,eAAgB,8BAChB,QAAS,8BACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,UAAW,MAAM,CACnC,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,OACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAA0B,CACrC,cAAe,0BACf,OAAQ,CACN,aAAc,QACd,WAAY,GACZ,eAAgB,mBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,SACf,OAAQ,CACN,eAAgB,SAChB,SAAU,GACV,QAAS,SACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,OACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,eAAgB,mBAChB,SAAU,GACV,QAAS,mBACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,UAAW,MAAM,CAC7H,CACF,CACF,EACaC,GAAe,CAC1B,cAAe,CAAC,UAAW,cAAc,EACzC,OAAQC,EACV,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,QACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,OACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAO,CAClB,cAAe,CAAC,UAAW,MAAM,EACjC,OAAQC,EACV,EACaC,GAA0B,CACrC,cAAe,CAAC,UAAW,yBAAyB,EACpD,OAAQ,CACN,eAAgB,cAChB,QAAS,cACT,KAAM,CACJ,KAAM,WACR,CACF,CACF,EACaC,GAA4B,CACvC,cAAe,CAAC,UAAW,2BAA2B,EACtD,OAAQ,CACN,eAAgB,qBAChB,QAAS,qBACT,KAAM,CACJ,KAAM,WACR,CACF,CACF,EACaC,GAAW,CACtB,cAAe,WACf,OAAQ,CACN,aAAc,WACd,WAAY,GACZ,eAAgB,iBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAoB,CAC/B,cAAe,oBACf,OAAQ,CACN,eAAgB,2BAChB,SAAU,GACV,QAAS,2BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAqB,CAChC,cAAe,CAAC,UAAW,oBAAoB,EAC/C,OAAQ,CACN,eAAgB,4BAChB,QAAS,4BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAe,CAC1B,cAAe,CAAC,UAAW,aAAa,EACxC,OAAQ,CACN,aAAc,2BACd,WAAY,GACZ,eAAgB,eAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAQ,CACnB,cAAe,OACf,OAAQ,CACN,eAAgB,OAChB,SAAU,GACV,QAAS,OACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAU,CACrB,cAAe,SACf,OAAQ,CACN,aAAc,kBACd,WAAY,GACZ,eAAgB,SAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,OACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAY,CACvB,cAAe,YACf,OAAQ,CACN,aAAc,SACd,WAAY,GACZ,eAAgB,kBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAoC,CAC/C,cAAe,CAAC,UAAW,iCAAkC,mCAAmC,EAChG,OAAQ,CACN,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAA2B,CACtC,cAAe,CAAC,UAAW,iCAAkC,0BAA0B,EACvF,OAAQ,CACN,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAA0B,CACrC,cAAe,CAAC,UAAW,iCAAkC,yBAAyB,EACtF,OAAQ,CACN,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAa,CACxB,cAAe,YACf,OAAQ,CACN,aAAc,QACd,WAAY,GACZ,eAAgB,kBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAY,CACvB,cAAe,YACf,OAAQ,CACN,eAAgB,mBAChB,SAAU,GACV,QAAS,mBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAc,CACzB,cAAe,cACf,OAAQ,CACN,eAAgB,oBAChB,SAAU,GACV,QAAS,oBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAqB,CAChC,cAAe,CAAC,UAAW,oBAAoB,EAC/C,OAAQ,CACN,eAAgB,4BAChB,QAAS,4BACT,KAAM,CACJ,KAAM,WACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,QACf,OAAQ,CACN,eAAgB,aAChB,SAAU,GACV,QAAS,aACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,WACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAe,CAC1B,cAAe,CAAC,UAAW,cAAc,EACzC,OAAQ,CACN,eAAgB,eAChB,QAAS,eACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAkB,CAC7B,cAAe,CAAC,UAAW,iBAAiB,EAC5C,OAAQ,CACN,eAAgB,6BAChB,QAAS,6BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAuB,CAClC,cAAe,uBACf,OAAQ,CACN,eAAgB,8BAChB,SAAU,GACV,QAAS,8BACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,MAAO,SAAU,WAAW,CAC9C,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,kBACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAY,CACvB,cAAe,WACf,OAAQ,CACN,aAAc,aACd,WAAY,GACZ,eAAgB,iBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,cACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAU,CACrB,cAAe,CAAC,UAAW,iCAAkC,SAAS,EACtE,OAAQ,CACN,eAAgB,8BAChB,QAAS,8BACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAiB,CAC5B,cAAe,CAAC,UAAW,iCAAkC,gBAAgB,EAC7E,OAAQ,CACN,eAAgB,gCAChB,QAAS,gCACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAe,CAC1B,cAAe,CAAC,UAAW,aAAa,EACxC,OAAQ,CACN,eAAgB,oBAChB,QAAS,oBACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,OACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAY,CACvB,cAAe,WACf,OAAQ,CACN,aAAc,YACd,WAAY,GACZ,eAAgB,iBAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAA2B,CACtC,cAAe,CAAC,UAAW,0BAA0B,EACrD,OAAQ,CACN,eAAgB,mCAChB,QAAS,mCACT,KAAM,CACJ,KAAM,SACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,QACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAU,CACrB,cAAe,UACf,OAAQ,CACN,eAAgB,UAChB,SAAU,GACV,QAAS,UACT,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAS,CACpB,cAAe,SACf,OAAQC,EACV,EACaC,GAAS,CACpB,cAAe,OACf,OAAQ,CACN,aAAc,YACd,WAAY,GACZ,eAAgB,OAChB,KAAM,CACJ,KAAM,QACR,CACF,CACF,EACaC,GAAW,CACtB,cAAe,WACf,OAAQ,CACN,aAAc,YACd,eAAgB,gBAChB,SAAU,GACV,QAAS,gBACT,KAAM,CACJ,KAAM,OACN,cAAe,CAAC,YAAa,cAAe,KAAK,CACnD,CACF,CACF,ECl/CO,IAAMC,GAAN,KAAc,CAKnB,YAAYC,EAAQ,CAClB,KAAK,OAASA,CAChB,CAOA,cAAcC,EAAuBC,EAAS,CAC5C,IAAMC,EAAqB,CACzB,sBAAAF,EACA,QAAkBG,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBE,EAA0B,CACxF,CAMA,cAAcH,EAAS,CACrB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBG,EAA0B,CACxF,CAOA,cAAcJ,EAAS,CACrB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBI,EAA0B,CACxF,CAKA,sBAAsBL,EAAS,CAC7B,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBK,EAAkC,CAChG,CAOA,qBAAqBC,EAASP,EAAS,CACrC,IAAMC,EAAqB,CACzB,QAAAM,EACA,QAAkBL,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBO,EAAiC,CAC/F,CAKA,eAAeR,EAAS,CACtB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBQ,EAA2B,CACzF,CASA,YAAYC,EAAeC,EAAsBC,EAAMZ,EAAS,CAC9D,IAAMC,EAAqB,CACzB,cAAAS,EACA,qBAAAC,EACA,KAAAC,EACA,QAAkBV,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBY,EAAwB,CACtF,CAOA,YAAYb,EAAS,CACnB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBa,EAAwB,CACtF,CACF,EAEMC,GAAgB,IAAaC,GAAWC,GAAoB,EAAI,EAChEd,GAA6B,CACjC,KAAM,IACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBe,EACzB,EACA,QAAS,CACP,WAAoBC,EACpB,cAAuBC,EACzB,CACF,EACA,YAAwBrB,GACxB,gBAAiB,CAAYsB,GAAoBC,GAAiBC,CAAgB,EAClF,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,GAAwBC,GAAmBC,EAAoBC,CAAS,EACtG,MAAO,GACP,YAAa,iCACb,UAAW,MACX,WAAYb,EACd,EACMX,GAA6B,CACjC,KAAM,IACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoByB,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoBX,EACpB,cAAuBY,EACzB,CACF,EACA,gBAAiB,CAAYV,GAAoBC,GAAiBC,CAAgB,EAClF,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYG,EAAoBC,EAAsBI,CAAO,EAC/E,MAAO,GACP,WAAYjB,EACd,EACMV,GAA6B,CACjC,KAAM,IACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoB4B,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoBf,EACpB,cAAuBgB,EACzB,CACF,EACA,gBAAiB,CAAYd,GAAoBE,EAA6Ba,EAAK,EACnF,cAAe,CAAYZ,CAAG,EAC9B,iBAAkB,CAAYG,EAAoBC,EAAsBI,CAAO,EAC/E,MAAO,GACP,WAAYjB,EACd,EACMT,GAAqC,CACzC,KAAM,IACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoB+B,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoBnB,EACpB,cAAuBoB,EACzB,CACF,EACA,gBAAiB,CAAYhB,EAA6BiB,GAAkBC,GAAmBC,GAAmBC,GAAwBC,EAAO,EACjJ,cAAe,CAAYpB,CAAG,EAC9B,iBAAkB,CAAYG,EAAoBC,EAAsBI,CAAO,EAC/E,MAAO,GACP,WAAYjB,EACd,EACMP,GAAoC,CACxC,KAAM,IACN,WAAY,OACZ,UAAW,CACT,IAAK,CACH,WAAoBqC,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoB3B,EACpB,cAAuB4B,EACzB,CACF,EACA,YAAwBxC,GACxB,gBAAiB,CAAYc,GAAoBE,EAA6ByB,EAAK,EACnF,cAAe,CAAYxB,CAAG,EAC9B,iBAAkB,CAAYC,GAAwBC,GAAmBC,EAAoBC,CAAS,EACtG,MAAO,GACP,YAAa,iCACb,UAAW,MACX,WAAYb,EACd,EACMN,GAA8B,CAClC,KAAM,IACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBwC,EACzB,EACA,QAAS,CACP,WAAoB9B,EACpB,cAAuB+B,EACzB,CACF,EACA,gBAAiB,CAAY5B,GAAiB6B,EAAQ,EACtD,cAAe,CAAY3B,CAAG,EAC9B,iBAAkB,CAAYG,EAAoBK,CAAO,EACzD,MAAO,GACP,WAAYjB,EACd,EACMF,GAA2B,CAC/B,KAAM,IACN,WAAY,OACZ,UAAW,CACT,IAAK,CACH,WAAY,CACV,KAAM,CACJ,KAAM,QACR,EACA,eAAgB,gBAClB,EACA,cAAuBuC,EACzB,EACA,QAAS,CACP,WAAoBjC,EACpB,cAAuBkC,EACzB,CACF,EACA,YAAwBzC,GACxB,gBAAiB,CAAYW,EAA6B+B,EAAK,EAC/D,cAAe,CAAY9B,CAAG,EAC9B,iBAAkB,CAAYC,GAAwBC,GAAmBC,EAAoBC,EAAsBlB,GAA0BC,EAAoB,EACjK,MAAO,GACP,YAAa,iCACb,UAAW,MACX,WAAYI,EACd,EACMD,GAA2B,CAC/B,KAAM,IACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoByC,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoBrC,EACpB,cAAuBsC,EACzB,CACF,EACA,gBAAiB,CAAYlC,EAA6BmB,GAAmBC,GAAwBe,GAAkBC,EAAK,EAC5H,cAAe,CAAYnC,CAAG,EAC9B,iBAAkB,CAAYG,EAAoBC,EAAsBI,CAAO,EAC/E,MAAO,GACP,WAAYjB,EACd,EChRO,IAAM6C,GAAN,KAAgB,CAKrB,YAAYC,EAAQ,CAClB,KAAK,OAASA,CAChB,CAMA,OAAOC,EAAS,CACd,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBE,EAAmB,CACjF,CAMA,cAAcH,EAAS,CACrB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBG,EAA0B,CACxF,CAMA,OAAOJ,EAAS,CACd,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBI,EAAmB,CACjF,CAKA,YAAYL,EAAS,CACnB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBK,EAAwB,CACtF,CAMA,gBAAgBN,EAAS,CACvB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBM,EAA4B,CAC1F,CAMA,gBAAgBP,EAAS,CACvB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBO,EAA4B,CAC1F,CAKA,QAAQR,EAAS,CACf,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBQ,EAAoB,CAClF,CAMA,OAAOC,EAAqBV,EAAS,CACnC,IAAMC,EAAqB,CACzB,oBAAAS,EACA,QAAkBR,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBU,EAAmB,CACjF,CASA,YAAYC,EAAeC,EAAsBC,EAAMd,EAAS,CAC9D,IAAMC,EAAqB,CACzB,cAAAW,EACA,qBAAAC,EACA,KAAAC,EACA,QAAkBZ,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBc,EAAwB,CACtF,CAMA,YAAYf,EAAS,CACnB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBe,EAAwB,CACtF,CAMA,aAAahB,EAAS,CACpB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBgB,EAAyB,CACvF,CAOA,aAAaC,EAASlB,EAAS,CAC7B,IAAMC,EAAqB,CACzB,QAAAiB,EACA,QAAkBhB,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBkB,EAAyB,CACvF,CAOA,WAAWD,EAASlB,EAAS,CAC3B,IAAMC,EAAqB,CACzB,QAAAiB,EACA,QAAkBhB,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBmB,EAAuB,CACrF,CAMA,WAAWpB,EAAS,CAClB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBoB,EAAuB,CACrF,CAUA,YAAYH,EAASI,EAAiBtB,EAAS,CAC7C,IAAMC,EAAqB,CACzB,QAAAiB,EACA,gBAAAI,EACA,QAAkBpB,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBsB,EAAwB,CACtF,CAKA,oBAAoBvB,EAAS,CAC3B,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBuB,EAAgC,CAC9F,CASA,yBAAyBC,EAAWzB,EAAS,CAC3C,IAAMC,EAAqB,CACzB,UAAAwB,EACA,QAAkBvB,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoByB,EAAqC,CACnG,CAKA,eAAe1B,EAAS,CACtB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoB0B,EAA2B,CACzF,CACF,EAEMC,GAAgB,IAAaC,GAAWC,GAAoB,EAAI,EAChE3B,GAAsB,CAC1B,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB4B,EACzB,EACA,QAAS,CACP,WAAoBC,EACpB,cAAuBC,EACzB,CACF,EACA,gBAAiB,CAAYC,EAA6BC,EAAQ,EAClE,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBC,GAAqBC,GAAmBC,GAAmCC,EAA8B,EACrM,MAAO,GACP,WAAYf,EACd,EACMxB,GAA6B,CACjC,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBwC,EACzB,EACA,QAAS,CACP,WAAoBZ,EACpB,cAAuBa,EACzB,CACF,EACA,gBAAiB,CAAYX,EAA6BC,EAAQ,EAClE,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBrB,EAAO,EACnG,MAAO,GACP,WAAYU,EACd,EACMvB,GAAsB,CAC1B,KAAM,mBACN,WAAY,SACZ,UAAW,CACT,IAAK,CACH,cAAuByC,EACzB,EACA,QAAS,CACP,WAAoBd,EACpB,cAAuBe,EACzB,CACF,EACA,gBAAiB,CAAYb,EAA6BC,EAAQ,EAClE,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBrB,GAAoB8B,GAA4BC,EAAiB,EAC7J,MAAO,GACP,WAAYrB,EACd,EACMtB,GAA2B,CAC/B,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB4C,EACzB,EACA,QAAS,CACP,WAAoBlB,EACpB,cAAuBmB,EACzB,CACF,EACA,gBAAiB,CAAYjB,EAA6BC,GAAqBiB,EAAK,EACpF,cAAe,CAAYhB,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBC,GAAqBtB,GAAoB8B,EAAe,EACpJ,MAAO,GACP,WAAYpB,EACd,EACMrB,GAA+B,CACnC,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAY,CACV,KAAM,CACJ,KAAM,WACN,QAAS,CACP,KAAM,CACJ,KAAM,YACN,UAAW,kBACb,CACF,CACF,EACA,eAAgB,oBAChB,QAAS,oBACT,aAAc,GACd,eAAgB,kBAClB,EACA,cAAuB8C,EACzB,EACA,QAAS,CACP,WAAoBrB,EACpB,cAAuBsB,EACzB,CACF,EACA,gBAAiB,CAAYpB,EAA6BC,GAAqBoB,EAAK,EACpF,cAAe,CAAYnB,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBrB,EAAO,EACnG,MAAO,GACP,WAAYU,EACd,EACMpB,GAA+B,CACnC,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBgD,EACzB,EACA,QAAS,CACP,WAAoBxB,EACpB,cAAuByB,EACzB,CACF,EACA,YAAwBC,GACxB,gBAAiB,CAAYxB,EAA6BC,GAAqBoB,EAAK,EACpF,cAAe,CAAYnB,CAAG,EAC9B,iBAAkB,CAAYuB,GAAwBC,GAAmBvB,EAAoBC,EAAsBG,GAAmBvB,GAAoB8B,GAA4BC,EAAiB,EACvM,MAAO,GACP,YAAa,iCACb,UAAW,MACX,WAAYrB,EACd,EACMnB,GAAuB,CAC3B,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBoD,EACzB,EACA,QAAS,CACP,WAAoB7B,EACpB,cAAuB8B,EACzB,CACF,EACA,gBAAiB,CAAY5B,EAA6BC,GAAqB4B,EAAK,EACpF,cAAe,CAAY3B,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoByB,GAAiCC,EAAuB,EACpJ,MAAO,GACP,WAAYrC,EACd,EACMjB,GAAsB,CAC1B,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBuD,EACzB,EACA,QAAS,CACP,WAAoBlC,EACpB,cAAuBmC,EACzB,CACF,EACA,gBAAiB,CAAYjC,EAA6BC,GAAqBiC,EAAK,EACpF,cAAe,CAAYhC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB7B,GAAgC2D,EAAa,EACzI,MAAO,GACP,WAAYzC,EACd,EACMb,GAA2B,CAC/B,KAAM,mBACN,WAAY,OACZ,UAAW,CACT,IAAK,CACH,WAAY,CACV,KAAM,CACJ,KAAM,QACR,EACA,eAAgB,gBAClB,EACA,cAAuBuD,EACzB,EACA,QAAS,CACP,WAAoBtC,EACpB,cAAuBuC,EACzB,CACF,EACA,YAAwBzD,GACxB,gBAAiB,CAAYoB,EAA6BsC,GAAkBrC,EAAQ,EACpF,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYuB,GAAwBC,GAAmBvB,EAAoBC,EAAsB1B,GAA0BC,EAAoB,EACjK,MAAO,GACP,YAAa,iCACb,UAAW,MACX,WAAYe,EACd,EACMZ,GAA2B,CAC/B,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoByD,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoB1C,EACpB,cAAuB2C,EACzB,CACF,EACA,gBAAiB,CAAYzC,EAA6B0C,GAAmBC,GAAwBC,GAAkBC,GAAkB5C,EAAQ,EACjJ,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,CAAO,EAC/E,MAAO,GACP,WAAYX,EACd,EACMX,GAA4B,CAChC,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB+D,EACzB,EACA,QAAS,CACP,WAAoBhD,EACpB,cAAuBiD,EACzB,CACF,EACA,gBAAiB,CAAY/C,EAA6BC,GAAqB+C,EAAM,EACrF,cAAe,CAAY9C,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBS,GAA4BC,GAA8BkC,GAAmBC,GAAqB9D,EAAe,EAC7M,MAAO,GACP,WAAYM,EACd,EACMT,GAA4B,CAChC,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBkE,EACzB,EACA,QAAS,CACP,WAAoBrD,EACpB,cAAuBsD,EACzB,CACF,EACA,gBAAiB,CAAYpD,EAA6BC,GAAqB+C,EAAM,EACrF,cAAe,CAAY9C,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBS,GAA4BC,GAA8BsC,GAAoBC,EAAQ,EAClL,MAAO,GACP,WAAY5D,EACd,EACMR,GAA0B,CAC9B,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBqE,EACzB,EACA,QAAS,CACP,WAAoBzD,EACpB,cAAuB0D,EACzB,CACF,EACA,gBAAiB,CAAYxD,EAA6BC,GAAqB+C,EAAM,EACrF,cAAe,CAAY9C,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBS,GAA4BC,GAA8BuC,GAAqBG,EAAO,EAClL,MAAO,GACP,WAAY/D,EACd,EACMP,GAA0B,CAC9B,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBuE,EACzB,EACA,QAAS,CACP,WAAoB5D,EACpB,cAAuB6D,EACzB,CACF,EACA,gBAAiB,CAAY3D,EAA6BC,GAAqB+C,EAAM,EACrF,cAAe,CAAY9C,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBS,GAA4BC,GAA8B6C,GAAoBC,EAAW,EACrL,MAAO,GACP,WAAYnE,EACd,EACML,GAA2B,CAC/B,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuByE,EACzB,EACA,QAAS,CACP,WAAoBhE,EACpB,cAAuBiE,EACzB,CACF,EACA,gBAAiB,CAAY/D,EAA6BC,GAAqB+C,EAAM,EACrF,cAAe,CAAY9C,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBS,GAA4BC,GAA8BuC,GAAqBU,GAAoBC,EAAgB,EAC/M,MAAO,GACP,WAAYvE,EACd,EACMJ,GAAmC,CACvC,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoB4E,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoBrE,EACpB,cAAuBsE,EACzB,CACF,EACA,gBAAiB,CAAYpE,EAA6BqE,GAAkBC,GAAmB5B,GAAmBC,GAAwB1C,GAAqBsE,EAAQ,EACvK,cAAe,CAAYrE,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,CAAO,EAC/E,MAAO,GACP,WAAYX,EACd,EACMF,GAAwC,CAC5C,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoBgF,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoB3E,EACpB,cAAuB4E,EACzB,CACF,EACA,gBAAiB,CAAY1E,EAA6BqE,GAAkBC,GAAmB5B,GAAmBC,GAAwB1C,GAAqBsE,GAAqBhF,EAAS,EAC7L,cAAe,CAAYW,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,CAAO,EAC/E,MAAO,GACP,WAAYX,EACd,EACMD,GAA8B,CAClC,KAAM,mBACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBkF,EACzB,EACA,QAAS,CACP,WAAoB7E,EACpB,cAAuB8E,EACzB,CACF,EACA,gBAAiB,CAAYC,GAAiBC,EAAQ,EACtD,cAAe,CAAY5E,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBE,CAAO,EACzD,MAAO,GACP,WAAYX,EACd,ECnkBO,IAAMqF,GAAN,KAAW,CAKhB,YAAYC,EAAQ,CAClB,KAAK,OAASA,CAChB,CAMA,SAASC,EAAS,CAChB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBE,EAAqB,CACnF,CAMA,cAAcH,EAAS,CACrB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBG,EAA0B,CACxF,CAgBA,OAAOJ,EAAS,CACd,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBI,EAAmB,CACjF,CAKA,SAASL,EAAS,CAChB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBK,EAAqB,CACnF,CAMA,UAAUC,EAAeP,EAAS,CAChC,IAAMC,EAAqB,CACzB,cAAAM,EACA,QAAkBL,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBO,EAAsB,CACpF,CAKA,eAAeR,EAAS,CACtB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBQ,EAA2B,CACzF,CAKA,sBAAsBT,EAAS,CAC7B,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBS,EAAkC,CAChG,CAKA,yBAAyBV,EAAS,CAChC,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBU,EAAqC,CACnG,CAMA,aAAaC,EAAWZ,EAAS,CAC/B,IAAMC,EAAqB,CACzB,UAAAW,EACA,QAAkBV,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBY,EAAyB,CACvF,CAMA,YAAYb,EAAS,CACnB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBa,EAAwB,CACtF,CAMA,aAAad,EAAS,CACpB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBc,EAAyB,CACvF,CAOA,aAAaC,EAAShB,EAAS,CAC7B,IAAMC,EAAqB,CACzB,QAAAe,EACA,QAAkBd,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBgB,EAAyB,CACvF,CAOA,WAAWD,EAAShB,EAAS,CAC3B,IAAMC,EAAqB,CACzB,QAAAe,EACA,QAAkBd,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBiB,EAAuB,CACrF,CAUA,YAAYF,EAASG,EAAiBnB,EAAS,CAC7C,IAAMC,EAAqB,CACzB,QAAAe,EACA,gBAAAG,EACA,QAAkBjB,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBmB,EAAwB,CACtF,CAMA,WAAWpB,EAAS,CAClB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBoB,EAAuB,CACrF,CAKA,eAAerB,EAAS,CACtB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBqB,EAA2B,CACzF,CASA,iBAAiBC,EAAYvB,EAAS,CACpC,IAAMC,EAAqB,CACzB,WAAAsB,EACA,QAAkBrB,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBuB,EAA6B,CAC3F,CAUA,YAAYD,EAAYvB,EAAS,CAC/B,IAAMC,EAAqB,CACzB,WAAAsB,EACA,QAAkBrB,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBwB,EAAwB,CACtF,CAQA,iBAAiBC,EAAQ1B,EAAS,CAChC,IAAMC,EAAqB,CACzB,OAAAyB,EACA,QAAkBxB,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoB0B,EAA6B,CAC3F,CAUA,QAAQC,EAAM5B,EAAS,CACrB,IAAMC,EAAqB,CACzB,KAAA2B,EACA,QAAkB1B,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoB4B,EAAoB,CAClF,CAKA,eAAe7B,EAAS,CACtB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoB6B,EAA2B,CACzF,CAMA,MAAM9B,EAAS,CACb,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoB8B,EAAkB,CAChF,CAKA,QAAQ/B,EAAS,CACf,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoB+B,EAAoB,CAClF,CAKA,QAAQhC,EAAS,CACf,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBgC,EAAoB,CAClF,CACF,EAEMC,GAAgB,IAAaC,GAAWC,GAAoB,EAAI,EAChEjC,GAAwB,CAC5B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAY,CACV,KAAM,CACJ,KAAM,QACR,EACA,eAAgB,gBAClB,EACA,cAAuBkC,EACzB,EACA,IAAK,CACH,WAAY,CACV,KAAM,CACJ,KAAM,QACR,EACA,eAAgB,gBAClB,EACA,cAAuBA,EACzB,EACA,QAAS,CACP,WAAoBC,EACpB,cAAuBC,EACzB,CACF,EACA,gBAAiB,CAAYC,EAA6BC,GAAqBC,EAAS,EACxF,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB9B,GAAoB+B,GAA4BC,GAA8BC,GAAkBC,GAA+BC,GAAiCC,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,EAAM,EACxY,MAAO,GACP,WAAYvB,EACd,EACM9B,GAA6B,CACjC,KAAM,0BACN,WAAY,OACZ,UAAW,CACT,IAAK,CACH,cAAuBsD,EACzB,EACA,QAAS,CACP,WAAoBpB,EACpB,cAAuBqB,EACzB,CACF,EACA,gBAAiB,CAAYnB,EAA6BC,GAAqBC,EAAS,EACxF,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB9B,GAAoB+B,GAA4BC,GAA8BI,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,EAAM,EACtT,MAAO,GACP,WAAYvB,EACd,EACM7B,GAAsB,CAC1B,KAAM,0BACN,WAAY,SACZ,UAAW,CACT,IAAK,CACH,cAAuBuD,EACzB,EACA,QAAS,CACP,WAAoBtB,EACpB,cAAuBuB,EACzB,CACF,EACA,gBAAiB,CAAYrB,EAA6BC,GAAqBC,GAAsBoB,EAAc,EACnH,cAAe,CAAYnB,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB9B,GAAoB+B,GAA4BC,GAA8BO,GAAoBC,GAAwBC,GAAmBM,EAAe,EACxP,MAAO,GACP,WAAY7B,EACd,EACM5B,GAAwB,CAC5B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB0D,EACzB,EACA,QAAS,CACP,WAAoB1B,EACpB,cAAuB2B,EACzB,CACF,EACA,gBAAiB,CAAYzB,EAA6B0B,EAAK,EAC/D,cAAe,CAAYvB,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,CAAO,EAC/E,MAAO,GACP,WAAYZ,EACd,EACM1B,GAAyB,CAC7B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB2D,EACzB,EACA,QAAS,CACP,WAAoB7B,EACpB,cAAuB8B,EACzB,CACF,EACA,gBAAiB,CAAY5B,EAA6B6B,EAAM,EAChE,cAAe,CAAY1B,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBvC,GAA0B+D,EAAS,EAC/H,MAAO,GACP,WAAYpC,EACd,EACMzB,GAA8B,CAClC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB8D,EACzB,EACA,QAAS,CACP,WAAoBjC,EACpB,cAAuBkC,EACzB,CACF,EACA,gBAAiB,CAAYC,GAAiBjC,CAAgB,EAC9D,cAAe,CAAYG,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB9B,GAAoB+B,GAA4BC,GAA8BO,GAAoBC,GAAwBC,GAAmBiB,GAA6BC,GAA4BC,GAA2BC,GAAgCC,GAAgCC,EAAsB,EACnZ,MAAO,GACP,WAAY7C,EACd,EACMxB,GAAqC,CACzC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBsE,EACzB,EACA,QAAS,CACP,WAAoB1C,EACpB,cAAuB2C,EACzB,CACF,EACA,gBAAiB,CAAYzC,EAA6B0C,EAAM,EAChE,cAAe,CAAYvC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBE,GAA8BmC,GAAqCC,EAAsB,EACrL,MAAO,GACP,WAAYlD,EACd,EACMvB,GAAwC,CAC5C,KAAM,0BACN,WAAY,SACZ,UAAW,CACT,IAAK,CACH,cAAuB0E,EACzB,EACA,QAAS,CACP,WAAoB/C,EACpB,cAAuBgD,EACzB,CACF,EACA,gBAAiB,CAAY9C,EAA6B0C,EAAM,EAChE,cAAe,CAAYvC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,CAAO,EAC/E,MAAO,GACP,WAAYZ,EACd,EACMrB,GAA4B,CAChC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB0E,EACzB,EACA,QAAS,CACP,WAAoBjD,EACpB,cAAuBkD,EACzB,CACF,EACA,gBAAiB,CAAYhD,EAA6BiD,EAAM,EAChE,cAAe,CAAY9C,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBlC,EAAS,EACrG,MAAO,GACP,WAAYsB,EACd,EACMpB,GAA2B,CAC/B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB4E,EACzB,EACA,QAAS,CACP,WAAoBpD,EACpB,cAAuBqD,EACzB,CACF,EACA,gBAAiB,CAAYnD,EAA6BoD,EAAK,EAC/D,cAAe,CAAYjD,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB+C,GAAqB7E,GAAoB+B,GAA4BC,GAA8BI,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBqC,EAAe,EACvW,MAAO,GACP,WAAY5D,EACd,EACMnB,GAA4B,CAChC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBgF,EACzB,EACA,QAAS,CACP,WAAoBzD,EACpB,cAAuB0D,EACzB,CACF,EACA,gBAAiB,CAAYxD,EAA6ByD,EAAM,EAChE,cAAe,CAAYtD,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBC,GAA4BC,GAA8BkD,GAAmBC,GAAqBhF,GAA4BoC,GAAoBC,GAAwBC,EAAM,EAC5Q,MAAO,GACP,WAAYvB,EACd,EACMjB,GAA4B,CAChC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBmF,EACzB,EACA,QAAS,CACP,WAAoB9D,EACpB,cAAuB+D,EACzB,CACF,EACA,gBAAiB,CAAY7D,EAA6ByD,EAAM,EAChE,cAAe,CAAYtD,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBC,GAA4BC,GAA8BsD,GAAoBC,GAAqBhD,GAAoBC,GAAwBC,EAAM,EACjP,MAAO,GACP,WAAYvB,EACd,EACMhB,GAA0B,CAC9B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBsF,EACzB,EACA,QAAS,CACP,WAAoBlE,EACpB,cAAuBmE,EACzB,CACF,EACA,gBAAiB,CAAYjE,EAA6ByD,EAAM,EAChE,cAAe,CAAYtD,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBC,GAA4BC,GAA8BuD,GAAqBG,GAAoBnD,GAAoBC,GAAwBC,EAAM,EACjP,MAAO,GACP,WAAYvB,EACd,EACMd,GAA2B,CAC/B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBuF,EACzB,EACA,QAAS,CACP,WAAoBrE,EACpB,cAAuBsE,EACzB,CACF,EACA,gBAAiB,CAAYpE,EAA6ByD,EAAM,EAChE,cAAe,CAAYtD,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBC,GAA4BC,GAA8BuD,GAAqBM,GAAoBC,GAA6BvD,GAAoBC,GAAwBC,EAAM,EAC9Q,MAAO,GACP,WAAYvB,EACd,EACMb,GAA0B,CAC9B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB0F,EACzB,EACA,QAAS,CACP,WAAoBzE,EACpB,cAAuB0E,EACzB,CACF,EACA,gBAAiB,CAAYxE,EAA6ByD,EAAM,EAChE,cAAe,CAAYtD,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBC,GAA4BC,GAA8BiE,GAAoBC,GAAwB3D,GAAoBC,GAAwBC,EAAM,EACpP,MAAO,GACP,WAAYvB,EACd,EACMZ,GAA8B,CAClC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB6F,EACzB,EACA,QAAS,CACP,WAAoB7E,EACpB,cAAuB8E,EACzB,CACF,EACA,gBAAiB,CAAY5E,EAA6B6E,EAAM,EAChE,cAAe,CAAY1E,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB+C,GAAqB7E,GAAoB+B,GAA4BC,GAA8BI,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBqC,EAAe,EACvW,MAAO,GACP,WAAY5D,EACd,EACMV,GAAgC,CACpC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB8F,EACzB,EACA,QAAS,CACP,WAAoBhF,EACpB,cAAuBiF,EACzB,CACF,EACA,gBAAiB,CAAY/E,CAAgB,EAC7C,cAAe,CAAYG,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB+C,GAAqB7E,GAAoB+B,GAA4BC,GAA8BO,GAAoBC,GAAwBC,GAAmB0B,GAAqCC,GAAmCxD,GAAiB4F,GAA8BC,GAAkCC,GAAoCC,GAA0BC,GAA8BC,GAAyBtG,GAAuBuG,GAA2BC,GAAqBC,EAAU,EAC7lB,MAAO,GACP,WAAY9F,EACd,EACMT,GAA2B,CAC/B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBwG,EACzB,EACA,QAAS,CACP,WAAoB3F,EACpB,cAAuB4F,EACzB,CACF,EACA,gBAAiB,CAAY1F,CAAgB,EAC7C,cAAe,CAAYG,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB+C,GAAqB7E,GAAoB+B,GAA4BC,GAA8BO,GAAoBC,GAAwBC,GAAmB0B,GAAqCC,GAAmCU,GAA4BlE,GAAiB6F,GAAkCC,GAAoCC,GAA0BC,GAA8BrG,GAAuBuG,GAA2BE,GAAuBG,GAA4BC,GAA6BC,GAAoCC,EAAc,EACrqB,MAAO,GACP,WAAYpG,EACd,EACMP,GAAgC,CACpC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB4G,EACzB,EACA,QAAS,CACP,WAAoBjG,EACpB,cAAuBkG,EACzB,CACF,EACA,gBAAiB,CAAYhG,EAA6BiG,GAAmB/G,EAAM,EACnF,cAAe,CAAYiB,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB9B,GAAoB0H,EAAuB,EACvI,MAAO,GACP,WAAYxG,EACd,EACML,GAAuB,CAC3B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB8G,EACzB,EACA,IAAK,CACH,cAAuBA,EACzB,EACA,QAAS,CACP,WAAoBrG,EACpB,cAAuBsG,EACzB,CACF,EACA,gBAAiB,CAAYpG,EAA6BC,GAAqBC,GAAsBmG,EAAM,EAC3G,cAAe,CAAYlG,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB9B,GAAoByC,GAAmB+D,GAA8BsB,EAAK,EACtK,MAAO,GACP,WAAY5G,EACd,EACMJ,GAA8B,CAClC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBiH,EACzB,EACA,QAAS,CACP,WAAoBzG,EACpB,cAAuB0G,EACzB,CACF,EACA,gBAAiB,CAAYvE,GAAiBwE,EAAQ,EACtD,cAAe,CAAYtG,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBE,CAAO,EACzD,MAAO,GACP,WAAYZ,EACd,EACMH,GAAqB,CACzB,KAAM,0BACN,WAAY,OACZ,UAAW,CACT,IAAK,CACH,WAAY,CACV,KAAM,CACJ,KAAM,QACR,EACA,eAAgB,gBAClB,EACA,cAAuBmH,EACzB,EACA,IAAK,CACH,WAAY,CACV,KAAM,CACJ,KAAM,QACR,EACA,eAAgB,gBAClB,EACA,cAAuBA,EACzB,EACA,QAAS,CACP,WAAoB5G,EACpB,cAAuB6G,EACzB,CACF,EACA,YAAwBC,GACxB,gBAAiB,CAAY5G,EAA6BC,GAAqB4G,EAAM,EACrF,cAAe,CAAY1G,CAAG,EAC9B,iBAAkB,CAAY2G,GAAwBC,GAAmB3G,EAAoBC,EAAsB7B,GAAoB+B,GAA4BC,GAA8BI,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,EAAM,EAC7U,MAAO,GACP,YAAa,iCACb,UAAW,MACX,WAAYvB,EACd,EACMF,GAAuB,CAC3B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoBwH,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoBnH,EACpB,cAAuBoH,EACzB,CACF,EACA,gBAAiB,CAAYlH,EAA6BC,GAAqBC,GAAsBiH,EAAM,EAC3G,cAAe,CAAYhH,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB9B,GAAoByC,EAAM,EACtH,MAAO,GACP,WAAYvB,EACd,EACMD,GAAuB,CAC3B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB2H,EACzB,EACA,QAAS,CACP,WAAoBtH,EACpB,cAAuBuH,EACzB,CACF,EACA,YAAwBC,GACxB,gBAAiB,CAAYtH,EAA6BE,GAAsBiH,EAAM,EACtF,cAAe,CAAYhH,CAAG,EAC9B,iBAAkB,CAAY2G,GAAwBC,GAAmB3G,EAAoBC,EAAsB7B,GAAoByC,GAAmBsG,GAAoCC,EAAyB,EACvN,MAAO,GACP,YAAa,iCACb,UAAW,MACX,WAAY9H,EACd,ECzwBO,IAAM+H,GAAN,KAAe,CAKpB,YAAYC,EAAQ,CAClB,KAAK,OAASA,CAChB,CAQA,OAAOC,EAAeC,EAAmBC,EAAS,CAChD,IAAMC,EAAqB,CACzB,cAAAH,EACA,kBAAAC,EACA,QAAkBG,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBE,EAAmB,CACjF,CAOA,YAAYL,EAAeM,EAAMJ,EAAS,CACxC,IAAMC,EAAqB,CACzB,cAAAH,EACA,KAAAM,EACA,QAAkBF,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBI,EAAwB,CACtF,CAMA,WAAWP,EAAeE,EAAS,CACjC,IAAMC,EAAqB,CACzB,cAAAH,EACA,QAAkBI,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBK,EAAuB,CACrF,CAYA,mBAAmBC,EAAWC,EAAaV,EAAeW,EAAOT,EAAS,CACxE,IAAMC,EAAqB,CACzB,UAAAM,EACA,YAAAC,EACA,cAAAV,EACA,MAAAW,EACA,QAAkBP,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBS,EAA+B,CAC7F,CAMA,cAAcV,EAAS,CACrB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBU,EAA0B,CACxF,CAMA,kBAAkBX,EAAS,CACzB,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBW,EAA8B,CAC5F,CAOA,OAAOb,EAAmBC,EAAS,CACjC,IAAMC,EAAqB,CACzB,kBAAAF,EACA,QAAkBG,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBY,EAAmB,CACjF,CAQA,qBAAqBC,EAAsBd,EAAS,CAClD,IAAMC,EAAqB,CACzB,qBAAAa,EACA,QAAkBZ,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBc,EAAiC,CAC/F,CAaA,gBAAgBC,EAAYhB,EAAS,CACnC,IAAMC,EAAqB,CACzB,WAAAe,EACA,QAAkBd,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBgB,EAA4B,CAC1F,CACF,EAEMC,GAAgB,IAAaC,GAAWC,GAAoB,EAAI,EAChEC,GAAa,IAAaF,GAAWC,GAAoB,EAAK,EAC9DjB,GAAsB,CAC1B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBmB,EACzB,EACA,QAAS,CACP,WAAoBC,EACpB,cAAuBC,EACzB,CACF,EACA,gBAAiB,CAAYC,CAAgB,EAC7C,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB/B,GAA0BgC,GAAqBC,GAAoBC,GAA4BC,GAA8BC,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBC,GAA6BC,GAA4BC,GAA2BC,GAAgCC,GAAgCC,GAAmCC,GAAqCC,GAAmCC,GAA4BC,GAAiBC,GAA2BC,GAAuBC,GAAqBrD,GAA8BsD,EAAkB,EACrxB,MAAO,GACP,WAAYnC,EACd,EACMb,GAA2B,CAC/B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBiD,EACzB,EACA,QAAS,CACP,WAAoB/B,EACpB,cAAuBgC,EACzB,CACF,EACA,YAAwBC,GACxB,gBAAiB,CAAY/B,EAA6BgC,EAAM,EAChE,cAAe,CAAY/B,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsB9B,GAA0BiC,GAAoBC,GAA4BC,GAA8BxB,GAAkByB,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBS,GAA4BU,GAAoCC,GAAsCC,GAAyBC,GAAoBC,GAAsBC,GAA8CC,GAAqCC,EAAuB,EAC9mB,UAAW,SACX,WAAA5C,EACF,EACMf,GAA0B,CAC9B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB4D,EACzB,EACA,QAAS,CACP,WAAoB3C,EACpB,cAAuB4C,EACzB,CACF,EACA,gBAAiB,CAAY1C,EAA6BgC,EAAM,EAChE,cAAe,CAAY/B,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB/B,GAA0BiC,GAAoBC,GAA4BC,GAA8BxB,GAAkByB,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBS,GAA4Be,GAA8CC,GAAqCC,GAAoCG,EAAU,EAC5gB,MAAO,GACP,WAAYlD,EACd,EACMR,GAAkC,CACtC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB2D,EACzB,EACA,QAAS,CACP,WAAoB9C,EACpB,cAAuB+C,EACzB,CACF,EACA,gBAAiB,CAAY7C,EAA6BgC,EAAM,EAChE,cAAe,CAAY/B,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoB/B,GAA0BiC,GAAoBC,GAA4BC,GAA8BC,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBS,GAA4BuB,GAAkCC,GAAoCC,GAA0BC,GAA8BC,GAA6BC,GAAoCd,GAAsBC,GAA8CC,GAAqCC,GAAoC1D,GAAsBC,GAAwBqE,GAA+BC,EAAM,EACxxB,MAAO,GACP,WAAY5D,EACd,EACMP,GAA6B,CACjC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoBoE,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoBzD,EACpB,cAAuB0D,EACzB,CACF,EACA,gBAAiB,CAAYxD,EAA6ByD,GAAmBC,GAAwBC,GAAqBC,EAAM,EAChI,cAAe,CAAY3D,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBE,GAAoBC,GAA4BC,GAA8BxB,GAAkB4B,GAAoBC,GAAwBC,EAAM,EAC9O,MAAO,GACP,WAAYrB,EACd,EACMN,GAAiC,CACrC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoBmE,GACpB,cAAuBO,EACzB,EACA,QAAS,CACP,WAAoB/D,EACpB,cAAuBgE,EACzB,CACF,EACA,gBAAiB,CAAY9D,EAA6ByD,GAAmBC,GAAwBC,GAAqBC,GAAmBG,EAAY,EACzJ,cAAe,CAAY9D,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBE,GAAoBC,GAA4BC,GAA8BxB,GAAkB4B,GAAoBC,GAAwBC,GAAmBkD,EAAe,EAC1Q,MAAO,GACP,WAAYvE,EACd,EACML,GAAsB,CAC1B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB6E,EACzB,EACA,QAAS,CACP,WAAoBnE,EACpB,cAAuBoE,EACzB,CACF,EACA,gBAAiB,CAAYC,GAAiBnE,CAAgB,EAC9D,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBE,GAAoBC,GAA4BC,GAA8BC,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBS,GAA4BjD,EAAiB,EAChX,MAAO,GACP,WAAYmB,EACd,EACMH,GAAoC,CACxC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB8E,EACzB,EACA,QAAS,CACP,WAAoBtE,EACpB,cAAuBuE,EACzB,CACF,EACA,gBAAiB,CAAYF,GAAiBnE,CAAgB,EAC9D,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBE,GAAoBC,GAA4BC,GAA8BI,GAAoBC,GAAwBC,GAAmBc,GAA+BvC,EAAoB,EAC5R,MAAO,GACP,WAAYI,EACd,EACMD,GAA+B,CACnC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB8E,EACzB,EACA,QAAS,CACP,WAAoBxE,EACpB,cAAuByE,EACzB,CACF,EACA,gBAAiB,CAAYvE,EAA6BwE,EAAM,EAChE,cAAe,CAAYvE,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBG,GAA4BC,GAA8BI,GAAoBC,GAAwBC,GAAmBvB,EAAU,EAC/N,MAAO,GACP,WAAYE,EACd,EClTO,IAAMgF,GAAN,KAAiB,CAKtB,YAAYC,EAAQ,CAClB,KAAK,OAASA,CAChB,CAMA,OAAOC,EAAeC,EAAS,CAC7B,IAAMC,EAAqB,CACzB,cAAAF,EACA,QAAkBG,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBE,EAAmB,CACjF,CASA,YAAYJ,EAAeK,EAAMJ,EAAS,CACxC,IAAMC,EAAqB,CACzB,cAAAF,EACA,KAAAK,EACA,QAAkBF,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBI,EAAwB,CACtF,CAUA,mBAAmBC,EAAWP,EAAeC,EAAS,CACpD,IAAMC,EAAqB,CACzB,UAAAK,EACA,cAAAP,EACA,QAAkBG,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBM,EAA+B,CAC7F,CAMA,KAAKP,EAAS,CACZ,IAAMC,EAAqB,CACzB,QAAkBC,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBO,EAAiB,CAC/E,CACF,EAEMC,GAAgB,IAAaC,GAAWC,GAAoB,EAAI,EAChEC,GAAa,IAAaF,GAAWC,GAAoB,EAAK,EAC9DR,GAAsB,CAC1B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBU,EACzB,EACA,QAAS,CACP,WAAoBC,EACpB,cAAuBC,EACzB,CACF,EACA,gBAAiB,CAAYC,CAAgB,EAC7C,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBrB,GAA0BsB,GAAqBC,GAAoBC,GAA4BC,GAA8BC,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBC,GAA6BC,GAA4BC,GAA2BC,GAAgCC,GAAgCC,GAAmCC,GAAqCC,GAAmCC,GAA4BC,GAA2BC,GAAuBC,EAAS,EACxsB,MAAO,GACP,WAAYjC,EACd,EACMJ,GAA2B,CAC/B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBsC,EACzB,EACA,QAAS,CACP,WAAoB7B,EACpB,cAAuB8B,EACzB,CACF,EACA,YAAwBC,GACxB,gBAAiB,CAAY7B,EAA6B8B,EAAM,EAChE,cAAe,CAAY7B,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBpB,GAA0BuB,GAAoBC,GAA4BC,GAA8BC,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBS,GAA4BQ,GAAoCC,GAAsCC,GAAyBC,GAAoBC,GAAoBC,EAAc,EAC9f,UAAW,SACX,WAAAxC,EACF,EACML,GAAkC,CACtC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB8C,EACzB,EACA,QAAS,CACP,WAAoBvC,EACpB,cAAuBwC,EACzB,CACF,EACA,gBAAiB,CAAYtC,EAA6B8B,EAAM,EAChE,cAAe,CAAY7B,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBrB,GAA0BuB,GAAoBC,GAA4BC,GAA8BC,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBS,GAA4BgB,GAAkCC,GAAoCC,GAA0BC,GAA8BC,GAA6BC,GAAoCb,GAAoCzC,GAAsBuD,GAA+BV,GAAoBC,GAA2BU,EAAY,EAC5sB,MAAO,GACP,WAAYrD,EACd,EACMD,GAAoB,CACxB,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBuD,EACzB,EACA,QAAS,CACP,WAAoBjD,EACpB,cAAuBkD,EACzB,CACF,EACA,gBAAiB,CAAYhD,EAA6BiD,EAAM,EAChE,cAAe,CAAYhD,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsBC,EAAoBE,GAAoBC,GAA4BC,GAA8BI,GAAoBC,GAAwBuB,EAAc,EACpO,MAAO,GACP,WAAY3C,EACd,EC5IO,IAAMyD,GAAN,KAAgB,CAKrB,YAAYC,EAAQ,CAClB,KAAK,OAASA,CAChB,CAUA,OAAOC,EAAeC,EAAMC,EAAS,CACnC,IAAMC,EAAqB,CACzB,cAAAH,EACA,KAAAC,EACA,QAAkBG,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBE,EAAmB,CACjF,CAcA,eAAeL,EAAeM,EAAYJ,EAAS,CACjD,IAAMC,EAAqB,CACzB,cAAAH,EACA,WAAAM,EACA,QAAkBF,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBI,EAA2B,CACzF,CAUA,WAAWC,EAASR,EAAeC,EAAMC,EAAS,CAChD,IAAMC,EAAqB,CACzB,QAAAK,EACA,cAAAR,EACA,KAAAC,EACA,QAAkBG,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBM,EAAuB,CACrF,CAWA,kBAAkBD,EAASR,EAAeU,EAAWR,EAAS,CAC5D,IAAMC,EAAqB,CACzB,QAAAK,EACA,cAAAR,EACA,UAAAU,EACA,QAAkBN,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBQ,EAA8B,CAC5F,CAYA,gBAAgBC,EAAQV,EAAS,CAC/B,IAAMC,EAAqB,CACzB,OAAAS,EACA,QAAkBR,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBU,EAA4B,CAC1F,CAQA,aAAaC,EAAUZ,EAAS,CAC9B,IAAMC,EAAqB,CACzB,SAAAW,EACA,QAAkBV,EAAqCF,GAAW,CAAC,CAAC,CACtE,EACA,OAAO,KAAK,OAAO,qBAAqBC,EAAoBY,EAAyB,CACvF,CACF,EAEMC,GAAgB,IAAaC,GAAWC,GAAoB,EAAI,EAChEC,GAAa,IAAaF,GAAWC,GAAoB,EAAK,EAC9Db,GAAsB,CAC1B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBe,EACzB,EACA,QAAS,CACP,WAAoBC,EACpB,cAAuBC,EACzB,CACF,EACA,YAAwBC,GACxB,gBAAiB,CAAYC,CAAgB,EAC7C,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsB3B,GAA0B4B,GAAqBC,GAAoBC,GAA4BC,GAA8BC,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBC,GAA6BC,GAA4BC,GAA2BC,GAAgCC,GAAgCC,GAAmCC,GAAqCC,GAAmCC,GAA4BC,GAAiBC,GAA2BC,GAAuBC,GAAoCC,GAAsCC,GAAyBC,GAAoBC,EAAS,EAC5zB,UAAW,SACX,WAAAnC,EACF,EACMZ,GAA8B,CAClC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuBgD,EACzB,EACA,QAAS,CACP,WAAoBlC,EACpB,cAAuBmC,EACzB,CACF,EACA,gBAAiB,CAAYhC,CAAgB,EAC7C,cAAe,CAAYC,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsB8B,EAAoBzD,GAA0B4B,GAAqBC,GAAoBC,GAA4BC,GAA8BC,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBC,GAA6BC,GAA4BC,GAA2BC,GAAgCC,GAAgCC,GAAmCG,GAA4BC,GAAiBW,GAAkCC,GAAoCC,GAA0BC,GAA8BC,GAAyBxD,GAAuB0C,GAA2Be,GAA6BC,GAAoCC,GAA2Bf,GAAoCI,GAAsBY,EAAwB,EAC78B,MAAO,GACP,WAAYlD,EACd,EACMP,GAA0B,CAC9B,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB0D,EACzB,EACA,QAAS,CACP,WAAoB9C,EACpB,cAAuB+C,EACzB,CACF,EACA,YAAwB7C,GACxB,gBAAiB,CAAYC,EAA6B6C,GAAmB7D,EAAO,EACpF,cAAe,CAAYiB,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsB3B,GAA0B6B,GAAoBG,GAA0BC,GAAgCC,GAAgCY,GAA4BI,GAAoCC,GAAsCC,GAAyBC,EAAO,EACtV,UAAW,SACX,WAAAlC,EACF,EACMR,GAAiC,CACrC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB2D,EACzB,EACA,QAAS,CACP,WAAoBjD,EACpB,cAAuBkD,EACzB,CACF,EACA,gBAAiB,CAAY/C,EAA6B6C,GAAmB7D,EAAO,EACpF,cAAe,CAAYiB,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsB8B,EAAoBzD,GAA0B6B,GAAoBG,GAA0BC,GAAgCC,GAAgCY,GAA4BY,GAAkCC,GAAoCC,GAA0BC,GAA8BE,GAA6BC,GAAoCtD,GAAsB8D,GAA+BC,EAAY,EAChgB,MAAO,GACP,WAAYzD,EACd,EACMH,GAA+B,CACnC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,cAAuB6D,EACzB,EACA,QAAS,CACP,WAAoBrD,EACpB,cAAuBsD,EACzB,CACF,EACA,YAAwB/D,GACxB,gBAAiB,CAAYY,EAA6BoD,EAAM,EAChE,cAAe,CAAYnD,CAAG,EAC9B,iBAAkB,CAAYoD,GAAwBC,GAAmBpD,EAAoBC,EAAsBC,GAAqBC,GAAoBC,GAA4BC,GAA8BC,GAA0BC,GAAgCC,GAAgCC,GAAoBC,GAAwBC,GAAmBC,GAA6BC,GAA4BC,GAA2BC,GAAgCC,GAAgCC,GAAmCC,GAAqCC,GAAmCC,GAA4BC,GAAiBC,GAA2BC,GAAuBC,GAAoCC,EAAyB,EAC1wB,MAAO,GACP,YAAa,iCACb,UAAW,MACX,WAAYnC,EACd,EACMD,GAA4B,CAChC,KAAM,0BACN,WAAY,MACZ,UAAW,CACT,IAAK,CACH,WAAoBgE,GACpB,cAAuBC,EACzB,EACA,QAAS,CACP,WAAoB3D,EACpB,cAAuB4D,EACzB,CACF,EACA,gBAAiB,CAAYzD,EAA6B0D,GAAqBN,GAAmB9D,EAAQ,EAC1G,cAAe,CAAYW,CAAG,EAC9B,iBAAkB,CAAYC,EAAoBC,EAAsB8B,EAAoB5B,GAAoBQ,EAAM,EACtH,MAAO,GACP,WAAYrB,EACd,EC7OO,IAAMmE,GAASC,GAAmB,cAAc,ECJhD,IAAMC,GAAc,UACdC,GAAkB,aAWxB,IAAMC,GAAqB,qCACrBC,GAAe,CAC1B,WAAY,CACV,uBAAwB,IACxB,UAAW,MACX,SAAU,WACV,UAAW,YACX,QAAS,SACX,CACF,EACaC,GAAoB,CAC/B,cAAe,IACf,cAAe,IACf,eAAgB,IAChB,mBAAoB,IACpB,2BAA4B,GAC9B,EACaC,GAAkB,CAC7B,cAAe,gBACf,qBAAsB,SACtB,iBAAkB,mBAClB,WAAY,aACZ,iBAAkB,mBAClB,eAAgB,iBAChB,YAAa,cACb,0BAA2B,4BAC3B,aAAc,eACd,OAAQ,SACR,KAAM,OACN,SAAU,WACV,kBAAmB,oBACnB,cAAe,gBACf,oBAAqB,sBACrB,mBAAoB,QACpB,MAAO,QACP,WAAY,aACZ,uBAAwB,yBACxB,iBAAkB,mBAClB,UAAW,YACX,gBAAiB,kBACjB,aAAc,cAChB,EACaC,GAAW,GACXC,GAAU,IACVC,GAAY,EAAI,KAAO,KACvBC,GAAoB,IACpBC,GAA6B,EAAIF,GACjCG,GAAmB;AAAA,EACnBC,GAAmB,WACnBC,GAA2B,SAC3BC,GAA8B,uNAC9BC,GAAuC,CAAC,8BAA+B,gBAAiB,iBAAkB,eAAgB,OAAQ,aAAc,cAAe,oBAAqB,aAAc,yBAA0B,YAAa,kBAAmB,kBAAmB,gCAAiC,eAAgB,gBAAiB,sBAAuB,mBAAoB,mBAAoB,cAAe,gBAAiB,OAAQ,gBAAiB,SAAU,OAAQ,qBAAsB,mBAAoB,4BAA6B,eAAgB,qBAAsB,mBAAoB,+BAAgC,sBAAuB,mBAAoB,oBAAqB,aAAc,gCAAiC,wBAAyB,gBAAiB,oBAAqB,WAAY,oBAAqB,gBAAiB,sBAAuB,mBAAoB,+BAAgC,4BAA6B,oBAAqB,sBAAuB,0BAA2B,0BAA2B,kCAAmC,gCAAiC,8BAA+B,gCAAiC,6BAA8B,6BAA8B,2BAA4B,wBAAyB,yBAA0B,0BAA2B,4BAA6B,iBAAkB,iCAAkC,qBAAsB,gCAAiC,wBAAyB,6BAA8B,sCAAuC,4BAA6B,6BAA8B,6BAA8B,6BAA8B,wBAAyB,oBAAqB,0BAA2B,sBAAuB,gBAAiB,kBAAmB,kBAAmB,yBAA0B,6BAA8B,0BAA2B,8BAA+B,gBAAiB,0BAA2B,uBAAwB,gCAAiC,4BAA6B,kCAAmC,iBAAkB,6BAA8B,eAAgB,qBAAqB,EAChrEC,GAA2C,CAAC,OAAQ,aAAc,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,UAAW,SAAU,SAAU,SAAU,UAAW,UAAW,gBAAiB,YAAa,eAAgB,MAAO,QAAS,MAAO,MAAO,QAAS,MAAO,UAAU,EAC9UC,GAAyC,sCACzCC,GAA4C,4CAG5CC,GAAiB,CAAC,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,OAAO,ECf1M,SAASC,GAAcC,EAAK,CACjC,IAAMC,EAAYC,GAAW,MAAMF,CAAG,EAClCG,EAAOF,EAAU,QAAQ,EAC7B,OAAAE,EAAOA,GAAQ,IACfA,EAAOC,GAAOD,CAAI,EAClBF,EAAU,QAAQE,CAAI,EACfF,EAAU,SAAS,CAC5B,CACA,SAASI,GAA6BC,EAAkB,CAGtD,IAAIC,EAAW,GACf,GAAID,EAAiB,OAAO,6BAA6B,IAAM,GAAI,CAEjE,IAAME,EAAmBF,EAAiB,MAAM,GAAG,EACnD,QAAWG,KAAWD,EAChBC,EAAQ,KAAK,EAAE,WAAW,6BAA6B,IACzDF,EAAWE,EAAQ,KAAK,EAAE,MAAM,iCAAiC,EAAE,CAAC,EAG1E,CACA,OAAOF,CACT,CACO,SAASG,GAAqBJ,EAAkBK,EAAU,CAC/D,IAAMC,EAAWN,EAAiB,MAAM,GAAG,EAC3C,QAAWG,KAAWG,EACpB,GAAIH,EAAQ,KAAK,EAAE,WAAWE,CAAQ,EACpC,OAAOF,EAAQ,KAAK,EAAE,MAAME,EAAW,OAAO,EAAE,CAAC,EAGrD,MAAO,EACT,CAOO,SAASE,GAA6BP,EAAkB,CAC7D,IAAIC,EAAW,GACXD,EAAiB,WAAW,4BAA4B,IAE1DC,EAAWF,GAA6BC,CAAgB,EACxDA,EAAmBQ,IAGrB,IAAIC,EAAeL,GAAqBJ,EAAkB,cAAc,EAIxE,GADAS,EAAeA,EAAa,SAAS,GAAG,EAAIA,EAAa,MAAM,EAAG,EAAE,EAAIA,EACpET,EAAiB,OAAO,2BAA2B,IAAM,IAAMA,EAAiB,OAAO,aAAa,IAAM,GAAI,CAEhH,IAAIU,EAA2B,GAC3BC,EAAc,GACdC,EAAa,OAAO,KAAK,aAAc,QAAQ,EAC/CC,EAAiB,GAIrB,GAFAF,EAAcP,GAAqBJ,EAAkB,aAAa,EAClEY,EAAa,OAAO,KAAKR,GAAqBJ,EAAkB,YAAY,EAAG,QAAQ,EACnF,CAACS,EAAc,CAGjBC,EAA2BN,GAAqBJ,EAAkB,0BAA0B,EAC5F,IAAMc,EAAWJ,EAAyB,YAAY,EACtD,GAAII,IAAa,SAAWA,IAAa,OACvC,MAAM,IAAI,MAAM,iGAAiG,EAGnH,GADAD,EAAiBT,GAAqBJ,EAAkB,gBAAgB,EACpE,CAACa,EACH,MAAM,IAAI,MAAM,0DAA0D,EAE5EJ,EAAe,GAAGC,CAAwB,MAAMC,CAAW,SAASE,CAAc,EACpF,CACA,GAAKF,GAEE,GAAIC,EAAW,SAAW,EAC/B,MAAM,IAAI,MAAM,sDAAsD,MAFtE,OAAM,IAAI,MAAM,uDAAuD,EAIzE,MAAO,CACL,KAAM,oBACN,IAAKH,EACL,YAAAE,EACA,WAAAC,EACA,SAAAX,CACF,CACF,KAAO,CAEL,IAAMc,EAAaX,GAAqBJ,EAAkB,uBAAuB,EAC7EW,EAAcP,GAAqBJ,EAAkB,aAAa,EAKtE,GAHKW,IACHA,EAAcK,GAAsBP,CAAY,GAE7CA,GAEE,GAAI,CAACM,EACV,MAAM,IAAI,MAAM,qEAAqE,MAFrF,OAAM,IAAI,MAAM,4DAA4D,EAI9E,MAAO,CACL,KAAM,gBACN,IAAKN,EACL,YAAAE,EACA,WAAAI,CACF,CACF,CACF,CAMA,SAASjB,GAAOmB,EAAM,CACpB,OAAO,mBAAmBA,CAAI,EAAE,QAAQ,OAAQ,GAAG,EAClD,QAAQ,KAAM,KAAK,EACnB,QAAQ,MAAO,KAAK,EAAE,QAAQ,OAAQ,GAAG,CAC5C,CASO,SAASC,GAAgBxB,EAAKyB,EAAM,CACzC,IAAMxB,EAAYC,GAAW,MAAMF,CAAG,EAClCG,EAAOF,EAAU,QAAQ,EAC7B,OAAAE,EAAOA,EAAOA,EAAK,SAAS,GAAG,EAAI,GAAGA,CAAI,GAAGsB,CAAI,GAAK,GAAGtB,CAAI,IAAIsB,CAAI,GAAKA,EAC1ExB,EAAU,QAAQE,CAAI,EACA,IAAI,IAAIF,EAAU,SAAS,CAAC,EAC7B,SAAS,CAChC,CAUO,SAASyB,GAAgB1B,EAAKyB,EAAME,EAAO,CAChD,IAAM1B,EAAYC,GAAW,MAAMF,CAAG,EACtC,OAAAC,EAAU,kBAAkBwB,EAAME,CAAK,EAChC1B,EAAU,SAAS,CAC5B,CAOO,SAAS2B,GAAgB5B,EAAKyB,EAAM,CAEzC,OADkBvB,GAAW,MAAMF,CAAG,EACrB,uBAAuByB,CAAI,CAC9C,CAQO,SAASI,GAAW7B,EAAK8B,EAAM,CACpC,IAAM7B,EAAYC,GAAW,MAAMF,CAAG,EACtC,OAAAC,EAAU,QAAQ6B,CAAI,EACf7B,EAAU,SAAS,CAC5B,CAMO,SAAS8B,GAAW/B,EAAK,CAE9B,OADkBE,GAAW,MAAMF,CAAG,EACrB,QAAQ,CAC3B,CAMO,SAASgC,GAAahC,EAAK,CAEhC,OADkBE,GAAW,MAAMF,CAAG,EACrB,UAAU,CAC7B,CAMO,SAASiC,GAAmBjC,EAAK,CACtC,IAAMC,EAAYC,GAAW,MAAMF,CAAG,EAChCkC,EAAajC,EAAU,QAAQ,EACrC,GAAI,CAACiC,EACH,MAAM,IAAI,WAAW,iCAAiC,EAExD,IAAIC,EAAclC,EAAU,SAAS,GAAK,GAC1C,OAAAkC,EAAcA,EAAY,KAAK,EAC3BA,IAAgB,KAClBA,EAAcA,EAAY,WAAW,GAAG,EAAIA,EAAc,IAAIA,CAAW,IAEpE,GAAGD,CAAU,GAAGC,CAAW,EACpC,CAmCO,SAASC,GAAiBC,EAAKC,EAAY,CAChD,IAAMC,EAAYC,GAAW,MAAMH,CAAG,EAClCI,EAAQF,EAAU,SAAS,EAC/B,OAAIE,EACFA,GAAS,IAAMH,EAEfG,EAAQH,EAEVC,EAAU,SAASE,CAAK,EACjBF,EAAU,SAAS,CAC5B,CASO,SAASG,GAAqBC,EAAMC,EAAmB,GAAM,CAElE,IAAMC,EAAaF,EAAK,YAAY,EACpC,OAAOC,EAAmBC,EAAW,UAAU,EAAGA,EAAW,OAAS,CAAC,EAAI,QAAeA,EAAW,UAAU,EAAGA,EAAW,OAAS,CAAC,EAAI,GAC7I,CAMO,SAASC,GAAaC,EAAS,CACpC,OAAQC,GAAyB,OAAO,KAAKD,CAAO,EAAE,SAAS,QAAQ,EAAtD,KAAKA,CAAO,CAC/B,CAcO,SAASE,GAAgBC,EAAeC,EAAY,CAMrDD,EAAc,OAAS,KACzBA,EAAgBA,EAAc,MAAM,EAAG,EAA6B,GAEtE,IAAME,EAAMF,EAAgBG,GAASF,EAAW,SAAS,EAAG,GAAwBD,EAAc,OAAQ,GAAG,EAC7G,OAAOI,GAAaF,CAAG,CACzB,CAQA,SAAsBG,GAAMC,EAAUC,EAASC,EAAY,QAAAC,EAAA,sBACzD,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CAEtC,IAAIC,EACEC,EAAe,IAAM,CACrBD,IAAY,QACd,aAAaA,CAAO,EAEtBD,EAAOH,CAAU,CACnB,EAOAI,EAAU,WANa,IAAM,CACvBL,IAAY,QACdA,EAAQ,oBAAoB,QAASM,CAAY,EAEnDH,EAAQ,CACV,EACqCJ,CAAQ,EACzCC,IAAY,QACdA,EAAQ,iBAAiB,QAASM,CAAY,CAElD,CAAC,CACH,GAQO,SAASV,GAASW,EAAeC,EAAcC,EAAY,IAAK,CAErE,OAAI,OAAO,UAAU,SACZF,EAAc,SAASC,EAAcC,CAAS,GAEvDA,EAAYA,GAAa,IACrBF,EAAc,OAASC,EAClBD,GAEPC,EAAeA,EAAeD,EAAc,OACxCC,EAAeC,EAAU,SAC3BA,GAAaA,EAAU,OAAOD,EAAeC,EAAU,MAAM,GAExDA,EAAU,MAAM,EAAGD,CAAY,EAAID,GAE9C,CA2BO,SAASG,GAAOC,EAAMC,EAAM,CACjC,OAAOD,EAAK,kBAAkB,IAAMC,EAAK,kBAAkB,CAC7D,CAMO,SAASC,GAAsBC,EAAK,CACzC,IAAMC,EAAYC,GAAW,MAAMF,CAAG,EAClCG,EACJ,GAAI,CACF,OAAIF,EAAU,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,IAAM,OAExCE,EAAcF,EAAU,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,EACrCG,GAAkBH,CAAS,EAIpCE,EAAcF,EAAU,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,EAG9CE,EAAc,GAETA,CACT,MAAgB,CACd,MAAM,IAAI,MAAM,0DAA0D,CAC5E,CACF,CACO,SAASC,GAAkBH,EAAW,CAC3C,GAAIA,EAAU,QAAQ,IAAM,OAC1B,MAAO,GAET,IAAMI,EAAOJ,EAAU,QAAQ,GAAKA,EAAU,QAAQ,IAAM,OAAY,GAAK,IAAMA,EAAU,QAAQ,GAKrG,MAAO,oJAAoJ,KAAKI,CAAI,GAAKJ,EAAU,QAAQ,IAAM,QAAaK,GAAe,SAASL,EAAU,QAAQ,CAAC,CAC3P,CAMO,SAASM,GAAiBC,EAAM,CACrC,GAAIA,IAAS,OACX,OAEF,IAAMC,EAAW,CAAC,EAClB,QAAWC,KAAOF,EAChB,GAAI,OAAO,UAAU,eAAe,KAAKA,EAAME,CAAG,EAAG,CACnD,IAAMC,EAAQH,EAAKE,CAAG,EACtBD,EAAS,KAAK,GAAG,mBAAmBC,CAAG,CAAC,IAAI,mBAAmBC,CAAK,CAAC,EAAE,CACzE,CAEF,OAAOF,EAAS,KAAK,GAAG,CAC1B,CAMO,SAASG,GAAWJ,EAAM,CAC/B,GAAIA,IAAS,OACX,OAEF,IAAMK,EAAM,CACV,WAAY,CAAC,CACf,EACA,QAAWH,KAAOF,EAChB,GAAI,OAAO,UAAU,eAAe,KAAKA,EAAME,CAAG,EAAG,CACnD,IAAMC,EAAQH,EAAKE,CAAG,EACtBG,EAAI,WAAW,KAAK,CAClB,IAAAH,EACA,MAAAC,CACF,CAAC,CACH,CAEF,OAAOE,CACT,CAMO,SAASC,GAAON,EAAM,CAC3B,GAAIA,IAAS,OACX,OAEF,IAAMK,EAAM,CAAC,EACb,QAAWE,KAAWP,EAAK,WACzBK,EAAIE,EAAQ,GAAG,EAAIA,EAAQ,MAE7B,OAAOF,CACT,CAMO,SAASG,GAAqBC,EAAmB,CACtD,GAAIA,IAAsB,OAG1B,OAAQA,EAAkB,KAAM,CAC9B,IAAK,MACH,MAAO,CACL,OAAQ,CACN,KAAM,YACN,2BAA4B,CAC1B,gBAAiBA,EAAkB,iBAAmB,IACtD,WAAYA,EAAkB,YAAc,GAC5C,gBAAiBA,EAAkB,gBACnC,WAAYA,EAAkB,iBAAmB,GACjD,eAAgBA,EAAkB,YAAc,EAClD,CACF,CACF,EACF,IAAK,OACH,MAAO,CACL,OAAQ,CACN,KAAM,OACN,sBAAuB,CACrB,gBAAiBA,EAAkB,eACrC,CACF,CACF,EACF,IAAK,QACH,MAAO,CACL,OAAQ,CACN,KAAM,QACN,mBAAoB,CAClB,OAAQA,EAAkB,MAC5B,CACF,CACF,EACF,IAAK,UACH,MAAO,CACL,OAAQ,CACN,KAAM,SACR,CACF,EACF,QACE,MAAM,MAAM,qCAAqC,CACrD,CACF,CACO,SAASC,GAA6BC,EAAyB,CAIpE,GAHI,CAACA,GAGD,cAAeA,EAGjB,OAEF,IAAMC,EAAe,CAAC,EACtB,QAAWV,KAAOS,EAAyB,CACzC,IAAME,EAAMX,EAAI,MAAM,GAAG,EACnBY,EAAe,MACjBD,EAAI,CAAC,EAAE,WAAWC,CAAY,IAChCD,EAAI,CAAC,EAAIA,EAAI,CAAC,EAAE,UAAUC,EAAa,MAAM,GAE/C,IAAMC,EAAO,CACX,OAAQF,EAAI,CAAC,EACb,kBAAmBF,EAAwBT,CAAG,CAChD,EACMc,EAAcJ,EAAa,UAAUK,GAAUA,EAAO,WAAaJ,EAAI,CAAC,CAAC,EAC3EG,EAAc,GAChBJ,EAAaI,CAAW,EAAE,MAAM,KAAKD,CAAI,EAEzCH,EAAa,KAAK,CAChB,SAAUC,EAAI,CAAC,EACf,MAAO,CAACE,CAAI,CACd,CAAC,CAEL,CACA,OAAOH,CACT,CAOO,SAASM,GAAiBC,EAAOC,EAAY,CAClD,OAAAD,EAAM,WAAaC,EACZD,CACT,CACO,SAASE,GAA0BC,EAAmB,CAC3D,OAAOA,EAAoBA,EAAkB,OAAS,IAAMA,EAAkB,MAAQ,MACxF,CACO,SAASC,GAAiBC,EAAM,CACrC,OAAIA,EAAK,QACA,mBAAmBA,EAAK,OAAO,EAE/BA,EAAK,OAEhB,CACO,SAASC,GAAsCC,EAAkB,CACtE,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAgB,EAAG,CACxD,QAAS,CACP,UAAWA,EAAiB,QAAQ,UAAU,IAAIC,GAC/B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAe,EAAG,CACjE,KAAMJ,GAAiBI,EAAgB,IAAI,CAC7C,CAAC,CAEF,CACH,CACF,CAAC,CACH,CACO,SAASC,GAA2CF,EAAkB,CAC3E,IAAIG,EACJ,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGH,CAAgB,EAAG,CACxD,QAAS,CACP,cAAeG,EAAKH,EAAiB,QAAQ,gBAAkB,MAAQG,IAAO,OAAS,OAASA,EAAG,IAAIC,GAClF,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAkB,EAAG,CACtE,KAAMP,GAAiBO,EAAmB,IAAI,CAChD,CAAC,CAEF,EACD,UAAWJ,EAAiB,QAAQ,UAAU,IAAIC,GAC/B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAe,EAAG,CACjE,KAAMJ,GAAiBI,EAAgB,IAAI,CAC7C,CAAC,CAEF,CACH,CACF,CAAC,CACH,CACO,SAAUI,GAA0BC,EAAsB,CAC/D,IAAIC,EAAY,CAAC,EACbC,EAAa,CAAC,EACdF,EAAqB,YAAWC,EAAYD,EAAqB,WACjEA,EAAqB,aAAYE,EAAaF,EAAqB,YACvE,IAAIG,EAAiB,EACjBC,EAAkB,EACtB,KAAOD,EAAiBF,EAAU,QAAUG,EAAkBF,EAAW,QACnED,EAAUE,CAAc,EAAE,MAAQD,EAAWE,CAAe,EAAE,OAChE,KAAM,CACJ,MAAOH,EAAUE,CAAc,EAAE,MACjC,IAAKF,EAAUE,CAAc,EAAE,IAC/B,QAAS,EACX,EACA,EAAEA,IAEF,KAAM,CACJ,MAAOD,EAAWE,CAAe,EAAE,MACnC,IAAKF,EAAWE,CAAe,EAAE,IACjC,QAAS,EACX,EACA,EAAEA,GAGN,KAAOD,EAAiBF,EAAU,OAAQ,EAAEE,EAC1C,KAAM,CACJ,MAAOF,EAAUE,CAAc,EAAE,MACjC,IAAKF,EAAUE,CAAc,EAAE,IAC/B,QAAS,EACX,EAEF,KAAOC,EAAkBF,EAAW,OAAQ,EAAEE,EAC5C,KAAM,CACJ,MAAOF,EAAWE,CAAe,EAAE,MACnC,IAAKF,EAAWE,CAAe,EAAE,IACjC,QAAS,EACX,CAEJ,CAIO,SAASC,GAAWC,EAAU,CACnC,IAAMC,EAAQD,EAAS,MAAM,GAAG,EAChC,QAAS,EAAI,EAAG,EAAIC,EAAM,OAAQ,IAChCA,EAAM,CAAC,EAAI,mBAAmBA,EAAM,CAAC,CAAC,EAExC,OAAOA,EAAM,KAAK,GAAG,CACvB,CCnrBO,IAAMC,GAAN,cAAmCC,EAAkB,CAQ1D,YAAYC,EAAYC,EAAS,CAC/B,MAAMD,EAAYC,CAAO,CAC3B,CAMM,YAAYC,EAAS,QAAAC,EAAA,sBACzB,OAAIC,GACK,KAAK,YAAY,YAAYF,CAAO,IAEzCA,EAAQ,OAAO,YAAY,IAAM,OAASA,EAAQ,OAAO,YAAY,IAAM,UAC7EA,EAAQ,IAAMG,GAAgBH,EAAQ,IAAKI,GAAa,WAAW,uBAAwB,IAAI,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,GAE5HJ,EAAQ,QAAQ,OAAOK,GAAgB,MAAM,EAE7CL,EAAQ,QAAQ,OAAOK,GAAgB,cAAc,EAC9C,KAAK,YAAY,YAAYL,CAAO,EAC7C,GACF,ECrCO,IAAMM,GAAN,KAAkC,CAOvC,OAAOC,EAAYC,EAAS,CAC1B,OAAO,IAAIC,GAAqBF,EAAYC,CAAO,CACrD,CACF,ECKO,IAAIE,GAAsC,SAAUA,EAAwB,CAIjF,OAAAA,EAAuBA,EAAuB,YAAiB,CAAC,EAAI,cAIpEA,EAAuBA,EAAuB,MAAW,CAAC,EAAI,QACvDA,CACT,EAAEA,IAA0B,CAAC,CAAC,EAExBC,GAAwB,CAC5B,kBAAmB,IAAM,IACzB,SAAU,EACV,eAAgB,EAAI,IACpB,gBAAiBD,GAAuB,YACxC,cAAe,GACf,eAAgB,MAClB,EACME,GAAoB,IAAIC,GAAW,4BAA4B,EAIxDC,GAAN,cAAiCC,EAAkB,CAQxD,YAAYC,EAAYC,EAASC,EAAeP,GAAuB,CACrE,MAAMK,EAAYC,CAAO,EAEzB,KAAK,aAAe,CAClB,gBAAiBC,EAAa,gBAAkBA,EAAa,gBAAkBP,GAAsB,gBACrG,SAAUO,EAAa,UAAYA,EAAa,UAAY,EAAI,KAAK,MAAMA,EAAa,QAAQ,EAAIP,GAAsB,SAC1H,eAAgBO,EAAa,gBAAkBA,EAAa,gBAAkB,EAAIA,EAAa,eAAiBP,GAAsB,eACtI,eAAgBO,EAAa,gBAAkBA,EAAa,gBAAkB,EAAI,KAAK,IAAIA,EAAa,eAAgBA,EAAa,kBAAoBA,EAAa,kBAAoBP,GAAsB,iBAAiB,EAAIA,GAAsB,eAC3P,kBAAmBO,EAAa,mBAAqBA,EAAa,mBAAqB,EAAIA,EAAa,kBAAoBP,GAAsB,kBAClJ,cAAeO,EAAa,cAAgBA,EAAa,cAAgBP,GAAsB,aACjG,CACF,CAMM,YAAYQ,EAAS,QAAAC,EAAA,sBACzB,OAAO,KAAK,mBAAmBD,EAAS,GAAO,CAAC,CAClD,GAWM,mBAAmBA,EAASE,EAAiBC,EAAS,QAAAF,EAAA,sBAC1D,IAAMG,EAAaJ,EAAQ,MAAM,EAC3BK,EAAiBH,GAAmB,CAAC,KAAK,aAAa,eAAiB,EAAEF,EAAQ,SAAW,OAASA,EAAQ,SAAW,QAAUA,EAAQ,SAAW,YAAcG,EAAU,IAAM,EACrLE,IACHD,EAAW,IAAME,GAAWF,EAAW,IAAK,KAAK,aAAa,aAAa,GAGzE,KAAK,aAAa,iBACpBA,EAAW,IAAMG,GAAgBH,EAAW,IAAKI,GAAa,WAAW,QAAS,KAAK,MAAM,KAAK,aAAa,eAAiB,GAAI,EAAE,SAAS,CAAC,GAElJ,IAAIC,EACJ,GAAI,CAGF,GAFAC,GAAO,KAAK,2BAA2BP,CAAO,IAAIE,EAAiB,UAAY,WAAW,EAAE,EAC5FI,EAAW,MAAM,KAAK,YAAY,YAAYL,CAAU,EACpD,CAAC,KAAK,YAAYC,EAAgBF,EAASM,CAAQ,EACrD,OAAOA,EAETP,EAAkBA,GAAmB,CAACG,GAAkBI,EAAS,SAAW,GAC9E,OAASE,EAAK,CAEZ,GADAD,GAAO,MAAM,uCAAuCC,EAAI,OAAO,WAAWA,EAAI,IAAI,EAAE,EAChF,CAAC,KAAK,YAAYN,EAAgBF,EAASM,EAAUE,CAAG,EAC1D,MAAMA,CAEV,CACA,aAAM,KAAK,MAAMN,EAAgBF,EAASH,EAAQ,WAAW,EACtD,KAAK,mBAAmBA,EAASE,EAAiB,EAAEC,CAAO,CACpE,GASA,YAAYE,EAAgBF,EAASM,EAAUE,EAAK,CAClD,GAAIR,GAAW,KAAK,aAAa,SAC/B,OAAAO,GAAO,KAAK,2BAA2BP,CAAO,gBAAgB,KAAK,aAAa,QAAQ,mBAAmB,EACpG,GAIT,IAAMS,EAAkB,CAAC,YAAa,kBAAmB,eAAgB,aAAc,SAAU,YAAa,UAAW,QAAS,oBAClI,EACA,GAAID,GACF,QAAWE,KAAkBD,EAC3B,GAAID,EAAI,KAAK,YAAY,EAAE,SAASE,CAAc,GAAKF,EAAI,QAAQ,YAAY,EAAE,SAASE,CAAc,GAAKF,EAAI,MAAQA,EAAI,KAAK,SAAS,EAAE,YAAY,IAAME,EAC7J,OAAAH,GAAO,KAAK,8BAA8BG,CAAc,qBAAqB,EACtE,GAOb,GAAIJ,GAAYE,EAAK,CACnB,IAAMG,EAAaL,EAAWA,EAAS,OAASE,EAAMA,EAAI,WAAa,EACvE,GAAI,CAACN,GAAkBS,IAAe,IACpC,OAAAJ,GAAO,KAAK,qDAAqD,EAC1D,GAGT,GAAII,IAAe,KAAOA,IAAe,IACvC,OAAAJ,GAAO,KAAK,2CAA2CI,CAAU,GAAG,EAC7D,EAEX,CACA,OAA+CH,GAAI,OAAU,eAA4DA,GAAI,QAAQ,WAAW,iCAAiC,GAC/KD,GAAO,KAAK,iFAAiF,EACtF,IAEF,EACT,CAQM,MAAML,EAAgBF,EAASY,EAAa,QAAAd,EAAA,sBAChD,IAAIe,EAAgB,EACpB,GAAIX,EACF,OAAQ,KAAK,aAAa,gBAAiB,CACzC,KAAKd,GAAuB,YAC1ByB,EAAgB,KAAK,KAAK,KAAK,IAAI,EAAGb,EAAU,CAAC,EAAI,GAAK,KAAK,aAAa,eAAgB,KAAK,aAAa,iBAAiB,EAC/H,MACF,KAAKZ,GAAuB,MAC1ByB,EAAgB,KAAK,aAAa,eAClC,KACJ,MAEAA,EAAgB,KAAK,OAAO,EAAI,IAElC,OAAAN,GAAO,KAAK,0BAA0BM,CAAa,IAAI,EAChDC,GAAMD,EAAeD,EAAatB,EAAiB,CAC5D,GACF,EC9KO,IAAMyB,GAAN,KAAgC,CAKrC,YAAYC,EAAc,CACxB,KAAK,aAAeA,CACtB,CAOA,OAAOC,EAAYC,EAAS,CAC1B,OAAO,IAAIC,GAAmBF,EAAYC,EAAS,KAAK,YAAY,CACtE,CACF,ECjBO,IAAME,GAAN,cAA+BC,EAAkB,CAMtD,YAAYC,EAAS,CACnB,OAAO,KAAK,YAAY,YAAY,KAAK,YAAYA,CAAO,CAAC,CAC/D,CAOA,YAAYA,EAAS,CAGnB,OAAOA,CACT,CACF,ECpBO,IAAMC,GAAN,cAAwCC,EAAiB,CAQ9D,YAAYC,EAAYC,EAAS,CAC/B,MAAMD,EAAYC,CAAO,CAC3B,CACF,ECZO,IAAMC,GAAN,KAAiB,CAOtB,OAAOC,EAAaC,EAAU,CAC5B,MAAM,IAAI,MAAM,mDAAmD,CACrE,CACF,ECNO,IAAMC,GAAN,cAAkCC,EAAW,CAOlD,OAAOC,EAAYC,EAAS,CAC1B,OAAO,IAAIC,GAA0BF,EAAYC,CAAO,CAC1D,CACF,ECjBA,IAAAE,GAAoB,SCIb,IAAMC,GAAN,cAA8BC,EAAkB,CAOrD,YAAYC,EAAYC,EAASC,EAAW,CAC1C,MAAMF,EAAYC,CAAO,EACzB,KAAK,UAAYC,CACnB,CAMM,YAAYC,EAAS,QAAAC,EAAA,sBACzB,OAAIC,KACGF,EAAQ,UACXA,EAAQ,QAAU,IAAIG,IAEnBH,EAAQ,QAAQ,IAAII,GAAgB,UAAU,GACjDJ,EAAQ,QAAQ,IAAII,GAAgB,WAAY,KAAK,SAAS,GAG3D,KAAK,YAAY,YAAYJ,CAAO,CAC7C,GACF,EDzBO,IAAMK,GAAN,KAA6B,CAKlC,YAAYC,EAAW,CACrB,IAAMC,EAAgB,CAAC,EACvB,GAAIC,GAAQ,CACV,GAAIF,EAAW,CACb,IAAMG,EAAkBH,EAAU,iBAAmB,GACjDG,EAAgB,OAAS,GAAKF,EAAc,QAAQE,CAAe,IAAM,IAC3EF,EAAc,KAAKE,CAAe,CAEtC,CAEA,IAAMC,EAAU,wBAAwBC,EAAW,GAC/CJ,EAAc,QAAQG,CAAO,IAAM,IACrCH,EAAc,KAAKG,CAAO,EAG5B,IAAIE,EAAc,iBAAiB,QAAQ,OAAO,IAC9CC,KACFD,EAAc,iBAAiB,QAAQ,OAAO,KAAQ,SAAK,CAAC,IAAO,SAAQ,CAAC,KAE1EL,EAAc,QAAQK,CAAW,IAAM,IACzCL,EAAc,KAAKK,CAAW,CAElC,CACA,KAAK,gBAAkBL,EAAc,KAAK,GAAG,CAC/C,CAOA,OAAOO,EAAYC,EAAS,CAC1B,OAAO,IAAIC,GAAgBF,EAAYC,EAAS,KAAK,eAAe,CACtE,CACF,EE7CA,IAAME,GAAqB,IAAIC,GACxB,SAASC,IAA6B,CAC3C,OAAOF,EACT,CCEA,IAAMG,GAAY,CAChB,aAAc,YAId,gBAAiB,CAIf,cAAe,eACjB,CACF,EAEMC,GAAyB,CAC7B,wBAAyB,IACzB,kBAAmB,IACnB,kBAAmB,IAAO,GAAK,CACjC,EAcA,SAAeC,GAAaC,EAAgBC,EAAmBC,EAAa,QAAAC,EAAA,sBAG1E,SAAeC,GAAoB,QAAAD,EAAA,sBACjC,GAAI,KAAK,IAAI,EAAID,EACf,GAAI,CACF,OAAO,MAAMF,EAAe,CAC9B,MAAa,CACX,OAAO,IACT,KACK,CACL,IAAMK,EAAa,MAAML,EAAe,EAExC,GAAIK,IAAe,KACjB,MAAM,IAAI,MAAM,iCAAiC,EAEnD,OAAOA,CACT,CACF,GACA,IAAIC,EAAQ,MAAMF,EAAkB,EACpC,KAAOE,IAAU,MACf,MAAMC,GAAMN,CAAiB,EAC7BK,EAAQ,MAAMF,EAAkB,EAElC,OAAOE,CACT,GAgBA,SAASE,GAAkBC,EAAYC,EAAQC,EAAoB,CACjE,IAAIC,EAAgB,KAChBN,EAAQ,KACNO,EAAU,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGf,EAAsB,EAAGa,CAAkB,EAKrFG,EAAS,CAIb,IAAI,cAAe,CACjB,OAAOF,IAAkB,IAC3B,EAKA,IAAI,eAAgB,CAClB,IAAIG,EACJ,MAAO,CAACD,EAAO,gBAAkBC,EAAmDT,GAAM,sBAAwB,MAAQS,IAAO,OAASA,EAAK,GAAKF,EAAQ,kBAAoB,KAAK,IAAI,CAC3L,EAKA,IAAI,aAAc,CAChB,OAAOP,IAAU,MAAQA,EAAM,mBAAqBO,EAAQ,wBAA0B,KAAK,IAAI,CACjG,CACF,EAKA,SAASG,EAAQC,EAAiB,CAChC,IAAIF,EACJ,OAAKD,EAAO,eAKVF,EAAgBb,GAHU,IAAMU,EAAW,SAASC,EAAQO,CAAe,EAG3BJ,EAAQ,mBAEvDE,EAAmDT,GAAM,sBAAwB,MAAQS,IAAO,OAASA,EAAK,KAAK,IAAI,CAAC,EAAE,KAAKG,IAC9HN,EAAgB,KAChBN,EAAQY,EACDZ,EACR,EAAE,MAAMa,GAAU,CAIjB,MAAAP,EAAgB,KAChBN,EAAQ,KACFa,CACR,CAAC,GAEIP,CACT,CACA,OAAaQ,GAAgBjB,EAAA,sBAU3B,OAAIW,EAAO,YAAoBE,EAAQI,CAAY,GAC/CN,EAAO,eACTE,EAAQI,CAAY,EAEfd,EACT,EACF,CAKA,SAASe,GAAaC,EAAU,CAC9B,IAAMC,EAAYD,EAAS,QAAQ,IAAI,kBAAkB,EACzD,GAAIA,EAAS,SAAW,KAAOC,EAC7B,OAAOA,CAGX,CAOA,SAASC,GAAeD,EAAW,CAOjC,MALuB,GADCA,EAAU,MAAM,CAAgB,EACd,KAAK,CAAC,IAAI,MAAM,GAAG,EAAE,OAAOE,GAAKA,CAAC,EACvC,IAAIC,IAAa,CAAC,CAACC,EAAKC,CAAK,KAAO,CACvE,CAACD,CAAG,EAAGC,CACT,IAAIF,EAAS,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,EAEV,OAAO,CAACG,EAAGC,IAAM,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGD,CAAC,EAAGC,CAAC,EAAG,CAAC,CAAC,CAClF,CASO,SAASC,GAAgDtB,EAAYC,EAAQ,CAElF,IAAIsB,EAAWxB,GAAkBC,EAAYC,CAAM,EACnD,MAAMuB,UAAwDC,EAAkB,CAC9E,YAAYC,EAAYtB,EAAS,CAC/B,MAAMsB,EAAYtB,CAAO,CAC3B,CACM,YAAYuB,EAAa,QAAAjC,EAAA,sBAC7B,GAAI,CAACiC,EAAY,IAAI,YAAY,EAAE,WAAW,UAAU,EACtD,MAAM,IAAI,MAAM,sFAAsF,EAGxG,IAAM9B,GAAS,MADU0B,EACa,CACpC,YAAaI,EAAY,YACzB,eAAgB,CACd,eAAgBA,EAAY,cAC9B,CACF,CAAC,GAAG,MACJA,EAAY,QAAQ,IAAIvC,GAAU,gBAAgB,cAAe,UAAUS,CAAK,EAAE,EAClF,IAAMgB,EAAW,MAAM,KAAK,YAAY,YAAYc,CAAW,EAC/D,GAAyDd,GAAS,SAAY,IAAK,CACjF,IAAMC,EAAYF,GAAaC,CAAQ,EACvC,GAAIC,EAAW,CACb,IAAMc,EAAgBb,GAAeD,CAAS,EACxCe,EAAkBD,EAAc,YAAcxC,GAAU,aAGxD0C,EAFgBC,GAAW,MAAMH,EAAc,iBAAiB,EACnC,QAAQ,EAAE,MAAM,GAAG,EACxB,CAAC,EACzBI,EAAuBjC,GAAkBC,EAAY6B,CAAe,EACpEI,GAAqB,MAAMD,EAAqB,CACpD,YAAaL,EAAY,YACzB,eAAgB,CACd,eAAgBA,EAAY,cAC9B,EACA,SAAUG,CACZ,CAAC,GAAG,MACJ,OAAAP,EAAWS,EACXL,EAAY,QAAQ,IAAIvC,GAAU,gBAAgB,cAAe,UAAU6C,CAAiB,EAAE,EACvF,KAAK,YAAY,YAAYN,CAAW,CACjD,CACF,CACA,OAAOd,CACT,GACF,CACA,MAAO,CACL,OAAQ,CAACa,EAAYtB,IACZ,IAAIoB,EAAgDE,EAAYtB,CAAO,CAElF,CACF,CC3NO,SAAS8B,GAAeC,EAAU,CACvC,GAAI,CAACA,GAAY,OAAOA,GAAa,SACnC,MAAO,GAET,IAAMC,EAAeD,EACrB,OAAO,MAAM,QAAQC,EAAa,SAAS,GAAK,OAAOA,EAAa,SAAY,UAAY,OAAOA,EAAa,wBAA2B,UAC7I,CASO,IAAMC,GAAN,KAAe,CAOpB,YAAYC,EAAWC,EAAU,CAAC,EAAG,CACnC,KAAK,UAAYD,EAGjB,KAAK,QAAU,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGC,CAAO,EAAG,CACvD,WAAYA,EAAQ,YAAcC,GAA2B,CAC/D,CAAC,CACH,CAOA,wBAAyB,CACvB,MAAO,CACL,WAAY,KAAK,QAAQ,WACzB,uBAAwB,KAAK,SAC/B,CACF,CACF,EAQO,SAASC,GAAYC,EAAYC,EAAkB,CAAC,EAAG,CAC5D,IAAIC,EACAF,IAAe,SACjBA,EAAa,IAAIG,IAKnB,IAAMC,EAAkB,IAAIC,GAAuBJ,EAAgB,gBAAgB,EAC7EL,EAAY,CAACU,GAAc,CAC/B,UAAWF,EAAgB,eAC7B,CAAC,EAAGG,GAAgBN,EAAgB,gBAAgB,EAAGG,EAAiBI,GAA8B,EAAG,IAAIC,GAA+B,IAAIC,GAA0BT,EAAgB,YAAY,EAItMU,GAAsB,OAAW,CAC/B,WAAY,GACd,CAAC,EAAGC,GAAU,CACZ,OAAQC,GAAO,KACf,mBAAoBC,GACpB,uBAAwBC,EAC1B,CAAC,CAAC,EACF,OAAIC,KAEFpB,EAAU,KAAKqB,GAAYhB,EAAgB,YAAY,CAAC,EACxDL,EAAU,KAAKsB,GAAmC,CAAC,GAErDtB,EAAU,KAAKuB,GAAkBnB,CAAU,EAAIoB,GAAiBC,GAAgDrB,GAAaE,EAAKD,EAAgB,YAAc,MAAQC,IAAO,OAASA,EAAKoB,EAAkB,EAAGtB,CAAU,EAAIA,CAAU,EACnO,IAAIL,GAASC,EAAWK,CAAe,CAChD,CCjGO,IAAMsB,GAAN,KAAiC,CAAC,ECMzC,IAAMC,GAAc,qBACdC,GAAiB,UACVC,GAAN,cAA4CC,EAAc,CAO/D,YAAYC,EAAKC,EAAS,CACxB,GAAID,IAAQ,OACV,MAAM,IAAI,MAAM,sBAAsB,EAMxC,GAHKC,IACHA,EAAU,CAAC,GAET,CAACA,EAAQ,UAAW,CACtB,IAAMC,EAA4BC,GAAyB,EAC3DF,EAAQ,UAAY,GAAGL,EAAW,IAAIC,EAAc,IAAIK,CAAgB,EAC1E,CACA,MAAM,OAAWD,CAAO,EACxB,KAAK,mBAAqB,kCAC1B,KAAK,QAAUA,EAAQ,UAAY,QAEnC,KAAK,IAAMD,EAEX,KAAK,QAAUC,EAAQ,SAAW,YACpC,CACF,EC1BO,IAAMG,GAAN,KAAoB,CAMzB,YAAYC,EAAKC,EAAU,CAEzB,KAAK,IAAMC,GAAcF,CAAG,EAC5B,KAAK,YAAcG,GAAsBH,CAAG,EAC5C,KAAK,SAAWC,EAChB,KAAK,qBAAuB,IAAIG,GAAqB,KAAK,IAAKH,EAAS,uBAAuB,CAAC,EAChG,KAAK,QAAUI,GAAOC,GAAa,KAAK,GAAG,GAAK,GAAI,OAAO,EAC3D,KAAK,WAAa,IAAIC,GACtB,QAAWC,KAAW,KAAK,SAAS,UAC9BC,IAAUD,aAAmBE,IAA8BF,aAAmBD,GAChF,KAAK,WAAaC,EACTG,GAAkBH,EAAQ,UAAU,IAG7C,KAAK,WAAaA,EAAQ,YAI9B,IAAMI,EAAuB,KAAK,qBAClCA,EAAqB,mBAAqB,MAC5C,CACF,EC/BO,IAAMC,EAAaC,GAAmB,CAC3C,cAAe,qBACf,UAAW,mBACb,CAAC,EAQM,SAASC,EAAmCC,EAAS,CAC1D,IAAIC,EAAIC,EACR,MAAO,CAEL,aAAcD,EAAuDD,GAAQ,kBAAoB,MAAQC,IAAO,OAAS,OAASA,EAAG,YACrI,gBAAiBC,EAAuDF,GAAQ,kBAAoB,MAAQE,IAAO,OAAS,OAASA,EAAG,cAC1I,CACF,CCdO,IAAMC,GAAN,MAAMC,CAAmB,CAC9B,aAAc,CAIZ,KAAK,KAAO,GAIZ,KAAK,IAAM,GAIX,KAAK,OAAS,GAId,KAAK,MAAQ,GAIb,KAAK,OAAS,GAId,KAAK,cAAgB,GAIrB,KAAK,IAAM,GAIX,KAAK,KAAO,GAIZ,KAAK,QAAU,GAIf,KAAK,sBAAwB,GAI7B,KAAK,gBAAkB,EACzB,CAOA,OAAO,MAAMC,EAAa,CACxB,IAAMC,EAAqB,IAAIF,EAC/B,QAAWG,KAAQF,EACjB,OAAQE,EAAM,CACZ,IAAK,IACHD,EAAmB,KAAO,GAC1B,MACF,IAAK,IACHA,EAAmB,IAAM,GACzB,MACF,IAAK,IACHA,EAAmB,OAAS,GAC5B,MACF,IAAK,IACHA,EAAmB,MAAQ,GAC3B,MACF,IAAK,IACHA,EAAmB,OAAS,GAC5B,MACF,IAAK,IACHA,EAAmB,cAAgB,GACnC,MACF,IAAK,IACHA,EAAmB,IAAM,GACzB,MACF,IAAK,IACHA,EAAmB,KAAO,GAC1B,MACF,IAAK,IACHA,EAAmB,QAAU,GAC7B,MACF,IAAK,IACHA,EAAmB,sBAAwB,GAC3C,MACF,IAAK,IACHA,EAAmB,gBAAkB,GACrC,MACF,QACE,MAAM,IAAI,WAAW,uBAAuBC,CAAI,EAAE,CACtD,CAEF,OAAOD,CACT,CAOA,OAAO,KAAKE,EAAgB,CAC1B,IAAMF,EAAqB,IAAIF,EAC/B,OAAII,EAAe,OACjBF,EAAmB,KAAO,IAExBE,EAAe,MACjBF,EAAmB,IAAM,IAEvBE,EAAe,SACjBF,EAAmB,OAAS,IAE1BE,EAAe,QACjBF,EAAmB,MAAQ,IAEzBE,EAAe,SACjBF,EAAmB,OAAS,IAE1BE,EAAe,gBACjBF,EAAmB,cAAgB,IAEjCE,EAAe,MACjBF,EAAmB,IAAM,IAEvBE,EAAe,OACjBF,EAAmB,KAAO,IAExBE,EAAe,UACjBF,EAAmB,QAAU,IAE3BE,EAAe,wBACjBF,EAAmB,sBAAwB,IAEzCE,EAAe,kBACjBF,EAAmB,gBAAkB,IAEhCA,CACT,CAOA,UAAW,CACT,IAAMD,EAAc,CAAC,EACrB,OAAI,KAAK,MACPA,EAAY,KAAK,GAAG,EAElB,KAAK,KACPA,EAAY,KAAK,GAAG,EAElB,KAAK,QACPA,EAAY,KAAK,GAAG,EAElB,KAAK,OACPA,EAAY,KAAK,GAAG,EAElB,KAAK,QACPA,EAAY,KAAK,GAAG,EAElB,KAAK,eACPA,EAAY,KAAK,GAAG,EAElB,KAAK,KACPA,EAAY,KAAK,GAAG,EAElB,KAAK,MACPA,EAAY,KAAK,GAAG,EAElB,KAAK,SACPA,EAAY,KAAK,GAAG,EAElB,KAAK,uBACPA,EAAY,KAAK,GAAG,EAElB,KAAK,iBACPA,EAAY,KAAK,GAAG,EAEfA,EAAY,KAAK,EAAE,CAC5B,CACF,ECxLO,IAAMI,GAAN,MAAMC,CAAwB,CACnC,aAAc,CAIZ,KAAK,KAAO,GAIZ,KAAK,IAAM,GAIX,KAAK,OAAS,GAId,KAAK,MAAQ,GAIb,KAAK,OAAS,GAId,KAAK,cAAgB,GAIrB,KAAK,KAAO,GAIZ,KAAK,IAAM,GAIX,KAAK,KAAO,GAIZ,KAAK,QAAU,GAIf,KAAK,sBAAwB,GAI7B,KAAK,gBAAkB,GAIvB,KAAK,aAAe,EACtB,CAOA,OAAO,MAAMC,EAAa,CACxB,IAAMC,EAA0B,IAAIF,EACpC,QAAWG,KAAQF,EACjB,OAAQE,EAAM,CACZ,IAAK,IACHD,EAAwB,KAAO,GAC/B,MACF,IAAK,IACHA,EAAwB,IAAM,GAC9B,MACF,IAAK,IACHA,EAAwB,OAAS,GACjC,MACF,IAAK,IACHA,EAAwB,MAAQ,GAChC,MACF,IAAK,IACHA,EAAwB,OAAS,GACjC,MACF,IAAK,IACHA,EAAwB,KAAO,GAC/B,MACF,IAAK,IACHA,EAAwB,IAAM,GAC9B,MACF,IAAK,IACHA,EAAwB,cAAgB,GACxC,MACF,IAAK,IACHA,EAAwB,KAAO,GAC/B,MACF,IAAK,IACHA,EAAwB,QAAU,GAClC,MACF,IAAK,IACHA,EAAwB,sBAAwB,GAChD,MACF,IAAK,IACHA,EAAwB,gBAAkB,GAC1C,MACF,IAAK,IACHA,EAAwB,aAAe,GACvC,MACF,QACE,MAAM,IAAI,WAAW,sBAAsBC,CAAI,EAAE,CACrD,CAEF,OAAOD,CACT,CAOA,OAAO,KAAKE,EAAgB,CAC1B,IAAMF,EAA0B,IAAIF,EACpC,OAAII,EAAe,OACjBF,EAAwB,KAAO,IAE7BE,EAAe,MACjBF,EAAwB,IAAM,IAE5BE,EAAe,SACjBF,EAAwB,OAAS,IAE/BE,EAAe,QACjBF,EAAwB,MAAQ,IAE9BE,EAAe,SACjBF,EAAwB,OAAS,IAE/BE,EAAe,OACjBF,EAAwB,KAAO,IAE7BE,EAAe,gBACjBF,EAAwB,cAAgB,IAEtCE,EAAe,MACjBF,EAAwB,IAAM,IAE5BE,EAAe,OACjBF,EAAwB,KAAO,IAE7BE,EAAe,UACjBF,EAAwB,QAAU,IAEhCE,EAAe,wBACjBF,EAAwB,sBAAwB,IAE9CE,EAAe,kBACjBF,EAAwB,gBAAkB,IAExCE,EAAe,eACjBF,EAAwB,aAAe,IAElCA,CACT,CASA,UAAW,CACT,IAAMD,EAAc,CAAC,EACrB,OAAI,KAAK,MACPA,EAAY,KAAK,GAAG,EAElB,KAAK,KACPA,EAAY,KAAK,GAAG,EAElB,KAAK,QACPA,EAAY,KAAK,GAAG,EAElB,KAAK,OACPA,EAAY,KAAK,GAAG,EAElB,KAAK,QACPA,EAAY,KAAK,GAAG,EAElB,KAAK,eACPA,EAAY,KAAK,GAAG,EAElB,KAAK,MACPA,EAAY,KAAK,GAAG,EAElB,KAAK,KACPA,EAAY,KAAK,GAAG,EAElB,KAAK,MACPA,EAAY,KAAK,GAAG,EAElB,KAAK,SACPA,EAAY,KAAK,GAAG,EAElB,KAAK,uBACPA,EAAY,KAAK,GAAG,EAElB,KAAK,iBACPA,EAAY,KAAK,GAAG,EAElB,KAAK,cACPA,EAAY,KAAK,GAAG,EAEfA,EAAY,KAAK,EAAE,CAC5B,CACF,ECzNO,IAAMI,GAAN,KAAkC,CAAC,ECOnC,SAASC,GAAgBC,EAAS,CACvC,OAAOA,EAAQ,IAAM,GAAGA,EAAQ,KAAK,IAAIA,EAAQ,GAAG,GAAKA,EAAQ,KACnE,CCgBO,IAAMC,GAAN,KAAyB,CAC9B,YAAYC,EAASC,EAAWC,EAAsBC,EAAUC,EAAeC,EAAUC,EAAUC,EAAWC,EAASC,EAAYC,EAAUC,EAAcC,EAAoBC,EAAiBC,EAAiBC,EAAaC,EAAmBC,GAA4BC,GAAeC,GAAiB,CAC3S,KAAK,QAAUnB,EACf,KAAK,UAAYC,EACbC,IAAyB,QAAa,OAAOA,GAAyB,UAExE,KAAK,YAAcA,EAAqB,YACxC,KAAK,SAAWA,EAAqB,SACrC,KAAK,cAAgBA,EAAqB,cAC1C,KAAK,SAAWA,EAAqB,SACrC,KAAK,SAAWA,EAAqB,SACrC,KAAK,UAAYA,EAAqB,UACtC,KAAK,aAAeA,EAAqB,QACzC,KAAK,WAAaA,EAAqB,WACvC,KAAK,gBAAkBA,EAAqB,gBAC5C,KAAK,SAAWA,EAAqB,SACrC,KAAK,aAAeA,EAAqB,aACzC,KAAK,mBAAqBA,EAAqB,mBAC/C,KAAK,gBAAkBA,EAAqB,gBAC5C,KAAK,gBAAkBA,EAAqB,gBAC5C,KAAK,YAAcA,EAAqB,YACpCA,EAAqB,oBACvB,KAAK,UAAYA,EAAqB,kBAAkB,eACxD,KAAK,eAAiBA,EAAqB,kBAAkB,eAC7D,KAAK,eAAiBA,EAAqB,kBAAkB,eAC7D,KAAK,gBAAkBA,EAAqB,kBAAkB,gBAC9D,KAAK,cAAgBA,EAAqB,kBAAkB,cAC5D,KAAK,cAAgBA,EAAqB,kBAAkB,cAC5D,KAAK,2BAA6BA,EAAqB,2BACvD,KAAK,cAAgBA,EAAqB,iBAG5C,KAAK,SAAWC,EAChB,KAAK,cAAgBC,EACrB,KAAK,UAAYG,EACjB,KAAK,YAAcL,EACnB,KAAK,SAAWG,EAChB,KAAK,SAAWC,EAChB,KAAK,aAAeE,EACpB,KAAK,gBAAkBW,GACvB,KAAK,WAAaV,EAClB,KAAK,SAAWC,EAChB,KAAK,aAAeC,EACpB,KAAK,mBAAqBC,EAC1B,KAAK,gBAAkBC,EACvB,KAAK,gBAAkBC,EACvB,KAAK,YAAcC,EACfC,IACF,KAAK,UAAYA,EAAkB,eACnC,KAAK,eAAiBA,EAAkB,eACxC,KAAK,eAAiBA,EAAkB,eACxC,KAAK,gBAAkBA,EAAkB,gBACzC,KAAK,cAAgBA,EAAkB,cACvC,KAAK,cAAgBA,EAAkB,cACvC,KAAK,2BAA6BC,GAClC,KAAK,cAAgBC,IAG3B,CAMA,IAAI,SAAU,CACZ,GAAI,KAAK,aACP,MAAO,CACL,IAAK,KAAK,aAAa,IACvB,MAAO,KAAK,aAAa,KAC3B,CAGJ,CAKA,UAAW,CACT,IAAME,EAAS,CAAC,KAAM,KAAM,MAAO,MAAO,KAAM,KAAM,MAAO,KAAM,MAAO,QAAS,QAAS,MAAO,MAAO,MAAO,MAAO,KAAM,KAAM,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,MAAM,EAC5LC,EAAU,CAAC,EACjB,QAAWC,KAASF,EAClB,OAAQE,EAAO,CACb,IAAK,KACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,OAAO,EACzD,MACF,IAAK,KACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,QAAQ,EAC1D,MACF,IAAK,MACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,aAAa,EAC/D,MACF,IAAK,MACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,QAAQ,EAC1D,MACF,IAAK,KACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,SAAWC,GAAqB,KAAK,SAAU,EAAK,EAAI,MAAS,EACnH,MACF,IAAK,KACH,KAAK,wBAAwBF,EAASC,EAAO,KAAK,UAAYC,GAAqB,KAAK,UAAW,EAAK,EAAI,MAAS,EACrH,MACF,IAAK,MACH,KAAK,wBAAwBF,EAASC,EAAO,KAAK,QAAUE,GAAgB,KAAK,OAAO,EAAI,MAAS,EACrG,MACF,IAAK,KACH,KAAK,wBAAwBH,EAASC,EAAO,KAAK,UAAU,EAC5D,MACF,IAAK,MACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,eAAe,EACjE,MACF,IAAK,QAEH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,SAAS,EAC3D,MACF,IAAK,QAEH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,cAAc,EAChE,MACF,IAAK,MAEH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,eAAiBC,GAAqB,KAAK,eAAgB,EAAK,EAAI,MAAS,EAC/H,MACF,IAAK,MAEH,KAAK,wBAAwBF,EAASC,EAAO,KAAK,gBAAkBC,GAAqB,KAAK,gBAAiB,EAAK,EAAI,MAAS,EACjI,MACF,IAAK,MAEH,KAAK,wBAAwBF,EAASC,EAAO,KAAK,aAAa,EAC/D,MACF,IAAK,MAEH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,aAAa,EAC/D,MACF,IAAK,KACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,QAAQ,EAC1D,MACF,IAAK,KACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,WAAW,EAC7D,MACF,IAAK,MACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,SAAS,EAC3D,MACF,IAAK,OACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,YAAY,EAC9D,MACF,IAAK,OACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,kBAAkB,EACpE,MACF,IAAK,OACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,eAAe,EACjE,MACF,IAAK,OACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,eAAe,EACjE,MACF,IAAK,OACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,WAAW,EAC7D,MACF,IAAK,QACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,0BAA0B,EAC5E,MACF,IAAK,OACH,KAAK,wBAAwBD,EAASC,EAAO,KAAK,aAAa,EAC/D,KACJ,CAEF,OAAOD,EAAQ,KAAK,GAAG,CACzB,CAQA,wBAAwBA,EAASI,EAAKC,EAAO,CACtCA,IAGLD,EAAM,mBAAmBA,CAAG,EAC5BC,EAAQ,mBAAmBA,CAAK,EAC5BD,EAAI,OAAS,GAAKC,EAAM,OAAS,GACnCL,EAAQ,KAAK,GAAGI,CAAG,IAAIC,CAAK,EAAE,EAElC,CACF,ECzMO,SAASC,GAA+BC,EAAwBC,EAAwCC,EAAa,CAC1H,IAAMC,EAAUH,EAAuB,QAAUA,EAAuB,QAAUI,GAC5EC,EAAsBJ,aAAkDK,GAA6BL,EAAyC,OAChJM,EAIJ,GAHIF,IAAwB,QAAaH,IAAgB,SACvDK,EAA8B,IAAIC,GAA4BN,EAAaD,CAAsC,GAE/GI,IAAwB,QAAaE,IAAgC,OACvE,MAAM,UAAU,gEAAgE,EAGlF,GAAIJ,GAAW,aACb,OAAIE,IAAwB,OACnBI,GAAuCT,EAAwBK,CAAmB,EAElFK,GAA0CV,EAAwBO,CAA2B,EAMxG,GAAIJ,GAAW,aACb,OAAIE,IAAwB,OACnBM,GAAuCX,EAAwBK,CAAmB,EAGrFF,GAAW,aACNS,GAA0CZ,EAAwBO,CAA2B,EAE7FM,GAA0Cb,EAAwBO,CAA2B,EAI1G,GAAIJ,GAAW,aAAc,CAC3B,GAAIE,IAAwB,OAC1B,OAAOS,GAAuCd,EAAwBK,CAAmB,EAEzF,MAAM,IAAI,WAAW,kGAAkG,CAE3H,CACA,MAAM,IAAI,WAAW,oCAAoC,CAC3D,CAiBA,SAASS,GAAuCd,EAAwBK,EAAqB,CAE3F,GADAL,EAAyBe,GAAyCf,CAAsB,EACpF,CAACA,EAAuB,YAAc,EAAEA,EAAuB,aAAeA,EAAuB,WACvG,MAAM,IAAI,WAAW,uGAAuG,EAE9H,IAAIgB,EAAW,IACXhB,EAAuB,WACzBgB,EAAW,KAGb,IAAIC,EACAjB,EAAuB,cACrBA,EAAuB,SACzBiB,EAAsBC,GAAmB,MAAMlB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,EAEvGiB,EAAsBE,GAAwB,MAAMnB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,GAIhH,IAAMoB,EAAe,CAACH,GAA4C,GAAIjB,EAAuB,SAAWqB,GAAqBrB,EAAuB,SAAU,EAAK,EAAI,GAAIA,EAAuB,UAAYqB,GAAqBrB,EAAuB,UAAW,EAAK,EAAI,GAAIsB,GAAiBjB,EAAoB,YAAaL,EAAuB,cAAeA,EAAuB,QAAQ,EAAGA,EAAuB,WAAYA,EAAuB,QAAUuB,GAAgBvB,EAAuB,OAAO,EAAI,GAAIA,EAAuB,SAAWA,EAAuB,SAAW,GAAIA,EAAuB,QAASA,EAAuB,aAAeA,EAAuB,aAAe,GAAIA,EAAuB,mBAAqBA,EAAuB,mBAAqB,GAAIA,EAAuB,gBAAkBA,EAAuB,gBAAkB,GAAIA,EAAuB,gBAAkBA,EAAuB,gBAAkB,GAAIA,EAAuB,YAAcA,EAAuB,YAAc,EAAE,EAAE,KAAK;AAAA,CAAI,EACvhCwB,EAAYnB,EAAoB,kBAAkBe,CAAY,EACpE,OAAO,IAAIK,GAAmBzB,EAAuB,QAASwB,EAAWP,EAAqB,OAAW,OAAWjB,EAAuB,SAAUA,EAAuB,SAAUA,EAAuB,UAAWA,EAAuB,QAASA,EAAuB,WAAYgB,EAAUhB,EAAuB,aAAcA,EAAuB,mBAAoBA,EAAuB,gBAAiBA,EAAuB,gBAAiBA,EAAuB,WAAW,CACze,CAiBA,SAASW,GAAuCX,EAAwBK,EAAqB,CAE3F,GADAL,EAAyBe,GAAyCf,CAAsB,EACpF,CAACA,EAAuB,YAAc,EAAEA,EAAuB,aAAeA,EAAuB,WACvG,MAAM,IAAI,WAAW,uGAAuG,EAE9H,IAAIgB,EAAW,IACXU,EAAY1B,EAAuB,aACnCA,EAAuB,WACzBgB,EAAW,IACPhB,EAAuB,aACzBgB,EAAW,KACFhB,EAAuB,YAChCgB,EAAW,KACXU,EAAY1B,EAAuB,YAIvC,IAAIiB,EACAjB,EAAuB,cACrBA,EAAuB,SACzBiB,EAAsBC,GAAmB,MAAMlB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,EAEvGiB,EAAsBE,GAAwB,MAAMnB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,GAIhH,IAAMoB,EAAe,CAACH,GAA4C,GAAIjB,EAAuB,SAAWqB,GAAqBrB,EAAuB,SAAU,EAAK,EAAI,GAAIA,EAAuB,UAAYqB,GAAqBrB,EAAuB,UAAW,EAAK,EAAI,GAAIsB,GAAiBjB,EAAoB,YAAaL,EAAuB,cAAeA,EAAuB,QAAQ,EAAGA,EAAuB,WAAYA,EAAuB,QAAUuB,GAAgBvB,EAAuB,OAAO,EAAI,GAAIA,EAAuB,SAAWA,EAAuB,SAAW,GAAIA,EAAuB,QAASgB,EAAUU,EAAW1B,EAAuB,aAAeA,EAAuB,aAAe,GAAIA,EAAuB,mBAAqBA,EAAuB,mBAAqB,GAAIA,EAAuB,gBAAkBA,EAAuB,gBAAkB,GAAIA,EAAuB,gBAAkBA,EAAuB,gBAAkB,GAAIA,EAAuB,YAAcA,EAAuB,YAAc,EAAE,EAAE,KAAK;AAAA,CAAI,EAC5iCwB,EAAYnB,EAAoB,kBAAkBe,CAAY,EACpE,OAAO,IAAIK,GAAmBzB,EAAuB,QAASwB,EAAWP,EAAqB,OAAW,OAAWjB,EAAuB,SAAUA,EAAuB,SAAUA,EAAuB,UAAWA,EAAuB,QAASA,EAAuB,WAAYgB,EAAUhB,EAAuB,aAAcA,EAAuB,mBAAoBA,EAAuB,gBAAiBA,EAAuB,gBAAiBA,EAAuB,WAAW,CACze,CAiBA,SAASS,GAAuCT,EAAwBK,EAAqB,CAE3F,GADAL,EAAyBe,GAAyCf,CAAsB,EACpF,CAACA,EAAuB,YAAc,EAAEA,EAAuB,aAAeA,EAAuB,WACvG,MAAM,IAAI,WAAW,uGAAuG,EAE9H,IAAIgB,EAAW,IACXU,EAAY1B,EAAuB,aACnCA,EAAuB,WACzBgB,EAAW,IACPhB,EAAuB,aACzBgB,EAAW,KACFhB,EAAuB,YAChCgB,EAAW,KACXU,EAAY1B,EAAuB,YAIvC,IAAIiB,EACAjB,EAAuB,cACrBA,EAAuB,SACzBiB,EAAsBC,GAAmB,MAAMlB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,EAEvGiB,EAAsBE,GAAwB,MAAMnB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,GAIhH,IAAMoB,EAAe,CAACH,GAA4C,GAAIjB,EAAuB,SAAWqB,GAAqBrB,EAAuB,SAAU,EAAK,EAAI,GAAIA,EAAuB,UAAYqB,GAAqBrB,EAAuB,UAAW,EAAK,EAAI,GAAIsB,GAAiBjB,EAAoB,YAAaL,EAAuB,cAAeA,EAAuB,QAAQ,EAAGA,EAAuB,WAAYA,EAAuB,QAAUuB,GAAgBvB,EAAuB,OAAO,EAAI,GAAIA,EAAuB,SAAWA,EAAuB,SAAW,GAAIA,EAAuB,QAASgB,EAAUU,EAAW1B,EAAuB,gBAAiBA,EAAuB,aAAeA,EAAuB,aAAe,GAAIA,EAAuB,mBAAqBA,EAAuB,mBAAqB,GAAIA,EAAuB,gBAAkBA,EAAuB,gBAAkB,GAAIA,EAAuB,gBAAkBA,EAAuB,gBAAkB,GAAIA,EAAuB,YAAcA,EAAuB,YAAc,EAAE,EAAE,KAAK;AAAA,CAAI,EACplCwB,EAAYnB,EAAoB,kBAAkBe,CAAY,EACpE,OAAO,IAAIK,GAAmBzB,EAAuB,QAASwB,EAAWP,EAAqB,OAAW,OAAWjB,EAAuB,SAAUA,EAAuB,SAAUA,EAAuB,UAAWA,EAAuB,QAASA,EAAuB,WAAYgB,EAAUhB,EAAuB,aAAcA,EAAuB,mBAAoBA,EAAuB,gBAAiBA,EAAuB,gBAAiBA,EAAuB,YAAa,OAAW,OAAW,OAAWA,EAAuB,eAAe,CACljB,CAeA,SAASa,GAA0Cb,EAAwBO,EAA6B,CAGtG,GAFAP,EAAyBe,GAAyCf,CAAsB,EAEpF,CAACA,EAAuB,aAAe,CAACA,EAAuB,UACjE,MAAM,IAAI,WAAW,yGAAyG,EAEhI,IAAIgB,EAAW,IACXU,EAAY1B,EAAuB,aACnCA,EAAuB,WACzBgB,EAAW,IACPhB,EAAuB,aACzBgB,EAAW,KACFhB,EAAuB,YAChCgB,EAAW,KACXU,EAAY1B,EAAuB,YAIvC,IAAIiB,EACAjB,EAAuB,cACrBA,EAAuB,SACzBiB,EAAsBC,GAAmB,MAAMlB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,EAEvGiB,EAAsBE,GAAwB,MAAMnB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,GAIhH,IAAMoB,EAAe,CAACH,GAA4C,GAAIjB,EAAuB,SAAWqB,GAAqBrB,EAAuB,SAAU,EAAK,EAAI,GAAIA,EAAuB,UAAYqB,GAAqBrB,EAAuB,UAAW,EAAK,EAAI,GAAIsB,GAAiBf,EAA4B,YAAaP,EAAuB,cAAeA,EAAuB,QAAQ,EAAGO,EAA4B,kBAAkB,eAAgBA,EAA4B,kBAAkB,eAAgBA,EAA4B,kBAAkB,eAAiBc,GAAqBd,EAA4B,kBAAkB,eAAgB,EAAK,EAAI,GAAIA,EAA4B,kBAAkB,gBAAkBc,GAAqBd,EAA4B,kBAAkB,gBAAiB,EAAK,EAAI,GAAIA,EAA4B,kBAAkB,cAAeA,EAA4B,kBAAkB,cAAeP,EAAuB,QAAUuB,GAAgBvB,EAAuB,OAAO,EAAI,GAAIA,EAAuB,SAAWA,EAAuB,SAAW,GAAIA,EAAuB,QAASgB,EAAUU,EAAW1B,EAAuB,aAAcA,EAAuB,mBAAoBA,EAAuB,gBAAiBA,EAAuB,gBAAiBA,EAAuB,WAAW,EAAE,KAAK;AAAA,CAAI,EACr2CwB,EAAYjB,EAA4B,kBAAkBa,CAAY,EAC5E,OAAO,IAAIK,GAAmBzB,EAAuB,QAASwB,EAAWP,EAAqB,OAAW,OAAWjB,EAAuB,SAAUA,EAAuB,SAAUA,EAAuB,UAAWA,EAAuB,QAASA,EAAuB,WAAYgB,EAAUhB,EAAuB,aAAcA,EAAuB,mBAAoBA,EAAuB,gBAAiBA,EAAuB,gBAAiBA,EAAuB,YAAaO,EAA4B,iBAAiB,CACxhB,CAeA,SAASK,GAA0CZ,EAAwBO,EAA6B,CAGtG,GAFAP,EAAyBe,GAAyCf,CAAsB,EAEpF,CAACA,EAAuB,aAAe,CAACA,EAAuB,UACjE,MAAM,IAAI,WAAW,yGAAyG,EAEhI,IAAIgB,EAAW,IACXU,EAAY1B,EAAuB,aACnCA,EAAuB,WACzBgB,EAAW,IACPhB,EAAuB,aACzBgB,EAAW,KACFhB,EAAuB,YAChCgB,EAAW,KACXU,EAAY1B,EAAuB,YAIvC,IAAIiB,EACAjB,EAAuB,cACrBA,EAAuB,SACzBiB,EAAsBC,GAAmB,MAAMlB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,EAEvGiB,EAAsBE,GAAwB,MAAMnB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,GAIhH,IAAMoB,EAAe,CAACH,GAA4C,GAAIjB,EAAuB,SAAWqB,GAAqBrB,EAAuB,SAAU,EAAK,EAAI,GAAIA,EAAuB,UAAYqB,GAAqBrB,EAAuB,UAAW,EAAK,EAAI,GAAIsB,GAAiBf,EAA4B,YAAaP,EAAuB,cAAeA,EAAuB,QAAQ,EAAGO,EAA4B,kBAAkB,eAAgBA,EAA4B,kBAAkB,eAAgBA,EAA4B,kBAAkB,eAAiBc,GAAqBd,EAA4B,kBAAkB,eAAgB,EAAK,EAAI,GAAIA,EAA4B,kBAAkB,gBAAkBc,GAAqBd,EAA4B,kBAAkB,gBAAiB,EAAK,EAAI,GAAIA,EAA4B,kBAAkB,cAAeA,EAA4B,kBAAkB,cAAeP,EAAuB,2BAA4B,OAAWA,EAAuB,cAAeA,EAAuB,QAAUuB,GAAgBvB,EAAuB,OAAO,EAAI,GAAIA,EAAuB,SAAWA,EAAuB,SAAW,GAAIA,EAAuB,QAASgB,EAAUU,EAAW1B,EAAuB,aAAcA,EAAuB,mBAAoBA,EAAuB,gBAAiBA,EAAuB,gBAAiBA,EAAuB,WAAW,EAAE,KAAK;AAAA,CAAI,EACz8CwB,EAAYjB,EAA4B,kBAAkBa,CAAY,EAC5E,OAAO,IAAIK,GAAmBzB,EAAuB,QAASwB,EAAWP,EAAqB,OAAW,OAAWjB,EAAuB,SAAUA,EAAuB,SAAUA,EAAuB,UAAWA,EAAuB,QAASA,EAAuB,WAAYgB,EAAUhB,EAAuB,aAAcA,EAAuB,mBAAoBA,EAAuB,gBAAiBA,EAAuB,gBAAiBA,EAAuB,YAAaO,EAA4B,kBAAmBP,EAAuB,2BAA4BA,EAAuB,aAAa,CACjnB,CAeA,SAASU,GAA0CV,EAAwBO,EAA6B,CAGtG,GAFAP,EAAyBe,GAAyCf,CAAsB,EAEpF,CAACA,EAAuB,aAAe,CAACA,EAAuB,UACjE,MAAM,IAAI,WAAW,yGAAyG,EAEhI,IAAIgB,EAAW,IACXU,EAAY1B,EAAuB,aACnCA,EAAuB,WACzBgB,EAAW,IACPhB,EAAuB,aACzBgB,EAAW,KACFhB,EAAuB,YAChCgB,EAAW,KACXU,EAAY1B,EAAuB,YAIvC,IAAIiB,EACAjB,EAAuB,cACrBA,EAAuB,SACzBiB,EAAsBC,GAAmB,MAAMlB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,EAEvGiB,EAAsBE,GAAwB,MAAMnB,EAAuB,YAAY,SAAS,CAAC,EAAE,SAAS,GAIhH,IAAMoB,EAAe,CAACH,GAA4C,GAAIjB,EAAuB,SAAWqB,GAAqBrB,EAAuB,SAAU,EAAK,EAAI,GAAIA,EAAuB,UAAYqB,GAAqBrB,EAAuB,UAAW,EAAK,EAAI,GAAIsB,GAAiBf,EAA4B,YAAaP,EAAuB,cAAeA,EAAuB,QAAQ,EAAGO,EAA4B,kBAAkB,eAAgBA,EAA4B,kBAAkB,eAAgBA,EAA4B,kBAAkB,eAAiBc,GAAqBd,EAA4B,kBAAkB,eAAgB,EAAK,EAAI,GAAIA,EAA4B,kBAAkB,gBAAkBc,GAAqBd,EAA4B,kBAAkB,gBAAiB,EAAK,EAAI,GAAIA,EAA4B,kBAAkB,cAAeA,EAA4B,kBAAkB,cAAeP,EAAuB,2BAA4B,OAAWA,EAAuB,cAAeA,EAAuB,QAAUuB,GAAgBvB,EAAuB,OAAO,EAAI,GAAIA,EAAuB,SAAWA,EAAuB,SAAW,GAAIA,EAAuB,QAASgB,EAAUU,EAAW1B,EAAuB,gBAAiBA,EAAuB,aAAcA,EAAuB,mBAAoBA,EAAuB,gBAAiBA,EAAuB,gBAAiBA,EAAuB,WAAW,EAAE,KAAK;AAAA,CAAI,EACj/CwB,EAAYjB,EAA4B,kBAAkBa,CAAY,EAC5E,OAAO,IAAIK,GAAmBzB,EAAuB,QAASwB,EAAWP,EAAqB,OAAW,OAAWjB,EAAuB,SAAUA,EAAuB,SAAUA,EAAuB,UAAWA,EAAuB,QAASA,EAAuB,WAAYgB,EAAUhB,EAAuB,aAAcA,EAAuB,mBAAoBA,EAAuB,gBAAiBA,EAAuB,gBAAiBA,EAAuB,YAAaO,EAA4B,kBAAmBP,EAAuB,2BAA4BA,EAAuB,cAAeA,EAAuB,eAAe,CACzpB,CACA,SAASsB,GAAiBpB,EAAayB,EAAeC,EAAU,CAG9D,IAAMC,EAAW,CAAC,SAAS3B,CAAW,IAAIyB,CAAa,EAAE,EACzD,OAAIC,GACFC,EAAS,KAAK,IAAID,CAAQ,EAAE,EAEvBC,EAAS,KAAK,EAAE,CACzB,CACA,SAASd,GAAyCf,EAAwB,CACxE,IAAMG,EAAUH,EAAuB,QAAUA,EAAuB,QAAUI,GAClF,GAAIJ,EAAuB,cAAgBG,EAAU,aACnD,MAAM,WAAW,kEAAkE,EAErF,GAAIH,EAAuB,WAAa,QAAaA,EAAuB,aAC1E,MAAM,WAAW,wDAAwD,EAE3E,GAAIA,EAAuB,WAAaG,EAAU,aAChD,MAAM,WAAW,+DAA+D,EAElF,GAAIH,EAAuB,WAAa,QAAaA,EAAuB,UAC1E,MAAM,WAAW,qDAAqD,EAExE,GAAIA,EAAuB,aAAeA,EAAuB,YAAY,uBAAyBG,EAAU,aAC9G,MAAM,WAAW,iEAAiE,EAEpF,GAAIH,EAAuB,aAAeA,EAAuB,YAAY,eAAiBG,EAAU,aACtG,MAAM,WAAW,kEAAkE,EAErF,GAAIH,EAAuB,aAAeA,EAAuB,YAAY,iBAAmBG,EAAU,aACxG,MAAM,WAAW,kEAAkE,EAErF,GAAIH,EAAuB,aAAeA,EAAuB,YAAY,KAAOG,EAAU,aAC5F,MAAM,WAAW,kEAAkE,EAErF,GAAIA,EAAU,cAAgBH,EAAuB,cAAgBA,EAAuB,YAAY,MAAQA,EAAuB,YAAY,SACjJ,MAAM,WAAW,6EAA6E,EAEhG,GAAIG,EAAU,cAAgBH,EAAuB,aAAeA,EAAuB,YAAY,aACrG,MAAM,WAAW,sEAAsE,EAEzF,GAAIG,EAAU,eAAiBH,EAAuB,4BAA8BA,EAAuB,eACzG,MAAM,WAAW,mGAAmG,EAEtH,GAAIA,EAAuB,iBAAmBG,EAAU,aACtD,MAAM,WAAW,2EAA2E,EAE9F,OAAAH,EAAuB,QAAUG,EAC1BH,CACT,CCpWO,IAAM8B,GAAN,KAAsB,CAM3B,YAAYC,EAAQC,EAAS,CAC3B,IAAMC,EAAgB,IAAIC,GAAqBH,EAAO,IAAKA,EAAO,SAAS,uBAAuB,CAAC,EACnG,KAAK,KAAOA,EAAO,IACfA,EAAO,OAAS,QAClB,KAAK,aAAe,GACpB,KAAK,0BAA4B,IAAII,GAAUF,CAAa,IAE5D,KAAK,aAAe,GACpB,KAAK,0BAA4B,IAAIG,GAAYH,CAAa,GAE3DD,IACHA,EAAUK,GAAa,GAEzB,KAAK,SAAWL,CAClB,CAMA,IAAI,SAAU,CACZ,OAAO,KAAK,QACd,CAMA,IAAI,KAAM,CACR,OAAO,KAAK,IACd,CAaM,aAAaM,EAAwB,QAAAC,EAAA,yBAAxBC,EAAUC,EAAU,CAAC,EAAG,CACzC,IAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACxB,GAAM,CACJ,KAAAC,EACA,eAAAC,CACF,EAAIC,EAAW,+BAAgCT,CAAO,EACtD,GAAI,KAAK,eAAmB,GAAAC,EAAKD,EAAQ,cAAgB,MAAQC,IAAO,SAAkBA,EAAG,WAAcC,EAAKF,EAAQ,cAAgB,MAAQE,IAAO,OAAS,OAASA,EAAG,WAAaQ,IAAc,GAAAP,EAAKH,EAAQ,cAAgB,MAAQG,IAAO,SAAkBA,EAAG,eAAkBC,EAAKJ,EAAQ,cAAgB,MAAQI,IAAO,OAAS,OAASA,EAAG,eAAiBM,IAAc,GAAAL,EAAKL,EAAQ,cAAgB,MAAQK,IAAO,SAAkBA,EAAG,eACzb,MAAM,IAAI,WAAW,yJAAyJ,EAEhL,GAAI,CACF,OAAO,MAAM,KAAK,0BAA0B,aAAa,OAAO,OAAO,CACrE,YAAaL,EAAQ,YACrB,SAAAD,EACA,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGC,EAAQ,UAAU,EAAG,CAC7E,QAASM,EAAKN,EAAQ,cAAgB,MAAQM,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,gBAAiB,KAAK,QACxB,EAAGK,EAAmCH,CAAc,CAAC,CAAC,CACxD,OAASI,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAWM,YAAYV,EAA+B,QAAAC,EAAA,yBAA/BgB,EAAiBd,EAAU,CAAC,EAAG,CAC/C,IAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACxB,GAAM,CACJ,KAAAC,EACA,eAAAC,CACF,EAAIC,EAAW,8BAA+BT,CAAO,EACrD,GAAI,KAAK,eAAmB,GAAAC,EAAKD,EAAQ,cAAgB,MAAQC,IAAO,SAAkBA,EAAG,WAAcC,EAAKF,EAAQ,cAAgB,MAAQE,IAAO,OAAS,OAASA,EAAG,WAAaQ,IAAc,GAAAP,EAAKH,EAAQ,cAAgB,MAAQG,IAAO,SAAkBA,EAAG,eAAkBC,EAAKJ,EAAQ,cAAgB,MAAQI,IAAO,OAAS,OAASA,EAAG,eAAiBM,IAAc,GAAAL,EAAKL,EAAQ,cAAgB,MAAQK,IAAO,SAAkBA,EAAG,eACzb,MAAM,IAAI,WAAW,yJAAyJ,EAEhL,GAAI,CACF,IAAMU,EAAW,MAAM,KAAK,0BAA0B,YAAY,KAAK,SAAUD,EAAiB,OAAO,OAAO,CAC9G,YAAad,EAAQ,YACrB,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAASM,EAAKN,EAAQ,cAAgB,MAAQM,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGK,EAAmCH,CAAc,CAAC,CAAC,EACtD,YAAK,SAAWM,EACTC,CACT,OAASH,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAWM,cAA2B,QAAAT,EAAA,yBAAdE,EAAU,CAAC,EAAG,CAC/B,IAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACxB,GAAM,CACJ,KAAAC,EACA,eAAAC,CACF,EAAIC,EAAW,+BAAgCT,CAAO,EACtD,GAAI,KAAK,eAAmB,GAAAC,EAAKD,EAAQ,cAAgB,MAAQC,IAAO,SAAkBA,EAAG,WAAcC,EAAKF,EAAQ,cAAgB,MAAQE,IAAO,OAAS,OAASA,EAAG,WAAaQ,IAAc,GAAAP,EAAKH,EAAQ,cAAgB,MAAQG,IAAO,SAAkBA,EAAG,eAAkBC,EAAKJ,EAAQ,cAAgB,MAAQI,IAAO,OAAS,OAASA,EAAG,eAAiBM,IAAc,GAAAL,EAAKL,EAAQ,cAAgB,MAAQK,IAAO,SAAkBA,EAAG,eACzb,MAAM,IAAI,WAAW,yJAAyJ,EAEhL,GAAI,CACF,OAAO,MAAM,KAAK,0BAA0B,aAAa,KAAK,SAAU,OAAO,OAAO,CACpF,YAAaL,EAAQ,YACrB,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAASM,EAAKN,EAAQ,cAAgB,MAAQM,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGK,EAAmCH,CAAc,CAAC,CAAC,CACxD,OAASI,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAUM,YAAyB,QAAAT,EAAA,yBAAdE,EAAU,CAAC,EAAG,CAC7B,IAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACxB,GAAM,CACJ,KAAAC,EACA,eAAAC,CACF,EAAIC,EAAW,6BAA8BT,CAAO,EACpD,GAAI,KAAK,eAAmB,GAAAC,EAAKD,EAAQ,cAAgB,MAAQC,IAAO,SAAkBA,EAAG,WAAcC,EAAKF,EAAQ,cAAgB,MAAQE,IAAO,OAAS,OAASA,EAAG,WAAaQ,IAAc,GAAAP,EAAKH,EAAQ,cAAgB,MAAQG,IAAO,SAAkBA,EAAG,eAAkBC,EAAKJ,EAAQ,cAAgB,MAAQI,IAAO,OAAS,OAASA,EAAG,eAAiBM,IAAc,GAAAL,EAAKL,EAAQ,cAAgB,MAAQK,IAAO,SAAkBA,EAAG,eACzb,MAAM,IAAI,WAAW,yJAAyJ,EAEhL,GAAI,CACF,OAAO,MAAM,KAAK,0BAA0B,WAAW,KAAK,SAAU,OAAO,OAAO,CAClF,YAAaL,EAAQ,YACrB,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAASM,EAAKN,EAAQ,cAAgB,MAAQM,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGK,EAAmCH,CAAc,CAAC,CAAC,CACxD,OAASI,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAYM,WAAWV,EAA2B,QAAAC,EAAA,yBAA3BkB,EAAahB,EAAU,CAAC,EAAG,CAC1C,IAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACxB,GAAM,CACJ,KAAAC,EACA,eAAAC,CACF,EAAIC,EAAW,6BAA8BT,CAAO,EACpD,GAAI,KAAK,eAAmB,GAAAC,EAAKD,EAAQ,cAAgB,MAAQC,IAAO,SAAkBA,EAAG,WAAcC,EAAKF,EAAQ,cAAgB,MAAQE,IAAO,OAAS,OAASA,EAAG,WAAaQ,IAAc,GAAAP,EAAKH,EAAQ,cAAgB,MAAQG,IAAO,SAAkBA,EAAG,eAAkBC,EAAKJ,EAAQ,cAAgB,MAAQI,IAAO,OAAS,OAASA,EAAG,eAAiBM,IAAc,GAAAL,EAAKL,EAAQ,cAAgB,MAAQK,IAAO,SAAkBA,EAAG,eACzb,MAAM,IAAI,WAAW,yJAAyJ,EAEhL,GAAI,CACF,IAAMY,EAAmB,OAAO,OAAO,CACrC,YAAajB,EAAQ,YACrB,YAAAgB,EACA,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGhB,EAAQ,UAAU,EAAG,CAC7E,QAASM,EAAKN,EAAQ,cAAgB,MAAQM,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGK,EAAmCH,CAAc,CAAC,EACrD,OAAO,MAAM,KAAK,0BAA0B,WAAWS,CAAgB,CACzE,OAASL,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GACF,ECpOO,IAAMW,GAAN,KAAwB,CAO7B,YAAYC,EAAkBC,EAAW,CAAC,EAAG,CAC3C,KAAK,iBAAmBD,CAC1B,CAOA,IAAI,cAAe,CACjB,OAAO,KAAK,iBAAiB,YAC/B,CAOA,IAAI,cAAe,CACjB,OAAO,KAAK,iBAAiB,YAC/B,CAQA,IAAI,oBAAqB,CACvB,OAAO,KAAK,iBAAiB,kBAC/B,CAOA,IAAI,iBAAkB,CACpB,OAAO,KAAK,iBAAiB,eAC/B,CAOA,IAAI,iBAAkB,CACpB,OAAO,KAAK,iBAAiB,eAC/B,CAOA,IAAI,oBAAqB,CACvB,OAAO,KAAK,iBAAiB,kBAC/B,CAOA,IAAI,UAAW,CACb,OAAO,KAAK,iBAAiB,QAC/B,CAOA,IAAI,eAAgB,CAClB,OAAO,KAAK,iBAAiB,aAC/B,CAaA,IAAI,YAAa,CACf,OAAO,KAAK,iBAAiB,UAC/B,CAQA,IAAI,cAAe,CACjB,OAAO,KAAK,iBAAiB,YAC/B,CAOA,IAAI,aAAc,CAChB,OAAO,KAAK,iBAAiB,WAC/B,CAQA,IAAI,iBAAkB,CAEtB,CAOA,IAAI,QAAS,CACX,OAAO,KAAK,iBAAiB,MAC/B,CASA,IAAI,cAAe,CACjB,OAAO,KAAK,iBAAiB,YAC/B,CAQA,IAAI,YAAa,CACf,OAAO,KAAK,iBAAiB,UAC/B,CAQA,IAAI,YAAa,CACf,OAAO,KAAK,iBAAiB,UAC/B,CAQA,IAAI,uBAAwB,CAC1B,OAAO,KAAK,iBAAiB,qBAC/B,CAQA,IAAI,eAAgB,CAClB,OAAO,KAAK,iBAAiB,aAC/B,CAOA,IAAI,YAAa,CACf,OAAO,KAAK,iBAAiB,UAC/B,CAOA,IAAI,aAAc,CAChB,OAAO,KAAK,iBAAiB,WAC/B,CAOA,IAAI,MAAO,CACT,OAAO,KAAK,iBAAiB,IAC/B,CAOA,IAAI,yBAA0B,CAC5B,OAAO,KAAK,iBAAiB,uBAC/B,CAOA,IAAI,MAAO,CACT,OAAO,KAAK,iBAAiB,IAC/B,CAMA,IAAI,WAAY,CACd,OAAO,KAAK,iBAAiB,SAC/B,CAUA,IAAI,mBAAoB,CACtB,OAAO,KAAK,iBAAiB,iBAC/B,CAUA,IAAI,gBAAiB,CACnB,OAAO,KAAK,iBAAiB,cAC/B,CAQA,IAAI,cAAe,CACjB,OAAO,KAAK,iBAAiB,YAC/B,CAOA,IAAI,UAAW,CACb,OAAO,KAAK,iBAAiB,QAC/B,CAOA,IAAI,WAAY,CACd,OAAO,KAAK,iBAAiB,SAC/B,CAOA,IAAI,iBAAkB,CACpB,OAAO,KAAK,iBAAiB,eAC/B,CAOA,IAAI,SAAU,CACZ,OAAO,KAAK,iBAAiB,OAC/B,CAOA,IAAI,qBAAsB,CACxB,OAAO,KAAK,iBAAiB,mBAC/B,CAOA,IAAI,cAAe,CACjB,OAAO,KAAK,iBAAiB,YAC/B,CAOA,IAAI,UAAW,CACb,MAAM,MAAM,8CAA8C,CAC5D,CAOA,IAAI,oBAAqB,CAEzB,CAIA,IAAI,WAAY,CACd,OAAO,KAAK,iBAAiB,SAC/B,CACF,ECzRO,SAASE,GAAaC,EAAM,CACjC,GAAIA,IAAS,OAGb,OAAOA,CACT,CACO,SAASC,GAAqBC,EAAKC,EAAS,CACjD,GAAID,GAAO,CAACC,EACV,MAAM,IAAI,WAAW,2DAA2D,EAE9ED,GAAO,CAACA,EAAI,sBACdA,EAAI,oBAAsBE,GAE9B,CCpFO,SAASC,GAAuBC,EAAU,CAC/C,IAAMC,GAAaD,EAAS,UAAU,WAAW,WAAa,CAAC,GAAG,IAAIE,IAAM,CAC1E,OAAQA,EAAE,MACV,MAAOA,EAAE,IAAMA,EAAE,KACnB,EAAE,EACIC,GAAcH,EAAS,UAAU,WAAW,YAAc,CAAC,GAAG,IAAIE,IAAM,CAC5E,OAAQA,EAAE,MACV,MAAOA,EAAE,IAAMA,EAAE,KACnB,EAAE,EACF,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGF,CAAQ,EAAG,CAChD,UAAAC,EACA,WAAAE,EACA,UAAW,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGH,EAAS,SAAS,EAAG,CAC9D,WAAY,CACV,UAAAC,EACA,WAAAE,CACF,CACF,CAAC,CACH,CAAC,CACH,CCpBO,IAAMC,GAASC,GAAmB,UAAU,ECD5C,IAAMC,GAAN,MAAMC,UAA2B,KAAM,CAC5C,YAAYC,EAAS,CACnB,MAAMA,CAAO,EACb,KAAK,KAAO,qBACZ,OAAO,eAAe,KAAMD,EAAmB,SAAS,CAC1D,CACF,EAKaE,GAAN,MAAMC,UAA6B,KAAM,CAC9C,YAAYF,EAAS,CACnB,MAAMA,CAAO,EACb,KAAK,KAAO,uBACZ,OAAO,eAAe,KAAME,EAAqB,SAAS,CAC5D,CACF,EA+DaC,GAAN,KAAa,CAkElB,YAAYC,EAAW,CAErB,KAAK,sBAAwB,GAC7B,KAAK,QAAU,GACf,KAAK,sBAAwB,CAAC,EAC9B,KAAK,UAAYA,EACjB,KAAK,QAAU,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC9C,KAAK,QAAUD,EACf,KAAK,OAASC,CAChB,CAAC,EAID,KAAK,QAAQ,MAAM,IAAM,CAEzB,CAAC,CACH,CAKM,cAA+B,QAAAC,EAAA,yBAAlBC,EAAc,CAAC,EAAG,CAInC,IAHI,KAAK,UACP,KAAK,QAAU,IAEV,CAAC,KAAK,UAAU,GAAK,CAAC,KAAK,OAAO,GACvC,MAAM,KAAK,KAAKA,CAAW,EAC3B,MAAM,KAAK,MAAM,CAErB,GASM,UAAuB,QAAAD,EAAA,yBAAdE,EAAU,CAAC,EAAG,CACtB,KAAK,OAAO,IACf,KAAK,UAAY,MAAM,KAAK,UAAU,OAAO,CAC3C,YAAaA,EAAQ,YACrB,aAAc,KAAK,aAAa,KAAK,IAAI,CAC3C,CAAC,GAEH,KAAK,oBAAoB,CAC3B,GASA,aAAaC,EAAO,CAClB,QAAWC,KAAY,KAAK,sBAC1BA,EAASD,CAAK,CAElB,CAIM,YAAyB,QAAAH,EAAA,yBAAdE,EAAU,CAAC,EAAG,CAC7B,KAAK,UAAY,MAAM,KAAK,UAAU,OAAOA,CAAO,CACtD,GASA,KAAKA,EAAU,CAAC,EAAG,CACjB,GAAI,CAAC,KAAK,gBAAiB,CACzB,KAAK,gBAAkB,KAAK,SAASA,CAAO,EAC5C,IAAMG,EAAuB,IAAM,CACjC,KAAK,gBAAkB,MACzB,EACA,KAAK,gBAAgB,KAAKA,EAAsBA,CAAoB,EAAE,MAAM,KAAK,MAAM,CACzF,CACA,OAAO,KAAK,eACd,CACA,qBAAsB,CACpB,GAAI,KAAK,UAAU,MAAM,QACvB,KAAK,QAAU,GACX,CAAC,KAAK,uBACR,WAAK,OAAO,KAAK,UAAU,MAAM,KAAK,EAChC,KAAK,UAAU,MAAM,MAG/B,GAAI,KAAK,UAAU,MAAM,cACvB,KAAK,QAAU,GACX,CAAC,KAAK,uBAAuB,CAC/B,IAAMC,EAAQ,IAAIZ,GAAqB,wBAAwB,EAC/D,WAAK,OAAOY,CAAK,EACXA,CACR,CAEE,KAAK,OAAO,GAAK,KAAK,SAMxB,KAAK,QAAQ,KAAK,UAAU,CAAC,CAEjC,CAIM,eAAgC,QAAAN,EAAA,yBAAlBC,EAAc,CAAC,EAAG,CACpC,OAAI,KAAK,SACP,KAAK,aAAaA,CAAW,EAAE,MAAM,KAAK,MAAM,EAIlD,KAAK,oBAAoB,EAClB,KAAK,OACd,GAOA,WAAWG,EAAU,CACnB,YAAK,sBAAsB,KAAKA,CAAQ,EACjC,IAAM,CACX,KAAK,sBAAwB,KAAK,sBAAsB,OAAOG,GAAKA,IAAMH,CAAQ,CACpF,CACF,CAIA,QAAS,CACP,IAAMD,EAAQ,KAAK,UAAU,MAC7B,MAAO,GAAQA,EAAM,aAAeA,EAAM,aAAeA,EAAM,MACjE,CAIA,aAAc,CACP,KAAK,UACR,KAAK,QAAU,GACX,KAAK,QACP,KAAK,OAAO,IAAIZ,GAAmB,gCAAgC,CAAC,EAG1E,CAIA,WAAY,CACV,OAAO,KAAK,OACd,CAUA,gBAAgBW,EAAU,CAAC,EAAG,CAC5B,GAAI,CAAC,KAAK,cACR,KAAK,cAAgB,KAAK,WAAWA,CAAO,UACnCA,EAAQ,YACjB,MAAM,IAAI,MAAM,uCAAuC,EAEzD,OAAO,KAAK,aACd,CAiDA,mBAAoB,CAClB,OAAO,KAAK,UAAU,KACxB,CAOA,WAAY,CAEV,OADc,KAAK,UAAU,MAChB,MACf,CAKA,UAAW,CACT,OAAO,KAAK,UAAU,SAAS,CACjC,CACF,EChYO,IAAMM,GAAN,cAAyCC,EAAO,CACrD,YAAYC,EAAS,CACnB,GAAM,CACJ,WAAAC,EACA,WAAAC,EACA,aAAAC,EAAe,KACf,WAAAC,EACA,WAAAC,EACA,wBAAAC,CACF,EAAIN,EACAO,EACAF,IACFE,EAAQ,KAAK,MAAMF,CAAU,EAAE,OAEjC,IAAMG,EAAYC,GAAsC,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGF,CAAK,EAAG,CAC9F,WAAAN,EACA,WAAAC,EACA,wBAAAI,CACF,CAAC,CAAC,EACF,MAAME,CAAS,EACX,OAAOJ,GAAe,YACxB,KAAK,WAAWA,CAAU,EAE5B,KAAK,aAAeD,CACtB,CACA,OAAQ,CACN,OAAOO,GAAM,KAAK,YAAY,CAChC,CACF,EAOMC,GAAS,UAAoC,QAAAC,EAAA,yBAAdZ,EAAU,CAAC,EAAG,CACjD,IAAMO,EAAQ,KAAK,MACb,CACJ,OAAAM,CACF,EAAIN,EACJ,OAAIA,EAAM,YACDE,GAAsCF,CAAK,EAE/CM,GAKL,MAAMN,EAAM,WAAW,iBAAiBM,EAAQ,CAC9C,YAAab,EAAQ,WACvB,CAAC,EACDO,EAAM,YAAc,GACbE,GAAsCF,CAAK,IARhDA,EAAM,YAAc,GACbE,GAAsCF,CAAK,EAQtD,IAOMO,GAAS,UAAoC,QAAAF,EAAA,yBAAdZ,EAAU,CAAC,EAAG,CACjD,IAAMO,EAAQ,KAAK,MACb,CACJ,WAAAN,EACA,WAAAC,EACA,wBAAAI,CACF,EAAIC,EACJ,GAAKA,EAAM,WASJ,GAAI,CAACA,EAAM,YAChB,GAAI,CACF,IAAMQ,EAAS,MAAMR,EAAM,WAAW,cAAc,CAClD,YAAaP,EAAQ,WACvB,CAAC,EACK,CACJ,WAAAgB,EACA,aAAAC,CACF,EAAIF,EACEG,EAAmBX,EAAM,aAC3BU,IACFV,EAAM,aAAeU,GAEnBD,IAAe,WAAaC,IAAiBC,GAAoB,OAAOlB,EAAQ,cAAiB,WAEnGA,EAAQ,aAAaO,CAAK,EACjBS,IAAe,WACxBT,EAAM,OAASQ,EACfR,EAAM,YAAc,IACXS,IAAe,WACxBT,EAAM,MAAQ,IAAI,MAAM,kCAAkCQ,EAAO,uBAAyB,SAAS,GAAG,EACtGR,EAAM,YAAc,GAExB,OAASY,EAAK,CACZZ,EAAM,MAAQY,EACdZ,EAAM,YAAc,EACtB,MAnCoB,CACpBA,EAAM,UAAY,GAClB,IAAMQ,EAAS,MAAMd,EAAW,iBAAiBC,EAAYI,CAAuB,EAEpFC,EAAM,OAASQ,EAAO,OAClBA,EAAO,aAAe,YACxBR,EAAM,OAASQ,EACfR,EAAM,YAAc,GAExB,CA4BA,OAAOE,GAAsCF,CAAK,CACpD,IAOMa,GAAW,UAAoB,CACnC,OAAO,KAAK,UAAU,CACpB,MAAO,KAAK,KACd,EAAG,CAACC,EAAKC,IAAU,CAEjB,GAAID,IAAQ,aAGZ,OAAOC,CACT,CAAC,CACH,EAKA,SAASb,GAAsCF,EAAO,CACpD,MAAO,CACL,MAAO,OAAO,OAAO,CAAC,EAAGA,CAAK,EAC9B,OAAAI,GACA,SAAAS,GACA,OAAAN,EACF,CACF,CCvIO,SAASS,GAAcC,EAAQ,CACpC,GAAIA,EAAO,OAAS,EAClB,MAAM,IAAI,WAAW,wCAAwC,EAE/D,GAAIA,EAAO,OAASA,EAAO,OAAS,EAClC,MAAM,IAAI,WAAW,mGAAmG,EAE1H,OAAOA,EAAO,MAAQ,SAASA,EAAO,MAAM,IAAIA,EAAO,OAASA,EAAO,MAAQ,CAAC,GAAK,SAASA,EAAO,MAAM,GAC7G,CCbA,IAAAC,GAA6B,SAI7B,IAAIC,GAA2B,SAAUA,EAAa,CACpD,OAAAA,EAAYA,EAAY,KAAU,CAAC,EAAI,OACvCA,EAAYA,EAAY,MAAW,CAAC,EAAI,QACjCA,CACT,EAAEA,IAAe,CAAC,CAAC,EAMNC,GAAN,KAAY,CAKjB,YAAYC,EAAc,EAAG,CAsB3B,GAlBA,KAAK,QAAU,EAIf,KAAK,UAAY,EAIjB,KAAK,OAAS,EAId,KAAK,WAAa,CAAC,EAKnB,KAAK,MAAQF,GAAY,KACrBE,EAAc,EAChB,MAAM,IAAI,WAAW,mCAAmC,EAE1D,KAAK,YAAcA,EACnB,KAAK,QAAU,IAAI,eACrB,CAMA,aAAaC,EAAW,CACtB,KAAK,WAAW,KAAK,IAAYC,EAAA,sBAC/B,GAAI,CACF,KAAK,UACL,MAAMD,EAAU,EAChB,KAAK,UACL,KAAK,YACL,KAAK,gBAAgB,CACvB,OAASE,EAAO,CACd,KAAK,QAAQ,KAAK,QAASA,CAAK,CAClC,CACF,EAAC,CACH,CAKM,IAAK,QAAAD,EAAA,sBACT,OAAI,KAAK,WAAW,SAAW,EACtB,QAAQ,QAAQ,GAEzB,KAAK,gBAAgB,EACd,IAAI,QAAQ,CAACE,EAASC,IAAW,CACtC,KAAK,QAAQ,GAAG,SAAUD,CAAO,EACjC,KAAK,QAAQ,GAAG,QAASD,GAAS,CAChC,KAAK,MAAQL,GAAY,MACzBO,EAAOF,CAAK,CACd,CAAC,CACH,CAAC,EACH,GAKA,eAAgB,CACd,OAAI,KAAK,OAAS,KAAK,WAAW,OACzB,KAAK,WAAW,KAAK,QAAQ,EAE/B,IACT,CAMA,iBAAkB,CAChB,GAAI,KAAK,QAAUL,GAAY,MAG/B,IAAI,KAAK,WAAa,KAAK,WAAW,OAAQ,CAC5C,KAAK,QAAQ,KAAK,QAAQ,EAC1B,MACF,CACA,KAAO,KAAK,QAAU,KAAK,aAAa,CACtC,IAAMG,EAAY,KAAK,cAAc,EACrC,GAAIA,EACFA,EAAU,MAEV,OAEJ,EACF,CACF,ECjHO,IAAMK,GAAN,KAAsB,CAAC,ECiB9B,SAAsBC,GAAaC,EAAM,QAAAC,EAAA,sBACvC,IAAMC,EAAa,IAAI,WACvB,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtCF,EAAW,UAAYG,GAAM,CAC3BF,EAAQE,EAAG,OAAO,MAAM,CAC1B,EACAH,EAAW,QAAUE,EACrBF,EAAW,WAAWF,CAAI,CAC5B,CAAC,CACH,GAUO,IAAMM,GAAS,UAAgB,CAEtC,EACaC,GAAqB,UAA4B,CAE9D,ECpBO,IAAMC,GAAN,MAAMC,UAAmBC,EAAc,CAC5C,YAAYC,EAAuBC,EAAqCC,EAGxEC,EAAS,CACPA,EAAUA,GAAW,CAAC,EACtB,IAAIC,EACAC,EACJ,GAAIC,GAAeL,CAAmC,EAEpDI,EAAML,EACNI,EAAWH,UACFM,IAAUN,aAA+CO,IAA8BP,aAA+CQ,IAAuBC,GAAkBT,CAAmC,EAE3NI,EAAML,EACNG,EAAUD,EACVE,EAAWO,GAAYV,EAAqCE,CAAO,UAC1D,CAACF,GAAuC,OAAOA,GAAwC,SAGhGI,EAAML,EACFE,GAAqB,OAAOA,GAAsB,WACpDC,EAAUD,GAEZE,EAAWO,GAAY,IAAIF,GAAuBN,CAAO,UAChDF,GAAuC,OAAOA,GAAwC,UAAYC,GAAqB,OAAOA,GAAsB,SAAU,CAEvK,IAAMU,EAAgBX,EAChBY,EAAWX,EACXY,EAAiBC,GAA6Bf,CAAqB,EACzE,GAAIc,EAAe,OAAS,oBAC1B,GAAIP,GAAQ,CACV,IAAMS,EAAsB,IAAIR,GAA2BM,EAAe,YAAaA,EAAe,UAAU,EAChHT,EAAMY,GAAgBA,GAAgBH,EAAe,IAAK,mBAAmBF,CAAa,CAAC,EAAG,mBAAmBC,CAAQ,CAAC,EACrHV,EAAQ,eACXA,EAAQ,cAAuCW,EAAe,SAAvC,SAEzBV,EAAWO,GAAYK,EAAqBb,CAAO,CACrD,KACE,OAAM,IAAI,MAAM,oEAAoE,UAE7EW,EAAe,OAAS,gBACjCT,EAAMY,GAAgBA,GAAgBH,EAAe,IAAK,mBAAmBF,CAAa,CAAC,EAAG,mBAAmBC,CAAQ,CAAC,EAAI,IAAMC,EAAe,WACnJV,EAAWO,GAAY,IAAIF,GAAuBN,CAAO,MAEzD,OAAM,IAAI,MAAM,0FAA0F,CAE9G,KACE,OAAM,IAAI,MAAM,uEAAuE,EAEzF,MAAME,EAAKD,CAAQ,EAClB,CACC,SAAU,KAAK,MACf,cAAe,KAAK,cACtB,EAAI,KAAK,gCAAgC,EACzC,KAAK,YAAc,IAAIc,GAAY,KAAK,oBAAoB,EAC5D,KAAK,UAAYC,GAAgB,KAAK,IAAKC,GAAa,WAAW,QAAQ,EAC3E,KAAK,WAAaD,GAAgB,KAAK,IAAKC,GAAa,WAAW,SAAS,CAC/E,CAIA,IAAI,MAAO,CACT,OAAO,KAAK,KACd,CAIA,IAAI,eAAgB,CAClB,OAAO,KAAK,cACd,CAQA,aAAaC,EAAU,CACrB,OAAO,IAAIvB,EAAWwB,GAAgB,KAAK,IAAKF,GAAa,WAAW,SAAUC,EAAS,SAAW,EAAI,OAAYA,CAAQ,EAAG,KAAK,QAAQ,CAChJ,CAQA,YAAYE,EAAW,CACrB,OAAO,IAAIzB,EAAWwB,GAAgB,KAAK,IAAKF,GAAa,WAAW,UAAWG,EAAU,SAAW,EAAI,OAAYA,CAAS,EAAG,KAAK,QAAQ,CACnJ,CAKA,qBAAsB,CACpB,OAAO,IAAIC,GAAiB,KAAK,IAAK,KAAK,QAAQ,CACrD,CAKA,oBAAqB,CACnB,OAAO,IAAIC,GAAgB,KAAK,IAAK,KAAK,QAAQ,CACpD,CAKA,mBAAoB,CAClB,OAAO,IAAIC,GAAe,KAAK,IAAK,KAAK,QAAQ,CACnD,CA4DM,UAA0C,QAAAC,EAAA,yBAAjCC,EAAS,EAAGC,EAAO1B,EAAU,CAAC,EAAG,CAC9C,IAAI2B,EACJ3B,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5CA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EAC9D,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,sBAAuB/B,CAAO,EAC7C,GAAI,CACF,IAAMgC,EAAM,MAAM,KAAK,YAAY,SAAS,OAAO,OAAO,CACxD,YAAahC,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,eAAgB,CACd,mBAAoBvB,GAAS,OAAYJ,EAAQ,UACnD,EACA,MAAOyB,IAAW,GAAK,CAACC,EAAQ,OAAYO,GAAc,CACxD,OAAAR,EACA,MAAAC,CACF,CAAC,EACD,mBAAoB1B,EAAQ,mBAC5B,qBAAsBA,EAAQ,qBAC9B,SAAUA,EAAQ,SAClB,QAASA,EAAQ,mBACnB,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,EAChDK,EAAa,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGH,CAAG,EAAG,CACvD,UAAWA,EAAI,UACf,qCAAsCA,EAAI,0BAC1C,kCAAmCI,GAA6BJ,EAAI,sBAAsB,CAC5F,CAAC,EAED,GAAI,CAAC5B,GACH,OAAO+B,EAWT,IAJInC,EAAQ,mBAAqB,QAAaA,EAAQ,iBAAmB,KAEvEA,EAAQ,iBAAmB,GAEzBgC,EAAI,gBAAkB,OACxB,MAAM,IAAI,WAAW,oEAAoE,EAE3F,GAAI,CAACA,EAAI,KACP,MAAM,IAAI,WAAW,0DAA0D,EAEjF,OAAO,GAAI,GAAqBG,EAAkBE,GAASb,EAAA,sBACzD,IAAIG,EACJ,IAAMW,EAAyB,CAC7B,sBAAuBtC,EAAQ,WAC/B,yBAA0B,CACxB,QAASA,EAAQ,WAAW,SAAWgC,EAAI,KAC3C,gBAAiBhC,EAAQ,WAAW,gBACpC,YAAaA,EAAQ,WAAW,YAChC,kBAAmBA,EAAQ,WAAW,kBACtC,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,EACA,MAAOM,GAAc,CACnB,MAAOR,EAASO,EAAI,cAAgBK,EACpC,OAAQA,CACV,CAAC,EACD,mBAAoBrC,EAAQ,mBAC5B,qBAAsBA,EAAQ,qBAC9B,SAAUA,EAAQ,SAClB,QAASA,EAAQ,mBACnB,EAOA,OAAQ,MAAM,KAAK,YAAY,SAAS,OAAO,OAAO,CACpD,YAAaA,EAAQ,WACvB,EAAGsC,CAAsB,CAAC,GAAG,kBAC/B,GAAGb,EAAQO,EAAI,cAAe,CAC5B,iBAAkBhC,EAAQ,iBAC1B,WAAYA,EAAQ,UACtB,CAAC,CACH,OAASuC,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAUM,QAAqB,QAAAL,EAAA,yBAAdxB,EAAU,CAAC,EAAG,CACzB,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,oBAAqB/B,CAAO,EAC3C,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EAC9D,MAAM,KAAK,cAAc,CACvB,YAAaA,EAAQ,YACrB,oBAAqBA,EAAQ,oBAC7B,WAAYA,EAAQ,WACpB,eAAgB8B,EAAe,cACjC,CAAC,EACM,EACT,OAASS,EAAG,CACV,GAAIA,EAAE,aAAe,IAEnB,MAAO,GACF,GAAIA,EAAE,aAAe,MAAQA,EAAE,QAAQ,YAAcE,IAA0CF,EAAE,QAAQ,YAAcG,IAE5H,MAAO,GAET,MAAAb,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAaM,eAA4B,QAAAL,EAAA,yBAAdxB,EAAU,CAAC,EAAG,CAChC,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,2BAA4B/B,CAAO,EAClD,GAAI,CACFA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EAC9D,IAAMgC,EAAM,MAAM,KAAK,YAAY,cAAc,OAAO,OAAO,CAC7D,YAAahC,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,QAAS3B,EAAQ,mBACnB,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,EACtD,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGE,CAAG,EAAG,CAC3C,UAAWA,EAAI,UACf,qCAAsCA,EAAI,0BAC1C,kCAAmCI,GAA6BJ,EAAI,sBAAsB,CAC5F,CAAC,CACH,OAASO,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAUM,QAAqB,QAAAL,EAAA,yBAAdxB,EAAU,CAAC,EAAG,CACzB,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,oBAAqB/B,CAAO,EAC3CA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAI,CACF,OAAO,MAAM,KAAK,YAAY,OAAO,OAAO,OAAO,CACjD,YAAaA,EAAQ,YACrB,gBAAiBA,EAAQ,gBACzB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGO,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAUM,gBAA6B,QAAAL,EAAA,yBAAdxB,EAAU,CAAC,EAAG,CACjC,IAAI2B,EAAIgB,EACR,GAAM,CACJ,KAAAd,EACA,eAAAC,CACF,EAAIC,EAAW,4BAA6B/B,CAAO,EACnD,GAAI,CACF,IAAMgC,EAAM,MAAM,KAAK,OAAOF,CAAc,EAC5C,OAAO,OAAO,OAAO,OAAO,OAAO,CACjC,UAAW,EACb,EAAGE,CAAG,EAAG,CACP,UAAWA,EAAI,SACjB,CAAC,CACH,OAASO,EAAG,CACV,KAAMZ,EAAKY,EAAE,WAAa,MAAQZ,IAAO,OAAS,OAASA,EAAG,aAAe,eAC3E,OAAAE,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAAS,wEACX,CAAC,EACM,OAAO,OAAO,OAAO,OAAO,CACjC,UAAW,EACb,GAAIG,EAAKJ,EAAE,YAAc,MAAQI,IAAO,OAAS,OAASA,EAAG,aAAa,EAAG,CAC3E,UAAWJ,EAAE,QACf,CAAC,EAEH,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GASM,UAAuB,QAAAL,EAAA,yBAAdxB,EAAU,CAAC,EAAG,CAC3B,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,sBAAuB/B,CAAO,EAC7C,GAAI,CACF,OAAO,MAAM,KAAK,YAAY,SAAS,OAAO,OAAO,CACnD,YAAaA,EAAQ,WACvB,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAgBM,eAAee,EAA+B,QAAApB,EAAA,yBAA/BqB,EAAiB7C,EAAU,CAAC,EAAG,CAClD,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,4BAA6B/B,CAAO,EACnDA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,YAAY,eAAe,OAAO,OAAO,CACzD,YAAaA,EAAQ,YACrB,gBAAiB6C,EACjB,sBAAuB7C,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGO,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAYM,YAAYe,EAAwB,QAAApB,EAAA,yBAAxBsB,EAAU9C,EAAU,CAAC,EAAG,CACxC,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,yBAA0B/B,CAAO,EAChDA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,YAAY,YAAY,OAAO,OAAO,CACtD,YAAaA,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,SAAA8C,EACA,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG9C,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,QAAS3B,EAAQ,oBACjB,gBAAiBA,EAAQ,eAC3B,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAUM,QAAQe,EAAoB,QAAApB,EAAA,yBAApBuB,EAAM/C,EAAU,CAAC,EAAG,CAChC,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,qBAAsB/B,CAAO,EAC5C,GAAI,CACF,OAAO,MAAM,KAAK,YAAY,QAAQ,OAAO,OAAO,OAAO,OAAO,CAChE,YAAaA,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGO,EAAmCJ,CAAc,CAAC,EAAG,CACtD,KAAMkB,GAAWD,CAAI,CACvB,CAAC,CAAC,CACJ,OAASR,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAMM,SAAsB,QAAAL,EAAA,yBAAdxB,EAAU,CAAC,EAAG,CAC1B,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,qBAAsB/B,CAAO,EAC5C,GAAI,CACF,IAAMiD,EAAW,MAAM,KAAK,YAAY,QAAQ,OAAO,OAAO,CAC5D,YAAajD,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGO,EAAmCJ,CAAc,CAAC,CAAC,EAOtD,OANwB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGmB,CAAQ,EAAG,CACjE,UAAWA,EAAS,UACpB,KAAMC,GAAO,CACX,WAAYD,EAAS,UACvB,CAAC,GAAK,CAAC,CACT,CAAC,CAEH,OAASV,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAOA,mBAAmBsB,EAAgB,CACjC,OAAO,IAAIC,GAAgB,KAAMD,CAAc,CACjD,CAOM,gBAA6B,QAAA3B,EAAA,yBAAdxB,EAAU,CAAC,EAAG,CACjC,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,4BAA6B/B,CAAO,EACnDA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,YAAY,eAAe,OAAO,OAAO,CACzD,YAAaA,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,SAAUA,EAAQ,SAClB,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,QAAS3B,EAAQ,oBACjB,gBAAiBA,EAAQ,eAC3B,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAyEM,iBAAiBe,EAA0B,QAAApB,EAAA,yBAA1B6B,EAAYrD,EAAU,CAAC,EAAG,CAC/C,IAAMsD,EAAS,CACb,iBAAkB,IAAIC,IAAS,KAAK,iBAAiB,GAAGA,CAAI,EAC5D,cAAe,IAAIA,IAAS,KAAK,cAAc,GAAGA,CAAI,EACtD,iBAAkB,IAAIA,IAAS,KAAK,iBAAiB,GAAGA,CAAI,CAC9D,EACMC,EAAS,IAAIC,GAA2B,CAC5C,WAAYH,EACZ,WAAAD,EACA,aAAcrD,EAAQ,aACtB,WAAYA,EAAQ,WACpB,WAAYA,EAAQ,WACpB,wBAAyBA,CAC3B,CAAC,EAGD,aAAMwD,EAAO,KAAK,EACXA,CACT,GASM,iBAAiBZ,EAAsB,QAAApB,EAAA,yBAAtBkC,EAAQ1D,EAAU,CAAC,EAAG,CAC3C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,8BAA+B/B,CAAO,EACrD,GAAI,CACF,OAAO,MAAM,KAAK,YAAY,iBAAiB0D,EAAQ,OAAO,OAAO,CACnE,YAAa1D,EAAQ,YACrB,sBAAuBA,EAAQ,UACjC,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GASM,gBAAgBe,EAA0B,QAAApB,EAAA,yBAA1B6B,EAAYrD,EAAU,CAAC,EAAG,CAC9C,IAAI2B,EAAIgB,EAAIgB,EACZ,GAAM,CACJ,KAAA9B,EACA,eAAAC,CACF,EAAIC,EAAW,6BAA8B/B,CAAO,EACpDA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5CA,EAAQ,iBAAmBA,EAAQ,kBAAoB,CAAC,EACxD,GAAI,CACF,OAAO,MAAM,KAAK,YAAY,YAAYqD,EAAY,OAAO,OAAO,CAClE,YAAarD,EAAQ,YACrB,SAAUA,EAAQ,SAClB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,+BAAgC,CAC9B,cAAe3B,EAAQ,iBAAiB,QACxC,sBAAuBA,EAAQ,iBAAiB,gBAChD,kBAAmBA,EAAQ,iBAAiB,YAC5C,wBAAyBA,EAAQ,iBAAiB,iBACpD,EACA,iBAAkBA,EAAQ,iBAC1B,wBAAyB4D,GAA0B5D,EAAQ,mBAAmB,EAC9E,KAAM6D,GAAa7D,EAAQ,IAAI,EAC/B,eAAgB8D,GAAiB9D,EAAQ,IAAI,EAC7C,0BAA2B2C,EAAK3C,EAAQ,sBAAwB,MAAQ2C,IAAO,OAAS,OAASA,EAAG,WACpG,wBAAyBgB,EAAK3D,EAAQ,sBAAwB,MAAQ2D,IAAO,OAAS,OAASA,EAAG,WAClG,UAAW3D,EAAQ,UACnB,gBAAiBA,EAAQ,gBACzB,eAAgBA,EAAQ,cAC1B,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAYM,cAAce,EAAoB,QAAApB,EAAA,yBAApBuC,EAAM/D,EAAU,CAAC,EAAG,CACtC,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,2BAA4B/B,CAAO,EAClD,GAAI,CACF,OAAO,MAAM,KAAK,YAAY,QAAQ6D,GAAaE,CAAI,EAAG,OAAO,OAAO,CACtE,YAAa/D,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,kBAAmB3B,EAAQ,iBAC7B,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GACM,iBAAiBe,EAAQoB,EAAQC,EAAqB,QAAAzC,EAAA,yBAArC0C,EAAQC,EAAQC,EAAQC,EAAS,CAAC,EAAG,CAC1D,IAAIC,EACA7C,EAAS,EACTC,EAAQ,EACR1B,EAAUqE,EACVH,aAAkB,QACpBI,EAASJ,EACTzC,EAAS0C,GAAU,EACnBzC,EAAQ,OAAO0C,GAAW,SAAWA,EAAS,IAE9C3C,EAAS,OAAOyC,GAAW,SAAWA,EAAS,EAC/CxC,EAAQ,OAAOyC,GAAW,SAAWA,EAAS,EAC9CnE,EAAUoE,GAAU,CAAC,GAEvB,GAAM,CACJ,KAAAvC,EACA,eAAAC,CACF,EAAIC,EAAW,8BAA+B/B,CAAO,EACrD,GAAI,CAIF,GAHKA,EAAQ,YACXA,EAAQ,UAAY,GAElBA,EAAQ,UAAY,EACtB,MAAM,IAAI,WAAW,+BAA+B,EAKtD,GAHIA,EAAQ,YAAc,IACxBA,EAAQ,UAAY,SAElByB,EAAS,EACX,MAAM,IAAI,WAAW,4BAA4B,EAEnD,GAAIC,GAASA,GAAS,EACpB,MAAM,IAAI,WAAW,qCAAqC,EAM5D,GAJK1B,EAAQ,aACXA,EAAQ,WAAa,CAAC,GAGpB,CAAC0B,EAAO,CACV,IAAMuB,EAAW,MAAM,KAAK,cAAc,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGjD,CAAO,EAAG,CAClF,eAAgB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,cAAc,EAAGkC,EAAmCJ,CAAc,CAAC,CAC7H,CAAC,CAAC,EAEF,GADAJ,EAAQuB,EAAS,cAAgBxB,EAC7BC,EAAQ,EACV,MAAM,IAAI,WAAW,UAAUD,CAAM,uCAAuCwB,EAAS,aAAa,EAAE,CAExG,CAEA,GAAI,CAACqB,EACH,GAAI,CACFA,EAAS,OAAO,MAAM5C,CAAK,CAC7B,OAAS6C,EAAO,CACd,MAAM,IAAI,MAAM,0CAA0C7C,CAAK,oJAAqJ6C,EAAM,OAAO,EAAE,CACrO,CAEF,GAAID,EAAO,OAAS5C,EAClB,MAAM,IAAI,WAAW,mFAAmFA,CAAK,EAAE,EAEjH,IAAI8C,EAAmB,EACjBC,EAAQ,IAAIC,GAAM1E,EAAQ,WAAW,EAC3C,QAAS2E,EAAMlD,EAAQkD,EAAMlD,EAASC,EAAOiD,EAAMA,EAAM3E,EAAQ,UAC/DyE,EAAM,aAAa,IAAYjD,EAAA,sBAE7B,IAAIoD,EAAWnD,EAASC,EACpBiD,EAAM3E,EAAQ,UAAY4E,IAC5BA,EAAWD,EAAM3E,EAAQ,WAS3B,IAAM6E,IAPW,MAAM,KAAK,SAASF,EAAKC,EAAWD,EAAK,CACxD,YAAa3E,EAAQ,YACrB,WAAYA,EAAQ,WACpB,iBAAkBA,EAAQ,yBAC1B,oBAAqBA,EAAQ,oBAC7B,eAAgB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,cAAc,EAAGkC,EAAmCJ,CAAc,CAAC,CAC7H,CAAC,GACuB,mBACxB,MAAqC6C,EAAMlD,EAAQmD,EAAWnD,EAAxD,QAIN+C,GAAoBI,EAAWD,EAC3B3E,EAAQ,YACVA,EAAQ,WAAW,CACjB,YAAawE,CACf,CAAC,CAEL,EAAC,EAEH,aAAMC,EAAM,GAAG,EACRH,CACT,OAAS/B,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAiBM,eAAee,EAA2C,QAAApB,EAAA,yBAA3CsD,EAAUrD,EAAS,EAAGC,EAAO1B,EAAU,CAAC,EAAG,CAC9D,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,4BAA6B/B,CAAO,EACnD,GAAI,CACF,IAAMiD,EAAW,MAAM,KAAK,SAASxB,EAAQC,EAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG1B,CAAO,EAAG,CAC5F,eAAgB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,cAAc,EAAGkC,EAAmCJ,CAAc,CAAC,CAC7H,CAAC,CAAC,EACF,OAAImB,EAAS,qBACX,MAA4BA,EAAS,mBAA/B,SAGRA,EAAS,mBAAqB,OACvBA,CACT,OAASV,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GACA,iCAAkC,CAChC,IAAIpB,EACAC,EACJ,GAAI,CAQF,IAAMqE,EAAYC,GAAW,MAAM,KAAK,GAAG,EAC3C,GAAID,EAAU,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,IAAM,OAAQ,CAGhD,IAAME,EAAiBF,EAAU,QAAQ,EAAE,MAAM,kBAAkB,EACnEtE,EAAgBwE,EAAe,CAAC,EAChCvE,EAAWuE,EAAe,CAAC,CAC7B,SAAWC,GAAkBH,CAAS,EAAG,CAIvC,IAAME,EAAiBF,EAAU,QAAQ,EAAE,MAAM,0BAA0B,EAC3EtE,EAAgBwE,EAAe,CAAC,EAChCvE,EAAWuE,EAAe,CAAC,CAC7B,KAAO,CAGL,IAAMA,EAAiBF,EAAU,QAAQ,EAAE,MAAM,kBAAkB,EACnEtE,EAAgBwE,EAAe,CAAC,EAChCvE,EAAWuE,EAAe,CAAC,CAC7B,CAOA,GALAxE,EAAgB,mBAAmBA,CAAa,EAChDC,EAAW,mBAAmBA,CAAQ,EAGtCA,EAAWA,EAAS,QAAQ,MAAO,GAAG,EAClC,CAACD,EACH,MAAM,IAAI,MAAM,oCAAoC,EAEtD,MAAO,CACL,SAAAC,EACA,cAAAD,CACF,CACF,MAAgB,CACd,MAAM,IAAI,MAAM,yEAAyE,CAC3F,CACF,CAcM,iBAAiBmC,EAA0B,QAAApB,EAAA,yBAA1B6B,EAAYrD,EAAU,CAAC,EAAG,CAC/C,IAAI2B,EAAIgB,EAAIgB,EACZ,GAAM,CACJ,KAAA9B,EACA,eAAAC,CACF,EAAIC,EAAW,8BAA+B/B,CAAO,EACrDA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5CA,EAAQ,iBAAmBA,EAAQ,kBAAoB,CAAC,EACxD,GAAI,CACF,OAAO,MAAM,KAAK,YAAY,iBAAiBqD,EAAY,OAAO,OAAO,CACvE,YAAarD,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,SAAUA,EAAQ,SAClB,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,+BAAgC,CAC9B,cAAe3B,EAAQ,iBAAiB,QACxC,sBAAuBA,EAAQ,iBAAiB,gBAChD,kBAAmBA,EAAQ,iBAAiB,YAC5C,wBAAyBA,EAAQ,iBAAiB,kBAClD,aAAcA,EAAQ,iBAAiB,aACzC,EACA,0BAA2B2C,EAAK3C,EAAQ,sBAAwB,MAAQ2C,IAAO,OAAS,OAASA,EAAG,WACpG,wBAAyBgB,EAAK3D,EAAQ,sBAAwB,MAAQ2D,IAAO,OAAS,OAASA,EAAG,WAClG,UAAW3D,EAAQ,UACnB,kBAAmBA,EAAQ,kBAC3B,KAAM6D,GAAa7D,EAAQ,IAAI,EAC/B,eAAgB8D,GAAiB9D,EAAQ,IAAI,EAC7C,SAAUA,EAAQ,QACpB,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAYA,eAAe7B,EAAS,CACtB,OAAO,IAAI,QAAQmF,GAAW,CAC5B,GAAI,EAAE,KAAK,sBAAsB9E,IAC/B,MAAM,IAAI,WAAW,uFAAuF,EAE9G,IAAM+E,EAAMC,GAA+B,OAAO,OAAO,CACvD,cAAe,KAAK,eACpB,SAAU,KAAK,MACf,aAAc,KAAK,UACnB,UAAW,KAAK,UAClB,EAAGrF,CAAO,EAAG,KAAK,UAAU,EAAE,SAAS,EACvCmF,EAAQG,GAAiB,KAAK,IAAKF,CAAG,CAAC,CACzC,CAAC,CACH,CAMM,yBAAyBpF,EAAS,QAAAwB,EAAA,sBACtC,GAAM,CACJ,KAAAK,EACA,eAAAC,CACF,EAAIC,EAAW,sCAAuC/B,CAAO,EAC7D,GAAI,CACF,OAAO,MAAM,KAAK,YAAY,yBAAyB,OAAO,OAAO,CACnE,YAA+DA,GAAQ,WACzE,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAMM,sBAAsB0D,EAAoBvF,EAAS,QAAAwB,EAAA,sBACvD,GAAM,CACJ,KAAAK,EACA,eAAAC,CACF,EAAIC,EAAW,mCAAoC/B,CAAO,EAC1D,GAAI,CACF,OAAO,MAAM,KAAK,YAAY,sBAAsB,OAAO,OAAO,CAChE,YAA+DA,GAAQ,YACvE,yBAA0BuF,EAAmB,WAC7C,uBAAwBA,EAAmB,WAC3C,yBAA4EvF,GAAQ,uBACtF,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAMM,aAAa2D,EAAkBxF,EAAS,QAAAwB,EAAA,sBAC5C,GAAM,CACJ,KAAAK,EACA,eAAAC,CACF,EAAIC,EAAW,0BAA2B/B,CAAO,EACjD,GAAI,CACF,OAAO,MAAM,KAAK,YAAY,aAAawF,EAAkB,OAAO,OAAO,CACzE,YAA+DxF,GAAQ,WACzE,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GACF,EAIaR,GAAN,MAAMoE,UAAyB/F,EAAW,CAC/C,YAAYG,EAAuBC,EAAqCC,EAGxEC,EAAS,CAGP,IAAIC,EACAC,EAEJ,GADAF,EAAUA,GAAW,CAAC,EAClBG,GAAeL,CAAmC,EAEpDI,EAAML,EACNI,EAAWH,UACFM,IAAUN,aAA+CO,IAA8BP,aAA+CQ,IAAuBC,GAAkBT,CAAmC,EAE3NI,EAAML,EACNG,EAAUD,EACVE,EAAWO,GAAYV,EAAqCE,CAAO,UAC1D,CAACF,GAAuC,OAAOA,GAAwC,SAEhGI,EAAML,EAENI,EAAWO,GAAY,IAAIF,GAAuBN,CAAO,UAChDF,GAAuC,OAAOA,GAAwC,UAAYC,GAAqB,OAAOA,GAAsB,SAAU,CAEvK,IAAMU,EAAgBX,EAChBY,EAAWX,EACXY,EAAiBC,GAA6Bf,CAAqB,EACzE,GAAIc,EAAe,OAAS,oBAC1B,GAAIP,GAAQ,CACV,IAAMS,EAAsB,IAAIR,GAA2BM,EAAe,YAAaA,EAAe,UAAU,EAChHT,EAAMY,GAAgBA,GAAgBH,EAAe,IAAK,mBAAmBF,CAAa,CAAC,EAAG,mBAAmBC,CAAQ,CAAC,EACrHV,EAAQ,eACXA,EAAQ,cAAuCW,EAAe,SAAvC,SAEzBV,EAAWO,GAAYK,EAAqBb,CAAO,CACrD,KACE,OAAM,IAAI,MAAM,oEAAoE,UAE7EW,EAAe,OAAS,gBACjCT,EAAMY,GAAgBA,GAAgBH,EAAe,IAAK,mBAAmBF,CAAa,CAAC,EAAG,mBAAmBC,CAAQ,CAAC,EAAI,IAAMC,EAAe,WACnJV,EAAWO,GAAY,IAAIF,GAAuBN,CAAO,MAEzD,OAAM,IAAI,MAAM,0FAA0F,CAE9G,KACE,OAAM,IAAI,MAAM,uEAAuE,EAEzF,MAAME,EAAKD,CAAQ,EACnB,KAAK,kBAAoB,IAAIyF,GAAW,KAAK,oBAAoB,CACnE,CASA,aAAaxE,EAAU,CACrB,OAAO,IAAIuE,EAAiBtE,GAAgB,KAAK,IAAKF,GAAa,WAAW,SAAUC,EAAS,SAAW,EAAI,OAAYA,CAAQ,EAAG,KAAK,QAAQ,CACtJ,CAeM,QAAqB,QAAAM,EAAA,yBAAdxB,EAAU,CAAC,EAAG,CACzB,IAAI2B,EAAIgB,EAAIgB,EACZ,GAAM,CACJ,KAAA9B,EACA,eAAAC,CACF,EAAIC,EAAW,0BAA2B/B,CAAO,EACjDA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,kBAAkB,OAAO,EAAG,OAAO,OAAO,CAC1D,YAAaA,EAAQ,YACrB,gBAAiBA,EAAQ,gBACzB,sBAAuBA,EAAQ,WAC/B,SAAUA,EAAQ,SAClB,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,QAAS3B,EAAQ,oBACjB,gBAAiBA,EAAQ,gBACzB,0BAA2B2C,EAAK3C,EAAQ,sBAAwB,MAAQ2C,IAAO,OAAS,OAASA,EAAG,WACpG,wBAAyBgB,EAAK3D,EAAQ,sBAAwB,MAAQ2D,IAAO,OAAS,OAASA,EAAG,WAClG,UAAW3D,EAAQ,UACnB,eAAgB8D,GAAiB9D,EAAQ,IAAI,CAC/C,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAQM,mBAAgC,QAAAL,EAAA,yBAAdxB,EAAU,CAAC,EAAG,CACpC,IAAI2B,EAAIgB,EACR,GAAM,CACJ,KAAAd,EACA,eAAAC,CACF,EAAIC,EAAW,qCAAsC/B,CAAO,EACtD2F,EAAa,CACjB,YAAaC,EACf,EACA,GAAI,CACF,IAAM5D,EAAM,MAAM,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGF,CAAc,EAAG,CAC7E,WAAA6D,CACF,CAAC,CAAC,EACF,OAAO,OAAO,OAAO,OAAO,OAAO,CACjC,UAAW,EACb,EAAG3D,CAAG,EAAG,CACP,UAAWA,EAAI,SACjB,CAAC,CACH,OAASO,EAAG,CACV,KAAMZ,EAAKY,EAAE,WAAa,MAAQZ,IAAO,OAAS,OAASA,EAAG,aAAe,oBAC3E,OAAAE,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAAS,4EACX,CAAC,EACM,OAAO,OAAO,OAAO,OAAO,CACjC,UAAW,EACb,GAAIG,EAAKJ,EAAE,YAAc,MAAQI,IAAO,OAAS,OAASA,EAAG,aAAa,EAAG,CAC3E,UAAWJ,EAAE,QACf,CAAC,EAEH,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAMM,MAAmB,QAAAL,EAAA,yBAAdxB,EAAU,CAAC,EAAG,CACvB,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,wBAAyB/B,CAAO,EAC/CA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAI,CACF,OAAO,MAAM,KAAK,kBAAkB,KAAK,OAAO,OAAO,CACrD,YAAaA,EAAQ,YACrB,+BAAgCA,EAAQ,WACxC,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGO,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAyBM,YAAYe,EAAMoB,EAA6B,QAAAxC,EAAA,yBAAnCqE,EAAMC,EAAe9F,EAAU,CAAC,EAAG,CACnD,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,+BAAgC/B,CAAO,EACtDA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,kBAAkB,YAAY8F,EAAeD,EAAM,OAAO,OAAO,CACjF,YAAa7F,EAAQ,YACrB,+BAAgCA,EAAQ,WACxC,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,eAAgB,CACd,iBAAkB3B,EAAQ,UAC5B,EACA,wBAAyBA,EAAQ,wBACjC,0BAA2BA,EAAQ,0BACnC,QAASA,EAAQ,oBACjB,gBAAiBA,EAAQ,eAC3B,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAeM,mBAAmBe,EAAWoB,EAAcC,EAAqB,QAAAzC,EAAA,yBAA9CuE,EAAWC,EAActE,EAAO1B,EAAU,CAAC,EAAG,CACrE,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,sCAAuC/B,CAAO,EAC7DA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5CA,EAAQ,iBAAmBA,EAAQ,kBAAoB,CAAC,EACxD,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,kBAAkB,mBAAmB+F,EAAW,EAAG,OAAO,OAAO,CACjF,YAAa/F,EAAQ,YACrB,YAAaiC,GAAc,CACzB,OAAQ+D,EACR,MAAAtE,CACF,CAAC,EACD,iBAAkB1B,EAAQ,iBAC1B,mBAAoBA,EAAQ,mBAC5B,sBAAuBA,EAAQ,WAC/B,+BAAgCA,EAAQ,WACxC,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,+BAAgC,CAC9B,cAAe3B,EAAQ,iBAAiB,QACxC,sBAAuBA,EAAQ,iBAAiB,gBAChD,kBAAmBA,EAAQ,iBAAiB,YAC5C,wBAAyBA,EAAQ,iBAAiB,iBACpD,EACA,wBAAyB4D,GAA0B5D,EAAQ,mBAAmB,EAC9E,QAASA,EAAQ,oBACjB,gBAAiBA,EAAQ,eAC3B,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GACF,EAIaP,GAAN,MAAM2E,UAAwBvG,EAAW,CAC9C,YAAYG,EAAuBC,EAAqCC,EAGxEC,EAAS,CAGP,IAAIC,EACAC,EAEJ,GADAF,EAAUA,GAAW,CAAC,EAClBG,GAAeL,CAAmC,EAEpDI,EAAML,EACNI,EAAWH,UACFM,IAAUN,aAA+CO,IAA8BP,aAA+CQ,IAAuBC,GAAkBT,CAAmC,EAE3NI,EAAML,EACNG,EAAUD,EACVE,EAAWO,GAAYV,EAAqCE,CAAO,UAC1D,CAACF,GAAuC,OAAOA,GAAwC,SAGhGI,EAAML,EACFE,GAAqB,OAAOA,GAAsB,WACpDC,EAAUD,GAEZE,EAAWO,GAAY,IAAIF,GAAuBN,CAAO,UAChDF,GAAuC,OAAOA,GAAwC,UAAYC,GAAqB,OAAOA,GAAsB,SAAU,CAEvK,IAAMU,EAAgBX,EAChBY,EAAWX,EACXY,EAAiBC,GAA6Bf,CAAqB,EACzE,GAAIc,EAAe,OAAS,oBAC1B,GAAIP,GAAQ,CACV,IAAMS,EAAsB,IAAIR,GAA2BM,EAAe,YAAaA,EAAe,UAAU,EAChHT,EAAMY,GAAgBA,GAAgBH,EAAe,IAAK,mBAAmBF,CAAa,CAAC,EAAG,mBAAmBC,CAAQ,CAAC,EACrHV,EAAQ,eACXA,EAAQ,cAAuCW,EAAe,SAAvC,SAEzBV,EAAWO,GAAYK,EAAqBb,CAAO,CACrD,KACE,OAAM,IAAI,MAAM,oEAAoE,UAE7EW,EAAe,OAAS,gBACjCT,EAAMY,GAAgBA,GAAgBH,EAAe,IAAK,mBAAmBF,CAAa,CAAC,EAAG,mBAAmBC,CAAQ,CAAC,EAAI,IAAMC,EAAe,WACnJV,EAAWO,GAAY,IAAIF,GAAuBN,CAAO,MAEzD,OAAM,IAAI,MAAM,0FAA0F,CAE9G,KACE,OAAM,IAAI,MAAM,uEAAuE,EAEzF,MAAME,EAAKD,CAAQ,EACnB,KAAK,iBAAmB,IAAIiG,GAAU,KAAK,oBAAoB,EAC/D,KAAK,aAAe,IAAInF,GAAY,KAAK,oBAAoB,CAC/D,CASA,aAAaG,EAAU,CACrB,OAAO,IAAI+E,EAAgB9E,GAAgB,KAAK,IAAKF,GAAa,WAAW,SAAUC,EAAS,SAAW,EAAI,OAAYA,CAAQ,EAAG,KAAK,QAAQ,CACrJ,CA+BM,MAAM0B,EAAqB,QAAApB,EAAA,yBAArB2E,EAAOnG,EAAU,CAAC,EAAG,CAC/B,IAAI2B,EACJC,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EAC9D,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,wBAAyB/B,CAAO,EAC/C,GAAI,CACF,GAAI,CAACI,GACH,MAAM,IAAI,MAAM,wDAAwD,EAE1EwB,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EAC9D,IAAMiD,EAAW,MAAM,KAAK,aAAa,MAAM,OAAO,OAAO,CAC3D,YAAajD,EAAQ,YACrB,aAAc,CACZ,UAAW,MACX,WAAYmG,EACZ,mBAAoBC,GAAqBpG,EAAQ,sBAAsB,EACvE,oBAAqBoG,GAAqBpG,EAAQ,uBAAuB,CAC3E,EACA,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,QAAS3B,EAAQ,mBACnB,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,EACtD,OAAO,IAAIuE,GAAkBpD,EAAU,CACrC,YAAajD,EAAQ,YACrB,WAAYA,EAAQ,WACpB,QAASA,EAAQ,OACnB,CAAC,CACH,OAASuC,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GA4BM,OAAOe,EAAMoB,EAA6B,QAAAxC,EAAA,yBAAnCqE,EAAMC,EAAe9F,EAAU,CAAC,EAAG,CAC9C,IAAI2B,EAAIgB,EAAIgB,EACZ3D,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,yBAA0B/B,CAAO,EAChD,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,iBAAiB,OAAO8F,EAAeD,EAAM,OAAO,OAAO,CAC3E,YAAa7F,EAAQ,YACrB,gBAAiBA,EAAQ,gBACzB,sBAAuBA,EAAQ,WAC/B,SAAUA,EAAQ,SAClB,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,eAAgB,CACd,iBAAkB3B,EAAQ,UAC5B,EACA,QAASA,EAAQ,oBACjB,gBAAiBA,EAAQ,gBACzB,0BAA2B2C,EAAK3C,EAAQ,sBAAwB,MAAQ2C,IAAO,OAAS,OAASA,EAAG,WACpG,wBAAyBgB,EAAK3D,EAAQ,sBAAwB,MAAQ2D,IAAO,OAAS,OAASA,EAAG,WAClG,UAAW3D,EAAQ,UACnB,KAAM6D,GAAa7D,EAAQ,IAAI,EAC/B,eAAgB8D,GAAiB9D,EAAQ,IAAI,CAC/C,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAmBM,kBAAkBe,EAAyB,QAAApB,EAAA,yBAAzBuE,EAAW/F,EAAU,CAAC,EAAG,CAC/C,IAAI2B,EAAIgB,EAAIgB,EAAI2C,EAAIC,EACpBvG,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,oCAAqC/B,CAAO,EAC3D,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,iBAAiB,eAAe,EAAG+F,EAAW,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG/F,CAAO,EAAG,CACtH,gBAAiBA,EAAQ,gBACzB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,OAAQA,EAAQ,WAAW,aAC7B,CAAC,EACD,+BAAgC,CAC9B,eAAgB2B,EAAK3B,EAAQ,oBAAsB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,QACvF,uBAAwBgB,EAAK3C,EAAQ,oBAAsB,MAAQ2C,IAAO,OAAS,OAASA,EAAG,gBAC/F,mBAAoBgB,EAAK3D,EAAQ,oBAAsB,MAAQ2D,IAAO,OAAS,OAASA,EAAG,YAC3F,yBAA0B2C,EAAKtG,EAAQ,oBAAsB,MAAQsG,IAAO,OAAS,OAASA,EAAG,kBACjG,cAAeC,EAAKvG,EAAQ,oBAAsB,MAAQuG,IAAO,OAAS,OAASA,EAAG,aACxF,EACA,QAASvG,EAAQ,oBACjB,wBAAyB4D,GAA0B5D,EAAQ,mBAAmB,EAC9E,KAAM6D,GAAa7D,EAAQ,IAAI,EAC/B,eAAgB8D,GAAiB9D,EAAQ,IAAI,EAC7C,eAAgBA,EAAQ,cAC1B,CAAC,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACzD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAYM,WAAWe,EAASoB,EAAMC,EAA6B,QAAAzC,EAAA,yBAA5CgF,EAASX,EAAMC,EAAe9F,EAAU,CAAC,EAAG,CAC3D,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,6BAA8B/B,CAAO,EACpD,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,iBAAiB,WAAWwG,EAASV,EAAeD,EAAM,OAAO,OAAO,CACxF,YAAa7F,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,eAAgB,CACd,iBAAkBA,EAAQ,UAC5B,EACA,wBAAyBA,EAAQ,wBACjC,0BAA2BA,EAAQ,0BACnC,QAASA,EAAQ,oBACjB,gBAAiBA,EAAQ,eAC3B,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAsBM,kBAAkBe,EAASoB,EAA4C,QAAAxC,EAAA,yBAArDgF,EAAST,EAAWtE,EAAS,EAAGC,EAAO1B,EAAU,CAAC,EAAG,CAC3E,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,oCAAqC/B,CAAO,EAC3D,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,iBAAiB,kBAAkBwG,EAAS,EAAGT,EAAW,OAAO,OAAO,CACxF,YAAa/F,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,iBAAkBA,EAAQ,iBAC1B,mBAAoBA,EAAQ,mBAC5B,YAAayB,IAAW,GAAK,CAACC,EAAQ,OAAYO,GAAc,CAC9D,OAAAR,EACA,MAAAC,CACF,CAAC,EACD,QAAS1B,EAAQ,oBACjB,gBAAiBA,EAAQ,gBACzB,wBAAyB4D,GAA0B5D,EAAQ,mBAAmB,CAChF,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAaM,gBAAgBe,EAAsB,QAAApB,EAAA,yBAAtBiF,EAAQzG,EAAU,CAAC,EAAG,CAC1C,IAAI2B,EAAIgB,EAAIgB,EACZ3D,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,kCAAmC/B,CAAO,EACzD,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,iBAAiB,gBAAgB,CACjD,OAAQyG,CACV,EAAG,OAAO,OAAO,CACf,YAAazG,EAAQ,YACrB,gBAAiBA,EAAQ,gBACzB,sBAAuBA,EAAQ,WAC/B,SAAUA,EAAQ,SAClB,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,QAAS3B,EAAQ,oBACjB,gBAAiBA,EAAQ,gBACzB,0BAA2B2C,EAAK3C,EAAQ,sBAAwB,MAAQ2C,IAAO,OAAS,OAASA,EAAG,WACpG,wBAAyBgB,EAAK3D,EAAQ,sBAAwB,MAAQ2D,IAAO,OAAS,OAASA,EAAG,WAClG,UAAW3D,EAAQ,UACnB,KAAM6D,GAAa7D,EAAQ,IAAI,EAC/B,eAAgB8D,GAAiB9D,EAAQ,IAAI,CAC/C,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAWM,aAAae,EAAwB,QAAApB,EAAA,yBAAxBkF,EAAU1G,EAAU,CAAC,EAAG,CACzC,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,+BAAgC/B,CAAO,EACtD,GAAI,CACF,IAAMgC,EAAM,MAAM,KAAK,iBAAiB,aAAa0E,EAAU,OAAO,OAAO,CAC3E,YAAa1G,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGO,EAAmCJ,CAAc,CAAC,CAAC,EACtD,OAAKE,EAAI,kBACPA,EAAI,gBAAkB,CAAC,GAEpBA,EAAI,oBACPA,EAAI,kBAAoB,CAAC,GAEpBA,CACT,OAASO,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAiBM,WAAWe,EAAoB,QAAApB,EAAA,yBAApBmF,EAAM3G,EAAU,CAAC,EAAG,CACnC,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,6BAA8B/B,CAAO,EACpD,GAAI,CACF,GAAII,GAAQ,CACV,IAAIkE,EACJ,OAAIqC,aAAgB,OAClBrC,EAASqC,EACAA,aAAgB,YACzBrC,EAAS,OAAO,KAAKqC,CAAI,GAEzBA,EAAOA,EACPrC,EAAS,OAAO,KAAKqC,EAAK,OAAQA,EAAK,WAAYA,EAAK,UAAU,GAE7D,KAAK,uBAAuB,CAAClF,EAAQmF,IAAStC,EAAO,MAAM7C,EAAQA,EAASmF,CAAI,EAAGtC,EAAO,WAAYxC,CAAc,CAC7H,KAAO,CACL,IAAM+E,EAAc,IAAI,KAAK,CAACF,CAAI,CAAC,EACnC,OAAO,KAAK,uBAAuB,CAAClF,EAAQmF,IAASC,EAAY,MAAMpF,EAAQA,EAASmF,CAAI,EAAGC,EAAY,KAAM/E,CAAc,CACjI,CACF,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAoBM,kBAAkBe,EAA2B,QAAApB,EAAA,yBAA3BsF,EAAa9G,EAAU,CAAC,EAAG,CACjD,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,oCAAqC/B,CAAO,EAC3D,GAAI,CACF,IAAM6G,EAAc,IAAI,KAAK,CAACC,CAAW,CAAC,EAC1C,OAAO,MAAM,KAAK,uBAAuB,CAACrF,EAAQmF,IAASC,EAAY,MAAMpF,EAAQA,EAASmF,CAAI,EAAGC,EAAY,KAAM/E,CAAc,CACvI,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAgBM,uBAAuBe,EAAaoB,EAAoB,QAAAxC,EAAA,yBAAjCuF,EAAaH,EAAM5G,EAAU,CAAC,EAAG,CAI5D,GAHKA,EAAQ,YACXA,EAAQ,UAAY,GAElBA,EAAQ,UAAY,GAAKA,EAAQ,UAAY,UAC/C,MAAM,IAAI,WAAW,wCAAwC,SAAgC,EAAE,EAKjG,GAHIA,EAAQ,oBAAsB,GAAK,CAACA,EAAQ,oBAC9CA,EAAQ,kBAAoB,WAE1BA,EAAQ,kBAAoB,GAAKA,EAAQ,kBAAoB,UAC/D,MAAM,IAAI,WAAW,gDAAgD,SAAgC,EAAE,EAEzG,GAAIA,EAAQ,YAAc,EAAG,CAC3B,GAAI4G,EAAO,UAAmC,IAC5C,MAAM,IAAI,WAAW,GAAGA,CAAI,2CAA2C,EAErEA,EAAO5G,EAAQ,oBACjBA,EAAQ,UAAY,KAAK,KAAK4G,EAAO,GAAqB,EACtD5G,EAAQ,UAAY,UACtBA,EAAQ,UAAY,SAG1B,CACKA,EAAQ,kBACXA,EAAQ,gBAAkB,CAAC,GAExBA,EAAQ,aACXA,EAAQ,WAAa,CAAC,GAExB,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,yCAA0C/B,CAAO,EAChE,GAAI,CACF,GAAI4G,GAAQ5G,EAAQ,kBAClB,OAAO,MAAM,KAAK,OAAO+G,EAAY,EAAGH,CAAI,EAAGA,EAAM9E,CAAc,EAErE,IAAMkF,EAAY,KAAK,OAAOJ,EAAO,GAAK5G,EAAQ,SAAS,EAAI,EAC/D,GAAIgH,EAAY,IACd,MAAM,IAAI,WAAW,8FAAmG,GAAqB,EAAE,EAEjJ,IAAMC,EAAY,CAAC,EACbC,EAAgBC,GAAa,EAC/B3C,EAAmB,EACjBC,EAAQ,IAAIC,GAAM1E,EAAQ,WAAW,EAC3C,QAASoH,EAAI,EAAGA,EAAIJ,EAAWI,IAC7B3C,EAAM,aAAa,IAAYjD,EAAA,sBAC7B,IAAM6F,EAAUC,GAAgBJ,EAAeE,CAAC,EAC1C/E,EAAQrC,EAAQ,UAAYoH,EAE5BtB,GADMsB,IAAMJ,EAAY,EAAIJ,EAAOvE,EAAQrC,EAAQ,WAC7BqC,EAC5B4E,EAAU,KAAKI,CAAO,EACtB,MAAM,KAAK,WAAWA,EAASN,EAAY1E,EAAOyD,CAAa,EAAGA,EAAe,CAC/E,YAAa9F,EAAQ,YACrB,WAAYA,EAAQ,WACpB,gBAAiBA,EAAQ,gBACzB,eAAgB8B,EAAe,cACjC,CAAC,EAGD0C,GAAoBsB,EAChB9F,EAAQ,YACVA,EAAQ,WAAW,CACjB,YAAawE,CACf,CAAC,CAEL,EAAC,EAEH,aAAMC,EAAM,GAAG,EACR,KAAK,gBAAgBwC,EAAWnF,CAAc,CACvD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAcM,WAAWe,EAAwB,QAAApB,EAAA,yBAAxBsD,EAAU9E,EAAU,CAAC,EAAG,CACvC,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,6BAA8B/B,CAAO,EACpD,GAAI,CACF,IAAM4G,GAAQ,MAAMW,GAAOzC,CAAQ,GAAG,KACtC,OAAO,MAAM,KAAK,uBAAuB,CAACrD,EAAQC,IACzC,IAAM8F,GAAmB1C,EAAU,CACxC,UAAW,GACX,IAAKpD,EAAQD,EAASC,EAAQ,EAAI,IAClC,MAAOD,CACT,CAAC,EACAmF,EAAM,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG5G,CAAO,EAAG,CACjD,eAAgB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,cAAc,EAAGkC,EAAmCJ,CAAc,CAAC,CAC7H,CAAC,CAAC,CACJ,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAiBM,aAAae,EAAwF,QAAApB,EAAA,yBAAxFqD,EAAQ4C,EAAa,QAAiCC,EAAiB,EAAG1H,EAAU,CAAC,EAAG,CACpGA,EAAQ,kBACXA,EAAQ,gBAAkB,CAAC,GAExBA,EAAQ,aACXA,EAAQ,WAAa,CAAC,GAExB,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,+BAAgC/B,CAAO,EACtD,GAAI,CACF,IAAI2H,EAAW,EACTT,EAAgBC,GAAa,EAC/B3C,EAAmB,EACjByC,EAAY,CAAC,EAuBnB,aAtBkB,IAAIW,GAAgB/C,EAAQ4C,EAAYC,EAAgB,CAAO7B,EAAMgC,IAAWrG,EAAA,sBAChG,IAAM6F,EAAUC,GAAgBJ,EAAeS,CAAQ,EACvDV,EAAU,KAAKI,CAAO,EACtBM,IACA,MAAM,KAAK,WAAWN,EAASxB,EAAMgC,EAAQ,CAC3C,WAAY7H,EAAQ,WACpB,gBAAiBA,EAAQ,gBACzB,eAAgB8B,EAAe,cACjC,CAAC,EAED0C,GAAoBqD,EAChB7H,EAAQ,YACVA,EAAQ,WAAW,CACjB,YAAawE,CACf,CAAC,CAEL,GAKA,KAAK,KAAKkD,EAAiB,EAAI,CAAC,CAAC,EACjB,GAAG,EACZ,MAAM,KAAK,gBAAgBT,EAAW,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGjH,CAAO,EAAG,CACrF,eAAgB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,cAAc,EAAGkC,EAAmCJ,CAAc,CAAC,CAC7H,CAAC,CAAC,CACJ,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GACF,EAIaN,GAAN,MAAMuG,UAAuBpI,EAAW,CAC7C,YAAYG,EAAuBC,EAAqCC,EAGxEC,EAAS,CAGP,IAAIC,EACAC,EAEJ,GADAF,EAAUA,GAAW,CAAC,EAClBG,GAAeL,CAAmC,EAEpDI,EAAML,EACNI,EAAWH,UACFM,IAAUN,aAA+CO,IAA8BP,aAA+CQ,IAAuBC,GAAkBT,CAAmC,EAE3NI,EAAML,EACNG,EAAUD,EACVE,EAAWO,GAAYV,EAAqCE,CAAO,UAC1D,CAACF,GAAuC,OAAOA,GAAwC,SAGhGI,EAAML,EACNI,EAAWO,GAAY,IAAIF,GAAuBN,CAAO,UAChDF,GAAuC,OAAOA,GAAwC,UAAYC,GAAqB,OAAOA,GAAsB,SAAU,CAEvK,IAAMU,EAAgBX,EAChBY,EAAWX,EACXY,EAAiBC,GAA6Bf,CAAqB,EACzE,GAAIc,EAAe,OAAS,oBAC1B,GAAIP,GAAQ,CACV,IAAMS,EAAsB,IAAIR,GAA2BM,EAAe,YAAaA,EAAe,UAAU,EAChHT,EAAMY,GAAgBA,GAAgBH,EAAe,IAAK,mBAAmBF,CAAa,CAAC,EAAG,mBAAmBC,CAAQ,CAAC,EACrHV,EAAQ,eACXA,EAAQ,cAAuCW,EAAe,SAAvC,SAEzBV,EAAWO,GAAYK,EAAqBb,CAAO,CACrD,KACE,OAAM,IAAI,MAAM,oEAAoE,UAE7EW,EAAe,OAAS,gBACjCT,EAAMY,GAAgBA,GAAgBH,EAAe,IAAK,mBAAmBF,CAAa,CAAC,EAAG,mBAAmBC,CAAQ,CAAC,EAAI,IAAMC,EAAe,WACnJV,EAAWO,GAAY,IAAIF,GAAuBN,CAAO,MAEzD,OAAM,IAAI,MAAM,0FAA0F,CAE9G,KACE,OAAM,IAAI,MAAM,uEAAuE,EAEzF,MAAME,EAAKD,CAAQ,EACnB,KAAK,gBAAkB,IAAI8H,GAAS,KAAK,oBAAoB,CAC/D,CASA,aAAa7G,EAAU,CACrB,OAAO,IAAI4G,EAAe3G,GAAgB,KAAK,IAAKF,GAAa,WAAW,SAAUC,EAAS,SAAW,EAAI,OAAYA,CAAQ,EAAG,KAAK,QAAQ,CACpJ,CAUM,OAAO0B,EAAoB,QAAApB,EAAA,yBAApBoF,EAAM5G,EAAU,CAAC,EAAG,CAC/B,IAAI2B,EAAIgB,EAAIgB,EACZ3D,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,wBAAyB/B,CAAO,EAC/C,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,gBAAgB,OAAO,EAAG4G,EAAM,OAAO,OAAO,CAC9D,YAAa5G,EAAQ,YACrB,gBAAiBA,EAAQ,gBACzB,mBAAoBA,EAAQ,mBAC5B,sBAAuBA,EAAQ,WAC/B,SAAUA,EAAQ,SAClB,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,QAAS3B,EAAQ,oBACjB,gBAAiBA,EAAQ,gBACzB,0BAA2B2C,EAAK3C,EAAQ,sBAAwB,MAAQ2C,IAAO,OAAS,OAASA,EAAG,WACpG,wBAAyBgB,EAAK3D,EAAQ,sBAAwB,MAAQ2D,IAAO,OAAS,OAASA,EAAG,WAClG,UAAW3D,EAAQ,UACnB,KAAM6D,GAAa7D,EAAQ,IAAI,EAC/B,eAAgB8D,GAAiB9D,EAAQ,IAAI,CAC/C,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAUM,kBAAkBe,EAAoB,QAAApB,EAAA,yBAApBoF,EAAM5G,EAAU,CAAC,EAAG,CAC1C,IAAI2B,EAAIgB,EACR,GAAM,CACJ,KAAAd,EACA,eAAAC,CACF,EAAIC,EAAW,mCAAoC/B,CAAO,EAC1D,GAAI,CACF,IAAM2F,EAAa,CACjB,YAAaC,EACf,EACM5D,EAAM,MAAM,KAAK,OAAO4E,EAAM,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG5G,CAAO,EAAG,CAC5E,WAAA2F,EACA,eAAgB7D,EAAe,cACjC,CAAC,CAAC,EACF,OAAO,OAAO,OAAO,OAAO,OAAO,CACjC,UAAW,EACb,EAAGE,CAAG,EAAG,CACP,UAAWA,EAAI,SACjB,CAAC,CACH,OAASO,EAAG,CACV,KAAMZ,EAAKY,EAAE,WAAa,MAAQZ,IAAO,OAAS,OAASA,EAAG,aAAe,oBAC3E,OAAAE,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAAS,4EACX,CAAC,EACM,OAAO,OAAO,OAAO,OAAO,CACjC,UAAW,EACb,GAAIG,EAAKJ,EAAE,YAAc,MAAQI,IAAO,OAAS,OAASA,EAAG,aAAa,EAAG,CAC3E,UAAWJ,EAAE,QACf,CAAC,EAEH,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAWM,YAAYe,EAAMoB,EAAQC,EAAqB,QAAAzC,EAAA,yBAAnCqE,EAAMpE,EAAQC,EAAO1B,EAAU,CAAC,EAAG,CACnD,IAAI2B,EACJ3B,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,6BAA8B/B,CAAO,EACpD,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,gBAAgB,YAAY0B,EAAOmE,EAAM,OAAO,OAAO,CACvE,YAAa7F,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,eAAgB,CACd,iBAAkB3B,EAAQ,UAC5B,EACA,MAAOiC,GAAc,CACnB,OAAAR,EACA,MAAAC,CACF,CAAC,EACD,+BAAgC1B,EAAQ,WACxC,wBAAyBA,EAAQ,wBACjC,0BAA2BA,EAAQ,0BACnC,QAASA,EAAQ,oBACjB,gBAAiBA,EAAQ,eAC3B,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAYM,mBAAmBe,EAAWoB,EAAcC,EAAY+D,EAAqB,QAAAxG,EAAA,yBAA1DuE,EAAWC,EAAciC,EAAYvG,EAAO1B,EAAU,CAAC,EAAG,CACjF,IAAI2B,EACJ3B,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5CA,EAAQ,iBAAmBA,EAAQ,kBAAoB,CAAC,EACxD,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,oCAAqC/B,CAAO,EAC3D,GAAI,CACF,OAAA4B,GAAqB5B,EAAQ,oBAAqB,KAAK,OAAO,EACvD,MAAM,KAAK,gBAAgB,mBAAmB+F,EAAW9D,GAAc,CAC5E,OAAQ+D,EACR,MAAAtE,CACF,CAAC,EAAG,EAAGO,GAAc,CACnB,OAAQgG,EACR,MAAAvG,CACF,CAAC,EAAG,OAAO,OAAO,CAChB,YAAa1B,EAAQ,YACrB,iBAAkBA,EAAQ,iBAC1B,mBAAoBA,EAAQ,mBAC5B,sBAAuBA,EAAQ,WAC/B,+BAAgCA,EAAQ,WACxC,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,+BAAgC,CAC9B,cAAe3B,EAAQ,iBAAiB,QACxC,sBAAuBA,EAAQ,iBAAiB,gBAChD,kBAAmBA,EAAQ,iBAAiB,YAC5C,wBAAyBA,EAAQ,iBAAiB,iBACpD,EACA,QAASA,EAAQ,oBACjB,gBAAiBA,EAAQ,gBACzB,wBAAyB4D,GAA0B5D,EAAQ,mBAAmB,CAChF,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAUM,YAA4C,QAAAL,EAAA,yBAAjCC,EAAS,EAAGC,EAAO1B,EAAU,CAAC,EAAG,CAChD,IAAI2B,EACJ3B,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,4BAA6B/B,CAAO,EACnD,GAAI,CACF,OAAO,MAAM,KAAK,gBAAgB,WAAW,EAAG,OAAO,OAAO,CAC5D,YAAaA,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,MAAOM,GAAc,CACnB,OAAAR,EACA,MAAAC,CACF,CAAC,EACD,+BAAgC1B,EAAQ,WACxC,QAASA,EAAQ,oBACjB,gBAAiBA,EAAQ,eAC3B,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAUM,eAA+C,QAAAL,EAAA,yBAAjCC,EAAS,EAAGC,EAAO1B,EAAU,CAAC,EAAG,CACnD,IAAI2B,EACJ3B,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,+BAAgC/B,CAAO,EACtD,GAAI,CACF,OAAO,MAAM,KAAK,gBAAgB,cAAc,OAAO,OAAO,CAC5D,YAAaA,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,MAAOM,GAAc,CACnB,OAAAR,EACA,MAAAC,CACF,CAAC,CACH,EAAGQ,EAAmCJ,CAAc,CAAC,CAAC,EAAE,KAAKoG,EAAsB,CACrF,OAAS3F,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAaM,uBAA+D,QAAAL,EAAA,yBAAzCC,EAAS,EAAGC,EAAOyG,EAAQnI,EAAU,CAAC,EAAG,CACnE,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,sCAAuC/B,CAAO,EAC7D,GAAI,CACF,OAAO,MAAM,KAAK,gBAAgB,cAAc,OAAO,OAAO,CAC5D,YAAaA,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,MAAOM,GAAc,CACnB,OAAAR,EACA,MAAAC,CACF,CAAC,EACD,OAAQyG,EACR,YAAanI,EAAQ,WACvB,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAeA,0BAA0BJ,EAAS,EAAGC,EAAOyG,EAAQnI,EAAU,CAAC,EAAG,CACjE,OAAOoI,GAAiB,KAAM,UAAW,WAAwC,CAC/E,IAAIC,EACJ,GAAMF,GAAUA,IAAW,OACzB,GACEE,EAAmC,MAAMC,GAAQ,KAAK,sBAAsB7G,EAAQC,EAAOyG,EAAQnI,CAAO,CAAC,EAC3GmI,EAASE,EAAiC,kBAC1C,MAAM,MAAMC,GAAQ,MAAMA,GAAQD,CAAgC,CAAC,QAC5DF,EAEb,CAAC,CACH,CAQA,mBAAmB1G,EAAS,EAAGC,EAAO1B,EAAU,CAAC,EAAG,CAClD,OAAOoI,GAAiB,KAAM,UAAW,WAAiC,CACxE,IAAIG,EAAK5G,EACT,IAAIwG,EACJ,GAAI,CACF,QAASxF,EAAK6F,GAAc,KAAK,0BAA0B/G,EAAQC,EAAOyG,EAAQnI,CAAO,CAAC,EAAG2D,EAAIA,EAAK,MAAM2E,GAAQ3F,EAAG,KAAK,CAAC,EAAG,CAACgB,EAAG,MAAO,CACzI,IAAM8E,EAAuB9E,EAAG,MAChC,MAAM2E,GAAQ,MAAAI,GAAOC,GAAiBH,GAAcI,GAA0BH,CAAoB,CAAC,CAAC,EAAC,CACvG,CACF,OAASI,EAAO,CACdN,EAAM,CACJ,MAAOM,CACT,CACF,QAAE,CACA,GAAI,CACElF,GAAM,CAACA,EAAG,OAAShC,EAAKgB,EAAG,UAAS,MAAM2F,GAAQ3G,EAAG,KAAKgB,CAAE,CAAC,EACnE,QAAE,CACA,GAAI4F,EAAK,MAAMA,EAAI,KACrB,CACF,CACF,CAAC,CACH,CAwEA,eAAe9G,EAAS,EAAGC,EAAO1B,EAAU,CAAC,EAAG,CAC9CA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAE5C,IAAM8I,EAAO,KAAK,mBAAmBrH,EAAQC,EAAO1B,CAAO,EAC3D,MAAO,CAIL,MAAO,CACL,OAAO8I,EAAK,KAAK,CACnB,EAIA,CAAC,OAAO,aAAa,GAAI,CACvB,OAAO,IACT,EAIA,OAAQ,CAACC,EAAW,CAAC,IACZ,KAAK,0BAA0BtH,EAAQC,EAAOqH,EAAS,kBAAmB,OAAO,OAAO,CAC7F,YAAaA,EAAS,WACxB,EAAG/I,CAAO,CAAC,CAEf,CACF,CAWM,kBAAkB4C,EAAQoB,EAAOC,EAA4B,QAAAzC,EAAA,yBAA3CC,EAAQC,EAAOsH,EAAchJ,EAAU,CAAC,EAAG,CACjE,IAAI2B,EACJ3B,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,mCAAoC/B,CAAO,EAC1D,GAAI,CACF,OAAO,MAAM,KAAK,gBAAgB,kBAAkB,OAAO,OAAO,CAChE,YAAaA,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,aAAcqH,EACd,MAAO/G,GAAc,CACnB,OAAAR,EACA,MAAAC,CACF,CAAC,CACH,EAAGQ,EAAmCJ,CAAc,CAAC,CAAC,EAAE,KAAKoG,EAAsB,CACrF,OAAS3F,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAeM,0BAA0BJ,EAAQC,EAAOuH,EAAmBd,EAAQnI,EAAS,QAAAwB,EAAA,sBACjF,IAAIG,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,0CAA2C/B,CAAO,EACjE,GAAI,CACF,OAAO,MAAM,KAAK,gBAAgB,kBAAkB,OAAO,OAAO,CAChE,YAA+DA,GAAQ,YACvE,sBAAyEA,GAAQ,WACjF,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAqDA,GAAQ,UAAU,EAAG,CAC/H,QAAS2B,EAAuD3B,GAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC9H,CAAC,EACD,aAAcsH,EACd,MAAOhH,GAAc,CACnB,OAAQR,EACR,MAAOC,CACT,CAAC,EACD,OAAQyG,EACR,YAA+DnI,GAAQ,WACzE,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAiBA,8BAA8BJ,EAAQC,EAAOuH,EAAmBd,EAAQnI,EAAS,CAC/E,OAAOoI,GAAiB,KAAM,UAAW,WAA4C,CACnF,IAAIC,EACJ,GAAMF,GAAUA,IAAW,OACzB,GACEE,EAAmC,MAAMC,GAAQ,KAAK,0BAA0B7G,EAAQC,EAAOuH,EAAmBd,EAAQnI,CAAO,CAAC,EAClImI,EAASE,EAAiC,kBAC1C,MAAM,MAAMC,GAAQ,MAAMA,GAAQD,CAAgC,CAAC,QAC5DF,EAEb,CAAC,CACH,CASA,uBAAuB1G,EAAQC,EAAOuH,EAAmBjJ,EAAS,CAChE,OAAOoI,GAAiB,KAAM,UAAW,WAAqC,CAC5E,IAAIc,EAAKvH,EACT,IAAIwG,EACJ,GAAI,CACF,QAASxF,EAAK6F,GAAc,KAAK,8BAA8B/G,EAAQC,EAAOuH,EAAmBd,EAAQnI,CAAO,CAAC,EAAG2D,EAAIA,EAAK,MAAM2E,GAAQ3F,EAAG,KAAK,CAAC,EAAG,CAACgB,EAAG,MAAO,CAChK,IAAM8E,EAAuB9E,EAAG,MAChC,MAAM2E,GAAQ,MAAAI,GAAOC,GAAiBH,GAAcI,GAA0BH,CAAoB,CAAC,CAAC,EAAC,CACvG,CACF,OAASU,EAAO,CACdD,EAAM,CACJ,MAAOC,CACT,CACF,QAAE,CACA,GAAI,CACExF,GAAM,CAACA,EAAG,OAAShC,EAAKgB,EAAG,UAAS,MAAM2F,GAAQ3G,EAAG,KAAKgB,CAAE,CAAC,EACnE,QAAE,CACA,GAAIuG,EAAK,MAAMA,EAAI,KACrB,CACF,CACF,CAAC,CACH,CAyEA,mBAAmBzH,EAAQC,EAAOsH,EAAchJ,EAAU,CAAC,EAAG,CAC5DA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAE5C,IAAM8I,EAAO,KAAK,uBAAuBrH,EAAQC,EAAOsH,EAAc,OAAO,OAAO,CAAC,EAAGhJ,CAAO,CAAC,EAChG,MAAO,CAIL,MAAO,CACL,OAAO8I,EAAK,KAAK,CACnB,EAIA,CAAC,OAAO,aAAa,GAAI,CACvB,OAAO,IACT,EAIA,OAAQ,CAACC,EAAW,CAAC,IACZ,KAAK,8BAA8BtH,EAAQC,EAAOsH,EAAcD,EAAS,kBAAmB,OAAO,OAAO,CAC/G,YAAaA,EAAS,WACxB,EAAG/I,CAAO,CAAC,CAEf,CACF,CAWM,iCAAiC4C,EAAQoB,EAAOC,EAA+B,QAAAzC,EAAA,yBAA9CC,EAAQC,EAAO0H,EAAiBpJ,EAAU,CAAC,EAAG,CACnF,IAAI2B,EACJ3B,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,kDAAmD/B,CAAO,EACzE,GAAI,CACF,OAAO,MAAM,KAAK,gBAAgB,kBAAkB,OAAO,OAAO,CAChE,YAAaA,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,gBAAAyH,EACA,MAAOnH,GAAc,CACnB,OAAAR,EACA,MAAAC,CACF,CAAC,CACH,EAAGQ,EAAmCJ,CAAc,CAAC,CAAC,EAAE,KAAKoG,EAAsB,CACrF,OAAS3F,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GASM,OAAOe,EAAoB,QAAApB,EAAA,yBAApBoF,EAAM5G,EAAU,CAAC,EAAG,CAC/B,IAAI2B,EACJ3B,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,wBAAyB/B,CAAO,EAC/C,GAAI,CACF,OAAO,MAAM,KAAK,gBAAgB,OAAO4G,EAAM,OAAO,OAAO,CAC3D,YAAa5G,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,EACD,gBAAiB3B,EAAQ,eAC3B,EAAGkC,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAUM,qBAAqBe,EAAsBoB,EAA8B,QAAAxC,EAAA,yBAApD6H,EAAsBC,EAAgBtJ,EAAU,CAAC,EAAG,CAC7E,IAAI2B,EACJ3B,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAA6B,EACA,eAAAC,CACF,EAAIC,EAAW,sCAAuC/B,CAAO,EAC7D,GAAI,CACF,OAAO,MAAM,KAAK,gBAAgB,qBAAqBqJ,EAAsB,OAAO,OAAO,CACzF,YAAarJ,EAAQ,YACrB,mBAAoBsJ,EACpB,sBAAuBtJ,EAAQ,WAC/B,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGO,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GAcM,qBAAqBe,EAA0B,QAAApB,EAAA,yBAA1B6B,EAAYrD,EAAU,CAAC,EAAG,CACnD,IAAI2B,EACJ,GAAM,CACJ,KAAAE,EACA,eAAAC,CACF,EAAIC,EAAW,sCAAuC/B,CAAO,EAC7D,GAAI,CACF,OAAO,MAAM,KAAK,gBAAgB,gBAAgBqD,EAAY,OAAO,OAAO,CAC1E,YAAarD,EAAQ,YACrB,yBAA0B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAQ,UAAU,EAAG,CAC7E,QAAS2B,EAAK3B,EAAQ,cAAgB,MAAQ2B,IAAO,OAAS,OAASA,EAAG,aAC5E,CAAC,CACH,EAAGO,EAAmCJ,CAAc,CAAC,CAAC,CACxD,OAASS,EAAG,CACV,MAAAV,EAAK,UAAU,CACb,KAAMW,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAV,EAAK,IAAI,CACX,CACF,GACF,EClnGA,SAAsB0H,GAAcC,EAAe,QAAAC,EAAA,sBACjD,IAAMC,EAAO,MAAMF,EAAc,SACjC,OAAOG,GAAaD,CAAI,CAC1B,GACO,SAASE,GAAeC,EAAK,CAClC,OAAO,IAAI,KAAK,CAACA,CAAG,CAAC,EAAE,IACzB,CCHA,IAAMC,GAAwB,KACxBC,GAAkB,IAClBC,GAAY,GAILC,GAAN,KAA0B,CAC/B,YAAYC,EAAeC,EAAa,CACtC,GAAI,CAACD,GAAiB,CAACA,EAAc,YAEnC,MAAM,IAAI,WAAW,mEAAmE,EAE1F,GAAI,CAACC,GAAeA,EAAY,OAAS,EAEvC,MAAM,IAAI,WAAW,0DAA0D,EAEjF,KAAK,cAAgBD,EACrB,KAAK,YAAcC,EACnB,KAAK,sBAAwB,KAAK,cAAc,YAAY,MAAM,GAAG,EAAE,CAAC,EACxE,KAAK,kBAAoB,KAAK,KAAK,qBAAqB,GAAGC,EAAgB,GAC3E,KAAK,oBAAsB,KAAK,KAAK,qBAAqB,IAC5D,CAEM,oBAAqB,QAAAC,EAAA,sBAGzB,GAAI,KAAK,cAAc,UAAU,SAAWC,GAAkB,cAC5D,MAAM,IAAI,MAAM,qDAAqD,KAAK,cAAc,UAAU,MAAM,IAAI,EAG9G,IAAMC,GADqB,MAAMC,GAAc,KAAK,aAAa,GACzB,MAAM,KAAK,mBAAmB,EAAE,CAAC,EACxE,MAAM,KAAK,iBAAiB,EAAE,MAAM,CAAC,EAChCC,EAAmBF,EAAa,OAKtC,GAAIE,IAAqB,KAAK,YAAY,MAAQA,IAAqB,EACrE,MAAM,IAAI,MAAM,0EAA0E,EAE5F,IAAMC,EAA2B,IAAI,MAAMD,CAAgB,EACvDE,EAA6B,EAC7BC,EAA0B,EAE9B,QAASC,EAAQ,EAAGA,EAAQJ,EAAkBI,IAAS,CACrD,IAAMC,EAAcP,EAAaM,CAAK,EAChCE,EAA0B,CAAC,EACjCA,EAAwB,QAAU,IAAIC,GACtC,IAAMC,EAAgBH,EAAY,MAAM,GAAGV,EAAgB,EAAE,EACzDc,EAA0B,GAC1BC,EAAwB,GACxBC,EAAgB,GAChBC,EAAYrB,GAChB,QAAWsB,KAAgBL,EAAe,CACxC,GAAI,CAACC,EAAyB,CAO5B,GALII,EAAa,WAAWC,GAAgB,UAAU,IACpDF,EAAY,SAASC,EAAa,MAAMxB,EAAqB,EAAE,CAAC,CAAC,GAI/DwB,EAAa,WAAWE,EAAgB,EAAG,CAC7CN,EAA0B,GAC1B,IAAMO,EAASH,EAAa,MAAMvB,EAAe,EACjDgB,EAAwB,OAAS,SAASU,EAAO,CAAC,CAAC,EACnDV,EAAwB,cAAgBU,EAAO,MAAM,CAAC,EAAE,KAAK1B,EAAe,CAC9E,CACA,QACF,CACA,GAAIuB,EAAa,KAAK,IAAM,GAAI,CAEzBH,IACHA,EAAwB,IAE1B,QACF,CAEA,GAAKA,EAcEJ,EAAwB,aAC3BA,EAAwB,WAAa,IAEvCA,EAAwB,YAAcO,MAjBZ,CAC1B,GAAIA,EAAa,QAAQxB,EAAqB,IAAM,GAElD,MAAM,IAAI,MAAM,uCAAuCwB,CAAY,oCAAoCxB,EAAqB,IAAI,EAGlI,IAAM2B,EAASH,EAAa,MAAMxB,EAAqB,EACvDiB,EAAwB,QAAQ,IAAIU,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACpDA,EAAO,CAAC,IAAMF,GAAgB,kBAChCR,EAAwB,UAAYU,EAAO,CAAC,EAC5CL,EAAgB,GAEpB,CAOF,CAKIC,IAAcrB,IAAa,OAAO,UAAUqB,CAAS,GAAKA,GAAa,GAAKA,EAAY,KAAK,YAAY,MAAQX,EAAyBW,CAAS,IAAM,QAC3JN,EAAwB,SAAW,KAAK,YAAY,IAAIM,CAAS,EACjEX,EAAyBW,CAAS,EAAIN,GAEtCW,GAAO,MAAM,gBAAgBb,CAAK,uEAAuEQ,CAAS,EAAE,EAElHD,EACFR,IAEAD,GAEJ,CACA,MAAO,CACL,aAAcD,EACd,2BAA4BC,EAC5B,wBAAyBC,CAC3B,CACF,GACF,EC1HA,IAAKe,GAGJ,SAAAA,EAAA,CAHD,OAAAA,EAAKA,EAAe,OAAA,CAAA,EAAA,WAClBA,EAAA,SAAA,CAAA,EAAA,WACAA,CACF,EAACA,IAHmB,CAAA,CAAf,EAUCC,IAAY,IAAA,OAChBA,CAAA,QAOS,KAAIC,EAAc,QAAAC,EAAA,6BACvB,IAAI,QAASC,GAAU,MACrB,KAAKF,CAAI,IAAK,QAAG,KAAgB,KAAAA,CAAO,IAAAF,GAAA,oBACxCE,CAAO,EAAGF,GAAA,SACX,sBACME,EAAa,IAAM,WACtBA,CAAK,EAAIF,GAAQ,SACjB,KAIR,GAOO,OAAa,OAAOE,EAAW,QAAAC,EAAA,6BACpC,IAAO,QAAIC,GAAsB,CAC/B,KAAI,KAAKF,CAAI,IAAKF,GAAK,6BAChBE,CAAA,SAEP,KAAO,KAAKA,CAAI,IAChB,GAEJ,GAKQ,OAAO,cAAcA,EAAaG,EAAiB,CACzD,KAAI,UAAKH,CAAU,IAAI,YACrB,UAAKA,CAAS,EAAI,CAACG,CAAI,OAClB,UAAAH,CAAA,EAAA,KAAAG,CAAA,EAGT,OAAC,gBAAAH,EAAA,CAEO,GAAM,KAAC,UAAAA,CAAgB,IAAW,QAAA,KAAA,UAAAA,CAAA,EAAA,OAAA,EAAA,CACxC,IAAIG,EAAK,KAAU,UAASH,CAAA,EAAA,MAAa,eACjC,IAAO,GACb,KAAA,IAAa,uBAdFD,EAAA,UAA8C,CAAA,QCjCxD,IAAMK,GAAN,KAAgB,CACrB,aAAc,CACZ,KAAK,MAAQ,QACb,KAAK,aAAe,IAAIC,EAC1B,CAMA,yBAA0B,CACxB,OAAO,KAAK,aAAa,wBAAwB,CACnD,CAIA,oBAAqB,CACnB,OAAO,KAAK,aAAa,mBAAmB,CAC9C,CAIA,gBAAiB,CACf,OAAO,KAAK,aAAa,eAAe,CAC1C,CACM,sBAAsBC,EAAYC,EAAwB,QAAAC,EAAA,sBAC9D,MAAMC,GAAM,KAAK,KAAK,KAAK,EAC3B,GAAI,CACF,KAAK,aAAa,iBAAiBH,CAAU,EAC7C,MAAMC,EAAuB,EAC7B,KAAK,aAAa,kBAAkBD,CAAU,CAChD,QAAE,CACA,MAAMG,GAAM,OAAO,KAAK,KAAK,CAC/B,CACF,GACA,aAAaC,EAAW,CAItB,GAHK,KAAK,YACR,KAAK,UAAYA,GAEf,KAAK,YAAcA,EACrB,MAAM,IAAI,WAAW,yFAAyF,KAAK,SAAS,cAAc,CAE9I,CACM,WAAWC,EAAiBC,EAAqBC,EAAS,QAAAL,EAAA,sBAC9D,IAAIM,EACAC,EACJ,GAAI,OAAOJ,GAAoB,WAAaK,IAAUJ,aAA+BK,IAA8BL,aAA+BM,IAAuBC,GAAkBP,CAAmB,GAE5ME,EAAMH,EACNI,EAAaH,UACJD,aAA2BS,GAEpCN,EAAMH,EAAgB,IACtBI,EAAaJ,EAAgB,WAC7BE,EAAUD,MAEV,OAAM,IAAI,WAAW,+EAA+E,EAEjGC,IACHA,EAAU,CAAC,GAEb,GAAM,CACJ,KAAAQ,EACA,eAAAC,CACF,EAAIC,EAAW,mCAAoCV,CAAO,EAC1D,GAAI,CACF,KAAK,aAAa,QAAQ,EAC1B,MAAM,KAAK,sBAAsB,CAC/B,IAAKC,EACL,WAAYC,CACd,EAAG,IAAYP,EAAA,sBACb,MAAM,IAAIY,GAAWN,EAAK,KAAK,aAAa,eAAeC,CAAU,CAAC,EAAE,OAAOO,CAAc,CAC/F,EAAC,CACH,OAASE,EAAG,CACV,MAAAH,EAAK,UAAU,CACb,KAAMI,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAH,EAAK,IAAI,CACX,CACF,GACM,kBAAkBV,EAAiBe,EAAkBC,EAAed,EAAS,QAAAL,EAAA,sBACjF,IAAIM,EACAC,EACAa,EACJ,GAAI,OAAOjB,GAAoB,WAAaK,IAAUU,aAA4BT,IAA8BS,aAA4BR,IAAuBC,GAAkBO,CAAgB,GAEnMZ,EAAMH,EACNI,EAAaW,EACbE,EAAOD,UACEhB,aAA2BS,GAEpCN,EAAMH,EAAgB,IACtBI,EAAaJ,EAAgB,WAC7BiB,EAAOF,EACPb,EAAUc,MAEV,OAAM,IAAI,WAAW,+EAA+E,EAEjGd,IACHA,EAAU,CAAC,GAEb,GAAM,CACJ,KAAAQ,EACA,eAAAC,CACF,EAAIC,EAAW,oCAAqCV,CAAO,EAC3D,GAAI,CACF,KAAK,aAAa,eAAe,EACjC,MAAM,KAAK,sBAAsB,CAC/B,IAAKC,EACL,WAAYC,CACd,EAAG,IAAYP,EAAA,sBACb,MAAM,IAAIY,GAAWN,EAAK,KAAK,aAAa,eAAeC,CAAU,CAAC,EAAE,cAAca,EAAMN,CAAc,CAC5G,EAAC,CACH,OAASE,EAAG,CACV,MAAAH,EAAK,UAAU,CACb,KAAMI,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAH,EAAK,IAAI,CACX,CACF,GACF,EAKMhB,GAAN,KAAwB,CACtB,aAAc,CACZ,KAAK,eAAiB,EACtB,KAAK,KAAO,GACZ,IAAMwB,EAAWC,GAAa,EAE9B,KAAK,SAAW,SAASD,CAAQ,GAIjC,KAAK,iBAAmB,KAAK,KAAK,QAAQ,GAAGE,EAAgB,GAAGC,GAAgB,YAAY,qBAAqBD,EAAgB,GAAGC,GAAgB,yBAAyB,WAE7K,KAAK,qBAAuB,6BAA6B,KAAK,QAAQ,GAEtE,KAAK,mBAAqB,KAAK,KAAK,QAAQ,KAC5C,KAAK,YAAc,IAAI,GACzB,CAQA,eAAejB,EAAY,CACzB,IAAMkB,EAAmBlB,aAAsBG,GACzCgB,EAAsB,GAAKD,EAAmB,EAAI,GAClDE,EAAY,IAAI,MAAMD,CAAmB,EAC/C,OAAAC,EAAU,CAAC,EAAIC,GAAsB,EACrCD,EAAU,CAAC,EAAI,IAAIE,GACdJ,IACHE,EAAU,CAAC,EAAIhB,GAAkBJ,CAAU,EAAIuB,GAAiBC,GAAgCxB,EAAYyB,EAAkB,EAAGzB,CAAU,EAAIA,GAEjJoB,EAAUD,EAAsB,CAAC,EAAI,IAAIO,GAAkC,IAAI,EACxE,IAAIC,GAASP,EAAW,CAAC,CAAC,CACnC,CACA,uBAAuBQ,EAAS,CAE9B,KAAK,MAAQ,CAAC,KAAK,iBAAkB,GAAGX,GAAgB,UAAU,KAAK,KAAK,cAAc,GAAI,GAAI,GAAGW,EAAQ,OAAO,SAAS,CAAC,IAAIC,GAAmBD,EAAQ,GAAG,CAAC,IAAIE,EAAgB,GAAGd,EAAgB,EACxM,EAAE,KAAKA,EAAgB,EACvB,QAAWe,KAAUH,EAAQ,QAAQ,aAAa,EAChD,KAAK,MAAQ,GAAGG,EAAO,IAAI,KAAKA,EAAO,KAAK,GAAGf,EAAgB,GAEjE,KAAK,MAAQA,EAGf,CACA,iBAAiBzB,EAAY,CAC3B,GAAI,KAAK,gBAAkByC,GACzB,MAAM,IAAI,WAAW,iBAAiBA,EAAiB,iCAAiC,EAG1F,IAAMC,EAAOC,GAAW3C,EAAW,GAAG,EACtC,GAAI,CAAC0C,GAAQA,IAAS,GACpB,MAAM,IAAI,WAAW,iCAAiC1C,EAAW,GAAG,GAAG,CAE3E,CACA,kBAAkBA,EAAY,CAC5B,KAAK,YAAY,IAAI,KAAK,eAAgBA,CAAU,EACpD,KAAK,gBACP,CAEA,oBAAqB,CACnB,MAAO,GAAG,KAAK,IAAI,GAAG,KAAK,kBAAkB,GAAGyB,EAAgB,EAClE,CACA,yBAA0B,CACxB,OAAO,KAAK,oBACd,CACA,gBAAiB,CACf,OAAO,KAAK,WACd,CACF,EACMmB,GAAN,cAAyCC,EAAkB,CACzD,YAAYC,EAAcC,EAAYxC,EAAS,CAC7C,MAAMwC,EAAYxC,CAAO,EACzB,KAAK,cAAgB,CACnB,QAAS,IAAIyC,GACb,OAAQ,IACR,QAAS,IAAIC,EACf,EACA,KAAK,aAAeH,CACtB,CACM,YAAYT,EAAS,QAAAnC,EAAA,sBACzB,aAAM,KAAK,aAAa,uBAAuBmC,CAAO,EAC/C,KAAK,aACd,GACF,EACMF,GAAN,KAAwC,CACtC,YAAYW,EAAc,CACxB,KAAK,aAAeA,CACtB,CACA,OAAOC,EAAYxC,EAAS,CAC1B,OAAO,IAAIqC,GAA2B,KAAK,aAAcG,EAAYxC,CAAO,CAC9E,CACF,EACM2C,GAAN,cAAsCL,EAAkB,CAGtD,YAAYE,EAAYxC,EAAS,CAC/B,MAAMwC,EAAYxC,CAAO,CAC3B,CACM,YAAY8B,EAAS,QAAAnC,EAAA,sBACzB,IAAIiD,EAAgB,GACpB,QAAWX,KAAUH,EAAQ,QAAQ,aAAa,EAC5Ce,GAAOZ,EAAO,KAAMd,GAAgB,YAAY,IAClDyB,EAAgBX,EAAO,MAG3B,OAAIW,IAAkB,IACpBd,EAAQ,QAAQ,OAAOc,CAAa,EAE/B,KAAK,YAAY,YAAYd,CAAO,CAC7C,GACF,EACMN,GAAN,KAAqC,CACnC,OAAOgB,EAAYxC,EAAS,CAC1B,OAAO,IAAI2C,GAAwBH,EAAYxC,CAAO,CACxD,CACF,ECxPO,IAAM8C,GAAN,KAAsB,CAC3B,YAAYC,EAAKC,EAGjBC,EAAS,CACP,IAAIC,EACAC,GAAeH,CAAoB,EACrCE,EAAWF,EACDA,EAIVE,EAAWE,GAAYJ,EAAsBC,CAAO,EAFpDC,EAAWE,GAAY,IAAIC,GAAuBJ,CAAO,EAI3D,IAAMK,EAAuB,IAAIC,GAAqBR,EAAKG,EAAS,uBAAuB,CAAC,EACtFM,EAAOC,GAAWV,CAAG,EACvBS,GAAQA,IAAS,IAEnB,KAAK,0BAA4B,IAAIE,GAAUJ,CAAoB,EAEnE,KAAK,0BAA4B,IAAIK,GAAQL,CAAoB,CAErE,CAKA,aAAc,CACZ,OAAO,IAAIM,EACb,CACM,YAAYC,EAAmBC,EAGrCb,EAAS,QAAAc,EAAA,sBACP,IAAMC,EAAQ,IAAIJ,GAClB,QAAWK,KAAmBJ,EACxB,OAAOI,GAAoB,SAC7B,MAAMD,EAAM,WAAWC,EAAiBH,EAAqBb,CAAO,EAEpE,MAAMe,EAAM,WAAWC,EAAiBH,CAAmB,EAG/D,OAAO,KAAK,YAAYE,CAAK,CAC/B,GACM,mBAAmBH,EAAmBK,EAAkBC,EAG9DlB,EAAS,QAAAc,EAAA,sBACP,IAAMC,EAAQ,IAAIJ,GAClB,QAAWK,KAAmBJ,EACxB,OAAOI,GAAoB,SAC7B,MAAMD,EAAM,kBAAkBC,EAAiBC,EAAkBC,EAAelB,CAAO,EAEvF,MAAMe,EAAM,kBAAkBC,EAAiBC,EAAkBC,CAAa,EAGlF,OAAO,KAAK,YAAYH,CAAK,CAC/B,GAoCM,YAAYI,EAA4B,QAAAL,EAAA,yBAA5BM,EAAcpB,EAAU,CAAC,EAAG,CAC5C,GAAI,CAACoB,GAAgBA,EAAa,eAAe,EAAE,OAAS,EAC1D,MAAM,IAAI,WAAW,wDAAwD,EAE/E,GAAM,CACJ,KAAAC,EACA,eAAAC,CACF,EAAIC,EAAW,8BAA+BvB,CAAO,EACrD,GAAI,CACF,IAAMwB,EAAmBJ,EAAa,mBAAmB,EAEnDK,EAAmB,MAAM,KAAK,0BAA0B,YAAYC,GAAeF,CAAgB,EAAGJ,EAAa,wBAAwB,EAAGI,EAAkB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGxB,CAAO,EAAG2B,EAAmCL,CAAc,CAAC,CAAC,EAG7PM,EAAkB,MADI,IAAIC,GAAoBJ,EAAkBL,EAAa,eAAe,CAAC,EACjD,mBAAmB,EAYrE,MAXY,CACV,UAAWK,EAAiB,UAC5B,YAAaA,EAAiB,YAC9B,UAAWA,EAAiB,UAC5B,UAAWA,EAAiB,UAC5B,gBAAiBA,EAAiB,gBAClC,QAASA,EAAiB,QAC1B,aAAcG,EAAgB,aAC9B,2BAA4BA,EAAgB,2BAC5C,wBAAyBA,EAAgB,uBAC3C,CAEF,OAASE,EAAG,CACV,MAAAT,EAAK,UAAU,CACb,KAAMU,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAT,EAAK,IAAI,CACX,CACF,GACF,EClIO,IAAMW,GAAN,cAA8BC,EAAc,CACjD,YAAYC,EAAuBC,EAGnCC,EAAS,CACP,IAAIC,EACAC,EAEJ,GADAF,EAAUA,GAAW,CAAC,EAClBG,GAAeJ,CAAmC,EAEpDG,EAAMJ,EACNG,EAAWF,UACFK,IAAUL,aAA+CM,IAA8BN,aAA+CO,IAAuBC,GAAkBR,CAAmC,EAE3NG,EAAMJ,EACNG,EAAWO,GAAYT,EAAqCC,CAAO,UAC1D,CAACD,GAAuC,OAAOA,GAAwC,SAGhGG,EAAMJ,EACNG,EAAWO,GAAY,IAAIF,GAAuBN,CAAO,UAChDD,GAAuC,OAAOA,GAAwC,SAAU,CAEzG,IAAMU,EAAgBV,EAChBW,EAAiBC,GAA6Bb,CAAqB,EACzE,GAAIY,EAAe,OAAS,oBAC1B,GAAIN,GAAQ,CACV,IAAMQ,EAAsB,IAAIP,GAA2BK,EAAe,YAAaA,EAAe,UAAU,EAChHR,EAAMW,GAAgBH,EAAe,IAAK,mBAAmBD,CAAa,CAAC,EACtET,EAAQ,eACXA,EAAQ,cAAuCU,EAAe,SAAvC,SAEzBT,EAAWO,GAAYI,EAAqBZ,CAAO,CACrD,KACE,OAAM,IAAI,MAAM,oEAAoE,UAE7EU,EAAe,OAAS,gBACjCR,EAAMW,GAAgBH,EAAe,IAAK,mBAAmBD,CAAa,CAAC,EAAI,IAAMC,EAAe,WACpGT,EAAWO,GAAY,IAAIF,GAAuBN,CAAO,MAEzD,OAAM,IAAI,MAAM,0FAA0F,CAE9G,KACE,OAAM,IAAI,MAAM,yDAAyD,EAE3E,MAAME,EAAKD,CAAQ,EACnB,KAAK,eAAiB,KAAK,wBAAwB,EACnD,KAAK,iBAAmB,IAAIa,GAAU,KAAK,oBAAoB,CACjE,CAIA,IAAI,eAAgB,CAClB,OAAO,KAAK,cACd,CAkBM,QAAqB,QAAAC,EAAA,yBAAdf,EAAU,CAAC,EAAG,CACzB,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,yBAA0BlB,CAAO,EAChD,GAAI,CAGF,OAAO,MAAM,KAAK,iBAAiB,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAO,EAAGmB,EAAmCF,CAAc,CAAC,CAAC,CACzI,OAASG,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GASM,mBAAgC,QAAAD,EAAA,yBAAdf,EAAU,CAAC,EAAG,CACpC,IAAIsB,EAAIC,EACR,GAAM,CACJ,KAAAP,EACA,eAAAC,CACF,EAAIC,EAAW,oCAAqClB,CAAO,EAC3D,GAAI,CACF,IAAMwB,EAAM,MAAM,KAAK,OAAOP,CAAc,EAC5C,OAAO,OAAO,OAAO,OAAO,OAAO,CACjC,UAAW,EACb,EAAGO,CAAG,EAAG,CACP,UAAWA,EAAI,SACjB,CAAC,CACH,OAASJ,EAAG,CACV,KAAME,EAAKF,EAAE,WAAa,MAAQE,IAAO,OAAS,OAASA,EAAG,aAAe,yBAC3E,OAAAN,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAAS,iFACX,CAAC,EACM,OAAO,OAAO,OAAO,OAAO,CACjC,UAAW,EACb,GAAIE,EAAKH,EAAE,YAAc,MAAQG,IAAO,OAAS,OAASA,EAAG,aAAa,EAAG,CAC3E,UAAWH,EAAE,QACf,CAAC,EAEH,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAUM,QAAqB,QAAAD,EAAA,yBAAdf,EAAU,CAAC,EAAG,CACzB,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,yBAA0BlB,CAAO,EAChD,GAAI,CACF,aAAM,KAAK,cAAc,CACvB,YAAaA,EAAQ,YACrB,eAAgBiB,EAAe,cACjC,CAAC,EACM,EACT,OAASG,EAAG,CACV,GAAIA,EAAE,aAAe,IACnB,OAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAAS,sDACX,CAAC,EACM,GAET,MAAAL,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAOA,cAAcS,EAAU,CACtB,OAAO,IAAIC,GAAWb,GAAgB,KAAK,IAAKc,GAAWF,CAAQ,CAAC,EAAG,KAAK,QAAQ,CACtF,CAMA,oBAAoBA,EAAU,CAC5B,OAAO,IAAIG,GAAiBf,GAAgB,KAAK,IAAKc,GAAWF,CAAQ,CAAC,EAAG,KAAK,QAAQ,CAC5F,CAgBA,mBAAmBA,EAAU,CAC3B,OAAO,IAAII,GAAgBhB,GAAgB,KAAK,IAAKc,GAAWF,CAAQ,CAAC,EAAG,KAAK,QAAQ,CAC3F,CAMA,kBAAkBA,EAAU,CAC1B,OAAO,IAAIK,GAAejB,GAAgB,KAAK,IAAKc,GAAWF,CAAQ,CAAC,EAAG,KAAK,QAAQ,CAC1F,CAaM,eAA4B,QAAAV,EAAA,yBAAdf,EAAU,CAAC,EAAG,CAC3BA,EAAQ,aACXA,EAAQ,WAAa,CAAC,GAExB,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,gCAAiClB,CAAO,EACvD,GAAI,CACF,OAAO,MAAM,KAAK,iBAAiB,cAAc,OAAO,OAAO,OAAO,OAAO,CAC3E,YAAaA,EAAQ,WACvB,EAAGA,EAAQ,UAAU,EAAGmB,EAAmCF,CAAc,CAAC,CAAC,CAC7E,OAASG,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAQM,QAAqB,QAAAD,EAAA,yBAAdf,EAAU,CAAC,EAAG,CACpBA,EAAQ,aACXA,EAAQ,WAAa,CAAC,GAExB,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,yBAA0BlB,CAAO,EAChD,GAAI,CACF,OAAO,MAAM,KAAK,iBAAiB,OAAO,OAAO,OAAO,CACtD,YAAaA,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,yBAA0BA,EAAQ,UACpC,EAAGmB,EAAmCF,CAAc,CAAC,CAAC,CACxD,OAASG,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAQM,gBAA6B,QAAAD,EAAA,yBAAdf,EAAU,CAAC,EAAG,CACjC,IAAIsB,EAAIC,EACR,GAAM,CACJ,KAAAP,EACA,eAAAC,CACF,EAAIC,EAAW,iCAAkClB,CAAO,EACxD,GAAI,CACF,IAAMwB,EAAM,MAAM,KAAK,OAAOP,CAAc,EAC5C,OAAO,OAAO,OAAO,OAAO,OAAO,CACjC,UAAW,EACb,EAAGO,CAAG,EAAG,CACP,UAAWA,EAAI,SACjB,CAAC,CACH,OAASJ,EAAG,CACV,KAAME,EAAKF,EAAE,WAAa,MAAQE,IAAO,OAAS,OAASA,EAAG,aAAe,oBAC3E,OAAAN,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAAS,iEACX,CAAC,EACM,OAAO,OAAO,OAAO,OAAO,CACjC,UAAW,EACb,GAAIE,EAAKH,EAAE,YAAc,MAAQG,IAAO,OAAS,OAASA,EAAG,aAAa,EAAG,CAC3E,UAAWH,EAAE,QACf,CAAC,EAEH,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAaM,YAAYe,EAAwB,QAAAhB,EAAA,yBAAxBiB,EAAUhC,EAAU,CAAC,EAAG,CAIxC,GAHKA,EAAQ,aACXA,EAAQ,WAAa,CAAC,GAEpBA,EAAQ,WAAW,kBACrB,MAAM,IAAI,WAAW,mGAAmG,EAE1H,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,8BAA+BlB,CAAO,EACrD,GAAI,CACF,OAAO,MAAM,KAAK,iBAAiB,YAAY,OAAO,OAAO,CAC3D,YAAaA,EAAQ,YACrB,sBAAuBA,EAAQ,WAC/B,SAAAgC,EACA,yBAA0BhC,EAAQ,UACpC,EAAGmB,EAAmCF,CAAc,CAAC,CAAC,CACxD,OAASG,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAYM,iBAA8B,QAAAD,EAAA,yBAAdf,EAAU,CAAC,EAAG,CAC7BA,EAAQ,aACXA,EAAQ,WAAa,CAAC,GAExB,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,kCAAmClB,CAAO,EACzD,GAAI,CACF,IAAMiC,EAAW,MAAM,KAAK,iBAAiB,gBAAgB,OAAO,OAAO,CACzE,YAAajC,EAAQ,YACrB,sBAAuBA,EAAQ,UACjC,EAAGmB,EAAmCF,CAAc,CAAC,CAAC,EAChDO,EAAM,CACV,UAAWS,EAAS,UACpB,iBAAkBA,EAAS,iBAC3B,KAAMA,EAAS,KACf,KAAMA,EAAS,KACf,UAAWA,EAAS,UACpB,aAAcA,EAAS,aACvB,UAAWA,EAAS,UACpB,gBAAiBA,EAAS,gBAC1B,kBAAmB,CAAC,EACpB,QAASA,EAAS,OACpB,EACA,QAAWC,KAAcD,EAAU,CACjC,IAAIE,EACAD,EAAW,eACbC,EAAe,CACb,YAAaD,EAAW,aAAa,WACvC,EACIA,EAAW,aAAa,YAC1BC,EAAa,UAAY,IAAI,KAAKD,EAAW,aAAa,SAAS,GAEjEA,EAAW,aAAa,WAC1BC,EAAa,SAAW,IAAI,KAAKD,EAAW,aAAa,QAAQ,IAGrEV,EAAI,kBAAkB,KAAK,CACzB,aAAAW,EACA,GAAID,EAAW,EACjB,CAAC,CACH,CACA,OAAOV,CACT,OAASJ,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAkBM,gBAAgBe,EAAQK,EAA4B,QAAArB,EAAA,yBAApCsB,EAAQC,EAActC,EAAU,CAAC,EAAG,CACxDA,EAAQ,WAAaA,EAAQ,YAAc,CAAC,EAC5C,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,kCAAmClB,CAAO,EACzD,GAAI,CACF,IAAMuC,EAAM,CAAC,EACb,QAAWL,KAAcI,GAAgB,CAAC,EACxCC,EAAI,KAAK,CACP,aAAc,CACZ,UAAWL,EAAW,aAAa,UAAYM,GAAqBN,EAAW,aAAa,SAAS,EAAI,GACzG,YAAaA,EAAW,aAAa,YACrC,SAAUA,EAAW,aAAa,SAAWM,GAAqBN,EAAW,aAAa,QAAQ,EAAI,EACxG,EACA,GAAIA,EAAW,EACjB,CAAC,EAEH,OAAO,MAAM,KAAK,iBAAiB,gBAAgB,OAAO,OAAO,CAC/D,YAAalC,EAAQ,YACrB,OAAAqC,EACA,aAAcE,EACd,sBAAuBvC,EAAQ,WAC/B,yBAA0BA,EAAQ,UACpC,EAAGmB,EAAmCF,CAAc,CAAC,CAAC,CACxD,OAASG,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAOA,mBAAmByB,EAAgB,CACjC,OAAO,IAAIC,GAAgB,KAAMD,CAAc,CACjD,CAuBM,gBAAgBV,EAAUK,EAAMO,EAA6B,QAAA5B,EAAA,yBAA7CU,EAAUmB,EAAMC,EAAe7C,EAAU,CAAC,EAAG,CACjE,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,kCAAmClB,CAAO,EACzD,GAAI,CACF,IAAM8C,EAAkB,KAAK,mBAAmBrB,CAAQ,EAClDQ,EAAW,MAAMa,EAAgB,OAAOF,EAAMC,EAAe5B,CAAc,EACjF,MAAO,CACL,gBAAA6B,EACA,SAAAb,CACF,CACF,OAASb,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAYM,WAAWe,EAAwB,QAAAhB,EAAA,yBAAxBU,EAAUzB,EAAU,CAAC,EAAG,CACvC,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,6BAA8BlB,CAAO,EACpD,GAAI,CACF,IAAI+C,EAAa,KAAK,cAActB,CAAQ,EAC5C,OAAIzB,EAAQ,YACV+C,EAAaA,EAAW,YAAY/C,EAAQ,SAAS,GAEhD,MAAM+C,EAAW,OAAO9B,CAAc,CAC/C,OAASG,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAWM,oBAAoBe,EAAsB,QAAAhB,EAAA,yBAAtBiC,EAAQhD,EAAU,CAAC,EAAG,CAC9C,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,sCAAuClB,CAAO,EAC7D,GAAI,CACF,IAAMiC,EAAW,MAAM,KAAK,iBAAiB,oBAAoB,OAAO,OAAO,OAAO,OAAO,CAC3F,OAAAe,CACF,EAAGhD,CAAO,EAAGmB,EAAmCF,CAAc,CAAC,CAAC,EAgBhE,OAfwB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGgB,CAAQ,EAAG,CACjE,UAAW,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAS,SAAS,EAAG,CAC9D,WAAYgB,GAAsChB,EAAS,UAAU,UAAU,CACjF,CAAC,EACD,QAAS,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAS,OAAO,EAAG,CAC1D,UAAWA,EAAS,QAAQ,UAAU,IAAIiB,GACvB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAe,EAAG,CACjE,KAAMC,GAAiBD,EAAgB,IAAI,EAC3C,KAAME,GAAOF,EAAgB,QAAQ,EACrC,kCAAmCG,GAA6BH,EAAgB,yBAAyB,CAC3G,CAAC,CAEF,CACH,CAAC,CACH,CAAC,CAEH,OAAS9B,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAYM,yBAAyBe,EAAWK,EAAsB,QAAArB,EAAA,yBAAjCuC,EAAWN,EAAQhD,EAAU,CAAC,EAAG,CAC9D,IAAIsB,EACJ,GAAM,CACJ,KAAAN,EACA,eAAAC,CACF,EAAIC,EAAW,2CAA4ClB,CAAO,EAClE,GAAI,CACF,IAAMiC,EAAW,MAAM,KAAK,iBAAiB,yBAAyBqB,EAAW,OAAO,OAAO,OAAO,OAAO,CAC3G,OAAAN,CACF,EAAGhD,CAAO,EAAGmB,EAAmCF,CAAc,CAAC,CAAC,EAsBhE,OArBwB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGgB,CAAQ,EAAG,CACjE,UAAW,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAS,SAAS,EAAG,CAC9D,WAAYsB,GAA2CtB,EAAS,UAAU,UAAU,CACtF,CAAC,EACD,QAAS,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,EAAS,OAAO,EAAG,CAC1D,UAAWA,EAAS,QAAQ,UAAU,IAAIiB,GACvB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAe,EAAG,CACjE,KAAMC,GAAiBD,EAAgB,IAAI,EAC3C,KAAME,GAAOF,EAAgB,QAAQ,EACrC,kCAAmCG,GAA6BH,EAAgB,yBAAyB,CAC3G,CAAC,CAEF,EACD,cAAe5B,EAAKW,EAAS,QAAQ,gBAAkB,MAAQX,IAAO,OAAS,OAASA,EAAG,IAAIkC,GAC1E,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAkB,EAAG,CACtE,KAAML,GAAiBK,EAAmB,IAAI,CAChD,CAAC,CAEF,CACH,CAAC,CACH,CAAC,CAEH,OAASpC,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAaA,aAAagC,EAAQhD,EAAU,CAAC,EAAG,CACjC,OAAOyD,GAAiB,KAAM,UAAW,WAA2B,CAClE,IAAIC,EACJ,GAAMV,GAAUA,IAAW,OACzB,GACEU,EAA+B,MAAMC,GAAQ,KAAK,oBAAoBX,EAAQhD,CAAO,CAAC,EACtFgD,EAASU,EAA6B,kBACtC,MAAM,MAAMC,GAAQ,MAAMA,GAAQD,CAA4B,CAAC,QACxDV,EAEb,CAAC,CACH,CAMA,UAAUhD,EAAU,CAAC,EAAG,CACtB,OAAOyD,GAAiB,KAAM,UAAW,WAAwB,CAC/D,IAAIG,EAAKtC,EACT,IAAI0B,EACJ,GAAI,CACF,QAASzB,EAAKsC,GAAc,KAAK,aAAab,EAAQhD,CAAO,CAAC,EAAG8D,EAAIA,EAAK,MAAMH,GAAQpC,EAAG,KAAK,CAAC,EAAG,CAACuC,EAAG,MAAO,CAC7G,IAAMJ,EAA+BI,EAAG,MACxC,MAAMH,GAAQ,MAAAI,GAAOC,GAAiBH,GAAcH,EAA6B,QAAQ,SAAS,CAAC,EAAC,CACtG,CACF,OAASO,EAAO,CACdL,EAAM,CACJ,MAAOK,CACT,CACF,QAAE,CACA,GAAI,CACEH,GAAM,CAACA,EAAG,OAASxC,EAAKC,EAAG,UAAS,MAAMoC,GAAQrC,EAAG,KAAKC,CAAE,CAAC,EACnE,QAAE,CACA,GAAIqC,EAAK,MAAMA,EAAI,KACrB,CACF,CACF,CAAC,CACH,CAuEA,cAAc5D,EAAU,CAAC,EAAG,CAC1B,IAAMkE,EAAU,CAAC,EACblE,EAAQ,aACVkE,EAAQ,KAAK,MAAM,EAEjBlE,EAAQ,gBACVkE,EAAQ,KAAK,SAAS,EAEpBlE,EAAQ,iBACVkE,EAAQ,KAAK,UAAU,EAErBlE,EAAQ,kBACVkE,EAAQ,KAAK,WAAW,EAEtBlE,EAAQ,iBACVkE,EAAQ,KAAK,UAAU,EAErBlE,EAAQ,wBACVkE,EAAQ,KAAK,kBAAkB,EAE7BlE,EAAQ,aACVkE,EAAQ,KAAK,MAAM,EAEjBlE,EAAQ,4BACVkE,EAAQ,KAAK,qBAAqB,EAEhClE,EAAQ,2BACVkE,EAAQ,KAAK,oBAAoB,EAE/BlE,EAAQ,kBACVkE,EAAQ,KAAK,WAAW,EAEtBlE,EAAQ,SAAW,KACrBA,EAAQ,OAAS,QAEnB,IAAMiB,EAAiB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGjB,CAAO,EAAGkE,EAAQ,OAAS,EAAI,CACpF,QAASA,CACX,EAAI,CAAC,CAAC,EAEAC,EAAO,KAAK,UAAUlD,CAAc,EAC1C,MAAO,CAIL,MAAO,CACL,OAAOkD,EAAK,KAAK,CACnB,EAIA,CAAC,OAAO,aAAa,GAAI,CACvB,OAAO,IACT,EAIA,OAAQ,CAACC,EAAW,CAAC,IACZ,KAAK,aAAaA,EAAS,kBAAmB,OAAO,OAAO,CACjE,YAAaA,EAAS,WACxB,EAAGnD,CAAc,CAAC,CAEtB,CACF,CAcA,sBAAsBqC,EAAWN,EAAQhD,EAAU,CAAC,EAAG,CACrD,OAAOyD,GAAiB,KAAM,UAAW,WAAoC,CAC3E,IAAIY,EACJ,GAAMrB,GAAUA,IAAW,OACzB,GACEqB,EAAoC,MAAMV,GAAQ,KAAK,yBAAyBL,EAAWN,EAAQhD,CAAO,CAAC,EAC3GgD,EAASqB,EAAkC,kBAC3C,MAAM,MAAMV,GAAQ,MAAMA,GAAQU,CAAiC,CAAC,QAC7DrB,EAEb,CAAC,CACH,CAOA,qBAAqBM,EAAWtD,EAAU,CAAC,EAAG,CAC5C,OAAOyD,GAAiB,KAAM,UAAW,WAAmC,CAC1E,IAAIa,EAAKhD,EACT,IAAI0B,EACJ,GAAI,CACF,QAASzB,EAAKsC,GAAc,KAAK,sBAAsBP,EAAWN,EAAQhD,CAAO,CAAC,EAAG8D,EAAIA,EAAK,MAAMH,GAAQpC,EAAG,KAAK,CAAC,EAAG,CAACuC,EAAG,MAAO,CAEjI,IAAMS,EADoCT,EAAG,MACK,QAClD,GAAIS,EAAQ,aACV,QAAWC,KAAUD,EAAQ,aAC3B,MAAM,MAAMZ,GAAQ,OAAO,OAAO,CAChC,KAAM,QACR,EAAGa,CAAM,CAAC,EAGd,QAAWC,KAAQF,EAAQ,UACzB,MAAM,MAAMZ,GAAQ,OAAO,OAAO,CAChC,KAAM,MACR,EAAGc,CAAI,CAAC,CAEZ,CACF,OAASC,EAAO,CACdJ,EAAM,CACJ,MAAOI,CACT,CACF,QAAE,CACA,GAAI,CACEZ,GAAM,CAACA,EAAG,OAASxC,EAAKC,EAAG,UAAS,MAAMoC,GAAQrC,EAAG,KAAKC,CAAE,CAAC,EACnE,QAAE,CACA,GAAI+C,EAAK,MAAMA,EAAI,KACrB,CACF,CACF,CAAC,CACH,CA+EA,qBAAqBhB,EAAWtD,EAAU,CAAC,EAAG,CAC5C,GAAIsD,IAAc,GAChB,MAAM,IAAI,WAAW,iDAAiD,EAExE,IAAMY,EAAU,CAAC,EACblE,EAAQ,aACVkE,EAAQ,KAAK,MAAM,EAEjBlE,EAAQ,gBACVkE,EAAQ,KAAK,SAAS,EAEpBlE,EAAQ,iBACVkE,EAAQ,KAAK,UAAU,EAErBlE,EAAQ,kBACVkE,EAAQ,KAAK,WAAW,EAEtBlE,EAAQ,iBACVkE,EAAQ,KAAK,UAAU,EAErBlE,EAAQ,wBACVkE,EAAQ,KAAK,kBAAkB,EAE7BlE,EAAQ,aACVkE,EAAQ,KAAK,MAAM,EAEjBlE,EAAQ,4BACVkE,EAAQ,KAAK,qBAAqB,EAEhClE,EAAQ,2BACVkE,EAAQ,KAAK,oBAAoB,EAE/BlE,EAAQ,kBACVkE,EAAQ,KAAK,WAAW,EAEtBlE,EAAQ,SAAW,KACrBA,EAAQ,OAAS,QAEnB,IAAMiB,EAAiB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGjB,CAAO,EAAGkE,EAAQ,OAAS,EAAI,CACpF,QAASA,CACX,EAAI,CAAC,CAAC,EAEAC,EAAO,KAAK,qBAAqBb,EAAWrC,CAAc,EAChE,MAAO,CAIC,MAAO,QAAAF,EAAA,sBACX,OAAOoD,EAAK,KAAK,CACnB,IAIA,CAAC,OAAO,aAAa,GAAI,CACvB,OAAO,IACT,EAIA,OAAQ,CAACC,EAAW,CAAC,IACZ,KAAK,sBAAsBd,EAAWc,EAAS,kBAAmB,OAAO,OAAO,CACrF,YAAaA,EAAS,WACxB,EAAGnD,CAAc,CAAC,CAEtB,CACF,CAkBM,uBAAuBc,EAAwBK,EAAsB,QAAArB,EAAA,yBAA9C4D,EAAwB3B,EAAQhD,EAAU,CAAC,EAAG,CACzE,GAAM,CACJ,KAAAgB,EACA,eAAAC,CACF,EAAIC,EAAW,yCAA0ClB,CAAO,EAChE,GAAI,CACF,IAAMiC,EAAW,MAAM,KAAK,iBAAiB,YAAY,OAAO,OAAO,CACrE,YAAajC,EAAQ,YACrB,MAAO2E,EACP,OAAA3B,EACA,YAAahD,EAAQ,WACvB,EAAGmB,EAAmCF,CAAc,CAAC,CAAC,EAetD,OAdwB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGgB,CAAQ,EAAG,CACjE,UAAWA,EAAS,UACpB,MAAOA,EAAS,MAAM,IAAIwC,GAAQ,CAChC,IAAInD,EACJ,IAAIsD,EAAW,GACf,QAAMtD,EAAKmD,EAAK,QAAU,MAAQnD,IAAO,OAAS,OAASA,EAAG,WAAW,UAAY,IACnFsD,EAAWH,EAAK,KAAK,WAAW,CAAC,EAAE,OAE9B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAI,EAAG,CAC5C,KAAMrB,GAAOqB,EAAK,IAAI,EACtB,SAAAG,CACF,CAAC,CACH,CAAC,CACH,CAAC,CAEH,OAASxD,EAAG,CACV,MAAAJ,EAAK,UAAU,CACb,KAAMK,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAJ,EAAK,IAAI,CACX,CACF,GAiBA,wBAAwB2D,EAAwB3B,EAAQhD,EAAU,CAAC,EAAG,CACpE,OAAOyD,GAAiB,KAAM,UAAW,WAAsC,CAC7E,IAAIxB,EACJ,GAAMe,GAAUA,IAAW,OACzB,GACEf,EAAW,MAAM0B,GAAQ,KAAK,uBAAuBgB,EAAwB3B,EAAQhD,CAAO,CAAC,EAC7FiC,EAAS,MAAQA,EAAS,OAAS,CAAC,EACpCe,EAASf,EAAS,kBAClB,MAAM,MAAM0B,GAAQ1B,CAAQ,QACrBe,EAEb,CAAC,CACH,CAUA,qBAAqB2B,EAAwB3E,EAAU,CAAC,EAAG,CACzD,OAAOyD,GAAiB,KAAM,UAAW,WAAmC,CAC1E,IAAIoB,EAAKvD,EACT,IAAI0B,EACJ,GAAI,CACF,QAASzB,EAAKsC,GAAc,KAAK,wBAAwBc,EAAwB3B,EAAQhD,CAAO,CAAC,EAAG8D,EAAIA,EAAK,MAAMH,GAAQpC,EAAG,KAAK,CAAC,EAAG,CAACuC,EAAG,MAAO,CAChJ,IAAMS,EAAUT,EAAG,MACnB,MAAMH,GAAQ,MAAAI,GAAOC,GAAiBH,GAAcU,EAAQ,KAAK,CAAC,EAAC,CACrE,CACF,OAASO,EAAO,CACdD,EAAM,CACJ,MAAOC,CACT,CACF,QAAE,CACA,GAAI,CACEhB,GAAM,CAACA,EAAG,OAASxC,EAAKC,EAAG,UAAS,MAAMoC,GAAQrC,EAAG,KAAKC,CAAE,CAAC,EACnE,QAAE,CACA,GAAIsD,EAAK,MAAMA,EAAI,KACrB,CACF,CACF,CAAC,CACH,CA8EA,gBAAgBF,EAAwB3E,EAAU,CAAC,EAAG,CAEpD,IAAM+E,EAAqB,OAAO,OAAO,CAAC,EAAG/E,CAAO,EAC9CmE,EAAO,KAAK,qBAAqBQ,EAAwBI,CAAkB,EACjF,MAAO,CAIL,MAAO,CACL,OAAOZ,EAAK,KAAK,CACnB,EAIA,CAAC,OAAO,aAAa,GAAI,CACvB,OAAO,IACT,EAIA,OAAQ,CAACC,EAAW,CAAC,IACZ,KAAK,wBAAwBO,EAAwBP,EAAS,kBAAmB,OAAO,OAAO,CACpG,YAAaA,EAAS,WACxB,EAAGW,CAAkB,CAAC,CAE1B,CACF,CACA,yBAA0B,CACxB,IAAItE,EACJ,GAAI,CAMF,IAAMuE,EAAYC,GAAW,MAAM,KAAK,GAAG,EAkB3C,GAjBID,EAAU,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,IAAM,OAIxCvE,EAAgBuE,EAAU,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,EACvCE,GAAkBF,CAAS,EAIpCvE,EAAgBuE,EAAU,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,EAIhDvE,EAAgBuE,EAAU,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,EAGlDvE,EAAgB,mBAAmBA,CAAa,EAC5C,CAACA,EACH,MAAM,IAAI,MAAM,oCAAoC,EAEtD,OAAOA,CACT,MAAgB,CACd,MAAM,IAAI,MAAM,4DAA4D,CAC9E,CACF,CAYA,eAAeT,EAAS,CACtB,OAAO,IAAI,QAAQmF,GAAW,CAC5B,GAAI,EAAE,KAAK,sBAAsB9E,IAC/B,MAAM,IAAI,WAAW,uFAAuF,EAE9G,IAAM+E,EAAMC,GAA+B,OAAO,OAAO,CACvD,cAAe,KAAK,cACtB,EAAGrF,CAAO,EAAG,KAAK,UAAU,EAAE,SAAS,EACvCmF,EAAQG,GAAiB,KAAK,IAAKF,CAAG,CAAC,CACzC,CAAC,CACH,CAQA,oBAAqB,CACnB,OAAO,IAAIG,GAAgB,KAAK,IAAK,KAAK,QAAQ,CACpD,CACF,EC9zCO,IAAMC,GAAN,MAAMC,CAAsB,CACjC,aAAc,CAIZ,KAAK,KAAO,GAIZ,KAAK,MAAQ,GAIb,KAAK,OAAS,GAId,KAAK,cAAgB,GAIrB,KAAK,KAAO,GAIZ,KAAK,IAAM,GAIX,KAAK,OAAS,GAId,KAAK,OAAS,GAId,KAAK,QAAU,GAIf,KAAK,IAAM,GAIX,KAAK,OAAS,GAId,KAAK,sBAAwB,GAI7B,KAAK,gBAAkB,EACzB,CAMA,OAAO,MAAMC,EAAa,CACxB,IAAMC,EAAwB,IAAIF,EAClC,QAAWG,KAAKF,EACd,OAAQE,EAAG,CACT,IAAK,IACHD,EAAsB,KAAO,GAC7B,MACF,IAAK,IACHA,EAAsB,MAAQ,GAC9B,MACF,IAAK,IACHA,EAAsB,OAAS,GAC/B,MACF,IAAK,IACHA,EAAsB,cAAgB,GACtC,MACF,IAAK,IACHA,EAAsB,KAAO,GAC7B,MACF,IAAK,IACHA,EAAsB,IAAM,GAC5B,MACF,IAAK,IACHA,EAAsB,OAAS,GAC/B,MACF,IAAK,IACHA,EAAsB,OAAS,GAC/B,MACF,IAAK,IACHA,EAAsB,QAAU,GAChC,MACF,IAAK,IACHA,EAAsB,IAAM,GAC5B,MACF,IAAK,IACHA,EAAsB,OAAS,GAC/B,MACF,IAAK,IACHA,EAAsB,sBAAwB,GAC9C,MACF,IAAK,IACHA,EAAsB,gBAAkB,GACxC,MACF,QACE,MAAM,IAAI,WAAW,iCAAiCC,CAAC,EAAE,CAC7D,CAEF,OAAOD,CACT,CAOA,OAAO,KAAKE,EAAgB,CAC1B,IAAMF,EAAwB,IAAIF,EAClC,OAAII,EAAe,OACjBF,EAAsB,KAAO,IAE3BE,EAAe,QACjBF,EAAsB,MAAQ,IAE5BE,EAAe,SACjBF,EAAsB,OAAS,IAE7BE,EAAe,gBACjBF,EAAsB,cAAgB,IAEpCE,EAAe,SACjBF,EAAsB,OAAS,IAE7BE,EAAe,MACjBF,EAAsB,IAAM,IAE1BE,EAAe,OACjBF,EAAsB,KAAO,IAE3BE,EAAe,MACjBF,EAAsB,IAAM,IAE1BE,EAAe,SACjBF,EAAsB,OAAS,IAE7BE,EAAe,SACjBF,EAAsB,OAAS,IAE7BE,EAAe,UACjBF,EAAsB,QAAU,IAE9BE,EAAe,wBACjBF,EAAsB,sBAAwB,IAE5CE,EAAe,kBACjBF,EAAsB,gBAAkB,IAEnCA,CACT,CAWA,UAAW,CAIT,IAAMD,EAAc,CAAC,EACrB,OAAI,KAAK,MACPA,EAAY,KAAK,GAAG,EAElB,KAAK,OACPA,EAAY,KAAK,GAAG,EAElB,KAAK,QACPA,EAAY,KAAK,GAAG,EAElB,KAAK,eACPA,EAAY,KAAK,GAAG,EAElB,KAAK,QACPA,EAAY,KAAK,GAAG,EAElB,KAAK,KACPA,EAAY,KAAK,GAAG,EAElB,KAAK,MACPA,EAAY,KAAK,GAAG,EAElB,KAAK,KACPA,EAAY,KAAK,GAAG,EAElB,KAAK,QACPA,EAAY,KAAK,GAAG,EAElB,KAAK,QACPA,EAAY,KAAK,GAAG,EAElB,KAAK,SACPA,EAAY,KAAK,GAAG,EAElB,KAAK,uBACPA,EAAY,KAAK,GAAG,EAElB,KAAK,iBACPA,EAAY,KAAK,GAAG,EAEfA,EAAY,KAAK,EAAE,CAC5B,CACF,ECtNO,IAAMI,GAAN,MAAMC,CAAwB,CACnC,aAAc,CAIZ,KAAK,QAAU,GAIf,KAAK,UAAY,GAIjB,KAAK,OAAS,EAChB,CAOA,OAAO,MAAMC,EAAe,CAC1B,IAAMC,EAA0B,IAAIF,EACpC,QAAWG,KAAKF,EACd,OAAQE,EAAG,CACT,IAAK,IACHD,EAAwB,QAAU,GAClC,MACF,IAAK,IACHA,EAAwB,UAAY,GACpC,MACF,IAAK,IACHA,EAAwB,OAAS,GACjC,MACF,QACE,MAAM,IAAI,WAAW,0BAA0BC,CAAC,EAAE,CACtD,CAEF,OAAOD,CACT,CAOA,UAAW,CACT,IAAMD,EAAgB,CAAC,EACvB,OAAI,KAAK,SACPA,EAAc,KAAK,GAAG,EAEpB,KAAK,WACPA,EAAc,KAAK,GAAG,EAEpB,KAAK,QACPA,EAAc,KAAK,GAAG,EAEjBA,EAAc,KAAK,EAAE,CAC9B,CACF,EC3DO,IAAMG,GAAN,MAAMC,CAAmB,CAC9B,aAAc,CAIZ,KAAK,KAAO,GAIZ,KAAK,KAAO,GAIZ,KAAK,MAAQ,GAIb,KAAK,MAAQ,EACf,CAOA,OAAO,MAAMC,EAAU,CACrB,IAAMC,EAAqB,IAAIF,EAC/B,QAAWG,KAAKF,EACd,OAAQE,EAAG,CACT,IAAK,IACHD,EAAmB,KAAO,GAC1B,MACF,IAAK,IACHA,EAAmB,KAAO,GAC1B,MACF,IAAK,IACHA,EAAmB,MAAQ,GAC3B,MACF,IAAK,IACHA,EAAmB,MAAQ,GAC3B,MACF,QACE,MAAM,IAAI,WAAW,8BAA8BC,CAAC,EAAE,CAC1D,CAEF,OAAOD,CACT,CAKA,UAAW,CACT,IAAMD,EAAW,CAAC,EAClB,OAAI,KAAK,MACPA,EAAS,KAAK,GAAG,EAEf,KAAK,OACPA,EAAS,KAAK,GAAG,EAEf,KAAK,OACPA,EAAS,KAAK,GAAG,EAEf,KAAK,MACPA,EAAS,KAAK,GAAG,EAEZA,EAAS,KAAK,EAAE,CACzB,CACF,EC1DO,SAASG,GAAkCC,EAA2BC,EAAqB,CAChG,IAAMC,EAAUF,EAA0B,QAAUA,EAA0B,QAAUG,GACxF,GAAIH,EAA0B,aAAeA,EAA0B,YAAY,uBAAyBE,EAAU,aACpH,MAAM,WAAW,iEAAiE,EAEpF,GAAIF,EAA0B,aAAeA,EAA0B,YAAY,eAAiBE,EAAU,aAC5G,MAAM,WAAW,iEAAiE,EAEpF,GAAIF,EAA0B,aAAeA,EAA0B,YAAY,iBAAmBE,EAAU,aAC9G,MAAM,WAAW,iEAAiE,EAEpF,GAAIF,EAA0B,aAAeA,EAA0B,YAAY,KAAOE,EAAU,aAClG,MAAM,WAAW,iEAAiE,EAEpF,GAAIF,EAA0B,aAAeA,EAA0B,YAAY,QAAUE,EAAU,aACrG,MAAM,WAAW,iEAAiE,EAEpF,GAAIF,EAA0B,iBAAmBE,EAAU,aACzD,MAAM,WAAW,2EAA2E,EAE9F,IAAME,EAAoBC,GAAsB,MAAML,EAA0B,YAAY,SAAS,CAAC,EAChGM,EAAiBC,GAAmB,MAAMP,EAA0B,QAAQ,EAAE,SAAS,EACvFQ,EAAsBC,GAAwB,MAAMT,EAA0B,aAAa,EAAE,SAAS,EACxGU,EACAR,GAAW,aACbQ,EAAe,CAACT,EAAoB,YAAaG,EAAmBE,EAAgBE,EAAqBR,EAA0B,SAAWW,GAAqBX,EAA0B,SAAU,EAAK,EAAI,GAAIW,GAAqBX,EAA0B,UAAW,EAAK,EAAGA,EAA0B,QAAUY,GAAgBZ,EAA0B,OAAO,EAAI,GAAIA,EAA0B,SAAWA,EAA0B,SAAW,GAAIE,EAASF,EAA0B,gBAAkBA,EAA0B,gBAAkB,GAAI,EACtiB,EAAE,KAAK;AAAA,CAAI,EAEXU,EAAe,CAACT,EAAoB,YAAaG,EAAmBE,EAAgBE,EAAqBR,EAA0B,SAAWW,GAAqBX,EAA0B,SAAU,EAAK,EAAI,GAAIW,GAAqBX,EAA0B,UAAW,EAAK,EAAGA,EAA0B,QAAUY,GAAgBZ,EAA0B,OAAO,EAAI,GAAIA,EAA0B,SAAWA,EAA0B,SAAW,GAAIE,EAAS,EAC1c,EAAE,KAAK;AAAA,CAAI,EAEb,IAAMW,EAAYZ,EAAoB,kBAAkBS,CAAY,EACpE,OAAO,IAAII,GAAmBZ,EAASW,EAAWT,EAAkB,SAAS,EAAGE,EAAgBE,EAAqBR,EAA0B,SAAUA,EAA0B,SAAUA,EAA0B,UAAWA,EAA0B,QAAS,OAAW,OAAW,OAAW,OAAW,OAAW,OAAW,OAAW,OAAW,OAAW,OAAWA,EAA0B,eAAe,CAC9Z,CC9BO,IAAMe,GAAN,MAAMC,UAA0BC,EAAc,CACnD,YAAYC,EAAKC,EAGjBC,EAAS,CACP,IAAIC,EACAC,GAAeH,CAAoB,EACrCE,EAAWF,EACFI,IAAUJ,aAAgCK,IAA8BL,aAAgCM,IAAuBC,GAAkBP,CAAoB,EAC9KE,EAAWM,GAAYR,EAAsBC,CAAO,EAGpDC,EAAWM,GAAY,IAAIF,GAAuBL,CAAO,EAE3D,MAAMF,EAAKG,CAAQ,EACnB,KAAK,eAAiB,IAAIO,GAAQ,KAAK,oBAAoB,CAC7D,CAaA,OAAO,qBAAqBC,EAG5BT,EAAS,CACPA,EAAUA,GAAW,CAAC,EACtB,IAAMU,EAAiBC,GAA6BF,CAAgB,EACpE,GAAIC,EAAe,OAAS,oBAC1B,GAAIP,GAAQ,CACV,IAAMS,EAAsB,IAAIR,GAA2BM,EAAe,YAAaA,EAAe,UAAU,EAC3GV,EAAQ,eACXA,EAAQ,cAAuCU,EAAe,SAAvC,SAEzB,IAAMT,EAAWM,GAAYK,EAAqBZ,CAAO,EACzD,OAAO,IAAIJ,EAAkBc,EAAe,IAAKT,CAAQ,CAC3D,KACE,OAAM,IAAI,MAAM,oEAAoE,UAE7ES,EAAe,OAAS,gBAAiB,CAClD,IAAMT,EAAWM,GAAY,IAAIF,GAAuBL,CAAO,EAC/D,OAAO,IAAIJ,EAAkBc,EAAe,IAAM,IAAMA,EAAe,WAAYT,CAAQ,CAC7F,KACE,OAAM,IAAI,MAAM,0FAA0F,CAE9G,CAaA,mBAAmBY,EAAe,CAChC,OAAO,IAAIC,GAAgBC,GAAgB,KAAK,IAAK,mBAAmBF,CAAa,CAAC,EAAG,KAAK,QAAQ,CACxG,CAQM,gBAAgBG,EAA6B,QAAAC,EAAA,yBAA7BJ,EAAeb,EAAU,CAAC,EAAG,CACjD,GAAM,CACJ,KAAAkB,EACA,eAAAC,CACF,EAAIC,EAAW,oCAAqCpB,CAAO,EAC3D,GAAI,CACF,IAAMqB,EAAkB,KAAK,mBAAmBR,CAAa,EACvDS,EAA0B,MAAMD,EAAgB,OAAOF,CAAc,EAC3E,MAAO,CACL,gBAAAE,EACA,wBAAAC,CACF,CACF,OAASC,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAQM,gBAAgBF,EAA6B,QAAAC,EAAA,yBAA7BJ,EAAeb,EAAU,CAAC,EAAG,CACjD,GAAM,CACJ,KAAAkB,EACA,eAAAC,CACF,EAAIC,EAAW,oCAAqCpB,CAAO,EAC3D,GAAI,CAEF,OAAO,MADiB,KAAK,mBAAmBa,CAAa,EAChC,OAAOM,CAAc,CACpD,OAASI,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAUM,kBAAkBF,EAAsBS,EAAuC,QAAAR,EAAA,yBAA7DS,EAAsBC,EAAyB3B,EAAU,CAAC,EAAG,CACnF,GAAM,CACJ,KAAAkB,EACA,eAAAC,CACF,EAAIC,EAAW,sCAAuCpB,CAAO,EAC7D,GAAI,CACF,IAAMqB,EAAkB,KAAK,mBAAmBrB,EAAQ,0BAA4B0B,CAAoB,EAGlGE,EAA4B,MADT,IAAIC,GAAUR,EAAgB,oBAAuB,EACrB,QAAQ,OAAO,OAAO,CAC7E,qBAAAK,EACA,wBAAAC,CACF,EAAGR,CAAc,CAAC,EAClB,MAAO,CACL,gBAAAE,EACA,0BAAAO,CACF,CACF,OAASL,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAUM,gBAAgBF,EAAqBS,EAAwC,QAAAR,EAAA,yBAA7Da,EAAqBC,EAA0B/B,EAAU,CAAC,EAAG,CACjF,IAAIgC,EACJ,GAAM,CACJ,KAAAd,EACA,eAAAC,CACF,EAAIC,EAAW,oCAAqCpB,CAAO,EAC3D,GAAI,CACF,IAAMqB,EAAkB,KAAK,mBAAmBU,CAAwB,EAGlEE,EAA0B,MADP,IAAIJ,GAAUR,EAAgB,oBAAuB,EACvB,OAAOS,EAAqB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGX,CAAc,EAAG,CAClI,eAAgBa,EAAKhC,EAAQ,mBAAqB,MAAQgC,IAAO,OAAS,OAASA,EAAG,OACxF,CAAC,CAAC,EACF,MAAO,CACL,gBAAAX,EACA,wBAAAY,CACF,CACF,OAASV,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GASM,eAA4B,QAAAD,EAAA,yBAAdjB,EAAU,CAAC,EAAG,CAChC,GAAM,CACJ,KAAAkB,EACA,eAAAC,CACF,EAAIC,EAAW,kCAAmCpB,CAAO,EACzD,GAAI,CACF,OAAO,MAAM,KAAK,eAAe,cAAc,OAAO,OAAO,CAC3D,YAAaA,EAAQ,WACvB,EAAGkC,EAAmCf,CAAc,CAAC,CAAC,CACxD,OAASI,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAUM,cAAcF,EAA0B,QAAAC,EAAA,yBAA1BkB,EAAYnC,EAAU,CAAC,EAAG,CAC5C,GAAM,CACJ,KAAAkB,EACA,eAAAC,CACF,EAAIC,EAAW,kCAAmCpB,CAAO,EACzD,GAAI,CACF,OAAO,MAAM,KAAK,eAAe,cAAcmC,EAAY,OAAO,OAAO,CACvE,YAAanC,EAAQ,WACvB,EAAGkC,EAAmCf,CAAc,CAAC,CAAC,CACxD,OAASI,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAUM,eAA4B,QAAAD,EAAA,yBAAdjB,EAAU,CAAC,EAAG,CAChC,GAAM,CACJ,KAAAkB,EACA,eAAAC,CACF,EAAIC,EAAW,kCAAmCpB,CAAO,EACzD,GAAI,CACF,OAAO,MAAM,KAAK,eAAe,cAAc,OAAO,OAAO,CAC3D,YAAaA,EAAQ,WACvB,EAAGkC,EAAmCf,CAAc,CAAC,CAAC,CACxD,OAASI,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAWM,gBAA6B,QAAAD,EAAA,yBAAdjB,EAAU,CAAC,EAAG,CACjC,GAAM,CACJ,KAAAkB,EACA,eAAAC,CACF,EAAIC,EAAW,mCAAoCpB,CAAO,EAC1D,GAAI,CACF,OAAO,MAAM,KAAK,eAAe,eAAe,OAAO,OAAO,CAC5D,YAAaA,EAAQ,WACvB,EAAGkC,EAAmCf,CAAc,CAAC,CAAC,CACxD,OAASI,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAeM,sBAAsBF,EAAsB,QAAAC,EAAA,yBAAtBmB,EAAQpC,EAAU,CAAC,EAAG,CAChD,GAAM,CACJ,KAAAkB,EACA,eAAAC,CACF,EAAIC,EAAW,0CAA2CpB,CAAO,EACjE,GAAI,CACF,OAAO,MAAM,KAAK,eAAe,sBAAsB,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAC/F,YAAaA,EAAQ,YACrB,OAAAoC,CACF,EAAGpC,CAAO,EAAG,CACX,QAAS,OAAOA,EAAQ,SAAY,SAAW,CAACA,EAAQ,OAAO,EAAIA,EAAQ,OAC7E,CAAC,EAAGkC,EAAmCf,CAAc,CAAC,CAAC,CACzD,OAASI,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAmBM,uBAAuBF,EAAwBS,EAAsB,QAAAR,EAAA,yBAA9CoB,EAAwBD,EAAQpC,EAAU,CAAC,EAAG,CACzE,GAAM,CACJ,KAAAkB,EACA,eAAAC,CACF,EAAIC,EAAW,2CAA4CpB,CAAO,EAClE,GAAI,CACF,IAAMsC,EAAW,MAAM,KAAK,eAAe,YAAY,OAAO,OAAO,CACnE,YAAatC,EAAQ,YACrB,MAAOqC,EACP,OAAAD,EACA,YAAapC,EAAQ,WACvB,EAAGkC,EAAmCf,CAAc,CAAC,CAAC,EAetD,OAdwB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGmB,CAAQ,EAAG,CACjE,UAAWA,EAAS,UACpB,MAAOA,EAAS,MAAM,IAAIC,GAAQ,CAChC,IAAIP,EACJ,IAAIQ,EAAW,GACf,QAAMR,EAAKO,EAAK,QAAU,MAAQP,IAAO,OAAS,OAASA,EAAG,WAAW,UAAY,IACnFQ,EAAWD,EAAK,KAAK,WAAW,CAAC,EAAE,OAE9B,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGA,CAAI,EAAG,CAC5C,KAAME,GAAOF,EAAK,IAAI,EACtB,SAAAC,CACF,CAAC,CACH,CAAC,CACH,CAAC,CAEH,OAASjB,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAiBA,wBAAwBmB,EAAwBD,EAAQpC,EAAU,CAAC,EAAG,CACpE,OAAO0C,GAAiB,KAAM,UAAW,WAAsC,CAC7E,IAAIJ,EACJ,GAAMF,GAAUA,IAAW,OACzB,GACEE,EAAW,MAAMK,GAAQ,KAAK,uBAAuBN,EAAwBD,EAAQpC,CAAO,CAAC,EAC7FsC,EAAS,MAAQA,EAAS,OAAS,CAAC,EACpCF,EAASE,EAAS,kBAClB,MAAM,MAAMK,GAAQL,CAAQ,QACrBF,EAEb,CAAC,CACH,CAUA,qBAAqBC,EAAwBrC,EAAU,CAAC,EAAG,CACzD,OAAO0C,GAAiB,KAAM,UAAW,WAAmC,CAC1E,IAAIE,EAAKZ,EACT,IAAII,EACJ,GAAI,CACF,QAASS,EAAKC,GAAc,KAAK,wBAAwBT,EAAwBD,EAAQpC,CAAO,CAAC,EAAG+C,EAAIA,EAAK,MAAMJ,GAAQE,EAAG,KAAK,CAAC,EAAG,CAACE,EAAG,MAAO,CAChJ,IAAMC,EAAUD,EAAG,MACnB,MAAMJ,GAAQ,MAAAM,GAAOC,GAAiBJ,GAAcE,EAAQ,KAAK,CAAC,EAAC,CACrE,CACF,OAASG,EAAO,CACdP,EAAM,CACJ,MAAOO,CACT,CACF,QAAE,CACA,GAAI,CACEJ,GAAM,CAACA,EAAG,OAASf,EAAKa,EAAG,UAAS,MAAMF,GAAQX,EAAG,KAAKa,CAAE,CAAC,EACnE,QAAE,CACA,GAAID,EAAK,MAAMA,EAAI,KACrB,CACF,CACF,CAAC,CACH,CAgFA,gBAAgBP,EAAwBrC,EAAU,CAAC,EAAG,CAEpD,IAAMoD,EAAqB,OAAO,OAAO,CAAC,EAAGpD,CAAO,EAC9CqD,EAAO,KAAK,qBAAqBhB,EAAwBe,CAAkB,EACjF,MAAO,CAIL,MAAO,CACL,OAAOC,EAAK,KAAK,CACnB,EAIA,CAAC,OAAO,aAAa,GAAI,CACvB,OAAO,IACT,EAIA,OAAQ,CAACC,EAAW,CAAC,IACZ,KAAK,wBAAwBjB,EAAwBiB,EAAS,kBAAmB,OAAO,OAAO,CACpG,YAAaA,EAAS,WACxB,EAAGF,CAAkB,CAAC,CAE1B,CACF,CAaA,aAAahB,EAAQpC,EAAU,CAAC,EAAG,CACjC,OAAO0C,GAAiB,KAAM,UAAW,WAA2B,CAClE,IAAIa,EACJ,GAAMnB,GAAUA,IAAW,OACzB,GACEmB,EAAgC,MAAMZ,GAAQ,KAAK,sBAAsBP,EAAQpC,CAAO,CAAC,EACzFuD,EAA8B,eAAiBA,EAA8B,gBAAkB,CAAC,EAChGnB,EAASmB,EAA8B,kBACvC,MAAM,MAAMZ,GAAQ,MAAMA,GAAQY,CAA6B,CAAC,QACzDnB,EAEb,CAAC,CACH,CAMA,UAAUpC,EAAU,CAAC,EAAG,CACtB,OAAO0C,GAAiB,KAAM,UAAW,WAAwB,CAC/D,IAAIc,EAAKxB,EACT,IAAII,EACJ,GAAI,CACF,QAASS,EAAKC,GAAc,KAAK,aAAaV,EAAQpC,CAAO,CAAC,EAAG+C,EAAIA,EAAK,MAAMJ,GAAQE,EAAG,KAAK,CAAC,EAAG,CAACE,EAAG,MAAO,CAC7G,IAAMC,EAAUD,EAAG,MACnB,MAAMJ,GAAQ,MAAAM,GAAOC,GAAiBJ,GAAcE,EAAQ,cAAc,CAAC,EAAC,CAC9E,CACF,OAASS,EAAO,CACdD,EAAM,CACJ,MAAOC,CACT,CACF,QAAE,CACA,GAAI,CACEV,GAAM,CAACA,EAAG,OAASf,EAAKa,EAAG,UAAS,MAAMF,GAAQX,EAAG,KAAKa,CAAE,CAAC,EACnE,QAAE,CACA,GAAIW,EAAK,MAAMA,EAAI,KACrB,CACF,CACF,CAAC,CACH,CA2EA,eAAexD,EAAU,CAAC,EAAG,CACvBA,EAAQ,SAAW,KACrBA,EAAQ,OAAS,QAEnB,IAAM0D,EAAU,CAAC,EACb1D,EAAQ,gBACV0D,EAAQ,KAAK,SAAS,EAEpB1D,EAAQ,iBACV0D,EAAQ,KAAK,UAAU,EAErB1D,EAAQ,eACV0D,EAAQ,KAAK,QAAQ,EAGvB,IAAMN,EAAqB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGpD,CAAO,EAAG0D,EAAQ,OAAS,EAAI,CACxF,QAAAA,CACF,EAAI,CAAC,CAAC,EACAL,EAAO,KAAK,UAAUD,CAAkB,EAC9C,MAAO,CAIL,MAAO,CACL,OAAOC,EAAK,KAAK,CACnB,EAIA,CAAC,OAAO,aAAa,GAAI,CACvB,OAAO,IACT,EAIA,OAAQ,CAACC,EAAW,CAAC,IACZ,KAAK,aAAaA,EAAS,kBAAmB,OAAO,OAAO,CACjE,YAAaA,EAAS,WACxB,EAAGF,CAAkB,CAAC,CAE1B,CACF,CAYM,qBAAqBpC,EAAUS,EAAyB,QAAAR,EAAA,yBAAnC0C,EAAUC,EAAW5D,EAAU,CAAC,EAAG,CAC5D,GAAM,CACJ,KAAAkB,EACA,eAAAC,CACF,EAAIC,EAAW,yCAA0CpB,CAAO,EAChE,GAAI,CACF,IAAMsC,EAAW,MAAM,KAAK,eAAe,qBAAqB,CAC9D,SAAUuB,GAAqBF,EAAU,EAAK,EAC9C,UAAWE,GAAqBD,EAAW,EAAK,CAClD,EAAG,OAAO,OAAO,CACf,YAAa5D,EAAQ,WACvB,EAAGkC,EAAmCf,CAAc,CAAC,CAAC,EAChD2C,EAAoB,CACxB,eAAgBxB,EAAS,eACzB,eAAgBA,EAAS,eACzB,eAAgB,IAAI,KAAKA,EAAS,cAAc,EAChD,gBAAiB,IAAI,KAAKA,EAAS,eAAe,EAClD,cAAeA,EAAS,cACxB,cAAeA,EAAS,cACxB,MAAOA,EAAS,KAClB,EASA,OARY,OAAO,OAAO,CACxB,UAAWA,EAAS,UACpB,UAAWA,EAAS,UACpB,gBAAiBA,EAAS,gBAC1B,QAASA,EAAS,QAClB,KAAMA,EAAS,KACf,UAAWA,EAAS,SACtB,EAAGwB,CAAiB,CAEtB,OAASvC,EAAG,CACV,MAAAL,EAAK,UAAU,CACb,KAAMM,EAAe,MACrB,QAASD,EAAE,OACb,CAAC,EACKA,CACR,QAAE,CACAL,EAAK,IAAI,CACX,CACF,GAQA,oBAAqB,CACnB,OAAO,IAAI6C,GAAgB,KAAK,IAAK,KAAK,QAAQ,CACpD,CAeA,sBAAsBH,EAAWI,EAAcC,GAAsB,MAAM,GAAG,EAAGC,EAAgB,MAAOlE,EAAU,CAAC,EAAG,CACpH,GAAI,EAAE,KAAK,sBAAsBI,IAC/B,MAAM,WAAW,+FAA+F,EAElH,GAAIwD,IAAc,OAAW,CAC3B,IAAMO,EAAM,IAAI,KAChBP,EAAY,IAAI,KAAKO,EAAI,QAAQ,EAAI,KAAO,GAAI,CAClD,CACA,IAAMC,EAAMC,GAAkC,OAAO,OAAO,CAC1D,YAAAL,EACA,UAAAJ,EACA,cAAAM,EACA,SAAUI,GAAmB,MAAM,GAAG,EAAE,SAAS,CACnD,EAAGtE,CAAO,EAAG,KAAK,UAAU,EAAE,SAAS,EACvC,OAAOuE,GAAiB,KAAK,IAAKH,CAAG,CACvC,CACF,EC70BA,WAAY,KAAK,WAAa,OAAO,eAAe,KAAK,UAAW,SAAU,CAC5E,OAAQ,CACN,OAAO,IAAI,SAAS,IAAI,EAAE,IAC5B,CACF,CAAC,EAAG,iBAAkB,SAAS,WAAa,OAAO,eAAe,SAAS,UAAW,eAAgB,CACpG,MAAMI,EAAGC,EAAGC,EAAG,CACb,IAAMC,EAAI,OAAO,YAAcF,CAAC,EAC9B,EAAI,OAAOA,GAAK,GAAG,EACrB,KAAK,UAAUD,GAAKE,EAAI,EAAI,GAAIC,EAAGD,CAAC,EAAG,KAAK,UAAUF,GAAKE,EAAI,EAAI,GAAI,EAAGA,CAAC,CAC7E,CACF,CAAC,EACD,IAAIF,GAAIA,GAAK,IAAI,SAAS,IAAI,YAAYA,CAAC,CAAC,EAC1CC,GAAID,GAAK,IAAI,WAAWA,EAAE,QAAUA,CAAC,EACrCE,GAAIF,GAAK,IAAI,YAAY,EAAE,OAAO,OAAOA,CAAC,CAAC,EAC3CG,GAAIH,GAAK,KAAK,IAAI,WAAY,OAAOA,CAAC,CAAC,EACvCI,GAAIJ,GAAK,KAAK,IAAI,MAAO,OAAOA,CAAC,CAAC,EACpC,SAASK,GAAEL,EAAGG,EAAG,CACf,GAAeA,IAAX,QAAgBA,aAAa,OAASA,EAAI,IAAI,KAAKA,CAAC,GAAIH,aAAa,KAAM,MAAO,CACpF,OAAQ,EACR,EAAGG,GAAK,IAAI,KAAKH,EAAE,YAAY,EAC/B,EAAGA,EAAE,OAAO,CACd,EACA,GAAIA,aAAa,SAAU,MAAO,CAChC,OAAQ,EACR,EAAGG,GAAK,IAAI,KAAKH,EAAE,QAAQ,IAAI,eAAe,GAAK,KAAK,IAAI,CAAC,EAC7D,EAAGA,EAAE,IACP,EACA,GAAeG,IAAX,OAAcA,EAAI,IAAI,aAAgB,MAAMA,CAAC,EAAG,MAAM,IAAI,MAAM,4BAA4B,EAChG,GAAeH,IAAX,OAAc,MAAO,CACvB,OAAQ,EACR,EAAGG,CACL,EACA,GAAgB,OAAOH,GAAnB,SAAsB,MAAO,CAC/B,OAAQ,EACR,EAAGG,EACH,EAAGD,GAAEF,CAAC,CACR,EACA,GAAIA,aAAa,KAAM,MAAO,CAC5B,OAAQ,EACR,EAAGG,EACH,EAAGH,EAAE,OAAO,CACd,EACA,GAAIA,aAAa,YAAcA,aAAa,eAAgB,MAAO,CACjE,OAAQ,EACR,EAAGG,EACH,EAAGH,CACL,EACA,GAAIA,aAAa,aAAe,YAAY,OAAOA,CAAC,EAAG,MAAO,CAC5D,OAAQ,EACR,EAAGG,EACH,EAAGF,GAAED,CAAC,CACR,EACA,GAAI,OAAO,iBAAiBA,EAAG,MAAO,CACpC,OAAQ,EACR,EAAGG,EACH,EAAGG,GAAEN,EAAE,OAAO,aAAa,EAAE,CAAC,CAChC,EACA,MAAM,IAAI,UAAU,2BAA2B,CACjD,CACA,SAASM,GAAEN,EAAGC,EAAID,EAAG,CACnB,OAAO,IAAI,eAAe,CAClB,KAAKC,EAAG,QAAAM,EAAA,sBACZ,IAAIL,EAAI,EACR,KAAOD,EAAE,YAAcC,GAAI,CACzB,IAAMC,EAAI,MAAMH,EAAE,KAAK,EACvB,GAAI,CAACG,EAAE,MAAO,CACZF,EAAE,MAAM,EACR,KACF,CACA,CACE,IAAMD,EAAIQ,GAAEL,EAAE,KAAK,EACnBF,EAAE,QAAQD,CAAC,EAAGE,GAAKF,EAAE,UACvB,CACF,CACF,IACA,OAAOA,EAAG,CACRC,EAAE,QAAQD,CAAC,CACb,CACF,CAAC,CACH,CACA,SAASQ,GAAER,EAAG,CACZ,OAAmB,OAAOA,GAAnB,SAAuBE,GAAEF,CAAC,EAAIA,aAAa,WAAaA,EAAIC,GAAED,CAAC,CACxE,CACA,SAASS,GAAET,EAAGG,EAAGC,EAAG,CAClB,GAAI,CAACC,EAAGC,CAAC,EAAI,SAAUN,EAAG,CACxB,OAAOA,EAAIA,aAAa,WAAa,CAACA,EAAG,CAAC,EAAI,YAAY,OAAOA,CAAC,GAAKA,aAAa,YAAc,CAACC,GAAED,CAAC,EAAG,CAAC,EAAI,CAACE,GAAEF,CAAC,EAAG,CAAC,EAAI,CAAC,OAAQ,CAAC,CACtI,EAAEG,CAAC,EACH,GAAIH,aAAa,KAAM,MAAO,CAC5B,EAAGU,GAAEL,GAAKH,GAAEF,EAAE,IAAI,CAAC,EACnB,EAAG,OAAOA,EAAE,IAAI,EAChB,EAAGM,CACL,EACA,GAAIN,aAAa,SAAU,CACzB,IAAMC,EAAID,EAAE,QAAQ,IAAI,qBAAqB,EAC3CG,EAAIF,GAAKA,EAAE,MAAM,mCAAmC,EACpDO,EAAIL,GAAKA,EAAE,CAAC,GAAKH,EAAE,KAAO,IAAI,IAAIA,EAAE,GAAG,EAAE,SAAS,MAAM,GAAG,EAAE,SAAS,OAAO,EAC7ES,EAAID,GAAK,mBAAmBA,CAAC,EAC7B,EAAIJ,GAAK,CAACJ,EAAE,QAAQ,IAAI,gBAAgB,EAC1C,MAAO,CACL,EAAGU,GAAEL,GAAKH,GAAEO,CAAC,CAAC,EACd,EAAG,OAAO,CAAC,EACX,EAAGH,CACL,CACF,CACA,OAAOD,EAAIK,GAAEL,EAAcL,IAAX,QAA2BI,IAAX,MAAY,EAAe,OAAOJ,GAAnB,SAAuB,CACpE,EAAGK,EACH,EAAG,OAAOH,GAAEF,CAAC,EAAE,MAAM,EACrB,EAAGM,CACL,EAAIN,aAAa,KAAO,CACtB,EAAGK,EACH,EAAG,OAAOL,EAAE,IAAI,EAChB,EAAGM,CACL,EAAIN,aAAa,aAAe,YAAY,OAAOA,CAAC,EAAI,CACtD,EAAGK,EACH,EAAG,OAAOL,EAAE,UAAU,EACtB,EAAGM,CACL,EAAI,CACF,EAAGD,EACH,EAAGM,GAAEX,EAAGI,CAAC,EACT,EAAGE,CACL,CACF,CACA,SAASK,GAAEX,EAAGC,EAAG,CACf,OAAOA,EAAI,GAAK,OAAOA,CAAC,EAAID,EAAI,OAAS,EAC3C,CACA,SAASU,GAAEV,EAAGC,EAAI,EAAG,CACnB,GAAI,CAACD,GAAKA,EAAE,MAAMY,GAAYA,IAAP,EAAQ,EAAG,MAAM,IAAI,MAAM,4BAA4B,EAC9E,GAAIX,EAAG,KAAcD,EAAEA,EAAE,OAAS,CAAC,IAArB,IAAyBA,EAAIA,EAAE,SAAS,EAAG,EAAE,OAAcA,EAAEA,EAAE,OAAS,CAAC,IAArB,KAA2BA,EAAI,IAAI,WAAW,CAAC,GAAGA,EAAG,EAAE,CAAC,GAC1H,OAAOA,CACT,CACA,IAAIa,GAAI,IAAI,YAAY,GAAG,EAC3B,QAASb,EAAI,EAAGA,EAAI,IAAK,EAAEA,EAAG,CAC5B,IAAIC,EAAID,EACR,QAASA,EAAI,EAAGA,EAAI,EAAG,EAAEA,EAAGC,EAAIA,IAAM,GAAK,EAAIA,GAAK,YACpDY,GAAEb,CAAC,EAAIC,CACT,CACA,SAASa,GAAEd,EAAGC,EAAI,EAAG,CACnBA,GAAK,GACL,QAASC,EAAI,EAAGC,EAAIH,EAAE,OAAQE,EAAIC,EAAGD,IAAKD,EAAIA,IAAM,EAAIY,GAAE,IAAMZ,EAAID,EAAEE,CAAC,CAAC,EACxE,OAAQ,GAAKD,KAAO,CACtB,CACA,SAASc,GAAEf,EAAGC,EAAGC,EAAI,EAAG,CACtB,IAAMC,EAAIH,EAAE,WAAW,GAAK,EAAIA,EAAE,WAAW,GAAK,EAAIA,EAAE,SAAS,GAAK,GACpE,EAAIA,EAAE,QAAQ,EAAIA,EAAE,SAAS,EAAI,GAAK,EAAIA,EAAE,YAAY,EAAI,MAAQ,EACtEC,EAAE,UAAUC,EAAGC,EAAG,CAAC,EAAGF,EAAE,UAAUC,EAAI,EAAG,EAAG,CAAC,CAC/C,CACA,SAASc,GAAE,CACT,EAAGhB,EACH,EAAGC,CACL,EAAGC,EAAG,CACJ,MAAO,IAAK,CAACD,IAAMC,GAAK,SAAUF,EAAG,CACnC,GAAI,CACFiB,GAAE,OAAOjB,CAAC,CACZ,MAAQ,CACN,MAAO,EACT,CACA,MAAO,EACT,EAAEA,CAAC,GACL,CACA,IAAIiB,GAAI,IAAI,YAAY,OAAQ,CAC9B,MAAO,CACT,CAAC,EACD,SAASC,GAAEhB,EAAGC,EAAI,EAAG,CACnB,IAAMC,EAAIJ,GAAE,EAAE,EACd,OAAOI,EAAE,UAAU,EAAG,UAAU,EAAGA,EAAE,UAAU,EAAG,UAAYD,CAAC,EAAGY,GAAEb,EAAE,EAAGE,EAAG,EAAE,EAAGA,EAAE,UAAU,GAAIF,EAAE,EAAE,OAAQ,CAAC,EAAGD,GAAEG,CAAC,CACtH,CACA,SAAgBe,GAAEnB,EAAG,QAAAoB,GAAA,sBACnB,GAAI,CACF,EAAGnB,CACL,EAAID,EACJ,GAAI,SAAUC,IAAMA,EAAI,UAAAoB,GAAMpB,IAAIA,aAAa,WAAY,MAAMA,EAAGD,EAAE,EAAIc,GAAEb,EAAG,CAAC,EAAGD,EAAE,EAAI,OAAOC,EAAE,MAAM,MAAO,CAC7GD,EAAE,EAAI,GACN,IAAME,EAAID,EAAE,UAAU,EACtB,OAAS,CACP,GAAM,CACJ,MAAOA,EACP,KAAME,CACR,EAAI,UAAAkB,GAAMnB,EAAE,KAAK,GACjB,GAAIC,EAAG,MACPH,EAAE,EAAIc,GAAEb,EAAGD,EAAE,CAAC,EAAGA,EAAE,GAAK,OAAOC,EAAE,MAAM,EAAG,MAAMA,CAClD,CACF,CACF,GACA,SAASqB,GAAEpB,EAAGE,EAAG,CACf,IAAMC,EAAIL,GAAE,IAAMI,EAAI,EAAI,EAAE,EAC5B,OAAOC,EAAE,UAAU,EAAG,UAAU,EAAGA,EAAE,UAAU,EAAGH,EAAE,OAASA,EAAE,EAAI,EAAG,CAAC,EAAGE,GAAKC,EAAE,aAAa,EAAGH,EAAE,EAAG,CAAC,EAAGG,EAAE,aAAa,GAAIH,EAAE,EAAG,CAAC,IAAMG,EAAE,UAAU,EAAGF,GAAED,EAAE,CAAC,EAAG,CAAC,EAAGG,EAAE,UAAU,GAAIF,GAAED,EAAE,CAAC,EAAG,CAAC,GAAID,GAAEI,CAAC,CACtM,CACA,SAASkB,GAAErB,EAAGE,EAAGC,EAAI,EAAGC,EAAI,EAAG,CAC7B,IAAME,EAAIR,GAAE,EAAE,EACd,OAAOQ,EAAE,UAAU,EAAG,UAAU,EAAGA,EAAE,UAAU,EAAG,SAAS,EAAGA,EAAE,UAAU,EAAG,KAAOH,CAAC,EAAGU,GAAEb,EAAE,EAAGM,EAAG,EAAE,EAAGA,EAAE,UAAU,GAAIN,EAAE,OAASA,EAAE,EAAI,EAAG,CAAC,EAAGM,EAAE,UAAU,GAAIL,GAAED,EAAE,CAAC,EAAG,CAAC,EAAGM,EAAE,UAAU,GAAIL,GAAED,EAAE,CAAC,EAAG,CAAC,EAAGM,EAAE,UAAU,GAAIN,EAAE,EAAE,OAAQ,CAAC,EAAGM,EAAE,UAAU,GAAIF,EAAG,CAAC,EAAGE,EAAE,UAAU,GAAIN,EAAE,OAAS,MAAQ,MAAO,CAAC,EAAGM,EAAE,UAAU,GAAIL,GAAEC,CAAC,EAAG,CAAC,EAAGH,GAAEO,CAAC,CAC3U,CACA,SAASgB,GAAEtB,EAAGC,EAAGC,EAAG,CAClB,IAAMC,EAAIL,GAAEI,CAAC,EACb,OAAOC,EAAE,UAAU,EAAG,EAAG,CAAC,EAAGA,EAAE,UAAU,EAAGD,EAAI,EAAG,CAAC,EAAG,GAAKA,IAAMC,EAAE,aAAa,EAAGH,EAAE,EAAG,CAAC,EAAGG,EAAE,aAAa,GAAIH,EAAE,EAAG,CAAC,GAAIG,EAAE,aAAaD,EAAI,EAAGD,EAAG,CAAC,EAAGF,GAAEI,CAAC,CAC5J,CACA,SAASoB,GAAEzB,EAAG,CACZ,OAAOA,aAAa,MAAQA,aAAa,SAAW,CAAC,CAACA,CAAC,EAAG,CAACA,CAAC,CAAC,EAAI,CAAC,CAACA,EAAE,MAAOA,EAAE,KAAMA,EAAE,IAAI,EAAG,CAACA,EAAE,MAAOA,EAAE,YAAY,CAAC,CACxH,CACA,IAAI0B,GAAI1B,GAAK,SAAU,EAAG,CACxB,IAAIC,EAAI,OAAO,EAAE,EACf,EAAI,GACJE,EAAI,EACN,QAAWC,KAAK,EAAG,CACjB,GAAI,CAACA,EAAE,EAAG,MAAM,IAAI,MAAM,wCAAwC,EAClE,GAAeA,EAAE,IAAb,OAAgB,MAAM,IAAI,MAAM,0BAA0B,IAAI,YAAY,EAAE,OAAOA,EAAE,CAAC,CAAC,IAAI,EAC/F,IAAMJ,EAAII,EAAE,GAAK,YACfC,EAAI,GAAK,YACX,GAAK,OAAO,GAAKD,EAAE,EAAE,QAAUJ,GAAK,EAAE,EAAII,EAAE,EAAGH,GAAK,OAAOG,EAAE,EAAE,OAAS,IAAM,GAAKC,EAAI,GAAKL,EAAE,EAAGG,IAAMA,EAAIH,EAC7G,CACA,OAAQG,GAAK,GAAK,eAAiBF,GAAK,OAAO,EAAE,GAAIA,EAAI,CAC3D,EAAE,UAAW,EAAG,CACd,QAAWA,KAAK,EAAG,MAAMQ,GAAE,GAAGgB,GAAExB,CAAC,EAAE,CAAC,CAAC,CACvC,EAAED,CAAC,CAAC,EACJ,SAAS2B,GAAE3B,EAAGC,EAAI,CAAC,EAAG,CACpB,IAAMC,EAAI,CACR,eAAgB,kBAChB,sBAAuB,YACzB,EACA,OAAoB,OAAOD,EAAE,QAArB,UAA+B,OAAO,UAAUA,EAAE,MAAM,IAAMA,EAAE,OAAS,IAAMC,EAAE,gBAAgB,EAAI,OAAOD,EAAE,MAAM,GAAIA,EAAE,WAAaC,EAAE,gBAAgB,EAAI,OAAOwB,GAAEzB,EAAE,QAAQ,CAAC,GAAI,IAAI,SAAS2B,GAAE5B,EAAGC,CAAC,EAAG,CACjN,QAASC,CACX,CAAC,CACH,CACA,SAAS0B,GAAE1B,EAAGM,EAAI,CAAC,EAAG,CACpB,IAAMG,EAAI,SAAUX,EAAG,CACrB,IAAMC,EAAID,EAAE,OAAO,YAAYA,EAAI,OAAO,SAAW,OAAO,aAAa,EAAE,EAC3E,MAAO,CACC,MAAO,QAAAO,EAAA,sBACX,IAAMP,EAAI,MAAMC,EAAE,KAAK,EACvB,GAAID,EAAE,KAAM,OAAOA,EACnB,GAAM,CAACE,EAAGC,CAAC,EAAIsB,GAAEzB,EAAE,KAAK,EACxB,MAAO,CACL,KAAM,EACN,MAAO,OAAO,OAAOK,GAAE,GAAGF,CAAC,EAAGM,GAAE,GAAGP,CAAC,CAAC,CACvC,CACF,IACA,MAAOD,EAAE,OAAO,KAAKA,CAAC,EACtB,CAAC,OAAO,aAAa,GAAI,CACvB,OAAO,IACT,CACF,CACF,EAAEC,CAAC,EACH,OAAOI,GAAE,SAAiB,EAAGD,EAAG,QAAAe,GAAA,sBAC9B,IAAMd,EAAI,CAAC,EACPE,EAAI,GACNC,EAAI,GACJE,EAAI,EACN,YAAAkB,EAAAC,GAAsB,GAAtBC,EAAAC,EAAAC,EAAAF,EAAA,EAAAC,EAAA,UAAAX,GAAAQ,EAAA,cAAAE,EAAA,GAAyB,CAAd,IAAM/B,EAAjBgC,EAAA,MACE,IAAM/B,EAAIe,GAAEhB,EAAGK,EAAE,cAAc,EAC/B,MAAMa,GAAElB,EAAGC,CAAC,EAAG,MAAMD,EAAE,EAAGA,EAAE,SAAW,MAAAkC,GAAOf,GAAEnB,CAAC,IACjD,IAAME,EAAIF,EAAE,GAAK,YACfG,GAAI,IAAMK,GAAK,aAAe,GAAKN,EACrC,MAAMoB,GAAEtB,EAAGE,CAAC,EAAGI,EAAE,KAAKiB,GAAEvB,EAAGQ,EAAGP,EAAGE,EAAC,CAAC,EAAGG,EAAE,KAAKN,EAAE,CAAC,EAAGG,IAAKG,EAAE,KAAKkB,GAAExB,EAAGQ,EAAGL,EAAC,CAAC,EAAGD,IAAMM,GAAK,IAAKC,IAAKD,GAAK,OAAO,GAAKR,EAAE,EAAE,MAAM,EAAIA,EAAE,EAAGW,IAAMA,EAAIT,EACjJ,OA5PJ,CAsPI+B,EAAA,CAAAD,UAAA,KAAAD,IAAAC,EAAAH,EAAA,oBAAAR,GAAAW,EAAA,KAAAH,YAAA,IAAAI,EAAA,MAAAA,EAAA,IAOA,IAAIvB,EAAI,GACR,QAAWV,KAAKM,EAAG,MAAMN,EAAGU,GAAK,OAAOV,EAAE,MAAM,EAChD,GAAIW,GAAKH,GAAK,YAAa,CACzB,IAAMN,EAAIF,GAAE,EAAE,EACdE,EAAE,UAAU,EAAG,UAAU,EAAGA,EAAE,aAAa,EAAG,OAAO,EAAE,EAAG,CAAC,EAAGA,EAAE,UAAU,GAAI,SAAS,EAAGA,EAAE,aAAa,GAAIO,EAAG,CAAC,EAAGP,EAAE,aAAa,GAAIO,EAAG,CAAC,EAAGP,EAAE,aAAa,GAAIQ,EAAG,CAAC,EAAGR,EAAE,aAAa,GAAIM,EAAG,CAAC,EAAGN,EAAE,UAAU,GAAI,UAAU,EAAGA,EAAE,aAAa,GAAIM,EAAIE,EAAG,CAAC,EAAGR,EAAE,UAAU,GAAI,EAAG,CAAC,EAAG,MAAMD,GAAEC,CAAC,CAC/R,CACA,IAAMW,EAAIb,GAAE,EAAE,EACda,EAAE,UAAU,EAAG,UAAU,EAAGA,EAAE,UAAU,EAAGT,GAAEK,CAAC,EAAG,CAAC,EAAGI,EAAE,UAAU,GAAIT,GAAEK,CAAC,EAAG,CAAC,EAAGI,EAAE,UAAU,GAAIV,GAAEO,CAAC,EAAG,CAAC,EAAGG,EAAE,UAAU,GAAIV,GAAEK,CAAC,EAAG,CAAC,EAAG,MAAMP,GAAEY,CAAC,CAC9I,IAAEF,EAAGH,CAAC,EAAGG,CAAC,CACZ,CCjPA,IAAMwB,GAAM,CAAC,gBAAiB,EAAE,EAChC,SAASC,GAAmCC,EAAIC,EAAK,CAC/CD,EAAK,IACJE,GAAe,EACfC,EAAe,EAAG,MAAO,CAAC,EAC1BC,EAAU,EAAG,UAAW,CAAC,EACzBC,EAAa,EAEpB,CACA,IAAMC,GAAM,CAAC,CAAC,CAAC,UAAU,EAAG,CAAC,GAAI,kBAAmB,EAAE,CAAC,EAAG,GAAG,EACvDC,GAAM,CAAC,8BAA+B,GAAG,EAC/C,SAASC,GAA+BR,EAAIC,EAAK,CAC/C,GAAID,EAAK,EAAG,CACV,IAAMS,EAASC,EAAiB,EAC7BP,EAAe,EAAG,MAAO,CAAC,EAC1BQ,EAAW,UAAW,SAA+DC,EAAQ,CAC3FC,EAAcJ,CAAG,EACpB,IAAMK,EAAYC,EAAc,EAChC,OAAUC,EAAYF,EAAO,eAAeF,CAAM,CAAC,CACrD,CAAC,EAAE,QAAS,UAA+D,CACtEC,EAAcJ,CAAG,EACpB,IAAMQ,EAAYF,EAAc,EAChC,OAAUC,EAAYC,EAAO,OAAO,KAAK,OAAO,CAAC,CACnD,CAAC,EAAE,uBAAwB,SAAqFL,EAAQ,CACnHC,EAAcJ,CAAG,EACpB,IAAMS,EAAYH,EAAc,EAChC,OAAUC,EAAYE,EAAO,kBAAkBN,CAAM,CAAC,CACxD,CAAC,EAAE,sBAAuB,SAAoFA,EAAQ,CACjHC,EAAcJ,CAAG,EACpB,IAAMU,EAAYJ,EAAc,EAChC,OAAUC,EAAYG,EAAO,iBAAiBP,CAAM,CAAC,CACvD,CAAC,EACET,EAAe,EAAG,MAAO,CAAC,EAC1BiB,GAAa,CAAC,EACdf,EAAa,EAAE,CACpB,CACA,GAAIL,EAAK,EAAG,CACV,IAAMqB,EAAYN,EAAc,EAC7BO,EAAW,KAAMD,EAAO,OAAO,EAAE,UAAWA,EAAO,UAAU,EAAE,iBAAkBA,EAAO,oBAAoB,EAC5GE,GAAY,aAAcF,EAAO,WAAa,IAAI,EAAE,kBAAmBA,EAAO,gBAAkB,IAAI,EAAE,mBAAoBA,EAAO,iBAAmB,IAAI,CAC7J,CACF,CACA,IAAMG,GAAM,CAAC,GAAG,EACVC,GAA8B,IAAIC,GAAe,gBAAgB,EAKnEC,IAA4B,IAAM,CACpC,IAAMC,EAAN,MAAMA,CAAY,CAChB,YAAYC,EAAaC,EAAWC,EAAeC,EAAaC,EAAoB,CAClF,KAAK,YAAcJ,EACnB,KAAK,UAAYC,EACjB,KAAK,cAAgBC,EACrB,KAAK,YAAcC,EACnB,KAAK,mBAAqBC,EAE1B,KAAK,KAAO,WAEZ,KAAK,SAAW,GAEhB,KAAK,cAAgB,GAErB,KAAK,SAAW,IAAIC,GAEpB,KAAK,SAAW,IAAIA,GAEpB,KAAK,aAAe,GAEpB,KAAK,iBAAmB,GACxBF,GAAa,UAAU,IAAI,CAC7B,CAEA,MAAMG,EAAQC,EAAS,CACjB,KAAK,eAAiBD,EACxB,KAAK,cAAc,SAAS,KAAK,gBAAgB,EAAGA,EAAQC,CAAO,EAEnE,KAAK,gBAAgB,EAAE,MAAMA,CAAO,EAEtC,KAAK,SAAS,KAAK,IAAI,CACzB,CACA,iBAAkB,CACZ,KAAK,eAIP,KAAK,cAAc,QAAQ,KAAK,YAAa,EAAK,CAEtD,CACA,aAAc,CACR,KAAK,eACP,KAAK,cAAc,eAAe,KAAK,WAAW,EAEhD,KAAK,aAAe,KAAK,YAAY,YACvC,KAAK,YAAY,WAAW,IAAI,EAElC,KAAK,SAAS,SAAS,EACvB,KAAK,SAAS,SAAS,CACzB,CAEA,cAAe,CACb,OAAO,KAAK,SAAW,KAAO,GAChC,CAEA,iBAAkB,CAChB,OAAO,KAAK,YAAY,aAC1B,CAEA,eAAeC,EAAO,CAChB,KAAK,WACPA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EAE1B,CAEA,mBAAoB,CAClB,KAAK,SAAS,KAAK,IAAI,CACzB,CAEA,UAAW,CACT,IAAMC,EAAQ,KAAK,YAAY,cAAc,UAAU,EAAI,EACrDC,EAAQD,EAAM,iBAAiB,2BAA2B,EAEhE,QAASE,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAChCD,EAAMC,CAAC,EAAE,OAAO,EAElB,OAAOF,EAAM,aAAa,KAAK,GAAK,EACtC,CACA,gBAAgBG,EAAe,CAK7B,KAAK,aAAeA,EACpB,KAAK,oBAAoB,aAAa,CACxC,CACA,oBAAoBC,EAAiB,CAEnC,KAAK,iBAAmBA,EACxB,KAAK,oBAAoB,aAAa,CACxC,CACA,WAAY,CACV,OAAO,KAAK,WAAa,KAAK,UAAU,gBAAkB,KAAK,gBAAgB,CACjF,CA4DF,EA1DId,EAAK,UAAO,SAA6Be,EAAG,CAC1C,OAAO,IAAKA,GAAKf,GAAgBgB,EAAqBC,EAAU,EAAMD,EAAkBE,EAAQ,EAAMF,EAAqBG,EAAY,EAAMH,EAAkBnB,GAAgB,CAAC,EAAMmB,EAAqBI,EAAiB,CAAC,CAC/N,EAGApB,EAAK,UAAyBqB,GAAkB,CAC9C,KAAMrB,EACN,UAAW,CAAC,CAAC,GAAI,gBAAiB,EAAE,CAAC,EACrC,UAAW,CAAC,EAAG,oBAAqB,yBAAyB,EAC7D,SAAU,EACV,aAAc,SAAkC5B,EAAIC,EAAK,CACnDD,EAAK,GACJW,EAAW,QAAS,SAA8CC,EAAQ,CAC3E,OAAOX,EAAI,eAAeW,CAAM,CAClC,CAAC,EAAE,aAAc,UAAqD,CACpE,OAAOX,EAAI,kBAAkB,CAC/B,CAAC,EAECD,EAAK,IACJuB,GAAY,OAAQtB,EAAI,IAAI,EAAE,WAAYA,EAAI,aAAa,CAAC,EAAE,gBAAiBA,EAAI,QAAQ,EAAE,WAAYA,EAAI,UAAY,IAAI,EAC7HiD,GAAY,gCAAiCjD,EAAI,YAAY,EAAE,oCAAqCA,EAAI,gBAAgB,EAE/H,EACA,OAAQ,CACN,KAAM,OACN,SAAU,CAAIkD,EAAa,2BAA4B,WAAY,WAAYC,EAAgB,EAC/F,cAAe,CAAID,EAAa,2BAA4B,gBAAiB,gBAAiBC,EAAgB,CAChH,EACA,SAAU,CAAC,aAAa,EACxB,WAAY,GACZ,SAAU,CAAIC,GAA6BC,EAAmB,EAC9D,MAAOxD,GACP,mBAAoBS,GACpB,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,EAAG,wBAAwB,EAAG,CAAC,YAAa,GAAI,EAAG,sBAAuB,EAAG,oBAAqB,kBAAkB,EAAG,CAAC,QAAS,4BAA6B,UAAW,WAAY,YAAa,QAAS,cAAe,MAAM,EAAG,CAAC,UAAW,WAAY,YAAa,QAAS,cAAe,OAAQ,EAAG,2BAA2B,EAAG,CAAC,SAAU,cAAc,CAAC,EAC7W,SAAU,SAA8BP,EAAIC,EAAK,CAC3CD,EAAK,IACJuD,GAAgBjD,EAAG,EACnBc,GAAa,CAAC,EACdjB,EAAe,EAAG,OAAQ,CAAC,EAC3BiB,GAAa,EAAG,CAAC,EACjBf,EAAa,EACbD,EAAU,EAAG,MAAO,CAAC,EACrBoD,EAAW,EAAGzD,GAAoC,EAAG,EAAG,WAAY,CAAC,GAEtEC,EAAK,IACJyD,EAAU,CAAC,EACXnC,EAAW,oBAAqBrB,EAAI,eAAiBA,EAAI,QAAQ,EAAE,mBAAoBA,EAAI,gBAAgB,CAAC,EAC5GwD,EAAU,EACVC,EAAc,EAAGzD,EAAI,iBAAmB,EAAI,EAAE,EAErD,EACA,aAAc,CAAC0D,EAAS,EACxB,cAAe,EACf,gBAAiB,CACnB,CAAC,EAxJL,IAAMhC,EAANC,EA2JA,OAAOD,CACT,GAAG,EAqCH,IAAMiC,GAAgC,IAAIC,GAAe,gBAAgB,EAqFzE,IAAMC,GAAoB,CASxB,cAA4BC,GAAQ,gBAAiB,CAAcC,GAAM,OAAqBC,GAAM,CAClG,QAAS,EACT,UAAW,YACb,CAAC,CAAC,EAAgBC,GAAW,gBAA8BC,GAAQ,mCAAiDF,GAAM,CACxH,QAAS,EACT,UAAW,UACb,CAAC,CAAC,CAAC,EAAgBC,GAAW,YAA0BC,GAAQ,oBAAkCF,GAAM,CACtG,QAAS,CACX,CAAC,CAAC,CAAC,CAAC,CAAC,EAKL,YAA0BF,GAAQ,cAAe,CAIjDC,GAAM,UAAwBC,GAAM,CAClC,QAAS,CACX,CAAC,CAAC,EAAgBC,GAAW,YAAa,CAAcD,GAAM,CAC5D,QAAS,CACX,CAAC,EAAgBE,GAAQ,8CAA8C,CAAC,CAAC,CAAC,CAAC,CAC7E,EAMMC,GAAcN,GAAkB,YAMhCO,GAAgBP,GAAkB,cACpCQ,GAAe,EAEbC,GAAwC,IAAIC,GAAe,2BAA4B,CAC3F,WAAY,OACZ,QAASC,EACX,CAAC,EAED,SAASA,IAAmC,CAC1C,MAAO,CACL,eAAgB,GAChB,UAAW,QACX,UAAW,QACX,cAAe,kCACjB,CACF,CACA,IAAIC,IAAwB,IAAM,CAChC,IAAMC,EAAN,MAAMA,CAAQ,CAEZ,IAAI,WAAY,CACd,OAAO,KAAK,UACd,CACA,IAAI,UAAUC,EAAO,CAInB,KAAK,WAAaA,EAClB,KAAK,mBAAmB,CAC1B,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,UACd,CACA,IAAI,UAAUA,EAAO,CAInB,KAAK,WAAaA,EAClB,KAAK,mBAAmB,CAC1B,CAOA,IAAI,WAAWC,EAAS,CACtB,IAAMC,EAAqB,KAAK,oBAC5BA,GAAsBA,EAAmB,QAC3CA,EAAmB,MAAM,GAAG,EAAE,QAAQC,GAAa,CACjD,KAAK,WAAWA,CAAS,EAAI,EAC/B,CAAC,EAEH,KAAK,oBAAsBF,EACvBA,GAAWA,EAAQ,SACrBA,EAAQ,MAAM,GAAG,EAAE,QAAQE,GAAa,CACtC,KAAK,WAAWA,CAAS,EAAI,EAC/B,CAAC,EACD,KAAK,YAAY,cAAc,UAAY,GAE/C,CAQA,IAAI,WAAY,CACd,OAAO,KAAK,UACd,CACA,IAAI,UAAUF,EAAS,CACrB,KAAK,WAAaA,CACpB,CACA,YAAYG,EAAaC,EAASC,EAElCC,EAAoB,CAClB,KAAK,YAAcH,EACnB,KAAK,QAAUC,EACf,KAAK,mBAAqBE,EAC1B,KAAK,iBAAmB,kBACxB,KAAK,eAAiB,EAEtB,KAAK,uBAAyB,IAAIC,GAElC,KAAK,WAAa,CAAC,EAEnB,KAAK,qBAAuB,OAE5B,KAAK,eAAiB,IAAIC,GAE1B,KAAK,OAAS,IAAIC,GAMlB,KAAK,MAAQ,KAAK,OAClB,KAAK,QAAU,kBAAkBhB,IAAc,GAC/C,KAAK,kBAAoBY,EAAe,mBAAqB,GAC7D,KAAK,WAAaA,EAAe,UACjC,KAAK,WAAaA,EAAe,UACjC,KAAK,cAAgBA,EAAe,cACpC,KAAK,eAAiBA,EAAe,eACrC,KAAK,YAAcA,EAAe,WACpC,CACA,UAAW,CACT,KAAK,mBAAmB,CAC1B,CACA,oBAAqB,CACnB,KAAK,yBAAyB,EAC9B,KAAK,YAAc,IAAIK,GAAgB,KAAK,sBAAsB,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAC9G,KAAK,YAAY,OAAO,UAAU,IAAM,KAAK,OAAO,KAAK,KAAK,CAAC,EAI/D,KAAK,uBAAuB,QAAQ,KAAKC,GAAU,KAAK,sBAAsB,EAAGC,GAAUC,GAASC,GAAM,GAAGD,EAAM,IAAIE,GAAQA,EAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAUC,GAAe,KAAK,YAAY,iBAAiBA,CAAW,CAAC,EACxN,KAAK,uBAAuB,QAAQ,UAAUC,GAAa,CAIzD,IAAMC,EAAU,KAAK,YACrB,GAAI,KAAK,uBAAyB,SAAWA,EAAQ,YAAY,UAAU,EAAG,CAC5E,IAAML,EAAQI,EAAU,QAAQ,EAC1BE,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAIN,EAAM,OAAS,EAAGK,EAAQ,iBAAmB,CAAC,CAAC,EAC9EL,EAAMM,CAAK,GAAK,CAACN,EAAMM,CAAK,EAAE,SAChCD,EAAQ,cAAcC,CAAK,EAE3BD,EAAQ,kBAAkB,CAE9B,CACF,CAAC,CACH,CACA,aAAc,CACZ,KAAK,aAAa,QAAQ,EAC1B,KAAK,uBAAuB,QAAQ,EACpC,KAAK,OAAO,SAAS,EACrB,KAAK,6BAA6B,YAAY,CAChD,CAEA,UAAW,CAGT,OADoB,KAAK,uBAAuB,QAC7B,KAAKP,GAAU,KAAK,sBAAsB,EAAGC,GAAUC,GAASC,GAAM,GAAGD,EAAM,IAAIE,GAAQA,EAAK,QAAQ,CAAC,CAAC,CAAC,CAChI,CAOA,QAAQK,EAAO,CAAC,CAOhB,WAAWA,EAAO,CAAC,CAEnB,eAAeC,EAAO,CACpB,IAAMC,EAAUD,EAAM,QAChBH,EAAU,KAAK,YACrB,OAAQI,EAAS,CACf,IAAK,IACEC,GAAeF,CAAK,IACvBA,EAAM,eAAe,EACrB,KAAK,OAAO,KAAK,SAAS,GAE5B,MACF,IAAK,IACC,KAAK,YAAc,KAAK,YAAc,OACxC,KAAK,OAAO,KAAK,SAAS,EAE5B,MACF,IAAK,IACC,KAAK,YAAc,KAAK,YAAc,OACxC,KAAK,OAAO,KAAK,SAAS,EAE5B,MACF,SACMC,IAAY,IAAYA,IAAY,KACtCJ,EAAQ,eAAe,UAAU,EAEnCA,EAAQ,UAAUG,CAAK,EACvB,MACJ,CAGAA,EAAM,gBAAgB,CACxB,CAKA,eAAeG,EAAS,UAAW,CAEjC,KAAK,6BAA6B,YAAY,EAC9C,KAAK,4BAA8B,KAAK,QAAQ,SAAS,KAAKC,GAAK,CAAC,CAAC,EAAE,UAAU,IAAM,CACrF,IAAIC,EAAY,KAShB,GARI,KAAK,uBAAuB,SAK9BA,EAAY,KAAK,uBAAuB,MAAM,gBAAgB,EAAE,QAAQ,eAAe,GAGrF,CAACA,GAAa,CAACA,EAAU,SAAS,SAAS,aAAa,EAAG,CAC7D,IAAMR,EAAU,KAAK,YACrBA,EAAQ,eAAeM,CAAM,EAAE,mBAAmB,EAI9C,CAACN,EAAQ,YAAcQ,GACzBA,EAAU,MAAM,CAEpB,CACF,CAAC,CACH,CAKA,iBAAkB,CAChB,KAAK,YAAY,cAAc,EAAE,CACnC,CAKA,aAAaC,EAAO,CAGlB,IAAMC,EAAY,KAAK,IAAI,KAAK,eAAiBD,EAAO,EAAE,EACpDE,EAAe,GAAG,KAAK,gBAAgB,GAAGD,CAAS,GACnDE,EAAkB,OAAO,KAAK,KAAK,UAAU,EAAE,KAAK5B,GACjDA,EAAU,WAAW,KAAK,gBAAgB,CAClD,GACG,CAAC4B,GAAmBA,IAAoB,KAAK,sBAC3C,KAAK,qBACP,KAAK,WAAW,KAAK,kBAAkB,EAAI,IAE7C,KAAK,WAAWD,CAAY,EAAI,GAChC,KAAK,mBAAqBA,EAE9B,CAQA,mBAAmBE,EAAO,KAAK,UAAWC,EAAO,KAAK,UAAW,CAC/D,IAAMhC,EAAU,KAAK,WACrBA,EAAQ,iBAAiB,EAAI+B,IAAS,SACtC/B,EAAQ,gBAAgB,EAAI+B,IAAS,QACrC/B,EAAQ,gBAAgB,EAAIgC,IAAS,QACrChC,EAAQ,gBAAgB,EAAIgC,IAAS,QAErC,KAAK,oBAAoB,aAAa,CACxC,CAEA,iBAAkB,CAEhB,KAAK,qBAAuB,OAC9B,CAEA,iBAAkB,CAEhB,KAAK,qBAAuB,MAC9B,CAEA,iBAAiBX,EAAO,CACtB,KAAK,eAAe,KAAKA,CAAK,EAC9B,KAAK,aAAe,EACtB,CACA,kBAAkBA,EAAO,CACvB,KAAK,aAAe,GAOhBA,EAAM,UAAY,SAAW,KAAK,YAAY,kBAAoB,IACpEA,EAAM,QAAQ,UAAY,EAE9B,CAOA,0BAA2B,CACzB,KAAK,UAAU,QAAQ,KAAKV,GAAU,KAAK,SAAS,CAAC,EAAE,UAAUE,GAAS,CACxE,KAAK,uBAAuB,MAAMA,EAAM,OAAOE,GAAQA,EAAK,cAAgB,IAAI,CAAC,EACjF,KAAK,uBAAuB,gBAAgB,CAC9C,CAAC,CACH,CA+EF,EA7EIjB,EAAK,UAAO,SAAyBmC,EAAG,CACtC,OAAO,IAAKA,GAAKnC,GAAYoC,EAAqBC,EAAU,EAAMD,EAAqBE,EAAM,EAAMF,EAAkBxC,EAAwB,EAAMwC,EAAqBG,EAAiB,CAAC,CAC5L,EAGAvC,EAAK,UAAyBwC,GAAkB,CAC9C,KAAMxC,EACN,UAAW,CAAC,CAAC,UAAU,CAAC,EACxB,eAAgB,SAAgCyC,EAAIC,EAAKC,EAAU,CAMjE,GALIF,EAAK,IACJG,GAAeD,EAAUE,GAAkB,CAAC,EAC5CD,GAAeD,EAAUG,GAAa,CAAC,EACvCF,GAAeD,EAAUG,GAAa,CAAC,GAExCL,EAAK,EAAG,CACV,IAAIM,EACDC,GAAeD,EAAQE,GAAY,CAAC,IAAMP,EAAI,YAAcK,EAAG,OAC/DC,GAAeD,EAAQE,GAAY,CAAC,IAAMP,EAAI,UAAYK,GAC1DC,GAAeD,EAAQE,GAAY,CAAC,IAAMP,EAAI,MAAQK,EAC3D,CACF,EACA,UAAW,SAAuBN,EAAIC,EAAK,CAIzC,GAHID,EAAK,GACJS,GAAYC,GAAa,CAAC,EAE3BV,EAAK,EAAG,CACV,IAAIM,EACDC,GAAeD,EAAQE,GAAY,CAAC,IAAMP,EAAI,YAAcK,EAAG,MACpE,CACF,EACA,SAAU,EACV,aAAc,SAA8BN,EAAIC,EAAK,CAC/CD,EAAK,GACJW,GAAY,aAAc,IAAI,EAAE,kBAAmB,IAAI,EAAE,mBAAoB,IAAI,CAExF,EACA,OAAQ,CACN,cAAe,gBACf,UAAW,CAAIC,EAAa,KAAM,aAAc,WAAW,EAC3D,eAAgB,CAAIA,EAAa,KAAM,kBAAmB,gBAAgB,EAC1E,gBAAiB,CAAIA,EAAa,KAAM,mBAAoB,iBAAiB,EAC7E,UAAW,YACX,UAAW,YACX,eAAgB,CAAIA,EAAa,2BAA4B,iBAAkB,iBAAkBC,EAAgB,EACjH,YAAa,CAAID,EAAa,2BAA4B,cAAe,cAAepD,GAASA,GAAS,KAAO,KAAOqD,GAAiBrD,CAAK,CAAC,EAC/I,WAAY,CAAIoD,EAAa,KAAM,QAAS,YAAY,EACxD,UAAW,WACb,EACA,QAAS,CACP,OAAQ,SACR,MAAO,OACT,EACA,SAAU,CAAC,SAAS,EACpB,WAAY,GACZ,SAAU,CAAIE,GAAmB,CAAC,CAChC,QAASC,GACT,YAAaxD,CACf,CAAC,CAAC,EAAMyD,GAA6BC,EAAmB,EACxD,mBAAoBC,GACpB,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,WAAY,KAAM,OAAQ,OAAQ,EAAG,qBAAsB,6BAA8B,EAAG,KAAM,UAAW,UAAW,OAAO,EAAG,CAAC,EAAG,sBAAsB,CAAC,EACvK,SAAU,SAA0BlB,EAAIC,EAAK,CACvCD,EAAK,IACJmB,GAAgB,EAChBC,EAAW,EAAGC,GAAgC,EAAG,EAAG,aAAa,EAExE,EACA,aAAc,CAACC,EAAO,EACtB,OAAQ,CAAC,kwHAAowH,EAC7wH,cAAe,EACf,KAAM,CACJ,UAAW,CAAC5E,GAAkB,cAAeA,GAAkB,WAAW,CAC5E,EACA,gBAAiB,CACnB,CAAC,EAzWL,IAAMY,EAANC,EA4WA,OAAOD,CACT,GAAG,EAMGiE,GAAwC,IAAInE,GAAe,2BAA4B,CAC3F,WAAY,OACZ,QAAS,IAAM,CACb,IAAMoE,EAAUC,GAAOC,EAAO,EAC9B,MAAO,IAAMF,EAAQ,iBAAiB,WAAW,CACnD,CACF,CAAC,EAED,SAASG,GAAiCH,EAAS,CACjD,MAAO,IAAMA,EAAQ,iBAAiB,WAAW,CACnD,CAEA,IAAMI,GAA4C,CAChD,QAASL,GACT,KAAM,CAACG,EAAO,EACd,WAAYC,EACd,EAEME,GAA2CC,GAAgC,CAC/E,QAAS,EACX,CAAC,EAQD,IAAIC,IAA+B,IAAM,CACvC,IAAMC,EAAN,MAAMA,CAAe,CAKnB,IAAI,8BAA+B,CACjC,OAAO,KAAK,IACd,CACA,IAAI,6BAA6BC,EAAG,CAClC,KAAK,KAAOA,CACd,CAEA,IAAI,MAAO,CACT,OAAO,KAAK,KACd,CACA,IAAI,KAAKC,EAAM,CACTA,IAAS,KAAK,QAGlB,KAAK,MAAQA,EACb,KAAK,uBAAuB,YAAY,EACpCA,IACW,KAAK,oBAGlB,KAAK,uBAAyBA,EAAK,MAAM,UAAUC,GAAU,CAC3D,KAAK,aAAaA,CAAM,GAEnBA,IAAW,SAAWA,IAAW,QAAU,KAAK,qBACnD,KAAK,oBAAoB,OAAO,KAAKA,CAAM,CAE/C,CAAC,GAEH,KAAK,mBAAmB,oBAAoB,KAAK,gBAAgB,CAAC,EACpE,CACA,YAAYC,EAAUC,EAAUC,EAAmBC,EAAgBC,EAGnEC,EAAmBC,EAAMC,EAAeC,EAAS,CAC/C,KAAK,SAAWR,EAChB,KAAK,SAAWC,EAChB,KAAK,kBAAoBC,EACzB,KAAK,kBAAoBG,EACzB,KAAK,KAAOC,EACZ,KAAK,cAAgBC,EACrB,KAAK,QAAUC,EACf,KAAK,YAAc,KACnB,KAAK,UAAY,GACjB,KAAK,4BAA8BC,GAAa,MAChD,KAAK,mBAAqBA,GAAa,MACvC,KAAK,uBAAyBA,GAAa,MAC3C,KAAK,mBAAqBC,GAAOC,EAAiB,EAKlD,KAAK,kBAAoBC,GAAS,CAC3BC,GAAiCD,CAAK,IACzC,KAAK,UAAY,QAErB,EAGA,KAAK,UAAY,OAMjB,KAAK,aAAe,GAEpB,KAAK,WAAa,IAAIE,GAOtB,KAAK,WAAa,KAAK,WAEvB,KAAK,WAAa,IAAIA,GAOtB,KAAK,YAAc,KAAK,WACxB,KAAK,gBAAkBX,EACvB,KAAK,oBAAsBC,aAAsBW,GAAUX,EAAa,OACxEH,EAAS,cAAc,iBAAiB,aAAc,KAAK,kBAAmBe,EAA2B,CAC3G,CACA,oBAAqB,CACnB,KAAK,aAAa,CACpB,CACA,aAAc,CACR,KAAK,cACP,KAAK,YAAY,QAAQ,EACzB,KAAK,YAAc,MAErB,KAAK,SAAS,cAAc,oBAAoB,aAAc,KAAK,kBAAmBA,EAA2B,EACjH,KAAK,uBAAuB,YAAY,EACxC,KAAK,4BAA4B,YAAY,EAC7C,KAAK,mBAAmB,YAAY,CACtC,CAEA,IAAI,UAAW,CACb,OAAO,KAAK,SACd,CAEA,IAAI,KAAM,CACR,OAAO,KAAK,MAAQ,KAAK,KAAK,QAAU,MAAQ,MAAQ,KAC1D,CAEA,iBAAkB,CAChB,MAAO,CAAC,EAAE,KAAK,mBAAqB,KAAK,qBAAuB,KAAK,KACvE,CAEA,YAAa,CACX,OAAO,KAAK,UAAY,KAAK,UAAU,EAAI,KAAK,SAAS,CAC3D,CAEA,UAAW,CACT,IAAMlB,EAAO,KAAK,KAClB,GAAI,KAAK,WAAa,CAACA,EACrB,OAEF,IAAMmB,EAAa,KAAK,eAAenB,CAAI,EACrCoB,EAAgBD,EAAW,UAAU,EACrCE,EAAmBD,EAAc,iBACvC,KAAK,aAAapB,EAAMqB,CAAgB,EACxCD,EAAc,YAAcpB,EAAK,aAAe,KAAO,CAAC,KAAK,gBAAgB,EAAIA,EAAK,YACtFmB,EAAW,OAAO,KAAK,WAAWnB,CAAI,CAAC,EACnCA,EAAK,aACPA,EAAK,YAAY,OAAO,KAAK,QAAQ,EAEvC,KAAK,4BAA8B,KAAK,oBAAoB,EAAE,UAAU,IAAM,KAAK,UAAU,CAAC,EAC9F,KAAK,UAAUA,CAAI,EACfA,aAAgBiB,KAClBjB,EAAK,gBAAgB,EACrBA,EAAK,uBAAuB,QAAQ,KAAKsB,GAAUtB,EAAK,KAAK,CAAC,EAAE,UAAU,IAAM,CAG9EqB,EAAiB,mBAAmB,EAAK,EAAE,oBAAoB,EAC/DA,EAAiB,mBAAmB,EAAI,CAC1C,CAAC,EAEL,CAEA,WAAY,CACV,KAAK,MAAM,MAAM,KAAK,CACxB,CAKA,MAAME,EAAQC,EAAS,CACjB,KAAK,eAAiBD,EACxB,KAAK,cAAc,SAAS,KAAK,SAAUA,EAAQC,CAAO,EAE1D,KAAK,SAAS,cAAc,MAAMA,CAAO,CAE7C,CAIA,gBAAiB,CACf,KAAK,aAAa,eAAe,CACnC,CAEA,aAAavB,EAAQ,CACnB,GAAI,CAAC,KAAK,aAAe,CAAC,KAAK,SAC7B,OAEF,IAAMD,EAAO,KAAK,KAClB,KAAK,4BAA4B,YAAY,EAC7C,KAAK,YAAY,OAAO,EAKpB,KAAK,eAAiBC,IAAW,WAAa,CAAC,KAAK,WAAa,CAAC,KAAK,gBAAgB,IACzF,KAAK,MAAM,KAAK,SAAS,EAE3B,KAAK,UAAY,OACbD,aAAgBiB,IAClBjB,EAAK,gBAAgB,EACjBA,EAAK,YAEPA,EAAK,eAAe,KAAKyB,GAAOX,GAASA,EAAM,UAAY,MAAM,EAAGY,GAAK,CAAC,EAE1EJ,GAAUtB,EAAK,YAAY,SAAS,CAAC,EAAE,UAAU,CAC/C,KAAM,IAAMA,EAAK,YAAY,OAAO,EAEpC,SAAU,IAAM,KAAK,eAAe,EAAK,CAC3C,CAAC,EAED,KAAK,eAAe,EAAK,IAG3B,KAAK,eAAe,EAAK,EACzBA,GAAM,aAAa,OAAO,EAE9B,CAKA,UAAUA,EAAM,CACdA,EAAK,WAAa,KAAK,gBAAgB,EAAI,KAAK,oBAAsB,OACtEA,EAAK,UAAY,KAAK,IACtB,KAAK,kBAAkBA,CAAI,EAC3BA,EAAK,eAAe,KAAK,WAAa,SAAS,EAC/C,KAAK,eAAe,EAAI,CAC1B,CAEA,kBAAkBA,EAAM,CACtB,GAAIA,EAAK,aAAc,CACrB,IAAI2B,EAAQ,EACRrB,EAAaN,EAAK,WACtB,KAAOM,GACLqB,IACArB,EAAaA,EAAW,WAE1BN,EAAK,aAAa2B,CAAK,CACzB,CACF,CAEA,eAAeC,EAAQ,CACjBA,IAAW,KAAK,YAClB,KAAK,UAAYA,EACjB,KAAK,UAAY,KAAK,WAAW,KAAK,EAAI,KAAK,WAAW,KAAK,EAC3D,KAAK,gBAAgB,GACvB,KAAK,kBAAkB,gBAAgBA,CAAM,EAE/C,KAAK,mBAAmB,aAAa,EAEzC,CAKA,eAAe5B,EAAM,CACnB,GAAI,CAAC,KAAK,YAAa,CACrB,IAAM6B,EAAS,KAAK,kBAAkB7B,CAAI,EAC1C,KAAK,sBAAsBA,EAAM6B,EAAO,gBAAgB,EACxD,KAAK,YAAc,KAAK,SAAS,OAAOA,CAAM,EAI9C,KAAK,YAAY,cAAc,EAAE,UAAU,CAC7C,CACA,OAAO,KAAK,WACd,CAKA,kBAAkB7B,EAAM,CACtB,OAAO,IAAI8B,GAAc,CACvB,iBAAkB,KAAK,SAAS,SAAS,EAAE,oBAAoB,KAAK,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,sCAAsC,EACnL,cAAe9B,EAAK,eAAiB,mCACrC,WAAYA,EAAK,kBACjB,eAAgB,KAAK,gBAAgB,EACrC,UAAW,KAAK,IAClB,CAAC,CACH,CAMA,sBAAsBA,EAAM+B,EAAU,CAChC/B,EAAK,oBACP+B,EAAS,gBAAgB,UAAUC,GAAU,CAC3C,IAAMC,EAAOD,EAAO,eAAe,WAAa,QAAU,QAAU,SAC9DE,EAAOF,EAAO,eAAe,WAAa,MAAQ,QAAU,QAI9D,KAAK,QACP,KAAK,QAAQ,IAAI,IAAMhC,EAAK,mBAAmBiC,EAAMC,CAAI,CAAC,EAE1DlC,EAAK,mBAAmBiC,EAAMC,CAAI,CAEtC,CAAC,CAEL,CAMA,aAAalC,EAAMqB,EAAkB,CACnC,GAAI,CAACc,EAASC,CAAe,EAAIpC,EAAK,YAAc,SAAW,CAAC,MAAO,OAAO,EAAI,CAAC,QAAS,KAAK,EAC7F,CAACqC,EAAUC,CAAgB,EAAItC,EAAK,YAAc,QAAU,CAAC,SAAU,KAAK,EAAI,CAAC,MAAO,QAAQ,EAChG,CAACuC,EAASC,CAAe,EAAI,CAACH,EAAUC,CAAgB,EACxD,CAACG,EAAUC,CAAgB,EAAI,CAACP,EAASC,CAAe,EACxDO,EAAU,EACd,GAAI,KAAK,gBAAgB,GAKvB,GAFAD,EAAmBP,EAAUnC,EAAK,YAAc,SAAW,QAAU,MACrEoC,EAAkBK,EAAWN,IAAY,MAAQ,QAAU,MACvD,KAAK,oBAAqB,CAC5B,GAAI,KAAK,qBAAuB,KAAM,CACpC,IAAMS,EAAY,KAAK,oBAAoB,MAAM,MACjD,KAAK,oBAAsBA,EAAYA,EAAU,gBAAgB,EAAE,UAAY,CACjF,CACAD,EAAUN,IAAa,SAAW,KAAK,oBAAsB,CAAC,KAAK,mBACrE,OACUrC,EAAK,iBACfuC,EAAUF,IAAa,MAAQ,SAAW,MAC1CG,EAAkBF,IAAqB,MAAQ,SAAW,OAE5DjB,EAAiB,cAAc,CAAC,CAC9B,QAAAc,EACA,QAAAI,EACA,SAAAE,EACA,SAAAJ,EACA,QAAAM,CACF,EAAG,CACD,QAASP,EACT,QAAAG,EACA,SAAUG,EACV,SAAAL,EACA,QAAAM,CACF,EAAG,CACD,QAAAR,EACA,QAASK,EACT,SAAAC,EACA,SAAUH,EACV,QAAS,CAACK,CACZ,EAAG,CACD,QAASP,EACT,QAASI,EACT,SAAUE,EACV,SAAUJ,EACV,QAAS,CAACK,CACZ,CAAC,CAAC,CACJ,CAEA,qBAAsB,CACpB,IAAME,EAAW,KAAK,YAAY,cAAc,EAC1CC,EAAc,KAAK,YAAY,YAAY,EAC3CC,EAAc,KAAK,oBAAsB,KAAK,oBAAoB,OAASC,GAAG,EAC9EC,EAAQ,KAAK,oBAAsB,KAAK,oBAAoB,SAAS,EAAE,KAAKxB,GAAOyB,GAAUA,IAAW,KAAK,iBAAiB,EAAGzB,GAAO,IAAM,KAAK,SAAS,CAAC,EAAIuB,GAAG,EAC1K,OAAOG,GAAMN,EAAUE,EAAaE,EAAOH,CAAW,CACxD,CAEA,iBAAiBhC,EAAO,CACjBsC,GAAgCtC,CAAK,IAGxC,KAAK,UAAYA,EAAM,SAAW,EAAI,QAAU,OAI5C,KAAK,gBAAgB,GACvBA,EAAM,eAAe,EAG3B,CAEA,eAAeA,EAAO,CACpB,IAAMuC,EAAUvC,EAAM,SAElBuC,IAAY,IAASA,IAAY,MACnC,KAAK,UAAY,YAEf,KAAK,gBAAgB,IAAMA,IAAY,IAAe,KAAK,MAAQ,OAASA,IAAY,IAAc,KAAK,MAAQ,SACrH,KAAK,UAAY,WACjB,KAAK,SAAS,EAElB,CAEA,aAAavC,EAAO,CACd,KAAK,gBAAgB,GAEvBA,EAAM,gBAAgB,EACtB,KAAK,SAAS,GAEd,KAAK,WAAW,CAEpB,CAEA,cAAe,CAET,CAAC,KAAK,gBAAgB,GAAK,CAAC,KAAK,sBAGrC,KAAK,mBAAqB,KAAK,oBAAoB,SAAS,EAI3D,KAAKW,GAAOyB,GAAUA,IAAW,KAAK,mBAAqB,CAACA,EAAO,QAAQ,EAAGI,GAAM,EAAGC,EAAa,CAAC,EAAE,UAAU,IAAM,CACtH,KAAK,UAAY,QAIb,KAAK,gBAAgBtC,IAAW,KAAK,KAAK,aAG5C,KAAK,KAAK,eAAe,KAAKS,GAAK,CAAC,EAAG4B,GAAM,EAAGC,EAAa,EAAGjC,GAAU,KAAK,oBAAoB,SAAS,CAAC,CAAC,EAAE,UAAU,IAAM,KAAK,SAAS,CAAC,EAE/I,KAAK,SAAS,CAElB,CAAC,EACH,CAEA,WAAWtB,EAAM,CAIf,OAAI,CAAC,KAAK,SAAW,KAAK,QAAQ,cAAgBA,EAAK,eACrD,KAAK,QAAU,IAAIwD,GAAexD,EAAK,YAAa,KAAK,iBAAiB,GAErE,KAAK,OACd,CA0CF,EAxCIF,EAAK,UAAO,SAAgC2D,EAAG,CAC7C,OAAO,IAAKA,GAAK3D,GAAmB4D,EAAuBC,EAAO,EAAMD,EAAqBE,EAAU,EAAMF,EAAqBG,EAAgB,EAAMH,EAAkBI,EAAwB,EAAMJ,EAAkBK,GAAgB,CAAC,EAAML,EAAkBM,GAAa,EAAE,EAAMN,EAAqBO,GAAgB,CAAC,EAAMP,EAAqBQ,EAAY,EAAMR,EAAqBS,EAAM,CAAC,CACzY,EAGArE,EAAK,UAAyBsE,GAAkB,CAC9C,KAAMtE,EACN,UAAW,CAAC,CAAC,GAAI,uBAAwB,EAAE,EAAG,CAAC,GAAI,oBAAqB,EAAE,CAAC,EAC3E,UAAW,CAAC,EAAG,sBAAsB,EACrC,SAAU,EACV,aAAc,SAAqCuE,EAAIC,EAAK,CACtDD,EAAK,GACJE,EAAW,QAAS,SAAiDC,EAAQ,CAC9E,OAAOF,EAAI,aAAaE,CAAM,CAChC,CAAC,EAAE,YAAa,SAAqDA,EAAQ,CAC3E,OAAOF,EAAI,iBAAiBE,CAAM,CACpC,CAAC,EAAE,UAAW,SAAmDA,EAAQ,CACvE,OAAOF,EAAI,eAAeE,CAAM,CAClC,CAAC,EAECH,EAAK,GACJI,GAAY,gBAAiBH,EAAI,KAAO,OAAS,IAAI,EAAE,gBAAiBA,EAAI,QAAQ,EAAE,gBAAiBA,EAAI,SAAWA,EAAI,KAAK,QAAU,IAAI,CAEpJ,EACA,OAAQ,CACN,6BAA8B,CAAII,EAAa,KAAM,uBAAwB,8BAA8B,EAC3G,KAAM,CAAIA,EAAa,KAAM,oBAAqB,MAAM,EACxD,SAAU,CAAIA,EAAa,KAAM,qBAAsB,UAAU,EACjE,aAAc,CAAIA,EAAa,KAAM,6BAA8B,cAAc,CACnF,EACA,QAAS,CACP,WAAY,aACZ,WAAY,aACZ,WAAY,aACZ,YAAa,aACf,EACA,SAAU,CAAC,gBAAgB,EAC3B,WAAY,EACd,CAAC,EA1cL,IAAM7E,EAANC,EA6cA,OAAOD,CACT,GAAG,EAIC8E,IAA8B,IAAM,CACtC,IAAMC,EAAN,MAAMA,CAAc,CAiBpB,EAfIA,EAAK,UAAO,SAA+BnB,EAAG,CAC5C,OAAO,IAAKA,GAAKmB,EACnB,EAGAA,EAAK,UAAyBC,GAAiB,CAC7C,KAAMD,CACR,CAAC,EAGDA,EAAK,UAAyBE,GAAiB,CAC7C,UAAW,CAACC,EAAyC,EACrD,QAAS,CAACC,GAAcC,GAAiBC,GAAiBC,GAAeC,GAAqBF,EAAe,CAC/G,CAAC,EAfL,IAAMP,EAANC,EAkBA,OAAOD,CACT,GAAG,ECxwCH,IAAMU,GAAgD,IAAIC,GAAe,kCAAkC,EAoB3G,IAAIC,IAA+B,IAAM,CACvC,IAAMC,EAAN,MAAMA,CAAe,CACnB,YAAYC,EAAaC,EAASC,EAAoBC,EAAgBC,EAAU,CAC9E,KAAK,YAAcJ,EACnB,KAAK,QAAUC,EACf,KAAK,mBAAqBC,EAC1B,KAAK,eAAiBC,EAEtB,KAAK,iBAAmB,GACxB,KAAK,cAAgB,UACrB,KAAK,OAAS,EACd,KAAK,aAAe,EAMpB,KAAK,aAAe,IAAIE,GACxB,KAAK,MAAQ,cAEb,KAAK,sBAAwBC,GAAS,CAChC,KAAK,aAAa,UAAU,SAAW,GAAK,CAACA,EAAM,QAAU,CAACA,EAAM,OAAO,UAAU,SAAS,kCAAkC,IAGhI,KAAK,OAAS,eAAiB,KAAK,OAAS,WAC/C,KAAK,QAAQ,IAAI,IAAM,KAAK,aAAa,KAAK,CAC5C,MAAO,KAAK,KACd,CAAC,CAAC,CAEN,EACA,KAAK,iBAAmBH,IAAmB,iBACvCC,IACEA,EAAS,QACX,KAAK,MAAQ,KAAK,cAAgBA,EAAS,OAE7C,KAAK,KAAOA,EAAS,MAAQ,KAAK,KAEtC,CAGA,IAAI,OAAQ,CACV,OAAO,KAAK,QAAU,KAAK,aAC7B,CACA,IAAI,MAAMG,EAAO,CACf,KAAK,OAASA,CAChB,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CACA,IAAI,MAAMC,EAAG,CACX,KAAK,OAASC,GAAMD,GAAK,CAAC,EAC1B,KAAK,mBAAmB,aAAa,CACvC,CAEA,IAAI,aAAc,CAChB,OAAO,KAAK,cAAgB,CAC9B,CACA,IAAI,YAAYA,EAAG,CACjB,KAAK,aAAeC,GAAMD,GAAK,CAAC,EAChC,KAAK,mBAAmB,aAAa,CACvC,CAQA,IAAI,MAAO,CACT,OAAO,KAAK,KACd,CACA,IAAI,KAAKD,EAAO,CAGd,KAAK,MAAQA,EACb,KAAK,mBAAmB,aAAa,CACvC,CACA,iBAAkB,CAGhB,KAAK,QAAQ,kBAAkB,IAAM,CACnC,KAAK,YAAY,cAAc,iBAAiB,gBAAiB,KAAK,qBAAqB,CAC7F,CAAC,CACH,CACA,aAAc,CACZ,KAAK,YAAY,cAAc,oBAAoB,gBAAiB,KAAK,qBAAqB,CAChG,CAEA,yBAA0B,CACxB,MAAO,UAAU,KAAK,iBAAiB,EAAI,EAAI,KAAK,MAAQ,GAAG,GACjE,CAEA,wBAAyB,CACvB,MAAO,GAAG,KAAK,OAAS,SAAW,KAAK,YAAc,GAAG,GAC3D,CAEA,kBAAmB,CACjB,OAAO,KAAK,OAAS,iBAAmB,KAAK,OAAS,OACxD,CA0DF,EAxDIR,EAAK,UAAO,SAAgCW,EAAG,CAC7C,OAAO,IAAKA,GAAKX,GAAmBY,EAAqBC,EAAU,EAAMD,EAAqBE,EAAM,EAAMF,EAAqBG,EAAiB,EAAMH,EAAkBI,GAAuB,CAAC,EAAMJ,EAAkBK,GAAkC,CAAC,CAAC,CAC9P,EAGAjB,EAAK,UAAyBkB,GAAkB,CAC9C,KAAMlB,EACN,UAAW,CAAC,CAAC,kBAAkB,CAAC,EAChC,UAAW,CAAC,OAAQ,cAAe,gBAAiB,IAAK,gBAAiB,MAAO,WAAY,KAAM,EAAG,uBAAwB,qBAAqB,EACnJ,SAAU,GACV,aAAc,SAAqCmB,EAAIC,EAAK,CACtDD,EAAK,IACJE,GAAY,gBAAiBD,EAAI,iBAAiB,EAAI,KAAOA,EAAI,KAAK,EAAE,OAAQA,EAAI,IAAI,EACxFE,GAAW,OAASF,EAAI,KAAK,EAC7BG,GAAY,0BAA2BH,EAAI,gBAAgB,EAAE,uCAAwC,CAACA,EAAI,gBAAgB,EAAE,qCAAsCA,EAAI,iBAAiB,CAAC,EAE/L,EACA,OAAQ,CACN,MAAO,QACP,MAAO,CAAII,EAAa,2BAA4B,QAAS,QAASC,EAAe,EACrF,YAAa,CAAID,EAAa,2BAA4B,cAAe,cAAeC,EAAe,EACvG,KAAM,MACR,EACA,QAAS,CACP,aAAc,cAChB,EACA,SAAU,CAAC,gBAAgB,EAC3B,WAAY,GACZ,SAAU,CAAIC,GAA6BC,EAAmB,EAC9D,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,cAAe,OAAQ,EAAG,6BAA6B,EAAG,CAAC,EAAG,iCAAiC,EAAG,CAAC,EAAG,kCAAkC,EAAG,CAAC,cAAe,OAAQ,EAAG,2BAA4B,kCAAkC,EAAG,CAAC,EAAG,gCAAgC,EAAG,CAAC,cAAe,OAAQ,EAAG,2BAA4B,oCAAoC,CAAC,EACpX,SAAU,SAAiCR,EAAIC,EAAK,CAC9CD,EAAK,IACJS,EAAe,EAAG,MAAO,CAAC,EAC1BC,EAAU,EAAG,MAAO,CAAC,EAAE,EAAG,MAAO,CAAC,EAClCC,EAAa,EACbF,EAAe,EAAG,MAAO,CAAC,EAC1BC,EAAU,EAAG,OAAQ,CAAC,EACtBC,EAAa,EACbF,EAAe,EAAG,MAAO,CAAC,EAC1BC,EAAU,EAAG,OAAQ,CAAC,EACtBC,EAAa,GAEdX,EAAK,IACJY,EAAU,EACVC,GAAY,aAAcZ,EAAI,uBAAuB,CAAC,EACtDW,EAAU,CAAC,EACXC,GAAY,YAAaZ,EAAI,wBAAwB,CAAC,EAE7D,EACA,OAAQ,CAAC,8kUAAolU,EAC7lU,cAAe,EACf,gBAAiB,CACnB,CAAC,EA1JL,IAAMrB,EAANC,EA6JA,OAAOD,CACT,GAAG,EAKH,SAASW,GAAMD,EAAGwB,EAAM,EAAGC,EAAM,IAAK,CACpC,OAAO,KAAK,IAAID,EAAK,KAAK,IAAIC,EAAKzB,CAAC,CAAC,CACvC,CACA,IAAI0B,IAAqC,IAAM,CAC7C,IAAMC,EAAN,MAAMA,CAAqB,CAgB3B,EAdIA,EAAK,UAAO,SAAsCzB,EAAG,CACnD,OAAO,IAAKA,GAAKyB,EACnB,EAGAA,EAAK,UAAyBC,GAAiB,CAC7C,KAAMD,CACR,CAAC,EAGDA,EAAK,UAAyBE,GAAiB,CAC7C,QAAS,CAACC,EAAe,CAC3B,CAAC,EAdL,IAAMJ,EAANC,EAiBA,OAAOD,CACT,GAAG,ECFH,IAAIK,IAAgC,IAAM,CACxC,IAAMC,EAAN,MAAMA,CAAgB,CActB,EAZIA,EAAK,UAAO,SAAiCC,EAAG,CAC9C,OAAO,IAAKA,GAAKD,EACnB,EAGAA,EAAK,UAAyBE,GAAiB,CAC7C,KAAMF,CACR,CAAC,EAGDA,EAAK,UAAyBG,GAAiB,CAAC,CAAC,EAZrD,IAAMJ,EAANC,EAeA,OAAOD,CACT,GAAG,ECnMH,SAASK,GAAqDC,EAAIC,EAAK,CACrE,GAAID,EAAK,EAAG,CACV,IAAME,EAASC,EAAiB,EAC7BC,EAAe,EAAG,SAAU,CAAC,EAC7BC,EAAW,QAAS,UAAwF,CAE7G,IAAMC,EADiBC,EAAcL,CAAG,EACV,UACxBM,EAAYC,EAAc,CAAC,EACjC,OAAUC,EAAYF,EAAO,gBAAgBF,CAAS,CAAC,CACzD,CAAC,EACEK,EAAO,CAAC,EACRC,EAAa,CAClB,CACA,GAAIZ,EAAK,EAAG,CACV,IAAMM,EAAYL,EAAI,UACnBY,EAAU,EACVC,GAAkBR,CAAS,CAChC,CACF,CACA,SAASS,GAA2Df,EAAIC,EAAK,CAC3E,GAAID,EAAK,EAAG,CACV,IAAMgB,EAAUb,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA8F,CAChHE,EAAcS,CAAI,EACrB,IAAMC,EAAeR,EAAc,EAAE,UAC/BS,EAAaT,EAAc,CAAC,EAClC,OAAUC,EAAYQ,EAAQ,gBAAgBD,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAASQ,GAA2DpB,EAAIC,EAAK,CAC3E,GAAID,EAAK,EAAG,CACV,IAAMqB,EAAUlB,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA8F,CAChHE,EAAcc,CAAI,EACrB,IAAMJ,EAAeR,EAAc,EAAE,UAC/Ba,EAAab,EAAc,CAAC,EAClC,OAAUC,EAAYY,EAAQ,gBAAgBL,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAASW,GAA2DvB,EAAIC,EAAK,CAC3E,GAAID,EAAK,EAAG,CACV,IAAMwB,EAAUrB,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA8F,CAChHE,EAAciB,CAAI,EACrB,IAAMP,EAAeR,EAAc,EAAE,UAC/BgB,EAAahB,EAAc,CAAC,EAClC,OAAUC,EAAYe,EAAQ,gBAAgBR,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAASc,GAA2D1B,EAAIC,EAAK,CAC3E,GAAID,EAAK,EAAG,CACV,IAAM2B,EAAUxB,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA8F,CAChHE,EAAcoB,CAAI,EACrB,IAAMV,EAAeR,EAAc,EAAE,UAC/BmB,EAAanB,EAAc,CAAC,EAClC,OAAUC,EAAYkB,EAAQ,gBAAgBX,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAASiB,GAA2D7B,EAAIC,EAAK,CAC3E,GAAID,EAAK,EAAG,CACV,IAAM8B,EAAU3B,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA8F,CAChHE,EAAcuB,CAAI,EACrB,IAAMb,EAAeR,EAAc,EAAE,UAC/BsB,EAAatB,EAAc,CAAC,EAClC,OAAUC,EAAYqB,EAAQ,gBAAgBd,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAASoB,GAA2DhC,EAAIC,EAAK,CAC3E,GAAID,EAAK,EAAG,CACV,IAAMiC,EAAU9B,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA8F,CAChHE,EAAc0B,CAAI,EACrB,IAAMhB,EAAeR,EAAc,EAAE,UAC/ByB,EAAazB,EAAc,CAAC,EAClC,OAAUC,EAAYwB,EAAQ,gBAAgBjB,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAASuB,GAA2DnC,EAAIC,EAAK,CAC3E,GAAID,EAAK,EAAG,CACV,IAAMoC,EAAUjC,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA8F,CAChHE,EAAc6B,CAAI,EACrB,IAAMnB,EAAeR,EAAc,EAAE,UAC/B4B,EAAa5B,EAAc,CAAC,EAClC,OAAUC,EAAY2B,EAAQ,gBAAgBpB,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAAS0B,GAA2DtC,EAAIC,EAAK,CAC3E,GAAID,EAAK,EAAG,CACV,IAAMuC,EAAUpC,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA8F,CAChHE,EAAcgC,CAAI,EACrB,IAAMtB,EAAeR,EAAc,EAAE,UAC/B+B,EAAa/B,EAAc,CAAC,EAClC,OAAUC,EAAY8B,EAAQ,gBAAgBvB,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAAS6B,GAA2DzC,EAAIC,EAAK,CAC3E,GAAID,EAAK,EAAG,CACV,IAAM0C,EAAUvC,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA8F,CAChHE,EAAcmC,CAAI,EACrB,IAAMzB,EAAeR,EAAc,EAAE,UAC/BkC,EAAalC,EAAc,CAAC,EAClC,OAAUC,EAAYiC,EAAQ,gBAAgB1B,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAASgC,GAA4D5C,EAAIC,EAAK,CAC5E,GAAID,EAAK,EAAG,CACV,IAAM6C,EAAU1C,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA+F,CACjHE,EAAcsC,CAAI,EACrB,IAAM5B,EAAeR,EAAc,EAAE,UAC/BqC,EAAarC,EAAc,CAAC,EAClC,OAAUC,EAAYoC,EAAQ,gBAAgB7B,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAASmC,GAA4D/C,EAAIC,EAAK,CAC5E,GAAID,EAAK,EAAG,CACV,IAAMgD,EAAU7C,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA+F,CACjHE,EAAcyC,CAAI,EACrB,IAAM/B,EAAeR,EAAc,EAAE,UAC/BwC,EAAaxC,EAAc,CAAC,EAClC,OAAUC,EAAYuC,EAAQ,gBAAgBhC,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAASsC,GAA4DlD,EAAIC,EAAK,CAC5E,GAAID,EAAK,EAAG,CACV,IAAMmD,EAAUhD,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA+F,CACjHE,EAAc4C,CAAI,EACrB,IAAMlC,EAAeR,EAAc,EAAE,UAC/B2C,EAAa3C,EAAc,CAAC,EAClC,OAAUC,EAAY0C,EAAQ,gBAAgBnC,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAASyC,GAA4DrD,EAAIC,EAAK,CAC5E,GAAID,EAAK,EAAG,CACV,IAAMsD,EAAUnD,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA+F,CACjHE,EAAc+C,CAAI,EACrB,IAAMrC,EAAeR,EAAc,EAAE,UAC/B8C,EAAa9C,EAAc,CAAC,EAClC,OAAUC,EAAY6C,EAAQ,gBAAgBtC,CAAS,CAAC,CAC1D,CAAC,EACEE,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,CAClB,CACF,CACA,SAAS4C,GAAkDxD,EAAIC,EAAK,CAMlE,GALID,EAAK,IACJI,EAAe,EAAG,KAAK,EACvBqD,EAAW,EAAG1C,GAA4D,EAAG,EAAG,SAAU,EAAE,EAAE,EAAGK,GAA4D,EAAG,EAAG,SAAU,EAAE,EAAE,EAAGG,GAA4D,EAAG,EAAG,SAAU,EAAE,EAAE,EAAGG,GAA4D,EAAG,EAAG,SAAU,EAAE,EAAE,EAAGG,GAA4D,EAAG,EAAG,SAAU,EAAE,EAAE,EAAGG,GAA4D,EAAG,EAAG,SAAU,EAAE,EAAE,EAAGG,GAA4D,EAAG,EAAG,SAAU,EAAE,EAAE,EAAGG,GAA4D,EAAG,EAAG,SAAU,EAAE,EAAE,EAAGG,GAA4D,EAAG,EAAG,SAAU,EAAE,EAAE,GAAIG,GAA6D,EAAG,EAAG,SAAU,EAAE,EAAE,GAAIG,GAA6D,EAAG,EAAG,SAAU,EAAE,EAAE,GAAIG,GAA6D,EAAG,EAAG,SAAU,EAAE,EAAE,GAAIG,GAA6D,EAAG,EAAG,SAAU,EAAE,EACxkCzC,EAAa,GAEdZ,EAAK,EAAG,CACV,IAAMiB,EAAYhB,EAAI,UACnBY,EAAU,EACV6C,EAAW,OAAQzC,GAAa,UAAU,EAC1CJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,YAAY,EAC5CJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,aAAa,EAC7CJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,cAAc,EAC9CJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,UAAU,EAC1CJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,YAAY,EAC5CJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,YAAY,EAC5CJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,YAAY,EAC5CJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,oBAAoB,EACpDJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,wBAAwB,EACxDJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,aAAa,EAC7CJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,iBAAiB,EACjDJ,EAAU,EACV6C,EAAW,OAAQzC,GAAa,eAAe,CACpD,CACF,CACA,SAAS0C,GAA4C3D,EAAIC,EAAK,CAa5D,GAZID,EAAK,IACJ4D,GAAwB,CAAC,EACzBxD,EAAe,EAAG,MAAO,CAAC,EAAE,EAAG,MAAO,CAAC,EAAE,EAAG,SAAU,CAAC,EACvDe,EAAU,EAAG,IAAK,CAAC,EACnBP,EAAa,EACbR,EAAe,EAAG,WAAY,EAAG,CAAC,EAClCqD,EAAW,EAAG1D,GAAsD,EAAG,EAAG,SAAU,CAAC,EACrFa,EAAa,EAAE,EACf6C,EAAW,EAAGD,GAAmD,GAAI,GAAI,MAAO,CAAC,EACjF5C,EAAa,EACbiD,GAAsB,GAEvB7D,EAAK,EAAG,CACV,IAAM8D,EAASC,GAAY,CAAC,EACtBC,EAAYvD,EAAc,EAC7BI,EAAU,CAAC,EACX6C,EAAW,oBAAqBI,CAAG,EACnCjD,EAAU,CAAC,EACX6C,EAAW,UAAWM,EAAO,OAAO,EACpCnD,EAAU,EACV6C,EAAW,UAAWM,EAAO,OAAO,CACzC,CACF,CACA,SAASC,GAAyCjE,EAAIC,EAAK,CACrDD,EAAK,IACJI,EAAe,EAAG,KAAM,EAAE,EAC1BO,EAAO,EAAG,MAAM,EAChBC,EAAa,EAEpB,CACA,SAASsD,GAA0ClE,EAAIC,EAAK,CACtDD,EAAK,IACJI,EAAe,EAAG,KAAM,EAAE,EAC1BO,EAAO,EAAG,SAAS,EACnBC,EAAa,EAEpB,CACA,SAASuD,GAA0CnE,EAAIC,EAAK,CACtDD,EAAK,IACJI,EAAe,EAAG,KAAM,EAAE,EAC1BO,EAAO,EAAG,aAAa,EACvBC,EAAa,EAEpB,CACA,SAASwD,GAA0CpE,EAAIC,EAAK,CACtDD,EAAK,IACJI,EAAe,EAAG,KAAM,EAAE,EAC1BO,EAAO,EAAG,aAAa,EACvBC,EAAa,EAEpB,CACA,SAASyD,GAA0CrE,EAAIC,EAAK,CACtDD,EAAK,IACJI,EAAe,EAAG,KAAM,EAAE,EAC1BO,EAAO,EAAG,SAAS,EACnBC,EAAa,EAEpB,CACA,SAAS0D,GAAqDtE,EAAIC,EAAK,CAMrE,GALID,EAAK,IACJI,EAAe,EAAG,MAAO,EAAE,EAAE,EAAG,OAAQ,EAAE,EAC1Ce,EAAU,EAAG,GAAG,EAChBP,EAAa,EAAE,GAEhBZ,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,CAAC,EAAE,UACjC+D,GAAY,gBAAiBD,EAAQ,QAAQ,EAC7C1D,EAAU,CAAC,EACX4D,GAAuB,GAAIF,EAAQ,KAAM,QAAQ,CACtD,CACF,CACA,SAASG,GAA8D1E,EAAIC,EAAK,CAC9E,GAAID,EAAK,EAAG,CACV,IAAM2E,EAAUxE,EAAiB,EAC9ByD,GAAwB,CAAC,EACzBxD,EAAe,EAAG,MAAO,EAAE,EAAE,EAAG,OAAQ,EAAE,EAC1CC,EAAW,QAAS,UAA+F,CACjHE,EAAcoE,CAAI,EACrB,IAAMJ,EAAa9D,EAAc,CAAC,EAAE,UAC9BmE,EAAanE,EAAc,EACjC,OAAUC,EAAYkE,EAAQ,WAAWL,EAAQ,GAAI,aAAa,CAAC,CACrE,CAAC,EACEpD,EAAU,EAAG,GAAG,EAChBP,EAAa,EAAE,EACfiD,GAAsB,CAC3B,CACA,GAAI7D,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,CAAC,EAAE,UACjCI,EAAU,CAAC,EACXgE,GAAWN,EAAQ,IAAI,CAC5B,CACF,CACA,SAASO,GAA+C9E,EAAIC,EAAK,CAM/D,GALID,EAAK,IACJI,EAAe,EAAG,KAAM,EAAE,EAC1BqD,EAAW,EAAGa,GAAsD,EAAG,EAAG,MAAO,EAAE,EAAE,EAAGI,GAA+D,EAAG,EAAG,eAAgB,EAAE,EAC/K9D,EAAa,GAEdZ,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,EAAE,UAChCI,EAAU,EACV6C,EAAW,OAAQa,EAAQ,OAAS,0BAA0B,EAC9D1D,EAAU,EACV6C,EAAW,OAAQa,EAAQ,UAAYA,EAAQ,OAAS,0BAA0B,CACvF,CACF,CACA,SAASQ,GAAuC/E,EAAIC,EAAK,CACvD,GAAID,EAAK,EAAG,CACV,IAAMgF,EAAU7E,EAAiB,EAC9BC,EAAe,EAAG,MAAO,EAAE,EAAE,EAAG,OAAQ,EAAE,EAC1CC,EAAW,QAAS,UAAwE,CAC1FE,EAAcyE,CAAI,EACrB,IAAMT,EAAa9D,EAAc,EAAE,UAC7BwE,EAAaxE,EAAc,EACjC,OAAUC,EAAYuE,EAAQ,WAAWV,EAAQ,GAAI,SAAS,CAAC,CACjE,CAAC,EACE5D,EAAO,CAAC,EACRC,EAAa,EACbD,EAAO,EAAG,WAAW,EACrBC,EAAa,CAClB,CACA,GAAIZ,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,EAAE,UAChC+D,GAAY,gBAAiBD,EAAQ,QAAQ,EAC7C1D,EAAU,CAAC,EACXqE,GAAmB,OAAQX,EAAQ,KAAM,EAAE,CAChD,CACF,CACA,SAASY,GAAgDnF,EAAIC,EAAK,CAChE,GAAID,EAAK,EAAG,CACV,IAAMoF,EAAUjF,EAAiB,EAC9ByD,GAAwB,CAAC,EACzBxD,EAAe,EAAG,MAAO,EAAE,EAAE,EAAG,OAAQ,EAAE,EAC1CC,EAAW,QAAS,UAAiF,CACnGE,EAAc6E,CAAI,EACrB,IAAMb,EAAa9D,EAAc,EAAE,UAC7B4E,EAAa5E,EAAc,EACjC,OAAUC,EAAY2E,EAAQ,WAAWd,EAAQ,GAAI,aAAa,CAAC,CACrE,CAAC,EACE5D,EAAO,CAAC,EACRC,EAAa,EACbD,EAAO,EAAG,WAAW,EACrBC,EAAa,EACbiD,GAAsB,CAC3B,CACA,GAAI7D,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,EAAE,UAChCI,EAAU,CAAC,EACXqE,GAAmB,OAAQX,EAAQ,KAAM,EAAE,CAChD,CACF,CACA,SAASe,GAA8DtF,EAAIC,EAAK,CAM9E,GALID,EAAK,IACJ4D,GAAwB,CAAC,EACzBjD,EAAO,CAAC,EACRkD,GAAsB,GAEvB7D,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,CAAC,EAAE,UACjCI,EAAU,EACVqE,GAAmB,IAAKX,EAAQ,aAAc,GAAG,CACtD,CACF,CACA,SAASgB,GAA+CvF,EAAIC,EAAK,CAM/D,GALID,EAAK,IACJI,EAAe,EAAG,KAAM,EAAE,EAC1BqD,EAAW,EAAG6B,GAA+D,EAAG,EAAG,eAAgB,EAAE,EACrG1E,EAAa,GAEdZ,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,EAAE,UAChCI,EAAU,EACV6C,EAAW,OAAQa,EAAQ,OAAS,0BAA0B,CACnE,CACF,CACA,SAASiB,GAA8DxF,EAAIC,EAAK,CAM9E,GALID,EAAK,IACJ4D,GAAwB,CAAC,EACzBjD,EAAO,CAAC,EACRkD,GAAsB,GAEvB7D,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,CAAC,EAAE,UACjCI,EAAU,EACVqE,GAAmB,IAAKX,EAAQ,eAAgB,GAAG,CACxD,CACF,CACA,SAASkB,GAA+CzF,EAAIC,EAAK,CAM/D,GALID,EAAK,IACJI,EAAe,EAAG,KAAM,EAAE,EAC1BqD,EAAW,EAAG+B,GAA+D,EAAG,EAAG,eAAgB,EAAE,EACrG5E,EAAa,GAEdZ,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,EAAE,UAChCI,EAAU,EACV6C,EAAW,OAAQa,EAAQ,OAAS,0BAA0B,CACnE,CACF,CACA,SAASmB,GAA8D1F,EAAIC,EAAK,CAO9E,GANID,EAAK,IACJ4D,GAAwB,CAAC,EACzBjD,EAAO,CAAC,EACRgF,GAAO,EAAG,MAAM,EAChB9B,GAAsB,GAEvB7D,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,CAAC,EAAE,UACjCI,EAAU,EACVqE,GAAmB,IAAQU,GAAY,EAAG,EAAGrB,EAAQ,iBAAmB,IAAK,uBAAuB,EAAG,GAAG,CAC/G,CACF,CACA,SAASsB,GAA+C7F,EAAIC,EAAK,CAM/D,GALID,EAAK,IACJI,EAAe,EAAG,KAAM,EAAE,EAC1BqD,EAAW,EAAGiC,GAA+D,EAAG,EAAG,eAAgB,EAAE,EACrG9E,EAAa,GAEdZ,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,EAAE,UAChCI,EAAU,EACV6C,EAAW,OAAQa,EAAQ,OAAS,0BAA0B,CACnE,CACF,CACA,SAASuB,GAAgD9F,EAAIC,EAAK,CAChE,GAAID,EAAK,EAAG,CACV,IAAMoC,EAAUjC,EAAiB,EAC9BC,EAAe,EAAG,KAAM,EAAE,EAAE,EAAG,kBAAmB,EAAE,EACpDC,EAAW,cAAe,SAAgG0F,EAAQ,CAChIxF,EAAc6B,CAAI,EACrB,IAAMmC,EAAa9D,EAAc,EAAE,UAC7B4B,EAAa5B,EAAc,EACjC,OAAUC,EAAY2B,EAAQ,WAAWkC,EAAQ,GAAIwB,CAAM,CAAC,CAC9D,CAAC,EACEnF,EAAa,EAAE,CACpB,CACA,GAAIZ,EAAK,EAAG,CACV,IAAMuE,EAAa9D,EAAc,EAAE,UAChCI,EAAU,EACV6C,EAAW,UAAWa,EAAQ,OAAO,CAC1C,CACF,CACA,SAASyB,GAAiChG,EAAIC,EAAK,CACjD,GAAID,EAAK,EAAG,CACV,IAAMuC,EAAUpC,EAAiB,EAC9BC,EAAe,EAAG,IAAI,EAAE,EAAG,KAAM,EAAE,EAAE,EAAG,QAAS,CAAC,EAClD6F,GAAiB,gBAAiB,SAAyEF,EAAQ,CAEpH,IAAMxB,EADiBhE,EAAcgC,CAAI,EACb,UAC5B,OAAG2D,GAAmB3B,EAAQ,SAAUwB,CAAM,IAAMxB,EAAQ,SAAWwB,GAC7DrF,EAAYqF,CAAM,CAC9B,CAAC,EACE1F,EAAW,SAAU,UAAoE,CAE1F,IAAMkE,EADiBhE,EAAcgC,CAAI,EACb,UACtBI,EAAalC,EAAc,EACjC,OAAUC,EAAYiC,EAAQ,kBAAkB4B,CAAO,CAAC,CAC1D,CAAC,EACE3D,EAAa,EAAE,EACf6C,EAAW,EAAGqB,GAAgD,EAAG,EAAG,KAAM,CAAC,EAC3E1E,EAAe,EAAG,KAAM,EAAE,EAC1BqD,EAAW,EAAGsB,GAAwC,EAAG,EAAG,MAAO,EAAE,EAAE,EAAGI,GAAiD,EAAG,EAAG,eAAgB,EAAE,EACnJvE,EAAa,EACb6C,EAAW,EAAG8B,GAAgD,EAAG,EAAG,KAAM,CAAC,EAAE,EAAGE,GAAgD,EAAG,EAAG,KAAM,CAAC,EAAE,EAAGI,GAAgD,EAAG,EAAG,KAAM,EAAE,EAAE,GAAIC,GAAiD,EAAG,EAAG,KAAM,EAAE,EACrRlF,EAAa,CAClB,CACA,GAAIZ,EAAK,EAAG,CACV,IAAMuE,EAAUtE,EAAI,UACdO,EAAYC,EAAc,EAC7BI,EAAU,CAAC,EACXsF,GAAiB,UAAW5B,EAAQ,QAAQ,EAC5C1D,EAAU,EACVuF,EAAc,EAAG5F,EAAO,cAAc,eAAiB,EAAI,EAAE,EAC7DK,EAAU,CAAC,EACX6C,EAAW,OAAQa,EAAQ,OAAS,0BAA0B,EAC9D1D,EAAU,EACV6C,EAAW,OAAQa,EAAQ,UAAYA,EAAQ,OAAS,0BAA0B,EAClF1D,EAAU,EACVuF,EAAc,EAAG5F,EAAO,cAAc,kBAAoB,EAAI,EAAE,EAChEK,EAAU,EACVuF,EAAc,EAAG5F,EAAO,cAAc,qBAAuB,EAAI,EAAE,EACnEK,EAAU,EACVuF,EAAc,EAAG5F,EAAO,cAAc,uBAAyB,EAAI,EAAE,EACrEK,EAAU,EACVuF,EAAc,GAAI5F,EAAO,cAAc,iBAAmB,GAAK,EAAE,CACtE,CACF,CACA,SAAS6F,GAAmCrG,EAAIC,EAAK,CAC/CD,EAAK,IACJI,EAAe,EAAG,MAAO,EAAE,EAC3Be,EAAU,EAAG,IAAK,EAAE,EACpBR,EAAO,EAAG,iCAAiC,EAC3CC,EAAa,EAEpB,CACA,SAAS0F,GAAmCtG,EAAIC,EAAK,CAC/CD,EAAK,IACJI,EAAe,EAAG,MAAO,EAAE,EAC3Be,EAAU,EAAG,IAAK,EAAE,EACpBR,EAAO,EAAG,sDAAsD,EAChEC,EAAa,EAEpB,CACA,SAAS2F,GAAsCvG,EAAIC,EAAK,CACtD,GAAID,EAAK,EAAG,CACV,IAAMwG,EAASrG,EAAiB,EAC7BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAAyE,CAC3FE,EAAciG,CAAG,EACpB,IAAMC,EAAYhG,EAAc,EAChC,OAAUC,EAAY+F,EAAO,KAAK,CAAC,CACrC,CAAC,EACEtF,EAAU,EAAG,IAAK,EAAE,EACpBR,EAAO,EAAG,aAAa,EACvBC,EAAa,CAClB,CACF,CACA,SAAS8F,GAAmC1G,EAAIC,EAAK,CACnD,GAAID,EAAK,EAAG,CACV,IAAM2G,EAASxG,EAAiB,EAC7BC,EAAe,EAAG,MAAO,EAAE,EAC3BC,EAAW,qBAAsB,SAA8E0F,EAAQ,CACrHxF,EAAcoG,CAAG,EACpB,IAAMC,EAAYnG,EAAc,EAChC,OAAUC,EAAYkG,EAAO,oBAAoBb,CAAM,CAAC,CAC1D,CAAC,EACE3F,EAAe,EAAG,MAAO,EAAE,EAC3Be,EAAU,EAAG,IAAK,EAAE,EAAE,EAAG,IAAI,EAC7Bf,EAAe,EAAG,IAAK,EAAE,EACzBO,EAAO,EAAG,0BAA0B,EACpCC,EAAa,EACbR,EAAe,EAAG,IAAK,EAAE,EACzBO,EAAO,EAAG,IAAI,EACdC,EAAa,EACbR,EAAe,EAAG,QAAS,EAAE,EAC7BC,EAAW,SAAU,SAAoE0F,EAAQ,CAC/FxF,EAAcoG,CAAG,EACpB,IAAME,EAAYpG,EAAc,EAChC,OAAUC,EAAYmG,EAAO,qBAAqBd,CAAM,CAAC,CAC3D,CAAC,EACEnF,EAAa,EACbR,EAAe,EAAG,QAAS,EAAE,EAAE,GAAI,OAAQ,EAAE,EAC7CO,EAAO,GAAI,kBAAkB,EAC7BC,EAAa,EAAE,EAAE,EAAE,CACxB,CACF,CACA,SAASkG,GAAmC9G,EAAIC,EAAK,CAC/CD,EAAK,IACJI,EAAe,EAAG,KAAK,EAAE,EAAG,MAAO,EAAE,EAAE,EAAG,MAAO,EAAE,EACnDe,EAAU,EAAG,IAAK,EAAE,EACpBP,EAAa,EACbR,EAAe,EAAG,MAAO,EAAE,EAAE,EAAG,KAAM,EAAE,EAAE,EAAG,QAAQ,EACrDO,EAAO,EAAG,SAAS,EACnBC,EAAa,EAAE,EACfR,EAAe,EAAG,IAAK,EAAE,EACzBO,EAAO,EAAG,2LAA2L,EACrMC,EAAa,EAAE,EAAE,EAAE,EAE1B,CACA,SAASmG,GAAsC/G,EAAIC,EAAK,CACtD,GAAID,EAAK,EAAG,CACV,IAAMgH,EAAU7G,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAAyE,CAC3FE,EAAcyG,CAAI,EACrB,IAAMC,EAAYxG,EAAc,EAChC,OAAUC,EAAYuG,EAAO,OAAO,CAAC,CACvC,CAAC,EACE9F,EAAU,EAAG,IAAK,EAAE,EACpBR,EAAO,EAAG,cAAc,EACxBC,EAAa,CAClB,CACF,CACA,SAASsG,GAAsClH,EAAIC,EAAK,CACtD,GAAID,EAAK,EAAG,CACV,IAAMmH,EAAUhH,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,SAAuE0F,EAAQ,CACjGxF,EAAc4G,CAAI,EACrB,IAAMC,EAAa3G,EAAc,EACjC,OAAUC,EAAY0G,EAAQ,eAAerB,CAAM,CAAC,CACtD,CAAC,EACE5E,EAAU,EAAG,IAAK,EAAE,EACpBR,EAAO,EAAG,iBAAiB,EAC3BC,EAAa,CAClB,CACF,CACA,SAASyG,GAAmDrH,EAAIC,EAAK,CACnE,GAAID,EAAK,EAAG,CACV,IAAMsH,EAAUnH,EAAiB,EAC9ByD,GAAwB,CAAC,EACzBxD,EAAe,EAAG,MAAO,EAAE,EAAE,EAAG,MAAO,EAAE,EAAE,EAAG,MAAO,EAAE,EAAE,EAAG,MAAO,EAAE,EAAE,EAAG,IAAK,EAAE,EACjFO,EAAO,CAAC,EACRC,EAAa,EAAE,EACfR,EAAe,EAAG,IAAK,EAAE,EACzBO,EAAO,CAAC,EACRC,EAAa,EACbR,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAAsF,CAE3G,IAAMkH,EADiBhH,EAAc+G,CAAI,EACf,MACpBE,EAAa/G,EAAc,CAAC,EAClC,OAAUC,EAAY8G,EAAQ,iBAAiBD,CAAK,CAAC,CACvD,CAAC,EACEpG,EAAU,GAAI,IAAK,EAAE,EACrBP,EAAa,EAAE,EAAE,EAAE,EACnBiD,GAAsB,CAC3B,CACA,GAAI7D,EAAK,EAAG,CACV,IAAMyH,EAAWxH,EAAI,UAClBY,EAAU,CAAC,EACXC,GAAkB2G,EAAS,KAAK,IAAI,EACpC5G,EAAU,CAAC,EACXqE,GAAmB,IAAKuC,EAAS,KAAK,KAAO,KAAO,MAAM,QAAQ,CAAC,EAAG,KAAK,CAChF,CACF,CACA,SAASC,GAAoC1H,EAAIC,EAAK,CAMpD,GALID,EAAK,IACJI,EAAe,EAAG,KAAK,EACvBqD,EAAW,EAAG4D,GAAoD,GAAI,EAAG,eAAgB,EAAE,EAC3FzG,EAAa,GAEdZ,EAAK,EAAG,CACV,IAAMyG,EAAYhG,EAAc,EAC7BI,EAAU,EACV6C,EAAW,UAAW+C,EAAO,aAAa,CAC/C,CACF,CACA,SAASkB,GAA4D3H,EAAIC,EAAK,CAe5E,GAdID,EAAK,IACJ4D,GAAwB,CAAC,EACzBzC,EAAU,EAAG,MAAO,EAAE,EACtBf,EAAe,EAAG,MAAO,EAAE,EAAE,EAAG,MAAO,EAAE,EAAE,EAAG,IAAK,EAAE,EACrDO,EAAO,CAAC,EACRC,EAAa,EAAE,EACfR,EAAe,EAAG,IAAK,EAAE,EAAE,EAAG,QAAQ,EACtCO,EAAO,CAAC,EACRC,EAAa,EAAE,EAAE,EACjBR,EAAe,EAAG,KAAK,EACvBe,EAAU,GAAI,mBAAoB,EAAE,EACpCP,EAAa,EACbiD,GAAsB,GAEvB7D,EAAK,EAAG,CACV,IAAM4H,EAAa3H,EAAI,UACpBY,EAAU,CAAC,EACXC,GAAkB8G,GAAc,MAAcA,EAAW,MAAQ,KAA1B,KAAwCA,EAAW,KAAK,IAAI,EACnG/G,EAAU,CAAC,EACXqE,GAAmB,GAAI0C,GAAc,KAAO,KAAOA,EAAW,SAAU,GAAG,EAC3E/G,EAAU,CAAC,EACX6C,EAAW,QAASkE,GAAc,KAAO,KAAOA,EAAW,QAAQ,EAAE,QAAS,SAAS,CAC5F,CACF,CACA,SAASC,GAA6C7H,EAAIC,EAAK,CAM7D,GALID,EAAK,IACJ4D,GAAwB,CAAC,EACzBH,EAAW,EAAGkE,GAA6D,GAAI,EAAG,eAAgB,EAAE,EACpG9D,GAAsB,GAEvB7D,EAAK,EAAG,CACV,IAAMQ,EAAYC,EAAc,EAC7BI,EAAU,EACV6C,EAAW,UAAWlD,EAAO,aAAa,CAC/C,CACF,CACA,SAASsH,GAA+C9H,EAAIC,EAAK,CAC/D,GAAID,EAAK,EAAG,CACV,IAAM+H,EAAS5H,EAAiB,EAC7BC,EAAe,EAAG,QAAS,CAAC,EAAE,EAAG,OAAO,EAAE,EAAG,IAAI,EAAE,EAAG,IAAI,EAC1DO,EAAO,EAAG,YAAY,EACtBC,EAAa,EACbR,EAAe,EAAG,IAAI,EACtBO,EAAO,CAAC,EACRC,EAAa,EAAE,EACfR,EAAe,EAAG,IAAI,EAAE,EAAG,IAAI,EAC/BO,EAAO,EAAG,kBAAkB,EAC5BC,EAAa,EACbR,EAAe,GAAI,IAAI,EACvBO,EAAO,EAAE,EACTC,EAAa,EAAE,EACfR,EAAe,GAAI,IAAI,EAAE,GAAI,IAAI,EACjCO,EAAO,GAAI,gBAAgB,EAC3BC,EAAa,EACbR,EAAe,GAAI,IAAI,EACvBO,EAAO,EAAE,EACTgF,GAAO,GAAI,MAAM,EACjB/E,EAAa,EAAE,EACfR,EAAe,GAAI,IAAI,EAAE,GAAI,KAAM,CAAC,EAAE,GAAI,SAAU,CAAC,EACrDC,EAAW,QAAS,UAAmF,CAExG,IAAM2H,EADiBzH,EAAcwH,CAAG,EACE,UACpCE,EAAYxH,EAAc,EAChC,OAAUC,EAAYuH,EAAO,4BAA4BD,EAAsB,EAAE,CAAC,CACpF,CAAC,EACE7G,EAAU,GAAI,IAAK,CAAC,EACpBR,EAAO,GAAI,sBAAsB,EACjCC,EAAa,EAAE,EAAE,EAAE,EAAE,CAC1B,CACA,GAAIZ,EAAK,EAAG,CACV,IAAMgI,EAAwB/H,EAAI,UAC/BY,EAAU,CAAC,EACXqE,GAAmB,IAAK8C,EAAsB,SAAU,EAAE,EAC1DnH,EAAU,CAAC,EACXC,GAAkBkH,EAAsB,aAAa,EACrDnH,EAAU,CAAC,EACXC,GAAqB8E,GAAY,GAAI,EAAGoC,EAAsB,aAAe,IAAK,uBAAuB,CAAC,CAC/G,CACF,CACA,SAASE,GAAqFlI,EAAIC,EAAK,CACjGD,EAAK,IACJ4D,GAAwB,CAAC,EACzBzC,EAAU,EAAG,IAAK,EAAE,EACpB0C,GAAsB,EAE7B,CACA,IAAMsE,GAAMC,IAAO,CACjB,oBAAqBA,CACvB,GACA,SAASC,GAAsErI,EAAIC,EAAK,CACtF,GAAID,EAAK,EAAG,CACV,IAAMsI,EAAUnI,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAAyG,CAE9H,IAAMkI,EADiBhI,EAAc+H,CAAI,EACZ,UACvBE,EAAa/H,EAAc,CAAC,EAClC,OAAUC,EAAY8H,EAAQ,aAAaD,EAAS,EAAE,CAAC,CACzD,CAAC,EACE5H,EAAO,CAAC,EACRQ,EAAU,EAAG,IAAK,EAAE,EACpBsC,EAAW,EAAGyE,GAAsF,EAAG,EAAG,eAAgB,CAAC,EAC3HtH,EAAa,CAClB,CACA,GAAIZ,EAAK,EAAG,CACV,IAAMuI,EAAWtI,EAAI,UACfwI,EAAQxI,EAAI,MACZyI,EAAQzI,EAAI,MACfY,EAAU,EACVqE,GAAmB,IAAKqD,EAAS,KAAM,EAAE,EACzC1H,EAAU,EACV6C,EAAW,UAAciF,GAAgB,EAAGR,GAAKM,GAAS,CAAC,CAAC,EAC5D5H,EAAU,EACV6C,EAAW,OAAQ+E,EAAQC,CAAK,CACrC,CACF,CACA,SAASE,GAA6D5I,EAAIC,EAAK,CAM7E,GALID,EAAK,IACJ4D,GAAwB,EAAG,EAAE,EAC7BH,EAAW,EAAG4E,GAAuE,EAAG,EAAG,SAAU,EAAE,EACvGxE,GAAsB,GAEvB7D,EAAK,EAAG,CACV,IAAM6I,EAAYpI,EAAc,CAAC,EAC9BI,EAAU,EACV6C,EAAW,UAAWmF,EAAO,YAAY,MAAM,EAAE,QAAQ,CAAC,CAC/D,CACF,CACA,SAASC,GAA8C9I,EAAIC,EAAK,CAM9D,GALID,EAAK,IACJI,EAAe,EAAG,MAAO,EAAE,EAC3BqD,EAAW,EAAGmF,GAA8D,EAAG,EAAG,eAAgB,EAAE,EACpGhI,EAAa,GAEdZ,EAAK,EAAG,CACV,IAAMgE,EAAYvD,EAAc,EAC7BI,EAAU,EACV6C,EAAW,OAAQM,EAAO,aAAeA,EAAO,YAAY,OAAS,CAAC,CAC3E,CACF,CACA,SAAS+E,GAAyC/I,EAAIC,EAAK,CACzD,GAAID,EAAK,EAAG,CACV,IAAMgJ,EAAU7I,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA4E,CAC9FE,EAAcyI,CAAI,EACrB,IAAMC,EAAaxI,EAAc,EACjC,OAAUC,EAAYuI,EAAQ,UAAUA,EAAQ,SAAUA,EAAQ,UAAU,CAAC,CAC/E,CAAC,EACE9H,EAAU,EAAG,IAAK,EAAE,EACpBR,EAAO,EAAG,mBAAmB,EAC7BC,EAAa,CAClB,CACF,CACA,SAASsI,GAAyClJ,EAAIC,EAAK,CACzD,GAAID,EAAK,EAAG,CACV,IAAMmJ,EAAUhJ,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA4E,CAC9FE,EAAc4I,CAAI,EACrB,IAAMvE,EAAanE,EAAc,EACjC,OAAUC,EAAYkE,EAAQ,YAAYA,EAAQ,SAAUA,EAAQ,UAAU,CAAC,CACjF,CAAC,EACEzD,EAAU,EAAG,IAAK,EAAE,EACpBR,EAAO,EAAG,qBAAqB,EAC/BC,EAAa,CAClB,CACF,CACA,SAASwI,GAAyCpJ,EAAIC,EAAK,CACzD,GAAID,EAAK,EAAG,CACV,IAAMqJ,EAAUlJ,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA4E,CAC9FE,EAAc8I,CAAI,EACrB,IAAMC,EAAa7I,EAAc,EACjC,OAAUC,EAAY4I,EAAQ,sBAAsB,CAAC,CACvD,CAAC,EACE3I,EAAO,EAAG,oBAAoB,EAC9BC,EAAa,CAClB,CACA,GAAIZ,EAAK,EAAG,CACV,IAAMuJ,EAAY9I,EAAc,EAC7BiD,EAAW,WAAY6F,EAAO,uBAAuB,CAAC,CAC3D,CACF,CACA,SAASC,GAAyCxJ,EAAIC,EAAK,CACzD,GAAID,EAAK,EAAG,CACV,IAAMyJ,EAAUtJ,EAAiB,EAC9BC,EAAe,EAAG,SAAU,EAAE,EAC9BC,EAAW,QAAS,UAA4E,CAC9FE,EAAckJ,CAAI,EACrB,IAAMvI,EAAaT,EAAc,EACjC,OAAUC,EAAYQ,EAAQ,oBAAoB,CAAC,CACrD,CAAC,EACEP,EAAO,EAAG,kBAAkB,EAC5BC,EAAa,CAClB,CACA,GAAIZ,EAAK,EAAG,CACV,IAAMyG,EAAYhG,EAAc,EAC7BiD,EAAW,WAAY+C,EAAO,uBAAuB,CAAC,CAC3D,CACF,CACA,SAASiD,GAAgD1J,EAAIC,EAAK,CAMhE,GALID,EAAK,IACJ4D,GAAwB,CAAC,EACzBzC,EAAU,EAAG,gBAAiB,EAAE,EAChC0C,GAAsB,GAEvB7D,EAAK,EAAG,CACV,IAAMQ,EAAYC,EAAc,EAC7BI,EAAU,EACV6C,EAAW,QAASlD,EAAO,KAAK,EAAE,gBAAiBA,EAAO,aAAa,CAC5E,CACF,CACA,SAASmJ,GAAuC3J,EAAIC,EAAK,CACnDD,EAAK,IACJI,EAAe,EAAG,KAAK,EAAE,EAAG,MAAO,EAAE,EACrCe,EAAU,EAAG,cAAe,EAAE,EAC9BP,EAAa,EAAE,EAEtB,CAmMA,IAAMgJ,GAAN,KAAuB,CAAC,EAClBC,GAAN,KAAqB,CACnB,aAAc,CACZ,KAAK,YAAc,kBACrB,CACA,YAAYC,EAAU,CACpB,GAAIA,EAAS,eAAiB,KAAOA,EAAS,eAAiB,KAAOA,EAAS,eAAiB,IAC9F,OAAOA,EAAS,aAAeA,EAAS,aAAe,KAEzD,MAAIA,EAAS,eAAiB,IACtB,IAAI,MAAMA,EAAS,aAAa,KAAK,EAEzCA,EAAS,eAAiB,IACtB,IAAI,MAAM,cAAc,EAE1B,IAAI,MAAM,uBAAuB,CACzC,CACF,EACIC,IAAmC,IAAM,CAC3C,IAAMC,EAAN,MAAMA,UAA2BH,EAAe,CAC9C,YAAYI,EAAsBC,EAAS,CACzC,MAAM,EACN,KAAK,qBAAuBD,EAC5B,KAAK,QAAUC,CACjB,CACM,IAAIC,EAAU,QAAAC,EAAA,sBAClB,IAAMN,EAAW,MAAM,KAAK,qBAAqB,SAAS,KAAK,QAASK,EAAU,KAAK,WAAW,EAClG,OAAO,KAAK,YAAYL,CAAQ,CAClC,GACM,KAAKK,EAAUE,EAAM,QAAAD,EAAA,sBACzB,IAAMN,EAAW,MAAM,KAAK,qBAAqB,UAAU,KAAK,QAASK,EAAUE,CAAI,EACvF,OAAO,KAAK,YAAYP,CAAQ,CAClC,GACM,IAAIK,EAAUE,EAAM,QAAAD,EAAA,sBACxB,IAAMN,EAAW,MAAM,KAAK,qBAAqB,SAAS,KAAK,QAASK,EAAUE,CAAI,EACtF,OAAO,KAAK,YAAYP,CAAQ,CAClC,GACM,OAAOK,EAAU,QAAAC,EAAA,sBACrB,MAAM,KAAK,qBAAqB,YAAY,KAAK,QAASD,CAAQ,CACpE,GAaF,EAXIH,EAAK,UAAO,SAAoCM,EAAG,CACjD,OAAO,IAAKA,GAAKN,GAAuBO,GAAYC,EAAoB,EAAMD,GAAS,eAAe,CAAC,CACzG,EAGAP,EAAK,WAA0BS,GAAmB,CAChD,MAAOT,EACP,QAASA,EAAmB,UAC5B,WAAY,MACd,CAAC,EA/BL,IAAMD,EAANC,EAkCA,OAAOD,CACT,GAAG,EAICW,IAAoC,IAAM,CAC5C,IAAMC,EAAN,MAAMA,CAAoB,CACxB,YAAYC,EAAYC,EAAgB,CACtC,KAAK,WAAaD,EAClB,KAAK,eAAiBC,CACxB,CAEM,SAASC,EAAgBC,EAAYC,EAAc,mBAAoB,QAAAZ,EAAA,sBAQ3E,OAPiB,MAAM,IAAI,QAAQa,GAAW,CAC5C,KAAK,WAAW,SAASH,EAAgBC,EAAY,IAAI,EAAE,KAAKG,GAAO,CACrED,EAAQC,CAAG,CACb,EAASC,GAAOf,EAAA,sBACda,EAAQE,CAAG,CACb,EAAC,CACH,CAAC,CAEH,GACM,UAAUL,EAAgBC,EAAYK,EAAMJ,EAAc,mBAAoB,QAAAZ,EAAA,sBAQlF,OAPiB,MAAM,IAAI,QAAQa,GAAW,CAC5C,KAAK,WAAW,UAAUH,EAAgBC,EAAY,KAAMK,CAAI,EAAE,KAAKF,GAAO,CAC5ED,EAAQC,CAAG,CACb,EAASC,GAAOf,EAAA,sBACda,EAAQE,CAAG,CACb,EAAC,CACH,CAAC,CAEH,GACM,SAASL,EAAgBC,EAAYK,EAAMJ,EAAc,mBAAoB,QAAAZ,EAAA,sBAQjF,OAPiB,MAAM,IAAI,QAAQa,GAAW,CAC5C,KAAK,WAAW,SAASH,EAAgBC,EAAY,KAAMK,CAAI,EAAE,KAAKF,GAAO,CAC3ED,EAAQC,CAAG,CACb,EAASC,GAAOf,EAAA,sBACda,EAAQE,CAAG,CACb,EAAC,CACH,CAAC,CAEH,GACM,YAAYL,EAAgBC,EAAYC,EAAc,mBAAoB,QAAAZ,EAAA,sBAQ9E,OAPiB,MAAM,IAAI,QAAQa,GAAW,CAC5C,KAAK,WAAW,YAAYH,EAAgBC,EAAY,IAAI,EAAE,KAAKG,GAAO,CACxED,EAAQC,CAAG,CACb,EAASC,GAAOf,EAAA,sBACda,EAAQE,CAAG,CACb,EAAC,CACH,CAAC,CAEH,GACM,cAAcL,EAAgBC,EAAYC,EAAc,mBAAoB,QAAAZ,EAAA,sBAChF,IAAMN,EAAW,MAAM,KAAK,SAASgB,EAAgBC,EAAYC,CAAW,EAC5E,OAAO,KAAK,YAAYlB,CAAQ,CAClC,GACM,eAAegB,EAAgBC,EAAYK,EAAMJ,EAAc,mBAAoB,QAAAZ,EAAA,sBACvF,IAAMN,EAAW,MAAM,KAAK,UAAUgB,EAAgBC,EAAYK,EAAMJ,CAAW,EACnF,OAAO,KAAK,YAAYlB,CAAQ,CAClC,GACM,cAAcgB,EAAgBC,EAAYK,EAAMJ,EAAc,mBAAoB,QAAAZ,EAAA,sBACtF,IAAMN,EAAW,MAAM,KAAK,SAASgB,EAAgBC,EAAYK,EAAMJ,CAAW,EAClF,OAAO,KAAK,YAAYlB,CAAQ,CAClC,GACM,aAAagB,EAAgBC,EAAYC,EAAc,kBAAmB,QAAAZ,EAAA,sBAQ9E,OAPiB,MAAM,IAAI,QAAQa,GAAW,CAC5C,KAAK,WAAW,aAAaH,EAAgBC,EAAY,IAAI,EAAE,KAAKG,GAAO,CACzED,EAAQC,CAAG,CACb,EAASC,GAAOf,EAAA,sBACda,EAAQE,CAAG,CACb,EAAC,CACH,CAAC,CAEH,GACA,YAAYrB,EAAU,CACpB,GAAIA,EAAS,eAAiB,KAAOA,EAAS,eAAiB,KAAOA,EAAS,eAAiB,IAC9F,OAAIA,EAAS,cAAgB,MAAQA,EAAS,cAAgB,KACrD,KAEFA,EAAS,aAElB,MAAIA,EAAS,eAAiB,IACtB,IAAI,MAAMA,EAAS,aAAa,EAEpCA,EAAS,eAAiB,IACtB,IAAI,MAAM,cAAc,EAE1B,IAAI,MAAM,uBAAuB,CACzC,CAGA,cAAcgB,EAAgBC,EAAYC,EAAc,mBAAoB,CAE1E,OADyB,KAAK,WAAW,cAAcF,EAAgBC,EAAY,IAAI,EACnE,KAAKM,GAAWC,GAAS,KAAK,gBAAgBA,CAAK,CACvE,CAAC,CACH,CACA,eAAeR,EAAgBC,EAAYK,EAAMJ,EAAc,mBAAoB,CAEjF,OAD0B,KAAK,WAAW,eAAeF,EAAgBC,EAAY,KAAMK,CAAI,EAC1E,KAAKC,GAAWC,GAAS,KAAK,gBAAgBA,CAAK,CACxE,CAAC,CACH,CACA,cAAcR,EAAgBC,EAAYK,EAAMJ,EAAc,mBAAoB,CAEhF,OADyB,KAAK,WAAW,cAAcF,EAAgBC,EAAY,KAAMK,CAAI,EACzE,KAAKC,GAAWC,GAAS,KAAK,gBAAgBA,CAAK,CACvE,CAAC,CACH,CACA,iBAAiBR,EAAgBC,EAAYC,EAAc,mBAAoB,CAE7E,OAD4B,KAAK,WAAW,iBAAiBF,EAAgBC,EAAY,IAAI,EACtE,KAAKM,GAAWC,GAAS,KAAK,gBAAgBA,CAAK,CAC1E,CAAC,CACH,CAGA,gBAAgBA,EAAO,CACrB,OAAOC,GAAG,CACR,aAAcD,EAAM,OACpB,gBAAiBA,EAAM,KACvB,cAAeA,EAAM,OACvB,CAAC,CACH,CAaF,EAXIX,EAAK,UAAO,SAAqCL,EAAG,CAClD,OAAO,IAAKA,GAAKK,GAAwBJ,GAAYiB,EAAU,EAAMjB,GAAYkB,EAAoB,CAAC,CACxG,EAGAd,EAAK,WAA0BF,GAAmB,CAChD,MAAOE,EACP,QAASA,EAAoB,UAC7B,WAAY,MACd,CAAC,EA5HL,IAAMD,EAANC,EA+HA,OAAOD,CACT,GAAG,EAICgB,IAAuC,IAAM,CAC/C,IAAMC,EAAN,MAAMA,UAA+B9B,EAAe,CAClD,YAAYK,EAAS0B,EAAqB,CACxC,MAAM,EACN,KAAK,QAAU1B,EACf,KAAK,oBAAsB0B,CAC7B,CACM,IAAIzB,EAAU,QAAAC,EAAA,sBAClB,IAAMN,EAAW,MAAM,KAAK,oBAAoB,SAAS,KAAK,QAASK,EAAU,KAAK,WAAW,EACjG,OAAO,KAAK,YAAYL,CAAQ,CAClC,GACM,KAAKK,EAAUE,EAAM,QAAAD,EAAA,sBACzB,IAAMN,EAAW,MAAM,KAAK,oBAAoB,UAAU,KAAK,QAASK,EAAUE,CAAI,EACtF,OAAO,KAAK,YAAYP,CAAQ,CAClC,GACM,IAAIK,EAAUE,EAAM,QAAAD,EAAA,sBACxB,IAAMN,EAAW,MAAM,KAAK,oBAAoB,SAAS,KAAK,QAASK,EAAUE,CAAI,EACrF,OAAO,KAAK,YAAYP,CAAQ,CAClC,GACM,OAAOK,EAAU,QAAAC,EAAA,sBACrB,MAAM,KAAK,oBAAoB,YAAY,KAAK,QAASD,CAAQ,CACnE,GAaF,EAXIwB,EAAK,UAAO,SAAwCrB,EAAG,CACrD,OAAO,IAAKA,GAAKqB,GAA2BpB,GAAS,eAAe,EAAMA,GAASG,EAAmB,CAAC,CACzG,EAGAiB,EAAK,WAA0BlB,GAAmB,CAChD,MAAOkB,EACP,QAASA,EAAuB,UAChC,WAAY,MACd,CAAC,EA/BL,IAAMD,EAANC,EAkCA,OAAOD,CACT,GAAG,EAICG,IAA4B,IAAM,CACpC,IAAMC,EAAN,MAAMA,CAAY,CAChB,YAAYC,EAAoBC,EAAqB,CACnD,KAAK,mBAAqBD,EAC1B,KAAK,oBAAsBC,CAC7B,CACM,eAAeC,EAAQC,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBAC5D,OAAI8B,EACK,MAAM,KAAK,oBAAoB,IAAI,4BAA4BD,CAAM,IAAIE,CAAS,IAAIC,CAAU,EAAE,EAElG,MAAM,KAAK,mBAAmB,IAAI,2BAA2BH,CAAM,EAAE,CAEhF,GACM,aAAaI,EAAUH,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBAC5D,OAAI8B,EACK,MAAM,KAAK,oBAAoB,OAAO,oBAAoBG,CAAQ,IAAIF,CAAS,IAAIC,CAAU,EAAE,EAE/F,MAAM,KAAK,mBAAmB,OAAO,mBAAmBC,CAAQ,EAAE,CAE7E,GACM,cAAcC,EAAiBJ,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBACpE,OAAI8B,EACK,MAAM,KAAK,oBAAoB,OAAO,2BAA2BI,CAAe,IAAIH,CAAS,IAAIC,CAAU,EAAE,EAE7G,MAAM,KAAK,mBAAmB,OAAO,0BAA0BE,CAAe,EAAE,CAE3F,GACM,eAAeC,EAAUL,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBAC9D,OAAI8B,EACK,MAAM,KAAK,oBAAoB,OAAO,4BAA4BK,CAAQ,IAAIJ,CAAS,IAAIC,CAAU,EAAE,EAEvG,MAAM,KAAK,mBAAmB,OAAO,2BAA2BG,CAAQ,EAAE,CAErF,GACM,WAAWC,EAAMN,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBACtD,GAAI8B,EAAU,CACZ,IAAIO,EAAcD,EAClB,OAAAC,EAAY,OAASN,EACrBM,EAAY,WAAaL,EAClB,MAAM,KAAK,oBAAoB,KAAK,mBAAoBK,CAAW,CAC5E,KACE,QAAO,MAAM,KAAK,mBAAmB,KAAK,kBAAmBD,CAAI,CAErE,GACM,kBAAkBE,EAAaR,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBACpE,GAAI8B,EAAU,CACZ,IAAIO,EAAcC,EAClB,OAAAD,EAAY,OAASN,EACrBM,EAAY,WAAaL,EAClB,MAAM,KAAK,oBAAoB,KAAK,0BAA2BK,CAAW,CACnF,KACE,QAAO,MAAM,KAAK,mBAAmB,KAAK,yBAA0BC,CAAW,CAEnF,GACM,cAAcC,EAAWT,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBAC9D,OAAI8B,EACK,MAAM,KAAK,oBAAoB,IAAI,2BAA2BS,CAAS,IAAIR,CAAS,IAAIC,CAAU,EAAE,EAEpG,MAAM,KAAK,mBAAmB,IAAI,0BAA4BO,CAAS,CAElF,GACM,iBAAiBC,EAAQV,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBAC9D,GAAI8B,EAAU,CACZ,IAAIW,EAAcD,EAClB,OAAAC,EAAY,OAASV,EACrBU,EAAY,WAAaT,EAClB,MAAM,KAAK,oBAAoB,KAAK,6BAA8BQ,CAAM,CACjF,KACE,QAAO,MAAM,KAAK,mBAAmB,KAAK,4BAA6BA,CAAM,CAEjF,GACM,wBAAwBE,EAAYZ,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBACzE,OAAI8B,GACoBY,EACN,QAAQL,GAAe,CACrCA,EAAY,OAASN,EACrBM,EAAY,WAAaL,CAC3B,CAAC,EACM,MAAM,KAAK,oBAAoB,KAAK,oCAAqCU,CAAU,GAEnF,MAAM,KAAK,mBAAmB,KAAK,mCAAoCA,CAAU,CAE5F,GACM,sBAAsBA,EAAY,QAAA1C,EAAA,sBACtC,OAAO,MAAM,KAAK,mBAAmB,KAAK,oCAAqC0C,CAAU,CAC3F,GACM,aAAaC,EAAIb,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBACtD,IAAI4C,EAAa,eAAe,QAAQ,cAAc,EACtD,OAAId,EACK,MAAM,KAAK,oBAAoB,IAAI,mCAAmCa,CAAE,IAAIC,CAAU,IAAIb,CAAS,IAAIC,CAAU,EAAE,EAEnH,MAAM,KAAK,mBAAmB,IAAI,kCAAkCW,CAAE,IAAIC,CAAU,EAAE,CAEjG,GACM,eAAef,EAAQC,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBAC5D,OAAI8B,EACK,MAAM,KAAK,oBAAoB,IAAI,4BAA4BD,CAAM,IAAIE,CAAS,IAAIC,CAAU,EAAE,EAElG,MAAM,KAAK,mBAAmB,IAAI,2BAA2BH,CAAM,EAAE,CAEhF,GACA,OAAO,WAAWO,EAAMN,EAAUC,EAAW,CAC3C,MAAO,GAAGK,EAAK,aAAa,IAAIA,EAAK,OAAO,IAAIA,EAAK,WAAW,EAClE,CACM,mBAAmBP,EAAQC,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBAChE,OAAI8B,EACK,MAAM,KAAK,oBAAoB,KAAK,gCAAgCD,CAAM,IAAIE,CAAS,IAAIC,CAAU,GAAI,IAAI,EAE7G,MAAM,KAAK,mBAAmB,KAAK,+BAA+BH,CAAM,GAAI,IAAI,CAE3F,GACM,wBAAwBA,EAAQC,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBACrE,OAAI8B,EACK,MAAM,KAAK,oBAAoB,IAAI,qCAAqCD,CAAM,IAAIE,CAAS,IAAIC,CAAU,EAAE,EAE3G,MAAM,KAAK,mBAAmB,IAAI,oCAAoCH,CAAM,EAAE,CAEzF,GACM,4BAA4BA,EAAQC,EAAUC,EAAWC,EAAY,QAAAhC,EAAA,sBACzE,OAAI8B,EACK,MAAM,KAAK,oBAAoB,IAAI,qCAAqCD,CAAM,IAAIE,CAAS,IAAIC,CAAU,EAAE,EAE3G,MAAM,KAAK,mBAAmB,IAAI,oCAAoCH,CAAM,EAAE,CAEzF,GAaF,EAXIH,EAAK,UAAO,SAA6BxB,EAAG,CAC1C,OAAO,IAAKA,GAAKwB,GAAgBvB,GAASR,EAAkB,EAAMQ,GAASmB,EAAsB,CAAC,CACpG,EAGAI,EAAK,WAA0BrB,GAAmB,CAChD,MAAOqB,EACP,QAASA,EAAY,UACrB,WAAY,MACd,CAAC,EAtIL,IAAMD,EAANC,EAyIA,OAAOD,CACT,GAAG,EAIGoB,GAAN,KAAsB,CACpB,aAAc,CACZ,KAAK,aAAe,IAAIC,GACxB,KAAK,aAAe,KAAK,aAAa,aAAa,EACnD,KAAK,iBAAmB,IAAIA,GAC5B,KAAK,iBAAmB,KAAK,iBAAiB,aAAa,CAC7D,CACA,kBAAkBC,EAAM,CACtB,KAAK,aAAa,KAAKA,CAAI,CAC7B,CACA,uBAAuBA,EAAM,CAC3B,KAAK,iBAAiB,KAAKA,CAAI,CACjC,CACF,EACIC,IAA4B,IAAM,CACpC,IAAMC,EAAN,MAAMA,CAAY,CACV,OAAOC,EAAYC,EAAS,QAAAnD,EAAA,sBAGhC,IAAMoD,EAFoB,IAAIC,GAAkB,GAAGH,EAAW,YAAY,GAAGA,EAAW,uBAAyB,IAAI,GAAI,IAAII,EAAqB,EACxG,mBAAmBJ,EAAW,aAAa,EAC7C,mBAAmBA,EAAW,UAAU,EAChF,GAAI,CAEF,OADiB,MAAME,EAAgB,eAAeD,CAAO,GAC7C,SAClB,OAASI,EAAG,CACV,MAAM,IAAI,MAAM,sCAAsCA,EAAE,UAAU,iBAAiBA,EAAE,QAAQ,SAAS,EAAE,CAC1G,CACF,GACA,OAAOL,EAAYd,EAAMe,EAAS,CAC3BA,IACHA,EAAU,CAAC,GAEbA,EAAQ,gBAAkB,CACxB,gBAAiBf,EAAK,IACxB,EAGA,IAAMgB,EAFoB,IAAIC,GAAkB,GAAGH,EAAW,YAAY,GAAGA,EAAW,uBAAyB,IAAI,GAAI,IAAII,EAAqB,EACxG,mBAAmBJ,EAAW,aAAa,EAC7C,mBAAmBA,EAAW,QAAQ,EAC9E,OAAO,IAAIM,GAAWC,GAAY,CAChCL,EAAgB,WAAWhB,EAAM,CAC/B,UAAWA,EAAK,KAAO,KAAO,KAAO,GAAK,KAAO,KAAO,EAAI,KAAO,IACnE,YAAa,EACb,WAAY,KAAK,WAAWqB,CAAQ,EACpC,gBAAiB,CACf,gBAAiBrB,EAAK,IACxB,CACF,CAAC,EAAE,KAAK,KAAK,iBAAiBqB,EAAUrB,CAAI,EAAG,KAAK,cAAcqB,CAAQ,CAAC,CAC7E,CAAC,CACH,CACA,cAAcA,EAAU,CACtB,OAAOvC,GAASuC,EAAS,MAAMvC,CAAK,CACtC,CACA,iBAAiBuC,EAAUrB,EAAM,CAC/B,MAAO,IAAM,CACXqB,EAAS,KAAKrB,EAAK,IAAI,EACvBqB,EAAS,SAAS,CACpB,CACF,CACA,WAAWA,EAAU,CACnB,OAAOC,GAAY,CACjBD,EAAS,KAAKC,EAAS,WAAW,CACpC,CACF,CAaF,EAXIT,EAAK,UAAO,SAA6B/C,EAAG,CAC1C,OAAO,IAAKA,GAAK+C,EACnB,EAGAA,EAAK,WAA0B5C,GAAmB,CAChD,MAAO4C,EACP,QAASA,EAAY,UACrB,WAAY,MACd,CAAC,EAzDL,IAAMD,EAANC,EA4DA,OAAOD,CACT,GAAG,EAIGW,GAAS,CACb,IAAK,OACL,KAAM,GACN,GAAI,KACN,EACMC,GAAU,CAACC,EAAIC,IAAOD,EAAKC,EAAK,GAAKD,EAAKC,EAAK,EAAI,EACrDC,IAAwC,IAAM,CAChD,IAAMC,EAAN,MAAMA,CAAwB,CAC5B,aAAc,CACZ,KAAK,SAAW,GAChB,KAAK,UAAY,GACjB,KAAK,KAAO,IAAIC,EAClB,CACA,QAAS,CACP,KAAK,UAAYN,GAAO,KAAK,SAAS,EACtC,KAAK,KAAK,KAAK,CACb,OAAQ,KAAK,SACb,UAAW,KAAK,SAClB,CAAC,CACH,CA8BF,EA5BIK,EAAK,UAAO,SAAyC9D,EAAG,CACtD,OAAO,IAAKA,GAAK8D,EACnB,EAGAA,EAAK,UAAyBE,GAAkB,CAC9C,KAAMF,EACN,UAAW,CAAC,CAAC,KAAM,WAAY,EAAE,CAAC,EAClC,SAAU,EACV,aAAc,SAA8CG,EAAIC,EAAK,CAC/DD,EAAK,GACJE,EAAW,QAAS,UAA4D,CACjF,OAAOD,EAAI,OAAO,CACpB,CAAC,EAECD,EAAK,GACJG,GAAY,MAAOF,EAAI,YAAc,KAAK,EAAE,OAAQA,EAAI,YAAc,MAAM,CAEnF,EACA,OAAQ,CACN,SAAU,WACV,UAAW,WACb,EACA,QAAS,CACP,KAAM,MACR,CACF,CAAC,EAxCL,IAAML,EAANC,EA2CA,OAAOD,CACT,GAAG,EAIGQ,GAAN,KAAoB,CAClB,aAAc,CACZ,KAAK,SAAW,EAClB,CACF,EACMC,GAAN,KAAoB,CAClB,aAAc,CACZ,KAAK,GAAK,GACV,KAAK,OAAS,GACd,KAAK,KAAO,EACd,CACF,EACIC,IAAsC,IAAM,CAC9C,IAAMC,EAAN,MAAMA,CAAsB,CAC1B,WAAWC,EAAS,CAClB,KAAK,eAAe,KAAKA,CAAO,CAClC,CACA,YAAYC,EAAYC,EAAaC,EAAgB,CACnD,KAAK,WAAaF,EAClB,KAAK,YAAcC,EACnB,KAAK,eAAiBC,EACtB,KAAK,cAAgB,CAAC,EACtB,KAAK,OAAS,GACd,KAAK,WAAa,GAClB,KAAK,QAAU,GACf,KAAK,OAAS,CAAC,EACf,KAAK,eAAiB,IAAIC,GAAgB,EAAK,EAC/C,KAAK,SAAW,KAAK,eAAe,aAAa,CACnD,CACM,YAAYC,EAAkBC,EAAe,QAAAjF,EAAA,sBACjD,KAAK,WAAW,EAAI,EACpB,KAAK,cAAgB,CAAC,EACtB,IAAIkF,EAAiB/D,GAAG8D,CAAa,EACjCE,EAAiB,KAAK,iBAAiBD,CAAc,EACrDE,EAAuB,KAAK,uBAAuBD,CAAc,EAEjEE,EADiB,KAAK,mBAAmBD,CAAoB,EAC7B,KAAKE,GAASC,GACzCC,GAAKD,CAAK,EAAE,KAAKE,GAAIC,GAAK,CAC/B,IAAMC,EAAQ,IAAIpB,GAClB,OAAAoB,EAAM,SAAWD,EAAE,SACnBC,EAAM,cAAgBD,EAAE,cACjBC,CACT,CAAC,EAAGC,GAAQ,CAAC,CACd,CAAC,EACEC,EAAQ,CAAC,EACbR,EAAe,UAAgBS,GAAK9F,EAAA,sBAClC6F,EAAQC,EACR,QAAQ,IAAI,kBAAmBA,CAAC,EAChC,MAAM,KAAK,UAAUD,EAAOb,CAAgB,CAC9C,EAAC,CACH,GACA,mBAAmBG,EAAgB,CACjC,OAAO,IAAI3B,GAAWuC,GAAc,CAClCZ,EAAe,KAAKM,GAAIO,IACtB,KAAK,cAAgBA,EACdR,GAAKQ,CAAG,EAAE,KAAKP,GAAIQ,GAAK,CAC7B,IAAIC,EAAW,KAAK,eAAeD,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,EACpDE,EAAgBF,EACpB,YAAK,OAAS,CAAC,EACR,CACL,cAAeE,EACf,SAAUD,CACZ,CACF,CAAC,EAAGN,GAAQ,CAAC,EACd,EAAGN,GAASrF,GACJA,CACR,CAAC,EAAE,UAAU,CACZ,KAAMA,GAAQ,CACZ8F,EAAW,KAAK9F,CAAI,CACtB,EACA,SAAU,IAAM,CACd8F,EAAW,SAAS,CACtB,EACA,MAAO7E,GAAS,CAAC,CACnB,CAAC,CACH,CAAC,CACH,CACA,iBAAiBgE,EAAgB,CAC/B,OAAO,IAAI1B,GAAWuC,GAAc,CAClCb,EAAe,UAAUW,GAAS,CAChCL,GAAKK,CAAK,EAAE,KAAKO,GAAOC,GACfA,EAAE,UAAYA,EAAE,SAAS,OAASb,GAAKa,EAAE,QAAQ,EAAIC,EAC7D,EAAGb,GAAIc,GAAK,CACX,IAAIC,EAAQ,IAAIhC,GAChB,OAAAgC,EAAM,GAAKD,EAAE,GACbC,EAAM,OAASD,EAAE,OACjBC,EAAM,KAAOD,EAAE,KACfC,EAAM,KAAOD,EAAE,KACRC,CACT,CAAC,EAAGC,GAASC,GAAgBA,EAAa,EAAE,EAAGd,GAAQ,CAAC,EAAE,UAAU,CAClE,KAAM3F,GAAQ,CACZ8F,EAAW,KAAK9F,CAAI,CACtB,EACA,SAAU,IAAM,CACd8F,EAAW,SAAS,CACtB,EACA,MAAO7E,GAAS,CAAC,CACnB,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACA,uBAAuBiE,EAAgB,CACrC,OAAO,IAAI3B,GAAWuC,GAAc,CAClCZ,EAAe,UAAUU,GAAS,CAChCL,GAAKK,CAAK,EAAE,KAAKc,GAAUX,GAEnBA,EAAI,KAAK,YACJ7E,GAAG6E,CAAG,EAEN,KAAK,yBAAyBA,EAAI,EAAE,EAAE,KAAKP,GAAIY,GAAK,CACzD,IAAIG,EAAQ,IAAIhC,GAChB,OAAAgC,EAAM,GAAKR,EAAI,GACfQ,EAAM,OAASR,EAAI,OACnBQ,EAAM,KAAOR,EAAI,KACjBQ,EAAM,KAAOR,EAAI,KACjBQ,EAAM,aAAeH,EACdG,CACT,CAAC,CAAC,CAGP,EAAGZ,GAAQ,CAAC,EAAE,UAAU,CACvB,KAAM3F,GAAQ,CACZ8F,EAAW,KAAK9F,CAAI,CACtB,EACA,SAAU,IAAM,CACd8F,EAAW,SAAS,CACtB,EACA,MAAO7E,GAAS,CAAC,CACnB,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACA,yBAAyByB,EAAI,CAC3B,OAAO6C,GAAK,KAAK,YAAY,aAAa7C,CAAE,CAAC,CAC/C,CACA,eAAeP,EAAM,CACnB,IAAIwE,EAAU,KAAK,cAAc,KAAKP,GAAKA,EAAE,GAAG,YAAY,IAAMjE,EAAK,GAAG,YAAY,CAAC,EACvF,GAAIwE,EAAS,CAIX,GAHI,KAAK,SAAW,SAClB,KAAK,OAAS,IAAI,OAEhBA,EAAQ,KAAK,YACf,KAAK,OAAO,KAAKA,EAAQ,IAAI,MACxB,CACL,IAAMC,EAAWD,EAAQ,cAAc,SACjCE,EAAeD,EAAS,YAAY,GAAG,EACvCE,EAAgBD,IAAiB,GAAKD,EAAS,UAAUC,EAAe,CAAC,EAAI,GACnF,KAAK,OAAO,KAAKF,EAAQ,KAAO,IAAMG,CAAa,CACrD,CACA,IAAIC,EAAO,KAAK,cAAc,KAAKX,GAAKA,EAAE,GAAG,YAAY,IAAMO,GAAS,OAAO,YAAY,CAAC,EACxFI,GACF,KAAK,eAAeA,CAAI,CAE5B,CACA,OAAO,KAAK,MACd,CACM,UAAUnB,EAAOoB,EAAS,QAAAjH,EAAA,sBAC9B,IAAIkH,EAAM,CAAC,EACX,MAAM,QAAQ,IAAIrB,EAAM,IAAUsB,GAAiBnH,EAAA,sBAC5CmH,EAAc,cAAc,KAAK,YAMpCD,EAAI,KAAK,CACP,KAAMC,EAAc,QACtB,CAAC,EAPDD,EAAI,KAAK,CACP,OAAQ,MAAM,MAAMzF,GAAY,WAAW0F,GAAe,eAAe,YAAY,CAAC,GAAG,KACzF,KAAMA,EAAc,QACtB,CAAC,CAML,EAAC,CAAC,EACF,YAAY,KAAO,6EACnB,IAAIC,EAAa,YAAY,kBAAkB,GAAGH,CAAO,MAAM,EAC/D,IAAMI,EAAU,MAAgBC,GAAYJ,CAAG,EAE/C,GAAI,OAAO,gBAAoBG,EAAQ,KAAK,OAC1CA,EAAQ,KAAK,OAAOD,CAAU,EAAE,KAAK,IAAM,QAAQ,IAAI,cAAc,CAAC,MACjE,CAEL,IAAMG,EAASH,EAAW,UAAU,EAC9BI,EAASH,EAAQ,KAAK,UAAU,EAChCI,EAAO,IAAMD,EAAO,KAAK,EAAE,KAAK1G,GAAOA,EAAI,KAAOyG,EAAO,MAAM,EAAIA,EAAO,MAAMzG,EAAI,KAAK,EAAE,KAAK2G,CAAI,CAAC,EAC3GA,EAAK,CACP,CAEA,KAAK,WAAW,EAAK,CACvB,GAaF,EAXI/C,EAAK,UAAO,SAAuCxE,EAAG,CACpD,OAAO,IAAKA,GAAKwE,GAA0BvE,GAAcuH,EAAU,EAAMvH,GAASsB,EAAW,EAAMtB,GAAYwH,EAAc,CAAC,CAChI,EAGAjD,EAAK,WAA0BrE,GAAmB,CAChD,MAAOqE,EACP,QAASA,EAAsB,UAC/B,WAAY,MACd,CAAC,EAvLL,IAAMD,EAANC,EA0LA,OAAOD,CACT,GAAG,EAICmD,IAAoC,IAAM,CAC5C,IAAMC,EAAN,MAAMA,CAAoB,CACxB,aAAc,CACZ,KAAK,QAAU,CAAC,EAChB,KAAK,YAAc,IAAI5D,EACzB,CACA,gBAAgB6D,EAAQ,CACtB,KAAK,YAAY,KAAKA,CAAM,CAC9B,CAiCF,EA/BID,EAAK,UAAO,SAAqC3H,EAAG,CAClD,OAAO,IAAKA,GAAK2H,EACnB,EAGAA,EAAK,UAAyBE,GAAkB,CAC9C,KAAMF,EACN,UAAW,CAAC,CAAC,iBAAiB,CAAC,EAC/B,OAAQ,CACN,QAAS,UACT,OAAQ,SACR,cAAe,eACjB,EACA,QAAS,CACP,YAAa,aACf,EACA,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,EAAG,MAAM,EAAG,CAAC,EAAG,SAAU,WAAY,qBAAqB,EAAG,CAAC,EAAG,UAAU,EAAG,CAAC,EAAG,UAAW,EAAG,mBAAmB,EAAG,CAAC,EAAG,MAAO,eAAe,EAAG,CAAC,YAAa,QAAS,EAAG,kBAAkB,EAAG,CAAC,OAAQ,SAAS,EAAG,CAAC,gBAAiB,GAAI,EAAG,QAAS,EAAG,QAAS,SAAS,EAAG,CAAC,EAAG,QAAS,SAAS,EAAG,CAAC,gBAAiB,GAAI,EAAG,OAAO,EAAG,CAAC,QAAS,gCAAiC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,WAAY,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,gCAAiC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,aAAc,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,gCAAiC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,cAAe,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,gCAAiC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,eAAgB,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,gCAAiC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,WAAY,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,gCAAiC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,aAAc,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,gCAAiC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,aAAc,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,gCAAiC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,aAAc,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,gCAAiC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,qBAAsB,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,gCAAiC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,yBAA0B,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,+BAAgC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,cAAe,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,+BAAgC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,kBAAmB,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,+BAAgC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,gBAAiB,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,WAAY,EAAG,MAAO,cAAe,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,eAAgB,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,aAAc,EAAG,MAAO,cAAe,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,gBAAgB,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,cAAe,EAAG,MAAO,cAAe,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,iBAAkB,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,eAAgB,EAAG,MAAO,cAAe,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,uBAAwB,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,WAAY,EAAG,MAAO,cAAe,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,cAAe,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,aAAc,EAAG,MAAO,cAAe,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,UAAW,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,aAAc,EAAG,MAAO,cAAe,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,gBAAiB,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,aAAc,EAAG,MAAO,cAAe,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,WAAY,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,qBAAsB,EAAG,MAAO,cAAe,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,YAAa,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,yBAA0B,EAAG,MAAO,cAAe,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,SAAU,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,cAAe,EAAG,MAAO,aAAc,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,WAAY,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,kBAAmB,EAAG,MAAO,aAAc,WAAY,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,gBAAiB,OAAO,EAAG,CAAC,iBAAkB,UAAW,oBAAqB,MAAO,QAAS,gBAAiB,EAAG,MAAO,aAAc,WAAY,OAAQ,EAAG,OAAO,CAAC,EACp/I,SAAU,SAAsC1D,EAAIC,EAAK,CACnDD,EAAK,GACJ6D,EAAW,EAAGC,GAA6C,EAAG,EAAG,eAAgB,CAAC,EAEnF9D,EAAK,GACJ+D,EAAW,OAAQ9D,EAAI,SAAWA,EAAI,QAAQ,OAAS,CAAC,CAE/D,EACA,aAAc,CAAM+D,GAAcC,GAAWC,GAAcC,GAAkBC,EAAc,EAC3F,OAAQ,CAAC,06BAA06B,CACr7B,CAAC,EAtCL,IAAMX,EAANC,EAyCA,OAAOD,CACT,GAAG,EAICY,IAA6B,IAAM,CACrC,IAAMC,EAAN,MAAMA,CAAa,CACjB,UAAUC,EAAQC,EAAQ,CAIxB,MAHI,CAACA,GAAUA,EAAO,SAAW,GAAKA,IAAW,IAG7CD,EAAO,SAAW,EACbA,EAEFA,EAAO,OAAOnD,GACZA,EAAM,KAAK,kBAAkB,EAAE,SAASoD,EAAO,kBAAkB,CAAC,CAC1E,CACH,CAaF,EAXIF,EAAK,UAAO,SAA8BvI,EAAG,CAC3C,OAAO,IAAKA,GAAKuI,EACnB,EAGAA,EAAK,WAA0BG,GAAa,CAC1C,KAAM,gBACN,KAAMH,EACN,KAAM,EACR,CAAC,EAtBL,IAAMD,EAANC,EAyBA,OAAOD,CACT,GAAG,EAICK,IAAkC,IAAM,CAC1C,IAAMC,EAAN,MAAMA,CAAkB,CACtB,YAAYC,EAAiBC,EAAuB,CAClD,KAAK,gBAAkBD,EACvB,KAAK,sBAAwBC,EAC7B,KAAK,OAAS,GACd,KAAK,SAAW,sBAChB,KAAK,SAAW,KAAK,MACrB,KAAK,cAAgB,CAAC,EACtB,KAAK,UAAY,EACnB,CACA,aAAc,CACZ,KAAK,gBAAgB,CACvB,CACA,iBAAkB,CAChB,KAAK,SAAW,KAAK,MACrB,KAAK,SAAW,GAChB,KAAK,UAAY,EACnB,CACA,kBAAkBhC,EAAM,CACtB,GAAIA,EAAK,SACP,KAAK,cAAc,KAAKA,CAAI,MACvB,CACL,IAAMiC,EAAQ,KAAK,cAAc,QAAQjC,CAAI,EACzCiC,IAAU,IACZ,KAAK,cAAc,OAAOA,EAAO,CAAC,CAEtC,CACA,KAAK,UAAY,KAAK,cAAc,SAAW,KAAK,MAAM,OAC1D,KAAK,kBAAkB,CACzB,CACA,mBAAoB,CACd,KAAK,UACP,KAAK,cAAgB,KAAK,MAAM,IAAIjC,IAClCA,EAAK,SAAW,GACTA,EACR,GAED,KAAK,MAAM,QAAQA,GAAQA,EAAK,SAAW,EAAK,EAChD,KAAK,cAAgB,CAAC,GAExB,KAAK,kBAAkB,CACzB,CACA,mBAAoB,CAClB,IAAMkC,EAAkB,KAAK,cAAc,IAAIlC,GAAQA,EAAK,EAAE,EAC9D,KAAK,gBAAgB,uBAAuBkC,CAAe,CAC7D,CACA,OAAO,CACL,OAAAC,EACA,UAAAC,CACF,EAAG,CACD,KAAK,QAAQ,QAAQC,GAAU,CACzBA,EAAO,WAAaF,IACtBE,EAAO,UAAY,GAEvB,CAAC,EACGD,IAAc,IAAMD,IAAW,IACjC,KAAK,SAAW,KAAK,MACrB,KAAK,SAAW,uBAEhB,KAAK,SAAW,CAAC,GAAG,KAAK,KAAK,EAAE,KAAK,CAACG,EAAG5D,IAAM,CAC7C,IAAM5E,EAAM8C,GAAQ0F,EAAEH,CAAM,EAAGzD,EAAEyD,CAAM,CAAC,EACxC,YAAK,SAAWC,IAAc,MAAQ,yBAA2B,uBAC1DA,IAAc,MAAQtI,EAAM,CAACA,CACtC,CAAC,CAEL,CACA,WAAW6B,EAAImF,EAAQ,CACrB,IAAMzB,EAAI,CACR,GAAI1D,EACJ,OAAQmF,CACV,EACA,KAAK,gBAAgB,kBAAkBzB,CAAC,CAC1C,CA+EF,EA7EIyC,EAAK,UAAO,SAAmC5I,EAAG,CAChD,OAAO,IAAKA,GAAK4I,GAAsBS,EAAkB1G,EAAe,EAAM0G,EAAkB9E,EAAqB,CAAC,CACxH,EAGAqE,EAAK,UAAyBf,GAAkB,CAC9C,KAAMe,EACN,UAAW,CAAC,CAAC,eAAe,CAAC,EAC7B,UAAW,SAAiC3E,EAAIC,EAAK,CAInD,GAHID,EAAK,GACJqF,GAAYzF,GAAyB,CAAC,EAEvCI,EAAK,EAAG,CACV,IAAIsF,EACDC,GAAeD,EAAQE,GAAY,CAAC,IAAMvF,EAAI,QAAUqF,EAC7D,CACF,EACA,OAAQ,CACN,MAAO,QACP,cAAe,eACjB,EACA,SAAU,CAAIG,EAAoB,EAClC,MAAO,GACP,KAAM,GACN,OAAQ,CAAC,CAAC,EAAG,MAAM,EAAG,CAAC,EAAG,kBAAkB,EAAG,CAAC,EAAG,QAAS,cAAe,OAAO,EAAG,CAAC,EAAG,aAAa,EAAG,CAAC,EAAG,QAAS,EAAG,cAAe,SAAU,cAAe,QAAQ,EAAG,CAAC,OAAQ,WAAY,EAAG,UAAW,gBAAiB,QAAQ,EAAG,CAAC,QAAS,OAAO,EAAG,CAAC,QAAS,MAAO,WAAY,OAAQ,EAAG,MAAO,EAAG,MAAM,EAAG,CAAC,QAAS,mBAAmB,EAAG,CAAC,QAAS,mBAAmB,EAAG,CAAC,QAAS,OAAO,EAAG,CAAC,QAAS,mBAAmB,EAAG,CAAC,EAAG,QAAS,SAAS,EAAG,CAAC,EAAG,OAAO,EAAG,CAAC,EAAG,QAAS,aAAa,EAAG,CAAC,EAAG,QAAS,aAAa,EAAG,CAAC,EAAG,OAAO,EAAG,CAAC,EAAG,QAAS,aAAa,EAAG,CAAC,EAAG,KAAK,EAAG,CAAC,QAAS,OAAQ,EAAG,MAAM,EAAG,CAAC,EAAG,MAAM,EAAG,CAAC,QAAS,OAAO,EAAG,CAAC,EAAG,MAAM,EAAG,CAAC,EAAG,UAAU,EAAG,CAAC,EAAG,WAAY,EAAG,OAAO,EAAG,CAAC,EAAG,OAAO,EAAG,CAAC,EAAG,UAAW,aAAa,CAAC,EAC3uB,SAAU,SAAoCzF,EAAIC,EAAK,CACjDD,EAAK,IACJ0F,EAAe,EAAG,MAAO,CAAC,EAAE,EAAG,MAAO,CAAC,EAAE,EAAG,QAAS,CAAC,EAAE,EAAG,QAAS,CAAC,EAAE,EAAG,IAAI,EAAE,EAAG,KAAM,CAAC,EAAE,EAAG,QAAS,CAAC,EACzGC,GAAiB,gBAAiB,SAAmEC,EAAQ,CAC9G,OAAGC,GAAmB5F,EAAI,UAAW2F,CAAM,IAAM3F,EAAI,UAAY2F,GAC1DA,CACT,CAAC,EACE1F,EAAW,SAAU,UAA8D,CACpF,OAAOD,EAAI,kBAAkB,CAC/B,CAAC,EACE6F,EAAa,EACbC,EAAO,EAAG,aAAa,EACvBD,EAAa,EACbjC,EAAW,EAAGmC,GAA0C,EAAG,EAAG,KAAM,CAAC,EACrEN,EAAe,EAAG,KAAM,CAAC,EACzBxF,EAAW,OAAQ,SAAuD0F,EAAQ,CACnF,OAAO3F,EAAI,OAAO2F,CAAM,CAC1B,CAAC,EACEG,EAAO,GAAI,MAAM,EACjBE,EAAU,GAAI,GAAG,EACjBF,EAAO,GAAI,UAAU,EACrBD,EAAa,EACbjC,EAAW,GAAIqC,GAA2C,EAAG,EAAG,KAAM,CAAC,EAAE,GAAIC,GAA2C,EAAG,EAAG,KAAM,CAAC,EAAE,GAAIC,GAA2C,EAAG,EAAG,KAAM,EAAE,EAAE,GAAIC,GAA2C,EAAG,EAAG,KAAM,EAAE,EACnQP,EAAa,EAAE,EACfJ,EAAe,GAAI,OAAO,EAC1B7B,EAAW,GAAIyC,GAAkC,GAAI,EAAG,KAAM,EAAE,EAChEC,GAAO,GAAI,eAAe,EAC1BT,EAAa,EAAE,EAAE,EAAE,GAEpB9F,EAAK,IACJwG,EAAU,CAAC,EACXC,GAAiB,UAAWxG,EAAI,SAAS,EACzCuG,EAAU,CAAC,EACXE,EAAc,EAAGzG,EAAI,cAAc,eAAiB,EAAI,EAAE,EAC1DuG,EAAU,CAAC,EACXG,GAAW1G,EAAI,QAAQ,EACvBuG,EAAU,CAAC,EACXE,EAAc,GAAIzG,EAAI,cAAc,kBAAoB,GAAK,EAAE,EAC/DuG,EAAU,EACVE,EAAc,GAAIzG,EAAI,cAAc,qBAAuB,GAAK,EAAE,EAClEuG,EAAU,EACVE,EAAc,GAAIzG,EAAI,cAAc,uBAAyB,GAAK,EAAE,EACpEuG,EAAU,EACVE,EAAc,GAAIzG,EAAI,cAAc,iBAAmB,GAAK,EAAE,EAC9DuG,EAAU,CAAC,EACXzC,EAAW,UAAc6C,GAAY,GAAI,GAAI3G,EAAI,SAAUA,EAAI,MAAM,CAAC,EAE7E,EACA,aAAc,CAAM+D,GAAcC,GAAS4C,GAAiCC,GAAoBC,GAAStD,GAAqB7D,GAA8BoH,GAAU3C,EAAY,EAClL,OAAQ,CAAC,+qDAA+qD,CAC1rD,CAAC,EArJL,IAAMK,EAANC,EAwJA,OAAOD,CACT,GAAG,EAoHH,IAAMuC,GAAN,KAAgB,CAAC,EACbC,IAAmC,IAAM,CAC3C,IAAMC,EAAN,MAAMA,CAAmB,CACvB,YAAYC,EAAaC,EAAMC,EAAW,CACxC,KAAK,YAAcF,EACnB,KAAK,KAAOC,EACZ,KAAK,UAAYC,EACjB,KAAK,WAAa,GAClB,KAAK,QAAU,GACf,KAAK,SAAW,IAAIC,GACpB,KAAK,OAASF,EAAK,OACnB,KAAK,WAAaA,EAAK,WACvB,KAAK,SAAWA,EAAK,QACvB,CACM,MAAO,QAAAG,EAAA,sBACP,KAAK,QAAU,KAAK,OAAO,SAC7B,KAAK,QAAU,GACf,MAAM,KAAK,aAAa,EACxB,KAAK,UAAU,MAAM,CACnB,MAAO,EACT,CAAC,EAEL,GACA,aAAc,CACZ,KAAK,UAAU,MAAM,CACnB,MAAO,EACT,CAAC,CACH,CACM,cAAe,QAAAA,EAAA,sBACnB,IAAMC,EAAS,IAAIR,GACnBQ,EAAO,OAAS,uCAChBA,EAAO,OAAS,KAAK,OACrBA,EAAO,WAAa,KAAK,WACzBA,EAAO,MAAQ,KAAK,WACpBA,EAAO,YAAc,GACrBA,EAAO,SAAW,KAAK,WACvBA,EAAO,SAAW,GAClB,MAAM,KAAK,YAAY,WAAWA,CAAM,CAC1C,GA0DF,EAxDIN,EAAK,UAAO,SAAoCO,EAAG,CACjD,OAAO,IAAKA,GAAKP,GAAuBQ,EAAkBC,EAAW,EAAMD,EAAkBE,EAAe,EAAMF,EAAuBG,EAAY,CAAC,CACxJ,EAGAX,EAAK,UAAyBY,GAAkB,CAC9C,KAAMZ,EACN,UAAW,CAAC,CAAC,qCAAqC,CAAC,EACnD,QAAS,CACP,SAAU,UACZ,EACA,MAAO,GACP,KAAM,EACN,OAAQ,CAAC,CAAC,KAAM,+CAA+C,EAAG,CAAC,mBAAoB,EAAE,EAAG,CAAC,EAAG,KAAK,EAAG,CAAC,EAAG,QAAQ,EAAG,CAAC,MAAO,aAAc,EAAG,cAAe,KAAK,EAAG,CAAC,OAAQ,OAAQ,KAAM,OAAQ,OAAQ,OAAQ,WAAY,GAAI,EAAG,eAAgB,EAAG,UAAW,eAAe,EAAG,CAAC,OAAQ,SAAS,EAAG,CAAC,QAAS,QAAS,EAAG,MAAM,EAAG,CAAC,EAAG,OAAO,EAAG,CAAC,QAAS,kBAAmB,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,EAAG,MAAO,aAAc,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,UAAU,EAAG,CAAC,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,uBAAuB,EAAG,CAAC,EAAG,MAAO,cAAe,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,gBAAgB,CAAC,EACnlB,SAAU,SAAqCa,EAAIC,EAAK,CA0BtD,GAzBID,EAAK,IACJE,EAAe,EAAG,MAAO,CAAC,EAAE,EAAG,KAAM,CAAC,EACtCC,EAAO,EAAG,YAAY,EACtBC,EAAa,EACbF,EAAe,EAAG,oBAAoB,EAAE,EAAG,MAAO,CAAC,EAAE,EAAG,MAAO,CAAC,EAAE,EAAG,MAAM,EAAE,EAAG,QAAS,CAAC,EAC1FC,EAAO,EAAG,aAAa,EACvBC,EAAa,EACbF,EAAe,EAAG,QAAS,EAAG,CAAC,EAC/BG,GAAiB,gBAAiB,SAAoEC,EAAQ,CAC/G,OAAGC,GAAmBN,EAAI,WAAYK,CAAM,IAAML,EAAI,WAAaK,GAC5DA,CACT,CAAC,EACEF,EAAa,EACbI,EAAW,GAAIC,GAAoC,EAAG,EAAG,MAAO,CAAC,EAAE,GAAIC,GAAoC,EAAG,EAAG,MAAO,CAAC,EACzHN,EAAa,EAAE,EAAE,EAAE,EACnBF,EAAe,GAAI,qBAAsB,CAAC,EAC1CM,EAAW,GAAIG,GAAuC,EAAG,EAAG,SAAU,CAAC,EACvET,EAAe,GAAI,SAAU,EAAE,EAC/BU,EAAW,QAAS,UAAgE,CACrF,OAAOX,EAAI,YAAY,CACzB,CAAC,EACEY,EAAU,GAAI,IAAK,EAAE,EACrBV,EAAO,GAAI,cAAc,EACzBC,EAAa,EAAE,EAAE,GAElBJ,EAAK,EAAG,CACV,IAAMc,EAASC,GAAY,EAAE,EAC1BC,EAAU,CAAC,EACXC,GAAiB,UAAWhB,EAAI,UAAU,EAC1Ce,EAAU,CAAC,EACXE,EAAW,OAAQJ,EAAI,UAAYA,EAAI,OAASA,EAAI,WAAaA,EAAI,QAAU,KAAO,KAAOA,EAAI,OAAO,SAAY,EACpHE,EAAU,EACVE,EAAW,OAAQjB,EAAI,WAAW,OAAS,GAAG,EAC9Ce,EAAU,CAAC,EACXE,EAAW,OAAQ,CAACjB,EAAI,OAAO,CACpC,CACF,EACA,aAAc,CAAMkB,GAASC,GAAkBC,GAAyBC,GAAoBC,GAAyBC,GAAsBC,GAAYC,GAAaC,GAAqBC,GAAuBC,EAAgB,EAChO,OAAQ,CAAC,kZAAkZ,CAC7Z,CAAC,EA5FL,IAAM3C,EAANC,EA+FA,OAAOD,CACT,GAAG,EAIC4C,IAAkC,IAAM,CAC1C,IAAMC,EAAN,MAAMA,CAAkB,CACtB,YAAYC,EAAa5C,EAAa,CACpC,KAAK,YAAc4C,EACnB,KAAK,YAAc5C,CACrB,CACM,cAAc6C,EAAcC,EAAQC,EAAYC,EAAUC,EAAa,QAAA7C,EAAA,sBAC3E,IAAMC,EAAS,IAAIR,GACnB,OAAAQ,EAAO,OAAS,uCAChBA,EAAO,OAASyC,EAChBzC,EAAO,WAAa0C,EAChBF,EAAa,KAAK,KAAK,YAAY,GAAG,EAAI,GAC5CxC,EAAO,MAAQwC,EAAa,KAAK,KAAK,UAAU,EAAGA,EAAa,KAAK,KAAK,YAAY,GAAG,CAAC,EAE1FxC,EAAO,MAAQwC,EAAa,KAAK,KAEnCxC,EAAO,YAAc,GACrBA,EAAO,SAAWwC,EAAa,KAAK,KACpCxC,EAAO,SAAWwC,EAAa,KAAK,KAC7B,MAAM,KAAK,YAAY,WAAWxC,EAAQ2C,EAAUC,EAAaF,CAAU,CACpF,GACM,cAAcG,EAAI,QAAA9C,EAAA,sBACtB,GAAI,CACF,MAAM,KAAK,YAAY,cAAc8C,CAAE,CACzC,OAASC,EAAG,CACV,QAAQ,IAAI,6BAA8BA,CAAC,CAC7C,CACF,GACM,iBAAiBN,EAAcO,EAAQJ,EAAUC,EAAaF,EAAY,QAAA3C,EAAA,sBAC9E,IAAMC,EAAS,IAAIgD,GACnB,OAAAhD,EAAO,SAAW+C,EAClB/C,EAAO,SAAWwC,EAAa,KAAK,KACpCxC,EAAO,SAAWwC,EAAa,KAAK,KAC7B,MAAM,KAAK,YAAY,kBAAkBxC,EAAQ2C,EAAUC,EAAaF,CAAU,CAC3F,GAaF,EAXIJ,EAAK,UAAO,SAAmCrC,EAAG,CAChD,OAAO,IAAKA,GAAKqC,GAAsBW,GAASC,EAAW,EAAMD,GAAS9C,EAAW,CAAC,CACxF,EAGAmC,EAAK,WAA0Ba,GAAmB,CAChD,MAAOb,EACP,QAASA,EAAkB,UAC3B,WAAY,MACd,CAAC,EA5CL,IAAMD,EAANC,EA+CA,OAAOD,CACT,GAAG,EAICe,IAAyC,IAAM,CACjD,IAAMC,EAAN,MAAMA,CAAyB,CAC7B,aAAc,CACZ,KAAK,mBAAqB,IAAIvD,GAC9B,KAAK,MAAQ,CAAC,EACd,KAAK,WAAa,OAClB,KAAK,YAAc,aACnB,KAAK,YAAc,UACnB,KAAK,aAAe,KACtB,CACA,WAAWwD,EAAO,CAChBA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,KAAK,WAAa,YAClB,KAAK,YAAc,UACnB,KAAK,YAAc,WACrB,CACA,YAAYA,EAAO,CACjBA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,KAAK,WAAa,OAClB,KAAK,YAAc,UACnB,KAAK,YAAc,YACrB,CACA,OAAOA,EAAO,CACZA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,KAAK,WAAa,OAClB,KAAK,YAAc,UACnB,KAAK,YAAc,aACnB,KAAK,MAAQA,EAAM,aAAa,MAChC,IAAIC,EAAc,KAAK,MACvB,KAAK,mBAAmB,KAAKA,CAAW,CAC1C,CA8BF,EA5BIF,EAAK,UAAO,SAA0CpD,EAAG,CACvD,OAAO,IAAKA,GAAKoD,EACnB,EAGAA,EAAK,UAAyBG,GAAkB,CAC9C,KAAMH,EACN,UAAW,CAAC,CAAC,GAAI,kBAAmB,EAAE,CAAC,EACvC,SAAU,EACV,aAAc,SAA+C9C,EAAIC,EAAK,CAChED,EAAK,GACJY,EAAW,WAAY,SAA8DN,EAAQ,CAC9F,OAAOL,EAAI,WAAWK,CAAM,CAC9B,CAAC,EAAE,YAAa,SAA+DA,EAAQ,CACrF,OAAOL,EAAI,YAAYK,CAAM,CAC/B,CAAC,EAAE,OAAQ,SAA0DA,EAAQ,CAC3E,OAAOL,EAAI,OAAOK,CAAM,CAC1B,CAAC,EAECN,EAAK,GACJkD,GAAY,aAAcjD,EAAI,UAAU,EAAE,SAAUA,EAAI,WAAW,EAAE,eAAgBA,EAAI,WAAW,EAAE,gBAAiBA,EAAI,YAAY,CAE9I,EACA,QAAS,CACP,mBAAoB,oBACtB,CACF,CAAC,EA5DL,IAAM4C,EAANC,EA+DA,OAAOD,CACT,GAAG,EAICM,IAAoC,IAAM,CAC5C,IAAMC,EAAN,MAAMA,CAAoB,CACxB,YAAYC,EAAmBhE,EAAMC,EAAW0C,EAAa5C,EAAa,CACxE,KAAK,kBAAoBiE,EACzB,KAAK,KAAOhE,EACZ,KAAK,UAAYC,EACjB,KAAK,YAAc0C,EACnB,KAAK,YAAc5C,EACnB,KAAK,MAAQ,CAAC,EACd,KAAK,cAAgB,CAAC,EACtB,KAAK,YAAc,GACnB,KAAK,eAAiB,GACtB,KAAK,QAAU,GACf,KAAK,SAAW,GAChB,KAAK,YAAc,EACrB,CACA,UAAW,CACT,KAAK,OAAS,KAAK,KAAK,OACxB,KAAK,WAAa,KAAK,KAAK,WAC5B,KAAK,OAAS,KAAK,KAAK,OACxB,KAAK,QAAU,KAAK,KAAK,QACzB,KAAK,SAAW,KAAK,KAAK,SAC1B,KAAK,YAAc,KAAK,KAAK,WAC/B,CACA,qBAAqB2D,EAAO,CAC1B,KAAK,MAAQA,EAAM,OAAO,MAC1B,IAAIO,EAAa,GACjB,QAASC,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,IACrC,KAAK,cAAc,KAAK,CACtB,KAAM,KAAK,MAAMA,CAAC,EAClB,SAAU,EACV,gBAAiB,EACnB,CAAC,EACDD,EAAW,OAAO,IAAI,KAAK,MAAMC,CAAC,EAAE,IAAI,GAAG,CAE/C,CACA,oBAAoBR,EAAO,CACzB,KAAK,MAAQA,EACb,IAAIO,EAAa,GACjB,QAASC,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,IACrC,KAAK,cAAc,KAAK,CACtB,KAAM,KAAK,MAAMA,CAAC,EAClB,SAAU,EACV,gBAAiB,EACnB,CAAC,EACDD,EAAW,OAAO,IAAI,KAAK,MAAMC,CAAC,EAAE,IAAI,GAAG,CAE/C,CACA,iBAAiBC,EAAO,CACtB,KAAK,cAAc,OAAOA,EAAO,CAAC,CACpC,CACA,eAAeT,EAAO,CACpB,KAAK,MAAQA,EAAM,OAAO,MAC1B,KAAK,cAAgB,CAAC,CACxB,CACA,aAAc,CACZ,KAAK,UAAU,MAAM,EACrB,KAAK,cAAgB,CAAC,CACxB,CACM,QAAS,QAAAvD,EAAA,sBACb,KAAK,eAAiB,GACtB,IAAMiE,EAAc,CAAC,EACfC,EAAgB,CAAC,EAEvB,GAAI,KAAK,QAAU,KAAK,OAAO,OAC7B,QAASC,KAAQ,KAAK,cACpB,KAAK,kBAAkB,cAAcA,EAAM,KAAK,OAAQ,KAAK,WAAY,KAAK,SAAU,KAAK,WAAW,EAAE,KAAKC,GAAU,CACvH,IAAIC,EAAe,KAAK,YAAY,OAAOD,EAAQD,EAAK,KAAM,CAC5D,WAAYG,GAAY,CACtB,IAAMC,EAAUD,EAAS,YAAcH,EAAK,KAAK,KAAO,IACxDA,EAAK,SAAW,KAAK,MAAMI,CAAO,CACpC,CACF,CAAC,EAAE,UAAU,CACX,KAAMC,GAAK,CACT,IAAMD,EAAUC,EAAIL,EAAK,KAAK,KAAO,IACrCA,EAAK,SAAW,KAAK,MAAMI,CAAO,EAC9BJ,EAAK,WAAa,KAAO,CAACA,EAAK,iBACjC,KAAK,YAAY,cAAcC,EAAO,GAAI,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,EAAE,KAAK,IAAM,CACrGD,EAAK,gBAAkB,GACvBD,EAAc,KAAKG,CAAY,CACjC,CAAC,EAAE,MAAMI,GAAS,CAChB,QAAQ,MAAM,4BAA6BA,CAAK,CAClD,CAAC,EAEC,KAAK,cAAc,MAAMC,GAAKA,EAAE,WAAa,GAAG,IAClD,KAAK,YAAc,GACnB,KAAK,eAAiB,GACtB,KAAK,UAAU,MAAM,EACrBR,EAAc,QAAQM,GAAK,CACzBA,EAAE,YAAY,CAChB,CAAC,EAEL,EACA,MAAOG,GAAO,CACZ,QAAQ,MAAM,qBAAuBA,CAAG,CAC1C,CACF,CAAC,CACH,CAAC,EAGL,GAAI,KAAK,QAAU,KAAK,OAAO,OAC7B,QAASR,KAAQ,KAAK,cACpB,KAAK,kBAAkB,iBAAiBA,EAAM,KAAK,OAAQ,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,EAAE,KAAKC,GAAU,CAC1H,IAAIC,EAAe,KAAK,YAAY,OAAOD,EAAQD,EAAK,KAAM,CAC5D,WAAYG,GAAY,CACtB,IAAMC,EAAUD,EAAS,YAAcH,EAAK,KAAK,KAAO,IACxDA,EAAK,SAAW,KAAK,MAAMI,CAAO,CACpC,CACF,CAAC,EAAE,UAAU,CACX,KAAMC,GAAK,CACT,IAAMD,EAAUC,EAAIL,EAAK,KAAK,KAAO,IACrCA,EAAK,SAAW,KAAK,MAAMI,CAAO,EAC9BJ,EAAK,WAAa,KAAO,CAACA,EAAK,iBACjC,KAAK,YAAY,cAAcC,EAAO,GAAI,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,EAAE,KAAK,IAAM,CACrGD,EAAK,gBAAkB,GACvBD,EAAc,KAAKG,CAAY,CACjC,CAAC,EAAE,MAAMI,GAAS,CAChB,QAAQ,MAAM,4BAA6BA,CAAK,CAClD,CAAC,EAEC,KAAK,cAAc,MAAMC,GAAKA,EAAE,WAAa,GAAG,IAClD,KAAK,YAAc,GACnB,KAAK,eAAiB,GACtB,KAAK,UAAU,MAAM,EACrBR,EAAc,QAAQM,GAAK,CACzBA,EAAE,YAAY,CAChB,CAAC,EAEL,EACA,MAAOG,GAAO,CACZ,QAAQ,MAAM,qBAAuBA,CAAG,CAC1C,CACF,CAAC,CACH,CAAC,CAGP,GAoDF,EAlDIf,EAAK,UAAO,SAAqC1D,EAAG,CAClD,OAAO,IAAKA,GAAK0D,GAAwBzD,EAAkBmC,EAAiB,EAAMnC,EAAkBE,EAAe,EAAMF,EAAuBG,EAAY,EAAMH,EAAkBgD,EAAW,EAAMhD,EAAkBC,EAAW,CAAC,CACrO,EAGAwD,EAAK,UAAyBrD,GAAkB,CAC9C,KAAMqD,EACN,UAAW,CAAC,CAAC,iBAAiB,CAAC,EAC/B,MAAO,GACP,KAAM,EACN,OAAQ,CAAC,CAAC,EAAG,MAAO,SAAU,wBAAwB,EAAG,CAAC,EAAG,QAAQ,EAAG,CAAC,QAAS,WAAY,kBAAmB,GAAI,EAAG,qBAAsB,EAAG,MAAM,EAAG,CAAC,EAAG,MAAM,EAAG,CAAC,EAAG,MAAO,SAAU,0BAA2B,MAAM,EAAG,CAAC,EAAG,OAAO,EAAG,CAAC,QAAS,6BAA8B,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,4BAA6B,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,EAAG,OAAO,EAAG,CAAC,EAAG,MAAO,MAAM,EAAG,CAAC,EAAG,MAAO,gBAAiB,EAAG,OAAO,EAAG,CAAC,kBAAmB,GAAI,EAAG,WAAY,EAAG,oBAAoB,EAAG,CAAC,EAAG,cAAc,EAAG,CAAC,EAAG,aAAc,YAAa,aAAa,EAAG,CAAC,EAAG,KAAK,EAAG,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,KAAM,OAAQ,WAAY,GAAI,EAAG,QAAQ,EAAG,CAAC,MAAO,OAAQ,EAAG,MAAM,EAAG,CAAC,EAAG,MAAO,cAAe,WAAW,EAAG,CAAC,EAAG,UAAW,SAAU,oBAAoB,EAAG,CAAC,EAAG,UAAW,MAAM,EAAG,CAAC,EAAG,MAAO,0BAA2B,OAAO,EAAG,CAAC,EAAG,UAAW,MAAM,EAAG,CAAC,EAAG,MAAM,EAAG,CAAC,EAAG,MAAO,cAAe,aAAc,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,WAAW,EAAG,CAAC,EAAG,MAAO,aAAc,aAAc,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,UAAU,EAAG,CAAC,EAAG,QAAS,SAAS,EAAG,CAAC,EAAG,MAAO,QAAQ,EAAG,CAAC,EAAG,OAAQ,MAAO,OAAO,EAAG,CAAC,EAAG,YAAa,SAAU,0BAA2B,oBAAoB,EAAG,CAAC,EAAG,cAAe,EAAG,QAAS,OAAO,EAAG,CAAC,EAAG,MAAO,aAAa,EAAG,CAAC,EAAG,MAAO,aAAc,iBAAkB,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,WAAY,OAAO,EAAG,CAAC,EAAG,MAAO,MAAM,EAAG,CAAC,EAAG,SAAU,0BAA2B,OAAQ,MAAM,EAAG,CAAC,EAAG,aAAa,EAAG,CAAC,OAAQ,cAAe,EAAG,QAAS,OAAO,CAAC,EACp+C,SAAU,SAAsCpD,EAAIC,EAAK,CACnDD,EAAK,IACJE,EAAe,EAAG,oBAAoB,EAAE,EAAG,MAAO,CAAC,EAAE,EAAG,MAAO,CAAC,EAChEM,EAAW,EAAG4D,GAAoC,GAAI,EAAG,MAAO,CAAC,EAAE,EAAGC,GAAoC,GAAI,EAAG,MAAO,CAAC,EACzHjE,EAAa,EAAE,EACfF,EAAe,EAAG,MAAO,CAAC,EAAE,EAAG,MAAO,CAAC,EACvCM,EAAW,EAAG8D,GAAuC,EAAG,EAAG,SAAU,CAAC,EACtElE,EAAa,EACbF,EAAe,EAAG,MAAO,CAAC,EAC1BM,EAAW,EAAG+D,GAAuC,EAAG,EAAG,SAAU,CAAC,EACtEnE,EAAa,EAAE,EACfI,EAAW,GAAIgE,GAAqC,EAAG,EAAG,MAAO,CAAC,EAAE,GAAIC,GAA8C,EAAG,EAAG,eAAgB,CAAC,EAC7IrE,EAAa,EACbF,EAAe,GAAI,qBAAsB,CAAC,EAAE,GAAI,MAAO,CAAC,EAAE,GAAI,MAAO,CAAC,EAAE,GAAI,SAAU,EAAE,EACxFU,EAAW,QAAS,UAAiE,CACtF,OAAOX,EAAI,YAAY,CACzB,CAAC,EACEE,EAAO,GAAI,QAAQ,EACnBC,EAAa,EAAE,EAAE,EAAE,GAEpBJ,EAAK,IACJgB,EAAU,CAAC,EACXE,EAAW,OAAQ,CAACjB,EAAI,cAAc,EACtCe,EAAU,EACVE,EAAW,OAAQjB,EAAI,cAAc,EACrCe,EAAU,CAAC,EACXE,EAAW,OAAQ,CAACjB,EAAI,gBAAkBA,EAAI,cAAc,OAAS,CAAC,EACtEe,EAAU,CAAC,EACXE,EAAW,OAAQ,CAACjB,EAAI,gBAAkBA,EAAI,cAAc,OAAS,CAAC,EACtEe,EAAU,EACVE,EAAW,OAAQ,CAACjB,EAAI,cAAc,EACtCe,EAAU,EACVE,EAAW,OAAQjB,EAAI,cAAc,EAE5C,EACA,aAAc,CAAMyE,GAAcvD,GAAWS,GAAuBC,GAAqB8C,GAAgB9B,EAAwB,EACjI,OAAQ,CAAC,83CAA83C,CACz4C,CAAC,EAzLL,IAAMM,EAANC,EA4LA,OAAOD,CACT,GAAG,EAICyB,IAA8C,IAAM,CACtD,IAAMC,EAAN,MAAMA,CAA8B,CAClC,YAAYzF,EAAa0F,EAAazF,EAAMC,EAAWyF,EAAiBC,EAAgB,CACtF,KAAK,YAAc5F,EACnB,KAAK,YAAc0F,EACnB,KAAK,KAAOzF,EACZ,KAAK,UAAYC,EACjB,KAAK,gBAAkByF,EACvB,KAAK,eAAiBC,EACtB,KAAK,mBAAqB,CAAC,EAC3B,KAAK,OAAS3F,EAAK,MACrB,CACM,UAAW,QAAAG,EAAA,sBACf,KAAK,eAAe,WAAW,EAAI,EACnC,IAAIyF,EAAe,MAAM,KAAK,YAAY,wBAAwB,KAAK,MAAM,EAC7E,QAASC,KAAeD,EACtB,GAAIC,GAAeA,EAAY,WAAY,CACzC,IAAIC,EAAc,MAAM,KAAK,YAAY,aAAaD,EAAY,UAAU,EACxEC,IACFD,EAAY,WAAaC,EAAY,UAAY,IAAMA,EAAY,SAEvE,CAEF,KAAK,mBAAqBF,EAC1B,KAAK,eAAe,WAAW,EAAK,CACtC,GACM,4BAA4BzC,EAAQ,QAAAhD,EAAA,sBACxC,IAAIoE,EAAS,MAAM,KAAK,YAAY,4BAA4BpB,CAAM,EACtE,MAAM,KAAK,SAASoB,CAAM,CAC5B,GACA,aAAc,CACZ,KAAK,UAAU,MAAM,CACvB,CACM,SAASA,EAAQ,QAAApE,EAAA,sBACrB,GAAIoE,EAAQ,CACV,IAAMwB,EAAMxF,GAAY,WAAWgE,CAAM,EAEnCyB,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,aAAa,WAAY,UAAU,EACxCA,EAAK,SAAWzB,EAAO,SACvByB,EAAK,OAAS,SACdA,EAAK,KAAOD,EACZ,SAAS,KAAK,YAAYC,CAAI,EAC9BA,EAAK,MAAM,EACXA,EAAK,OAAO,CACd,CACF,GAsCF,EApCIR,EAAK,UAAO,SAA+CnF,EAAG,CAC5D,OAAO,IAAKA,GAAKmF,GAAkClF,EAAkBC,EAAW,EAAMD,EAAqB2F,EAAW,EAAM3F,EAAkBE,EAAe,EAAMF,EAAuBG,EAAY,EAAMH,EAAuB4F,EAAe,EAAM5F,EAAqB6F,EAAc,CAAC,CAC9R,EAGAX,EAAK,UAAyB9E,GAAkB,CAC9C,KAAM8E,EACN,UAAW,CAAC,CAAC,iDAAiD,CAAC,EAC/D,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,mBAAoB,EAAE,EAAG,CAAC,QAAS,wCAAyC,EAAG,QAAS,SAAS,EAAG,CAAC,EAAG,MAAO,gBAAiB,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,WAAY,OAAO,EAAG,CAAC,EAAG,QAAS,gBAAiB,eAAgB,MAAM,EAAG,CAAC,UAAW,GAAG,EAAG,CAAC,SAAU,SAAU,EAAG,MAAO,cAAe,QAAS,EAAG,OAAO,EAAG,CAAC,EAAG,MAAO,kBAAkB,CAAC,EACxW,SAAU,SAAgD7E,EAAIC,EAAK,CAC7DD,EAAK,IACJE,EAAe,EAAG,KAAM,CAAC,EACzBC,EAAO,EAAG,wBAAwB,EAClCC,EAAa,EACbF,EAAe,EAAG,oBAAoB,EACtCM,EAAW,EAAGiF,GAAgD,GAAI,EAAG,QAAS,CAAC,EAC/ErF,EAAa,EACbF,EAAe,EAAG,oBAAoB,EAAE,EAAG,SAAU,CAAC,EACtDU,EAAW,QAAS,UAA0E,CAC/F,OAAOX,EAAI,YAAY,CACzB,CAAC,EACEY,EAAU,EAAG,IAAK,CAAC,EACnBV,EAAO,EAAG,YAAY,EACtBC,EAAa,EAAE,GAEhBJ,EAAK,IACJgB,EAAU,CAAC,EACXE,EAAW,UAAWjB,EAAI,kBAAkB,EAEnD,EACA,aAAc,CAAMyE,GAAc/C,GAAqBC,GAAuBC,GAAuB6D,EAAQ,EAC7G,OAAQ,CAAC,gEAAgE,CAC3E,CAAC,EAjFL,IAAMd,EAANC,EAoFA,OAAOD,CACT,GAAG,EAICe,IAAqC,IAAM,CAC7C,IAAMC,EAAN,MAAMA,CAAqB,CACzB,YAAYvG,EAAMC,EAAWuG,EAAQ,CACnC,KAAK,KAAOxG,EACZ,KAAK,UAAYC,EACjB,KAAK,OAASuG,CAChB,CACA,UAAW,CAAC,CACZ,QAAS,CACP,KAAK,UAAU,MAAM,EAAI,CAC3B,CACA,QAAS,CACP,KAAK,UAAU,MAAM,EAAK,CAC5B,CAoCF,EAlCID,EAAK,UAAO,SAAsClG,EAAG,CACnD,OAAO,IAAKA,GAAKkG,GAAyBjG,EAAkBE,EAAe,EAAMF,EAAuBG,EAAY,EAAMH,EAAuBmG,EAAM,CAAC,CAC1J,EAGAF,EAAK,UAAyB7F,GAAkB,CAC9C,KAAM6F,EACN,UAAW,CAAC,CAAC,mBAAmB,CAAC,EACjC,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,mBAAoB,GAAI,EAAG,WAAW,EAAG,CAAC,EAAG,OAAO,EAAG,CAAC,OAAQ,SAAU,EAAG,SAAU,MAAO,cAAe,EAAG,OAAO,EAAG,CAAC,OAAQ,SAAU,EAAG,SAAU,MAAO,aAAc,EAAG,OAAO,CAAC,EACpM,SAAU,SAAuC5F,EAAIC,EAAK,CACpDD,EAAK,IACJa,EAAU,EAAG,KAAM,CAAC,EAAE,EAAG,oBAAoB,EAC7CX,EAAe,EAAG,qBAAsB,CAAC,EAAE,EAAG,SAAU,CAAC,EACzDU,EAAW,QAAS,UAAiE,CACtF,OAAOX,EAAI,OAAO,CACpB,CAAC,EACEE,EAAO,EAAG,KAAK,EACfC,EAAa,EACbF,EAAe,EAAG,SAAU,CAAC,EAC7BU,EAAW,QAAS,UAAiE,CACtF,OAAOX,EAAI,OAAO,CACpB,CAAC,EACEE,EAAO,EAAG,IAAI,EACdC,EAAa,EAAE,GAEhBJ,EAAK,GACJkB,EAAW,YAAajB,EAAI,KAAK,QAAY8F,EAAc,CAElE,EACA,aAAc,CAAMpE,GAAqBC,GAAuBC,EAAgB,CAClF,CAAC,EA9CL,IAAM8D,EAANC,EAiDA,OAAOD,CACT,GAAG,EAICK,IAAuC,IAAM,CAC/C,IAAMC,EAAN,MAAMA,CAAuB,CAC3B,YAAY7G,EAAa8G,EAAiBlB,EAAgBhD,EAAamE,EAAQC,EAAuB,CACpG,KAAK,YAAchH,EACnB,KAAK,gBAAkB8G,EACvB,KAAK,eAAiBlB,EACtB,KAAK,YAAchD,EACnB,KAAK,OAASmE,EACd,KAAK,sBAAwBC,EAC7B,KAAK,iBAAmB,IAAI7G,GAC5B,KAAK,cAAgB,CAAC,EACtB,KAAK,QAAU,GACf,KAAK,iBAAmB,EAC1B,CACA,aAAc,CACZ,KAAK,YAAY,YAAY,CAC/B,CACM,aAAc,QAAAC,EAAA,sBAClB,KAAK,SAAW,KAAK,OACrB,MAAM,KAAK,aAAa,CAC1B,GACM,UAAW,QAAAA,EAAA,sBACf,KAAK,YAAc,KAAK,gBAAgB,aAAa,UAAU6G,GAAU,KAAK,yBAAyBA,CAAM,CAAC,EAC9G,KAAK,SAAW,KAAK,OACrB,KAAK,iBAAiB,EACtBC,GAAG,KAAK,eAAe,KAAK,QAAQ,CAAC,EAAE,UAAU,IAAY9G,EAAA,sBACvD,KAAK,YAAY,OAAS,IAC5B,MAAM,KAAK,aAAa,EAE5B,EAAC,EACD,KAAK,gBAAgB,iBAAiB,UAAgB+G,GAAO/G,EAAA,sBAE3D,KAAK,cAAgB+G,GAAO,CAAC,EAC7B,KAAK,iBAAmB,KAAK,cAAc,SAAW,CACxD,EAAC,CACH,GACA,eAAeC,EAAU,CACvB,KAAK,OAAS,CAAC,EACfF,GAAG,KAAK,gBAAgBE,CAAQ,CAAC,EAAE,UAAU,IAAM,CACjD,KAAK,YAAc,CAAC,EACpB,KAAK,YAAc,KAAK,MAC1B,CAAC,CACH,CACA,wBAAyB,CACvB,MAAO,CAAC,KAAK,OAAS,CAAC,KAAK,MAAM,KAAKC,GAAQA,GAAQA,EAAK,QAAQ,CACtE,CACA,qBAAsB,CACpB,KAAK,eAAe,KAAK,aAAa,CACxC,CACA,uBAAwB,CACtB,KAAK,iBAAiB,KAAK,aAAa,CAC1C,CACA,aAAanE,EAAI,CACf,KAAK,SAAWA,EAAG,SAAS,EAC5B,KAAK,OAAS,OACd,KAAK,OAAS,CAAC,EACfgE,GAAG,KAAK,eAAe,KAAK,QAAQ,CAAC,EAAE,UAAU,IAAY9G,EAAA,sBACrD,KAAK,YAAY,OAAS,IAC9B,MAAM,KAAK,aAAa,EAE5B,EAAC,CACH,CACA,cAAe,CACb,KAAK,QAAU,GACf,QAAQ,IAAI,YAAY,EACxBkH,GAAK,KAAK,YAAY,iBAAiB,CACrC,WAAY,KAAK,WACjB,OAAQ,KAAK,QACf,EAAG,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,CAAC,EAAE,UAAUC,GAAS,CACvE,KAAK,MAAQ,CAAC,EACd,KAAK,QAAU,GAEfL,GAAG,KAAK,SAASK,CAAK,CAAC,EAAE,UAAU,IAAM,CACvC,KAAK,QAAU,GAEX,KAAK,OAAO,OAAS,GACvB,KAAK,iBAAiB,KAAK,KAAK,MAAM,MAAM,CAEhD,CAAC,CACH,CAAC,CACH,CACA,UAAUC,EAAYC,EAAgB,CAChC,KAAK,SAAWD,IAClBC,EAAiB,MAED,KAAK,OAAO,KAAK1D,GAAqB,CACtD,KAAM,CACJ,OAAQyD,EACR,WAAYC,EACZ,OAAQ,KACR,QAAS,GACT,SAAU,KAAK,SACf,YAAa,KAAK,WACpB,EACA,aAAc,GACd,UAAW,QACX,MAAO,OACT,CAAC,EACS,YAAY,EAAE,UAAU,IAAM,CACtC,KAAK,eAAe,WAAW,EAAI,EACnC,KAAK,aAAa,EAClB,KAAK,eAAe,WAAW,EAAK,CACtC,CAAC,CACH,CACA,aAAarE,EAAQ,CACD,KAAK,OAAO,KAAKW,GAAqB,CACtD,KAAM,CACJ,OAAQ,KACR,WAAY,KACZ,OAAQX,EACR,QAAS,GACT,SAAU,KAAK,SACf,YAAa,KAAK,WACpB,EACA,aAAc,GACd,UAAW,QACX,MAAO,OACT,CAAC,EACS,YAAY,EAAE,UAAU,IAAM,CACtC,KAAK,aAAa,CACpB,CAAC,CACH,CACA,UAAUA,EAAQ,CAChB,KAAK,OAAS,OACd,KAAK,OAASA,CAEhB,CACA,uBAAuBA,EAAQ,CAC7B,KAAK,OAAO,KAAKoC,GAA+B,CAC9C,KAAM,CACJ,OAAQ,KACR,WAAY,KACZ,OAAQpC,CACV,EACA,aAAc,GACd,SAAU,OACZ,CAAC,CACH,CACA,YAAYsE,EAAcD,EAAgB,CACpC,KAAK,SAAWC,IAClBD,EAAiB,MAED,KAAK,OAAO,KAAK3H,GAAoB,CACrD,KAAM,CACJ,OAAQ4H,EACR,WAAYD,EACZ,OAAQ,IACV,EACA,aAAc,GACd,MAAO,OACT,CAAC,EACS,YAAY,EAAE,UAAgBE,GAASvH,EAAA,sBAC/C,KAAK,eAAe,WAAW,EAAI,EACnC,KAAK,QAAU,GACXuH,EAAM,QACR,MAAM,KAAK,iBAAiB,EAC5B,MAAM,KAAK,aAAa,GAE1B,KAAK,QAAU,GACf,KAAK,eAAe,WAAW,EAAK,CACtC,EAAC,CACH,CACM,eAAeC,EAAU,QAAAxH,EAAA,sBAC7B,KAAK,QAAU,GACfkH,GAAK,KAAK,cAAcM,CAAQ,CAAC,EAAE,KAAKC,GAAU,IACzC,KAAK,YAAY,aAAaD,EAAU,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,CAChG,CAAC,EAAE,UAAU,IAAM,CAClB,KAAK,aAAa,CACpB,CAAC,EACD,KAAK,QAAU,EAEjB,GACM,cAAcxE,EAAQ,QAAAhD,EAAA,sBAC1B,KAAK,QAAU,GACf,IAAM0H,EAAO,MAAM,KAAK,YAAY,eAAe1E,EAAQ,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,EAC3G,QAAW2E,KAAYD,EACrB,GAAIC,EAAS,WACX,GAAI,CACF,MAAM,KAAK,YAAY,OAAOA,CAAQ,CACxC,OAASC,EAAI,CACX,QAAQ,IAAIA,EAAG,OAAO,CACxB,QAAE,CACA,MAAM,KAAK,YAAY,cAAcD,EAAS,SAAU,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,CAC1G,MAEA,MAAM,KAAK,YAAY,aAAaA,EAAS,SAAU,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,EAG3G,KAAK,aAAa,EAClB,KAAK,QAAU,EACjB,GACM,SAASvD,EAAQ,QAAApE,EAAA,sBACrB,GAAIoE,EAAQ,CACV,YAAY,KAAO,6EACnB,IAAMwB,GAAO,MAAM,MAAMxF,GAAY,WAAWgE,CAAM,CAAC,GAAG,KAC1D,IAAIyD,EAAa,YAAY,kBAAkB,GAAGzD,EAAO,QAAQ,EAAE,EAEnE,GAAI,OAAO,gBAAoBwB,EAAI,OACjC,OAAOA,EAAI,OAAOiC,CAAU,EAAE,KAAK,IAAM,QAAQ,IAAI,cAAc,CAAC,EAGtE,IAAMC,EAASD,EAAW,UAAU,EAC9BE,EAASnC,EAAI,UAAU,EACvBoC,EAAO,IAAMD,EAAO,KAAK,EAAE,KAAKE,GAAOA,EAAI,KAAOH,EAAO,MAAM,EAAIA,EAAO,MAAMG,EAAI,KAAK,EAAE,KAAKD,CAAI,CAAC,EAC3GA,EAAK,CACP,CACF,GACM,iBAAiBZ,EAAYC,EAAgB,QAAArH,EAAA,sBACjD,KAAK,QAAU,GACf,IAAIkI,EAAO,KAAK,cAAc,KAAK1D,GAAKA,EAAE,KAAO4C,CAAU,GAAG,OAAS,OAAY,KAAK,cAAc,KAAK5C,GAAKA,EAAE,KAAO4C,CAAU,GAAG,KAAO,wBAC7I,MAAM,KAAK,YAAY,iBAAiB,CACtC,WAAYC,GAAkB,KAAK,WACnC,OAAQD,CACV,EAAG,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,EAAE,KAAWL,GAAO/G,EAAA,sBACrE,MAAM,KAAK,sBAAsB,YAAYkI,EAAMnB,CAAG,EACtD,KAAK,sBAAsB,SAAS,UAAUA,GAAO,CACnD,KAAK,QAAUA,CACjB,CAAC,CACH,EAAC,CACH,GACM,iBAAiBoB,EAAY,QAAAnI,EAAA,sBACjC,IAAMoI,EAAc,kBAAkB,IAAI,KAAK,EAAE,YAAY,CAAC,GAC9D,KAAK,QAAU,GACf,MAAM,KAAK,YAAY,sBAAsBD,CAAU,EAAE,KAAWpB,GAAO/G,EAAA,sBACzE,MAAM,KAAK,sBAAsB,YAAYoI,EAAarB,CAAG,CAC/D,EAAC,EACD,KAAK,sBAAsB,SAAS,UAAUA,GAAO,CACnD,KAAK,QAAUA,CACjB,CAAC,CACH,GACM,eAAeoB,EAAY,QAAAnI,EAAA,sBAC/B,KAAK,OAAO,KAAKmG,GAAsB,CACrC,KAAM,CACJ,QAAS,mDACX,CACF,CAAC,EAAE,YAAY,EAAE,UAAUkC,GAAU,CAC/BA,GACFF,EAAW,QAAQpE,GAAK,CACtB,KAAK,cAAcA,CAAC,CACtB,CAAC,CAEL,CAAC,CACH,GACM,yBAAyBgD,EAAK,QAAA/G,EAAA,sBAClC,GAAI+G,EAAK,CACP,IAAI3C,EAEJ,OADA,KAAK,OAAS,OACN2C,EAAI,OAAQ,CAClB,IAAK,WACH3C,EAAS,MAAM,KAAK,YAAY,aAAa2C,EAAI,GAAI,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,EACrG,MAAM,KAAK,SAAS3C,CAAM,EAC1B,MACF,IAAK,WACH,MAAM,KAAK,UAAU2C,EAAI,GAAI,IAAI,EACjC,MACF,IAAK,aACC,OAAO,SAAS,SAAS,YAAY,EAAE,QAAQ,UAAU,EAAI,GAC/D,OAAO,KAAK,GAAG,OAAO,SAAS,QAAQ,KAAK,OAAO,SAAS,IAAI,mBAAmBA,EAAI,EAAE,GAAI,QAAQ,EAErG,OAAO,KAAK,GAAG,OAAO,SAAS,QAAQ,KAAK,OAAO,SAAS,IAAI,UAAUA,EAAI,EAAE,GAAI,QAAQ,EAE9F,MACF,IAAK,aACC,OAAO,SAAS,SAAS,YAAY,EAAE,QAAQ,UAAU,EAAI,GAC/D,OAAO,KAAK,GAAG,OAAO,SAAS,QAAQ,KAAK,OAAO,SAAS,IAAI,mBAAmBA,EAAI,EAAE,GAAI,QAAQ,EAErG,OAAO,KAAK,GAAG,OAAO,SAAS,QAAQ,KAAK,OAAO,SAAS,IAAI,UAAUA,EAAI,EAAE,GAAI,QAAQ,EAE9F,MACF,IAAK,aACH,MAAM,KAAK,YAAYA,EAAI,GAAI,IAAI,EACnC,MACF,IAAK,qBACH,MAAM,KAAK,aAAaA,EAAI,EAAE,EAC9B,MACF,IAAK,yBACH,MAAM,KAAK,uBAAuBA,EAAI,EAAE,EACxC,MACF,IAAK,aACH3C,EAAS,MAAM,KAAK,YAAY,aAAa2C,EAAI,GAAI,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,EACrG,KAAK,YAAY,mBAAmB3C,EAAO,GAAI,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,EAC3FA,GACF,OAAO,KAAKhE,GAAY,WAAWgE,CAAM,EAAG,QAAQ,EAEtD,MACF,IAAK,cACH,KAAK,aAAa2C,EAAI,EAAE,EACxB,MACF,IAAK,eACH,KAAK,iBAAiBA,EAAI,GAAI,IAAI,EAClC,MACF,IAAK,kBACH,KAAK,OAAO,KAAKZ,GAAsB,CACrC,KAAM,CACJ,QAAS,mEACX,CACF,CAAC,EAAE,YAAY,EAAE,UAAUkC,GAAU,CAC/BA,GACF,KAAK,cAActB,EAAI,EAAE,CAE7B,CAAC,EACD,MACF,IAAK,gBACH,KAAK,OAAO,KAAKZ,GAAsB,CACrC,KAAM,CACJ,QAAS,mDACX,CACF,CAAC,EAAE,YAAY,EAAE,UAAUkC,GAAU,CAC/BA,GACF,KAAK,eAAetB,EAAI,EAAE,CAE9B,CAAC,EACD,MACF,IAAK,cACH,KAAK,OAAO,KAAKZ,GAAsB,CACrC,KAAM,CACJ,QAAS,iDACX,CACF,CAAC,EAAE,YAAY,EAAE,UAAUkC,GAAU,CAC/BA,GACF,KAAK,cAActB,EAAI,EAAE,CAE7B,CAAC,EACD,KAIJ,CACF,CACF,GACA,oBAAoBuB,EAAU,CAC5B,IAAIrB,EACJ,IAAKA,KAAQqB,EACXrB,EAAK,KAAOA,EAAK,KAAK,YAAc,gBAAkB,cACtDA,EAAK,QAAU,KAAK,WAAWA,CAAI,EACnCA,EAAK,SAAW,KAAK,oBAAoBA,EAAK,QAAQ,EAExD,OAAOqB,CACT,CACA,WAAWC,EAAQ,CACjB,IAAIC,EAAU,CAAC,EACf,OAAAA,EAAUD,EAAO,UAAU,iBAAiB,IAAIE,GAAKA,EAAE,kBAAkB,GAAK,KAAYD,EAAUA,EAAQ,OAAOD,EAAO,UAAU,iBAAiB,IAAIE,GAAKA,EAAE,kBAAkB,CAAC,EAC/KF,EAAO,OACLA,EAAO,KAAK,aACdC,EAAQ,KAAK,aAAa,EACtB,KAAK,cAAc,mBAAmBA,EAAQ,KAAK,UAAU,EAC7D,KAAK,cAAc,wBAAwBA,EAAQ,KAAK,YAAY,EACpE,KAAK,cAAc,oBAAoBA,EAAQ,KAAK,cAAc,EAClE,KAAK,cAAc,mBACrBA,EAAQ,KAAK,iBAAiB,EAC9BA,EAAQ,KAAK,eAAe,IAG1B,KAAK,cAAc,kBAAkBA,EAAQ,KAAK,aAAa,EAEjED,EAAO,KAAK,cACV,KAAK,cAAc,mBAAmBC,EAAQ,KAAK,oBAAoB,EACvED,EAAO,aAAe,GAAGC,EAAQ,KAAK,wBAAwB,IAG/DA,CACT,CACA,SAASrB,EAAO,CACd,KAAK,MAAQA,EAAM,IAAIuB,IACd,CACL,GAAIA,EAAE,GACN,KAAMA,EAAE,KACR,KAAMA,EAAE,KAAK,YAAc,2BAA6B,KAAK,YAAYA,EAAE,SAAS,UAAU,EAC9F,SAAU,KAAK,oBAAoBA,EAAE,QAAQ,EAC7C,QAAS,KAAK,WAAWA,CAAC,EAC1B,aAAcA,EAAE,aAChB,eAAgBA,EAAE,eAClB,iBAAkBA,EAAE,gBACtB,EACD,CACH,CACA,YAAYC,EAAU,CACpB,OAAQA,EAAU,CAChB,IAAK,QACH,MAAO,2BACT,IAAK,QACH,MAAO,0BACT,IAAK,QACH,MAAO,0BACT,IAAK,OACH,MAAO,+BACT,QACE,MAAO,wBACX,CACF,CACM,kBAAmB,QAAA3I,EAAA,sBACvB,KAAK,cAAgB,CAAC,EACtB,KAAK,cAAgB,MAAM,KAAK,YAAY,iBAAiB,CAC3D,WAAY,KAAK,WACjB,OAAQ,KAAK,MACf,EAAG,KAAK,SAAU,KAAK,YAAa,KAAK,UAAU,EACnD8G,GAAG,KAAK,aAAa,EAAE,UAAUK,GAAS,CACxCD,GAAKC,EAAM,OAAOhD,GAAQA,EAAK,KAAK,WAAW,CAAC,EAAE,KAAKyE,GAAOpE,GACrDA,EAAE,UAAYA,EAAE,SAAS,OAAS0C,GAAK1C,EAAE,QAAQ,EAAIqE,EAC7D,EAAGC,GAAIpE,IAAM,CACZ,GAAIA,EAAE,GACN,OAAQA,EAAE,OACV,KAAMA,EAAE,KACR,KAAMA,EAAE,IACV,EAAE,EAAGqE,GAAQ,CAAC,EAAE,UAAUlJ,GAAQ,CAChC,KAAK,cAAgBA,CACvB,CAAC,CACH,CAAC,CACH,GACA,gBAAgBmH,EAAU,EACpB,CAAC,MAAM,QAAQ,KAAK,aAAa,GAAK,KAAK,cAAc,OAAS,IACpEF,GAAG,KAAK,gBAAgB,EAAE,UAAU,EAEtC,IAAIkC,EAAU,KAAK,cAAc,KAAKxE,GAAKA,EAAE,GAAG,YAAY,IAAMwC,EAAS,YAAY,CAAC,EAMxF,GALIgC,IAAY,QACdlC,GAAG,KAAK,gBAAgB,EAAE,UAAU,IAAM,CACxCkC,EAAU,KAAK,cAAc,KAAKxE,GAAKA,EAAE,GAAG,YAAY,IAAMwC,EAAS,YAAY,CAAC,CACtF,CAAC,EAECgC,EAAS,CACP,KAAK,SAAW,SAClB,KAAK,OAAS,IAAI,OAEpB,IAAInD,EAAO,CACT,GAAImD,EAAQ,GACZ,SAAUA,EAAQ,OAClB,KAAMA,EAAQ,OAAS,aAAeA,EAAQ,KAAK,OAAS,GAAKA,EAAQ,KAAK,MAAM,EAAG,EAAE,EAAI,MAAQA,EAAQ,IAC/G,EACA,KAAK,OAAO,KAAKnD,CAAI,EACrB,KAAK,gBAAgBmD,EAAQ,MAAM,CACrC,KAAO,CACL,IAAInD,EAAO,CACT,GAAImB,EACJ,SAAU,GACV,KAAM,EACR,EACA,KAAK,OAAO,KAAKnB,CAAI,CACvB,CACF,CACA,iBAAkB,CAChB,OAAI,KAAK,SAAW,OACX,yDAEA,wDAEX,CA6DF,EA3DIY,EAAK,UAAO,SAAwCvG,EAAG,CACrD,OAAO,IAAKA,GAAKuG,GAA2BtG,EAAkBC,EAAW,EAAMD,EAAkB8I,EAAe,EAAM9I,EAAqB6F,EAAc,EAAM7F,EAAkBgD,EAAW,EAAMhD,EAAuB+I,EAAS,EAAM/I,EAAkBgJ,EAAqB,CAAC,CAClR,EAGA1C,EAAK,UAAyBlG,GAAkB,CAC9C,KAAMkG,EACN,UAAW,CAAC,CAAC,yCAAyC,CAAC,EACvD,OAAQ,CACN,OAAQ,SACR,WAAY,aACZ,SAAU,WACV,YAAa,cACb,cAAe,eACjB,EACA,QAAS,CACP,iBAAkB,kBACpB,EACA,SAAU,CAAI2C,GAAmB,CAAC,CAChC,QAASH,GACT,WAAY,IAAM,IAAIA,EACxB,CAAC,CAAC,EAAMI,EAAoB,EAC5B,MAAO,GACP,KAAM,EACN,OAAQ,CAAC,CAAC,EAAG,iBAAiB,EAAG,CAAC,QAAS,wDAAwD,EAAG,CAAC,EAAG,MAAM,EAAG,CAAC,QAAS,uBAAwB,EAAG,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,uCAAwC,EAAG,WAAY,QAAS,EAAG,MAAM,EAAG,CAAC,QAAS,sCAAuC,EAAG,WAAY,QAAS,EAAG,MAAM,EAAG,CAAC,EAAG,KAAK,EAAG,CAAC,EAAG,QAAQ,EAAG,CAAC,KAAM,mDAAmD,EAAG,CAAC,EAAG,MAAM,EAAG,CAAC,EAAG,YAAa,WAAY,WAAY,WAAY,WAAY,UAAU,EAAG,CAAC,QAAS,OAAQ,EAAG,MAAM,EAAG,CAAC,EAAG,MAAM,EAAG,CAAC,QAAS,wBAAyB,EAAG,QAAS,EAAG,QAAS,SAAS,EAAG,CAAC,EAAG,MAAO,WAAY,OAAQ,MAAO,EAAG,OAAO,EAAG,CAAC,EAAG,SAAS,EAAG,CAAC,EAAG,MAAO,mBAAoB,MAAM,EAAG,CAAC,EAAG,MAAO,cAAe,OAAQ,EAAG,OAAO,EAAG,CAAC,EAAG,WAAY,eAAgB,OAAO,EAAG,CAAC,EAAG,WAAY,iBAAkB,OAAO,EAAG,CAAC,EAAG,MAAO,cAAe,MAAO,cAAe,OAAQ,EAAG,WAAY,OAAO,EAAG,CAAC,EAAG,MAAO,aAAc,MAAO,cAAe,OAAQ,EAAG,WAAY,OAAO,EAAG,CAAC,EAAG,QAAS,eAAe,EAAG,CAAC,EAAG,mBAAmB,EAAG,CAAC,EAAG,SAAS,CAAC,EACrlC,SAAU,SAAyC7I,EAAIC,EAAK,CACtDD,EAAK,IACJE,EAAe,EAAG,MAAO,CAAC,EAC1BM,EAAW,EAAGsI,GAA+C,EAAG,EAAG,MAAO,CAAC,EAC3E5I,EAAe,EAAG,MAAO,CAAC,EAC1BM,EAAW,EAAGuI,GAA0C,EAAG,EAAG,SAAU,CAAC,EAAE,EAAGC,GAA0C,EAAG,EAAG,SAAU,CAAC,EAAE,EAAGC,GAA0C,EAAG,EAAG,SAAU,CAAC,EAAE,EAAGC,GAA0C,EAAG,EAAG,SAAU,CAAC,EACzQ9I,EAAa,EACbF,EAAe,EAAG,MAAO,CAAC,EAAE,EAAG,MAAO,CAAC,EAAE,EAAG,MAAO,CAAC,EACpDM,EAAW,GAAI2I,GAAiD,EAAG,EAAG,eAAgB,CAAC,EACvF/I,EAAa,EAAE,EAAE,EACjBI,EAAW,GAAI4I,GAAwC,EAAG,EAAG,MAAO,CAAC,EACrEhJ,EAAa,GAEdJ,EAAK,IACJgB,EAAU,EACVqI,EAAc,EAAGpJ,EAAI,cAAc,gBAAkB,EAAI,EAAE,EAC3De,EAAU,CAAC,EACXE,EAAW,OAAQjB,EAAI,cAAc,iBAAiB,EACtDe,EAAU,EACVE,EAAW,OAAQjB,EAAI,cAAc,sBAAsB,EAC3De,EAAU,EACVE,EAAW,OAAQjB,EAAI,cAAc,kBAAkB,EACvDe,EAAU,EACVE,EAAW,OAAQjB,EAAI,cAAc,gBAAgB,EACrDe,EAAU,CAAC,EACXE,EAAW,OAAQjB,EAAI,OAASA,EAAI,MAAM,OAAS,CAAC,EACpDe,EAAU,EACVE,EAAW,OAAQjB,EAAI,OAAO,EAErC,EACA,aAAc,CAAMqJ,GAAc5E,GAAcvD,GAASoI,GAAoBC,EAAiB,EAC9F,OAAQ,CAAC,itBAAitB,CAC5tB,CAAC,EAvfL,IAAMxD,EAANC,EA0fA,OAAOD,CACT,GAAG,EA9qGH,IAAAyD,GAsxGIC,IAAuBD,GAAA,KAAyB,CAClD,QAAQE,EAAOC,EAAO,CACpB,OAAOC,GAAG,CACR,OAAQ,uCACR,WAAY,uCACZ,SAAU,GACZ,CAAC,CACH,CAaF,EAXIJ,GAAK,UAAO,SAAoCK,EAAG,CACjD,OAAO,IAAKA,GAAKL,GACnB,EAGAA,GAAK,WAA0BM,GAAmB,CAChD,MAAON,GACP,QAASA,GAAmB,UAC5B,WAAY,MACd,CAAC,EAlBsBA,IA8d3B,IAAIO,IAA6B,IAAM,CACrC,IAAMC,EAAN,MAAMA,CAAa,CACjB,OAAO,SAAU,CACf,MAAO,CACL,SAAUA,CACZ,CACF,CAgBF,EAdIA,EAAK,UAAO,SAA8BC,EAAG,CAC3C,OAAO,IAAKA,GAAKD,EACnB,EAGAA,EAAK,UAAyBE,GAAiB,CAC7C,KAAMF,CACR,CAAC,EAGDA,EAAK,UAAyBG,GAAiB,CAC7C,QAAS,CAACC,GAAcC,GAAaC,GAA4BC,GAA8BC,GAAiBC,GAAeC,GAAsBC,GAAkBC,GAAiBC,EAAwB,CAClN,CAAC,EAnBL,IAAMd,EAANC,EAsBA,OAAOD,CACT,GAAG,qCE3wHFe,EAAA,EAAA,KAAA,EAAmC,EAAA,GAAA,EAC/BC,EAAA,EAAA,8BAAA,EAA4BC,EAAA,EAC/BF,EAAA,EAAA,MAAA,CAAA,EAAiB,EAAA,MAAA,CAAA,EAAA,EAAA,0CAAA,CAAA,EAEmLG,EAAA,mBAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAA,OAAoBC,EAAAF,EAAAG,eAAA,CAAgB,CAAA,CAAA,EAAEP,EAAA,EAA0C,EAAA,EAAA,oBAAzOQ,EAAA,CAAA,EAAAC,EAAA,SAAAC,EAAAC,OAAAC,EAAA,EAAoB,aAAAF,EAAAG,qBAAA,EAAA,WAAAH,EAAAI,cAAA,EAAA,cAAAJ,EAAAK,eAAA,EAAA,gBAAAL,EAAAM,gBAAA,0BAIhElB,EAAA,EAAA,KAAA,EAAuB,EAAA,MAAA,CAAA,EAAA,EAAA,GAAA,EAElBC,EAAA,EAAA,2DAAA,EAAyDC,EAAA,EAAI,EAAA,0BAGlEF,EAAA,EAAA,KAAA,EAAoB,EAAA,MAAA,CAAA,EAAA,EAAA,GAAA,EAEfC,EAAA,EAAA,mDAAA,EAAiDC,EAAA,EAAI,EAAA,GDP3D,IAAaiB,IAAuB,IAAA,CAA9B,IAAOA,EAAP,MAAOA,CAAuB,CAoBnCC,YAAoDL,EAAiEE,EAAuB,CAAxF,KAAAF,sBAAAA,EAAiE,KAAAE,gBAAAA,EAjBrG,KAAAI,UAAqB,GACrB,KAAAC,OAAkB,GAE3B,KAAAJ,iBAAqC,CAC3CK,uBAAwB,GACxBC,mBAAoB,GACpBC,kBAAmB,GACnBC,iBAAkB,GAClBC,iBAAkB,GAClBC,eAAgB,GAChBC,qBAAsB,GACtBC,uBAAwB,GACxBC,kBAAmB,GACnBC,gBAAiB,IAGX,KAAAhB,eAA0B,EAC+G,CAEzIP,gBAAc,CACpB,KAAKI,OAAOoB,cAAgB,EAC7B,yCAxBYd,GAAuBe,EAoBf,uBAAuB,EAAAA,EAAgD,iBAAiB,CAAA,CAAA,uBApBhGf,EAAuBgB,UAAA,CAAA,CAAA,qBAAA,CAAA,EAAAC,OAAA,CAAAvB,OAAA,SAAAQ,UAAA,YAAAC,OAAA,QAAA,EAAAe,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,SAAA,aAAA,EAAA,CAAA,EAAA,SAAA,aAAA,WAAA,cAAA,gBAAA,kBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICTpCzC,EAAA,EAAA,MAAA,CAAA,EACC2C,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAOM,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAWP5C,EAAA,SAlBOQ,EAAA,EAAAC,EAAA,OAAA,CAAA+B,EAAArB,WAAA,CAAAqB,EAAApB,MAAA,EAQAZ,EAAA,EAAAC,EAAA,OAAA+B,EAAArB,SAAA,EAKAX,EAAA,EAAAC,EAAA,OAAA+B,EAAApB,MAAA;uEDLD,IAAOH,EAAP4B,SAAO5B,CAAuB,GAAA,EETpC,IAAY6B,GAAZ,SAAYA,EAAgC,CAC3CA,OAAAA,EAAAA,EAAA,QAAA,CAAA,EAAA,UACAA,EAAAA,EAAA,MAAA,CAAA,EAAA,QACAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,MAAA,CAAA,EAAA,QACAA,EAAAA,EAAA,UAAA,CAAA,EAAA,YACAA,EAAAA,EAAA,QAAA,CAAA,EAAA,UACAA,EAAAA,EAAA,UAAA,CAAA,EAAA,YAPWA,CAQZ,EARYA,IAAgC,CAAA,CAAA,ECA5C,IAAYC,GAAZ,SAAYA,EAAqC,CAChDA,OAAAA,EAAAA,EAAA,QAAA,CAAA,EAAA,UACAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OACAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OACAA,EAAAA,EAAA,SAAA,CAAA,EAAA,WACAA,EAAAA,EAAA,SAAA,CAAA,EAAA,WANWA,CAOZ,EAPYA,IAAqC,CAAA,CAAA,2BEW3CC,EAAA,EAAA,QAAA,CAAA,4BAAoBC,EAAA,YAAAC,EAAAC,MAAAC,EAAA,sCAGpBC,EAAA,EAAA,QAAA,CAAA,EAAOC,GAAA,gBAAA,SAAAC,EAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAP,EAAAQ,EAAA,CAAA,EAAAC,UAAAC,OAAAC,GAAAX,EAAAY,UAAAP,CAAA,IAAAL,EAAAY,UAAAP,GAAAQ,EAAAR,CAAA,CAAA,CAAA,EAAPS,EAAA,+BAAOC,GAAA,UAAAf,EAAAY,SAAA,EAAkEb,EAAA,cAAAC,EAAAC,KAAA,sCAGzEE,EAAA,EAAA,QAAA,EAAA,EAAOC,GAAA,gBAAA,SAAAC,EAAA,CAAAC,EAAAU,CAAA,EAAA,IAAAhB,EAAAQ,EAAA,CAAA,EAAAC,UAAAC,OAAAC,GAAAX,EAAAY,UAAAP,CAAA,IAAAL,EAAAY,UAAAP,GAAAQ,EAAAR,CAAA,CAAA,CAAA,EAAPS,EAAA,+BAAOC,GAAA,UAAAf,EAAAY,SAAA,EAAoKb,EAAA,cAAAC,EAAAC,KAAA,EAAnIgB,GAAA,MAAAjB,EAAAkB,IAAAlB,EAAAkB,IAAA,IAAA,EAA+C,MAAAlB,EAAAmB,IAAAnB,EAAAmB,IAAA,IAAA,sCAGvFhB,EAAA,EAAA,QAAA,EAAA,EAAOC,GAAA,gBAAA,SAAAC,EAAA,CAAAC,EAAAc,CAAA,EAAA,IAAApB,EAAAQ,EAAA,CAAA,EAAAC,UAAAC,OAAAC,GAAAX,EAAAY,UAAAP,CAAA,IAAAL,EAAAY,UAAAP,GAAAQ,EAAAR,CAAA,CAAA,CAAA,EAAPS,EAAA,+BAAOC,GAAA,UAAAf,EAAAY,SAAA,EAAmFb,EAAA,cAAAC,EAAAC,KAAA,sCAG1FE,EAAA,EAAA,MAAA,EAAA,EAAwB,EAAA,QAAA,EAAA,EACmDkB,EAAA,gBAAA,SAAAhB,EAAA,CAAAC,EAAAgB,CAAA,EAAA,IAAAC,EAAAf,EAAA,CAAA,EAAAgB,MAAAC,EAAAjB,EAAA,EAAA,OAAiBK,EAAAY,EAAAC,iBAAArB,EAAAkB,CAAA,CAA2B,CAAA,CAAA,EAAtHT,EAAA,EACAhB,EAAA,EAAA,QAAA,EAAA,EAEDgB,EAAA,+BAHiCa,EAAA,EAAA5B,EAAA,UAAAC,EAAAY,YAAA,MAAA,EAAyC,cAAAZ,EAAAC,KAAA,EACzC0B,EAAA,EAAA5B,EAAA,YAAAC,EAAAC,MAAAC,EAAA,sCAKjCC,EAAA,EAAA,WAAA,EAAA,EAAUC,GAAA,gBAAA,SAAAC,EAAA,CAAAC,EAAAsB,CAAA,EAAA,IAAA5B,EAAAQ,EAAA,CAAA,EAAAC,UAAAC,OAAAC,GAAAX,EAAAY,UAAAP,CAAA,IAAAL,EAAAY,UAAAP,GAAAQ,EAAAR,CAAA,CAAA,CAAA,EAA2GS,EAAA,+BAA3GC,GAAA,UAAAf,EAAAY,SAAA,EAA4Eb,EAAA,cAAAC,EAAAC,KAAA,4BAnBtF4B,EAAA,EAAAC,GAAA,EAAA,EAAA,QAAA,CAAA,EAAoK,EAAAC,GAAA,EAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,CAAA,mCAAlHpC,EAAA,OAAAC,EAAAoC,yCAAAC,EAAAC,sCAAAC,QAAA,EAClDZ,EAAA,EAAAa,EAAA,GAAAC,EAAAzC,EAAAoC,2CAAAC,EAAAC,sCAAAI,KAAA,EAAAD,IAAAJ,EAAAC,sCAAAK,OAAA,EAAAF,IAAAJ,EAAAC,sCAAAM,KAAA,EAAAH,IAAAJ,EAAAC,sCAAAC,SAAA,EAAAE,IAAAJ,EAAAC,sCAAAO,SAAA,EAAA,EAAA,4BA4BC/C,EAAA,EAAA,SAAA,EAAA,yBACEC,EAAA,QAAA+C,EAAAC,KAAA,EAAmB,YAAAD,EAAAC,MAAA7C,EAAA,sCAJtBJ,EAAA,EAAA,QAAA,EAAA,EACAK,EAAA,EAAA,SAAA,EAAA,EAA4BC,GAAA,gBAAA,SAAAC,EAAA,CAAAC,EAAA0C,CAAA,EAAA,IAAAhD,EAAAQ,EAAA,EAAAC,UAAAC,OAAAC,GAAAX,EAAAY,UAAAP,CAAA,IAAAL,EAAAY,UAAAP,GAAAQ,EAAAR,CAAA,CAAA,CAAA,EAC3BP,EAAA,EAAA,SAAA,EAAA,EACA+B,EAAA,EAAAoB,GAAA,EAAA,EAAA,SAAA,EAAA,EAIDnC,EAAA,8BAPOf,EAAA,YAAAC,EAAAC,MAAAC,EAAA,EACqByB,EAAA,EAAAZ,GAAA,UAAAf,EAAAY,SAAA,EAEHe,EAAA,CAAA,EAAA5B,EAAA,UAAAC,EAAAkD,gBAAA,0BAQzB/C,EAAA,EAAA,GAAA,EAAGgD,EAAA,EAAA,OAAA,EAAKrC,EAAA,yBAGRhB,EAAA,EAAA,IAAA,2BAGAA,EAAA,EAAA,KAAA,EAAA,2BAAIC,EAAA,YAAAC,EAAAC,MAAAC,EAAA,4BAGJJ,EAAA,EAAA,IAAA,EAAA,2BAAGC,EAAA,YAAAC,EAAAC,MAAAC,EAAA,6BArDLC,EAAA,EAAA,gBAAA,CAAA,EAEqC,EAAA,MAAA,CAAA,EAInC0B,EAAA,EAAAuB,GAAA,EAAA,CAAA,EAwBC,EAAAC,GAAA,EAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,CAAA,EA0BF3C,EAAA,EAAM,kCAvDDf,EAAA,UAAAC,EAAA0D,UAAA,EAAA,IAAA1D,EAAA0D,QAAA,EAA4D,UAAA1D,EAAA2D,SAAA,EAIhEhC,EAAA,CAAA,EAAAa,EAAA,GAAAoB,EAAA5D,EAAA6D,6CAAAC,EAAAC,iCAAAC,MAAA,EAAAJ,IAAAE,EAAAC,iCAAAE,OAAA,EAAAL,IAAAE,EAAAC,iCAAAG,MAAA,EAAAN,IAAAE,EAAAC,iCAAAI,UAAA,EAAAP,IAAAE,EAAAC,iCAAAK,QAAA,EAAAR,IAAAE,EAAAC,iCAAAM,UAAA,EAAA,EAAA,GDGN,IAAaC,IAAa,IAAA,CAApB,IAAOA,EAAP,MAAOA,CAAa,CAL1BC,aAAA,CASQ,KAAAR,iCAAmCA,GACnC,KAAAzB,sCAAwCA,GAG/CkC,UAAQ,CACP,KAAKC,OAAOC,UAAY,KAAKC,eAAe,KAAKF,OAAQC,SAAU,CACpE,CAEOC,eAAeD,EAA8B,CAEnDA,OAAAA,EAAUE,KAAK,CAACC,EAAsBC,IAAyBD,EAAErD,MAAQsD,EAAEtD,KAAK,EAEhFkD,EAAUK,QAAQC,GAAO,CACxB,IAAKA,EAAKpE,WAAa,MAAQoE,EAAKpE,WAAa,MAAQoE,EAAKC,cAAgBD,EAAKE,kBAClF,OAAQF,EAAK5C,wCAAuC,CACnD,KAAKE,GAAsCM,KAC1C,IAAIuC,EAAcC,GAAWJ,EAAKC,aAAe,aAAc,OAAO,EACtED,EAAKpE,UAAYuE,EACjB,MACD,KAAK7C,GAAsCC,SAC1CyC,EAAKpE,UAAYoE,EAAKE,kBAAoB,GAAO,OAAS,GAC1D,MACD,QACCF,EAAKpE,UAAYoE,EAAKC,aACtB,KACF,CAEF,CAAC,EAEMP,CACR,CAEAhD,iBAAiB2D,EAAkB7D,EAAa,CAC/C,KAAKiD,OAAOC,UAAUlD,CAAK,EAAEZ,UAAYyE,EAAU,OAAS,OAC7D,yCAtCYf,EAAa,uBAAbA,EAAagB,UAAA,CAAA,CAAA,eAAA,CAAA,EAAAC,OAAA,CAAAd,OAAA,QAAA,EAAAe,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,MAAA,QAAA,EAAA,CAAA,OAAA,MAAA,YAAA,MAAA,EAAA,CAAA,EAAA,UAAA,UAAA,EAAA,QAAA,SAAA,EAAA,CAAA,EAAA,UAAA,SAAA,EAAA,CAAA,EAAA,SAAA,MAAA,EAAA,CAAA,QAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,EAAA,OAAA,EAAA,WAAA,EAAA,CAAA,OAAA,OAAA,EAAA,eAAA,EAAA,UAAA,cAAA,eAAA,EAAA,CAAA,OAAA,SAAA,EAAA,eAAA,EAAA,UAAA,cAAA,eAAA,EAAA,CAAA,OAAA,OAAA,MAAA,aAAA,EAAA,eAAA,EAAA,UAAA,cAAA,eAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,OAAA,WAAA,QAAA,GAAA,EAAA,mBAAA,EAAA,UAAA,cAAA,eAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,CAAA,OAAA,OAAA,EAAA,eAAA,YAAA,EAAA,UAAA,cAAA,eAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,cAAA,EAAA,UAAA,eAAA,EAAA,CAAA,QAAA,EAAA,EAAA,CAAA,EAAA,QAAA,YAAA,EAAA,QAAA,SAAA,EAAA,CAAA,EAAA,QAAA,WAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICZ1BzF,EAAA,EAAA,MAAA,CAAA,EAAoC,EAAA,MAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAAA,EAAA,gBAAA,CAAA,EAIhC0B,EAAA,EAAAiE,GAAA,EAAA,EAAA,gBAAA,CAAA,EA0DDhF,EAAA,EAAgB,EAAA,EAAA,SA1DqBa,EAAA,CAAA,EAAA5B,EAAA,UAAA8F,EAAApB,OAAAC,SAAA;4DDQlC,IAAOJ,EAAPyB,SAAOzB,CAAa,GAAA,EE2E1B,IAAa0B,IAAU,IAAA,CAAjB,IAAOA,EAAP,MAAOA,CAAU,yCAAVA,EAAU,uBAAVA,CAAU,CAAA,2BA3CrBC,GACAC,GACAC,GACAC,GAAYC,QAAQ,CACnBC,QAAS,CACRC,QAAS,CACR,CAAC,OAAQ,SAAU,WAAW,EAC9B,CAAC,CAAE,KAAQ,SAAS,EAAI,CAAE,KAAQ,QAAQ,CAAE,EAC5C,CAAC,CAAE,OAAU,KAAK,EAAI,CAAE,OAAU,OAAO,CAAE,EAC3C,CAAC,CAAE,OAAU,IAAI,EAAI,CAAE,OAAU,IAAI,CAAE,EACvC,CAAC,CAAE,UAAa,KAAK,CAAE,EACvB,CAAC,CAAE,MAAS,CAAA,CAAE,CAAE,EAChB,CAAC,OAAO,EACR,CAAC,CAAE,OAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAK,CAAC,CAAE,CAAC,GAG3CC,cAAe,CAAC,CACfC,OAAQ,yBACRC,UAAW,CAAC,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,MAAM,EACjE,EACD,EACDC,GAkBAA,EAAe,CAAA,CAAA,EAIX,IAAOX,EAAPY,SAAOZ,CAAU,GAAA,ECq7BvB,IAAMa,GAAc,CAClB,UAAW,GACX,uBAAwB,CAC1B,EA0KA,GAAM,CACJ,uBAAAC,EACF,EAAIC,GAwmHJ,IAAMC,IAAY,IAAM,CACtB,IAAMC,EAAQ,IAAM,mBAAmB,KAAK,UAAU,SAAS,GAAK,YAAY,KAAK,UAAU,SAAS,GAAK,UAAU,gBAAkB,UAAU,eAAiB,EAC9JC,EAAY,IAAM,UAAU,KAAK,UAAU,SAAS,EAC1D,OAAO,OAAO,UAAc,IAAc,CAAC,CAAC,UAAU,YAAcD,EAAM,GAAKC,EAAU,GAAK,EAChG,GAAG,EA+BH,IAAMC,GAA8B,CAAC,UAAW,yBAA0B,6CAA8C,yBAA0B,2BAA4B,oBAAqB,iCAAiC,EAAE,KAAK,IAAI,EA2gC/O,IAAMC,GAAuB,IAAI,KAAK,KAAM,GAAI,EAAE,EAC5CC,GAAsB,IAAI,KAAK,KAAM,GAAI,EAAE,EAGjD,IAAMC,GAAU,IAAO,GAAK,GAAK,GAggBjC,IAAMC,GAAiB,KACjBC,GAAgB,GAAKD,GACrBE,GAAyB,GAAKF,GAAiB,IAC/CG,GAAkB,GAAKF,GAAgBC,GACvCE,GAAU,GAAKJ,GAAiB,IA0uItC,IAAIK,IAAiC,IAAM,CACzC,IAAMC,EAAN,MAAMA,CAAiB,CAcvB,EAZIA,EAAK,UAAO,SAAkCC,EAAG,CAC/C,OAAO,IAAKA,GAAKD,EACnB,EAGAA,EAAK,UAAyBE,GAAiB,CAC7C,KAAMF,CACR,CAAC,EAGDA,EAAK,UAAyBG,GAAiB,CAAC,CAAC,EAZrD,IAAMJ,EAANC,EAeA,OAAOD,CACT,GAAG,EA6lFH,IAAMK,GAAkB,IAAIC,GAAe,uBAAwB,CACjE,WAAY,OACZ,QAAS,IAAM,GACjB,CAAC,ECpraD,IAAYC,GAAZ,SAAYA,EAAU,CACrBA,OAAAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OACAA,EAAAA,EAAA,UAAA,CAAA,EAAA,YAFWA,CAGZ,EAHYA,IAAU,CAAA,CAAA,qCEGpBC,EAAA,EAAA,SAAA,CAAA,EAEEC,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAA,OAASC,EAAAF,EAAAG,eAAA,CAAgB,CAAA,CAAA,EAE1BP,EAAA,EAAA,UAAA,EAAUQ,EAAA,EAAA,YAAA,EAAUC,EAAA,EAAWD,EAAA,CAAA,EAChCC,EAAA,oBAFEC,EAAA,WAAAC,EAAAC,uBAAA,CAAA,EAC8BC,EAAA,CAAA,EAAAC,GAAA,OAAAH,EAAAI,oBAAA,GAAA,sCAM/Bf,EAAA,EAAA,oBAAA,EAAA,EAA+BC,EAAA,QAAA,UAAA,CAAAC,EAAAc,CAAA,EAAA,IAAAC,EAAAZ,EAAA,CAAA,EAAA,OAASC,EAAAW,EAAAC,WAAAD,EAAAE,mBAAAC,UAAA,CAAyC,CAAA,CAAA,EAAgBC,EAAA,EAAA,WAAA,EAAA,EAA6FZ,EAAA,sCAG9LT,EAAA,EAAA,oBAAA,EAAA,EAA+BC,EAAA,QAAA,UAAA,CAAAC,EAAAoB,CAAA,EAAA,IAAAC,EAAAlB,EAAA,CAAA,EAAA,OAASC,EAAAiB,EAAAL,WAAAK,EAAAJ,mBAAAK,KAAA,CAAoC,CAAA,CAAA,EAAqBH,EAAA,EAAA,WAAA,EAAA,EAAmFZ,EAAA,sCAGpLT,EAAA,EAAA,oBAAA,EAAA,EAA+BC,EAAA,QAAA,UAAA,CAAAC,EAAAuB,CAAA,EAAA,IAAAC,EAAArB,EAAA,CAAA,EAAA,OAASC,EAAAoB,EAAAC,oBAAA,CAAqB,CAAA,CAAA,EAAkC3B,EAAA,EAAA,UAAA,EAAUQ,EAAA,EAAA,MAAA,EAAIC,EAAA,EAAWD,EAAA,EAAA,UAAA,EAAUC,EAAA,qBAAnEC,EAAA,UAAAkB,EAAAC,kBAAA,CAAA,sCARhE7B,EAAA,EAAA,0BAAA,CAAA,EAAyB8B,GAAA,gBAAA,SAAAC,EAAA,CAAA7B,EAAA8B,CAAA,EAAA,IAAAC,EAAA5B,EAAA,EAAA6B,OAAAC,GAAAF,EAAAG,gBAAAL,CAAA,IAAAE,EAAAG,gBAAAL,GAAAzB,EAAAyB,CAAA,CAAA,CAAA,EACxBM,EAAA,EAAAC,GAAA,EAAA,EAAA,oBAAA,EAAA,EAEC,EAAAC,GAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,EAAAC,GAAA,EAAA,EAAA,oBAAA,EAAA,EAOF/B,EAAA,oBAVyBgC,GAAA,UAAAC,EAAAN,eAAA,EAA8B1B,EAAA,WAAA,EAAA,EACtDG,EAAA,EAAA8B,EAAA,EAAAD,EAAAE,WAAA,QAAA,EAAA,EAAA,EAGA/B,EAAA,EAAA8B,EAAA,EAAAD,EAAAE,WAAA,QAAA,EAAA,EAAA,EAGA/B,EAAA,EAAA8B,EAAA,EAAAD,EAAAG,cAAA,EAAA,EAAA,oEAOD7C,EAAA,EAAA,SAAA,EAAA,EAGEC,EAAA,QAAA,UAAA,CAAAC,EAAA4C,CAAA,EAAA,IAAAC,EAAA1C,EAAA,EAAA,OAASC,EAAAyC,EAAAC,WAAA,CAAY,CAAA,CAAA,EACtBxC,EAAA,CAAA,EACAR,EAAA,EAAA,UAAA,EAAUQ,EAAA,EAAA,eAAA,EAAaC,EAAA,EAAW,oBAL3BC,EAAA,UAAAuC,GAAA,EAAAC,GAAA,CAAAC,EAAAC,sBAAA,CAAAD,EAAAN,cAAA,MAAA,IAAA,CAAA,EAIPhC,EAAA,EAAAC,GAAA,IAAAqC,EAAAE,gBAAA,OAAA,sCAKDrD,EAAA,EAAA,SAAA,EAAA,EAEEC,EAAA,QAAA,UAAA,CAAAC,EAAAoD,CAAA,EAAA,IAAAC,EAAAlD,EAAA,EAAA,OAASC,EAAAiD,EAAAC,UAAA,CAAW,CAAA,CAAA,EACrBhD,EAAA,CAAA,EACAR,EAAA,EAAA,UAAA,EAAUQ,EAAA,EAAA,eAAA,EAAaC,EAAA,EAAW,oBADlCI,EAAA,EAAAC,GAAA,IAAA2C,EAAAJ,gBAAA,OAAA,sCAMFrD,EAAA,EAAA,MAAA,EAAA,EAA+B,EAAA,MAAA,EACxBQ,EAAA,EAAA,mBAAA,EAAiBC,EAAA,EACvBT,EAAA,EAAA,aAAA,EAAA,EAAqD,EAAA,QAAA,EAAA,EAC9BC,EAAA,gBAAA,SAAA8B,EAAA,CAAA7B,EAAAwD,CAAA,EAAA,IAAAC,EAAAtD,EAAA,EAAA,OAAiBC,EAAAqD,EAAAC,0BAAA7B,CAAA,CAAiC,CAAA,CAAA,EAAED,GAAA,gBAAA,SAAAC,EAAA,CAAA7B,EAAAwD,CAAA,EAAA,IAAAG,EAAAxD,EAAA,EAAA6B,OAAAC,GAAA0B,EAAAC,UAAA/B,CAAA,IAAA8B,EAAAC,UAAA/B,GAAAzB,EAAAyB,CAAA,CAAA,CAAA,EAA1EtB,EAAA,EAAoG,EAAA,oBAA1BI,EAAA,CAAA,EAAA4B,GAAA,UAAAsB,EAAAD,SAAA,sCAM5E9D,EAAA,EAAA,MAAA,EAAA,EAAsF,EAAA,SAAA,EAAA,EAC/CC,EAAA,QAAA,UAAA,CAAAC,EAAA8D,CAAA,EAAA,IAAAC,EAAA5D,EAAA,EAAA,OAASC,EAAA2D,EAAAC,sBAAAD,EAAAE,WAAAC,IAAA,CAAsC,CAAA,CAAA,EAAE5D,EAAA,EAAA,cAAA,EAAYC,EAAA,EACnGT,EAAA,EAAA,SAAA,EAAA,EAAsCC,EAAA,QAAA,UAAA,CAAAC,EAAA8D,CAAA,EAAA,IAAAK,EAAAhE,EAAA,EAAA,OAASC,EAAA+D,EAAAH,sBAAAG,EAAAF,WAAAG,SAAA,CAA2C,CAAA,CAAA,EAAE9D,EAAA,EAAA,eAAA,EAAaC,EAAA,EAAS,GDhCpH,IAAa8D,IAAuB,IAAA,CAA9B,IAAOA,EAAP,MAAOA,CAAuB,CA4BnCC,YAAoBC,EACXC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAAc,CARH,KAAAR,sBAAAA,EACX,KAAAC,aAAAA,EACA,KAAAC,cAAAA,EACA,KAAAC,oBAAAA,EACA,KAAAC,YAAAA,EACA,KAAAC,kBAAAA,EACA,KAAAC,gBAAAA,EACA,KAAAC,aAAAA,EACA,KAAAC,OAAAA,EAjCO,KAAApC,cAAyB,GACzB,KAAAqC,eAA0B,GAC1B,KAAA7B,gBAA0B,OAC1B,KAAAtC,oBAA8B,WAC9B,KAAAoE,OAAkB,GAClB,KAAA/B,qBAAgC,GAChC,KAAAgC,iBAA4B,GAC5B,KAAAC,YAAuB,GAEtB,KAAAC,qBAAuB,IAAIC,GAC3B,KAAAC,iBAAmB,IAAID,GACvB,KAAAE,cAAgB,IAAIF,GAG9B,KAAApB,WAAaA,GACb,KAAAuB,eAA0B,GAG1B,KAAAvE,mBAAqBA,GACrB,KAAAwE,qBAAgC,GAChC,KAAA7B,UAAoB,EAEpB,KAAA1B,gBAA6B,CAAA,EAC7B,KAAAwD,iBAA6B,CAAA,EAYnC,KAAKb,gBAAgBc,WACpB,aACA,KAAKb,aAAac,+BAA+B,8BAA8B,CAAC,EAEjF,KAAKf,gBAAgBc,WACpB,QACA,KAAKb,aAAac,+BAA+B,yBAAyB,CAAC,CAE7E,CAEOC,UAAQ,CACV,KAAKZ,SACRa,GAAS,CACRC,kBAAmB,KAAKxB,sBAAsByB,qBAAoB,EAClEC,gBAAiB,KAAK1B,sBAAsB2B,mBAAkB,EAC9DR,iBAAkB,KAAKnB,sBAAsB4B,0BAAyB,EACtE,EAAEC,UAAWC,GAAsG,CACnH,KAAKX,iBAAmBW,EAAKX,iBAC7B,KAAKY,cAAcD,EAAKJ,gBAAiBI,EAAKN,iBAAiB,CAChE,CAAC,EAED,KAAKxB,sBAAsBgC,uBAAuBH,UAAWH,GAAqC,CACjG,KAAK1B,sBAAsByB,qBAAoB,EAC7CQ,KAAKC,GAAK,CAAE,EACZL,UAAWL,GAA6B,CACxC,KAAKO,cAAcL,EAAiBF,CAAiB,CACtD,CAAC,CACH,CAAC,EAED,KAAKrB,oBAAoBgC,YAAW,EAAGN,UAAW1D,GAAoB,CACrE,KAAKA,SAAWA,CACjB,CAAC,EAED,KAAK6B,sBAAsBoC,wBAAwBP,UAAWQ,GAA4B,CACzF,KAAKlB,iBAAmBkB,CACzB,CAAC,EAED,KAAKjC,YAAYkC,mBAAmBT,UAAWU,GAAkB,CAC5DA,GACH,KAAKC,yBAAyBD,EAAIE,KAAMF,EAAIG,OAAO,CAErD,CAAC,EAEH,CAEOX,cAAcY,EAA4BnB,EAAyB,CACzE,KAAKP,eAAiB0B,EAASA,SAASC,aAAepB,EACvD,KAAKrF,qBAAuBwG,EAASA,SAASC,UAC/C,CAEOxF,mBAAiB,CACvB,OAAO,KAAK+D,iBAAiB0B,QAAQ,KAAK1G,oBAAoB,IAAM,EACrE,CAEOM,WAAWgG,EAAwB,CACzC,OAAO,KAAKrC,YAAY0C,aAAaL,CAAI,CAC1C,CAEOvF,qBAAmB,CACzB,KAAK8C,sBAAsB9C,oBAAmB,CAC/C,CAEO6F,iBAAe,CACrB,KAAK7C,cAAc8C,wBAAuB,CAC3C,CAEOzE,YAAU,CAChB,KAAKwC,iBAAiBkC,KAAI,CAC3B,CAEOnH,gBAAc,CACpB,KAAK+E,qBAAqBoC,KAAI,CAC/B,CAEOlE,WAAS,CACXmE,QAAQ,0CAA0C,GACrD,KAAKlC,cAAciC,KAAI,CAEzB,CAGOxD,sBAAsB0D,EAAiB,CAC7C,OAAQA,EAAK,CACZ,KAAKzD,GAAWC,KACf,KAAKa,OAAO4C,cAAc,GAAG,EAC7B,MACD,KAAK1D,GAAWG,UACf,KAAKW,OAAO4C,cAAc,aAAa,EACvC,MACD,QACC,KACF,CACD,CAEOjE,0BAA0BkE,EAAoB,CACpD,KAAKhD,kBAAkBlB,0BAA0BkE,CAAY,CAC9D,CAEQb,yBAAyBC,EAA0Ba,EAAc,CAExE,OAAQb,EAAI,CACX,KAAK/F,GAAmBC,WACvB,KAAKuE,qBAAuBoC,EAC5B,MACD,QACD,CACD,yCAhJYxD,GAAuByD,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAAAF,EAAAG,EAAA,EAAAH,EAAAI,EAAA,EAAAJ,EAAAK,EAAA,EAAAL,EAAAM,EAAA,EAAAN,EAAAO,EAAA,EAAAP,EAAAQ,EAAA,EAAAR,EAAAS,EAAA,CAAA,CAAA,uBAAvBlE,EAAuBmE,UAAA,CAAA,CAAA,iBAAA,CAAA,EAAAC,OAAA,CAAAC,KAAA,OAAA/F,cAAA,gBAAAqC,eAAA,iBAAA7B,gBAAA,kBAAAtC,oBAAA,sBAAAoE,OAAA,SAAA/B,qBAAA,uBAAAgC,iBAAA,mBAAAC,YAAA,aAAA,EAAAwD,QAAA,CAAAvD,qBAAA,uBAAAE,iBAAA,mBAAAC,cAAA,eAAA,EAAAqD,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,SAAA,kBAAA,MAAA,KAAA,IAAA,EAAA,CAAA,EAAA,QAAA,WAAA,SAAA,0BAAA,gBAAA,EAAA,CAAA,oBAAA,GAAA,QAAA,MAAA,EAAA,UAAA,EAAA,CAAA,EAAA,UAAA,UAAA,EAAA,CAAA,oBAAA,GAAA,QAAA,MAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,GAAA,QAAA,KAAA,EAAA,CAAA,QAAA,mBAAA,EAAA,CAAA,QAAA,yEAAA,EAAA,CAAA,oBAAA,GAAA,EAAA,MAAA,EAAA,WAAA,OAAA,EAAA,CAAA,EAAA,UAAA,WAAA,eAAA,EAAA,CAAA,QAAA,MAAA,QAAA,OAAA,EAAA,CAAA,QAAA,MAAA,QAAA,YAAA,EAAA,CAAA,QAAA,MAAA,EAAA,SAAA,EAAA,CAAA,QAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,UAAA,aAAA,aAAA,aAAA,qBAAA,OAAA,EAAA,CAAA,QAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,UAAA,QAAA,aAAA,QAAA,qBAAA,OAAA,EAAA,CAAA,EAAA,MAAA,EAAA,UAAA,OAAA,EAAA,CAAA,oBAAA,GAAA,EAAA,MAAA,EAAA,UAAA,OAAA,EAAA,CAAA,oBAAA,GAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,CAAA,WAAA,GAAA,MAAA,MAAA,MAAA,MAAA,OAAA,MAAA,EAAA,CAAA,iBAAA,GAAA,EAAA,UAAA,eAAA,EAAA,CAAA,EAAA,QAAA,WAAA,SAAA,yBAAA,QAAA,QAAA,gBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICtBpClJ,EAAA,EAAA,MAAA,CAAA,EAA8C,EAAA,MAAA,CAAA,EAE5CqC,EAAA,EAAA+G,GAAA,EAAA,EAAA,SAAA,CAAA,EAOC,EAAAC,GAAA,EAAA,EAAA,0BAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,EAAA,SAAA,CAAA,EAAA,EAAAC,GAAA,EAAA,EAAA,SAAA,CAAA,EAgCF9I,EAAA,EACA4B,EAAA,EAAAmH,GAAA,EAAA,EAAA,MAAA,CAAA,EAQC,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAQFhJ,EAAA,SAxDEI,EAAA,CAAA,EAAA8B,EAAA,EAAAwG,EAAA/F,qBAAA,EAAA,EAAA,EAQAvC,EAAA,EAAA8B,EAAA,EAAAwG,EAAAhE,OAAA,EAAA,EAAA,EAcAtE,EAAA,EAAA8B,EAAA,EAAAwG,EAAA/D,kBAAA,CAAA+D,EAAAzD,eAAA,EAAA,EAAA,EASA7E,EAAA,EAAA8B,EAAA,EAAAwG,EAAAzD,eAAA,EAAA,EAAA,EASD7E,EAAA,EAAA8B,EAAA,EAAAwG,EAAAxD,qBAAA,EAAA,EAAA,EASA9E,EAAA,EAAA8B,EAAA,EAAAwG,EAAAhE,OAAA,GAAA,CAAA;mED7BK,IAAOZ,EAAPmF,SAAOnF,CAAuB,GAAA,qCGpBhCoF,EAAA,EAAA,SAAA,CAAA,EAGEC,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAA,OAASC,EAAAF,EAAAG,YAAA,CAAa,CAAA,CAAA,EACtBP,EAAA,EAAA,UAAA,EAAUQ,EAAA,EAAA,mBAAA,EAAiBC,EAAA,EAAW,GDC5C,IAAaC,IAAiB,IAAA,CAAxB,IAAOA,EAAP,MAAOA,CAAiB,CAL9BC,aAAA,CAOQ,KAAAC,YAAsB,EAEnBC,UAAQ,CACjBC,SAASC,eAAe,UAAU,EAAGC,iBAAiB,SAAUC,GAAK,KAAKC,SAASD,CAAC,CAAC,CACtF,CAEOE,aAAW,CACjBL,SAASC,eAAe,UAAU,EAAGK,oBAAoB,SAAUH,GAAK,KAAKC,SAASD,CAAC,CAAC,CACzF,CAEOC,SAASG,EAAY,CAC3B,KAAKT,YAAcE,SAASC,eAAe,UAAU,EAAGO,SACzD,CAEOf,aAAW,CACjBO,SAASC,eAAe,UAAU,EAAGQ,SAAS,CAC7CC,KAAM,EACNC,IAAK,EACLC,SAAU,SACV,CACF,yCAtBYhB,EAAiB,uBAAjBA,EAAiBiB,UAAA,CAAA,CAAA,YAAA,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,eAAA,EAAA,CAAA,eAAA,GAAA,aAAA,gBAAA,QAAA,KAAA,EAAA,CAAA,eAAA,GAAA,aAAA,gBAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICP9BhC,EAAA,EAAA,MAAA,CAAA,EACEkC,EAAA,EAAAC,GAAA,EAAA,EAAA,SAAA,CAAA,EAQF1B,EAAA,SARE2B,EAAA,EAAAC,EAAA,EAAAJ,EAAArB,YAAA,EAAA,EAAA,EAAA;iEDMI,IAAOF,EAAP4B,SAAO5B,CAAiB,GAAA,yBGG1B6B,EAAA,EAAA,MAAA,CAAA,EAAoE,EAAA,GAAA,EAC/DC,EAAA,EAAA,UAAA,EAAQC,EAAA,EAAI,6BAIjBF,EAAA,EAAA,MAAA,CAAA,EAAoE,EAAA,GAAA,EAC/DC,EAAA,CAAA,EAAwBC,EAAA,EAAI,kBAA5BC,EAAA,CAAA,EAAAC,GAAA,GAAAC,EAAAC,kBAAA,EAAA,GAAA,GDCT,IAAaC,IAAwB,IAAA,CAA/B,IAAOA,EAAP,MAAOA,CAAwB,CAWpCC,YAAoBC,EACXC,EACAC,EACAC,EAAgC,CAHrB,KAAAH,sBAAAA,EACX,KAAAC,0BAAAA,EACA,KAAAC,6BAAAA,EACA,KAAAC,gBAAAA,EAZF,KAAAC,WAAqB,EACrB,KAAAC,eAAyB,EACzB,KAAAC,qBAAiC,CAAA,EACjC,KAAAC,SAAoB,GAIpB,KAAAC,SAAsC,CAAA,CAKA,CAEtCC,UAAQ,CAEd,KAAKT,sBAAsBU,0CAAyC,EAClEC,KAAKC,GAAK,CAAE,EACZD,KAAKE,GAAKC,GAAmCA,EAAID,IAAIE,GAAKA,EAAEC,cAAc,CAAC,CAAC,EAC5EL,KAAKE,GAAKI,GAA6BC,GAAmBC,QAAQF,CAAE,EAAEJ,IAAKE,GAAMA,EAAEK,SAASC,gBAAkB,CAAC,CAAC,CAAC,EACjHV,KAAKE,GAAKS,GAAoB,CAC9B,KAAKlB,WAAakB,EAAOC,OAAO,CAACC,EAAGC,IAAMD,EAAIC,CAAC,CAChD,CAAC,CAAC,EACDd,KAAKe,GAAS,IAAM,KAAKC,eAAc,CAAE,CAAC,EAC1CC,UAAS,EAEX,KAAKC,yBAA2B,KAAK7B,sBAAsB8B,uBACzDnB,KAAKe,GAAS,IAAM,KAAKC,eAAc,CAAE,CAAC,EAC1CC,UAAS,CACZ,CAEO/B,mBAAiB,CAEvB,GAAI,KAAKQ,gBAAkB,KAAKD,WAAY,CAC3C,IAAM2B,EAAc,KAAK1B,eAAiB,KAAKD,WAAc,IAE7D,OAAI2B,GAAc,IACjB,KAAKxB,SAAW,GAEhB,KAAKA,SAAW,GAGjB,KAAKJ,gBAAgB6B,WAAa,KAAKzB,SAChCwB,EAAWE,QAAQ,CAAC,CAC5B,CAEA,MAAO,GACR,CAEQN,gBAAc,CAErB,OAAO,KAAK1B,0BAA0BiC,cAAa,EACjDvB,KAAKe,GAAUS,GAAQC,GAAGD,EAAIE,OAAOtB,GAAKA,EAAEuB,OAAOC,SAAQ,CAAE,CAAC,CAAC,CAAC,EAChE5B,KAAKe,GAAUS,GAAQ,KAAKjC,6BAA6BsC,iBAAiBL,EAAItB,IAAIE,GAAKA,EAAE0B,mBAAmB,CAAC,CAAC,CAAC,EAC/G9B,KAAKE,GAAKsB,GAAO,CACjBA,EAAIO,QAAStB,GAAkC,CACzC,KAAKd,qBAAqBqC,SAASvB,EAASwB,EAAE,IAClD,KAAKvC,gBAAkBe,EAASC,gBAAkB,EAClD,KAAKf,qBAAqBuC,KAAKzB,EAASwB,EAAE,EAE5C,CAAC,CACF,CAAC,CAAC,CACJ,yCAhEY9C,GAAwBgD,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAAAF,EAAAG,EAAA,EAAAH,EAAAI,EAAA,CAAA,CAAA,uBAAxBpD,EAAwBqD,UAAA,CAAA,CAAA,uBAAA,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,MAAA,YAAA,EAAA,CAAA,EAAA,QAAA,WAAA,SAAA,qBAAA,wBAAA,EAAA,CAAA,EAAA,QAAA,SAAA,oBAAA,EAAA,CAAA,WAAA,MAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,eAAA,KAAA,EAAA,CAAA,QAAA,wDAAA,EAAA,CAAA,QAAA,wDAAA,EAAA,CAAA,EAAA,QAAA,SAAA,qBAAA,wBAAA,EAAA,CAAA,EAAA,QAAA,SAAA,qBAAA,wBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICjBrCjE,EAAA,EAAA,MAAA,CAAA,EAA4B,EAAA,MAAA,CAAA,EAExBC,EAAA,EAAA,aAAA,EACFC,EAAA,EACAF,EAAA,EAAA,MAAA,CAAA,EAA6C,EAAA,MAAA,CAAA,EAEzCmE,EAAA,EAAA,MAAA,CAAA,EACFjE,EAAA,EAAM,EAERkE,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAIC,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAMHpE,EAAA,SAboCC,EAAA,CAAA,EAAAoE,GAAA,QAAAL,EAAA5D,kBAAA,EAAA,GAAA,EAGlCH,EAAA,EAAAqE,EAAA,EAAAN,EAAAlD,SAAA,EAAA,EAAA,EAKAb,EAAA,EAAAqE,EAAA,EAAAN,EAAAlD,SAAA,GAAA,CAAA;oEDGI,IAAOT,EAAPkE,SAAOlE,CAAwB,GAAA,qCGdjCmE,EAAA,EAAA,iBAAA,CAAA,EAA8BC,EAAA,sBAAA,SAAAC,EAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAA,OAAuBC,EAAAF,EAAAG,cAAAN,CAAA,CAAqB,CAAA,CAAA,EAAEO,EAAA,6BAK5ET,EAAA,EAAA,MAAA,EAAMU,EAAA,EAAA,gBAAA,EAAgBV,EAAA,EAAA,GAAA,EAAGU,EAAA,CAAA,EAAeD,EAAA,EAAI,kBAAnBE,EAAA,CAAA,EAAAC,GAAAC,EAAAC,WAAA,0BAMvBd,EAAA,EAAA,MAAA,EAAMU,EAAA,EAAA,cAAA,EAAcD,EAAA,6BADtBT,EAAA,EAAA,MAAA,EAAMe,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,EAEHhB,EAAA,EAAA,GAAA,EAAGU,EAAA,CAAA,EAAQD,EAAA,EAAI,kBAFZE,EAAA,EAAAM,EAAA,EAAAC,EAAAC,OAAA,EAAA,EAAA,EAEAR,EAAA,CAAA,EAAAC,GAAAM,EAAAE,IAAA,yBAKNC,EAAA,EAAA,uBAAA,EDVJ,IAAaC,IAAuB,IAAA,CAA9B,IAAOA,EAAP,MAAOA,CAAuB,CAWnCC,YAAoBC,EAA8CC,EAAsCC,EAAwC,CAA5H,KAAAF,kBAAAA,EAA8C,KAAAC,cAAAA,EAAsC,KAAAC,oBAAAA,EARxF,KAAAC,YAAuB,GACvB,KAAAC,wBAAmC,GACnC,KAAAC,gBAA2B,GAC3B,KAAAV,OAAkB,GAGjB,KAAAW,YAAoC,IAAIC,EAE2F,CAE7IC,UAAQ,CACd,KAAKN,oBAAoBO,eAAc,EAAGC,UAAWpB,GAAuB,CAC3E,KAAKA,YAAcA,CACpB,CAAC,CACF,CAEOqB,UAAQ,CACd,OAAO,KAAKX,kBAAkBW,SAAQ,CACvC,CAEOC,WAAS,CACf,OAAO,KAAKZ,kBAAkBY,UAAS,CACxC,CAEOC,iBAAe,CACrB,KAAKZ,cAAca,wBAAuB,CAC3C,CAEO9B,cAAc+B,EAAW,CAC/B,KAAKT,YAAYU,KAAKD,CAAG,CAC1B,yCAjCYjB,GAAuBmB,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAAAF,EAAAG,EAAA,CAAA,CAAA,uBAAvBtB,EAAuBuB,UAAA,CAAA,CAAA,iBAAA,CAAA,EAAAC,OAAA,CAAA1B,KAAA,OAAA2B,gBAAA,kBAAApB,YAAA,cAAAC,wBAAA,0BAAAC,gBAAA,kBAAAV,OAAA,QAAA,EAAA6B,QAAA,CAAAlB,YAAA,aAAA,EAAAmB,MAAA,GAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,EAAA,kBAAA,SAAA,MAAA,KAAA,IAAA,EAAA,CAAA,EAAA,QAAA,WAAA,uBAAA,EAAA,CAAA,QAAA,OAAA,EAAA,CAAA,EAAA,QAAA,WAAA,wBAAA,EAAA,CAAA,EAAA,QAAA,WAAA,wBAAA,EAAA,CAAA,EAAA,QAAA,WAAA,qBAAA,EAAA,CAAA,EAAA,QAAA,WAAA,qBAAA,EAAA,CAAA,kBAAA,GAAA,EAAA,MAAA,eAAA,EAAA,OAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,ICVpCrD,EAAA,EAAA,MAAA,CAAA,EAA8C,EAAA,MAAA,CAAA,EAE1Ce,EAAA,EAAAwC,GAAA,EAAA,EAAA,iBAAA,CAAA,EAGF9C,EAAA,EACAT,EAAA,EAAA,MAAA,CAAA,EACEe,EAAA,EAAAyC,GAAA,EAAA,EAAA,MAAA,EAGF/C,EAAA,EACAT,EAAA,EAAA,MAAA,CAAA,EACEe,EAAA,EAAA0C,GAAA,EAAA,EAAA,MAAA,EAKFhD,EAAA,EACAT,EAAA,EAAA,MAAA,CAAA,EACEe,EAAA,EAAA2C,GAAA,EAAA,EAAA,uBAAA,EAGFjD,EAAA,EACAT,EAAA,EAAA,MAAA,CAAA,EAAgD,GAAA,SAAA,CAAA,EACGC,EAAA,QAAA,UAAA,CAAA,OAASqD,EAAAjB,gBAAA,CAAiB,CAAA,EAAErC,EAAA,GAAA,UAAA,EAAUU,EAAA,GAAA,UAAA,EAAQD,EAAA,EAAW,EAAA,EAAA,SAtB1GE,EAAA,CAAA,EAAAM,EAAA,EAAAqC,EAAA3B,YAAA,EAAA,EAAA,EAKAhB,EAAA,CAAA,EAAAM,EAAA,EAAAqC,EAAAnC,QAAAmC,EAAAxC,YAAA,EAAA,EAAA,EAKAH,EAAA,CAAA,EAAAM,EAAA,EAAAqC,EAAAlC,KAAA,EAAA,EAAA,EAOAT,EAAA,CAAA,EAAAM,EAAA,EAAAqC,EAAAzB,gBAAA,EAAA,EAAA;mEDTE,IAAOP,EAAPqC,SAAOrC,CAAuB,GAAA,EEuCpC,IAAasC,IAAY,IAAA,CAAnB,IAAOA,EAAP,MAAOA,CAAY,yCAAZA,EAAY,uBAAZA,CAAY,CAAA,2BAnBvBC,GACAC,GACAC,GACAC,GACAC,GAOAF,EAAgB,CAAA,CAAA,EAQZ,IAAOH,EAAPM,SAAON,CAAY,GAAA","names":["require_moment","__commonJSMin","exports","module","global","factory","hookCallback","hooks","setHookCallback","callback","isArray","input","isObject","hasOwnProp","b","isObjectEmpty","obj","k","isUndefined","isNumber","isDate","map","arr","fn","res","i","arrLen","extend","createUTC","format","locale","strict","createLocalOrUTC","defaultParsingFlags","getParsingFlags","m","some","fun","t","len","isValid","flags","parsedParts","isNowValid","createInvalid","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","Moment","config","isMoment","warn","msg","deprecate","firstTime","args","arg","key","argLen","deprecations","deprecateSimple","name","isFunction","set","mergeConfigs","parentConfig","childConfig","Locale","keys","defaultCalendar","calendar","mom","now","output","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","sign","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","removeFormattingTokens","makeFormatFunction","array","length","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","longDateFormat","formatUpper","tok","defaultInvalidDate","invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","defaultRelativeTime","relativeTime","withoutSuffix","string","isFuture","pastFuture","diff","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedInput","normalizedProp","priorities","getPrioritizedUnits","unitsObj","u","a","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","regexes","addRegexToken","regex","strictRegex","isStrict","localeData","getParseRegexForToken","unescapeFormat","s","regexEscape","matched","p1","p2","p3","p4","absFloor","toInt","argumentForCoercion","coercedNumber","value","tokens","addParseToken","tokenLen","addWeekParseToken","addTimeToArrayFromToken","isLeapYear","year","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","y","daysInYear","getSetYear","makeGetSet","getIsLeapYear","unit","keepTime","set$1","get","d","isUTC","month","date","stringGet","stringSet","prioritized","prioritizedLen","mod","n","x","indexOf","o","daysInMonth","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","localeMonthsShort","handleStrictParse","monthName","ii","llc","localeMonthsParse","setMonth","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","shortP","longP","createDate","h","M","ms","createUTCDate","firstWeekOffset","dow","doy","fwd","fwdlw","dayOfYearFromWeeks","week","weekday","localWeekday","weekOffset","dayOfYear","resYear","resDayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","weekdays","localeWeekdaysShort","localeWeekdaysMin","handleStrictParse$1","weekdayName","localeWeekdaysParse","getSetDayOfWeek","day","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","weekdaysShortRegex","weekdaysMinRegex","minPieces","minp","shortp","longp","hFormat","kFormat","meridiem","lowercase","matchMeridiem","kInput","pos","pos1","pos2","localeIsPM","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","hours","minutes","isLower","baseConfig","locales","localeFamilies","globalLocale","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","j","next","split","loadLocale","isLocaleNameSane","oldLocale","aliasedRequire","__require","getSetGlobalLocale","values","data","getLocale","defineLocale","updateLocale","tmpLocale","listLocales","checkOverflow","overflow","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","rfc2822","obsOffsets","configFromISO","l","match","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","defaults","c","currentDateArray","nowValue","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","w","weekYear","temp","weekdayOverflow","curWeek","createLocal","skipped","stringLength","totalParsedInputLength","era","meridiemFixWrap","hour","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","configFromObject","dayOrDate","createFromConfig","prepareConfig","configFromInput","prototypeMin","other","prototypeMax","pickBy","moments","min","max","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","months","weeks","days","seconds","milliseconds","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offset","separator","offsetFromString","chunkOffset","matcher","matches","chunk","parts","cloneWithOffset","model","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","createAdder","direction","period","dur","tmp","isAdding","updateOffset","add","subtract","isString","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","properties","property","propertyLen","arrayTest","dataTypeTest","item","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","formats","sod","clone","isAfter","localInput","isBefore","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","anchor2","adjust","toString","toISOString","keepOffset","utc","inspect","zone","prefix","datetime","suffix","inputString","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOf","startOfDate","endOf","valueOf","unix","toDate","toArray","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","localeEras","eras","localeErasParse","eraName","abbr","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","erasAbbrRegex","erasNarrowRegex","abbrPieces","namePieces","narrowPieces","erasName","erasAbbr","erasNarrow","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetSecond","getSetMillisecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","preParsePostFormat","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","abs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","round","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","humanize","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","total","totalSign","ymSign","daysSign","hmsSign","proto$2","require_events","__commonJSMin","exports","module","R","ReflectApply","target","receiver","args","ReflectOwnKeys","ProcessEmitWarning","warning","NumberIsNaN","value","EventEmitter","once","defaultMaxListeners","checkListener","listener","arg","n","_getMaxListeners","that","type","i","doError","events","er","err","handler","len","listeners","arrayClone","_addListener","prepend","m","existing","w","onceWrapper","_onceWrap","state","wrapped","list","position","originalListener","spliceOne","keys","key","_listeners","unwrap","evlistener","unwrapListeners","emitter","listenerCount","arr","copy","index","ret","name","resolve","reject","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","flags","wrapListener","defaultModules","QUILL_CONFIG_TOKEN","InjectionToken","takeUntilDestroyed","destroyRef","assertInInjectionContext","inject","DestroyRef","destroyed$","Observable","observer","source","takeUntil","QuillEditorComponent_Conditional_0_Template","rf","ctx","ɵɵelement","QuillEditorComponent_Conditional_4_Template","_c0","_c1","getFormat","format","configFormat","raf$","Observable","subscriber","rafId","QuillService","_QuillService","injector","config","defer","__async","maybePatchedAddEventListener","quillImport","customOption","newCustomOption","shareReplay","DOCUMENT","defaultModules","Quill","customModules","suppressGlobalRegisterWarning","implementation","path","isObservable","firstValueFrom","t","ɵɵinject","Injector","QUILL_CONFIG_TOKEN","ɵɵdefineInjectable","QuillEditorBase","_QuillEditorBase","input","EventEmitter","signal","inject","ElementRef","ChangeDetectorRef","DomSanitizer","PLATFORM_ID","Renderer2","NgZone","DestroyRef","quillEditor","html","modelValue","value","SecurityContext","range","oldRange","source","trackChanges","shouldTriggerOnModelTouched","delta","oldDelta","text","content","shouldTriggerOnModelChange","valueGetter","event","current","old","classes","prev","cur","trimmed","isPlatformServer","mergeMap","promises","beforeRender","toolbarElem","modules","placeholder","styles","key","bounds","debug","readOnly","formats","e","newValue","takeUntilDestroyed","changes","currentStyling","previousStyling","currentClasses","previousClasses","classList","c","currentValue","currentEditorValue","isDisabled","fn","err","valid","textLength","deltaOperations","onlyEmptyOperation","Subscription","fromEvent","textChange$","editorChange$","debounceTime","ɵɵdefineDirective","InputFlags","ɵɵNgOnChangesFeature","QuillEditorComponent","_QuillEditorComponent","ɵQuillEditorComponent_BaseFactory","ɵɵgetInheritedFactory","ɵɵdefineComponent","ɵɵProvidersFeature","NG_VALUE_ACCESSOR","forwardRef","NG_VALIDATORS","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","ɵɵprojectionDef","ɵɵtemplate","ɵɵprojection","ɵɵconditional","ɵɵadvance","QuillViewComponent","_QuillViewComponent","elementRef","renderer","zone","service","domSanitizer","platformId","input","EventEmitter","inject","DestroyRef","quillEditor","value","format","getFormat","content","SecurityContext","changes","isPlatformServer","mergeMap","Quill","promises","beforeRender","modules","customOption","newCustomOption","debug","formats","theme","raf$","takeUntilDestroyed","t","ɵɵdirectiveInject","ElementRef","Renderer2","NgZone","QuillService","DomSanitizer","PLATFORM_ID","ɵɵdefineComponent","InputFlags","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","rf","ctx","ɵɵelement","QuillModule","_QuillModule","config","QUILL_CONFIG_TOKEN","ɵɵdefineNgModule","ɵɵdefineInjector","Function","Operation","CalculationSide","Calculation","operationApplied","operation","isComplete","left","right","notSquareRoot","Operation","SquareRoot","isEmpty","constructor","trailingZeros","getCurrentCalculationSide","CalculationSide","Right","Left","addInputToCalculation","input","addInputToCorrectSide","calculateResult","Number","result","Add","Subtract","Multiply","Divide","PowerOf","Math","pow","sqrt","toFixed","valueBeforeTrail","renderCalculation","String","renderOperation","renderPartialCalculation","CE","pendingDecimal","C","negateCurrentValue","convertToPercentage","side","toString","includes","zeros","repeat","rightOfDecimal","split","decimalsLength","length","currentValue","shouldInsertDecimal","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","i_r2","calculation_r1","renderCalculation","CalculatorComponent","constructor","function","Function","visorText","calculations","currentCalculation","Calculation","clearOnNextNumber","calculationEvaluated","newNumberAfterEvaluation","previousCalculationWasAutoCalculated","operationPressedAfterCalculation","maxDigits","ngOnInit","answer","answerJson","prevCalculations","JSON","parse","map","c","Object","assign","result","input","func","isOperation","Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","inputToVisor","String","Decimal","tryAddDecimal","Add","Multiply","Subtract","Divide","PowerOf","applyOperation","Equals","calculate","C","CE","clearCurrentCalculationBasedOnContext","Negate","negateInput","Percentage","convertToPercentage","Square","Cube","powerOfVal","applyPowerOf","Pi","left","operation","right","SquareRoot","calculateSquareRoot","pendingDecimal","getCurrentCalculationSide","CalculationSide","Left","includes","Right","reset","length","addInputToCalculation","operationSymbol","trailingZeros","valueBeforeTrail","oneSidedOperation","isComplete","notSquareRoot","previousCalculation","isEmpty","currentCalculationResult","calculateResult","push","Number","toFixed","undefined","setJSONAnswer","negatedValue","negateCurrentValue","convertedPercentageValue","stringify","getCurrentPartialCalculation","renderPartialCalculation","selectors","inputs","decls","vars","consts","template","rf","ctx","ɵɵrepeaterCreate","CalculatorComponent_For_6_Template","ɵɵrepeaterTrackByIdentity","ɵɵelement","ɵɵlistener","ɵɵrepeater","ɵɵproperty","ɵɵsanitizeHtml","_CalculatorComponent","CanvasMode","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵlistener","$event","ɵɵrestoreView","_r3","ctx_r2","ɵɵnextContext","ɵɵresetView","onLineTypeChange","ctx_r4","onMagnetPointsChange","ctx_r5","onGridEnabledChange","ɵɵadvance","ɵɵproperty","ctx_r0","selectedLineType","magneticPointsModeEnabled","matSelectColor","gridEnabled","_r7","ctx_r6","onFontSizeChange","ɵɵtwoWayListener","ctx_r8","i0","ɵɵtwoWayBindingSet","selectedText","ctx_r9","onTextAdd","ctx_r1","selectedFontSize","disableText","ɵɵtwoWayProperty","DrawingCanvasControlsComponent","constructor","undo","EventEmitter","redo","clear","lineTypeChange","magnetPointsChange","gridEnabledChange","gridRemoveEnabledChange","modeChange","textAdd","CanvasMode","gridRemoveEnabled","canvasCentrePoint","onUndo","emit","onRedo","onClear","onModeChange","e","mode","Number","parseInt","value","lineType","checked","onGridRemoveEnabledChanged","text","x","y","width","fontSize","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","ɵɵtemplate","DrawingCanvasControlsComponent_Conditional_9_Template","DrawingCanvasControlsComponent_Conditional_10_Template","ɵɵconditional","LineDrawing","Text","_DrawingCanvasControlsComponent","CanvasDataMapper","mapToCanvasSaveData","obj","result","Array","isArray","lines","texts","CanvasAction","LineType","LineDrawingService","constructor","redoLines","circleRadii","dx","dy","reSizeHandles","addRedoLine","line","push","getLastRedoLine","pop","drawDefaultLines","answer","context","defaultLines","forEach","setLineType","lineType","beginPath","moveTo","startX","startY","lineTo","endX","endY","strokeStyle","lineWidth","stroke","closePath","drawLine","lineToDraw","drawResizeHandles","drawLineToBeRemoved","checkCirclesHit","mousePos","some","circle","intersectsCircle","x","y","radius","cx","cy","r","Math","pow","linePointsEqual","calculateDistance","mousePoint","dot","hypot","scaleCanvasCoords","screenX","screenY","hasPageZoomed","window","devicePixelRatio","imatrix","getTransform","invertSelf","a","c","e","b","d","f","LineType","dashed","setLineDash","arc","PI","factory","ɵfac","providedIn","_LineDrawingService","TextDrawingService","constructor","innerBoundDraggingPx","redoTexts","addRedoText","text","push","getLastRedoText","pop","drawText","colour","context","font","fontSize","fillStyle","fillText","value","x","y","width","measureText","insideText","point","keepOnCanvas","ctx","canvas","height","factory","ɵfac","providedIn","_TextDrawingService","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ctx_r0","answer","additionalText","DrawingCanvasComponent","constructor","cdnBaseUrl","lineDrawingService","textDrawingService","_3DShapeAnswerDto","canvasSavedData","lines","texts","drawingMode","CanvasMode","LineDrawing","startX","startY","isDown","dots","selectedLineType","LineType","Solid","magneticPointsEnabled","distances","pointPositionIndex","circleIntersected","lineIntersected","currentTextIndex","disableText","gridEnabled","gridRemove","canvasActions","ngAfterViewInit","initCanvases","answerJSON","CanvasDataMapper","mapToCanvasSaveData","JSON","parse","filter","x","loadSavedData","drawDefaultLines","context","drawAsset","onMouseDown","e","mousePos","getMousePosition","scaleCanvasCoords","y","hasPageZoomed","tempContext","performElementRemove","handleMouseDownLineDrawing","Text","handleMouseDownText","onMouseUp","onMouseMove","drawRedCollidingRemoveLines","handleMouseMoveLineDrawing","handleMouseMoveText","onMouseLeave","preventDefault","lineToCommit","commitLine","textToCommit","commitText","reSizeHandles","clearCanvas","onResize","undoLastAction","length","drawDottedBackground","pop","CanvasAction","Line","undoLastLine","undoLastText","saveAnswer","redoLastAction","redoLastLine","redoLastText","clear","redoLines","undefined","drawText","text","clearRect","canvas","width","devicePixelRatio","height","getMagneticValuesForLine","drawLine","push","line","closestStart","getClosestDotToMouse","closestEnd","endX","endY","lineType","forEach","txt","rect","canvasEl","nativeElement","getBoundingClientRect","scaleX","scaleY","clientX","left","clientY","top","calcX","calcY","clientWidth","cellWidth","clientHeight","cellHeight","fillStyle","rectangleSize","fillRect","dot","toggleGrid","drawLinedBackground","gridContext","toggleRemove","strokeStyle","gridCanvasEl","beginPath","moveTo","lineTo","stroke","mousePoint","calculateDistance","indexOf","Math","min","getClosestLinePointToMouse","point","scale","window","initCanvasSizes","tempCanvasEl","assetCanvasEl","getContext","assetContext","size","c","style","assetInfo","assetElement","Image","asset","src","url","includes","onload","drawImage","stringify","intersectingLines","getIntersectedLines","lineToBeRemoved","drawLineToBeRemoved","intersectedLines","intersectedText","getIntersectedText","anyItemsRemoved","lineToRemove","index","splice","undoLine","textToRemove","undoText","intersectsLine","intersectsText","fontSize","mouseX","mouseY","textX","textY","textEndX","textEndY","isPointOnElement","lineStartX","lineStartY","lineEndX","lineEndY","distancePointFromElement","abs","sqrt","checkCirclesHit","target","cursor","insideText","dx","dy","keepOnCanvas","addRedoText","addRedoLine","redoLine","getLastRedoLine","redoTexts","redoText","getLastRedoText","ɵɵdirectiveInject","LineDrawingService","TextDrawingService","selectors","viewQuery","rf","ctx","ɵɵresolveWindow","ɵɵtemplate","DrawingCanvasComponent_Conditional_1_Template","ɵɵlistener","$event","ɵɵelement","ɵɵtwoWayListener","i0","ɵɵtwoWayBindingSet","ɵɵconditional","ɵɵtwoWayProperty","ɵɵproperty","_DrawingCanvasComponent","ProtractorComponent","radius","sizeRatio","constructor","protractorService","helix","dottedAngleLines","bigNumbers","angleStart","bigAngles","bigAnglesHelix","dottedAngles","thickAngleLinesIncrement","majorAngleIncrements","angleIncrements","minorAngleIncrements","canvasPadding","redraw","dragging","baseOriginX","baseOriginY","originX","originY","h_x","h_y","lastAngle","subscriptions","ngOnInit","init","push","protractorSizeRatioChange$","subscribe","newSizeRatio","context","ngAfterViewInit","drawProtractor","ngOnChanges","ngAfterViewChecked","resetCanvas","ngOnDestroy","map","x","unsubscribe","width","window","devicePixelRatio","dragContainerWidth","dragContainerHeight","height","Number","angleEnd","radiansArc","Math","PI","littleRadius","topInnerLineRadius","dashedLineRadius","littleDashedLineRadius","bottomAngleLineRadius","bottomMinorAngleLineRadius","innerTextRadius","outerTextRadius","bigTextRadius","setTransform","clearRect","protractorCanvas","nativeElement","resetTransform","style","scale","closePath","containerRect","getBoundingClientRect","left","top","dragContainerRect","dragContainer","rotateHandle","transform","onMouseDown","mouseDown","dpr","onmousedown","e","getContext","beginPath","arc","stroke","moveTo","lineTo","angle","indexOf","drawBigAngleLine","drawDashedAngleLine","drawMajorAngleLine","drawAngleLine","drawMinorAngleLine","getPoint","y","cos","sin","degreesToRadians","degrees","radiansToDegrees","radians","getScaledTextSize","textSize","littlex","littley","bigx","bigy","textx","texty","save","fontArgs","font","split","newSize","length","translate","rotate","textAlign","fillText","String","restore","setLineDash","littleDashedx","littleDashedy","bigDashedx","bigDashedy","smallX","smallY","drawAngleNumbers","bigLine","lineWidth","innerNumber","outerNumber","innerx","innery","outerx","outery","scope","pageX","pageY","preventDefault","stopPropagation","mouseMove","s_x","s_y","s_rad","atan2","degree","rotateContainer","transformOrigin","mouseUp","ɵɵdirectiveInject","ProtractorService","selectors","viewQuery","rf","ctx","$event","ɵɵresolveDocument","ɵɵelementStart","ɵɵelement","ɵɵtext","ɵɵelementEnd","ɵɵstyleProp","ɵɵadvance","ɵɵproperty","_ProtractorComponent","ɵɵelement","ɵɵproperty","row_r1","text","ɵɵsanitizeHtml","ReorderComponent","drop","event","moveItemInArray","answer","reorderAnswerRows","previousIndex","currentIndex","forEach","val","i","orderIndex","selectors","inputs","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵlistener","$event","ɵɵrepeaterCreate","ReorderComponent_For_5_Template","ɵɵrepeaterTrackByIdentity","ɵɵelementEnd","ɵɵadvance","ɵɵrepeater","_ReorderComponent","RulerLengthType","RulerRowType","RulerComponent","constructor","length","lengthType","RulerLengthType","Inch","scaleMeasurementByResolution","topRowUnitType","bottomRowUnitType","Centimeter","canvasPadding","rowHeight","redraw","monitorPpi","defaultPixelsPerInch","centimeterToInchRatio","dragging","baseOriginX","baseOriginY","originX","originY","h_x","h_y","lastAngle","ngOnInit","init","ngAfterViewInit","drawRuler","ngOnChanges","context","ngAfterViewChecked","resetCanvas","width","getTotalWidth","height","getTotalHeight","drawWidth","window","devicePixelRatio","drawHeight","dragContainerWidth","Number","dragContainerHeight","setTransform","clearRect","rulerCanvas","nativeElement","resetTransform","style","scale","closePath","ppiElement","offsetHeight","offsetWidth","containerRect","dragContainer","getBoundingClientRect","left","top","rotateHandle","transform","onMouseDown","mouseDown","dpr","onmousedown","e","getContext","beginPath","moveTo","lineTo","stroke","topRowOuterY","topRowInnerY","drawInchRow","RulerRowType","Top","drawCentimeterRow","bottomRowInnerY","bottomRowOuterY","Bottom","outerY","innerY","rowType","relevantLength","centimetersToInches","leftPadding","segmentsPerInch","quarterBreakpointDivisible","eighthBreakpointDivisible","quarterMarkLengthRatio","eighthMarkLengthRatio","sixteenthMarkLengthRatio","i","pastSegmentOffset","getInchPixels","innerSegmentWidth","segmentIndex","leftOffset","heightAddition","printNumber","String","save","fontArgs","font","split","newSize","textAlign","translate","measureText","fillText","restore","inchesToCentimeters","segmentsPerCentimeter","halfwayBreakpointDivisible","halfwayMarkRatio","tenthMarkRatio","getCentimeterPixels","inches","centimeters","getPixelToInchRatio","getInchesInPixels","getCentimetersInPixels","Feet","scope","pageX","pageY","preventDefault","stopPropagation","mouseMove","s_x","s_y","s_rad","Math","atan2","degree","PI","rotateContainer","transformOrigin","mouseUp","selectors","viewQuery","rf","ctx","$event","ɵɵresolveDocument","ɵɵelementStart","ɵɵelement","ɵɵtext","ɵɵelementEnd","ɵɵstyleProp","ɵɵadvance","ɵɵproperty","_RulerComponent","ɵɵelement","ɵɵelementStart","ɵɵrepeaterCreate","TableComponent_For_6_For_2_Template","ɵɵrepeaterTrackByIdentity","ɵɵelementEnd","ɵɵadvance","ɵɵrepeater","ctx_r2","colsArray","TableComponent","constructor","rowsArray","outerRowsArray","ngOnInit","setUpArray","answer","cols","rows","ngAfterViewInit","i","tableAnswerCells","length","setCellInfo","getValuesFromId","id","dashPos","indexOf","col","Number","parseInt","substring","row","size","arr","push","data","cell","tableEl","nativeElement","cells","isEditable","input","document","createElement","className","type","value","find","x","text","autocomplete","placeholder","style","width","oninput","e","el","target","appendChild","innerText","selectors","viewQuery","rf","ctx","TableComponent_For_4_Template","TableComponent_For_6_Template","_TableComponent","OpenResponseLengthIdentifier","OpenResponseTypeIdentifier","LabelAlignmentIdentifier","LabelPositionIdentifier","LabellingService","getDirection","position","direction","LabelPositionIdentifier","Above","Below","Left","Right","getAlignment","alignment","alignItem","textAlign","LabelAlignmentIdentifier","Bottom","Center","Middle","Top","getOrderForLabel","getOrderForTextArea","flexOrder","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ctx_r2","getAnswerLength","answerText","ɵɵelement","ɵɵlistener","$event","ɵɵrestoreView","_r4","ctx_r3","ɵɵnextContext","ɵɵresetView","onAnswerTextChange","ɵɵtemplate","SimpleResponseComponent_Conditional_0_Conditional_5_Template","ɵɵproperty","ctx_r0","getFlexDirection","getLabelStyles","labelText","ɵɵsanitizeHtml","getTextAreaStyles","ɵɵconditional","includeWordCount","ctx_r5","_r7","ctx_r6","SimpleResponseComponent_Conditional_1_Conditional_3_Template","ctx_r1","ɵɵpureFunction1","_c0","editorHeight","SimpleResponseComponent","constructor","answerTextChange","EventEmitter","LabelAlignmentIdentifier","ngAfterViewInit","setTimeout","hasTopLabel","position","LabelPositionIdentifier","Above","Below","LabellingService","getDirection","flexOrder","getOrderForLabel","alignItem","textAlign","getAlignment","alignment","textAreaStyles","getOrderForTextArea","__spreadProps","__spreadValues","height","text","split","filter","e","trim","length","value","emit","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","SimpleResponseComponent_Conditional_0_Template","SimpleResponseComponent_Conditional_1_Template","_SimpleResponseComponent","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ctx_r2","getAnswerLength","answerText","ɵɵelement","ɵɵlistener","$event","ɵɵrestoreView","_r4","ctx_r3","ɵɵnextContext","ɵɵresetView","onAnswerTextChange","ɵɵtemplate","AdvancedResponseComponent_Conditional_0_Conditional_6_Template","ɵɵproperty","ctx_r0","getFlexDirection","getLabelStyles","labelText","ɵɵsanitizeHtml","getTextAreaStyles","ɵɵconditional","includeWordCount","ctx_r5","_r7","ctx_r6","AdvancedResponseComponent_Conditional_1_Conditional_3_Template","ɵɵpureFunction1","_c0","ctx_r1","editorHeight","AdvancedResponseComponent","constructor","answerTextChange","EventEmitter","LabelAlignmentIdentifier","ngAfterViewInit","setTimeout","hasTopLabel","position","LabelPositionIdentifier","Above","Below","document","getElementsByClassName","LabellingService","getDirection","flexOrder","getOrderForLabel","alignItem","textAlign","getAlignment","alignment","styles","__spreadProps","__spreadValues","textAreaStyles","getOrderForTextArea","height","text","split","filter","e","trim","length","value","emit","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","AdvancedResponseComponent_Conditional_0_Template","AdvancedResponseComponent_Conditional_1_Template","_AdvancedResponseComponent","ɵɵelementStart","ɵɵlistener","$event","ɵɵrestoreView","_r10","editor_r1","ɵɵnextContext","$implicit","ɵɵresetView","answerText","ɵɵelementEnd","ɵɵproperty","labelText","labelPosition","labelAlignment","ctx_r6","isMathsExam","_r14","ctx_r7","ɵɵtemplate","OpenResponseComponent_For_1_Case_0_Template","OpenResponseComponent_For_1_Case_1_Template","ɵɵconditional","OpenResponseComponent_For_1_contFlowTmp","typeIdentifier","ctx_r0","OpenResponseTypeIdentifier","Simple","Advanced","OpenResponseComponent","constructor","OpenResponseLengthIdentifier","selectors","inputs","answer","decls","vars","consts","template","rf","ctx","ɵɵrepeaterCreate","OpenResponseComponent_For_1_Template","ɵɵrepeaterTrackByIdentity","ɵɵrepeater","answers","_OpenResponseComponent","ɵɵelementStart","ɵɵlistener","$event","i_r3","ɵɵrestoreView","_r8","$index","ctx_r7","ɵɵnextContext","ɵɵresetView","setValue","ɵɵelementEnd","ɵɵproperty","ctx_r0","scaleSavedData","ɵɵelement","ScaleComponent","boxes","Array","answer","pointCount","points","constructor","ngOnInit","answerJSON","JSON","parse","fill","index","value","stringify","selectors","inputs","decls","vars","consts","template","rf","ctx","ɵɵrepeaterCreate","ScaleComponent_For_3_Template","ɵɵrepeaterTrackByIdentity","ScaleComponent_For_6_Template","ɵɵtext","ɵɵadvance","ɵɵrepeater","ɵɵtextInterpolate","leftText","middleText","rightText","_ScaleComponent","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵlistener","answer_r1","ɵɵrestoreView","_r9","$implicit","ctx_r8","ɵɵnextContext","ɵɵresetView","selectAnswer","index","ɵɵtemplate","MultiChoiceComponent_For_2_Conditional_1_Template","MultiChoiceComponent_For_2_Conditional_2_Template","ɵɵelement","ɵɵclassProp","selected","ɵɵadvance","ɵɵconditional","ɵɵproperty","answerText","ɵɵsanitizeHtml","MultiChoiceComponent","constructor","ngOnInit","answer","answers","sort","a","b","forEach","x","find","selectors","inputs","decls","vars","consts","template","rf","ctx","ɵɵrepeaterCreate","MultiChoiceComponent_For_2_Template","ɵɵrepeaterTrackByIdentity","ɵɵrepeater","_MultiChoiceComponent","JWT_OPTIONS","InjectionToken","JwtHelperService","config","str","output","chars","bc","bs","buffer","idx","c","token","parts","decoded","date","offsetSeconds","t","authScheme","request","ɵɵinject","ɵɵdefineInjectable","AngularHighfieldwebapiModule","_AngularHighfieldwebapiModule","t","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","APIResponse","responseCode","responseMessage","responseData","responseError","APIService","_APIService","httpClient","serviceBaseURL","requestUri","headers","__async","resolve","reject","lastValueFrom","res","APIResponse","err","body","map","httpResponse","response","t","ɵɵinject","HttpClient","ɵɵdefineInjectable","StoredSettingService","_StoredSettingService","key","item","value","EasyXDMService","_EasyXDMService","serverURL","msg","namespace","message","origin","procName","params","result","frameContainer","frameWidth","frameHeight","Observable","observer","CurrentUser","initialised","user","LoginUser","id","username","firstName","lastName","roles","role","_return","i","UserbaseAuthStrategy","InjectionToken","CurrentUserService","_CurrentUserService","platformId","userbaseAuthStrategy","userApiBaseUrl","BehaviorSubject","JwtHelperService","__async","currentToken","_token","currentUser","t","ɵɵinject","Platform","ɵɵdefineInjectable","ValidEmailCheck","UserRoleDto","GrantResponse","AuthTokenPrefix","InjectionToken","V1AuthTokenPrefix","RefreshTokenName","InjectionToken","V1RefreshTokenName","BaseUserbaseAuthStrategy","easyXDMService","serverUrl","baseUrl","__async","V1UserbaseAuthStrategy","_V1UserbaseAuthStrategy","remoteData","Observable","observer","value","t","ɵɵinject","EasyXDMService","ɵɵdefineInjectable","AuthenticatedService","_AuthenticatedService","apiService","settingService","currentUserService","userbaseAuthStrategy","v1UserBaseAuthStrategy","authTokenPrefix","refreshTokenName","serviceBaseURL","requestUri","contentType","authToken","headers","HttpHeaders","resolve","res","err","newAuthToken","authedRes","authedErr","body","response","authTokenName","getRequest","catchError","error","iif","postRequest","putRequest","deleteRequest","map","grant","GrantResponse","keys","key","of","retryRequest","switchMap","APIService","StoredSettingService","CurrentUserService","UserbaseAuthStrategy","AuthTokenPrefix","RefreshTokenName","UserService","_UserService","authenticatedService","http","apiBaseUrl","allowGuestUser","userResponse","userId","userIds","searchString","roleName","user","roleId","_userRole","UserRoleDto","emailAddress","_email","ValidEmailCheck","signatureImage","_path","formData","options","lastValueFrom","responseObj","HttpClient","AngularHighfieldauthModule","_AngularHighfieldauthModule","t","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","import_moment","AngularHighfieldcommonModule","_AngularHighfieldcommonModule","t","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","FormsModule","DateTimeService","_DateTimeService","utc","moment","date","utcDate","dateOnly","customDateFormat","t","ɵɵdefineInjectable","LoadingService","_LoadingService","BehaviorSubject","loading","message","t","ɵɵdefineInjectable","AngularHighfieldlayoutModule","_AngularHighfieldlayoutModule","t","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","MatButtonModule","MatIconModule","MatProgressSpinnerModule","OverlayModule","AngularHighfieldcommonModule","AngularHighfieldwebapiModule","AngularHighfieldauthModule","getHeaderKey","headerName","isHttpHeadersLike","object","castObject","HttpHeaders","_HttpHeaders","rawHeaders","headerValue","header","result","headers","headerKey","headerNames","i","headerValues","options","resultPreservingCasing","encodeByteArray","value","str","decodeString","byteString","arr","i","Constants","XML_ATTRKEY","XML_CHARKEY","getRandomValues","rnds8","rng","regex_default","validate","uuid","regex_default","validate_default","byteToHex","i","stringify","arr","offset","uuid","validate_default","stringify_default","v4","options","buf","offset","rnds","rng","i","stringify_default","v4_default","validUuidRegex","isValidUuid","uuid","validUuidRegex","generateUuid","v4_default","prepareXMLRootList","obj","elementName","xmlNamespaceKey","xmlNamespace","result","XML_ATTRKEY","validateISODuration","isDuration","value","replaceAll","searchValue","replaceValue","isPrimitiveType","isObject","input","Serializer","modelMappers","isXML","mapper","value","objectName","failValidation","constraintName","constraintValue","valueAsNumber","ExclusiveMaximum","ExclusiveMinimum","InclusiveMaximum","InclusiveMinimum","MaxItems","MaxLength","MinItems","MinLength","MultipleOf","Pattern","UniqueItems","valueAsArray","pattern","item","i","ar","object","options","_a","_b","_c","updatedOptions","XML_CHARKEY","payload","mapperType","required","nullable","serializeBasicTypes","serializeEnumType","serializeDateTypes","serializeByteArrayType","serializeBase64UrlType","serializeSequenceType","serializeDictionaryType","serializeCompositeType","responseBody","deserializeCompositeType","xmlCharKey","castResponseBody","XML_ATTRKEY","unixTimeToDate","decodeString","base64UrlToByteArray","deserializeSequenceType","deserializeDictionaryType","trimEnd","str","ch","len","bufferToBase64Url","buffer","encodeByteArray","splitSerializeName","prop","classes","partialclass","subwords","dateToUnixTime","d","typeName","isValidUuid","objectType","allowedValues","returnValue","isDuration","serializer","isXml","elementType","tempArray","serializedValue","xmlnsKey","valueType","tempDictionary","key","getXmlObjectValue","result","resolveAdditionalProperties","additionalProperties","modelMapper","resolveReferencedMapper","className","resolveModelProperties","modelProps","getPolymorphicDiscriminatorRecursively","getPolymorphicMapper","propertyMapper","propName","parentObject","paths","pathName","propertyObjectName","toSerialize","polymorphicDiscriminator","additionalPropertiesMapper","propNames","clientPropName","pn","xmlNamespace","isSpecialXmlProperty","propertyName","instance","handledPropertyNames","serializedName","xmlName","xmlElementName","headerCollectionPrefix","dictionary","headerKey","wrapped","elementList","property","propertyInstance","res","arrayInstance","k","v","isAdditionalProperty","responsePropName","element","polymorphicPropertyName","discriminatorName","discriminatorValue","indexDiscriminator","polymorphicMapper","getPolymorphicDiscriminatorSafely","strEnum","o","result","key","MapperType","isWebResourceLike","object","castObject","isHttpHeadersLike","WebResource","_WebResource","url","method","body","query","headers","streamResponseBody","withCredentials","abortSignal","timeout","onUploadProgress","onDownloadProgress","proxySettings","keepAlive","decompressResponse","streamResponseStatusCodes","HttpHeaders","generateUuid","options","validMethods","pathTemplate","pathParameters","baseUrl","segments","item","pathParamName","pathParam","stringifiedPathParameters","queryParameters","queryParams","queryParamName","queryParam","headerName","Serializer","result","AbortError","message","URLQuery","_URLQuery","parameterName","parameterValue","caseParameterValue","newValue","result","parameterStrings","parameterValueElement","text","currentState","i","currentCharacter","URLBuilder","_URLBuilder","scheme","host","port","path","schemeIndex","schemeStart","currentPath","query","queryParameterName","queryParameterValue","startState","tokenizer","URLTokenizer","token","tokenPath","searchValue","replaceValue","replaceAll","URLToken","_URLToken","type","isAlphaNumericCharacter","character","characterCode","_text","state","hasCurrentCharacter","nextScheme","nextSchemeOrHost","nextHost","nextPort","nextPath","nextQuery","readRemaining","getCurrentCharacter","nextCharacter","step","peekCharacters","charactersToPeek","endIndex","readWhile","condition","readWhileLetterOrDigit","readUntilCharacter","terminatingCharacters","schemeOrHost","RedactedString","defaultAllowedHeaderNames","defaultAllowedQueryParameters","Sanitizer","allowedHeaderNames","allowedQueryParameters","n","p","obj","seen","key","value","isObject","v","k","allowedKeys","accessor","sanitized","urlBuilder","URLBuilder","queryString","query","URLQuery","custom","errorSanitizer","Sanitizer","RestError","message","code","statusCode","request","response","XhrHttpClient","request","_a","xhr","abortSignal","AbortError","listener","addProgressListener","formData","requestForm","appendFormValue","key","value","formKey","formValue","j","contentType","header","resolve","reject","handleBlobResponse","rejectOnTerminalEvent","parseHeaders","res","rej","blobBody","reader","e","text","_e","rawEvent","responseHeaders","HttpHeaders","headerLines","line","index","headerName","headerValue","RestError","abortError","HttpPipelineLogLevel","operationOptionsToRequestOptionsBase","opts","requestOptions","tracingOptions","result","__rest","BaseRequestPolicy","_nextPolicy","_options","logLevel","message","RequestPolicyOptions","_logger","HttpPipelineLogLevel","cachedDoc","getDoc","cachedParser","getParser","cachedSerializer","getSerializer","ttPolicy","s","parseXML","str","opts","_a","_b","_c","_d","updatedOptions","XML_CHARKEY","dom","throwIfError","obj","domToObject","err","errorNS","getErrorNamespace","invalidXML","parserErrors","isElement","node","asElementWithAttributes","options","result","childNodeCount","firstChildNode","onlyChildTextValue","elementWithAttributes","XML_ATTRKEY","i","attr","child","childObject","stringifyXML","content","buildNode","buildAttributes","attrs","key","elementName","elem","arrayElem","deserializationPolicy","deserializationContentTypes","parsingOptions","nextPolicy","options","DeserializationPolicy","defaultJsonContentTypes","defaultXmlContentTypes","DeserializationPolicy","BaseRequestPolicy","nextPolicy","requestPolicyOptions","deserializationContentTypes","parsingOptions","_a","defaultJsonContentTypes","defaultXmlContentTypes","XML_CHARKEY","request","__async","response","deserializeResponseBody","getOperationResponse","parsedResponse","result","operationSpec","operationResponseGetter","shouldDeserializeResponse","shouldDeserialize","jsonContentTypes","xmlContentTypes","options","_b","_c","updatedOptions","parse","responseSpec","error","shouldReturnResponse","handleErrorResponse","valueToDeserialize","MapperType","innerError","RestError","isOperationSpecEmpty","expectedStatusCodes","isSuccessByStatus","errorResponseSpec","initialErrorMessage","defaultBodyMapper","defaultHeadersMapper","parsedBody","parsedError","internalError","defaultError","operationResponse","opts","errorHandler","err","msg","errCode","e","text","contentType","contentComponents","component","resolve","parseXML","body","DefaultKeepAliveOptions","keepAlivePolicy","keepAliveOptions","nextPolicy","options","KeepAlivePolicy","BaseRequestPolicy","request","__async","allowedRedirect","redirectPolicy","maximumRetries","nextPolicy","options","RedirectPolicy","BaseRequestPolicy","maxRetries","request","response","handleRedirect","policy","currentRetries","status","locationHeader","allowedRedirect","builder","URLBuilder","res","isNumber","shouldRetry","retryLimit","predicate","retryData","response","error","updateRetryData","retryOptions","err","incrementDelta","boundedRandDelta","AbortError","message","createAbortablePromise","buildPromise","options","cleanupBeforeAbort","abortSignal","abortErrorMsg","resolve","reject","rejectOnAbort","AbortError","removeListeners","onAbort","x","err","StandardAbortMessage","delay","timeInMs","options","token","abortSignal","abortErrorMsg","createAbortablePromise","resolve","hexDigits","generateUUID","uuid","i","randomNumber","_a","uuidFunction","generateUUID","_a","_b","_c","_d","isBrowser","isWebWorker","isDeno","isBun","isNodeLike","isNode","isReactNative","log","args","firstArg","debugEnvVariable","enabledString","enabledNamespaces","skippedNamespaces","debuggers","enable","debugObj","namespace","createDebugger","enabled","disable","log","namespaces","wildcard","namespaceList","ns","instance","skipped","enabledNamespace","result","newDebugger","debug","destroy","extend","args","index","debug_default","registeredLoggers","logLevelFromEnv","azureLogLevel","AzureLogger","debug_default","args","AZURE_LOG_LEVELS","isAzureLogLevel","setLogLevel","level","enabledNamespaces","logger","shouldEnable","levelMap","createClientLogger","namespace","clientRootLogger","AzureLogger","patchLogMethod","createLogger","parent","child","args","level","logger","shouldEnable","enabledNamespaces","debug_default","registeredLoggers","azureLogLevel","isAzureLogLevel","logLevel","AZURE_LOG_LEVELS","logger","createClientLogger","exponentialRetryPolicy","retryCount","retryInterval","maxRetryInterval","nextPolicy","options","ExponentialRetryPolicy","ExponentialRetryPolicy","BaseRequestPolicy","nextPolicy","options","retryCount","retryInterval","maxRetryInterval","isNumber","request","response","retry","error","policy","retryData","requestError","__async","shouldPolicyRetry","responseParam","statusCode","Constants","updateRetryData","isAborted","shouldRetry","logger","delay","res","err","RestError","logPolicy","loggingOptions","nextPolicy","options","LogPolicy","BaseRequestPolicy","logger","allowedHeaderNames","allowedQueryParameters","Sanitizer","request","response","getPathStringFromParameter","parameter","getPathStringFromParameterPath","parameterPath","mapper","result","getStreamResponseStatusCodes","operationSpec","result","statusCode","operationResponse","MapperType","isTokenCredential","credential","castCredential","getDefaultUserAgentKey","getPlatformSpecificData","navigator","getRuntimeInfo","Constants","getUserAgentString","telemetryInfo","keySeparator","valueSeparator","info","value","getDefaultUserAgentHeaderName","getDefaultUserAgentKey","getDefaultUserAgentValue","runtimeInfo","platformSpecificData","getPlatformSpecificData","userAgentPolicy","userAgentData","key","nextPolicy","options","UserAgentPolicy","BaseRequestPolicy","_nextPolicy","_options","headerKey","headerValue","request","HttpHeaders","QueryCollectionFormat","DEFAULT_CYCLER_OPTIONS","beginRefresh","getAccessToken","retryIntervalInMs","timeoutInMs","__async","tryGetAccessToken","finalToken","token","delay","createTokenCycler","credential","scopes","tokenCyclerOptions","refreshWorker","options","cycler","_a","refresh","getTokenOptions","_token","reason","tokenOptions","bearerTokenAuthenticationPolicy","getToken","BearerTokenAuthenticationPolicy","BaseRequestPolicy","nextPolicy","webResource","Constants","errorMessage","disableResponseDecompressionPolicy","_nextPolicy","_options","generateClientRequestIdPolicy","requestIdHeaderName","nextPolicy","options","GenerateClientRequestIdPolicy","BaseRequestPolicy","_requestIdHeaderName","request","cachedHttpClient","getCachedDefaultHttpClient","XhrHttpClient","errorMessage","proxyPolicy","_proxySettings","_nextPolicy","_options","errorMessage","rpRegistrationPolicy","retryTimeout","nextPolicy","options","RPRegistrationPolicy","BaseRequestPolicy","_retryTimeout","request","response","registerIfNeeded","policy","rpName","checkRPNotRegisteredError","urlPrefix","extractSubscriptionUrl","registerRP","registrationStatus","generateUuid","getRequestEssentials","originalRequest","reuseUrlToo","reqOptions","body","result","responseBody","matchRes","url","provider","__async","postUrl","getUrl","getRegistrationStatus","res","obj","delay","signingPolicy","authenticationProvider","nextPolicy","options","SigningPolicy","BaseRequestPolicy","request","nextRequest","systemErrorRetryPolicy","retryCount","retryInterval","minRetryInterval","maxRetryInterval","nextPolicy","options","SystemErrorRetryPolicy","BaseRequestPolicy","isNumber","request","error","retry","policy","operationResponse","err","retryData","__async","updateRetryData","shouldPolicyRetry","_response","shouldRetry","delay","nestedErr","StatusCodes","Constants","throttlingRetryPolicy","nextPolicy","options","ThrottlingRetryPolicy","StandardAbortMessage","_ThrottlingRetryPolicy","BaseRequestPolicy","_handleResponse","httpRequest","__async","response","httpResponse","_a","retryAfterHeader","delayInMs","delay","AbortError","headerValue","retryAfterInSeconds","now","diff","_globalThis","VERSION","re","_makeCompatibilityCheck","ownVersion","acceptedVersions","rejectedVersions","myVersionMatch","ownVersionParsed","globalVersion","_reject","v","_accept","globalVersionMatch","globalVersionParsed","isCompatible","VERSION","major","VERSION","GLOBAL_OPENTELEMETRY_API_KEY","_global","_globalThis","registerGlobal","type","instance","diag","allowOverride","_a","api","err","getGlobal","_b","globalVersion","isCompatible","unregisterGlobal","__read","o","n","m","i","ar","e","error","__spreadArray","to","from","pack","l","DiagComponentLogger","props","args","_i","logProxy","logProxy","funcName","namespace","args","logger","getGlobal","__spreadArray","__read","DiagLogLevel","createLogLevelDiagLogger","maxLevel","logger","DiagLogLevel","_filterFunc","funcName","theLevel","theFunc","__read","o","n","m","i","ar","e","error","__spreadArray","to","from","pack","l","API_NAME","DiagAPI","_logProxy","funcName","args","_i","logger","getGlobal","self","setLogger","optionsOrLogLevel","_a","_b","_c","DiagLogLevel","err","oldLogger","newLogger","createLogLevelDiagLogger","stack","registerGlobal","unregisterGlobal","options","DiagComponentLogger","createContextKey","description","BaseContext","parentContext","self","key","value","context","ROOT_CONTEXT","__read","o","n","m","i","ar","e","error","__spreadArray","to","from","pack","l","NoopContextManager","ROOT_CONTEXT","_context","fn","thisArg","args","_i","target","__read","o","n","m","i","ar","e","error","__spreadArray","to","from","pack","l","API_NAME","NOOP_CONTEXT_MANAGER","NoopContextManager","ContextAPI","contextManager","registerGlobal","DiagAPI","context","fn","thisArg","_a","args","_i","target","getGlobal","unregisterGlobal","TraceFlags","INVALID_SPANID","INVALID_TRACEID","INVALID_SPAN_CONTEXT","TraceFlags","NonRecordingSpan","_spanContext","INVALID_SPAN_CONTEXT","_key","_value","_attributes","_name","_link","_links","_status","_endTime","_exception","_time","SPAN_KEY","createContextKey","getSpan","context","getActiveSpan","ContextAPI","setSpan","span","deleteSpan","setSpanContext","spanContext","NonRecordingSpan","getSpanContext","_a","VALID_TRACEID_REGEX","VALID_SPANID_REGEX","isValidTraceId","traceId","INVALID_TRACEID","isValidSpanId","spanId","INVALID_SPANID","isSpanContextValid","spanContext","wrapSpanContext","NonRecordingSpan","contextApi","ContextAPI","NoopTracer","name","options","context","root","NonRecordingSpan","parentFromContext","getSpanContext","isSpanContext","isSpanContextValid","arg2","arg3","arg4","opts","ctx","fn","parentContext","span","contextWithSpanSet","setSpan","isSpanContext","spanContext","NOOP_TRACER","NoopTracer","ProxyTracer","_provider","name","version","options","context","_name","_options","_context","_fn","tracer","NoopTracerProvider","_name","_version","_options","NoopTracer","NOOP_TRACER_PROVIDER","NoopTracerProvider","ProxyTracerProvider","name","version","options","_a","ProxyTracer","delegate","context","ContextAPI","API_NAME","TraceAPI","ProxyTracerProvider","wrapSpanContext","isSpanContextValid","deleteSpan","getSpan","getActiveSpan","getSpanContext","setSpan","setSpanContext","provider","success","registerGlobal","DiagAPI","getGlobal","name","version","unregisterGlobal","trace","TraceAPI","SpanKind","setSpan","context","span","trace","isSpanContextValid","context","trace","getTracer","name","version","SpanStatusCode","isTracingDisabled","_a","azureTracingDisabledValue","createSpanFunction","args","operationName","operationOptions","tracer","getTracer","tracingOptions","spanOptions","SpanKind","spanName","span","trace","INVALID_SPAN_CONTEXT","newSpanOptions","newTracingOptions","setSpan","context","newOperationOptions","VERSION","getTraceParentHeader","spanContext","missingFields","hexFlags","traceFlags","VERSION","createSpan","createSpanFunction","tracingPolicy","tracingOptions","nextPolicy","options","TracingPolicy","BaseRequestPolicy","request","__async","span","response","err","_a","SpanKind","namespaceFromContext","spanContext","traceParentHeader","getTraceParentHeader","isSpanContextValid","traceState","error","logger","SpanStatusCode","serviceRequestId","ServiceClient","credentials","options","getCachedDefaultHttpClient","RequestPolicyOptions","requestPolicyFactories","logger","authPolicyFactory","isTokenCredential","bearerTokenPolicyFactory","serviceClient","serviceClientOptions","nextPolicy","createOptions","credentialScopes","getCredentialScopes","bearerTokenAuthenticationPolicy","signingPolicy","createDefaultRequestPolicyFactories","newRequestPolicyFactories","httpRequest","isWebResourceLike","WebResource","error","httpPipeline","i","operationArguments","operationSpec","callback","__async","_a","serializerOptions","result","baseUri","requestUrl","URLBuilder","urlParameter","urlParameterValue","getOperationArgumentValueFromParameter","getPathStringFromParameter","queryParameter","queryParameterValue","QueryCollectionFormat","index","item","contentType","headerParameter","headerValue","headerCollectionPrefix","key","customHeaderName","serializeRequestBody","getStreamResponseStatusCodes","rawResponse","sendRequestError","flattenResponse","cb","res","err","_b","_c","_d","_e","_f","updatedOptions","XML_CHARKEY","xmlCharKey","bodyMapper","required","xmlName","xmlElementName","serializedName","xmlNamespace","xmlNamespacePrefix","typeName","requestBodyParameterPathString","isStream","MapperType","xmlnsKey","value","getXmlValueWithNamespace","stringifyXML","prepareXMLRootList","formDataParameter","formDataParameterValue","formDataParameterPropertyName","serializedValue","XML_ATTRKEY","getValueOrFunctionResult","defaultValueCreator","factories","generateClientRequestIdPolicy","userAgentHeaderName","getDefaultUserAgentHeaderName","userAgentHeaderValue","getDefaultUserAgentValue","userAgentPolicy","redirectPolicy","rpRegistrationPolicy","exponentialRetryPolicy","systemErrorRetryPolicy","throttlingRetryPolicy","deserializationPolicy","isNode","proxyPolicy","logPolicy","getOperationArgumentValueFromParameter","serviceClient","operationArguments","parameter","serializer","getOperationArgumentValueFromParameterPath","parameterPath","parameterMapper","_a","value","serializerOptions","propertySearchResult","getPropertyFromParameterPath","useDefaultValue","parameterPathString","getPathStringFromParameterPath","propertyName","propertyMapper","propertyPath","propertyValue","propertyPathString","parent","result","i","parameterPathPart","flattenResponse","_response","responseSpec","parsedHeaders","bodyMapper","addOperationResponse","obj","typeName","modelProperties","isPageableResponse","k","arrayResponse","key","isPrimitiveType","getCredentialScopes","options","baseUri","mappers_exports","__export","AccessPolicy","AppendBlobAppendBlockExceptionHeaders","AppendBlobAppendBlockFromUrlExceptionHeaders","AppendBlobAppendBlockFromUrlHeaders","AppendBlobAppendBlockHeaders","AppendBlobCreateExceptionHeaders","AppendBlobCreateHeaders","AppendBlobSealExceptionHeaders","AppendBlobSealHeaders","ArrowConfiguration","ArrowField","BlobAbortCopyFromURLExceptionHeaders","BlobAbortCopyFromURLHeaders","BlobAcquireLeaseExceptionHeaders","BlobAcquireLeaseHeaders","BlobBreakLeaseExceptionHeaders","BlobBreakLeaseHeaders","BlobChangeLeaseExceptionHeaders","BlobChangeLeaseHeaders","BlobCopyFromURLExceptionHeaders","BlobCopyFromURLHeaders","BlobCreateSnapshotExceptionHeaders","BlobCreateSnapshotHeaders","BlobDeleteExceptionHeaders","BlobDeleteHeaders","BlobDeleteImmutabilityPolicyExceptionHeaders","BlobDeleteImmutabilityPolicyHeaders","BlobDownloadExceptionHeaders","BlobDownloadHeaders","BlobFlatListSegment","BlobGetAccountInfoExceptionHeaders","BlobGetAccountInfoHeaders","BlobGetPropertiesExceptionHeaders","BlobGetPropertiesHeaders","BlobGetTagsExceptionHeaders","BlobGetTagsHeaders","BlobHierarchyListSegment","BlobItemInternal","BlobName","BlobPrefix","BlobPropertiesInternal","BlobQueryExceptionHeaders","BlobQueryHeaders","BlobReleaseLeaseExceptionHeaders","BlobReleaseLeaseHeaders","BlobRenewLeaseExceptionHeaders","BlobRenewLeaseHeaders","BlobServiceProperties","BlobServiceStatistics","BlobSetExpiryExceptionHeaders","BlobSetExpiryHeaders","BlobSetHttpHeadersExceptionHeaders","BlobSetHttpHeadersHeaders","BlobSetImmutabilityPolicyExceptionHeaders","BlobSetImmutabilityPolicyHeaders","BlobSetLegalHoldExceptionHeaders","BlobSetLegalHoldHeaders","BlobSetMetadataExceptionHeaders","BlobSetMetadataHeaders","BlobSetTagsExceptionHeaders","BlobSetTagsHeaders","BlobSetTierExceptionHeaders","BlobSetTierHeaders","BlobStartCopyFromURLExceptionHeaders","BlobStartCopyFromURLHeaders","BlobTag","BlobTags","BlobUndeleteExceptionHeaders","BlobUndeleteHeaders","Block","BlockBlobCommitBlockListExceptionHeaders","BlockBlobCommitBlockListHeaders","BlockBlobGetBlockListExceptionHeaders","BlockBlobGetBlockListHeaders","BlockBlobPutBlobFromUrlExceptionHeaders","BlockBlobPutBlobFromUrlHeaders","BlockBlobStageBlockExceptionHeaders","BlockBlobStageBlockFromURLExceptionHeaders","BlockBlobStageBlockFromURLHeaders","BlockBlobStageBlockHeaders","BlockBlobUploadExceptionHeaders","BlockBlobUploadHeaders","BlockList","BlockLookupList","ClearRange","ContainerAcquireLeaseExceptionHeaders","ContainerAcquireLeaseHeaders","ContainerBreakLeaseExceptionHeaders","ContainerBreakLeaseHeaders","ContainerChangeLeaseExceptionHeaders","ContainerChangeLeaseHeaders","ContainerCreateExceptionHeaders","ContainerCreateHeaders","ContainerDeleteExceptionHeaders","ContainerDeleteHeaders","ContainerFilterBlobsExceptionHeaders","ContainerFilterBlobsHeaders","ContainerGetAccessPolicyExceptionHeaders","ContainerGetAccessPolicyHeaders","ContainerGetAccountInfoExceptionHeaders","ContainerGetAccountInfoHeaders","ContainerGetPropertiesExceptionHeaders","ContainerGetPropertiesHeaders","ContainerItem","ContainerListBlobFlatSegmentExceptionHeaders","ContainerListBlobFlatSegmentHeaders","ContainerListBlobHierarchySegmentExceptionHeaders","ContainerListBlobHierarchySegmentHeaders","ContainerProperties","ContainerReleaseLeaseExceptionHeaders","ContainerReleaseLeaseHeaders","ContainerRenameExceptionHeaders","ContainerRenameHeaders","ContainerRenewLeaseExceptionHeaders","ContainerRenewLeaseHeaders","ContainerRestoreExceptionHeaders","ContainerRestoreHeaders","ContainerSetAccessPolicyExceptionHeaders","ContainerSetAccessPolicyHeaders","ContainerSetMetadataExceptionHeaders","ContainerSetMetadataHeaders","ContainerSubmitBatchExceptionHeaders","ContainerSubmitBatchHeaders","CorsRule","DelimitedTextConfiguration","FilterBlobItem","FilterBlobSegment","GeoReplication","JsonTextConfiguration","KeyInfo","ListBlobsFlatSegmentResponse","ListBlobsHierarchySegmentResponse","ListContainersSegmentResponse","Logging","Metrics","PageBlobClearPagesExceptionHeaders","PageBlobClearPagesHeaders","PageBlobCopyIncrementalExceptionHeaders","PageBlobCopyIncrementalHeaders","PageBlobCreateExceptionHeaders","PageBlobCreateHeaders","PageBlobGetPageRangesDiffExceptionHeaders","PageBlobGetPageRangesDiffHeaders","PageBlobGetPageRangesExceptionHeaders","PageBlobGetPageRangesHeaders","PageBlobResizeExceptionHeaders","PageBlobResizeHeaders","PageBlobUpdateSequenceNumberExceptionHeaders","PageBlobUpdateSequenceNumberHeaders","PageBlobUploadPagesExceptionHeaders","PageBlobUploadPagesFromURLExceptionHeaders","PageBlobUploadPagesFromURLHeaders","PageBlobUploadPagesHeaders","PageList","PageRange","QueryFormat","QueryRequest","QuerySerialization","RetentionPolicy","ServiceFilterBlobsExceptionHeaders","ServiceFilterBlobsHeaders","ServiceGetAccountInfoExceptionHeaders","ServiceGetAccountInfoHeaders","ServiceGetPropertiesExceptionHeaders","ServiceGetPropertiesHeaders","ServiceGetStatisticsExceptionHeaders","ServiceGetStatisticsHeaders","ServiceGetUserDelegationKeyExceptionHeaders","ServiceGetUserDelegationKeyHeaders","ServiceListContainersSegmentExceptionHeaders","ServiceListContainersSegmentHeaders","ServiceSetPropertiesExceptionHeaders","ServiceSetPropertiesHeaders","ServiceSubmitBatchExceptionHeaders","ServiceSubmitBatchHeaders","SignedIdentifier","StaticWebsite","StorageError","UserDelegationKey","contentType","blobServiceProperties","BlobServiceProperties","accept","url","restype","comp","timeoutInSeconds","version","requestId","accept1","comp1","comp2","prefix","marker","maxPageSize","include","QueryCollectionFormat","keyInfo","KeyInfo","comp3","restype1","body","comp4","contentLength","multipartContentType","comp5","where","restype2","metadata","access","defaultEncryptionScope","preventEncryptionScopeOverride","leaseId","ifModifiedSince","ifUnmodifiedSince","comp6","comp7","containerAcl","comp8","deletedContainerName","deletedContainerVersion","comp9","sourceContainerName","sourceLeaseId","comp10","action","duration","proposedLeaseId","action1","leaseId1","action2","action3","breakPeriod","action4","proposedLeaseId1","include1","delimiter","snapshot","versionId","range","rangeGetContentMD5","rangeGetContentCRC64","encryptionKey","encryptionKeySha256","encryptionAlgorithm","ifMatch","ifNoneMatch","ifTags","deleteSnapshots","blobDeleteType","comp11","expiryOptions","expiresOn","blobCacheControl","blobContentType","blobContentMD5","blobContentEncoding","blobContentLanguage","blobContentDisposition","comp12","immutabilityPolicyExpiry","immutabilityPolicyMode","comp13","legalHold","encryptionScope","comp14","tier","rehydratePriority","sourceIfModifiedSince","sourceIfUnmodifiedSince","sourceIfMatch","sourceIfNoneMatch","sourceIfTags","copySource","blobTagsString","sealBlob","legalHold1","xMsRequiresSync","sourceContentMD5","copySourceAuthorization","copySourceTags","comp15","copyActionAbortConstant","copyId","comp16","tier1","queryRequest","QueryRequest","comp17","comp18","tags","BlobTags","transactionalContentMD5","transactionalContentCrc64","blobType","blobContentLength","blobSequenceNumber","contentType1","body1","accept2","comp19","pageWrite","ifSequenceNumberLessThanOrEqualTo","ifSequenceNumberLessThan","ifSequenceNumberEqualTo","pageWrite1","sourceUrl","sourceRange","sourceContentCrc64","range1","comp20","prevsnapshot","prevSnapshotUrl","sequenceNumberAction","comp21","blobType1","comp22","maxSize","appendPosition","sourceRange1","comp23","blobType2","copySourceBlobProperties","comp24","blockId","blocks","BlockLookupList","comp25","listType","Service","client","blobServiceProperties","options","operationArguments","operationOptionsToRequestOptionsBase","setPropertiesOperationSpec","getPropertiesOperationSpec","getStatisticsOperationSpec","listContainersSegmentOperationSpec","keyInfo","getUserDelegationKeyOperationSpec","getAccountInfoOperationSpec","contentLength","multipartContentType","body","submitBatchOperationSpec","filterBlobsOperationSpec","xmlSerializer","Serializer","mappers_exports","ServiceSetPropertiesHeaders","StorageError","ServiceSetPropertiesExceptionHeaders","restype","comp","timeoutInSeconds","url","contentType","accept","version","requestId","BlobServiceProperties","ServiceGetPropertiesHeaders","ServiceGetPropertiesExceptionHeaders","accept1","BlobServiceStatistics","ServiceGetStatisticsHeaders","ServiceGetStatisticsExceptionHeaders","comp1","ListContainersSegmentResponse","ServiceListContainersSegmentHeaders","ServiceListContainersSegmentExceptionHeaders","comp2","prefix","marker","maxPageSize","include","UserDelegationKey","ServiceGetUserDelegationKeyHeaders","ServiceGetUserDelegationKeyExceptionHeaders","comp3","ServiceGetAccountInfoHeaders","ServiceGetAccountInfoExceptionHeaders","restype1","ServiceSubmitBatchHeaders","ServiceSubmitBatchExceptionHeaders","comp4","FilterBlobSegment","ServiceFilterBlobsHeaders","ServiceFilterBlobsExceptionHeaders","comp5","where","Container","client","options","operationArguments","operationOptionsToRequestOptionsBase","createOperationSpec","getPropertiesOperationSpec","deleteOperationSpec","setMetadataOperationSpec","getAccessPolicyOperationSpec","setAccessPolicyOperationSpec","restoreOperationSpec","sourceContainerName","renameOperationSpec","contentLength","multipartContentType","body","submitBatchOperationSpec","filterBlobsOperationSpec","acquireLeaseOperationSpec","leaseId","releaseLeaseOperationSpec","renewLeaseOperationSpec","breakLeaseOperationSpec","proposedLeaseId","changeLeaseOperationSpec","listBlobFlatSegmentOperationSpec","delimiter","listBlobHierarchySegmentOperationSpec","getAccountInfoOperationSpec","xmlSerializer","Serializer","mappers_exports","ContainerCreateHeaders","StorageError","ContainerCreateExceptionHeaders","timeoutInSeconds","restype2","url","version","requestId","accept1","metadata","access","defaultEncryptionScope","preventEncryptionScopeOverride","ContainerGetPropertiesHeaders","ContainerGetPropertiesExceptionHeaders","ContainerDeleteHeaders","ContainerDeleteExceptionHeaders","ifModifiedSince","ifUnmodifiedSince","ContainerSetMetadataHeaders","ContainerSetMetadataExceptionHeaders","comp6","ContainerGetAccessPolicyHeaders","ContainerGetAccessPolicyExceptionHeaders","comp7","ContainerSetAccessPolicyHeaders","ContainerSetAccessPolicyExceptionHeaders","containerAcl","contentType","accept","ContainerRestoreHeaders","ContainerRestoreExceptionHeaders","comp8","deletedContainerName","deletedContainerVersion","ContainerRenameHeaders","ContainerRenameExceptionHeaders","comp9","sourceLeaseId","ContainerSubmitBatchHeaders","ContainerSubmitBatchExceptionHeaders","comp4","FilterBlobSegment","ContainerFilterBlobsHeaders","ContainerFilterBlobsExceptionHeaders","marker","maxPageSize","comp5","where","ContainerAcquireLeaseHeaders","ContainerAcquireLeaseExceptionHeaders","comp10","action","duration","ContainerReleaseLeaseHeaders","ContainerReleaseLeaseExceptionHeaders","action1","leaseId1","ContainerRenewLeaseHeaders","ContainerRenewLeaseExceptionHeaders","action2","ContainerBreakLeaseHeaders","ContainerBreakLeaseExceptionHeaders","action3","breakPeriod","ContainerChangeLeaseHeaders","ContainerChangeLeaseExceptionHeaders","action4","proposedLeaseId1","ListBlobsFlatSegmentResponse","ContainerListBlobFlatSegmentHeaders","ContainerListBlobFlatSegmentExceptionHeaders","comp2","prefix","include1","ListBlobsHierarchySegmentResponse","ContainerListBlobHierarchySegmentHeaders","ContainerListBlobHierarchySegmentExceptionHeaders","ContainerGetAccountInfoHeaders","ContainerGetAccountInfoExceptionHeaders","comp","restype1","Blob","client","options","operationArguments","operationOptionsToRequestOptionsBase","downloadOperationSpec","getPropertiesOperationSpec","deleteOperationSpec","undeleteOperationSpec","expiryOptions","setExpiryOperationSpec","setHttpHeadersOperationSpec","setImmutabilityPolicyOperationSpec","deleteImmutabilityPolicyOperationSpec","legalHold","setLegalHoldOperationSpec","setMetadataOperationSpec","acquireLeaseOperationSpec","leaseId","releaseLeaseOperationSpec","renewLeaseOperationSpec","proposedLeaseId","changeLeaseOperationSpec","breakLeaseOperationSpec","createSnapshotOperationSpec","copySource","startCopyFromURLOperationSpec","copyFromURLOperationSpec","copyId","abortCopyFromURLOperationSpec","tier","setTierOperationSpec","getAccountInfoOperationSpec","queryOperationSpec","getTagsOperationSpec","setTagsOperationSpec","xmlSerializer","Serializer","mappers_exports","BlobDownloadHeaders","StorageError","BlobDownloadExceptionHeaders","timeoutInSeconds","snapshot","versionId","url","version","requestId","accept1","ifModifiedSince","ifUnmodifiedSince","range","rangeGetContentMD5","rangeGetContentCRC64","encryptionKey","encryptionKeySha256","encryptionAlgorithm","ifMatch","ifNoneMatch","ifTags","BlobGetPropertiesHeaders","BlobGetPropertiesExceptionHeaders","BlobDeleteHeaders","BlobDeleteExceptionHeaders","blobDeleteType","deleteSnapshots","BlobUndeleteHeaders","BlobUndeleteExceptionHeaders","comp8","BlobSetExpiryHeaders","BlobSetExpiryExceptionHeaders","comp11","expiresOn","BlobSetHttpHeadersHeaders","BlobSetHttpHeadersExceptionHeaders","comp","blobCacheControl","blobContentType","blobContentMD5","blobContentEncoding","blobContentLanguage","blobContentDisposition","BlobSetImmutabilityPolicyHeaders","BlobSetImmutabilityPolicyExceptionHeaders","comp12","immutabilityPolicyExpiry","immutabilityPolicyMode","BlobDeleteImmutabilityPolicyHeaders","BlobDeleteImmutabilityPolicyExceptionHeaders","BlobSetLegalHoldHeaders","BlobSetLegalHoldExceptionHeaders","comp13","BlobSetMetadataHeaders","BlobSetMetadataExceptionHeaders","comp6","metadata","encryptionScope","BlobAcquireLeaseHeaders","BlobAcquireLeaseExceptionHeaders","comp10","action","duration","BlobReleaseLeaseHeaders","BlobReleaseLeaseExceptionHeaders","action1","leaseId1","BlobRenewLeaseHeaders","BlobRenewLeaseExceptionHeaders","action2","BlobChangeLeaseHeaders","BlobChangeLeaseExceptionHeaders","action4","proposedLeaseId1","BlobBreakLeaseHeaders","BlobBreakLeaseExceptionHeaders","action3","breakPeriod","BlobCreateSnapshotHeaders","BlobCreateSnapshotExceptionHeaders","comp14","BlobStartCopyFromURLHeaders","BlobStartCopyFromURLExceptionHeaders","rehydratePriority","sourceIfModifiedSince","sourceIfUnmodifiedSince","sourceIfMatch","sourceIfNoneMatch","sourceIfTags","blobTagsString","sealBlob","legalHold1","BlobCopyFromURLHeaders","BlobCopyFromURLExceptionHeaders","xMsRequiresSync","sourceContentMD5","copySourceAuthorization","copySourceTags","BlobAbortCopyFromURLHeaders","BlobAbortCopyFromURLExceptionHeaders","comp15","copyActionAbortConstant","BlobSetTierHeaders","BlobSetTierExceptionHeaders","comp16","tier1","BlobGetAccountInfoHeaders","BlobGetAccountInfoExceptionHeaders","restype1","BlobQueryHeaders","BlobQueryExceptionHeaders","queryRequest","comp17","contentType","accept","BlobTags","BlobGetTagsHeaders","BlobGetTagsExceptionHeaders","comp18","BlobSetTagsHeaders","BlobSetTagsExceptionHeaders","tags","transactionalContentMD5","transactionalContentCrc64","PageBlob","client","contentLength","blobContentLength","options","operationArguments","operationOptionsToRequestOptionsBase","createOperationSpec","body","uploadPagesOperationSpec","clearPagesOperationSpec","sourceUrl","sourceRange","range","uploadPagesFromURLOperationSpec","getPageRangesOperationSpec","getPageRangesDiffOperationSpec","resizeOperationSpec","sequenceNumberAction","updateSequenceNumberOperationSpec","copySource","copyIncrementalOperationSpec","xmlSerializer","Serializer","mappers_exports","serializer","PageBlobCreateHeaders","StorageError","PageBlobCreateExceptionHeaders","timeoutInSeconds","url","version","requestId","accept1","metadata","leaseId","ifModifiedSince","ifUnmodifiedSince","encryptionKey","encryptionKeySha256","encryptionAlgorithm","ifMatch","ifNoneMatch","ifTags","blobCacheControl","blobContentType","blobContentMD5","blobContentEncoding","blobContentLanguage","blobContentDisposition","immutabilityPolicyExpiry","immutabilityPolicyMode","encryptionScope","tier","blobTagsString","legalHold1","blobType","blobSequenceNumber","PageBlobUploadPagesHeaders","PageBlobUploadPagesExceptionHeaders","body1","comp19","transactionalContentMD5","transactionalContentCrc64","contentType1","accept2","pageWrite","ifSequenceNumberLessThanOrEqualTo","ifSequenceNumberLessThan","ifSequenceNumberEqualTo","PageBlobClearPagesHeaders","PageBlobClearPagesExceptionHeaders","pageWrite1","PageBlobUploadPagesFromURLHeaders","PageBlobUploadPagesFromURLExceptionHeaders","sourceIfModifiedSince","sourceIfUnmodifiedSince","sourceIfMatch","sourceIfNoneMatch","sourceContentMD5","copySourceAuthorization","sourceContentCrc64","range1","PageList","PageBlobGetPageRangesHeaders","PageBlobGetPageRangesExceptionHeaders","marker","maxPageSize","snapshot","comp20","PageBlobGetPageRangesDiffHeaders","PageBlobGetPageRangesDiffExceptionHeaders","prevsnapshot","prevSnapshotUrl","PageBlobResizeHeaders","PageBlobResizeExceptionHeaders","comp","PageBlobUpdateSequenceNumberHeaders","PageBlobUpdateSequenceNumberExceptionHeaders","PageBlobCopyIncrementalHeaders","PageBlobCopyIncrementalExceptionHeaders","comp21","AppendBlob","client","contentLength","options","operationArguments","operationOptionsToRequestOptionsBase","createOperationSpec","body","appendBlockOperationSpec","sourceUrl","appendBlockFromUrlOperationSpec","sealOperationSpec","xmlSerializer","Serializer","mappers_exports","serializer","AppendBlobCreateHeaders","StorageError","AppendBlobCreateExceptionHeaders","timeoutInSeconds","url","version","requestId","accept1","metadata","leaseId","ifModifiedSince","ifUnmodifiedSince","encryptionKey","encryptionKeySha256","encryptionAlgorithm","ifMatch","ifNoneMatch","ifTags","blobCacheControl","blobContentType","blobContentMD5","blobContentEncoding","blobContentLanguage","blobContentDisposition","immutabilityPolicyExpiry","immutabilityPolicyMode","encryptionScope","blobTagsString","legalHold1","blobType1","AppendBlobAppendBlockHeaders","AppendBlobAppendBlockExceptionHeaders","body1","comp22","transactionalContentMD5","transactionalContentCrc64","contentType1","accept2","maxSize","appendPosition","AppendBlobAppendBlockFromUrlHeaders","AppendBlobAppendBlockFromUrlExceptionHeaders","sourceIfModifiedSince","sourceIfUnmodifiedSince","sourceIfMatch","sourceIfNoneMatch","sourceContentMD5","copySourceAuthorization","sourceContentCrc64","sourceRange1","AppendBlobSealHeaders","AppendBlobSealExceptionHeaders","comp23","BlockBlob","client","contentLength","body","options","operationArguments","operationOptionsToRequestOptionsBase","uploadOperationSpec","copySource","putBlobFromUrlOperationSpec","blockId","stageBlockOperationSpec","sourceUrl","stageBlockFromURLOperationSpec","blocks","commitBlockListOperationSpec","listType","getBlockListOperationSpec","xmlSerializer","Serializer","mappers_exports","serializer","BlockBlobUploadHeaders","StorageError","BlockBlobUploadExceptionHeaders","body1","timeoutInSeconds","url","version","requestId","metadata","leaseId","ifModifiedSince","ifUnmodifiedSince","encryptionKey","encryptionKeySha256","encryptionAlgorithm","ifMatch","ifNoneMatch","ifTags","blobCacheControl","blobContentType","blobContentMD5","blobContentEncoding","blobContentLanguage","blobContentDisposition","immutabilityPolicyExpiry","immutabilityPolicyMode","encryptionScope","tier","blobTagsString","legalHold1","transactionalContentMD5","transactionalContentCrc64","contentType1","accept2","blobType2","BlockBlobPutBlobFromUrlHeaders","BlockBlobPutBlobFromUrlExceptionHeaders","accept1","sourceIfModifiedSince","sourceIfUnmodifiedSince","sourceIfMatch","sourceIfNoneMatch","sourceIfTags","sourceContentMD5","copySourceAuthorization","copySourceTags","copySourceBlobProperties","BlockBlobStageBlockHeaders","BlockBlobStageBlockExceptionHeaders","comp24","BlockBlobStageBlockFromURLHeaders","BlockBlobStageBlockFromURLExceptionHeaders","sourceContentCrc64","sourceRange1","BlockBlobCommitBlockListHeaders","BlockBlobCommitBlockListExceptionHeaders","comp25","contentType","accept","BlockList","BlockBlobGetBlockListHeaders","BlockBlobGetBlockListExceptionHeaders","snapshot","logger","createClientLogger","SDK_VERSION","SERVICE_VERSION","StorageOAuthScopes","URLConstants","HTTPURLConnection","HeaderConstants","ETagNone","ETagAny","SIZE_1_MB","BATCH_MAX_REQUEST","BATCH_MAX_PAYLOAD_IN_BYTES","HTTP_LINE_ENDING","HTTP_VERSION_1_1","EncryptionAlgorithmAES25","DevelopmentConnectionString","StorageBlobLoggingAllowedHeaderNames","StorageBlobLoggingAllowedQueryParameters","BlobUsesCustomerSpecifiedEncryptionMsg","BlobDoesNotUseCustomerSpecifiedEncryption","PathStylePorts","escapeURLPath","url","urlParsed","URLBuilder","path","escape","getProxyUriFromDevConnString","connectionString","proxyUri","matchCredentials","element","getValueInConnString","argument","elements","extractConnectionStringParts","DevelopmentConnectionString","blobEndpoint","defaultEndpointsProtocol","accountName","accountKey","endpointSuffix","protocol","accountSas","getAccountNameFromUrl","text","appendToURLPath","name","setURLParameter","value","getURLParameter","setURLHost","host","getURLPath","getURLScheme","getURLPathAndQuery","pathString","queryString","appendToURLQuery","url","queryParts","urlParsed","URLBuilder","query","truncatedISO8061Date","date","withMilliseconds","dateString","base64encode","content","isNode","generateBlockID","blockIDPrefix","blockIndex","res","padStart","base64encode","delay","timeInMs","aborter","abortError","__async","resolve","reject","timeout","abortHandler","currentString","targetLength","padString","iEqual","str1","str2","getAccountNameFromUrl","url","parsedUrl","URLBuilder","accountName","isIpEndpointStyle","host","PathStylePorts","toBlobTagsString","tags","tagPairs","key","value","toBlobTags","res","toTags","blobTag","toQuerySerialization","textConfiguration","parseObjectReplicationRecord","objectReplicationRecord","orProperties","ids","policyPrefix","rule","policyIndex","policy","attachCredential","thing","credential","httpAuthorizationToString","httpAuthorization","BlobNameToString","name","ConvertInternalResponseOfListBlobFlat","internalResponse","blobItemInteral","ConvertInternalResponseOfListBlobHierarchy","_a","blobPrefixInternal","ExtractPageRangeInfoItems","getPageRangesSegment","pageRange","clearRange","pageRangeIndex","clearRangeIndex","EscapePath","blobName","split","StorageBrowserPolicy","BaseRequestPolicy","nextPolicy","options","request","__async","isNode","setURLParameter","URLConstants","HeaderConstants","StorageBrowserPolicyFactory","nextPolicy","options","StorageBrowserPolicy","StorageRetryPolicyType","DEFAULT_RETRY_OPTIONS","RETRY_ABORT_ERROR","AbortError","StorageRetryPolicy","BaseRequestPolicy","nextPolicy","options","retryOptions","request","__async","secondaryHas404","attempt","newRequest","isPrimaryRetry","setURLHost","setURLParameter","URLConstants","response","logger","err","retriableErrors","retriableError","statusCode","abortSignal","delayTimeInMs","delay","StorageRetryPolicyFactory","retryOptions","nextPolicy","options","StorageRetryPolicy","CredentialPolicy","BaseRequestPolicy","request","AnonymousCredentialPolicy","CredentialPolicy","nextPolicy","options","Credential","_nextPolicy","_options","AnonymousCredential","Credential","nextPolicy","options","AnonymousCredentialPolicy","os","TelemetryPolicy","BaseRequestPolicy","nextPolicy","options","telemetry","request","__async","isNode","HttpHeaders","HeaderConstants","TelemetryPolicyFactory","telemetry","userAgentInfo","isNode","telemetryString","libInfo","SDK_VERSION","runtimeInfo","os","nextPolicy","options","TelemetryPolicy","_defaultHttpClient","XhrHttpClient","getCachedDefaultHttpClient","Constants","DEFAULT_CYCLER_OPTIONS","beginRefresh","getAccessToken","retryIntervalInMs","timeoutInMs","__async","tryGetAccessToken","finalToken","token","delay","createTokenCycler","credential","scopes","tokenCyclerOptions","refreshWorker","options","cycler","_a","refresh","getTokenOptions","_token","reason","tokenOptions","getChallenge","response","challenge","parseChallenge","x","keyValue","key","value","a","b","storageBearerTokenChallengeAuthenticationPolicy","getToken","StorageBearerTokenChallengeAuthenticationPolicy","BaseRequestPolicy","nextPolicy","webResource","challengeInfo","challengeScopes","tenantId","URLBuilder","getTokenForChallenge","tokenForChallenge","isPipelineLike","pipeline","castPipeline","Pipeline","factories","options","getCachedDefaultHttpClient","newPipeline","credential","pipelineOptions","_a","AnonymousCredential","telemetryPolicy","TelemetryPolicyFactory","tracingPolicy","keepAlivePolicy","generateClientRequestIdPolicy","StorageBrowserPolicyFactory","StorageRetryPolicyFactory","deserializationPolicy","logPolicy","logger","StorageBlobLoggingAllowedHeaderNames","StorageBlobLoggingAllowedQueryParameters","isNode","proxyPolicy","disableResponseDecompressionPolicy","isTokenCredential","attachCredential","storageBearerTokenChallengeAuthenticationPolicy","StorageOAuthScopes","StorageSharedKeyCredential","packageName","packageVersion","StorageClientContext","ServiceClient","url","options","defaultUserAgent","getDefaultUserAgentValue","StorageClient","url","pipeline","escapeURLPath","getAccountNameFromUrl","StorageClientContext","iEqual","getURLScheme","AnonymousCredential","factory","isNode","StorageSharedKeyCredential","isTokenCredential","storageClientContext","createSpan","createSpanFunction","convertTracingToRequestOptionsBase","options","_a","_b","BlobSASPermissions","_BlobSASPermissions","permissions","blobSASPermissions","char","permissionLike","ContainerSASPermissions","_ContainerSASPermissions","permissions","containerSASPermissions","char","permissionLike","UserDelegationKeyCredential","ipRangeToString","ipRange","SASQueryParameters","version","signature","permissionsOrOptions","services","resourceTypes","protocol","startsOn","expiresOn","ipRange","identifier","resource","cacheControl","contentDisposition","contentEncoding","contentLanguage","contentType","userDelegationKey","preauthorizedAgentObjectId","correlationId","encryptionScope","params","queries","param","truncatedISO8061Date","ipRangeToString","key","value","generateBlobSASQueryParameters","blobSASSignatureValues","sharedKeyCredentialOrUserDelegationKey","accountName","version","SERVICE_VERSION","sharedKeyCredential","StorageSharedKeyCredential","userDelegationKeyCredential","UserDelegationKeyCredential","generateBlobSASQueryParameters20201206","generateBlobSASQueryParametersUDK20201206","generateBlobSASQueryParameters20181109","generateBlobSASQueryParametersUDK20200210","generateBlobSASQueryParametersUDK20181109","generateBlobSASQueryParameters20150405","SASSignatureValuesSanityCheckAndAutofill","resource","verifiedPermissions","BlobSASPermissions","ContainerSASPermissions","stringToSign","truncatedISO8061Date","getCanonicalName","ipRangeToString","signature","SASQueryParameters","timestamp","containerName","blobName","elements","BlobLeaseClient","client","leaseId","clientContext","StorageClientContext","Container","Blob","generateUuid","_0","__async","duration","options","_a","_b","_c","_d","_e","_f","span","updatedOptions","createSpan","ETagNone","convertTracingToRequestOptionsBase","e","SpanStatusCode","proposedLeaseId","response","breakPeriod","operationOptions","BlobQueryResponse","originalResponse","_options","toAccessTier","tier","ensureCpkIfSpecified","cpk","isHttps","EncryptionAlgorithmAES25","rangeResponseFromModel","response","pageRange","x","clearRange","logger","createClientLogger","PollerStoppedError","_PollerStoppedError","message","PollerCancelledError","_PollerCancelledError","Poller","operation","resolve","reject","__async","pollOptions","options","state","callback","clearPollOncePromise","error","c","BlobBeginCopyFromUrlPoller","Poller","options","blobClient","copySource","intervalInMs","onProgress","resumeFrom","startCopyFromURLOptions","state","operation","makeBlobBeginCopyFromURLPollOperation","delay","cancel","__async","copyId","update","result","copyStatus","copyProgress","prevCopyProgress","err","toString","key","value","rangeToString","iRange","import_events","BatchStates","Batch","concurrency","operation","__async","error","resolve","reject","BufferScheduler","blobToString","blob","__async","fileReader","resolve","reject","ev","fsStat","fsCreateReadStream","BlobClient","_BlobClient","StorageClient","urlOrConnectionString","credentialOrPipelineOrContainerName","blobNameOrOptions","options","pipeline","url","isPipelineLike","isNode","StorageSharedKeyCredential","AnonymousCredential","isTokenCredential","newPipeline","containerName","blobName","extractedCreds","extractConnectionStringParts","sharedKeyCredential","appendToURLPath","Blob","getURLParameter","URLConstants","snapshot","setURLParameter","versionId","AppendBlobClient","BlockBlobClient","PageBlobClient","__async","offset","count","_a","ensureCpkIfSpecified","span","updatedOptions","createSpan","res","rangeToString","convertTracingToRequestOptionsBase","wrappedRes","parseObjectReplicationRecord","start","updatedDownloadOptions","e","SpanStatusCode","BlobUsesCustomerSpecifiedEncryptionMsg","BlobDoesNotUseCustomerSpecifiedEncryption","_b","_0","blobHTTPHeaders","metadata","tags","toBlobTags","response","toTags","proposeLeaseId","BlobLeaseClient","copySource","client","args","poller","BlobBeginCopyFromUrlPoller","copyId","_c","httpAuthorizationToString","toAccessTier","toBlobTagsString","tier","_1","_2","param1","param2","param3","param4","buffer","error","transferProgress","batch","Batch","off","chunkEnd","stream","filePath","parsedUrl","URLBuilder","pathComponents","isIpEndpointStyle","resolve","sas","generateBlobSASQueryParameters","appendToURLQuery","immutabilityPolicy","legalHoldEnabled","_AppendBlobClient","AppendBlob","conditions","ETagAny","body","contentLength","sourceURL","sourceOffset","_BlockBlobClient","BlockBlob","query","toQuerySerialization","BlobQueryResponse","_d","_e","blockId","blocks","listType","data","size","browserBlob","browserData","bodyFactory","numBlocks","blockList","blockIDPrefix","generateUuid","i","blockID","generateBlockID","fsStat","fsCreateReadStream","bufferSize","maxConcurrency","blockNum","BufferScheduler","length","_PageBlobClient","PageBlob","_3","destOffset","rangeResponseFromModel","marker","__asyncGenerator","getPageRangeItemSegmentsResponse","__await","e_1","__asyncValues","getPageRangesSegment","__yieldStar","__asyncDelegator","ExtractPageRangeInfoItems","e_1_1","iter","settings","prevSnapshot","prevSnapshotOrUrl","e_2","e_2_1","prevSnapshotUrl","sequenceNumberAction","sequenceNumber","getBodyAsText","batchResponse","__async","blob","blobToString","utf8ByteLength","str","HTTP_HEADER_DELIMITER","SPACE_DELIMITER","NOT_FOUND","BatchResponseParser","batchResponse","subRequests","HTTP_LINE_ENDING","__async","HTTPURLConnection","subResponses","getBodyAsText","subResponseCount","deserializedSubResponses","subResponsesSucceededCount","subResponsesFailedCount","index","subResponse","deserializedSubResponse","HttpHeaders","responseLines","subRespHeaderStartFound","subRespHeaderEndFound","subRespFailed","contentId","responseLine","HeaderConstants","HTTP_VERSION_1_1","tokens","logger","MutexLockStatus","Mutex","key","__async","resolve","handler","BlobBatch","InnerBatchRequest","subRequest","assembleSubRequestFunc","__async","Mutex","batchType","urlOrBlobClient","credentialOrOptions","options","url","credential","isNode","StorageSharedKeyCredential","AnonymousCredential","isTokenCredential","BlobClient","span","updatedOptions","createSpan","e","SpanStatusCode","credentialOrTier","tierOrOptions","tier","tempGuid","generateUuid","HTTP_LINE_ENDING","HeaderConstants","isAnonymousCreds","policyFactoryLength","factories","deserializationPolicy","BatchHeaderFilterPolicyFactory","attachCredential","bearerTokenAuthenticationPolicy","StorageOAuthScopes","BatchRequestAssemblePolicyFactory","Pipeline","request","getURLPathAndQuery","HTTP_VERSION_1_1","header","BATCH_MAX_REQUEST","path","getURLPath","BatchRequestAssemblePolicy","BaseRequestPolicy","batchRequest","nextPolicy","WebResource","HttpHeaders","BatchHeaderFilterPolicy","xMsHeaderName","iEqual","BlobBatchClient","url","credentialOrPipeline","options","pipeline","isPipelineLike","newPipeline","AnonymousCredential","storageClientContext","StorageClientContext","path","getURLPath","Container","Service","BlobBatch","urlsOrBlobClients","credentialOrOptions","__async","batch","urlOrBlobClient","credentialOrTier","tierOrOptions","_0","batchRequest","span","updatedOptions","createSpan","batchRequestBody","rawBatchResponse","utf8ByteLength","convertTracingToRequestOptionsBase","responseSummary","BatchResponseParser","e","SpanStatusCode","ContainerClient","StorageClient","urlOrConnectionString","credentialOrPipelineOrContainerName","options","pipeline","url","isPipelineLike","isNode","StorageSharedKeyCredential","AnonymousCredential","isTokenCredential","newPipeline","containerName","extractedCreds","extractConnectionStringParts","sharedKeyCredential","appendToURLPath","Container","__async","span","updatedOptions","createSpan","convertTracingToRequestOptionsBase","e","SpanStatusCode","_a","_b","res","blobName","BlobClient","EscapePath","AppendBlobClient","BlockBlobClient","PageBlobClient","_0","metadata","response","identifier","accessPolicy","_1","access","containerAcl","acl","truncatedISO8061Date","proposeLeaseId","BlobLeaseClient","_2","body","contentLength","blockBlobClient","blobClient","marker","ConvertInternalResponseOfListBlobFlat","blobItemInteral","BlobNameToString","toTags","parseObjectReplicationRecord","delimiter","ConvertInternalResponseOfListBlobHierarchy","blobPrefixInternal","__asyncGenerator","listBlobsFlatSegmentResponse","__await","e_1","__asyncValues","_c","__yieldStar","__asyncDelegator","e_1_1","include","iter","settings","listBlobsHierarchySegmentResponse","e_2","segment","prefix","blob","e_2_1","tagFilterSqlExpression","tagValue","e_3","e_3_1","listSegmentOptions","parsedUrl","URLBuilder","isIpEndpointStyle","resolve","sas","generateBlobSASQueryParameters","appendToURLQuery","BlobBatchClient","AccountSASPermissions","_AccountSASPermissions","permissions","accountSASPermissions","c","permissionLike","AccountSASResourceTypes","_AccountSASResourceTypes","resourceTypes","accountSASResourceTypes","c","AccountSASServices","_AccountSASServices","services","accountSASServices","c","generateAccountSASQueryParameters","accountSASSignatureValues","sharedKeyCredential","version","SERVICE_VERSION","parsedPermissions","AccountSASPermissions","parsedServices","AccountSASServices","parsedResourceTypes","AccountSASResourceTypes","stringToSign","truncatedISO8061Date","ipRangeToString","signature","SASQueryParameters","BlobServiceClient","_BlobServiceClient","StorageClient","url","credentialOrPipeline","options","pipeline","isPipelineLike","isNode","StorageSharedKeyCredential","AnonymousCredential","isTokenCredential","newPipeline","Service","connectionString","extractedCreds","extractConnectionStringParts","sharedKeyCredential","containerName","ContainerClient","appendToURLPath","_0","__async","span","updatedOptions","createSpan","containerClient","containerCreateResponse","e","SpanStatusCode","_1","deletedContainerName","deletedContainerVersion","containerUndeleteResponse","Container","sourceContainerName","destinationContainerName","_a","containerRenameResponse","convertTracingToRequestOptionsBase","properties","marker","tagFilterSqlExpression","response","blob","tagValue","toTags","__asyncGenerator","__await","e_1","_b","__asyncValues","_c","segment","__yieldStar","__asyncDelegator","e_1_1","listSegmentOptions","iter","settings","listContainersSegmentResponse","e_2","e_2_1","include","startsOn","expiresOn","truncatedISO8061Date","userDelegationKey","BlobBatchClient","permissions","AccountSASPermissions","resourceTypes","now","sas","generateAccountSASQueryParameters","AccountSASServices","appendToURLQuery","e","n","t","i","r","f","o","__async","a","s","d","u","c","l","y","B","w","b","p","g","__asyncGenerator","__await","I","v","h","D","S","A","N","iter","__forAwait","more","temp","error","__yieldStar","_c0","MatMenuItem_Conditional_4_Template","rf","ctx","ɵɵnamespaceSVG","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","_c1","_c2","MatMenu_ng_template_0_Template","_r2","ɵɵgetCurrentView","ɵɵlistener","$event","ɵɵrestoreView","ctx_r1","ɵɵnextContext","ɵɵresetView","ctx_r3","ctx_r4","ctx_r5","ɵɵprojection","ctx_r0","ɵɵproperty","ɵɵattribute","_c3","MAT_MENU_PANEL","InjectionToken","MatMenuItem","_MatMenuItem","_elementRef","_document","_focusMonitor","_parentMenu","_changeDetectorRef","Subject","origin","options","event","clone","icons","i","isHighlighted","triggersSubmenu","t","ɵɵdirectiveInject","ElementRef","DOCUMENT","FocusMonitor","ChangeDetectorRef","ɵɵdefineComponent","ɵɵclassProp","InputFlags","booleanAttribute","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","ɵɵprojectionDef","ɵɵtemplate","ɵɵadvance","ɵɵconditional","MatRipple","MAT_MENU_CONTENT","InjectionToken","matMenuAnimations","trigger","state","style","transition","animate","fadeInItems","transformMenu","menuPanelUid","MAT_MENU_DEFAULT_OPTIONS","InjectionToken","MAT_MENU_DEFAULT_OPTIONS_FACTORY","MatMenu","_MatMenu","value","classes","previousPanelClass","className","_elementRef","_ngZone","defaultOptions","_changeDetectorRef","QueryList","Subject","EventEmitter","FocusKeyManager","startWith","switchMap","items","merge","item","focusedItem","itemsList","manager","index","_item","event","keyCode","hasModifierKey","origin","take","menuPanel","depth","elevation","newElevation","customElevation","posX","posY","t","ɵɵdirectiveInject","ElementRef","NgZone","ChangeDetectorRef","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","MAT_MENU_CONTENT","MatMenuItem","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵviewQuery","TemplateRef","ɵɵattribute","InputFlags","booleanAttribute","ɵɵProvidersFeature","MAT_MENU_PANEL","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","_c3","ɵɵprojectionDef","ɵɵtemplate","MatMenu_ng_template_0_Template","NgClass","MAT_MENU_SCROLL_STRATEGY","overlay","inject","Overlay","MAT_MENU_SCROLL_STRATEGY_FACTORY","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","passiveEventListenerOptions","normalizePassiveListenerOptions","MatMenuTrigger","_MatMenuTrigger","v","menu","reason","_overlay","_element","_viewContainerRef","scrollStrategy","parentMenu","_menuItemInstance","_dir","_focusMonitor","_ngZone","Subscription","inject","ChangeDetectorRef","event","isFakeTouchstartFromScreenReader","EventEmitter","MatMenu","passiveEventListenerOptions","overlayRef","overlayConfig","positionStrategy","takeUntil","origin","options","filter","take","depth","isOpen","config","OverlayConfig","position","change","posX","posY","originX","originFallbackX","overlayY","overlayFallbackY","originY","originFallbackY","overlayX","overlayFallbackX","offsetY","firstItem","backdrop","detachments","parentClose","of","hover","active","merge","isFakeMousedownFromScreenReader","keyCode","delay","asapScheduler","TemplatePortal","t","ɵɵdirectiveInject","Overlay","ElementRef","ViewContainerRef","MAT_MENU_SCROLL_STRATEGY","MAT_MENU_PANEL","MatMenuItem","Directionality","FocusMonitor","NgZone","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","ɵɵattribute","InputFlags","MatMenuModule","_MatMenuModule","ɵɵdefineNgModule","ɵɵdefineInjector","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","CommonModule","MatRippleModule","MatCommonModule","OverlayModule","CdkScrollableModule","MAT_PROGRESS_BAR_DEFAULT_OPTIONS","InjectionToken","MatProgressBar","_MatProgressBar","_elementRef","_ngZone","_changeDetectorRef","_animationMode","defaults","EventEmitter","event","value","v","clamp","t","ɵɵdirectiveInject","ElementRef","NgZone","ChangeDetectorRef","ANIMATION_MODULE_TYPE","MAT_PROGRESS_BAR_DEFAULT_OPTIONS","ɵɵdefineComponent","rf","ctx","ɵɵattribute","ɵɵclassMap","ɵɵclassProp","InputFlags","numberAttribute","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵadvance","ɵɵstyleProp","min","max","MatProgressBarModule","_MatProgressBarModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","ClipboardModule","_ClipboardModule","t","ɵɵdefineNgModule","ɵɵdefineInjector","NodeActionComponent_ng_container_0_button_7_Template","rf","ctx","_r6","ɵɵgetCurrentView","ɵɵelementStart","ɵɵlistener","action_r4","ɵɵrestoreView","ctx_r5","ɵɵnextContext","ɵɵresetView","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","NodeActionComponent_ng_container_0_div_8_button_1_Template","_r23","action_r7","ctx_r21","ɵɵelement","NodeActionComponent_ng_container_0_div_8_button_2_Template","_r26","ctx_r24","NodeActionComponent_ng_container_0_div_8_button_3_Template","_r29","ctx_r27","NodeActionComponent_ng_container_0_div_8_button_4_Template","_r32","ctx_r30","NodeActionComponent_ng_container_0_div_8_button_5_Template","_r35","ctx_r33","NodeActionComponent_ng_container_0_div_8_button_6_Template","_r38","ctx_r36","NodeActionComponent_ng_container_0_div_8_button_7_Template","_r41","ctx_r39","NodeActionComponent_ng_container_0_div_8_button_8_Template","_r44","ctx_r42","NodeActionComponent_ng_container_0_div_8_button_9_Template","_r47","ctx_r45","NodeActionComponent_ng_container_0_div_8_button_10_Template","_r50","ctx_r48","NodeActionComponent_ng_container_0_div_8_button_11_Template","_r53","ctx_r51","NodeActionComponent_ng_container_0_div_8_button_12_Template","_r56","ctx_r54","NodeActionComponent_ng_container_0_div_8_button_13_Template","_r59","ctx_r57","NodeActionComponent_ng_container_0_div_8_Template","ɵɵtemplate","ɵɵproperty","NodeActionComponent_ng_container_0_Template","ɵɵelementContainerStart","ɵɵelementContainerEnd","_r1","ɵɵreference","ctx_r0","TreeListComponent_Conditional_8_Template","TreeListComponent_Conditional_13_Template","TreeListComponent_Conditional_14_Template","TreeListComponent_Conditional_15_Template","TreeListComponent_Conditional_16_Template","TreeListComponent_tr_18_Conditional_3_div_1_Template","node_r6","ɵɵattribute","ɵɵclassMapInterpolate1","TreeListComponent_tr_18_Conditional_3_ng_container_2_Template","_r19","ctx_r17","ɵɵclassMap","TreeListComponent_tr_18_Conditional_3_Template","TreeListComponent_tr_18_div_5_Template","_r24","ctx_r22","ɵɵtextInterpolate1","TreeListComponent_tr_18_ng_container_6_Template","_r28","ctx_r26","TreeListComponent_tr_18_Conditional_7_ng_container_1_Template","TreeListComponent_tr_18_Conditional_7_Template","TreeListComponent_tr_18_Conditional_8_ng_container_1_Template","TreeListComponent_tr_18_Conditional_8_Template","TreeListComponent_tr_18_Conditional_9_ng_container_1_Template","ɵɵpipe","ɵɵpipeBind2","TreeListComponent_tr_18_Conditional_9_Template","TreeListComponent_tr_18_Conditional_10_Template","$event","TreeListComponent_tr_18_Template","ɵɵtwoWayListener","ɵɵtwoWayBindingSet","ɵɵtwoWayProperty","ɵɵconditional","AddFolderComponent_div_11_Template","AddFolderComponent_div_12_Template","AddFolderComponent_button_14_Template","_r5","ctx_r4","FileUploadComponent_div_3_Template","_r7","ctx_r6","ctx_r8","FileUploadComponent_div_4_Template","FileUploadComponent_button_7_Template","_r10","ctx_r9","FileUploadComponent_button_9_Template","_r12","ctx_r11","FileUploadComponent_div_10_ng_container_1_Template","_r17","i_r15","ctx_r16","item_r14","FileUploadComponent_div_10_Template","FileUploadComponent_ng_container_11_ng_container_1_Template","upload_r19","FileUploadComponent_ng_container_11_Template","FilePreviousVersionsComponent_table_3_Template","_r3","displayFileDetails_r1","ctx_r2","UploadedFilesComponent_Conditional_1_ng_container_1_button_1_ng_container_3_Template","_c0","a0","UploadedFilesComponent_Conditional_1_ng_container_1_button_1_Template","_r14","crumb_r9","ctx_r13","i_r10","c_r11","ɵɵpureFunction1","UploadedFilesComponent_Conditional_1_ng_container_1_Template","ctx_r7","UploadedFilesComponent_Conditional_1_Template","UploadedFilesComponent_button_3_Template","_r16","ctx_r15","UploadedFilesComponent_button_4_Template","_r18","UploadedFilesComponent_button_5_Template","_r20","ctx_r19","ctx_r3","UploadedFilesComponent_button_6_Template","_r22","UploadedFilesComponent_ng_container_10_Template","UploadedFilesComponent_div_11_Template","NewUploadVersion","RequestService","response","AuthRequestService","_AuthRequestService","authenticatedService","baseUrl","resource","__async","data","t","ɵɵinject","AuthenticatedService","ɵɵdefineInjectable","UnauthorisedService","_UnauthorisedService","apiService","settingService","serviceBaseURL","requestUri","contentType","resolve","res","err","body","catchError","error","of","APIService","StoredSettingService","CdnProxyRequestService","_CdnProxyRequestService","unauthorisedService","FileService","_FileService","authRequestService","proxyRequestService","fileId","useProxy","proxyUser","categoryId","entityId","entityVersionId","folderId","file","proxyUpload","versionFile","versionId","params","proxyParams","paramsList","id","providerId","TreeListService","Subject","item","BlobService","_BlobService","uploadFile","options","blockBlobClient","BlobServiceClient","AnonymousCredential","e","Observable","observer","progress","rotate","compare","v1","v2","SortableHeaderDirective","_SortableHeaderDirective","EventEmitter","ɵɵdefineDirective","rf","ctx","ɵɵlistener","ɵɵclassProp","DownloadModel","FilePathModel","FolderDownloadService","_FolderDownloadService","loading","httpClient","fileService","loadingService","BehaviorSubject","parentFolderName","uploadSummary","uploadSummary$","flatStructure$","fileDownloadDetails$","downloadArray$","mergeMap","value","from","map","b","file1","toArray","files","d","subscriber","val","v","filepath","filePathModel","expand","x","EMPTY","y","model","distinct","downloadFile","concatMap","summary","filename","lastDotIndex","fileExtension","node","zipName","arr","downloadModel","fileStream","content","A","writer","reader","pump","HttpClient","LoadingService","NodeActionComponent","_NodeActionComponent","action","ɵɵdefineComponent","ɵɵtemplate","NodeActionComponent_ng_container_0_Template","ɵɵproperty","NgForOf","NgIf","MatMenu","MatMenuItem","MatMenuTrigger","TreeListPipe","_TreeListPipe","values","filter","ɵɵdefinePipe","TreeListComponent","_TreeListComponent","treeListService","folderDownloadService","index","selectedFileIds","column","direction","header","a","ɵɵdirectiveInject","ɵɵviewQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵNgOnChangesFeature","ɵɵelementStart","ɵɵtwoWayListener","$event","ɵɵtwoWayBindingSet","ɵɵelementEnd","ɵɵtext","TreeListComponent_Conditional_8_Template","ɵɵelement","TreeListComponent_Conditional_13_Template","TreeListComponent_Conditional_14_Template","TreeListComponent_Conditional_15_Template","TreeListComponent_Conditional_16_Template","TreeListComponent_tr_18_Template","ɵɵpipe","ɵɵadvance","ɵɵtwoWayProperty","ɵɵconditional","ɵɵclassMap","ɵɵpipeBind2","CheckboxControlValueAccessor","NgControlStatus","NgModel","DatePipe","NewUpload","AddFolderComponent","_AddFolderComponent","fileService","data","dialogRef","EventEmitter","__async","upload","t","ɵɵdirectiveInject","FileService","MAT_DIALOG_DATA","MatDialogRef","ɵɵdefineComponent","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵtwoWayListener","$event","ɵɵtwoWayBindingSet","ɵɵtemplate","AddFolderComponent_div_11_Template","AddFolderComponent_div_12_Template","AddFolderComponent_button_14_Template","ɵɵlistener","ɵɵelement","_r0","ɵɵreference","ɵɵadvance","ɵɵtwoWayProperty","ɵɵproperty","NgIf","ɵNgNoValidate","DefaultValueAccessor","NgControlStatus","NgControlStatusGroup","RequiredValidator","NgModel","NgForm","MatDialogTitle","MatDialogActions","MatDialogContent","FileUploadService","_FileUploadService","blobService","fileToUpload","linkId","categoryId","useProxy","proxyUserId","id","e","fileId","NewUploadVersion","ɵɵinject","BlobService","ɵɵdefineInjectable","FileDragAndDropDirective","_FileDragAndDropDirective","event","valid_files","ɵɵdefineDirective","ɵɵstyleProp","FileUploadComponent","_FileUploadComponent","fileUploadService","filesNames","i","index","uploadTasks","subscriptions","item","result","subscription","progress","percent","x","error","y","err","FileUploadComponent_div_3_Template","FileUploadComponent_div_4_Template","FileUploadComponent_button_7_Template","FileUploadComponent_button_9_Template","FileUploadComponent_div_10_Template","FileUploadComponent_ng_container_11_Template","NgForOf","MatProgressBar","FilePreviousVersionsComponent","_FilePreviousVersionsComponent","userService","dateTimeService","loadingService","fileVersions","fileVersion","_uploadedBy","url","link","UserService","DateTimeService","LoadingService","FilePreviousVersionsComponent_table_3_Template","DatePipe","YesNoDialogComponent","_YesNoDialogComponent","router","Router","ɵɵsanitizeHtml","UploadedFilesComponent","_UploadedFilesComponent","treeListService","dialog","folderDownloadService","action","of","val","parentId","node","from","files","fileLinkId","fileCategoryId","folderLinkId","value","folderId","switchMap","info","fileInfo","ex","fileStream","writer","reader","pump","res","name","fileIdList","zipFileName","answer","children","entity","actions","o","f","fileType","expand","EMPTY","map","toArray","summary","TreeListService","MatDialog","FolderDownloadService","ɵɵProvidersFeature","ɵɵNgOnChangesFeature","UploadedFilesComponent_Conditional_1_Template","UploadedFilesComponent_button_3_Template","UploadedFilesComponent_button_4_Template","UploadedFilesComponent_button_5_Template","UploadedFilesComponent_button_6_Template","UploadedFilesComponent_ng_container_10_Template","UploadedFilesComponent_div_11_Template","ɵɵconditional","NgClass","MatProgressSpinner","TreeListComponent","_a","PageAccessResolver$1","route","state","of","t","ɵɵdefineInjectable","SharedModule","_SharedModule","t","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","FormsModule","AngularHighfieldauthModule","AngularHighfieldlayoutModule","MatDialogModule","MatMenuModule","MatProgressBarModule","HttpClientModule","ClipboardModule","MatProgressSpinnerModule","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵlistener","ɵɵrestoreView","_r4","ctx_r3","ɵɵnextContext","ɵɵresetView","markAsAnswered","ɵɵadvance","ɵɵproperty","ctx_r0","answer","id","coreExamCDNCategoryId","shouldUseProxy","coreExamsUserId","fileUploadConfig","DocumentUploadComponent","constructor","isPreview","isMock","showCreateFolderButton","showDownloadButton","showAddFileButton","showDeleteButton","showActionColumn","showTypeColumn","showUploadedByColumn","showUploadedDateColumn","showVersionColumn","showBreadCrumbs","hasInteracted","ɵɵdirectiveInject","selectors","inputs","decls","vars","consts","template","rf","ctx","ɵɵtemplate","DocumentUploadComponent_div_1_Template","DocumentUploadComponent_div_2_Template","DocumentUploadComponent_div_3_Template","_DocumentUploadComponent","FormBuilderElementTypeIdentifier","FormBuilderElementInputTypeIdentifier","ɵɵelement","ɵɵproperty","formItem_r1","label","ɵɵsanitizeHtml","ɵɵelementStart","ɵɵtwoWayListener","$event","ɵɵrestoreView","_r18","ɵɵnextContext","$implicit","i0","ɵɵtwoWayBindingSet","userInput","ɵɵresetView","ɵɵelementEnd","ɵɵtwoWayProperty","_r22","ɵɵattribute","min","max","_r26","ɵɵlistener","_r30","i_r2","index","ctx_r28","onCheckboxChange","ɵɵadvance","_r34","ɵɵtemplate","FormComponent_mat_grid_tile_4_Case_2_label_0_Template","FormComponent_mat_grid_tile_4_Case_2_Case_1_Template","FormComponent_mat_grid_tile_4_Case_2_Case_2_Template","FormComponent_mat_grid_tile_4_Case_2_Case_3_Template","FormComponent_mat_grid_tile_4_Case_2_Case_4_Template","FormComponent_mat_grid_tile_4_Case_2_Case_5_Template","formBuilderInputTypeNumericalIdentifier","ctx_r3","FormBuilderElementInputTypeIdentifier","Checkbox","ɵɵconditional","FormComponent_mat_grid_tile_4_Case_2_contFlowTmp","Text","Number","Date","TextArea","opt_r38","value","_r41","FormComponent_mat_grid_tile_4_Case_3_option_3_Template","selectInputItems","ɵɵtext","FormComponent_mat_grid_tile_4_Case_2_Template","FormComponent_mat_grid_tile_4_Case_3_Template","FormComponent_mat_grid_tile_4_Case_4_Template","FormComponent_mat_grid_tile_4_Case_5_Template","FormComponent_mat_grid_tile_4_Case_6_Template","FormComponent_mat_grid_tile_4_Case_7_Template","colWidth","rowHeight","FormComponent_mat_grid_tile_4_contFlowTmp","formBuilderElementTypeNumericalIdentifier","ctx_r0","FormBuilderElementTypeIdentifier","Input","Select","Image","LineBreak","Heading","Paragraph","FormComponent","constructor","ngOnInit","answer","formItems","setupFormItems","sort","a","b","forEach","item","defaultValue","checkedByDefault","stringValue","formatDate","checked","selectors","inputs","decls","vars","consts","template","rf","ctx","FormComponent_mat_grid_tile_4_Template","_FormComponent","ToolModule","FormsModule","CommonModule","MaterialModule","QuillModule","forRoot","modules","toolbar","customOptions","import","whitelist","CDNSharedModule","_ToolModule","environment","transitionTimerDelayMs","environment","isMobile","isIOS","isAndroid","FOCUSABLE_ELEMENTS_SELECTOR","GREGORIAN_FIRST_DATE","GREGORIAN_LAST_DATE","ONE_DAY","PARTS_PER_HOUR","PARTS_PER_DAY","PARTS_FRACTIONAL_MONTH","PARTS_PER_MONTH","BAHARAD","NgbPopoverModule","_NgbPopoverModule","t","ɵɵdefineNgModule","ɵɵdefineInjector","ARIA_LIVE_DELAY","InjectionToken","ExamRoutes","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r7","ctx_r6","ɵɵnextContext","ɵɵresetView","invokePrevious","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ctx_r0","currentQuestionIndex","ɵɵadvance","ɵɵtextInterpolate1","previousButtonLabel","_r12","ctx_r11","toggleTool","ExamToolIdentifier","Protractor","ɵɵelement","_r14","ctx_r13","Ruler","_r16","ctx_r15","flagCurrentQuestion","ctx_r10","questionIsFlagged","ɵɵtwoWayListener","$event","_r18","ctx_r17","i0","ɵɵtwoWayBindingSet","selectedActions","ɵɵtemplate","MockExamFooterComponent_Conditional_3_Conditional_1_Template","MockExamFooterComponent_Conditional_3_Conditional_2_Template","MockExamFooterComponent_Conditional_3_Conditional_3_Template","ɵɵtwoWayProperty","ctx_r1","ɵɵconditional","examType","enableFlagBtn","_r20","ctx_r19","invokeNext","ɵɵpureFunction1","_c0","ctx_r2","enablePreviousButton","nextButtonLabel","_r22","ctx_r21","leaveExam","ctx_r3","_r24","ctx_r23","updateProtractorSizeRatio","ctx_r25","sizeRatio","ctx_r4","_r27","ctx_r26","performBackNavigation","ExamRoutes","Home","ctx_r28","MocksHome","MockExamFooterComponent","constructor","examNavigationService","errorService","dialogService","keyValueDataService","toolService","protractorService","matIconRegistry","domSanitizer","router","enableErrorBtn","isExam","enableNextButton","isMathsExam","previousButtonAction","EventEmitter","nextButtonAction","endExamAction","isLastQuestion","showProtractorSlider","flaggedQuestions","addSvgIcon","bypassSecurityTrustResourceUrl","ngOnInit","forkJoin","lastQuestionIndex","getLastQuestionIndex","currentQuestion","getCurrentQuestion","getFlaggedQuestionNumbers","subscribe","data","handleChanges","currentQuestionChange$","pipe","first","getExamType","flaggedQuestionsChange$","flaggedNumbers","currentToolChange$","val","showHideProtractorSlider","type","enabled","question","orderIndex","indexOf","showHideTool","showThemesModal","showThemeSelectionModal","emit","confirm","route","navigateByUrl","newSizeRatio","value","ɵɵdirectiveInject","MockExamNavigationService","ErrorService","DialogService","KeyValueDataService","ExamToolsService","ProtractorService","MatIconRegistry","DomSanitizer","Router","selectors","inputs","text","outputs","decls","vars","consts","template","rf","ctx","MockExamFooterComponent_Conditional_2_Template","MockExamFooterComponent_Conditional_3_Template","MockExamFooterComponent_Conditional_4_Template","MockExamFooterComponent_Conditional_5_Template","MockExamFooterComponent_Conditional_6_Template","MockExamFooterComponent_Conditional_7_Template","_MockExamFooterComponent","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r2","ctx_r1","ɵɵnextContext","ɵɵresetView","scrollToTop","ɵɵtext","ɵɵelementEnd","ScrollToComponent","constructor","pageYoffset","ngOnInit","document","getElementById","addEventListener","e","onScroll","ngOnDestroy","removeEventListener","event","scrollTop","scrollTo","left","top","behavior","selectors","decls","vars","consts","template","rf","ctx","ɵɵtemplate","ScrollToComponent_Conditional_1_Template","ɵɵadvance","ɵɵconditional","_ScrollToComponent","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ctx_r1","calculateProgress","MockProgressBarComponent","constructor","examNavigationService","questionAnswerDataService","candidateQuestionDataService","progressService","totalMarks","attemptedMarks","attemptedQuestionIds","complete","sections","ngOnInit","getQuestionSectionsWithCandidateQuestions","pipe","first","map","qsq","x","questionStates","qs","ArrayHelperService","flatten","question","potentialScore","scores","reduce","a","b","mergeMap","updateProgress","subscribe","currentQuestionChangeSub","currentQuestionChange$","percentage","isComplete","toFixed","getAllAnswers","val","of","filter","answer","answered","getQuestionsById","candidateQuestionId","forEach","includes","id","push","ɵɵdirectiveInject","MockExamNavigationService","QuestionAnswerDataService","CandidateQuestionDataService","ProgressService","selectors","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵtemplate","MockProgressBarComponent_Conditional_6_Template","MockProgressBarComponent_Conditional_7_Template","ɵɵstyleProp","ɵɵconditional","_MockProgressBarComponent","ɵɵelementStart","ɵɵlistener","$event","ɵɵrestoreView","_r5","ctx_r4","ɵɵnextContext","ɵɵresetView","timerRedirect","ɵɵelementEnd","ɵɵtext","ɵɵadvance","ɵɵtextInterpolate","ctx_r1","learnerName","ɵɵtemplate","MockExamHeaderComponent_Conditional_6_Conditional_1_Template","ɵɵconditional","ctx_r2","isExam","text","ɵɵelement","MockExamHeaderComponent","constructor","connectionService","dialogService","keyValueDataService","enableTimer","showConnectionIndicator","showProgressBar","timerAction","EventEmitter","ngOnInit","getLearnerName","subscribe","isOnline","isOffline","showThemesModal","showThemeSelectionModal","url","emit","ɵɵdirectiveInject","ConnectionService","DialogService","KeyValueDataService","selectors","inputs","scheduledFinish","outputs","decls","vars","consts","template","rf","ctx","MockExamHeaderComponent_Conditional_2_Template","MockExamHeaderComponent_Conditional_4_Template","MockExamHeaderComponent_Conditional_6_Template","MockExamHeaderComponent_Conditional_8_Template","_MockExamHeaderComponent","LayoutModule","CommonModule","MaterialModule","NgbPopoverModule","ToolModule","FormsModule","_LayoutModule"],"x_google_ignoreList":[0,1,2,3,4,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,200]}