@bitblit/ratchet-aws 4.0.207-alpha → 4.0.209-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/batch/aws-batch-background-processor.ts","../src/batch/aws-batch-ratchet.ts","../src/build/ratchet-aws-info.ts","../src/cache/dynamo-db-storage-provider.ts","../src/cache/s3-storage-provider.ts","../src/cache/simple-cache.ts","../src/cloudwatch/cloud-watch-log-group-ratchet.ts","../src/cloudwatch/cloud-watch-logs-ratchet.ts","../src/model/cloud-watch-metrics-unit.ts","../src/cloudwatch/cloud-watch-metrics-ratchet.ts","../src/daemon/daemon-util.ts","../src/s3/s3-cache-ratchet.ts","../src/daemon/daemon.ts","../src/dao/prototype-dao.ts","../src/dao/s3-prototype-dao-provider.ts","../src/dao/s3-simple-dao.ts","../src/dynamodb/dynamo-ratchet.ts","../src/dynamodb/dynamo-table-ratchet.ts","../src/dynamodb/hash-spreader.ts","../src/ec2/ec2-ratchet.ts","../src/environment/cascade-environment-service-provider.ts","../src/environment/env-var-environment-service-provider.ts","../src/environment/environment-service.ts","../src/environment/fixed-environment-service-provider.ts","../src/environment/s3-environment-service-provider.ts","../src/environment/ssm-environment-service-provider.ts","../src/expiring-code/dynamo-expiring-code-provider.ts","../src/expiring-code/expiring-code-ratchet.ts","../src/expiring-code/s3-expiring-code-provider.ts","../src/iam/aws-credentials-ratchet.ts","../src/lambda/lambda-event-detector.ts","../src/lambda/lambda-event-type-guards.ts","../src/route53/route-53-ratchet.ts","../src/runtime-parameter/dynamo-runtime-parameter-provider.ts","../src/runtime-parameter/global-variable-override-runtime-parameter-provider.ts","../src/runtime-parameter/memory-runtime-parameter-provider.ts","../src/runtime-parameter/runtime-parameter-ratchet.ts","../src/s3/s3-location-sync-ratchet.ts","../src/s3/s3-ratchet.ts","../src/ses/mailer.ts","../src/sns/sns-ratchet.ts","../src/sync-lock/dynamo-db-sync-lock.ts","../src/sync-lock/memory-sync-lock.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["AwsBatchBackgroundProcessor","batchRatchet","validTaskNames","constructor","this","RequireRatchet","notNullOrUndefined","batchClient","defaultJobDefinition","defaultQueueName","async","taskName","data","meta","length","StringRatchet","trimToNull","includes","ErrorRatchet","throwFormattedErr","Logger","info","rval","jobName","DateTime","utc","toFormat","options","jobDefinition","jobQueue","parameters","taskData","JSON","stringify","taskMetadata","scheduleJob","jobId","err","error","AwsBatchRatchet","_batchClient","_defaultQueueName","_defaultJobDefinition","send","SubmitJobCommand","jobStatus","queueName","listJobs","request","nextToken","tmp","ListJobsCommand","concat","jobSummaryList","RatchetAwsInfo","static","version","hash","branch","tag","timeBuiltISO","notes","DynamoDbStorageProvider","dynamo","opts","tableName","hashKeyName","true","useRangeKeys","rangeKeyName","hashKeyValue","createKeyObject","cacheKey","keys","cleanDynamoFieldsFromObjectInPlace","dynamoExpiresColumnName","extractKeysFromObject","dKey","simpleGet","value","toSave","Object","assign","expiresEpochMS","Math","floor","simplePut","simpleDelete","allKeys","readAll","map","a","deleteAllInBatches","qry","TableName","KeyConditionExpression","ExpressionAttributeNames","ExpressionAttributeValues","fullyExecuteQuery","scan","fullyExecuteScan","forEach","r","S3StorageProvider","s3CacheRatchet","prefix","getDefaultBucket","keyToPath","trimToEmpty","endsWith","fetchCacheFileAsObject","writeObjectToCacheFile","removeCacheFile","directChildrenOfPrefix","Promise","all","k","removeFromCache","readFromCache","SimpleCache","provider","defaultTimeToLiveMS","createDefaultReadOptions","maxStalenessMS","timeToLiveMS","cacheNullValues","producer","silly","now","Date","getTime","debug","createdEpochMS","generated","storeInCache","wrapper","fetchWrapper","returnOldValue","clearCache","CloudWatchLogGroupRatchet","logGroup","awsCWLogs","CloudWatchLogsClient","region","cloudWatchLogsClient","startTimestamp","endTimestamp","params","logGroupName","orderBy","temp","DescribeLogStreamsCommand","logStreams","s","lastEventTimestamp","firstEventTimestamp","push","readLogStreams","logStreamName","filter","sortEvents","maxEvents","sw","StopWatch","endTime","startTime","filterPattern","dump","FilterLogEventsCommand","events","sort","b","timestamp","message","localeCompare","log","CloudWatchLogsRatchet","cwLogs","cloudwatchLogs","maxToRemove","oldestEventEpochMS","streamSearchParams","oldestEventTester","totalStreams","removedStreams","failedRemovedStreams","waitPerDescribe","streams","i","st","oldWait","min","waitPer","delParams","type","storedBytes","removed","retry","MAX_DELETE_RETRIES","DeleteLogStreamCommand","PromiseRatchet","wait","warn","stream","findStreamWithOldestEventInGroup","logGroupNamePrefix","res","DescribeLogGroupsCommand","logGroups","groups","req","DeleteLogGroupCommand","findLogGroups","removeLogGroups","sqr","resp","StartQueryCommand","delayMS","status","GetQueryResultsCommand","queryId","StopQueryCommand","CloudWatchMetricsUnit","CloudWatchMetricsRatchet","cw","cloudWatch","CloudWatchClient","apiVersion","cloudWatchClient","namespace","metric","dims","unit","None","timestampDate","highResolution","cwDims","d","Name","key","Value","storageResolution","metricData","Namespace","MetricData","MetricName","Dimensions","Unit","String","Timestamp","StorageResolution","result","PutMetricDataCommand","minuteUTC","query","Error","cnt","dynamoRatchet","fullyExecuteQueryCount","fullyExecuteScanCount","parseDateString","split","join","parseDate","fromISO","toJSDate","metricRes","writeSingleMetric","Count","count","DaemonUtil","Buffer","from","cache","id","s3Key","newState","title","lastUpdatedEpochMS","lastUpdatedMessage","targetFileName","startedEpochMS","completedEpochMS","link","contentType","writeState","DEFAULT_CONTENT","contents","s3meta","DAEMON_METADATA_KEY","Bucket","Key","ContentType","Metadata","Body","Blob","ContentDisposition","written","getS3Client","PutObjectCommand","stat","inStat","updateMessage","overrideTargetFileName","upload","Upload","client","tags","queueSize","partSize","leavePartsOnError","on","progress","done","newMessage","s3Cache","path","fetchMetaForCacheFile","metaString","parse","preSignedDownloadUrlForCacheFile","S3CacheRatchet","s3","defaultBucket","s3Client","input","seconds","CacheControl","bucket","bucketVal","GetObjectCommand","NoSuchKey","fetchCacheFileAsS3GetObjectCommandOutput","transformToWebStream","out","transformToByteArray","transformToString","fetchCacheFileAsString","DeleteObjectCommand","dataObject","template","json","writeStringToCacheFile","dataString","StreamRatchet","stringToWebReadableStream","writeStreamToCacheFile","srcPrefix","targetPrefix","targetRatchet","recurseSubFolders","sourceFiles","targetFiles","sourceFile","dumpExpected","subs","synchronize","shouldCopy","srcMeta","targetMeta","ETag","srcStream","fetchCacheFileAsReadableStream","undefined","HeadObjectCommand","LastModified","srcKey","dstKey","srcBucket","dstBucket","CopySource","MetadataDirective","CopyObjectCommand","copyFile","expirationSeconds","getCommand","getSignedUrl","expiresIn","expandFiles","maxToReturn","returnValue","Prefix","Delimiter","response","ListObjectsCommand","prefixLength","cp","substring","expanded","name","size","Marker","NextMarker","idx","next","ContinuationToken","NextContinuationToken","CommonPrefixes","p","explicitBucket","Daemon","_defaultGroup","jwtRatchet","DEFAULT_DEFAULT_GROUP","defaultGroup","token","daemonKey","createTokenString","toString","pathToKey","generatePath","group","generatePrefix","createType4Guid","start","olderThanSeconds","original","list","test","proms","listKeys","itemPath","publicToken","parsed","decodeToken","abort","finalize","PrototypeDao","cfg","guidCreateFunction","guidFieldName","createdEpochMSFieldName","updatedEpochMSFieldName","createdUtcTimestampFieldName","updatedUtcTimestampFieldName","defaultDaoConfig","loadDatabase","items","storeDatabase","lastModifiedEpochMS","guids","old","fetchAll","t","toISO","guid","find","fieldDotPath","fieldValue","searchByFieldMap","matchAll","val","MapRatchet","findValueDotPath","S3PrototypeDaoProvider","keyName","notNullUndefinedOrOnlyWhitespaceString","inDb","S3SimpleDao","buildPathPrefix","buildFullPath","fullPath","fileExists","item","fetch","promises","listItems","DynamoRatchet","awsDDB","dynamoDBDocumentClient","getDDB","Limit","throughputSafeScanOrQuery","o","scanPromise","Items","ScanCommand","QueryCommand","proc","maxTries","inCurrentTry","currentTry","objectIsErrorWithProvisionedThroughputExceededExceptionCode","pow","Select","scannedCount","pages","qryResults","myLimit","queryPromise","LastEvaluatedKey","end","DurationRatchet","formatMsDuration","softLimit","fullyExecuteProcessOverQuery","v","blankPages","fullyExecuteProcessOverScan","elements","batchSize","batchItems","el","PutRequest","Item","ReturnConsumedCapacity","curBatch","slice","RequestItems","ReturnItemCollectionMetrics","tryCount","batchResults","BatchWriteCommand","UnprocessedItems","backoff","keyNames","keyDataSrc","keysOnly","stripAllToKeysOnly","fetchAllInBatches","inKeys","batches","remain","tableEntry","Keys","nextBatch","BatchGetCommand","Responses","UnprocessedKeys","DeleteRequest","autoRetryCount","PutCommand","fieldName","ConditionExpression","wrote","simplePutOnlyIfFieldIsNullOrUndefined","adjustFunction","maxAdjusts","pio","attrNames","attrValues","condExp","adjustCount","newValue","holder","GetCommand","counterAttributeName","deleteOnZero","UpdateExpression","ReturnValues","updateFailed","UpdateItemCommand","Attributes","DeleteCommand","counterFieldName","increment","update","ui","NumberRatchet","safeNumber","ob","rem","cleanObject","keysNames","stripToKeysOnly","DynamoTableRatchet","waitForDelete","DeleteTableCommand","waitForTableDelete","waitForReady","replaceIfExists","tableExists","deleteTable","CreateTableCommand","waitForTableReady","safeDescribeTable","Table","TableStatus","ListTablesCommand","TableNames","ExclusiveStartTableName","LastEvaluatedTableName","DescribeTableCommand","ResourceNotFoundException","srcTableName","dstTableName","overrides","copyData","fErr","srcTableDef","AttributeDefinitions","KeySchema","GlobalSecondaryIndexes","createInput","LocalSecondaryIndexes","gi","output","ProvisionedThroughput","WriteCapacityUnits","ReadCapacityUnits","BillingMode","BillingModeSummary","StreamSpecification","SSESpecification","SSEDescription","Tags","TableClass","TableClassSummary","DeletionProtectionEnabled","HashSpreader","spots","buckets","separator","alphabet","_allSlots","allUnique","stringContainsOnlyAlphanumeric","permutations","allPerms","allPermutationsOfLength","allBuckets","randomBucket","random","allSpreadValues","allSpreadValuesForArray","inputs","addSpreader","extractBucket","loc","charAt","removeBucket","Ec2Ratchet","availabilityZone","ec2","ec2InstanceConnect","EC2Client","EC2InstanceConnectClient","eC2Client","eC2InstanceConnectClient","instanceId","maxWaitForShutdownMS","stopParams","InstanceIds","DryRun","StopInstancesCommand","describeInstance","State","Code","maxWaitForStartupMS","startParams","StartInstancesCommand","PublicIpAddress","listAllInstances","instanceIds","NextToken","DescribeInstancesCommand","Reservations","Instances","publicKeyString","instanceOsUser","userName","InstanceId","AvailabilityZone","InstanceOSUser","SSHPublicKey","SendSSHPublicKeyCommand","CascadeEnvironmentServiceProvider","providers","fetchConfig","EnvVarEnvironmentServiceProvider","envVarName","src","process","env","global","toParse","EnvironmentService","readPromiseCache","Map","maxRetries","backoffMultiplierMS","defaultEnvironmentServiceConfig","has","set","getConfigUncached","get","waitMS","FixedEnvironmentServiceProvider","record","m","S3EnvironmentServiceProvider","ratchet","bucketName","s3Override","S3Client","readPath","pathPrefix","pathSuffix","SsmEnvironmentServiceProvider","ssmEncrypted","ssm","SSMClient","WithDecryption","GetParameterCommand","Parameter","errCode","toLowerCase","indexOf","errMsg","DynamoExpiringCodeProvider","code","context","deleteOnMatch","expCode","ConsumedCapacity","CapacityUnits","dtr","ExpiringCodeRatchet","timeToLiveSeconds","generateCode","storeCode","checkCode","S3ExpiringCodeProvider","vals","fetchFile","toUpperCase","newData","updateFile","AwsCredentialsRatchet","newProfile","LambdaEventDetector","event","source","resources","Records","EventSource","eventSource","rawPath","requestContext","routeKey","httpMethod","authorizationToken","methodArn","isValidCronEvent","isSingleEntryEvent","isValidSnsEvent","isValidDynamoDBEvent","isValidS3Event","entryName","Array","LambdaEventTypeGuards","isValidApiGatewayV2WithRequestContextEvent","isValidApiGatewayEvent","isValidApiGatewayAuthorizerEvent","Route53Ratchet","route53","hostedZoneId","route53Client","domainName","target","ttlSeconds","ChangeBatch","Changes","Action","ResourceRecordSet","ResourceRecords","TTL","Type","HostedZoneId","ChangeResourceRecordSetsCommand","waitParams","Id","ChangeInfo","waitResult","waitUntilResourceRecordSetsChanged","maxWaitTime","state","WaiterState","SUCCESS","DynamoRuntimeParameterProvider","groupId","paramKey","toStore","GlobalVariableOverrideRuntimeParameterProvider","wrapped","globalTTL","suffix","generateName","asString","canParseAsJson","paramValue","readParameter","readAllParametersForGroup","writeParameter","MemoryRuntimeParameterProvider","resolve","startsWith","RuntimeParameterRatchet","defaultValue","forceFreshRead","cached","toCacheStoreKey","oldest","storedEpochMS","readUnderlyingEntry","addToCache","readUnderlyingEntries","S3LocationSyncRatchet","config","maxNumThreads","updateSrcPrefix","updateDstPrefix","dstPrefix","express","replace","completedCopying","retries","encodeURIComponent","dstS3","fetched","srcS3","ContentLength","more","ListObjectsV2Command","IsTruncated","Contents","obj","Size","copyObject","cmpResult","compareSrcAndDst","needCopy","diff","runBoundedParallelSingleParam","getSrc","listObjects","getDst","srcObjs","dstObjs","existed","sObj","dObj","hasOwnProperty","S3Ratchet","trim","checkS3UrlForValidity","idx1","Mailer","ses","RegExp","archive","sESClient","rts","htmlTemplateName","txtTemplateName","layoutName","partialNames","templateRenderer","htmlMessage","renderTemplate","txtMessage","newVal","fillEmailBody","sendEmail","filterEmailsToValid","emails","e","allowedDestinationEmails","doNotArchive","destinationAddresses","targetPath","archivePrefix","applyLimitsToBodySizesIfAnyInPlace","maxMessageBodySizeInBytes","totalSize","attachments","txtAttach","filename","base64Data","Base64Ratchet","generateBase64VersionOfString","htmlAttach","applyLimitsToAttachmentSizesIfAnyInPlace","maxAttachmentSizeInBase64Bytes","filtered","createRandomHexString","inRts","toAddresses","autoBcc","doNotAutoBcc","autoBccAddresses","bccAddresses","srcDestinationAddresses","srcBccAddresses","archiveEmailIfConfigured","toLine","bccLine","fromAddress","defaultSendingAddress","boundary","altBoundary","rawMail","subject","RawMessage","Data","TextEncoder","encode","SendRawEmailCommand","email","EMAIL","SnsRatchet","sns","topicArn","SNSClient","snsClient","inMsg","suppressErrors","safeInMsg","msg","TopicArn","Message","PublishCommand","condition","sendMessage","DynamoDbSyncLock","lockKey","nowSeconds","lockingKey","expires","PutItemCommand","dio","FilterExpression","MemorySyncLock","_locks","delete","toRemove"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/batch/aws-batch-background-processor.ts","../src/batch/aws-batch-ratchet.ts","../src/build/ratchet-aws-info.ts","../src/cache/dynamo-db-storage-provider.ts","../src/cache/s3-storage-provider.ts","../src/cache/simple-cache.ts","../src/cloudwatch/cloud-watch-log-group-ratchet.ts","../src/cloudwatch/cloud-watch-logs-ratchet.ts","../src/model/cloud-watch-metrics-unit.ts","../src/cloudwatch/cloud-watch-metrics-ratchet.ts","../src/daemon/daemon-util.ts","../src/s3/s3-cache-ratchet.ts","../src/daemon/daemon.ts","../src/dao/prototype-dao.ts","../src/dao/s3-prototype-dao-provider.ts","../src/dao/s3-simple-dao.ts","../src/dynamodb/dynamo-ratchet.ts","../src/dynamodb/dynamo-table-ratchet.ts","../src/dynamodb/hash-spreader.ts","../src/ec2/ec2-ratchet.ts","../src/environment/cascade-environment-service-provider.ts","../src/environment/env-var-environment-service-provider.ts","../src/environment/environment-service.ts","../src/environment/fixed-environment-service-provider.ts","../src/environment/s3-environment-service-provider.ts","../src/environment/ssm-environment-service-provider.ts","../src/expiring-code/dynamo-expiring-code-provider.ts","../src/expiring-code/expiring-code-ratchet.ts","../src/expiring-code/s3-expiring-code-provider.ts","../src/iam/aws-credentials-ratchet.ts","../src/lambda/lambda-event-detector.ts","../src/lambda/lambda-event-type-guards.ts","../src/route53/route-53-ratchet.ts","../src/runtime-parameter/dynamo-runtime-parameter-provider.ts","../src/runtime-parameter/global-variable-override-runtime-parameter-provider.ts","../src/runtime-parameter/memory-runtime-parameter-provider.ts","../src/runtime-parameter/runtime-parameter-ratchet.ts","../src/s3/s3-location-sync-ratchet.ts","../src/s3/s3-ratchet.ts","../src/ses/mailer.ts","../src/sns/sns-ratchet.ts","../src/sync-lock/dynamo-db-sync-lock.ts","../src/sync-lock/memory-sync-lock.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nimport { ErrorRatchet, Logger, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class AwsBatchBackgroundProcessor {\n batchRatchet;\n validTaskNames;\n constructor(batchRatchet, validTaskNames) {\n this.batchRatchet = batchRatchet;\n this.validTaskNames = validTaskNames;\n RequireRatchet.notNullOrUndefined(this.batchRatchet, 'batchRatchet');\n RequireRatchet.notNullOrUndefined(this.batchRatchet.batchClient, 'batchRatchet.batchClient');\n RequireRatchet.notNullOrUndefined(this.batchRatchet.defaultJobDefinition, 'batchRatchet.defaultJobDefinition');\n RequireRatchet.notNullOrUndefined(this.batchRatchet.defaultQueueName, 'batchRatchet.defaultQueueName');\n }\n async scheduleBackgroundTask(taskName, data = {}, meta = {}) {\n if (this.validTaskNames &&\n this.validTaskNames.length &&\n (!StringRatchet.trimToNull(taskName) || !this.validTaskNames.includes(taskName))) {\n ErrorRatchet.throwFormattedErr('Cannot start task %s - not found in valid task list', taskName);\n }\n Logger.info('Submitting background task to AWS batch: %s %j %s', taskName, data, this.batchRatchet.defaultQueueName);\n let rval = null;\n const jobName = `${this.batchRatchet.defaultJobDefinition}-${taskName}_${DateTime.utc().toFormat('yyyy-MM-dd-HH-mm')}`;\n const options = {\n jobName: jobName,\n jobDefinition: this.batchRatchet.defaultJobDefinition,\n jobQueue: this.batchRatchet.defaultQueueName,\n parameters: {\n taskName,\n taskData: JSON.stringify(data),\n taskMetadata: JSON.stringify(meta),\n },\n };\n try {\n rval = await this.batchRatchet.scheduleJob(options);\n Logger.info('Job %s(%s) submitted', rval.jobName, rval.jobId);\n }\n catch (err) {\n Logger.error('Cannot submit batch job taskName: %s jobDef: %s queue: %s jobName: %s data: %j', taskName, this.batchRatchet.defaultJobDefinition, this.batchRatchet.defaultQueueName, jobName, data, err);\n }\n return rval;\n }\n}\n//# sourceMappingURL=aws-batch-background-processor.js.map","import { ListJobsCommand, SubmitJobCommand, } from '@aws-sdk/client-batch';\nimport { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class AwsBatchRatchet {\n _batchClient;\n _defaultQueueName;\n _defaultJobDefinition;\n constructor(_batchClient, _defaultQueueName, _defaultJobDefinition) {\n this._batchClient = _batchClient;\n this._defaultQueueName = _defaultQueueName;\n this._defaultJobDefinition = _defaultJobDefinition;\n }\n get batchClient() {\n return this._batchClient;\n }\n get defaultQueueName() {\n return this._defaultQueueName;\n }\n get defaultJobDefinition() {\n return this._defaultJobDefinition;\n }\n async scheduleJob(options) {\n Logger.info('Submitting batch job %s', options.jobName);\n try {\n const rval = await this._batchClient.send(new SubmitJobCommand(options));\n Logger.info('Job %s(%s) submitted', rval.jobName, rval.jobId);\n return rval;\n }\n catch (err) {\n Logger.error('Cannot submit batch job %s: %s', options.jobName, err);\n }\n return null;\n }\n async jobCountInState(jobStatus, queueName = this.defaultQueueName) {\n const all = await this.listJobs(queueName, jobStatus);\n return all.length;\n }\n async listJobs(queueName = this.defaultQueueName, jobStatus = null) {\n RequireRatchet.notNullOrUndefined(queueName, 'queueName');\n let rval = [];\n const request = {\n jobQueue: queueName,\n jobStatus: jobStatus,\n nextToken: null,\n };\n Logger.info('Fetching %j', request);\n do {\n Logger.info('Pulling page...');\n const tmp = await this._batchClient.send(new ListJobsCommand(request));\n rval = rval.concat(tmp.jobSummaryList);\n request.nextToken = tmp.nextToken;\n } while (request.nextToken);\n return rval;\n }\n}\n//# sourceMappingURL=aws-batch-ratchet.js.map","export class RatchetAwsInfo {\n constructor() { }\n static buildInformation() {\n const val = {\n version: 'LOCAL-SNAPSHOT',\n hash: 'LOCAL-HASH',\n branch: 'LOCAL-BRANCH',\n tag: 'LOCAL-TAG',\n timeBuiltISO: 'LOCAL-TIME-ISO',\n notes: 'LOCAL-NOTES',\n };\n return val;\n }\n}\n//# sourceMappingURL=ratchet-aws-info.js.map","import { RequireRatchet } from '@bitblit/ratchet-common';\nexport class DynamoDbStorageProvider {\n dynamo;\n opts;\n constructor(dynamo, opts) {\n this.dynamo = dynamo;\n this.opts = opts;\n RequireRatchet.notNullOrUndefined(this.dynamo, 'dynamo');\n RequireRatchet.notNullOrUndefined(this.opts, 'opts');\n RequireRatchet.notNullOrUndefined(this.opts.tableName, 'opts.tableName');\n RequireRatchet.notNullOrUndefined(this.opts.hashKeyName, 'opts.hashKeyName');\n RequireRatchet.true(!this.opts.useRangeKeys || (!!this.opts.rangeKeyName && !!this.opts.hashKeyValue), 'invalid range configuration');\n }\n static createDefaultOptions() {\n const rval = {\n tableName: 'simple-cache',\n useRangeKeys: false,\n hashKeyName: 'cache-key',\n rangeKeyName: null,\n hashKeyValue: null,\n };\n return rval;\n }\n createKeyObject(cacheKey) {\n const keys = {};\n if (this.opts.useRangeKeys) {\n keys[this.opts.hashKeyName] = this.opts.hashKeyValue;\n keys[this.opts.rangeKeyName] = cacheKey;\n }\n else {\n keys[this.opts.hashKeyName] = cacheKey;\n }\n return keys;\n }\n cleanDynamoFieldsFromObjectInPlace(rval) {\n if (rval) {\n delete rval[this.opts.hashKeyName];\n if (this.opts.rangeKeyName) {\n delete rval[this.opts.rangeKeyName];\n }\n if (this.opts.dynamoExpiresColumnName) {\n delete rval[this.opts.dynamoExpiresColumnName];\n }\n }\n }\n extractKeysFromObject(rval) {\n let keys = null;\n if (rval) {\n keys = {};\n if (this.opts.useRangeKeys) {\n keys[this.opts.hashKeyName] = this.opts.hashKeyValue;\n keys[this.opts.rangeKeyName] = rval.cacheKey;\n }\n else {\n keys[this.opts.hashKeyName] = rval.cacheKey;\n }\n }\n return keys;\n }\n async readFromCache(cacheKey) {\n const dKey = this.createKeyObject(cacheKey);\n const rval = await this.dynamo.simpleGet(this.opts.tableName, dKey);\n this.cleanDynamoFieldsFromObjectInPlace(rval);\n return rval;\n }\n async storeInCache(value) {\n RequireRatchet.notNullOrUndefined(value, 'value');\n RequireRatchet.notNullOrUndefined(value.cacheKey, 'value.cacheKey');\n const toSave = Object.assign({}, value, this.createKeyObject(value.cacheKey));\n if (this.opts.dynamoExpiresColumnName && value.expiresEpochMS) {\n toSave[this.opts.dynamoExpiresColumnName] = Math.floor(value.expiresEpochMS / 1000);\n }\n const wrote = await this.dynamo.simplePut(this.opts.tableName, toSave);\n return !!wrote;\n }\n async removeFromCache(cacheKey) {\n await this.dynamo.simpleDelete(this.opts.tableName, this.createKeyObject(cacheKey));\n }\n async clearCache() {\n const allValues = await this.readAll();\n const allKeys = allValues.map((a) => this.extractKeysFromObject(a));\n const rval = await this.dynamo.deleteAllInBatches(this.opts.tableName, allKeys, 25);\n return rval;\n }\n async readAll() {\n let rval = null;\n if (this.opts.useRangeKeys) {\n const qry = {\n TableName: this.opts.tableName,\n KeyConditionExpression: '#cacheKey = :cacheKey',\n ExpressionAttributeNames: {\n '#cacheKey': this.opts.hashKeyName,\n },\n ExpressionAttributeValues: {\n ':cacheKey': this.opts.hashKeyValue,\n },\n };\n rval = await this.dynamo.fullyExecuteQuery(qry);\n }\n else {\n const scan = {\n TableName: this.opts.tableName,\n };\n rval = await this.dynamo.fullyExecuteScan(scan);\n }\n rval.forEach((r) => this.cleanDynamoFieldsFromObjectInPlace(r));\n return rval;\n }\n}\n//# sourceMappingURL=dynamo-db-storage-provider.js.map","import { RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class S3StorageProvider {\n s3CacheRatchet;\n prefix;\n constructor(s3CacheRatchet, prefix) {\n this.s3CacheRatchet = s3CacheRatchet;\n this.prefix = prefix;\n RequireRatchet.notNullOrUndefined(this.s3CacheRatchet, 's3CacheRatchet');\n RequireRatchet.notNullOrUndefined(this.s3CacheRatchet.getDefaultBucket(), 's3CacheRatchet.defaultBucket');\n }\n keyToPath(cacheKey) {\n let rval = StringRatchet.trimToEmpty(this.prefix);\n if (rval.length > 0 && !rval.endsWith('/')) {\n rval += '/';\n }\n rval += cacheKey;\n return rval;\n }\n async readFromCache(cacheKey) {\n const rval = await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyToPath(cacheKey));\n return rval;\n }\n async storeInCache(value) {\n RequireRatchet.notNullOrUndefined(value, 'value');\n RequireRatchet.notNullOrUndefined(value.cacheKey, 'value.cacheKey');\n const tmp = await this.s3CacheRatchet.writeObjectToCacheFile(this.keyToPath(value.cacheKey), value);\n return !!tmp;\n }\n async removeFromCache(cacheKey) {\n await this.s3CacheRatchet.removeCacheFile(this.keyToPath(cacheKey));\n }\n async clearCache() {\n const keys = await this.s3CacheRatchet.directChildrenOfPrefix(this.keyToPath(''));\n const removed = await Promise.all(keys.map((k) => this.removeFromCache(k)));\n return keys.length;\n }\n async readAll() {\n const keys = await this.s3CacheRatchet.directChildrenOfPrefix(this.keyToPath(''));\n const rval = await Promise.all(keys.map((k) => this.readFromCache(k)));\n return rval;\n }\n}\n//# sourceMappingURL=s3-storage-provider.js.map","import { Logger } from '@bitblit/ratchet-common';\nexport class SimpleCache {\n provider;\n defaultTimeToLiveMS;\n constructor(provider, defaultTimeToLiveMS = 1_000 * 60) {\n this.provider = provider;\n this.defaultTimeToLiveMS = defaultTimeToLiveMS;\n }\n createDefaultReadOptions() {\n return {\n maxStalenessMS: null,\n timeToLiveMS: this.defaultTimeToLiveMS,\n cacheNullValues: false,\n };\n }\n async fetchWrapper(cacheKey, producer, opts = this.createDefaultReadOptions()) {\n Logger.silly('Fetching %s', cacheKey);\n const now = new Date().getTime();\n let rval = await this.provider.readFromCache(cacheKey);\n if (rval && rval.expiresEpochMS < now) {\n Logger.debug('Object found, but expired - removing');\n rval = null;\n }\n if (rval && opts && opts.maxStalenessMS && now - rval.createdEpochMS > opts.maxStalenessMS) {\n Logger.debug('Object found by too stale - removing');\n rval = null;\n }\n if (!rval) {\n Logger.debug('%s not found in cache, generating', cacheKey);\n const tmp = await producer();\n if (tmp || opts?.cacheNullValues) {\n Logger.debug('Writing %j to cache');\n rval = {\n cacheKey: cacheKey,\n createdEpochMS: now,\n expiresEpochMS: opts && opts.timeToLiveMS ? now + opts.timeToLiveMS : null,\n value: tmp,\n generated: false,\n };\n await this.provider.storeInCache(rval);\n rval.generated = true;\n }\n }\n return rval;\n }\n async fetch(cacheKey, producer, opts = null) {\n const wrapper = await this.fetchWrapper(cacheKey, producer, opts);\n return wrapper ? wrapper.value : null;\n }\n async removeFromCache(cacheKey, returnOldValue) {\n let rval = null;\n if (returnOldValue) {\n rval = await this.fetchWrapper(cacheKey, () => null);\n }\n await this.provider.removeFromCache(cacheKey);\n return rval;\n }\n async clearCache() {\n return this.provider.clearCache();\n }\n async readAll() {\n return this.provider.readAll();\n }\n}\n//# sourceMappingURL=simple-cache.js.map","import { CloudWatchLogsClient, DescribeLogStreamsCommand, FilterLogEventsCommand, } from '@aws-sdk/client-cloudwatch-logs';\nimport { Logger, StopWatch } from '@bitblit/ratchet-common';\nexport class CloudWatchLogGroupRatchet {\n logGroup;\n awsCWLogs;\n constructor(logGroup, awsCWLogs = new CloudWatchLogsClient({ region: 'us-east-1' })) {\n this.logGroup = logGroup;\n this.awsCWLogs = awsCWLogs;\n }\n get cloudWatchLogsClient() {\n return this.awsCWLogs;\n }\n async readLogStreams(startTimestamp = null, endTimestamp = null) {\n const params = {\n logGroupName: this.logGroup,\n orderBy: 'LastEventTime',\n };\n const rval = [];\n do {\n Logger.debug('Pulling more log streams (%d found so far)', rval.length);\n const temp = await this.awsCWLogs.send(new DescribeLogStreamsCommand(params));\n temp.logStreams.forEach((s) => {\n if (s.lastEventTimestamp !== null) {\n if (!startTimestamp || s.lastEventTimestamp >= startTimestamp) {\n if (!endTimestamp || s.firstEventTimestamp <= endTimestamp) {\n rval.push(s);\n }\n }\n }\n });\n params.nextToken = temp.nextToken;\n } while (!!params.nextToken);\n Logger.debug('Found %d total, returning', rval.length);\n return rval;\n }\n async readLogStreamNames(startTimestamp = null, endTimestamp = null) {\n const streams = await this.readLogStreams(startTimestamp, endTimestamp);\n const rval = streams.map((s) => s.logStreamName);\n return rval;\n }\n async readEvents(filter, startTimestamp = null, endTimestamp = null, sortEvents = true, maxEvents = null) {\n const sw = new StopWatch();\n const params = {\n logGroupName: this.logGroup,\n endTime: endTimestamp,\n startTime: startTimestamp,\n };\n if (filter) {\n params.filterPattern = filter;\n }\n Logger.debug('Reading log events matching : %j', params);\n let rval = [];\n do {\n Logger.debug('Pulling more log events (%d found so far) : %s', rval.length, sw.dump());\n const temp = await this.awsCWLogs.send(new FilterLogEventsCommand(params));\n rval = rval.concat(temp.events);\n params.nextToken = temp.nextToken;\n } while (!!params.nextToken && (!maxEvents || rval.length < maxEvents));\n Logger.debug('Found %d total in %s', rval.length, sw.dump());\n if (sortEvents) {\n Logger.debug('Sorting events by timestamp');\n rval = rval.sort((a, b) => {\n let rval = a.timestamp - b.timestamp;\n if (rval === 0) {\n rval = a.message.localeCompare(b.message);\n }\n return rval;\n });\n }\n sw.log();\n return rval;\n }\n}\n//# sourceMappingURL=cloud-watch-log-group-ratchet.js.map","import { CloudWatchLogsClient, DeleteLogGroupCommand, DeleteLogStreamCommand, DescribeLogGroupsCommand, DescribeLogStreamsCommand, GetQueryResultsCommand, StartQueryCommand, StopQueryCommand, } from '@aws-sdk/client-cloudwatch-logs';\nimport { Logger, PromiseRatchet, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class CloudWatchLogsRatchet {\n static MAX_DELETE_RETRIES = 5;\n cwLogs;\n constructor(cloudwatchLogs = null) {\n this.cwLogs = cloudwatchLogs ? cloudwatchLogs : new CloudWatchLogsClient({ region: 'us-east-1' });\n }\n get cloudWatchLogsClient() {\n return this.cwLogs;\n }\n async removeEmptyOrOldLogStreams(logGroupName, maxToRemove = 1000, oldestEventEpochMS = null) {\n Logger.info('Removing empty streams from %s, oldest event epoch MS : %d', logGroupName, oldestEventEpochMS);\n const streamSearchParams = {\n logGroupName: logGroupName,\n orderBy: 'LastEventTime',\n };\n const oldestEventTester = oldestEventEpochMS || 1;\n let totalStreams = 0;\n const removedStreams = [];\n const failedRemovedStreams = [];\n let waitPerDescribe = 10;\n do {\n Logger.debug('Executing search for streams');\n try {\n const streams = await this.cwLogs.send(new DescribeLogStreamsCommand(streamSearchParams));\n totalStreams += streams.logStreams.length;\n Logger.debug('Found %d streams (%d so far, %d to delete)', streams.logStreams.length, totalStreams, removedStreams.length);\n for (let i = 0; i < streams.logStreams.length && removedStreams.length < maxToRemove; i++) {\n const st = streams.logStreams[i];\n if (!st.firstEventTimestamp) {\n removedStreams.push(st);\n }\n else if (st.lastEventTimestamp < oldestEventTester) {\n removedStreams.push(st);\n }\n }\n streamSearchParams['nextToken'] = streams.nextToken;\n }\n catch (err) {\n const oldWait = waitPerDescribe;\n waitPerDescribe = Math.min(1000, waitPerDescribe * 1.5);\n Logger.info('Caught while describing %s, increasing wait between deletes (was %d, now %d)', err, oldWait, waitPerDescribe);\n }\n } while (!!streamSearchParams['nextToken'] && removedStreams.length < maxToRemove);\n Logger.info('Found %d streams to delete', removedStreams.length);\n let waitPer = 10;\n for (let i = 0; i < removedStreams.length; i++) {\n const delParams = {\n logGroupName: logGroupName,\n logStreamName: removedStreams[i].logStreamName,\n };\n const type = removedStreams[i].storedBytes === 0 ? 'empty' : 'old';\n Logger.info('Removing %s stream %s', type, removedStreams[i].logStreamName);\n let removed = false;\n let retry = 0;\n while (!removed && retry < CloudWatchLogsRatchet.MAX_DELETE_RETRIES) {\n try {\n await this.cwLogs.send(new DeleteLogStreamCommand(delParams));\n removed = true;\n await PromiseRatchet.wait(waitPer);\n }\n catch (err) {\n retry++;\n const oldWait = waitPer;\n waitPer = Math.min(1000, waitPer * 1.5);\n Logger.info('Caught %s, increasing wait between deletes and retrying (wait was %d, now %d) (Retry %d of %d)', err, oldWait, waitPer, retry, CloudWatchLogsRatchet.MAX_DELETE_RETRIES);\n }\n }\n if (!removed) {\n failedRemovedStreams.push(removedStreams[i]);\n }\n }\n Logger.warn('Failed to remove streams : %j', failedRemovedStreams);\n return removedStreams;\n }\n async findOldestEventTimestampInGroup(logGroupName) {\n const stream = await this.findStreamWithOldestEventInGroup(logGroupName);\n return stream ? stream.firstEventTimestamp : null;\n }\n async findStreamWithOldestEventInGroup(logGroupName) {\n Logger.info('Finding oldest event in : %s', logGroupName);\n let rval = null;\n try {\n const streamSearchParams = {\n logGroupName: logGroupName,\n orderBy: 'LastEventTime',\n };\n let totalStreams = 0;\n do {\n Logger.debug('Executing search for streams');\n const streams = await this.cwLogs.send(new DescribeLogStreamsCommand(streamSearchParams));\n totalStreams += streams.logStreams.length;\n Logger.debug('Found %d streams (%d so far)', streams.logStreams.length, totalStreams);\n streams.logStreams.forEach((s) => {\n if (s.firstEventTimestamp && (rval === null || s.firstEventTimestamp < rval.firstEventTimestamp)) {\n rval = s;\n }\n });\n streamSearchParams['nextToken'] = streams.nextToken;\n } while (!!streamSearchParams['nextToken']);\n }\n catch (err) {\n Logger.error('Error attempting to find oldest event in group : %s : %s', logGroupName, err, err);\n }\n return rval;\n }\n async findLogGroups(prefix) {\n RequireRatchet.notNullOrUndefined(prefix);\n const params = {\n logGroupNamePrefix: prefix,\n };\n let rval = [];\n do {\n Logger.info('%d found, pulling log groups : %j', rval.length, params);\n const res = await this.cwLogs.send(new DescribeLogGroupsCommand(params));\n rval = rval.concat(res.logGroups);\n params.nextToken = res.nextToken;\n } while (!!params.nextToken);\n return rval;\n }\n async removeLogGroups(groups) {\n RequireRatchet.notNullOrUndefined(groups);\n const rval = [];\n for (let i = 0; i < groups.length; i++) {\n try {\n Logger.info('Deleting %j', groups[i]);\n const req = {\n logGroupName: groups[i].logGroupName,\n };\n await this.cwLogs.send(new DeleteLogGroupCommand(req));\n rval.push(true);\n }\n catch (err) {\n Logger.error('Failure to delete %j : %s', groups[i], err);\n rval.push(false);\n }\n }\n return rval;\n }\n async removeLogGroupsWithPrefix(prefix) {\n RequireRatchet.notNullOrUndefined(prefix);\n RequireRatchet.true(StringRatchet.trimToEmpty(prefix).length > 0);\n Logger.info('Removing log groups with prefix %s', prefix);\n const groups = await this.findLogGroups(prefix);\n return await this.removeLogGroups(groups);\n }\n async fullyExecuteInsightsQuery(sqr) {\n RequireRatchet.notNullOrUndefined(sqr);\n Logger.debug('Starting insights query : %j', sqr);\n const resp = await this.cwLogs.send(new StartQueryCommand(sqr));\n Logger.debug('Got query id %j', resp);\n let rval = null;\n let delayMS = 100;\n while (!rval || ['Running', 'Scheduled'].includes(rval.status)) {\n rval = await this.cwLogs.send(new GetQueryResultsCommand({ queryId: resp.queryId }));\n await PromiseRatchet.wait(delayMS);\n delayMS *= 2;\n Logger.info('Got : %j', rval);\n }\n return rval;\n }\n async abortInsightsQuery(queryId) {\n let rval = null;\n if (!!queryId) {\n rval = await this.cwLogs.send(new StopQueryCommand({ queryId: queryId }));\n }\n return rval;\n }\n}\n//# sourceMappingURL=cloud-watch-logs-ratchet.js.map","export var CloudWatchMetricsUnit;\n(function (CloudWatchMetricsUnit) {\n CloudWatchMetricsUnit[\"Seconds\"] = \"Seconds\";\n CloudWatchMetricsUnit[\"Microseconds\"] = \"Microseconds\";\n CloudWatchMetricsUnit[\"Milliseconds\"] = \"Milliseconds\";\n CloudWatchMetricsUnit[\"Bytes\"] = \"Bytes\";\n CloudWatchMetricsUnit[\"Kilobytes\"] = \"Kilobytes\";\n CloudWatchMetricsUnit[\"Megabytes\"] = \"Megabytes\";\n CloudWatchMetricsUnit[\"Gigabytes\"] = \"Gigabytes\";\n CloudWatchMetricsUnit[\"Terabytes\"] = \"Terabytes\";\n CloudWatchMetricsUnit[\"Bits\"] = \"Bits\";\n CloudWatchMetricsUnit[\"Kilobits\"] = \"Kilobits\";\n CloudWatchMetricsUnit[\"Megabits\"] = \"Megabits\";\n CloudWatchMetricsUnit[\"Gigabits\"] = \"Gigabits\";\n CloudWatchMetricsUnit[\"Terabits\"] = \"Terabits\";\n CloudWatchMetricsUnit[\"Percent\"] = \"Percent\";\n CloudWatchMetricsUnit[\"Count\"] = \"Count\";\n CloudWatchMetricsUnit[\"BytesPerSecond\"] = \"Bytes/Second\";\n CloudWatchMetricsUnit[\"KilobytesPerSecond\"] = \"Kilobytes/Second\";\n CloudWatchMetricsUnit[\"MegabytesPerSecond\"] = \"Megabytes/Second\";\n CloudWatchMetricsUnit[\"GigabytesPerSecond\"] = \"Gigabytes/Second\";\n CloudWatchMetricsUnit[\"TerabytesPerSecond\"] = \"Terabytes/Second\";\n CloudWatchMetricsUnit[\"BitsPerSecond\"] = \"Terabytes/Second\";\n CloudWatchMetricsUnit[\"KilobitsPerSecond\"] = \"Kilobits/Second\";\n CloudWatchMetricsUnit[\"MegabitsPerSecond\"] = \"Megabits/Second\";\n CloudWatchMetricsUnit[\"GigabitsPerSecond\"] = \"Gigabits/Second\";\n CloudWatchMetricsUnit[\"TerabitsPerSecond\"] = \"Terabits/Second\";\n CloudWatchMetricsUnit[\"CountPerSecond\"] = \"Count/Second\";\n CloudWatchMetricsUnit[\"None\"] = \"None\";\n})(CloudWatchMetricsUnit || (CloudWatchMetricsUnit = {}));\n//# sourceMappingURL=cloud-watch-metrics-unit.js.map","import { CloudWatchClient, PutMetricDataCommand } from '@aws-sdk/client-cloudwatch';\nimport { Logger } from '@bitblit/ratchet-common';\nimport { CloudWatchMetricsUnit } from '../model/cloud-watch-metrics-unit.js';\nimport { DateTime } from 'luxon';\nexport class CloudWatchMetricsRatchet {\n cw;\n constructor(cloudWatch = null) {\n this.cw = cloudWatch ? cloudWatch : new CloudWatchClient({ region: 'us-east-1', apiVersion: '2010-08-01' });\n }\n get cloudWatchClient() {\n return this.cw;\n }\n async writeSingleMetric(namespace, metric, dims, unit = CloudWatchMetricsUnit.None, value, timestampDate = new Date(), highResolution = false) {\n const cwDims = [];\n if (!!dims && dims.length > 0) {\n dims.forEach((d) => {\n cwDims.push({ Name: d.key, Value: d.value });\n });\n }\n const storageResolution = highResolution ? 1 : 60;\n const metricData = {\n Namespace: namespace,\n MetricData: [\n {\n MetricName: metric,\n Dimensions: cwDims,\n Unit: String(unit),\n Value: value,\n Timestamp: timestampDate,\n StorageResolution: storageResolution,\n },\n ],\n };\n Logger.silly('Writing metric to cw : %j', metricData);\n const result = await this.cw.send(new PutMetricDataCommand(metricData));\n Logger.silly('Result: %j', result);\n return result;\n }\n async writeDynamoCountAsMinuteLevelMetric(req) {\n Logger.info('Publishing %s / %s metric for %s UTC', req.namespace, req.metric, req.minuteUTC);\n if (!!req.scan && !!req.query) {\n throw new Error('Must send query or scan, but not both');\n }\n if (!req.scan && !req.query) {\n throw new Error('You must specify either a scan or a query');\n }\n const cnt = !!req.query\n ? await req.dynamoRatchet.fullyExecuteQueryCount(req.query)\n : await req.dynamoRatchet.fullyExecuteScanCount(req.scan);\n Logger.debug('%s / %s for %s are %j', req.namespace, req.metric, req.minuteUTC, cnt);\n const parseDateString = req.minuteUTC.split(' ').join('T') + ':00Z';\n const parseDate = DateTime.fromISO(parseDateString).toJSDate();\n const metricRes = await this.writeSingleMetric(req.namespace, req.metric, req.dims, CloudWatchMetricsUnit.Count, cnt.count, parseDate, false);\n Logger.debug('Metrics response: %j', metricRes);\n return cnt.count;\n }\n}\n//# sourceMappingURL=cloud-watch-metrics-ratchet.js.map","import { Logger, StringRatchet } from '@bitblit/ratchet-common';\nimport { PutObjectCommand, } from '@aws-sdk/client-s3';\nimport { Upload } from '@aws-sdk/lib-storage';\nexport class DaemonUtil {\n static DEFAULT_CONTENT = Buffer.from('DAEMON_PLACEHOLDER');\n static DAEMON_METADATA_KEY = 'daemon_meta';\n static async start(cache, id, s3Key, options) {\n try {\n options.meta = options.meta || {};\n Logger.info('Starting daemon, key: %s, options: %j', s3Key, options);\n const now = new Date().getTime();\n const newState = {\n id: id,\n title: options.title,\n lastUpdatedEpochMS: now,\n lastUpdatedMessage: 'Created',\n targetFileName: options.targetFileName,\n startedEpochMS: now,\n completedEpochMS: null,\n meta: options.meta,\n error: null,\n link: null,\n contentType: options.contentType,\n };\n const rval = await DaemonUtil.writeState(cache, s3Key, newState, DaemonUtil.DEFAULT_CONTENT);\n return rval;\n }\n catch (err) {\n Logger.error('Error while trying to start a daemon: %j %s', options, err);\n throw err;\n }\n }\n static async writeState(cache, s3Key, newState, contents) {\n try {\n const s3meta = {};\n newState.lastUpdatedEpochMS = new Date().getTime();\n s3meta[DaemonUtil.DAEMON_METADATA_KEY] = JSON.stringify(newState);\n const params = {\n Bucket: cache.getDefaultBucket(),\n Key: s3Key,\n ContentType: newState.contentType,\n Metadata: s3meta,\n Body: new Blob([contents]),\n };\n if (newState.targetFileName) {\n params.ContentDisposition = 'attachment;filename=\"' + newState.targetFileName + '\"';\n }\n const written = await cache.getS3Client().send(new PutObjectCommand(params));\n Logger.silly('Daemon wrote : %s', written);\n return DaemonUtil.stat(cache, s3Key);\n }\n catch (err) {\n Logger.error('Error while trying to write a daemon stat: %j %s', newState, err);\n throw err;\n }\n }\n static async streamDataAndFinish(cache, s3Key, data, options) {\n Logger.debug('Streaming data to %s', s3Key);\n const inStat = await DaemonUtil.updateMessage(cache, s3Key, 'Streaming data');\n inStat.completedEpochMS = new Date().getTime();\n inStat.lastUpdatedMessage = 'Complete';\n const s3meta = {};\n s3meta[DaemonUtil.DAEMON_METADATA_KEY] = JSON.stringify(inStat);\n const params = {\n Bucket: cache.getDefaultBucket(),\n Key: s3Key,\n ContentType: inStat.contentType,\n Metadata: s3meta,\n Body: data,\n };\n const targetFileName = StringRatchet.trimToNull(options?.overrideTargetFileName) || StringRatchet.trimToNull(inStat?.targetFileName);\n if (targetFileName) {\n params.ContentDisposition = 'attachment;filename=\"' + targetFileName + '\"';\n }\n const upload = new Upload({\n client: cache.getS3Client(),\n params: params,\n tags: [],\n queueSize: 4,\n partSize: 1024 * 1024 * 5,\n leavePartsOnError: false,\n });\n upload.on('httpUploadProgress', (progress) => {\n Logger.info('Uploading : %s', progress);\n });\n const written = await upload.done();\n Logger.silly('Daemon wrote : %s', written);\n return DaemonUtil.stat(cache, s3Key);\n }\n static async updateMessage(cache, s3Key, newMessage) {\n try {\n const inStat = await DaemonUtil.stat(cache, s3Key);\n inStat.lastUpdatedMessage = newMessage;\n return DaemonUtil.writeState(cache, s3Key, inStat, DaemonUtil.DEFAULT_CONTENT);\n }\n catch (err) {\n Logger.error('Error while trying to update a daemon message: %j %s', s3Key, err);\n throw err;\n }\n }\n static async stat(s3Cache, path) {\n try {\n Logger.debug('Daemon stat for path %s / %s', s3Cache.getDefaultBucket(), path);\n let stat = null;\n const meta = await s3Cache.fetchMetaForCacheFile(path);\n Logger.debug('Daemon: Meta is %j', meta);\n const metaString = meta && meta.Metadata ? meta.Metadata[DaemonUtil.DAEMON_METADATA_KEY] : null;\n if (metaString) {\n stat = JSON.parse(metaString);\n if (stat.completedEpochMS && !stat.error) {\n stat.link = await s3Cache.preSignedDownloadUrlForCacheFile(path);\n }\n }\n else {\n Logger.warn('No metadata found! (Head was %j)', meta);\n }\n return stat;\n }\n catch (err) {\n Logger.error('Error while trying to fetch a daemon state: %j %s', path, err);\n throw err;\n }\n }\n static async abort(s3Cache, path) {\n return DaemonUtil.error(s3Cache, path, 'Aborted');\n }\n static async error(s3Cache, path, error) {\n try {\n const inStat = await DaemonUtil.stat(s3Cache, path);\n inStat.error = error;\n inStat.completedEpochMS = new Date().getTime();\n return DaemonUtil.writeState(s3Cache, path, inStat, DaemonUtil.DEFAULT_CONTENT);\n }\n catch (err) {\n Logger.error('Error while trying to write a daemon error: %j %s', path, err);\n throw err;\n }\n }\n static async finalize(s3Cache, path, contents) {\n try {\n Logger.info('Finalizing daemon %s with %d bytes', path, contents.length);\n const inStat = await DaemonUtil.stat(s3Cache, path);\n inStat.completedEpochMS = new Date().getTime();\n inStat.lastUpdatedMessage = 'Complete';\n return DaemonUtil.writeState(s3Cache, path, inStat, contents);\n }\n catch (err) {\n Logger.error('Error while trying to finalize a daemon: %j %s', path, err);\n throw err;\n }\n }\n}\n//# sourceMappingURL=daemon-util.js.map","import { CopyObjectCommand, DeleteObjectCommand, GetObjectCommand, HeadObjectCommand, ListObjectsCommand, NoSuchKey, } from '@aws-sdk/client-s3';\nimport { Logger, RequireRatchet, StopWatch, StreamRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\nimport { Upload } from '@aws-sdk/lib-storage';\nexport class S3CacheRatchet {\n s3;\n defaultBucket;\n constructor(s3, defaultBucket = null) {\n this.s3 = s3;\n this.defaultBucket = defaultBucket;\n RequireRatchet.notNullOrUndefined(this.s3, 's3');\n }\n get s3Client() {\n return this.s3;\n }\n static applyCacheControlMaxAge(input, seconds) {\n if (input && seconds) {\n input.CacheControl = 'max-age=' + seconds;\n }\n return input;\n }\n static applyUserMetaData(input, key, value) {\n if (input && StringRatchet.trimToNull(key) && StringRatchet.trimToNull(value)) {\n input.Metadata = input.Metadata || {};\n input.Metadata[key] = value;\n }\n return input;\n }\n getDefaultBucket() {\n return this.defaultBucket;\n }\n getS3Client() {\n return this.s3;\n }\n async fileExists(key, bucket = null) {\n try {\n const head = await this.fetchMetaForCacheFile(key, this.bucketVal(bucket));\n return !!head;\n }\n catch (err) {\n Logger.silly('Error calling file exists (as expected) %s', err);\n return false;\n }\n }\n async fetchCacheFileAsS3GetObjectCommandOutput(key, bucket = null) {\n let rval = null;\n try {\n const params = {\n Bucket: this.bucketVal(bucket),\n Key: key,\n };\n rval = await this.s3.send(new GetObjectCommand(params));\n }\n catch (err) {\n if (err instanceof NoSuchKey) {\n Logger.debug('Key %s not found - returning null', key);\n rval = null;\n }\n else {\n throw err;\n }\n }\n return rval;\n }\n async fetchCacheFileAsReadableStream(key, bucket = null) {\n const out = await this.fetchCacheFileAsS3GetObjectCommandOutput(key, bucket);\n return out.Body.transformToWebStream();\n }\n async fetchCacheFileAsBuffer(key, bucket = null) {\n let rval = null;\n const out = await this.fetchCacheFileAsS3GetObjectCommandOutput(key, bucket);\n if (out?.Body) {\n const tmp = await out.Body.transformToByteArray();\n rval = Buffer.from(tmp);\n }\n return rval;\n }\n async fetchCacheFileAsString(key, bucket = null) {\n let rval = null;\n const out = await this.fetchCacheFileAsS3GetObjectCommandOutput(key, bucket);\n if (out?.Body) {\n rval = await out.Body.transformToString();\n }\n return rval;\n }\n async fetchCacheFileAsObject(key, bucket = null) {\n const value = await this.fetchCacheFileAsString(key, bucket);\n return value ? JSON.parse(value) : null;\n }\n async removeCacheFile(key, bucket = null) {\n let rval = null;\n const params = {\n Bucket: this.bucketVal(bucket),\n Key: key,\n };\n try {\n rval = await this.s3.send(new DeleteObjectCommand(params));\n }\n catch (err) {\n if (err && err['statusCode'] == 404) {\n Logger.info('Swallowing 404 deleting missing object %s %s', bucket, key);\n rval = null;\n }\n else {\n throw err;\n }\n }\n return rval;\n }\n async writeObjectToCacheFile(key, dataObject, template, bucket) {\n const json = JSON.stringify(dataObject);\n return this.writeStringToCacheFile(key, json, template, bucket);\n }\n async writeStringToCacheFile(key, dataString, template, bucket) {\n const stream = StreamRatchet.stringToWebReadableStream(dataString);\n return this.writeStreamToCacheFile(key, stream, template, bucket);\n }\n async writeStreamToCacheFile(key, data, template, bucket) {\n const params = Object.assign({}, template || {}, {\n Bucket: this.bucketVal(bucket),\n Key: key,\n Body: data,\n });\n const upload = new Upload({\n client: this.s3,\n params: params,\n tags: [],\n queueSize: 4,\n partSize: 1024 * 1024 * 5,\n leavePartsOnError: false,\n });\n upload.on('httpUploadProgress', (progress) => {\n Logger.info('Uploading : %s', progress);\n });\n const result = await upload.done();\n return result;\n }\n async synchronize(srcPrefix, targetPrefix, targetRatchet = this, recurseSubFolders = false) {\n RequireRatchet.notNullOrUndefined(srcPrefix, 'srcPrefix');\n RequireRatchet.notNullOrUndefined(targetPrefix, 'targetPrefix');\n RequireRatchet.true(srcPrefix.endsWith('/'), 'srcPrefix must end in /');\n RequireRatchet.true(targetPrefix.endsWith('/'), 'targetPrefix must end in /');\n let rval = [];\n const sourceFiles = await this.directChildrenOfPrefix(srcPrefix);\n const targetFiles = await targetRatchet.directChildrenOfPrefix(targetPrefix);\n const sw = new StopWatch();\n for (let i = 0; i < sourceFiles.length; i++) {\n const sourceFile = sourceFiles[i];\n Logger.info('Processing %s : %s', sourceFile, sw.dumpExpected(i / sourceFiles.length));\n if (sourceFile.endsWith('/')) {\n if (recurseSubFolders) {\n Logger.info('%s is a subfolder - recursing');\n const subs = await this.synchronize(srcPrefix + sourceFile, targetPrefix + sourceFile, targetRatchet, recurseSubFolders);\n Logger.info('Got %d back from %s', subs.length, sourceFile);\n rval = rval.concat(subs);\n }\n else {\n Logger.info('%s is a subfolder and recurse not specified - skipping', sourceFile);\n }\n }\n else {\n let shouldCopy = true;\n const srcMeta = await this.fetchMetaForCacheFile(srcPrefix + sourceFile);\n if (targetFiles.includes(sourceFile)) {\n const targetMeta = await targetRatchet.fetchMetaForCacheFile(targetPrefix + sourceFile);\n if (srcMeta.ETag === targetMeta.ETag) {\n Logger.debug('Skipping - identical');\n shouldCopy = false;\n }\n }\n if (shouldCopy) {\n Logger.debug('Copying...');\n const srcStream = await this.fetchCacheFileAsReadableStream(srcPrefix + sourceFile);\n try {\n const written = await targetRatchet.writeStreamToCacheFile(targetPrefix + sourceFile, srcStream, srcMeta, undefined);\n Logger.silly('Write result : %j', written);\n rval.push(sourceFile);\n }\n catch (err) {\n Logger.error('Failed to sync : %s : %s', sourceFile, err);\n }\n }\n }\n }\n Logger.info('Found %d files, copied %d', sourceFiles.length, rval.length);\n sw.log();\n return rval;\n }\n async fetchMetaForCacheFile(key, bucket = null) {\n let rval = null;\n try {\n rval = await this.s3.send(new HeadObjectCommand({\n Bucket: this.bucketVal(bucket),\n Key: key,\n }));\n }\n catch (err) {\n if (err && err['statusCode'] == 404) {\n Logger.info('Cache file %s %s not found returning null', this.bucketVal(bucket), key);\n rval = null;\n }\n else {\n Logger.error('Unrecognized error, rethrowing : %s', err, err);\n throw err;\n }\n }\n return rval;\n }\n async cacheFileAgeInSeconds(key, bucket = null) {\n try {\n const res = await this.fetchMetaForCacheFile(key, bucket);\n if (res && res.LastModified) {\n return Math.floor((new Date().getTime() - res.LastModified.getTime()) / 1000);\n }\n else {\n Logger.warn('Cache file %s %s had no last modified returning null', this.bucketVal(bucket), key);\n return null;\n }\n }\n catch (err) {\n if (err && err['statusCode'] == 404) {\n Logger.warn('Cache file %s %s not found returning null', this.bucketVal(bucket), key);\n return null;\n }\n else {\n throw err;\n }\n }\n }\n async copyFile(srcKey, dstKey, srcBucket = null, dstBucket = null) {\n const params = {\n CopySource: '/' + this.bucketVal(srcBucket) + '/' + srcKey,\n Bucket: this.bucketVal(dstBucket),\n Key: dstKey,\n MetadataDirective: 'COPY',\n };\n const rval = await this.s3.send(new CopyObjectCommand(params));\n return rval;\n }\n async quietCopyFile(srcKey, dstKey, srcBucket = null, dstBucket = null) {\n let rval = false;\n try {\n const tmp = await this.copyFile(srcKey, dstKey, srcBucket, dstBucket);\n rval = true;\n }\n catch (err) {\n Logger.silly('Failed to copy file in S3 : %s', err);\n }\n return rval;\n }\n async preSignedDownloadUrlForCacheFile(key, expirationSeconds = 3600, bucket = null) {\n const getCommand = {\n Bucket: this.bucketVal(bucket),\n Key: key,\n };\n const link = await getSignedUrl(this.s3, new GetObjectCommand(getCommand), { expiresIn: expirationSeconds });\n return link;\n }\n async directChildrenOfPrefix(prefix, expandFiles = false, bucket = null, maxToReturn = null) {\n const returnValue = [];\n const params = {\n Bucket: this.bucketVal(bucket),\n Prefix: prefix,\n Delimiter: '/',\n };\n let response = null;\n do {\n response = await this.s3.send(new ListObjectsCommand(params));\n const prefixLength = prefix.length;\n if (response['CommonPrefixes']) {\n response['CommonPrefixes'].forEach((cp) => {\n if (!maxToReturn || returnValue.length < maxToReturn) {\n const value = cp['Prefix'].substring(prefixLength);\n returnValue.push(value);\n }\n });\n }\n if (response['Contents']) {\n await Promise.all(response['Contents'].map(async (cp) => {\n if (!maxToReturn || returnValue.length < maxToReturn) {\n if (expandFiles) {\n const expanded = {\n link: await this.preSignedDownloadUrlForCacheFile(cp['Key'], 3600, bucket),\n name: cp['Key'].substring(prefixLength),\n size: cp['Size'],\n };\n returnValue.push(expanded);\n }\n else {\n returnValue.push(cp['Key'].substring(prefixLength));\n }\n }\n }));\n }\n params.Marker = response.NextMarker;\n } while (params.Marker && (!maxToReturn || returnValue.length < maxToReturn));\n return returnValue;\n }\n async allSubFoldersOfPrefix(prefix, bucket = null) {\n const returnValue = [prefix];\n let idx = 0;\n while (idx < returnValue.length) {\n const next = returnValue[idx++];\n Logger.debug('Pulling %s (%d remaining)', next, returnValue.length - idx);\n const req = {\n Bucket: this.bucketVal(bucket),\n Prefix: next,\n Delimiter: '/',\n };\n let resp = null;\n do {\n req.ContinuationToken = resp ? resp.NextContinuationToken : null;\n resp = await this.s3.send(new ListObjectsCommand(req));\n resp.CommonPrefixes.forEach((p) => {\n returnValue.push(p.Prefix);\n });\n Logger.debug('g:%j', resp);\n } while (resp.NextContinuationToken);\n }\n return returnValue;\n }\n bucketVal(explicitBucket) {\n const rval = explicitBucket ? explicitBucket : this.defaultBucket;\n if (!rval) {\n throw 'You must set either the default bucket or pass it explicitly';\n }\n return rval;\n }\n}\n//# sourceMappingURL=s3-cache-ratchet.js.map","import { Logger, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { S3CacheRatchet } from '../s3/s3-cache-ratchet.js';\nimport { DaemonUtil } from './daemon-util.js';\nexport class Daemon {\n s3;\n bucket;\n prefix;\n _defaultGroup;\n jwtRatchet;\n static DEFAULT_DEFAULT_GROUP = 'DEFAULT';\n cache;\n constructor(s3, bucket, prefix = '', _defaultGroup = Daemon.DEFAULT_DEFAULT_GROUP, jwtRatchet) {\n this.s3 = s3;\n this.bucket = bucket;\n this.prefix = prefix;\n this._defaultGroup = _defaultGroup;\n this.jwtRatchet = jwtRatchet;\n this.cache = new S3CacheRatchet(this.s3, this.bucket);\n }\n get defaultGroup() {\n return this._defaultGroup;\n }\n async keyToPublicToken(key, expirationSeconds) {\n RequireRatchet.notNullOrUndefined(this.jwtRatchet, 'You must set jwtRatchet if you wish to use public tokens');\n RequireRatchet.notNullOrUndefined(key, 'key');\n RequireRatchet.true(expirationSeconds > 0, 'Expiration seconds must be larger than 0');\n const token = { daemonKey: key };\n const publicToken = await this.jwtRatchet.createTokenString(token, expirationSeconds);\n return publicToken;\n }\n keyToPath(key) {\n return Buffer.from(key, 'base64').toString();\n }\n pathToKey(path) {\n return Buffer.from(path).toString('base64');\n }\n generatePath(group = this._defaultGroup) {\n return this.generatePrefix(group) + StringRatchet.createType4Guid();\n }\n generatePrefix(group = this._defaultGroup) {\n return this.prefix + group + '/';\n }\n async start(options) {\n options.group = options.group || this._defaultGroup;\n const path = this.generatePath(options.group);\n const key = this.pathToKey(path);\n return DaemonUtil.start(this.cache, key, path, options);\n }\n async writeState(newState, contents) {\n const key = this.keyToPath(newState.id);\n return DaemonUtil.writeState(this.cache, key, newState, contents);\n }\n async clean(group = this._defaultGroup, olderThanSeconds = 60 * 60 * 24 * 7) {\n try {\n Logger.info('Daemon removing items older than %d seconds from group %s', olderThanSeconds, group);\n const original = await this.list(group);\n const now = new Date().getTime();\n const removed = [];\n for (let i = 0; i < original.length; i++) {\n const test = original[i];\n const ageSeconds = (now - test.startedEpochMS) / 1000;\n if (ageSeconds > olderThanSeconds) {\n const remove = await this.cache.removeCacheFile(this.keyToPath(test.id));\n removed.push(test);\n }\n }\n Logger.debug('Removed %d of %d items', removed.length, original.length);\n return removed;\n }\n catch (err) {\n Logger.error('Error while trying to clean a daemon: %j %s', group, err);\n throw err;\n }\n }\n async listKeys(group = this._defaultGroup) {\n try {\n const prefix = this.generatePrefix(group);\n Logger.info('Fetching children of %s', prefix);\n const rval = await this.cache.directChildrenOfPrefix(prefix);\n Logger.debug('Found : %j', rval);\n return rval;\n }\n catch (err) {\n Logger.error('Error while trying to list daemon keys: %j %s', group, err);\n throw err;\n }\n }\n async list(group = this._defaultGroup) {\n try {\n const prefix = this.generatePrefix(group);\n Logger.info('Fetching children of %s', prefix);\n const keys = await this.listKeys(group);\n const proms = keys.map((k) => this.stat(this.pathToKey(this.generatePrefix(group) + k)));\n const rval = await Promise.all(proms);\n return rval;\n }\n catch (err) {\n Logger.error('Error while trying to list daemon states: %j %s', group, err);\n throw err;\n }\n }\n async updateMessage(id, newMessage) {\n const itemPath = this.keyToPath(id);\n return DaemonUtil.updateMessage(this.cache, itemPath, newMessage);\n }\n async stat(key) {\n const itemPath = this.keyToPath(key);\n return DaemonUtil.stat(this.cache, itemPath);\n }\n async statFromPublicToken(publicToken) {\n RequireRatchet.notNullOrUndefined(this.jwtRatchet, 'You must set jwtRatchet if you wish to use public tokens');\n RequireRatchet.notNullOrUndefined(publicToken, 'publicToken');\n const parsed = await this.jwtRatchet.decodeToken(publicToken);\n const key = parsed?.daemonKey;\n return key ? this.stat(key) : null;\n }\n async abort(id) {\n return DaemonUtil.abort(this.cache, this.keyToPath(id));\n }\n async error(id, error) {\n return DaemonUtil.error(this.cache, this.keyToPath(id), error);\n }\n async finalize(id, contents) {\n return DaemonUtil.finalize(this.cache, this.keyToPath(id), contents);\n }\n}\n//# sourceMappingURL=daemon.js.map","import { MapRatchet, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { DateTime } from 'luxon';\nexport class PrototypeDao {\n provider;\n cfg;\n static defaultDaoConfig() {\n return {\n guidCreateFunction: StringRatchet.createType4Guid,\n guidFieldName: 'guid',\n createdEpochMSFieldName: 'createdEpochMS',\n updatedEpochMSFieldName: 'updatedEpochMS',\n createdUtcTimestampFieldName: null,\n updatedUtcTimestampFieldName: null,\n };\n }\n constructor(provider, cfg = PrototypeDao.defaultDaoConfig()) {\n this.provider = provider;\n this.cfg = cfg;\n RequireRatchet.notNullOrUndefined(provider, 'provider');\n RequireRatchet.notNullOrUndefined(cfg, 'cfg');\n RequireRatchet.notNullOrUndefined(cfg.guidCreateFunction, 'cfg.guidCreateFunction');\n RequireRatchet.notNullOrUndefined(cfg.guidFieldName, 'cfg.guidFieldName');\n }\n async fetchAll() {\n const db = await this.provider.loadDatabase();\n return db.items || [];\n }\n async resetDatabase() {\n await this.provider.storeDatabase({ items: [], lastModifiedEpochMS: Date.now() });\n }\n async removeItems(guids) {\n let old = await this.fetchAll();\n if (guids) {\n old = old.filter((t) => !guids.includes(t[this.cfg.guidFieldName]));\n await this.provider.storeDatabase({ items: old, lastModifiedEpochMS: Date.now() });\n }\n return old;\n }\n async store(value) {\n let old = await this.fetchAll();\n if (value) {\n value[this.cfg.guidFieldName] = value[this.cfg.guidFieldName] || this.cfg.guidCreateFunction();\n if (this.cfg.createdEpochMSFieldName) {\n value[this.cfg.createdEpochMSFieldName] = value[this.cfg.createdEpochMSFieldName] || Date.now();\n }\n if (this.cfg.createdUtcTimestampFieldName) {\n value[this.cfg.createdUtcTimestampFieldName] = value[this.cfg.createdUtcTimestampFieldName] || DateTime.utc().toISO();\n }\n if (this.cfg.updatedEpochMSFieldName) {\n value[this.cfg.updatedEpochMSFieldName] = Date.now();\n }\n if (this.cfg.updatedUtcTimestampFieldName) {\n value[this.cfg.updatedUtcTimestampFieldName] = DateTime.utc().toISO();\n }\n old = old.filter((t) => t[this.cfg.guidFieldName] !== value[this.cfg.guidFieldName]);\n old.push(value);\n await this.provider.storeDatabase({ items: old, lastModifiedEpochMS: Date.now() });\n }\n return value;\n }\n async fetchById(guid) {\n const old = await this.fetchAll();\n return old.find((t) => t[this.cfg.guidFieldName] === guid);\n }\n async searchByField(fieldDotPath, fieldValue) {\n RequireRatchet.notNullOrUndefined(fieldDotPath, 'fieldDotPath');\n RequireRatchet.notNullOrUndefined(fieldValue, 'fieldValue');\n const map = {};\n map[fieldDotPath] = fieldValue;\n return this.searchByFieldMap(map);\n }\n async searchByFieldMap(input) {\n RequireRatchet.notNullOrUndefined(input, 'input');\n let old = await this.fetchAll();\n old = old.filter((t) => {\n let matchAll = true;\n Object.keys(input).forEach((k) => {\n const val = MapRatchet.findValueDotPath(t, k);\n const fieldValue = input[k];\n matchAll = matchAll && val === fieldValue;\n });\n return matchAll;\n });\n return old;\n }\n}\n//# sourceMappingURL=prototype-dao.js.map","import { RequireRatchet } from '@bitblit/ratchet-common';\nexport class S3PrototypeDaoProvider {\n s3CacheRatchet;\n keyName;\n constructor(s3CacheRatchet, keyName) {\n this.s3CacheRatchet = s3CacheRatchet;\n this.keyName = keyName;\n RequireRatchet.notNullOrUndefined(s3CacheRatchet, 's3CacheRatchet');\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(s3CacheRatchet.getDefaultBucket(), 's3CacheRatchet.defaultBucket');\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(keyName, 'keyName');\n }\n async storeDatabase(inDb) {\n const toSave = inDb || { items: [], lastModifiedEpochMS: null };\n toSave.lastModifiedEpochMS = Date.now();\n const put = await this.s3CacheRatchet.writeObjectToCacheFile(this.keyName, toSave);\n const rval = !!put;\n return rval;\n }\n async loadDatabase() {\n const rval = (await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyName)) || {\n items: [],\n lastModifiedEpochMS: Date.now(),\n };\n return rval;\n }\n}\n//# sourceMappingURL=s3-prototype-dao-provider.js.map","import { Logger, StringRatchet } from '@bitblit/ratchet-common';\nexport class S3SimpleDao {\n cache;\n prefix;\n constructor(cache, prefix) {\n this.cache = cache;\n this.prefix = prefix;\n if (!cache) {\n throw new Error('cache object may not be null');\n }\n if (!cache.getDefaultBucket()) {\n throw new Error('Supplied cache must have default bucket set');\n }\n }\n buildPathPrefix(path) {\n let rval = '';\n if (this.prefix) {\n rval += this.prefix;\n }\n if (path) {\n rval += path;\n }\n return rval;\n }\n buildFullPath(id, path) {\n let rval = this.buildPathPrefix(path);\n if (rval.length > 0) {\n rval += '/';\n }\n rval += id + '.json';\n return rval;\n }\n async exists(id, path) {\n const fullPath = this.buildFullPath(id, path);\n Logger.debug('Check file existence : %s', fullPath);\n return this.cache.fileExists(fullPath);\n }\n async fetch(id, path) {\n const fullPath = this.buildFullPath(id, path);\n Logger.debug('Fetching : %s', fullPath);\n const rval = (await this.cache.fetchCacheFileAsObject(fullPath));\n rval.id = id;\n rval.path = path;\n return rval;\n }\n async store(item, path) {\n item.id = item.id || StringRatchet.createType4Guid();\n item.lastModifiedEpochMS = new Date().getTime();\n const fullPath = this.buildFullPath(item.id, path);\n Logger.debug('Storing : %s', fullPath);\n const stored = await this.cache.writeObjectToCacheFile(fullPath, item);\n const read = await this.fetch(item.id, path);\n return read;\n }\n async listItems(path) {\n const fullPath = this.buildPathPrefix(path);\n Logger.debug('Listing : %s', fullPath);\n const rval = await this.cache.directChildrenOfPrefix(fullPath);\n return rval;\n }\n async fetchItemsInPath(path) {\n const fullPath = this.buildPathPrefix(path);\n Logger.debug('Full fetch of : %s', fullPath);\n const items = await this.listItems(path);\n const promises = items.map((s) => this.fetch(s, path));\n const rval = await Promise.all(promises);\n return rval;\n }\n async delete(id, path) {\n const fullPath = this.buildFullPath(id, path);\n Logger.debug('Deleting : %s', fullPath);\n const del = await this.cache.removeCacheFile(fullPath);\n return del != null;\n }\n}\n//# sourceMappingURL=s3-simple-dao.js.map","import { BatchGetCommand, BatchWriteCommand, DeleteCommand, GetCommand, PutCommand, QueryCommand, ScanCommand, } from '@aws-sdk/lib-dynamodb';\nimport { DurationRatchet, ErrorRatchet, Logger, NumberRatchet, PromiseRatchet, RequireRatchet } from '@bitblit/ratchet-common';\nimport { UpdateItemCommand, } from '@aws-sdk/client-dynamodb';\nexport class DynamoRatchet {\n awsDDB;\n constructor(awsDDB) {\n this.awsDDB = awsDDB;\n if (!awsDDB) {\n throw 'awsDDB may not be null';\n }\n }\n get dynamoDBDocumentClient() {\n return this.awsDDB;\n }\n getDDB() {\n return this.awsDDB;\n }\n async tableIsEmpty(tableName) {\n const scan = {\n TableName: tableName,\n Limit: 1,\n };\n const ScanCommandOutput = await this.throughputSafeScanOrQuery((o) => this.scanPromise(o), scan);\n return ScanCommandOutput.Items.length === 0;\n }\n async scanPromise(input) {\n return this.awsDDB.send(new ScanCommand(input));\n }\n async queryPromise(input) {\n return this.awsDDB.send(new QueryCommand(input));\n }\n async throughputSafeScanOrQuery(proc, input, maxTries, inCurrentTry) {\n let rval = null;\n if (input) {\n let currentTry = inCurrentTry ?? 0;\n do {\n currentTry++;\n try {\n rval = await proc(input);\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n const wait = Math.pow(2, currentTry) * 1000;\n Logger.debug('Exceeded scan throughput for %j : Try %d of %d (Waiting %d ms)', input, currentTry, maxTries, wait);\n await PromiseRatchet.wait(wait);\n currentTry++;\n }\n else {\n throw err;\n }\n }\n } while (!rval && (!maxTries || currentTry < maxTries));\n if (!rval) {\n ErrorRatchet.throwFormattedErr('throughputSafeScan failed - tried %d times, kept running into throughput exceeded : %j', maxTries, input);\n }\n }\n return rval;\n }\n async fullyExecuteQueryCount(qry, delayMS = 0) {\n try {\n qry.Select = 'COUNT';\n Logger.debug('Executing count query : %j', qry);\n const rval = {\n count: 0,\n scannedCount: 0,\n pages: 0,\n };\n const start = new Date().getTime();\n let qryResults = null;\n const myLimit = qry.Limit;\n qry.Limit = null;\n do {\n qryResults = await this.throughputSafeScanOrQuery((o) => this.queryPromise(o), qry);\n rval.count += qryResults['Count'];\n rval.scannedCount += qryResults['ScannedCount'];\n rval.pages++;\n qry['ExclusiveStartKey'] = qryResults.LastEvaluatedKey;\n await PromiseRatchet.wait(delayMS);\n Logger.silly('Rval is now %j', rval);\n if (myLimit && rval.count >= myLimit && qry['ExclusiveStartKey']) {\n Logger.info('Aborting query since hit limit of %d', myLimit);\n qry['ExclusiveStartKey'] = null;\n }\n } while (qry['ExclusiveStartKey']);\n const end = new Date().getTime();\n Logger.debug('Finished, returned %j in %s for %j', rval, DurationRatchet.formatMsDuration(end - start, true), qry);\n return rval;\n }\n catch (err) {\n Logger.error('Failed with %s, q: %j', err, qry, err);\n return null;\n }\n }\n async fullyExecuteQuery(qry, delayMS = 0, softLimit = null) {\n const rval = [];\n await this.fullyExecuteProcessOverQuery(qry, async (v) => {\n rval.push(v);\n }, delayMS, softLimit);\n return rval;\n }\n async fullyExecuteProcessOverQuery(qry, proc, delayMS = 0, softLimit = null) {\n let cnt = 0;\n try {\n Logger.debug('Executing query : %j', qry);\n const start = new Date().getTime();\n Logger.debug('Pulling %j', qry);\n let qryResults = await this.throughputSafeScanOrQuery((o) => this.queryPromise(o), qry);\n for (let i = 0; i < qryResults.Items.length; i++) {\n await proc(qryResults.Items[i]);\n cnt++;\n }\n let pages = 0;\n let blankPages = 0;\n while (qryResults.LastEvaluatedKey && (softLimit === null || cnt < softLimit) && !qry.Limit) {\n Logger.silly('Found more rows - requery with key %j', qryResults.LastEvaluatedKey);\n qry['ExclusiveStartKey'] = qryResults.LastEvaluatedKey;\n qryResults = await this.throughputSafeScanOrQuery((o) => this.queryPromise(o), qry);\n for (let i = 0; i < qryResults.Items.length; i++) {\n await proc(qryResults.Items[i]);\n cnt++;\n }\n Logger.silly('Have processed %d items', cnt);\n pages++;\n blankPages += qryResults.Count === 0 ? 1 : 0;\n await PromiseRatchet.wait(delayMS);\n }\n const end = new Date().getTime();\n Logger.debug('Finished, processed %d rows in %s for %j (%d blank pages, %d total pages)', cnt, DurationRatchet.formatMsDuration(end - start, true), qry, blankPages, pages);\n }\n catch (err) {\n Logger.error('Failed with %s, q: %j', err, qry, err);\n }\n return cnt;\n }\n async fullyExecuteScanCount(scan, delayMS = 0) {\n try {\n scan.Select = 'COUNT';\n const rval = {\n count: 0,\n scannedCount: 0,\n pages: 0,\n };\n Logger.debug('Executing scan count : %j', scan);\n const start = new Date().getTime();\n let qryResults = null;\n const myLimit = scan.Limit;\n scan.Limit = null;\n do {\n qryResults = await this.throughputSafeScanOrQuery((o) => this.scanPromise(o), scan);\n rval.count += qryResults['Count'];\n rval.scannedCount += qryResults['ScannedCount'];\n rval.pages++;\n scan['ExclusiveStartKey'] = qryResults?.LastEvaluatedKey;\n await PromiseRatchet.wait(delayMS);\n Logger.silly('Rval is now %j', rval);\n if (myLimit && rval.count >= myLimit && scan['ExclusiveStartKey']) {\n Logger.info('Aborting scan since hit limit of %d', myLimit);\n scan['ExclusiveStartKey'] = null;\n }\n } while (scan['ExclusiveStartKey']);\n const end = new Date().getTime();\n Logger.debug('Finished, returned %j in %s for %j', rval, DurationRatchet.formatMsDuration(end - start, true), scan);\n return rval;\n }\n catch (err) {\n Logger.error('Failed with %s, q: %j', err, scan, err);\n return null;\n }\n }\n async fullyExecuteScan(scan, delayMS = 0, softLimit = null) {\n const rval = [];\n await this.fullyExecuteProcessOverScan(scan, async (v) => {\n rval.push(v);\n }, delayMS, softLimit);\n return rval;\n }\n async fullyExecuteProcessOverScan(scan, proc, delayMS = 0, softLimit = null) {\n let cnt = 0;\n try {\n Logger.debug('Executing scan : %j', scan);\n const start = new Date().getTime();\n Logger.debug('Pulling %j', scan);\n let qryResults = await this.throughputSafeScanOrQuery((o) => this.scanPromise(o), scan);\n for (let i = 0; i < qryResults.Items.length; i++) {\n await proc(qryResults.Items[i]);\n cnt++;\n }\n while (qryResults.LastEvaluatedKey && (softLimit === null || cnt < softLimit) && !scan.Limit) {\n Logger.silly('Found more rows - requery with key %j', qryResults.LastEvaluatedKey);\n scan['ExclusiveStartKey'] = qryResults.LastEvaluatedKey;\n qryResults = await this.throughputSafeScanOrQuery((o) => this.scanPromise(o), scan);\n for (let i = 0; i < qryResults.Items.length; i++) {\n await proc(qryResults.Items[i]);\n cnt++;\n }\n Logger.silly('Rval is now %d items', cnt);\n await PromiseRatchet.wait(delayMS);\n }\n const end = new Date().getTime();\n Logger.debug('Finished, processed %d results in %s for %j', cnt, DurationRatchet.formatMsDuration(end - start, true), scan);\n }\n catch (err) {\n Logger.error('Failed with %s, q: %j', err, scan, err);\n }\n return cnt;\n }\n async writeAllInBatches(tableName, elements, batchSize) {\n if (!batchSize || batchSize < 2) {\n throw new Error('Batch size needs to be at least 2, was ' + batchSize);\n }\n let rval = 0;\n if (!!elements && elements.length > 0) {\n let batchItems = [];\n elements.forEach((el) => {\n batchItems.push({\n PutRequest: {\n Item: el,\n ReturnConsumedCapacity: 'TOTAL',\n TableName: tableName,\n },\n });\n });\n Logger.debug('Processing %d batch items to %s', batchItems.length, tableName);\n while (batchItems.length > 0) {\n const curBatch = batchItems.slice(0, Math.min(batchItems.length, batchSize));\n batchItems = batchItems.slice(curBatch.length);\n const params = {\n RequestItems: {},\n ReturnConsumedCapacity: 'TOTAL',\n ReturnItemCollectionMetrics: 'SIZE',\n };\n params.RequestItems[tableName] = curBatch;\n let tryCount = 1;\n let done = false;\n let batchResults = null;\n while (!done && tryCount < 7) {\n try {\n batchResults = await this.awsDDB.send(new BatchWriteCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n Logger.info('Caught ProvisionedThroughputExceededException - retrying delete');\n batchResults = { UnprocessedItems: params.RequestItems };\n }\n else {\n throw err;\n }\n }\n if (!!batchResults &&\n !!batchResults.UnprocessedItems &&\n !!batchResults.UnprocessedItems[tableName] &&\n batchResults.UnprocessedItems[tableName].length > 0) {\n const backoff = Math.pow(2, tryCount);\n Logger.warn('Found %d unprocessed items. Backing off %d seconds and trying again', batchResults.UnprocessedItems[tableName].length, backoff);\n await PromiseRatchet.wait(backoff * 1000);\n tryCount++;\n params.RequestItems[tableName] = batchResults.UnprocessedItems[tableName];\n }\n else {\n done = true;\n }\n }\n if (!!batchResults &&\n !!batchResults.UnprocessedItems &&\n !!batchResults.UnprocessedItems[tableName] &&\n batchResults.UnprocessedItems[tableName].length > 0) {\n Logger.error('After 6 tries there were still %d unprocessed items');\n rval += curBatch.length - batchResults.UnprocessedItems[tableName].length;\n Logger.warn('FIX Unprocessed : %j', batchResults.UnprocessedItems);\n }\n else {\n rval += curBatch.length;\n }\n }\n }\n return rval;\n }\n async fetchFullObjectsMatchingKeysOnlyIndexQuery(qry, keyNames, batchSize = 25) {\n RequireRatchet.notNullOrUndefined(qry);\n RequireRatchet.notNullOrUndefined(qry.TableName);\n RequireRatchet.notNullOrUndefined(keyNames);\n RequireRatchet.true(keyNames.length > 0);\n const keyDataSrc = await this.fullyExecuteQuery(qry);\n const keysOnly = DynamoRatchet.stripAllToKeysOnly(keyDataSrc, keyNames);\n const rval = await this.fetchAllInBatches(qry.TableName, keysOnly, batchSize);\n return rval;\n }\n async fetchAllInBatches(tableName, inKeys, batchSize) {\n if (!batchSize || batchSize < 2 || batchSize > 100) {\n throw new Error('Batch size needs to be at least 2 and no more than 100, was ' + batchSize);\n }\n let rval = [];\n const batches = [];\n let remain = Object.assign([], inKeys);\n while (remain.length > 0) {\n const curBatch = remain.slice(0, Math.min(remain.length, batchSize));\n remain = remain.slice(curBatch.length);\n const tableEntry = {};\n tableEntry[tableName] = {\n Keys: curBatch,\n };\n const nextBatch = {\n RequestItems: tableEntry,\n ReturnConsumedCapacity: 'TOTAL',\n };\n batches.push(nextBatch);\n }\n Logger.debug('Created %d batches', batches.length);\n for (let i = 0; i < batches.length; i++) {\n if (batches.length > 1) {\n Logger.info('Processing batch %d of %d', i + 1, batches.length);\n }\n const input = batches[i];\n let tryCount = 1;\n do {\n Logger.silly('Pulling %j', input);\n const res = await this.awsDDB.send(new BatchGetCommand(input));\n rval = rval.concat(res.Responses[tableName]);\n if (!!res.UnprocessedKeys && !!res.UnprocessedKeys[tableName] && res.UnprocessedKeys[tableName].Keys.length > 0 && tryCount < 15) {\n Logger.silly('Found %d unprocessed, waiting', res.UnprocessedKeys[tableName].Keys);\n await PromiseRatchet.wait(Math.pow(2, tryCount) * 1000);\n tryCount++;\n }\n input.RequestItems = res.UnprocessedKeys;\n } while (!input.RequestItems && input.RequestItems[tableName].Keys.length > 0);\n }\n return rval;\n }\n async deleteAllInBatches(tableName, keys, batchSize) {\n if (!batchSize || batchSize < 2) {\n throw new Error('Batch size needs to be at least 2, was ' + batchSize);\n }\n let rval = 0;\n if (!!keys && keys.length > 0) {\n let batchItems = [];\n keys.forEach((el) => {\n batchItems.push({\n DeleteRequest: {\n Key: el,\n ReturnConsumedCapacity: 'TOTAL',\n TableName: tableName,\n },\n });\n });\n Logger.debug('Processing %d DeleteBatch items to %s', batchItems.length, tableName);\n while (batchItems.length > 0) {\n const curBatch = batchItems.slice(0, Math.min(batchItems.length, batchSize));\n batchItems = batchItems.slice(curBatch.length);\n const params = {\n RequestItems: {},\n ReturnConsumedCapacity: 'TOTAL',\n ReturnItemCollectionMetrics: 'SIZE',\n };\n params.RequestItems[tableName] = curBatch;\n let tryCount = 1;\n let done = false;\n let batchResults = null;\n while (!done && tryCount < 7) {\n try {\n batchResults = await this.awsDDB.send(new BatchWriteCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n Logger.info('Caught ProvisionedThroughputExceededException - retrying delete');\n batchResults = { UnprocessedItems: params.RequestItems };\n }\n else {\n throw err;\n }\n }\n if (!!batchResults &&\n !!batchResults.UnprocessedItems &&\n !!batchResults.UnprocessedItems[tableName] &&\n batchResults.UnprocessedItems[tableName].length > 0) {\n const backoff = Math.pow(2, tryCount);\n Logger.warn('Found %d unprocessed items. Backing off %d seconds and trying again', batchResults.UnprocessedItems[tableName].length, backoff);\n await PromiseRatchet.wait(backoff * 1000);\n tryCount++;\n params.RequestItems[tableName] = batchResults.UnprocessedItems[tableName];\n }\n else {\n done = true;\n }\n }\n if (!!batchResults &&\n !!batchResults.UnprocessedItems &&\n !!batchResults.UnprocessedItems[tableName] &&\n batchResults.UnprocessedItems[tableName].length > 0) {\n Logger.error('After 6 tries there were still %d unprocessed items');\n rval += curBatch.length - batchResults.UnprocessedItems[tableName].length;\n Logger.warn('FIX Unprocessed : %j', batchResults.UnprocessedItems);\n }\n else {\n rval += curBatch.length;\n }\n Logger.debug('%d Remain, DeleteBatch Results : %j', batchItems.length, batchResults);\n }\n }\n return rval;\n }\n async simplePut(tableName, value, autoRetryCount = 3) {\n let rval = null;\n let currentTry = 0;\n const params = {\n Item: value,\n ReturnConsumedCapacity: 'TOTAL',\n TableName: tableName,\n };\n while (!rval && currentTry < autoRetryCount) {\n try {\n rval = await this.awsDDB.send(new PutCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n const wait = Math.pow(2, currentTry) * 1000;\n Logger.debug('Exceeded write throughput for %j : Try %d of %d (Waiting %d ms)', params, currentTry, autoRetryCount, wait);\n await PromiseRatchet.wait(wait);\n currentTry++;\n }\n else {\n throw err;\n }\n }\n }\n if (!rval) {\n Logger.warn('Unable to write %j to DDB after %d tries, giving up', params, autoRetryCount);\n }\n return rval;\n }\n async simplePutOnlyIfFieldIsNullOrUndefined(tableName, value, fieldName) {\n let rval = false;\n const params = {\n Item: value,\n ReturnConsumedCapacity: 'TOTAL',\n ConditionExpression: 'attribute_not_exists(#fieldName) OR #fieldName = :null ',\n ExpressionAttributeNames: {\n '#fieldName': fieldName,\n },\n ExpressionAttributeValues: {\n ':null': null,\n },\n TableName: tableName,\n };\n try {\n const wrote = await this.awsDDB.send(new PutCommand(params));\n Logger.silly('Wrote : %j', wrote);\n rval = true;\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n Logger.debug('Exceeded write throughput for %j : (Waiting 2000 ms)', params);\n await PromiseRatchet.wait(2000);\n rval = await this.simplePutOnlyIfFieldIsNullOrUndefined(tableName, value, fieldName);\n }\n else if (err && err['code'] && err['code'] === 'ConditionalCheckFailedException') {\n Logger.debug('Failed to write %j due to null field failure');\n rval = false;\n }\n else {\n throw err;\n }\n }\n return rval;\n }\n async simplePutWithCollisionAvoidance(tableName, value, keyNames, adjustFunction, maxAdjusts = null, autoRetryCount = 3) {\n RequireRatchet.true(keyNames && keyNames.length > 0 && keyNames.length < 3, 'You must pass 1 or 2 key names');\n let pio = null;\n let currentTry = 0;\n const attrNames = {\n '#key0': keyNames[0],\n };\n const attrValues = {\n ':key0': value[keyNames[0]],\n };\n let condExp = '#key0 <> :key0';\n if (keyNames.length > 1) {\n condExp += ' AND #key1 <> :key1';\n attrNames['#key1'] = keyNames[1];\n attrValues[':key1'] = value[keyNames[1]];\n }\n const params = {\n Item: value,\n ReturnConsumedCapacity: 'TOTAL',\n ConditionExpression: condExp,\n ExpressionAttributeNames: attrNames,\n ExpressionAttributeValues: attrValues,\n TableName: tableName,\n };\n let adjustCount = 0;\n while (!pio && currentTry < autoRetryCount && (!maxAdjusts || adjustCount < maxAdjusts)) {\n try {\n pio = await this.awsDDB.send(new PutCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n currentTry++;\n const wait = Math.pow(2, currentTry) * 1000;\n Logger.debug('Exceeded write throughput for %j : Try %d of %d (Waiting %d ms)', params, currentTry, autoRetryCount, wait);\n await PromiseRatchet.wait(wait);\n }\n else if (err && err['code'] && err['code'] === 'ConditionalCheckFailedException') {\n let newValue = Object.assign({}, params.Item);\n Logger.info('Failed to write %j due to collision - adjusting and retrying', newValue);\n newValue = adjustFunction(newValue);\n params.Item = newValue;\n params.ExpressionAttributeValues[':key0'] = newValue[keyNames[0]];\n if (keyNames.length > 1) {\n params.ExpressionAttributeValues[':key1'] = newValue[keyNames[1]];\n }\n adjustCount++;\n }\n else {\n throw err;\n }\n }\n }\n if (pio && adjustCount > 0) {\n Logger.info('After adjustment, wrote %j as %j', value, params.Item);\n }\n if (!pio) {\n Logger.warn('Unable to write %j to DDB after %d provision tries and %d adjusts, giving up', params, currentTry, adjustCount);\n }\n return pio ? params.Item : null;\n }\n async simpleGet(tableName, keys, autoRetryCount = 3) {\n let holder = null;\n let currentTry = 0;\n const params = {\n TableName: tableName,\n Key: keys,\n };\n while (!holder && currentTry < autoRetryCount) {\n try {\n holder = await this.awsDDB.send(new GetCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n const wait = Math.pow(2, currentTry) * 1000;\n Logger.debug('Exceeded read throughput for %j : Try %d of %d (Waiting %d ms)', params, currentTry, autoRetryCount, wait);\n await PromiseRatchet.wait(wait);\n currentTry++;\n }\n else {\n throw err;\n }\n }\n }\n if (!holder) {\n Logger.warn('Unable to read %j from DDB after %d tries, giving up', params, autoRetryCount);\n }\n const rval = !!holder && !!holder.Item ? Object.assign({}, holder.Item) : null;\n return rval;\n }\n static objectIsErrorWithProvisionedThroughputExceededExceptionCode(err) {\n return !!err && !!err['code'] && err['code'] === 'ProvisionedThroughputExceededException';\n }\n async simpleGetWithCounterDecrement(tableName, keys, counterAttributeName, deleteOnZero, autoRetryCount = 3) {\n let holder = null;\n let currentTry = 0;\n const params = {\n TableName: tableName,\n Key: keys,\n UpdateExpression: 'set #counter = #counter-:decVal',\n ExpressionAttributeNames: {\n '#counter': counterAttributeName,\n },\n ExpressionAttributeValues: {\n ':decVal': 1,\n ':minVal': 0,\n },\n ConditionExpression: '#counter > :minVal',\n ReturnValues: 'ALL_NEW',\n };\n let updateFailed = false;\n while (!holder && currentTry < autoRetryCount && !updateFailed) {\n try {\n holder = await this.awsDDB.send(new UpdateItemCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n const wait = Math.pow(2, currentTry) * 1000;\n Logger.debug('Exceeded update throughput for %j : Try %d of %d (Waiting %d ms)', params, currentTry, autoRetryCount, wait);\n await PromiseRatchet.wait(wait);\n currentTry++;\n }\n else if (!!err && !!err['code'] && err['code'] === 'ConditionalCheckFailedException') {\n Logger.info('Cannot fetch requested row (%j) - the update check failed', keys);\n updateFailed = true;\n }\n else {\n throw err;\n }\n }\n }\n if (!holder && !updateFailed) {\n Logger.warn('Unable to update %j from DDB after %d tries, giving up', params, autoRetryCount);\n }\n const rval = !!holder && !!holder.Attributes ? Object.assign({}, holder.Attributes) : null;\n if (deleteOnZero && rval && rval[counterAttributeName] === 0) {\n Logger.info('Delete on 0 specified, removing');\n await this.simpleDelete(tableName, keys);\n }\n return rval;\n }\n async simpleDelete(tableName, keys) {\n const params = {\n TableName: tableName,\n Key: keys,\n };\n const holder = await this.awsDDB.send(new DeleteCommand(params));\n return holder;\n }\n async atomicCounter(tableName, keys, counterFieldName, increment = 1) {\n const update = {\n TableName: tableName,\n Key: keys,\n UpdateExpression: 'SET #counterFieldName = #counterFieldName + :inc',\n ExpressionAttributeNames: {\n '#counterFieldName': counterFieldName,\n },\n ExpressionAttributeValues: {\n ':inc': increment,\n },\n ReturnValues: 'UPDATED_NEW',\n };\n const ui = await this.awsDDB.send(new UpdateItemCommand(update));\n const rval = NumberRatchet.safeNumber(ui.Attributes[counterFieldName]);\n return rval;\n }\n static cleanObject(ob) {\n if (!!ob) {\n const rem = [];\n Object.keys(ob).forEach((k) => {\n const v = ob[k];\n if (v === '') {\n rem.push(k);\n }\n else if (v instanceof Object) {\n DynamoRatchet.cleanObject(v);\n }\n });\n Logger.silly('Removing keys : %j', rem);\n rem.forEach((k) => {\n delete ob[k];\n });\n }\n }\n static stripToKeysOnly(input, keysNames) {\n let rval = null;\n if (!!input && !!keysNames && keysNames.length > 0) {\n rval = {};\n keysNames.forEach((k) => {\n if (!input[k]) {\n ErrorRatchet.throwFormattedErr('Failed key extraction on %j - missing %s', input, k);\n }\n rval[k] = input[k];\n });\n }\n return rval;\n }\n static stripAllToKeysOnly(input, keys) {\n const rval = input.map((i) => DynamoRatchet.stripToKeysOnly(i, keys));\n return rval;\n }\n}\n//# sourceMappingURL=dynamo-ratchet.js.map","import { CreateTableCommand, DeleteTableCommand, DescribeTableCommand, ListTablesCommand, ResourceNotFoundException, } from '@aws-sdk/client-dynamodb';\nimport { ErrorRatchet, Logger, PromiseRatchet, RequireRatchet } from '@bitblit/ratchet-common';\nexport class DynamoTableRatchet {\n awsDDB;\n constructor(awsDDB) {\n this.awsDDB = awsDDB;\n if (!awsDDB) {\n throw 'awsDDB may not be null';\n }\n }\n async deleteTable(tableName, waitForDelete = true) {\n RequireRatchet.notNullOrUndefined(tableName);\n const input = {\n TableName: tableName,\n };\n Logger.debug('Deleting ddb table %s', tableName);\n const rval = await this.awsDDB.send(new DeleteTableCommand(input));\n if (waitForDelete) {\n Logger.debug('Table marked for delete, waiting for deletion');\n await this.waitForTableDelete(tableName);\n }\n return rval;\n }\n async createTable(input, waitForReady = true, replaceIfExists = false) {\n RequireRatchet.notNullOrUndefined(input);\n RequireRatchet.notNullOrUndefined(input.TableName);\n Logger.debug('Creating new table : %j', input);\n const exists = await this.tableExists(input.TableName);\n if (exists) {\n if (replaceIfExists) {\n Logger.debug('Table %s exists and replace specified - deleting', input.TableName);\n await this.deleteTable(input.TableName);\n }\n else {\n ErrorRatchet.throwFormattedErr('Cannot create table %s - exists already and replace not specified', input.TableName);\n }\n }\n const rval = await this.awsDDB.send(new CreateTableCommand(input));\n if (waitForReady) {\n Logger.debug('Table created, awaiting ready');\n await this.waitForTableReady(input.TableName);\n }\n return rval;\n }\n async waitForTableReady(tableName) {\n let rval = true;\n let out = await this.safeDescribeTable(tableName);\n while (!!out && !!out.Table && out.Table.TableStatus !== 'ACTIVE') {\n Logger.silly('Table not ready - waiting 2 seconds');\n await PromiseRatchet.wait(2000);\n out = await this.safeDescribeTable(tableName);\n }\n if (!out && !out.Table) {\n Logger.warn('Cannot wait for %s to be ready - table does not exist', tableName);\n rval = false;\n }\n return rval;\n }\n async waitForTableDelete(tableName) {\n let out = await this.safeDescribeTable(tableName);\n while (!!out) {\n Logger.silly('Table %s still exists, waiting 2 seconds (State is %s)', tableName, out.Table.TableStatus);\n await PromiseRatchet.wait(2000);\n out = await this.safeDescribeTable(tableName);\n }\n }\n async tableExists(tableName) {\n const desc = await this.safeDescribeTable(tableName);\n return !!desc;\n }\n async listAllTables() {\n const input = {};\n let rval = [];\n do {\n const out = await this.awsDDB.send(new ListTablesCommand(input));\n rval = rval.concat(out.TableNames);\n input.ExclusiveStartTableName = out.LastEvaluatedTableName;\n } while (input.ExclusiveStartTableName);\n return rval;\n }\n async safeDescribeTable(tableName) {\n try {\n const out = await this.awsDDB.send(new DescribeTableCommand({ TableName: tableName }));\n return out;\n }\n catch (err) {\n if (err instanceof ResourceNotFoundException) {\n return null;\n }\n else {\n throw err;\n }\n }\n }\n async copyTable(srcTableName, dstTableName, overrides, copyData) {\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(srcTableName, 'srcTableName');\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(dstTableName, 'dstTableName');\n if (copyData) {\n throw ErrorRatchet.fErr('Cannot copy %s to %s - copy data not supported yet', srcTableName, dstTableName);\n }\n const srcTableDef = await this.safeDescribeTable(srcTableName);\n if (await this.tableExists(dstTableName)) {\n throw ErrorRatchet.fErr('Cannot copy to %s - table already exists', dstTableName);\n }\n if (!srcTableDef) {\n throw ErrorRatchet.fErr('Cannot copy %s - doesnt exist', srcTableName);\n }\n const ads = srcTableDef.Table.AttributeDefinitions;\n const ks = srcTableDef.Table.KeySchema;\n const gi = srcTableDef.Table.GlobalSecondaryIndexes;\n const createInput = Object.assign({}, overrides || {}, {\n AttributeDefinitions: srcTableDef.Table.AttributeDefinitions,\n TableName: dstTableName,\n KeySchema: srcTableDef.Table.KeySchema,\n LocalSecondaryIndexes: srcTableDef.Table.LocalSecondaryIndexes,\n GlobalSecondaryIndexes: srcTableDef.Table.GlobalSecondaryIndexes.map((gi) => {\n const output = gi;\n if (output.ProvisionedThroughput?.WriteCapacityUnits === 0 || output.ProvisionedThroughput?.ReadCapacityUnits === 0) {\n output.ProvisionedThroughput = undefined;\n }\n return output;\n }),\n BillingMode: srcTableDef.Table.BillingModeSummary.BillingMode,\n ProvisionedThroughput: srcTableDef.Table.BillingModeSummary.BillingMode === 'PROVISIONED'\n ? srcTableDef.Table.ProvisionedThroughput\n : undefined,\n StreamSpecification: srcTableDef.Table.StreamSpecification,\n SSESpecification: srcTableDef.Table.SSEDescription,\n Tags: undefined,\n TableClass: srcTableDef.Table.TableClassSummary?.TableClass,\n DeletionProtectionEnabled: srcTableDef.Table.DeletionProtectionEnabled,\n });\n const rval = await this.awsDDB.send(new CreateTableCommand(createInput));\n return rval;\n }\n}\n//# sourceMappingURL=dynamo-table-ratchet.js.map","import { ErrorRatchet, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class HashSpreader {\n spots;\n buckets;\n separator;\n alphabet;\n _allSlots;\n constructor(spots = 3, buckets = 16, separator = '_', alphabet = '0123456789ABCDEF') {\n this.spots = spots;\n this.buckets = buckets;\n this.separator = separator;\n this.alphabet = alphabet;\n RequireRatchet.true(spots > 0, 'Spots must be larger than 0');\n RequireRatchet.true(buckets > 1, 'Buckets must be larger than 1');\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(alphabet), 'Alphabet may not be null or empty');\n RequireRatchet.true(StringRatchet.allUnique(alphabet), 'Alphabet must be unique');\n RequireRatchet.true(StringRatchet.stringContainsOnlyAlphanumeric(alphabet), 'Alphabet must be alphanumeric');\n const permutations = Math.pow(alphabet.length, spots);\n RequireRatchet.true(buckets < permutations, 'Buckets must be less than permutations (' + buckets + ' / ' + permutations + ')');\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(this.separator), 'Separator must be nonnull and nonempty');\n const allPerms = StringRatchet.allPermutationsOfLength(spots, alphabet);\n this._allSlots = allPerms.slice(0, buckets);\n }\n get allBuckets() {\n return Object.assign([], this._allSlots);\n }\n get randomBucket() {\n return this._allSlots[Math.floor(Math.random() * this.buckets)];\n }\n allSpreadValues(input) {\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(input), 'Cannot spread null/empty value');\n const rval = this._allSlots.map((s) => input + this.separator + s);\n return rval;\n }\n allSpreadValuesForArray(inputs) {\n RequireRatchet.true(inputs && inputs.length > 0, 'Cannot spread null/empty array');\n let rval = [];\n inputs.forEach((i) => {\n rval = rval.concat(this.allSpreadValues(i));\n });\n return rval;\n }\n addSpreader(input) {\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(input), 'Cannot spread null/empty value');\n return input + this.separator + this.randomBucket;\n }\n extractBucket(input) {\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(input), 'Cannot extract from null or empty value');\n const loc = input.length - this.spots;\n if (loc < 0 || input.charAt(loc) !== this.separator) {\n ErrorRatchet.throwFormattedErr('Cannot extract bucket, not created by this spreader (missing %s at location %d)', this.separator, loc);\n }\n return input.substring(loc);\n }\n removeBucket(input) {\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(input), 'Cannot extract from null or empty value');\n const loc = input.length - this.spots;\n if (loc < 0 || input.charAt(loc) !== this.separator) {\n ErrorRatchet.throwFormattedErr('Cannot remove bucket, not created by this spreader (missing %s at location %d)', this.separator, loc);\n }\n return input.substring(0, loc);\n }\n}\n//# sourceMappingURL=hash-spreader.js.map","import { DescribeInstancesCommand, EC2Client, StartInstancesCommand, StopInstancesCommand, } from '@aws-sdk/client-ec2';\nimport { EC2InstanceConnectClient, SendSSHPublicKeyCommand, } from '@aws-sdk/client-ec2-instance-connect';\nimport { DurationRatchet, Logger, PromiseRatchet } from '@bitblit/ratchet-common';\nexport class Ec2Ratchet {\n region;\n availabilityZone;\n ec2;\n ec2InstanceConnect;\n constructor(region = 'us-east-1', availabilityZone = 'us-east-1a') {\n this.region = region;\n this.availabilityZone = availabilityZone;\n this.ec2 = new EC2Client({ region: region });\n this.ec2InstanceConnect = new EC2InstanceConnectClient({ region: region });\n }\n get eC2Client() {\n return this.ec2;\n }\n get eC2InstanceConnectClient() {\n return this.ec2InstanceConnect;\n }\n async stopInstance(instanceId, maxWaitForShutdownMS = 0) {\n let rval = true;\n try {\n const stopParams = {\n InstanceIds: [instanceId],\n DryRun: false,\n };\n Logger.info('About to stop instances : %j', stopParams);\n await this.ec2.send(new StopInstancesCommand(stopParams));\n Logger.info('Stop instance command sent, waiting on shutdown');\n let status = await this.describeInstance(instanceId);\n if (maxWaitForShutdownMS > 0) {\n const start = new Date().getTime();\n while (!!status && status.State.Code !== 16 && new Date().getTime() - start < maxWaitForShutdownMS) {\n Logger.debug('Instance status is %j - waiting for 5 seconds (up to %s)', status.State, DurationRatchet.formatMsDuration(maxWaitForShutdownMS));\n await PromiseRatchet.wait(5000);\n status = await this.describeInstance(instanceId);\n }\n }\n }\n catch (err) {\n Logger.error('Failed to stop instance %s : %s', instanceId, err, err);\n rval = false;\n }\n return rval;\n }\n async launchInstance(instanceId, maxWaitForStartupMS = 0) {\n let rval = true;\n try {\n const startParams = {\n InstanceIds: [instanceId],\n DryRun: false,\n };\n Logger.info('About to start instance : %j', startParams);\n await this.ec2.send(new StartInstancesCommand(startParams));\n Logger.info('Start instance command sent, waiting on startup');\n let status = await this.describeInstance(instanceId);\n if (maxWaitForStartupMS > 0) {\n const start = new Date().getTime();\n while (!!status && status.State.Code !== 16 && new Date().getTime() - start < maxWaitForStartupMS) {\n Logger.debug('Instance status is %j - waiting for 5 seconds (up to %s)', status.State, DurationRatchet.formatMsDuration(maxWaitForStartupMS));\n await PromiseRatchet.wait(5000);\n status = await this.describeInstance(instanceId);\n }\n }\n if (!!status && !!status.PublicIpAddress) {\n Logger.info('Instance address is %s', status.PublicIpAddress);\n Logger.info('SSH command : ssh -i path_to_pem_file ec2-user@%s', status.PublicIpAddress);\n }\n }\n catch (err) {\n Logger.error('Failed to start instance %s : %s', instanceId, err, err);\n rval = false;\n }\n return rval;\n }\n async describeInstance(instanceId) {\n const res = await this.listAllInstances([instanceId]);\n return res.length === 1 ? res[0] : null;\n }\n async listAllInstances(instanceIds = []) {\n let rval = [];\n const req = {\n NextToken: null,\n };\n if (instanceIds && instanceIds.length > 0) {\n req.InstanceIds = instanceIds;\n }\n do {\n Logger.debug('Pulling instances... (%j)', req);\n const res = await this.ec2.send(new DescribeInstancesCommand(req));\n res.Reservations.forEach((r) => {\n rval = rval.concat(r.Instances);\n });\n req.NextToken = res.NextToken;\n } while (req.NextToken);\n Logger.debug('Finished pulling instances (found %d)', rval.length);\n return rval;\n }\n async sendPublicKeyToEc2Instance(instanceId, publicKeyString, instanceOsUser) {\n const userName = instanceOsUser || 'ec2-user';\n const req = {\n InstanceId: instanceId,\n AvailabilityZone: this.availabilityZone,\n InstanceOSUser: userName,\n SSHPublicKey: publicKeyString,\n };\n const rval = await this.ec2InstanceConnect.send(new SendSSHPublicKeyCommand(req));\n return rval;\n }\n}\n//# sourceMappingURL=ec2-ratchet.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class CascadeEnvironmentServiceProvider {\n providers;\n constructor(providers) {\n this.providers = providers;\n RequireRatchet.notNullOrUndefined(providers);\n RequireRatchet.true(providers.length > 0);\n }\n async fetchConfig(name) {\n Logger.silly('CascadeEnvironmentServiceProvider fetch for %s', name);\n let rval = null;\n for (let i = 0; i < this.providers.length && !rval; i++) {\n try {\n rval = await this.providers[i].fetchConfig(name);\n }\n catch (err) {\n Logger.error('Provider %d failed - trying next : %s', i, err, err);\n rval = null;\n }\n }\n return rval;\n }\n}\n//# sourceMappingURL=cascade-environment-service-provider.js.map","import { ErrorRatchet, Logger, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class EnvVarEnvironmentServiceProvider {\n envVarName;\n constructor(envVarName) {\n this.envVarName = envVarName;\n RequireRatchet.notNullOrUndefined(envVarName);\n }\n async fetchConfig() {\n Logger.silly('EnvVarEnvironmentServiceProvider fetch for %s', this.envVarName);\n let rval = null;\n const src = process ? process.env : global ? global : {};\n const toParse = StringRatchet.trimToNull(src[this.envVarName]);\n if (toParse) {\n try {\n rval = JSON.parse(toParse);\n }\n catch (err) {\n Logger.error('Failed to read env - null or invalid JSON : %s : %s', err, toParse, err);\n throw err;\n }\n }\n else {\n ErrorRatchet.throwFormattedErr('Could not find env var with name : %s', this.envVarName);\n }\n return rval;\n }\n}\n//# sourceMappingURL=env-var-environment-service-provider.js.map","import { ErrorRatchet, Logger, PromiseRatchet, RequireRatchet } from '@bitblit/ratchet-common';\nexport class EnvironmentService {\n provider;\n cfg;\n readPromiseCache = new Map();\n static defaultEnvironmentServiceConfig() {\n const rval = {\n maxRetries: 3,\n backoffMultiplierMS: 500,\n };\n return rval;\n }\n constructor(provider, cfg = EnvironmentService.defaultEnvironmentServiceConfig()) {\n this.provider = provider;\n this.cfg = cfg;\n RequireRatchet.notNullOrUndefined(provider);\n RequireRatchet.notNullOrUndefined(cfg);\n }\n async getConfig(name) {\n Logger.silly('EnvService:Request to read config %s', name);\n if (!this.readPromiseCache.has(name)) {\n Logger.silly('EnvService: Nothing in cache - adding');\n this.readPromiseCache.set(name, this.getConfigUncached(name));\n }\n return this.readPromiseCache.get(name);\n }\n async getConfigUncached(name) {\n let tryCount = 1;\n let rval = null;\n while (!rval && tryCount < this.cfg.maxRetries) {\n tryCount++;\n Logger.silly('Attempting fetch of %s', name);\n try {\n rval = await this.provider.fetchConfig(name);\n }\n catch (err) {\n const waitMS = tryCount * this.cfg.backoffMultiplierMS;\n Logger.info('Error attempting to fetch config %s (try %d of %d, waiting %s MS): %s', name, tryCount, this.cfg.maxRetries, waitMS, err, err);\n await PromiseRatchet.wait(waitMS);\n }\n }\n if (!rval) {\n ErrorRatchet.throwFormattedErr('Was unable to fetch config %s even after %d retries', name, this.cfg.maxRetries);\n }\n return rval;\n }\n}\n//# sourceMappingURL=environment-service.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class FixedEnvironmentServiceProvider {\n value;\n constructor(value) {\n this.value = value;\n RequireRatchet.notNullOrUndefined(value);\n }\n static fromRecord(record) {\n const m = new Map();\n Object.keys(record).forEach((k) => {\n m.set(k, record[k]);\n });\n return new FixedEnvironmentServiceProvider(m);\n }\n async fetchConfig(name) {\n Logger.silly('FixedEnvironmentServiceProvider fetch for %s', name);\n const rval = this.value.get(name);\n return rval;\n }\n}\n//# sourceMappingURL=fixed-environment-service-provider.js.map","import { S3CacheRatchet } from '../s3/s3-cache-ratchet.js';\nimport { Logger, RequireRatchet, StopWatch, StringRatchet } from '@bitblit/ratchet-common';\nimport { S3Client } from '@aws-sdk/client-s3';\nexport class S3EnvironmentServiceProvider {\n cfg;\n ratchet;\n constructor(cfg) {\n this.cfg = cfg;\n RequireRatchet.notNullOrUndefined(cfg);\n RequireRatchet.notNullOrUndefined(cfg.bucketName);\n RequireRatchet.notNullOrUndefined(cfg.region);\n RequireRatchet.true(!!cfg.s3Override || !!cfg.region, 'You must set either region or S3Override');\n const s3 = cfg.s3Override || new S3Client({ region: cfg.region });\n this.ratchet = new S3CacheRatchet(s3, cfg.bucketName);\n }\n async fetchConfig(name) {\n const readPath = StringRatchet.trimToEmpty(this.cfg.pathPrefix) + name + StringRatchet.trimToEmpty(this.cfg.pathSuffix);\n Logger.silly('S3EnvironmentServiceProvider:Request to read config from : %s / %s', this.cfg.bucketName, readPath);\n const sw = new StopWatch();\n const rval = await this.ratchet.fetchCacheFileAsObject(readPath);\n sw.log();\n return rval;\n }\n}\n//# sourceMappingURL=s3-environment-service-provider.js.map","import { ErrorRatchet, Logger, PromiseRatchet, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { GetParameterCommand, SSMClient } from '@aws-sdk/client-ssm';\nexport class SsmEnvironmentServiceProvider {\n region;\n ssmEncrypted;\n ssm;\n constructor(region = 'us-east-1', ssmEncrypted = true) {\n this.region = region;\n this.ssmEncrypted = ssmEncrypted;\n RequireRatchet.notNullOrUndefined(region);\n RequireRatchet.notNullOrUndefined(ssmEncrypted);\n this.ssm = new SSMClient({ region: this.region });\n }\n async fetchConfig(name) {\n Logger.silly('SsmEnvironmentServiceProvider fetch for %s', name);\n const params = {\n Name: name,\n WithDecryption: this.ssmEncrypted,\n };\n let rval = null;\n let toParse = null;\n try {\n const value = await this.ssm.send(new GetParameterCommand(params));\n toParse = StringRatchet.trimToNull(value?.Parameter?.Value);\n }\n catch (err) {\n const errCode = err['code'] || '';\n if (errCode.toLowerCase().indexOf('throttlingexception') !== -1) {\n Logger.warn('Throttled while trying to read parameters - waiting 1 second before allowing retry');\n await PromiseRatchet.wait(1_000);\n }\n else if (errCode.toLowerCase().indexOf('parameternotfound') !== -1) {\n const errMsg = Logger.warn('AWS could not find parameter %s - are you using the right AWS key?', name);\n throw new Error(errMsg);\n }\n else {\n Logger.error('Final environment fetch error (cannot retry) : %s', err, err);\n throw err;\n }\n }\n if (toParse) {\n try {\n rval = JSON.parse(toParse);\n }\n catch (err) {\n Logger.error('Failed to read env - null or invalid JSON : %s : %s', err, toParse, err);\n throw err;\n }\n }\n else {\n ErrorRatchet.throwFormattedErr('Could not find system parameter with name : %s in this account', name);\n }\n return rval;\n }\n}\n//# sourceMappingURL=ssm-environment-service-provider.js.map","export class DynamoExpiringCodeProvider {\n tableName;\n dynamoRatchet;\n constructor(tableName, dynamoRatchet) {\n this.tableName = tableName;\n this.dynamoRatchet = dynamoRatchet;\n }\n async checkCode(code, context, deleteOnMatch) {\n const keys = { code: code, context: context };\n const expCode = await this.dynamoRatchet.simpleGet(this.tableName, keys);\n const rval = expCode && expCode.expiresEpochMS > Date.now();\n if (rval && deleteOnMatch) {\n await this.dynamoRatchet.simpleDelete(this.tableName, keys);\n }\n return rval;\n }\n async storeCode(code) {\n const output = await this.dynamoRatchet.simplePut(this.tableName, code);\n return output && output.ConsumedCapacity.CapacityUnits > 0;\n }\n async createTableIfMissing(dtr) {\n return null;\n }\n}\n//# sourceMappingURL=dynamo-expiring-code-provider.js.map","import { RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class ExpiringCodeRatchet {\n provider;\n constructor(provider) {\n this.provider = provider;\n }\n static generateCode(params) {\n RequireRatchet.notNullOrUndefined(params, 'params');\n RequireRatchet.notNullOrUndefined(params.context, 'params.context');\n RequireRatchet.notNullOrUndefined(params.length, 'params.length');\n RequireRatchet.notNullOrUndefined(params.alphabet, 'params.alphabet');\n let code = '';\n for (let i = 0; i < params.length; i++) {\n code += params.alphabet.charAt(Math.floor(params.alphabet.length * Math.random()));\n }\n const rval = {\n code: code,\n context: params.context,\n tags: params.tags,\n expiresEpochMS: Date.now() + params.timeToLiveSeconds * 1000,\n };\n return rval;\n }\n async createNewCode(params) {\n const value = ExpiringCodeRatchet.generateCode(params);\n const rval = await this.provider.storeCode(value);\n return rval ? value : null;\n }\n async checkCode(code, context, deleteOnMatch) {\n const rval = await this.provider.checkCode(StringRatchet.trimToEmpty(code), StringRatchet.trimToEmpty(context), deleteOnMatch);\n return rval;\n }\n}\n//# sourceMappingURL=expiring-code-ratchet.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class S3ExpiringCodeProvider {\n s3CacheRatchet;\n keyName;\n constructor(s3CacheRatchet, keyName) {\n this.s3CacheRatchet = s3CacheRatchet;\n this.keyName = keyName;\n RequireRatchet.notNullOrUndefined(s3CacheRatchet, 's3CacheRatchet');\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(s3CacheRatchet.getDefaultBucket(), 's3CacheRatchet.defaultBucket');\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(keyName, 'keyName');\n }\n async fetchFile() {\n const rval = (await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyName)) || {\n data: [],\n lastModifiedEpochMS: Date.now(),\n };\n return rval;\n }\n async updateFile(vals) {\n const next = {\n data: vals || [],\n lastModifiedEpochMS: Date.now(),\n };\n next.data = next.data.filter((d) => d.expiresEpochMS > Date.now());\n Logger.info('Updating code file to %s codes', next.data.length);\n const rval = await this.s3CacheRatchet.writeObjectToCacheFile(this.keyName, next);\n return rval;\n }\n async checkCode(code, context, deleteOnMatch) {\n const val = await this.fetchFile();\n const rval = val.data.find((d) => d?.code?.toUpperCase() === code?.toUpperCase() && d?.context?.toUpperCase() === context?.toUpperCase());\n if (rval) {\n if (deleteOnMatch || rval.expiresEpochMS < Date.now()) {\n Logger.info('Stripping used/expired code from the database');\n const newData = val.data.filter((d) => d != rval);\n await this.updateFile(newData);\n }\n }\n return !!rval && rval.expiresEpochMS > Date.now();\n }\n async storeCode(code) {\n const old = await this.fetchFile();\n old.data.push(code);\n const wrote = await this.updateFile(old.data);\n return !!wrote;\n }\n}\n//# sourceMappingURL=s3-expiring-code-provider.js.map","import { ErrorRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class AwsCredentialsRatchet {\n constructor() { }\n static applySetProfileEnvironmentalVariable(newProfile) {\n if (!!process.env) {\n if (StringRatchet.trimToNull(newProfile)) {\n process.env['AWS_PROFILE'] = newProfile;\n }\n else {\n ErrorRatchet.throwFormattedErr('Cannot set profile to null/empty string');\n }\n }\n else {\n ErrorRatchet.throwFormattedErr('Cannot set profile - not in a node environment - process missing');\n }\n }\n}\n//# sourceMappingURL=aws-credentials-ratchet.js.map","export class LambdaEventDetector {\n static isValidCronEvent(event) {\n return event && event.source == 'aws.events' && event.resources && event.resources.length > 0;\n }\n static isValidSnsEvent(event) {\n return event && event.Records && event.Records.length > 0 && event.Records[0].EventSource == 'aws:sns';\n }\n static isValidDynamoDBEvent(event) {\n return event && event.Records && event.Records.length > 0 && event.Records[0].eventSource == 'aws:dynamodb';\n }\n static isValidS3Event(event) {\n return event && event.Records && event.Records.length > 0 && event.Records[0].eventSource == 'aws:s3';\n }\n static isValidApiGatewayV2WithRequestContextEvent(event) {\n return event && event.rawPath && event.requestContext && event.routeKey;\n }\n static isValidApiGatewayEvent(event) {\n return event && event.httpMethod && event.path && event.requestContext;\n }\n static isValidApiGatewayAuthorizerEvent(event) {\n return event && event.authorizationToken && event.methodArn;\n }\n static isSingleCronEvent(event) {\n return this.isValidCronEvent(event) && LambdaEventDetector.isSingleEntryEvent(event, 'resources');\n }\n static isSingleSnsEvent(event) {\n return this.isValidSnsEvent(event) && LambdaEventDetector.isSingleEntryEvent(event);\n }\n static isSingleDynamoDBEvent(event) {\n return this.isValidDynamoDBEvent(event) && LambdaEventDetector.isSingleEntryEvent(event);\n }\n static isSingleS3Event(event) {\n return this.isValidS3Event(event) && LambdaEventDetector.isSingleEntryEvent(event);\n }\n static isSingleEntryEvent(event, entryName = 'Records') {\n return event && event[entryName] && event[entryName] instanceof Array && event[entryName].length === 1;\n }\n}\n//# sourceMappingURL=lambda-event-detector.js.map","import { LambdaEventDetector } from './lambda-event-detector.js';\nexport class LambdaEventTypeGuards {\n static isValidCronEvent(event) {\n return LambdaEventDetector.isValidCronEvent(event);\n }\n static isValidSnsEvent(event) {\n return LambdaEventDetector.isValidSnsEvent(event);\n }\n static isValidDynamoDBEvent(event) {\n return LambdaEventDetector.isValidDynamoDBEvent(event);\n }\n static isValidS3Event(event) {\n return LambdaEventDetector.isValidS3Event(event);\n }\n static isValidApiGatewayV2WithRequestContextEvent(event) {\n return LambdaEventDetector.isValidApiGatewayV2WithRequestContextEvent(event);\n }\n static isValidApiGatewayEvent(event) {\n return LambdaEventDetector.isValidApiGatewayEvent(event);\n }\n static isValidApiGatewayAuthorizerEvent(event) {\n return LambdaEventDetector.isValidApiGatewayAuthorizerEvent(event);\n }\n}\n//# sourceMappingURL=lambda-event-type-guards.js.map","import { Logger } from '@bitblit/ratchet-common';\nimport { ChangeResourceRecordSetsCommand, waitUntilResourceRecordSetsChanged, } from '@aws-sdk/client-route-53';\nimport { WaiterState } from '@aws-sdk/util-waiter';\nexport class Route53Ratchet {\n route53;\n hostedZoneId;\n constructor(route53, hostedZoneId) {\n this.route53 = route53;\n this.hostedZoneId = hostedZoneId;\n if (!this.route53) {\n throw 'route53 may not be null';\n }\n }\n get route53Client() {\n return this.route53;\n }\n async changeCnameRecordTarget(domainName, target, hostedZoneId = this.hostedZoneId, ttlSeconds = 600) {\n Logger.info('Updating %s to point to %s', domainName, target);\n try {\n const params = {\n ChangeBatch: {\n Changes: [\n {\n Action: 'UPSERT',\n ResourceRecordSet: {\n Name: domainName,\n ResourceRecords: [\n {\n Value: target,\n },\n ],\n TTL: ttlSeconds,\n Type: 'CNAME',\n },\n },\n ],\n },\n HostedZoneId: hostedZoneId,\n };\n const result = await this.route53.send(new ChangeResourceRecordSetsCommand(params));\n Logger.debug('Updated domain result: %j', result);\n const waitParams = {\n Id: result.ChangeInfo.Id,\n };\n const waitResult = await waitUntilResourceRecordSetsChanged({ client: this.route53, maxWaitTime: 300 }, waitParams);\n Logger.debug('Wait responsed: %j', waitResult);\n if (waitResult.state === WaiterState.SUCCESS) {\n Logger.info('Updated %s to point to %s', domainName, hostedZoneId);\n return true;\n }\n }\n catch (err) {\n Logger.warn('Error update CName for %s with value %s: %j', domainName, target, err);\n }\n Logger.info('Cannot update %s to point to %s', domainName, target);\n return false;\n }\n}\n//# sourceMappingURL=route-53-ratchet.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class DynamoRuntimeParameterProvider {\n dynamo;\n tableName;\n constructor(dynamo, tableName) {\n this.dynamo = dynamo;\n this.tableName = tableName;\n RequireRatchet.notNullOrUndefined(this.dynamo);\n RequireRatchet.notNullOrUndefined(this.tableName);\n }\n async readParameter(groupId, paramKey) {\n Logger.silly('Reading %s / %s from underlying db', groupId, paramKey);\n const req = {\n groupId: groupId,\n paramKey: paramKey,\n };\n const rval = await this.dynamo.simpleGet(this.tableName, req);\n return rval;\n }\n async readAllParametersForGroup(groupId) {\n const qry = {\n TableName: this.tableName,\n KeyConditionExpression: 'groupId = :groupId',\n ExpressionAttributeValues: {\n ':groupId': groupId,\n },\n };\n const all = await this.dynamo.fullyExecuteQuery(qry);\n return all;\n }\n async writeParameter(toStore) {\n const rval = await this.dynamo.simplePut(this.tableName, toStore);\n return !!rval;\n }\n}\n//# sourceMappingURL=dynamo-runtime-parameter-provider.js.map","import { ErrorRatchet, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class GlobalVariableOverrideRuntimeParameterProvider {\n wrapped;\n options = {\n globalTTL: 1,\n separator: '.',\n prefix: 'RuntimeEnv-',\n suffix: '',\n };\n constructor(wrapped, opts) {\n this.wrapped = wrapped;\n RequireRatchet.notNullOrUndefined(this.wrapped, 'wrapped');\n RequireRatchet.notNullOrUndefined(global?.process?.env, '\"process\" not found - this only runs in Node, not the browser');\n if (opts) {\n this.options = opts;\n }\n RequireRatchet.notNullOrUndefined(this.options.globalTTL, 'this.options.globalTTL');\n RequireRatchet.notNullOrUndefined(this.options.separator, 'this.options.separator');\n RequireRatchet.true(this.options.globalTTL > 0, 'this.options.globalTTL must be larger than 0');\n }\n generateName(groupId, paramKey) {\n return (StringRatchet.trimToEmpty(this.options.prefix) +\n groupId +\n StringRatchet.trimToEmpty(this.options.separator) +\n paramKey +\n StringRatchet.trimToEmpty(this.options.suffix));\n }\n async readParameter(groupId, paramKey) {\n const asString = StringRatchet.trimToNull(process.env[this.generateName(groupId, paramKey)]);\n if (asString && !StringRatchet.canParseAsJson(asString)) {\n ErrorRatchet.throwFormattedErr('Cannot parse ENV override (%s / %s) as JSON - did you forget the quotes on a string?', groupId, paramKey);\n }\n const rval = asString\n ? {\n groupId: groupId,\n paramKey: paramKey,\n paramValue: asString,\n ttlSeconds: this.options.globalTTL,\n }\n : await this.wrapped.readParameter(groupId, paramKey);\n return rval;\n }\n async readAllParametersForGroup(groupId) {\n return this.wrapped.readAllParametersForGroup(groupId);\n }\n async writeParameter(toStore) {\n return this.wrapped.writeParameter(toStore);\n }\n}\n//# sourceMappingURL=global-variable-override-runtime-parameter-provider.js.map","import { Logger } from '@bitblit/ratchet-common';\nexport class MemoryRuntimeParameterProvider {\n data;\n constructor(data = Promise.resolve({})) {\n this.data = data;\n }\n async readParameter(groupId, paramKey) {\n Logger.silly('Reading %s / %s from underlying db', groupId, paramKey);\n const d = await this.data;\n return d[groupId + '::' + paramKey];\n }\n async readAllParametersForGroup(groupId) {\n const d = await this.data;\n const out = [];\n Object.keys(d).forEach((k) => {\n if (k.startsWith(groupId)) {\n out.push(d[k]);\n }\n });\n return out;\n }\n async writeParameter(toStore) {\n const d = await this.data;\n d[toStore.groupId + '::' + toStore.paramKey] = toStore;\n return true;\n }\n}\n//# sourceMappingURL=memory-runtime-parameter-provider.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class RuntimeParameterRatchet {\n provider;\n cache = new Map();\n constructor(provider) {\n this.provider = provider;\n RequireRatchet.notNullOrUndefined(this.provider);\n }\n async fetchParameter(groupId, paramKey, defaultValue = null, forceFreshRead = false) {\n Logger.debug('Reading parameter %s / %s / Force : %s', groupId, paramKey, forceFreshRead);\n const cached = this.cache.get(RuntimeParameterRatchet.toCacheStoreKey(groupId, paramKey));\n let rval = null;\n const now = new Date().getTime();\n if (!forceFreshRead && !!cached) {\n const oldest = !!cached.ttlSeconds ? now - cached.ttlSeconds * 1000 : 0;\n if (cached.storedEpochMS > oldest) {\n Logger.silly('Fetched %s / %s from cache', groupId, paramKey);\n rval = JSON.parse(cached.paramValue);\n }\n }\n if (!rval) {\n const temp = await this.readUnderlyingEntry(groupId, paramKey);\n if (!!temp) {\n this.addToCache(temp);\n rval = JSON.parse(temp.paramValue);\n }\n }\n rval = rval || defaultValue;\n return rval;\n }\n async fetchAllParametersForGroup(groupId) {\n const all = await this.readUnderlyingEntries(groupId);\n const rval = new Map();\n all.forEach((t) => {\n rval.set(t.paramKey, JSON.parse(t.paramValue));\n this.addToCache(t);\n });\n return rval;\n }\n async readUnderlyingEntry(groupId, paramKey) {\n return this.provider.readParameter(groupId, paramKey);\n }\n async readUnderlyingEntries(groupId) {\n return this.provider.readAllParametersForGroup(groupId);\n }\n async storeParameter(groupId, paramKey, paramValue, ttlSeconds) {\n const toStore = {\n groupId: groupId,\n paramKey: paramKey,\n paramValue: JSON.stringify(paramValue),\n ttlSeconds: ttlSeconds,\n };\n const wrote = await this.provider.writeParameter(toStore);\n return this.provider.readParameter(groupId, paramKey);\n }\n static toCacheStoreKey(groupId, paramKey) {\n return groupId + ':::' + paramKey;\n }\n addToCache(temp) {\n if (!!temp) {\n const now = new Date().getTime();\n const toStore = Object.assign({ storedEpochMS: now }, temp);\n this.cache.set(RuntimeParameterRatchet.toCacheStoreKey(temp.groupId, temp.paramKey), toStore);\n }\n }\n clearCache() {\n Logger.debug('Clearing runtime parameter cache');\n this.cache = new Map();\n }\n}\n//# sourceMappingURL=runtime-parameter-ratchet.js.map","import { CopyObjectCommand, GetObjectCommand, ListObjectsV2Command, } from '@aws-sdk/client-s3';\nimport { Logger, PromiseRatchet, RequireRatchet } from '@bitblit/ratchet-common';\nimport { Upload } from '@aws-sdk/lib-storage';\nexport class S3LocationSyncRatchet {\n config;\n constructor(config) {\n RequireRatchet.notNullOrUndefined(config, 'config');\n this.config = config;\n if (!this.config.maxNumThreads) {\n this.config.maxNumThreads = 15;\n }\n if (!this.config.maxRetries) {\n this.config.maxRetries = 5;\n }\n }\n updateSrcPrefix(prefix) {\n this.config.srcPrefix = prefix;\n }\n updateDstPrefix(prefix) {\n this.config.dstPrefix = prefix;\n }\n async copyObject(key, size, express = false) {\n const dstKey = key.replace(this.config.srcPrefix, this.config.dstPrefix);\n let completedCopying = false;\n let retries = 0;\n while (!completedCopying && retries < this.config.maxRetries) {\n Logger.debug(`${retries > 0 ? `Retry ${retries} ` : ''}${express ? 'Express' : 'Slow'} copying\n [${[this.config.srcBucket, key].join('/')} ---> ${[this.config.dstBucket, dstKey].join('/')}]`);\n try {\n if (express) {\n const params = {\n CopySource: encodeURIComponent([this.config.srcBucket, key].join('/')),\n Bucket: this.config.dstBucket,\n Key: dstKey,\n MetadataDirective: 'COPY',\n };\n await this.config.dstS3.send(new CopyObjectCommand(params));\n }\n else {\n const fetched = await this.config.srcS3.send(new GetObjectCommand({ Bucket: this.config.srcBucket, Key: key }));\n const params = {\n Bucket: this.config.dstBucket,\n Key: dstKey,\n Body: fetched.Body,\n ContentLength: size,\n };\n const upload = new Upload({\n client: this.config.dstS3,\n params: params,\n tags: [],\n queueSize: 4,\n partSize: 1024 * 1024 * 5,\n leavePartsOnError: false,\n });\n upload.on('httpUploadProgress', (progress) => {\n Logger.info('Uploading : %s', progress);\n });\n await upload.done();\n }\n completedCopying = true;\n }\n catch (err) {\n Logger.warn(`Can't ${express ? 'express' : 'slow'} copy\n [${[this.config.srcBucket, key].join('/')} ---> ${[this.config.dstBucket, dstKey].join('/')}]: %j`, err);\n retries++;\n }\n }\n Logger.debug(`Finished ${express ? 'express' : 'slow'} copying\n [${[this.config.srcBucket, key].join('/')} ---> ${[this.config.dstBucket, dstKey].join('/')}]`);\n }\n async listObjects(bucket, prefix, s3) {\n Logger.info(`Scanning bucket [${[bucket, prefix].join('/')}]`);\n const params = {\n Bucket: bucket,\n Prefix: prefix,\n };\n let more = true;\n const rval = {};\n while (more) {\n const response = await s3.send(new ListObjectsV2Command(params));\n more = response.IsTruncated;\n response.Contents.forEach((obj) => {\n rval[obj.Key] = { Key: obj.Key, LastModified: obj.LastModified, ETag: obj.ETag, Size: obj.Size };\n });\n if (more) {\n params.ContinuationToken = response.NextContinuationToken;\n }\n }\n return rval;\n }\n async startSyncing() {\n Logger.info(`Syncing [${this.config.srcBucket}/${this.config.srcPrefix}\n ---> ${this.config.dstBucket}/${this.config.dstPrefix}]`);\n const cp = async (obj) => {\n await this.copyObject(obj.Key, obj.Size);\n };\n let cmpResult = await this.compareSrcAndDst();\n if (cmpResult.needCopy.length > 0 || cmpResult.diff.length > 0) {\n await PromiseRatchet.runBoundedParallelSingleParam(cp, cmpResult.needCopy, this, this.config.maxNumThreads);\n await PromiseRatchet.runBoundedParallelSingleParam(cp, cmpResult.diff, this, this.config.maxNumThreads);\n Logger.info('Verifying...');\n cmpResult = await this.compareSrcAndDst();\n Logger.debug('Compare result %j', cmpResult);\n }\n return cmpResult.needCopy.length === 0 && cmpResult.diff.length === 0;\n }\n async compareSrcAndDst() {\n const getSrc = this.listObjects(this.config.srcBucket, this.config.srcPrefix, this.config.srcS3);\n const getDst = this.listObjects(this.config.dstBucket, this.config.dstPrefix, this.config.dstS3);\n const srcObjs = await getSrc;\n const dstObjs = await getDst;\n const rval = {\n needCopy: [],\n existed: [],\n diff: [],\n };\n await PromiseRatchet.runBoundedParallelSingleParam((key) => {\n const sObj = srcObjs[key];\n const dstKey = key.replace(this.config.srcPrefix, this.config.dstPrefix);\n const dObj = dstObjs.hasOwnProperty(dstKey) ? dstObjs[dstKey] : undefined;\n if (!dObj) {\n rval.needCopy.push(sObj);\n return;\n }\n if (sObj.Size !== dObj.Size) {\n rval.diff.push(sObj);\n return;\n }\n if (sObj.LastModified.getTime() <= dObj.LastModified.getTime()) {\n rval.existed.push(sObj);\n return;\n }\n rval.diff.push(sObj);\n }, Object.keys(srcObjs), this, this.config.maxNumThreads);\n return rval;\n }\n}\n//# sourceMappingURL=s3-location-sync-ratchet.js.map","import { RequireRatchet } from '@bitblit/ratchet-common';\nexport class S3Ratchet {\n static checkS3UrlForValidity(value) {\n let rval = false;\n if (value) {\n rval = value.startsWith('s3://') && value.trim().length > 5;\n }\n return rval;\n }\n static extractBucketFromURL(value) {\n RequireRatchet.true(S3Ratchet.checkS3UrlForValidity(value), 'invalid s3 url');\n const idx1 = value.indexOf('/', 5);\n const rval = idx1 > 0 ? value.substring(5, idx1) : value.substring(5);\n return rval;\n }\n static extractKeyFromURL(value) {\n RequireRatchet.true(S3Ratchet.checkS3UrlForValidity(value), 'invalid s3 url');\n const idx1 = value.indexOf('/', 5);\n const rval = idx1 > 0 ? value.substring(idx1 + 1) : null;\n return rval;\n }\n}\n//# sourceMappingURL=s3-ratchet.js.map","import { Base64Ratchet, ErrorRatchet, Logger, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { SendRawEmailCommand } from '@aws-sdk/client-ses';\nimport { DateTime } from 'luxon';\nexport class Mailer {\n ses;\n config;\n static EMAIL = new RegExp('.+@.+\\\\.[a-z]+');\n constructor(ses, config = {}) {\n this.ses = ses;\n this.config = config;\n RequireRatchet.notNullOrUndefined(this.ses);\n if (!!config.archive && !config.archive.getDefaultBucket()) {\n throw new Error('If archive specified, must set a default bucket');\n }\n }\n get sESClient() {\n return this.ses;\n }\n async fillEmailBody(rts, context, htmlTemplateName, txtTemplateName = null, layoutName = null, partialNames = null) {\n RequireRatchet.notNullOrUndefined(htmlTemplateName);\n if (!this.config.templateRenderer) {\n ErrorRatchet.throwFormattedErr('Cannot use fill body if template renderer not set');\n }\n rts.htmlMessage = await this.config.templateRenderer.renderTemplate(htmlTemplateName, context, layoutName, partialNames);\n rts.txtMessage = !!txtTemplateName ? await this.config.templateRenderer.renderTemplate(txtTemplateName, context) : null;\n return rts;\n }\n async fillEmailBodyAndSend(rts, context, htmlTemplateName, txtTemplateName = null, layoutName = null, partialNames = null) {\n const newVal = await this.fillEmailBody(rts, context, htmlTemplateName, txtTemplateName, layoutName, partialNames);\n const rval = await this.sendEmail(newVal);\n return rval;\n }\n filterEmailsToValid(emails) {\n const rval = (emails || []).filter((e) => {\n if (!this.config.allowedDestinationEmails || this.config.allowedDestinationEmails.length == 0) {\n return true;\n }\n else {\n const match = this.config.allowedDestinationEmails.find((s) => s.test(e));\n return !!match;\n }\n });\n return rval;\n }\n async archiveEmailIfConfigured(rts) {\n let rval = false;\n if (!!rts && !!this.config.archive && !rts.doNotArchive) {\n Logger.debug('Archiving outbound email to : %j', rts.destinationAddresses);\n let targetPath = StringRatchet.trimToEmpty(this.config.archivePrefix);\n if (!targetPath.endsWith('/')) {\n targetPath += '/';\n }\n const now = DateTime.utc();\n targetPath +=\n 'year=' +\n now.toFormat('yyyy') +\n '/month=' +\n now.toFormat('MM') +\n '/day=' +\n now.toFormat('dd') +\n '/hour=' +\n now.toFormat('HH') +\n '/' +\n now.toFormat('mm_ss__SSS');\n targetPath += '.json';\n try {\n await this.config.archive.writeObjectToCacheFile(targetPath, rts);\n rval = true;\n }\n catch (err) {\n Logger.warn('Failed to archive email %s %j : %s', targetPath, rts, err);\n }\n }\n return rval;\n }\n applyLimitsToBodySizesIfAnyInPlace(rts) {\n if (this.config.maxMessageBodySizeInBytes) {\n const txtSize = StringRatchet.trimToEmpty(rts.txtMessage).length;\n const htmlSize = StringRatchet.trimToEmpty(rts.htmlMessage).length;\n const totalSize = txtSize + htmlSize;\n if (totalSize > this.config.maxMessageBodySizeInBytes) {\n Logger.warn('Max message size is %d but size is %d - converting', this.config.maxMessageBodySizeInBytes, totalSize);\n rts.attachments = rts.attachments || [];\n if (StringRatchet.trimToNull(rts.txtMessage)) {\n const txtAttach = {\n filename: 'original-txt-body.txt',\n contentType: 'text/plain',\n base64Data: Base64Ratchet.generateBase64VersionOfString(rts.txtMessage),\n };\n rts.attachments.push(txtAttach);\n }\n if (StringRatchet.trimToNull(rts.htmlMessage)) {\n const htmlAttach = {\n filename: 'original-html-body.html',\n contentType: 'text/html',\n base64Data: Base64Ratchet.generateBase64VersionOfString(rts.htmlMessage),\n };\n rts.attachments.push(htmlAttach);\n }\n rts.htmlMessage = null;\n rts.txtMessage = 'The message was too large and was converted to attachment(s). Please see attached files for content';\n }\n }\n }\n applyLimitsToAttachmentSizesIfAnyInPlace(rts) {\n if (this.config.maxAttachmentSizeInBase64Bytes) {\n const filtered = [];\n if (rts.attachments) {\n rts.attachments.forEach((a) => {\n if (a.base64Data && a.base64Data.length < this.config.maxAttachmentSizeInBase64Bytes) {\n filtered.push(a);\n }\n else {\n Logger.warn('Removing too-large attachment : %s : %s : %d', a.filename, a.contentType, a.base64Data.length);\n filtered.push({\n filename: 'attachment-removed-notice-' + StringRatchet.createRandomHexString(4) + '.txt',\n contentType: 'text/plain',\n base64Data: Base64Ratchet.generateBase64VersionOfString('Attachment ' +\n a.filename +\n ' of type ' +\n a.contentType +\n ' was removed since it was ' +\n a.base64Data.length +\n ' bytes but max allowed is ' +\n this.config.maxAttachmentSizeInBase64Bytes),\n });\n }\n });\n }\n rts.attachments = filtered;\n }\n }\n async sendEmail(inRts) {\n RequireRatchet.notNullOrUndefined(inRts, 'RTS must be defined');\n RequireRatchet.notNullOrUndefined(inRts.destinationAddresses, 'Destination addresses must be defined');\n let rval = null;\n let toAddresses = this.filterEmailsToValid(inRts.destinationAddresses);\n const autoBcc = inRts.doNotAutoBcc ? [] : this.config.autoBccAddresses || [];\n const bccAddresses = (inRts.bccAddresses || []).concat(autoBcc);\n if (toAddresses.length === 0 && bccAddresses.length > 0) {\n Logger.debug('Destination emails filtered to none but BCC defined, copying BCC');\n toAddresses = bccAddresses;\n }\n const rts = Object.assign({}, inRts);\n rts.srcDestinationAddresses = inRts.destinationAddresses;\n rts.srcBccAddresses = inRts.bccAddresses;\n rts.destinationAddresses = toAddresses;\n rts.bccAddresses = bccAddresses;\n this.applyLimitsToBodySizesIfAnyInPlace(rts);\n this.applyLimitsToAttachmentSizesIfAnyInPlace(rts);\n await this.archiveEmailIfConfigured(rts);\n if (rts.destinationAddresses.length === 0) {\n Logger.info('After cleaning email lists, no destination addresses left - not sending email');\n }\n else {\n const toLine = 'To: ' + rts.destinationAddresses.join(', ') + '\\n';\n const bccLine = !!rts.bccAddresses && rts.bccAddresses.length > 0 ? 'Bcc: ' + rts.bccAddresses.join(', ') + '\\n' : '';\n try {\n const from = rts.fromAddress || this.config.defaultSendingAddress;\n const boundary = 'NextPart';\n const altBoundary = 'AltPart';\n let rawMail = 'From: ' + from + '\\n';\n rawMail += toLine;\n rawMail += bccLine;\n rawMail += 'Subject: ' + rts.subject + '\\n';\n rawMail += 'MIME-Version: 1.0\\n';\n rawMail += 'Content-Type: multipart/mixed; boundary=\"' + boundary + '\"\\n';\n rawMail += '\\n\\n--' + boundary + '\\n';\n rawMail += 'Content-Type: multipart/alternative; boundary=\"' + altBoundary + '\"\\n';\n if (!!StringRatchet.trimToNull(rts.htmlMessage)) {\n rawMail += '\\n\\n--' + altBoundary + '\\n';\n rawMail += 'Content-Type: text/html; charset=\"UTF-8\"\\n\\n';\n rawMail += rts.htmlMessage;\n }\n if (!!StringRatchet.trimToNull(rts.txtMessage)) {\n rawMail += '\\n\\n--' + altBoundary + '\\n';\n rawMail += 'Content-Type: text/plain\\n\\n';\n rawMail += rts.txtMessage;\n }\n rawMail += '\\n\\n--' + altBoundary + '--\\n';\n if (rts.attachments) {\n rts.attachments.forEach((a) => {\n rawMail += '\\n\\n--' + boundary + '\\n';\n rawMail += 'Content-Type: ' + a.contentType + '; name=\"' + a.filename + '\"\\n';\n rawMail += 'Content-Transfer-Encoding: base64\\n';\n rawMail += 'Content-Disposition: attachment\\n\\n';\n rawMail += a.base64Data.replace(/([^\\0]{76})/g, '$1\\n') + '\\n\\n';\n });\n }\n rawMail += '\\n\\n--' + boundary + '--\\n';\n const params = {\n RawMessage: { Data: new TextEncoder().encode(rawMail) },\n };\n rval = await this.ses.send(new SendRawEmailCommand(params));\n }\n catch (err) {\n Logger.error('Error while processing email: %s', err, err);\n }\n }\n return rval;\n }\n static validEmail(email) {\n return email !== null && Mailer.EMAIL.test(email);\n }\n}\n//# sourceMappingURL=mailer.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nimport { PublishCommand, SNSClient } from '@aws-sdk/client-sns';\nexport class SnsRatchet {\n sns;\n topicArn;\n constructor(sns = new SNSClient({ region: 'us-east-1' }), topicArn) {\n this.sns = sns;\n this.topicArn = topicArn;\n RequireRatchet.notNullOrUndefined(this.sns, 'sns');\n RequireRatchet.notNullOrUndefined(this.topicArn, 'topicArn');\n }\n get snsClient() {\n return this.sns;\n }\n async sendMessage(inMsg, suppressErrors = false) {\n let result = null;\n try {\n const safeInMsg = inMsg ? inMsg : 'NO-MESSAGE-PROVIDED';\n const msg = typeof safeInMsg === 'string' ? safeInMsg : JSON.stringify(safeInMsg);\n const params = {\n TopicArn: this.topicArn,\n Message: msg,\n };\n Logger.debug('Sending via SNS : %j', params);\n result = await this.sns.send(new PublishCommand(params));\n }\n catch (err) {\n if (suppressErrors) {\n Logger.error('Failed to fire SNS notification : %j : %s', inMsg, err);\n }\n else {\n throw err;\n }\n }\n return result;\n }\n async conditionallySendMessage(inMsg, condition, suppressErrors = false) {\n let rval = null;\n if (condition) {\n rval = await this.sendMessage(inMsg, suppressErrors);\n }\n else {\n Logger.info('Not sending message, condition was false : %j', inMsg);\n }\n return rval;\n }\n}\n//# sourceMappingURL=sns-ratchet.js.map","import { Logger, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { PutItemCommand } from '@aws-sdk/client-dynamodb';\nexport class DynamoDbSyncLock {\n ratchet;\n tableName;\n constructor(ratchet, tableName) {\n this.ratchet = ratchet;\n this.tableName = tableName;\n RequireRatchet.notNullOrUndefined(ratchet, 'ratchet');\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(this.tableName), 'tableName');\n }\n async acquireLock(lockKey, expirationSeconds = 30) {\n let rval = false;\n if (!!lockKey && !!expirationSeconds) {\n const nowSeconds = Math.floor(new Date().getTime() / 1000);\n const row = {\n lockingKey: lockKey,\n timestamp: nowSeconds,\n expires: nowSeconds + expirationSeconds,\n };\n const params = {\n Item: row,\n ReturnConsumedCapacity: 'TOTAL',\n TableName: this.tableName,\n ConditionExpression: 'attribute_not_exists(lockingKey)',\n };\n try {\n const pio = await this.ratchet.getDDB().send(new PutItemCommand(params));\n rval = true;\n }\n catch (err) {\n if (String(err).indexOf('ConditionalCheckFailedException') > -1) {\n Logger.silly('Unable to acquire lock on %s', lockKey);\n }\n }\n }\n return rval;\n }\n async releaseLock(lockKey) {\n if (StringRatchet.trimToNull(lockKey)) {\n try {\n const dio = await this.ratchet.simpleDelete(this.tableName, { lockingKey: lockKey });\n Logger.silly('Released lock %s : %s', lockKey, dio);\n }\n catch (err) {\n Logger.warn('Failed to release lock key : %s : %s', lockKey, err, err);\n }\n }\n }\n async clearExpiredSyncLocks() {\n const nowSeconds = Math.floor(new Date().getTime() / 1000);\n const scan = {\n TableName: this.tableName,\n FilterExpression: 'expires < :now',\n ExpressionAttributeValues: {\n ':now': nowSeconds,\n },\n };\n const vals = await this.ratchet.fullyExecuteScan(scan);\n const keysOnly = vals.map((v) => {\n const next = { lockingKey: v['lockingKey'] };\n return next;\n });\n const removed = await this.ratchet.deleteAllInBatches(this.tableName, keysOnly, 25);\n return removed;\n }\n}\n//# sourceMappingURL=dynamo-db-sync-lock.js.map","import { StringRatchet } from '@bitblit/ratchet-common';\nexport class MemorySyncLock {\n _locks = new Map();\n constructor() { }\n async acquireLock(lockKey, expirationSeconds = 30) {\n let rval = false;\n if (StringRatchet.trimToNull(lockKey)) {\n const now = Date.now();\n const val = this._locks.get(lockKey);\n if (!val || val < now) {\n this._locks.set(lockKey, now + expirationSeconds * 1000);\n rval = true;\n }\n }\n return rval;\n }\n async releaseLock(lockKey) {\n if (StringRatchet.trimToNull(lockKey)) {\n this._locks.delete(lockKey);\n }\n }\n async clearExpiredSyncLocks() {\n const toRemove = [];\n const now = Date.now();\n this._locks.forEach((v, k) => {\n if (v < now) {\n toRemove.push(k);\n }\n });\n toRemove.forEach((k) => {\n this._locks.delete(k);\n });\n return toRemove.length;\n }\n}\n//# sourceMappingURL=memory-sync-lock.js.map"],"names":["AwsBatchBackgroundProcessor","batchRatchet","validTaskNames","constructor","this","RequireRatchet","notNullOrUndefined","batchClient","defaultJobDefinition","defaultQueueName","async","taskName","data","meta","length","StringRatchet","trimToNull","includes","ErrorRatchet","throwFormattedErr","Logger","info","rval","jobName","DateTime","utc","toFormat","options","jobDefinition","jobQueue","parameters","taskData","JSON","stringify","taskMetadata","scheduleJob","jobId","err","error","AwsBatchRatchet","_batchClient","_defaultQueueName","_defaultJobDefinition","send","SubmitJobCommand","jobStatus","queueName","listJobs","request","nextToken","tmp","ListJobsCommand","concat","jobSummaryList","RatchetAwsInfo","static","version","hash","branch","tag","timeBuiltISO","notes","DynamoDbStorageProvider","dynamo","opts","tableName","hashKeyName","true","useRangeKeys","rangeKeyName","hashKeyValue","createKeyObject","cacheKey","keys","cleanDynamoFieldsFromObjectInPlace","dynamoExpiresColumnName","extractKeysFromObject","dKey","simpleGet","value","toSave","Object","assign","expiresEpochMS","Math","floor","simplePut","simpleDelete","allKeys","readAll","map","a","deleteAllInBatches","qry","TableName","KeyConditionExpression","ExpressionAttributeNames","ExpressionAttributeValues","fullyExecuteQuery","scan","fullyExecuteScan","forEach","r","S3StorageProvider","s3CacheRatchet","prefix","getDefaultBucket","keyToPath","trimToEmpty","endsWith","fetchCacheFileAsObject","writeObjectToCacheFile","removeCacheFile","directChildrenOfPrefix","Promise","all","k","removeFromCache","readFromCache","SimpleCache","provider","defaultTimeToLiveMS","createDefaultReadOptions","maxStalenessMS","timeToLiveMS","cacheNullValues","producer","silly","now","Date","getTime","debug","createdEpochMS","generated","storeInCache","wrapper","fetchWrapper","returnOldValue","clearCache","CloudWatchLogGroupRatchet","logGroup","awsCWLogs","CloudWatchLogsClient","region","cloudWatchLogsClient","startTimestamp","endTimestamp","params","logGroupName","orderBy","temp","DescribeLogStreamsCommand","logStreams","s","lastEventTimestamp","firstEventTimestamp","push","readLogStreams","logStreamName","filter","sortEvents","maxEvents","sw","StopWatch","endTime","startTime","filterPattern","dump","FilterLogEventsCommand","events","sort","b","timestamp","message","localeCompare","log","CloudWatchLogsRatchet","cwLogs","cloudwatchLogs","maxToRemove","oldestEventEpochMS","streamSearchParams","oldestEventTester","totalStreams","removedStreams","failedRemovedStreams","waitPerDescribe","streams","i","st","oldWait","min","waitPer","delParams","type","storedBytes","removed","retry","MAX_DELETE_RETRIES","DeleteLogStreamCommand","PromiseRatchet","wait","warn","stream","findStreamWithOldestEventInGroup","logGroupNamePrefix","res","DescribeLogGroupsCommand","logGroups","groups","req","DeleteLogGroupCommand","findLogGroups","removeLogGroups","sqr","resp","StartQueryCommand","delayMS","status","GetQueryResultsCommand","queryId","StopQueryCommand","CloudWatchMetricsUnit","CloudWatchMetricsRatchet","cw","cloudWatch","CloudWatchClient","apiVersion","cloudWatchClient","namespace","metric","dims","unit","None","timestampDate","highResolution","cwDims","d","Name","key","Value","storageResolution","metricData","Namespace","MetricData","MetricName","Dimensions","Unit","String","Timestamp","StorageResolution","result","PutMetricDataCommand","minuteUTC","query","Error","cnt","dynamoRatchet","fullyExecuteQueryCount","fullyExecuteScanCount","parseDateString","split","join","parseDate","fromISO","toJSDate","metricRes","writeSingleMetric","Count","count","DaemonUtil","Buffer","from","cache","id","s3Key","newState","title","lastUpdatedEpochMS","lastUpdatedMessage","targetFileName","startedEpochMS","completedEpochMS","link","contentType","writeState","DEFAULT_CONTENT","contents","s3meta","DAEMON_METADATA_KEY","Bucket","Key","ContentType","Metadata","Body","Blob","ContentDisposition","written","getS3Client","PutObjectCommand","stat","inStat","updateMessage","overrideTargetFileName","upload","Upload","client","tags","queueSize","partSize","leavePartsOnError","on","progress","done","newMessage","s3Cache","path","fetchMetaForCacheFile","metaString","parse","preSignedDownloadUrlForCacheFile","S3CacheRatchet","s3","defaultBucket","s3Client","input","seconds","CacheControl","bucket","bucketVal","GetObjectCommand","NoSuchKey","fetchCacheFileAsS3GetObjectCommandOutput","transformToWebStream","out","transformToByteArray","transformToString","fetchCacheFileAsString","DeleteObjectCommand","dataObject","template","json","writeStringToCacheFile","dataString","StreamRatchet","stringToWebReadableStream","writeStreamToCacheFile","srcPrefix","targetPrefix","targetRatchet","recurseSubFolders","sourceFiles","targetFiles","sourceFile","dumpExpected","subs","synchronize","shouldCopy","srcMeta","targetMeta","ETag","srcStream","fetchCacheFileAsReadableStream","undefined","HeadObjectCommand","LastModified","srcKey","dstKey","srcBucket","dstBucket","CopySource","MetadataDirective","CopyObjectCommand","copyFile","expirationSeconds","getCommand","getSignedUrl","expiresIn","expandFiles","maxToReturn","returnValue","Prefix","Delimiter","response","ListObjectsCommand","prefixLength","cp","substring","expanded","name","size","Marker","NextMarker","idx","next","ContinuationToken","NextContinuationToken","CommonPrefixes","p","explicitBucket","Daemon","_defaultGroup","jwtRatchet","DEFAULT_DEFAULT_GROUP","defaultGroup","token","daemonKey","createTokenString","toString","pathToKey","generatePath","group","generatePrefix","createType4Guid","start","olderThanSeconds","original","list","test","proms","listKeys","itemPath","publicToken","parsed","decodeToken","abort","finalize","PrototypeDao","cfg","guidCreateFunction","guidFieldName","createdEpochMSFieldName","updatedEpochMSFieldName","createdUtcTimestampFieldName","updatedUtcTimestampFieldName","defaultDaoConfig","loadDatabase","items","storeDatabase","lastModifiedEpochMS","guids","old","fetchAll","t","toISO","guid","find","fieldDotPath","fieldValue","searchByFieldMap","matchAll","val","MapRatchet","findValueDotPath","S3PrototypeDaoProvider","keyName","notNullUndefinedOrOnlyWhitespaceString","inDb","S3SimpleDao","buildPathPrefix","buildFullPath","fullPath","fileExists","item","fetch","promises","listItems","DynamoRatchet","awsDDB","dynamoDBDocumentClient","getDDB","Limit","throughputSafeScanOrQuery","o","scanPromise","Items","ScanCommand","QueryCommand","proc","maxTries","inCurrentTry","currentTry","objectIsErrorWithProvisionedThroughputExceededExceptionCode","pow","Select","scannedCount","pages","qryResults","myLimit","queryPromise","LastEvaluatedKey","end","DurationRatchet","formatMsDuration","softLimit","fullyExecuteProcessOverQuery","v","blankPages","fullyExecuteProcessOverScan","elements","batchSize","batchItems","el","PutRequest","Item","ReturnConsumedCapacity","curBatch","slice","RequestItems","ReturnItemCollectionMetrics","tryCount","batchResults","BatchWriteCommand","UnprocessedItems","backoff","keyNames","keyDataSrc","keysOnly","stripAllToKeysOnly","fetchAllInBatches","inKeys","batches","remain","tableEntry","Keys","nextBatch","BatchGetCommand","Responses","UnprocessedKeys","DeleteRequest","autoRetryCount","PutCommand","fieldName","ConditionExpression","wrote","simplePutOnlyIfFieldIsNullOrUndefined","adjustFunction","maxAdjusts","pio","attrNames","attrValues","condExp","adjustCount","newValue","holder","GetCommand","counterAttributeName","deleteOnZero","UpdateExpression","ReturnValues","updateFailed","UpdateItemCommand","Attributes","DeleteCommand","counterFieldName","increment","update","ui","NumberRatchet","safeNumber","ob","rem","cleanObject","keysNames","stripToKeysOnly","DynamoTableRatchet","waitForDelete","DeleteTableCommand","waitForTableDelete","waitForReady","replaceIfExists","tableExists","deleteTable","CreateTableCommand","waitForTableReady","safeDescribeTable","Table","TableStatus","ListTablesCommand","TableNames","ExclusiveStartTableName","LastEvaluatedTableName","DescribeTableCommand","ResourceNotFoundException","srcTableName","dstTableName","overrides","copyData","fErr","srcTableDef","AttributeDefinitions","KeySchema","GlobalSecondaryIndexes","createInput","LocalSecondaryIndexes","gi","output","ProvisionedThroughput","WriteCapacityUnits","ReadCapacityUnits","BillingMode","BillingModeSummary","StreamSpecification","SSESpecification","SSEDescription","Tags","TableClass","TableClassSummary","DeletionProtectionEnabled","HashSpreader","spots","buckets","separator","alphabet","_allSlots","allUnique","stringContainsOnlyAlphanumeric","permutations","allPerms","allPermutationsOfLength","allBuckets","randomBucket","random","allSpreadValues","allSpreadValuesForArray","inputs","addSpreader","extractBucket","loc","charAt","removeBucket","Ec2Ratchet","availabilityZone","ec2","ec2InstanceConnect","EC2Client","EC2InstanceConnectClient","eC2Client","eC2InstanceConnectClient","instanceId","maxWaitForShutdownMS","stopParams","InstanceIds","DryRun","StopInstancesCommand","describeInstance","State","Code","maxWaitForStartupMS","startParams","StartInstancesCommand","PublicIpAddress","listAllInstances","instanceIds","NextToken","DescribeInstancesCommand","Reservations","Instances","publicKeyString","instanceOsUser","userName","InstanceId","AvailabilityZone","InstanceOSUser","SSHPublicKey","SendSSHPublicKeyCommand","CascadeEnvironmentServiceProvider","providers","fetchConfig","EnvVarEnvironmentServiceProvider","envVarName","src","process","env","global","toParse","EnvironmentService","readPromiseCache","Map","maxRetries","backoffMultiplierMS","defaultEnvironmentServiceConfig","has","set","getConfigUncached","get","waitMS","FixedEnvironmentServiceProvider","record","m","S3EnvironmentServiceProvider","ratchet","bucketName","s3Override","S3Client","readPath","pathPrefix","pathSuffix","SsmEnvironmentServiceProvider","ssmEncrypted","ssm","SSMClient","WithDecryption","GetParameterCommand","Parameter","errCode","toLowerCase","indexOf","errMsg","DynamoExpiringCodeProvider","code","context","deleteOnMatch","expCode","ConsumedCapacity","CapacityUnits","dtr","ExpiringCodeRatchet","timeToLiveSeconds","generateCode","storeCode","checkCode","S3ExpiringCodeProvider","vals","fetchFile","toUpperCase","newData","updateFile","AwsCredentialsRatchet","newProfile","LambdaEventDetector","event","source","resources","Records","EventSource","eventSource","rawPath","requestContext","routeKey","httpMethod","authorizationToken","methodArn","isValidCronEvent","isSingleEntryEvent","isValidSnsEvent","isValidDynamoDBEvent","isValidS3Event","entryName","Array","LambdaEventTypeGuards","isValidApiGatewayV2WithRequestContextEvent","isValidApiGatewayEvent","isValidApiGatewayAuthorizerEvent","Route53Ratchet","route53","hostedZoneId","route53Client","domainName","target","ttlSeconds","ChangeBatch","Changes","Action","ResourceRecordSet","ResourceRecords","TTL","Type","HostedZoneId","ChangeResourceRecordSetsCommand","waitParams","Id","ChangeInfo","waitResult","waitUntilResourceRecordSetsChanged","maxWaitTime","state","WaiterState","SUCCESS","DynamoRuntimeParameterProvider","groupId","paramKey","toStore","GlobalVariableOverrideRuntimeParameterProvider","wrapped","globalTTL","suffix","generateName","asString","canParseAsJson","paramValue","readParameter","readAllParametersForGroup","writeParameter","MemoryRuntimeParameterProvider","resolve","startsWith","RuntimeParameterRatchet","defaultValue","forceFreshRead","cached","toCacheStoreKey","oldest","storedEpochMS","readUnderlyingEntry","addToCache","readUnderlyingEntries","S3LocationSyncRatchet","config","maxNumThreads","updateSrcPrefix","updateDstPrefix","dstPrefix","express","replace","completedCopying","retries","encodeURIComponent","dstS3","fetched","srcS3","ContentLength","more","ListObjectsV2Command","IsTruncated","Contents","obj","Size","copyObject","cmpResult","compareSrcAndDst","needCopy","diff","runBoundedParallelSingleParam","getSrc","listObjects","getDst","srcObjs","dstObjs","existed","sObj","dObj","hasOwnProperty","S3Ratchet","trim","checkS3UrlForValidity","idx1","Mailer","ses","RegExp","archive","sESClient","rts","htmlTemplateName","txtTemplateName","layoutName","partialNames","templateRenderer","htmlMessage","renderTemplate","txtMessage","newVal","fillEmailBody","sendEmail","filterEmailsToValid","emails","e","allowedDestinationEmails","doNotArchive","destinationAddresses","targetPath","archivePrefix","applyLimitsToBodySizesIfAnyInPlace","maxMessageBodySizeInBytes","totalSize","attachments","txtAttach","filename","base64Data","Base64Ratchet","generateBase64VersionOfString","htmlAttach","applyLimitsToAttachmentSizesIfAnyInPlace","maxAttachmentSizeInBase64Bytes","filtered","createRandomHexString","inRts","toAddresses","autoBcc","doNotAutoBcc","autoBccAddresses","bccAddresses","srcDestinationAddresses","srcBccAddresses","archiveEmailIfConfigured","toLine","bccLine","fromAddress","defaultSendingAddress","boundary","altBoundary","rawMail","subject","RawMessage","Data","TextEncoder","encode","SendRawEmailCommand","email","EMAIL","SnsRatchet","sns","topicArn","SNSClient","snsClient","inMsg","suppressErrors","safeInMsg","msg","TopicArn","Message","PublishCommand","condition","sendMessage","DynamoDbSyncLock","lockKey","nowSeconds","lockingKey","expires","PutItemCommand","dio","FilterExpression","MemorySyncLock","_locks","delete","toRemove"],"mappings":"4/DAEO,MAAMA,GACTC,aACAC,eACAC,YAAYF,EAAcC,GACtBE,KAAKH,aAAeA,EACpBG,KAAKF,eAAiBA,EACtBG,EAAeC,mBAAmBF,KAAKH,aAAc,gBACrDI,EAAeC,mBAAmBF,KAAKH,aAAaM,YAAa,4BACjEF,EAAeC,mBAAmBF,KAAKH,aAAaO,qBAAsB,qCAC1EH,EAAeC,mBAAmBF,KAAKH,aAAaQ,iBAAkB,gCACzE,CACDC,6BAA6BC,EAAUC,EAAO,CAAA,EAAIC,EAAO,CAAA,IACjDT,KAAKF,iBACLE,KAAKF,eAAeY,QAClBC,EAAcC,WAAWL,IAAcP,KAAKF,eAAee,SAASN,IACtEO,EAAaC,kBAAkB,sDAAuDR,GAE1FS,EAAOC,KAAK,oDAAqDV,EAAUC,EAAMR,KAAKH,aAAaQ,kBACnG,IAAIa,EAAO,KACX,MAAMC,EAAU,GAAGnB,KAAKH,aAAaO,wBAAwBG,KAAYa,EAASC,MAAMC,SAAS,sBAC3FC,EAAU,CACZJ,QAASA,EACTK,cAAexB,KAAKH,aAAaO,qBACjCqB,SAAUzB,KAAKH,aAAaQ,iBAC5BqB,WAAY,CACRnB,WACAoB,SAAUC,KAAKC,UAAUrB,GACzBsB,aAAcF,KAAKC,UAAUpB,KAGrC,IACIS,QAAalB,KAAKH,aAAakC,YAAYR,GAC3CP,EAAOC,KAAK,uBAAwBC,EAAKC,QAASD,EAAKc,MAC1D,CACD,MAAOC,GACHjB,EAAOkB,MAAM,iFAAkF3B,EAAUP,KAAKH,aAAaO,qBAAsBJ,KAAKH,aAAaQ,iBAAkBc,EAASX,EAAMyB,EACvM,CACD,OAAOf,CACV,ECtCE,MAAMiB,GACTC,aACAC,kBACAC,sBACAvC,YAAYqC,EAAcC,EAAmBC,GACzCtC,KAAKoC,aAAeA,EACpBpC,KAAKqC,kBAAoBA,EACzBrC,KAAKsC,sBAAwBA,CAChC,CACGnC,kBACA,OAAOH,KAAKoC,YACf,CACG/B,uBACA,OAAOL,KAAKqC,iBACf,CACGjC,2BACA,OAAOJ,KAAKsC,qBACf,CACDhC,kBAAkBiB,GACdP,EAAOC,KAAK,0BAA2BM,EAAQJ,SAC/C,IACI,MAAMD,QAAalB,KAAKoC,aAAaG,KAAK,IAAIC,EAAiBjB,IAE/D,OADAP,EAAOC,KAAK,uBAAwBC,EAAKC,QAASD,EAAKc,OAChDd,CACV,CACD,MAAOe,GACHjB,EAAOkB,MAAM,iCAAkCX,EAAQJ,QAASc,EACnE,CACD,OAAO,IACV,CACD3B,sBAAsBmC,EAAWC,EAAY1C,KAAKK,kBAE9C,aADkBL,KAAK2C,SAASD,EAAWD,IAChC/B,MACd,CACDJ,eAAeoC,EAAY1C,KAAKK,iBAAkBoC,EAAY,MAC1DxC,EAAeC,mBAAmBwC,EAAW,aAC7C,IAAIxB,EAAO,GACX,MAAM0B,EAAU,CACZnB,SAAUiB,EACVD,UAAWA,EACXI,UAAW,MAEf7B,EAAOC,KAAK,cAAe2B,GAC3B,EAAG,CACC5B,EAAOC,KAAK,mBACZ,MAAM6B,QAAY9C,KAAKoC,aAAaG,KAAK,IAAIQ,EAAgBH,IAC7D1B,EAAOA,EAAK8B,OAAOF,EAAIG,gBACvBL,EAAQC,UAAYC,EAAID,SACpC,OAAiBD,EAAQC,WACjB,OAAO3B,CACV,ECpDE,MAAMgC,GACTnD,cAAiB,CACjBoD,0BASI,MARY,CACRC,QAAS,iBACTC,KAAM,aACNC,OAAQ,eACRC,IAAK,YACLC,aAAc,iBACdC,MAAO,cAGd,ECXE,MAAMC,GACTC,OACAC,KACA7D,YAAY4D,EAAQC,GAChB5D,KAAK2D,OAASA,EACd3D,KAAK4D,KAAOA,EACZ3D,EAAeC,mBAAmBF,KAAK2D,OAAQ,UAC/C1D,EAAeC,mBAAmBF,KAAK4D,KAAM,QAC7C3D,EAAeC,mBAAmBF,KAAK4D,KAAKC,UAAW,kBACvD5D,EAAeC,mBAAmBF,KAAK4D,KAAKE,YAAa,oBACzD7D,EAAe8D,MAAM/D,KAAK4D,KAAKI,gBAAmBhE,KAAK4D,KAAKK,gBAAkBjE,KAAK4D,KAAKM,aAAe,8BAC1G,CACDf,8BAQI,MAPa,CACTU,UAAW,eACXG,cAAc,EACdF,YAAa,YACbG,aAAc,KACdC,aAAc,KAGrB,CACDC,gBAAgBC,GACZ,MAAMC,EAAO,CAAA,EAQb,OAPIrE,KAAK4D,KAAKI,cACVK,EAAKrE,KAAK4D,KAAKE,aAAe9D,KAAK4D,KAAKM,aACxCG,EAAKrE,KAAK4D,KAAKK,cAAgBG,GAG/BC,EAAKrE,KAAK4D,KAAKE,aAAeM,EAE3BC,CACV,CACDC,mCAAmCpD,GAC3BA,WACOA,EAAKlB,KAAK4D,KAAKE,aAClB9D,KAAK4D,KAAKK,qBACH/C,EAAKlB,KAAK4D,KAAKK,cAEtBjE,KAAK4D,KAAKW,gCACHrD,EAAKlB,KAAK4D,KAAKW,yBAGjC,CACDC,sBAAsBtD,GAClB,IAAImD,EAAO,KAWX,OAVInD,IACAmD,EAAO,CAAA,EACHrE,KAAK4D,KAAKI,cACVK,EAAKrE,KAAK4D,KAAKE,aAAe9D,KAAK4D,KAAKM,aACxCG,EAAKrE,KAAK4D,KAAKK,cAAgB/C,EAAKkD,UAGpCC,EAAKrE,KAAK4D,KAAKE,aAAe5C,EAAKkD,UAGpCC,CACV,CACD/D,oBAAoB8D,GAChB,MAAMK,EAAOzE,KAAKmE,gBAAgBC,GAC5BlD,QAAalB,KAAK2D,OAAOe,UAAU1E,KAAK4D,KAAKC,UAAWY,GAE9D,OADAzE,KAAKsE,mCAAmCpD,GACjCA,CACV,CACDZ,mBAAmBqE,GACf1E,EAAeC,mBAAmByE,EAAO,SACzC1E,EAAeC,mBAAmByE,EAAMP,SAAU,kBAClD,MAAMQ,EAASC,OAAOC,OAAO,GAAIH,EAAO3E,KAAKmE,gBAAgBQ,EAAMP,WAC/DpE,KAAK4D,KAAKW,yBAA2BI,EAAMI,iBAC3CH,EAAO5E,KAAK4D,KAAKW,yBAA2BS,KAAKC,MAAMN,EAAMI,eAAiB,MAGlF,cADoB/E,KAAK2D,OAAOuB,UAAUlF,KAAK4D,KAAKC,UAAWe,EAElE,CACDtE,sBAAsB8D,SACZpE,KAAK2D,OAAOwB,aAAanF,KAAK4D,KAAKC,UAAW7D,KAAKmE,gBAAgBC,GAC5E,CACD9D,mBACI,MACM8E,SADkBpF,KAAKqF,WACHC,KAAKC,GAAMvF,KAAKwE,sBAAsBe,KAEhE,aADmBvF,KAAK2D,OAAO6B,mBAAmBxF,KAAK4D,KAAKC,UAAWuB,EAAS,GAEnF,CACD9E,gBACI,IAAIY,EAAO,KACX,GAAIlB,KAAK4D,KAAKI,aAAc,CACxB,MAAMyB,EAAM,CACRC,UAAW1F,KAAK4D,KAAKC,UACrB8B,uBAAwB,wBACxBC,yBAA0B,CACtB,YAAa5F,KAAK4D,KAAKE,aAE3B+B,0BAA2B,CACvB,YAAa7F,KAAK4D,KAAKM,eAG/BhD,QAAalB,KAAK2D,OAAOmC,kBAAkBL,EAC9C,KACI,CACD,MAAMM,EAAO,CACTL,UAAW1F,KAAK4D,KAAKC,WAEzB3C,QAAalB,KAAK2D,OAAOqC,iBAAiBD,EAC7C,CAED,OADA7E,EAAK+E,SAASC,GAAMlG,KAAKsE,mCAAmC4B,KACrDhF,CACV,EC1GE,MAAMiF,GACTC,eACAC,OACAtG,YAAYqG,EAAgBC,GACxBrG,KAAKoG,eAAiBA,EACtBpG,KAAKqG,OAASA,EACdpG,EAAeC,mBAAmBF,KAAKoG,eAAgB,kBACvDnG,EAAeC,mBAAmBF,KAAKoG,eAAeE,mBAAoB,+BAC7E,CACDC,UAAUnC,GACN,IAAIlD,EAAOP,EAAc6F,YAAYxG,KAAKqG,QAK1C,OAJInF,EAAKR,OAAS,IAAMQ,EAAKuF,SAAS,OAClCvF,GAAQ,KAEZA,GAAQkD,EACDlD,CACV,CACDZ,oBAAoB8D,GAEhB,aADmBpE,KAAKoG,eAAeM,uBAAuB1G,KAAKuG,UAAUnC,GAEhF,CACD9D,mBAAmBqE,GACf1E,EAAeC,mBAAmByE,EAAO,SACzC1E,EAAeC,mBAAmByE,EAAMP,SAAU,kBAElD,cADkBpE,KAAKoG,eAAeO,uBAAuB3G,KAAKuG,UAAU5B,EAAMP,UAAWO,EAEhG,CACDrE,sBAAsB8D,SACZpE,KAAKoG,eAAeQ,gBAAgB5G,KAAKuG,UAAUnC,GAC5D,CACD9D,mBACI,MAAM+D,QAAarE,KAAKoG,eAAeS,uBAAuB7G,KAAKuG,UAAU,KAE7E,aADsBO,QAAQC,IAAI1C,EAAKiB,KAAK0B,GAAMhH,KAAKiH,gBAAgBD,MAChE3C,EAAK3D,MACf,CACDJ,gBACI,MAAM+D,QAAarE,KAAKoG,eAAeS,uBAAuB7G,KAAKuG,UAAU,KAE7E,aADmBO,QAAQC,IAAI1C,EAAKiB,KAAK0B,GAAMhH,KAAKkH,cAAcF,KAErE,ECvCE,MAAMG,GACTC,SACAC,oBACAtH,YAAYqH,EAAUC,EAAsB,KACxCrH,KAAKoH,SAAWA,EAChBpH,KAAKqH,oBAAsBA,CAC9B,CACDC,2BACI,MAAO,CACHC,eAAgB,KAChBC,aAAcxH,KAAKqH,oBACnBI,iBAAiB,EAExB,CACDnH,mBAAmB8D,EAAUsD,EAAU9D,EAAO5D,KAAKsH,4BAC/CtG,EAAO2G,MAAM,cAAevD,GAC5B,MAAMwD,GAAM,IAAIC,MAAOC,UACvB,IAAI5G,QAAalB,KAAKoH,SAASF,cAAc9C,GAS7C,GARIlD,GAAQA,EAAK6D,eAAiB6C,IAC9B5G,EAAO+G,MAAM,wCACb7G,EAAO,MAEPA,GAAQ0C,GAAQA,EAAK2D,gBAAkBK,EAAM1G,EAAK8G,eAAiBpE,EAAK2D,iBACxEvG,EAAO+G,MAAM,wCACb7G,EAAO,OAENA,EAAM,CACPF,EAAO+G,MAAM,oCAAqC3D,GAClD,MAAMtB,QAAY4E,KACd5E,GAAOc,GAAM6D,mBACbzG,EAAO+G,MAAM,uBACb7G,EAAO,CACHkD,SAAUA,EACV4D,eAAgBJ,EAChB7C,eAAgBnB,GAAQA,EAAK4D,aAAeI,EAAMhE,EAAK4D,aAAe,KACtE7C,MAAO7B,EACPmF,WAAW,SAETjI,KAAKoH,SAASc,aAAahH,GACjCA,EAAK+G,WAAY,EAExB,CACD,OAAO/G,CACV,CACDZ,YAAY8D,EAAUsD,EAAU9D,EAAO,MACnC,MAAMuE,QAAgBnI,KAAKoI,aAAahE,EAAUsD,EAAU9D,GAC5D,OAAOuE,EAAUA,EAAQxD,MAAQ,IACpC,CACDrE,sBAAsB8D,EAAUiE,GAC5B,IAAInH,EAAO,KAKX,OAJImH,IACAnH,QAAalB,KAAKoI,aAAahE,GAAU,IAAM,cAE7CpE,KAAKoH,SAASH,gBAAgB7C,GAC7BlD,CACV,CACDZ,mBACI,OAAON,KAAKoH,SAASkB,YACxB,CACDhI,gBACI,OAAON,KAAKoH,SAAS/B,SACxB,EC5DE,MAAMkD,GACTC,SACAC,UACA1I,YAAYyI,EAAUC,EAAY,IAAIC,EAAqB,CAAEC,OAAQ,eACjE3I,KAAKwI,SAAWA,EAChBxI,KAAKyI,UAAYA,CACpB,CACGG,2BACA,OAAO5I,KAAKyI,SACf,CACDnI,qBAAqBuI,EAAiB,KAAMC,EAAe,MACvD,MAAMC,EAAS,CACXC,aAAchJ,KAAKwI,SACnBS,QAAS,iBAEP/H,EAAO,GACb,EAAG,CACCF,EAAO+G,MAAM,6CAA8C7G,EAAKR,QAChE,MAAMwI,QAAalJ,KAAKyI,UAAUlG,KAAK,IAAI4G,EAA0BJ,IACrEG,EAAKE,WAAWnD,SAASoD,IACQ,OAAzBA,EAAEC,sBACGT,GAAkBQ,EAAEC,oBAAsBT,MACtCC,GAAgBO,EAAEE,qBAAuBT,IAC1C5H,EAAKsI,KAAKH,EAGrB,IAELN,EAAOlG,UAAYqG,EAAKrG,SACpC,OAAmBkG,EAAOlG,WAElB,OADA7B,EAAO+G,MAAM,4BAA6B7G,EAAKR,QACxCQ,CACV,CACDZ,yBAAyBuI,EAAiB,KAAMC,EAAe,MAG3D,aAFsB9I,KAAKyJ,eAAeZ,EAAgBC,IACrCxD,KAAK+D,GAAMA,EAAEK,eAErC,CACDpJ,iBAAiBqJ,EAAQd,EAAiB,KAAMC,EAAe,KAAMc,GAAa,EAAMC,EAAY,MAChG,MAAMC,EAAK,IAAIC,EACThB,EAAS,CACXC,aAAchJ,KAAKwI,SACnBwB,QAASlB,EACTmB,UAAWpB,GAEXc,IACAZ,EAAOmB,cAAgBP,GAE3B3I,EAAO+G,MAAM,mCAAoCgB,GACjD,IAAI7H,EAAO,GACX,EAAG,CACCF,EAAO+G,MAAM,iDAAkD7G,EAAKR,OAAQoJ,EAAGK,QAC/E,MAAMjB,QAAalJ,KAAKyI,UAAUlG,KAAK,IAAI6H,EAAuBrB,IAClE7H,EAAOA,EAAK8B,OAAOkG,EAAKmB,QACxBtB,EAAOlG,UAAYqG,EAAKrG,SACpC,OAAmBkG,EAAOlG,aAAegH,GAAa3I,EAAKR,OAASmJ,IAa5D,OAZA7I,EAAO+G,MAAM,uBAAwB7G,EAAKR,OAAQoJ,EAAGK,QACjDP,IACA5I,EAAO+G,MAAM,+BACb7G,EAAOA,EAAKoJ,MAAK,CAAC/E,EAAGgF,KACjB,IAAIrJ,EAAOqE,EAAEiF,UAAYD,EAAEC,UAI3B,OAHa,IAATtJ,IACAA,EAAOqE,EAAEkF,QAAQC,cAAcH,EAAEE,UAE9BvJ,CAAI,KAGnB4I,EAAGa,MACIzJ,CACV,ECrEE,MAAM0J,GACTzH,0BAA4B,EAC5B0H,OACA9K,YAAY+K,EAAiB,MACzB9K,KAAK6K,OAASC,GAAkC,IAAIpC,EAAqB,CAAEC,OAAQ,aACtF,CACGC,2BACA,OAAO5I,KAAK6K,MACf,CACDvK,iCAAiC0I,EAAc+B,EAAc,IAAMC,EAAqB,MACpFhK,EAAOC,KAAK,6DAA8D+H,EAAcgC,GACxF,MAAMC,EAAqB,CACvBjC,aAAcA,EACdC,QAAS,iBAEPiC,EAAoBF,GAAsB,EAChD,IAAIG,EAAe,EACnB,MAAMC,EAAiB,GACjBC,EAAuB,GAC7B,IAAIC,EAAkB,GACtB,EAAG,CACCtK,EAAO+G,MAAM,gCACb,IACI,MAAMwD,QAAgBvL,KAAK6K,OAAOtI,KAAK,IAAI4G,EAA0B8B,IACrEE,GAAgBI,EAAQnC,WAAW1I,OACnCM,EAAO+G,MAAM,6CAA8CwD,EAAQnC,WAAW1I,OAAQyK,EAAcC,EAAe1K,QACnH,IAAK,IAAI8K,EAAI,EAAGA,EAAID,EAAQnC,WAAW1I,QAAU0K,EAAe1K,OAASqK,EAAaS,IAAK,CACvF,MAAMC,EAAKF,EAAQnC,WAAWoC,GACzBC,EAAGlC,oBAGCkC,EAAGnC,mBAAqB4B,GAC7BE,EAAe5B,KAAKiC,GAHpBL,EAAe5B,KAAKiC,EAK3B,CACDR,EAA8B,UAAIM,EAAQ1I,SAC7C,CACD,MAAOZ,GACH,MAAMyJ,EAAUJ,EAChBA,EAAkBtG,KAAK2G,IAAI,IAAwB,IAAlBL,GACjCtK,EAAOC,KAAK,+EAAgFgB,EAAKyJ,EAASJ,EAC7G,CACb,OAAmBL,EAA8B,WAAKG,EAAe1K,OAASqK,GACtE/J,EAAOC,KAAK,6BAA8BmK,EAAe1K,QACzD,IAAIkL,EAAU,GACd,IAAK,IAAIJ,EAAI,EAAGA,EAAIJ,EAAe1K,OAAQ8K,IAAK,CAC5C,MAAMK,EAAY,CACd7C,aAAcA,EACdU,cAAe0B,EAAeI,GAAG9B,eAE/BoC,EAAyC,IAAlCV,EAAeI,GAAGO,YAAoB,QAAU,MAC7D/K,EAAOC,KAAK,wBAAyB6K,EAAMV,EAAeI,GAAG9B,eAC7D,IAAIsC,GAAU,EACVC,EAAQ,EACZ,MAAQD,GAAWC,EAAQrB,GAAsBsB,oBAC7C,UACUlM,KAAK6K,OAAOtI,KAAK,IAAI4J,EAAuBN,IAClDG,GAAU,QACJI,EAAeC,KAAKT,EAC7B,CACD,MAAO3J,GACHgK,IACA,MAAMP,EAAUE,EAChBA,EAAU5G,KAAK2G,IAAI,IAAgB,IAAVC,GACzB5K,EAAOC,KAAK,iGAAkGgB,EAAKyJ,EAASE,EAASK,EAAOrB,GAAsBsB,mBACrK,CAEAF,GACDX,EAAqB7B,KAAK4B,EAAeI,GAEhD,CAED,OADAxK,EAAOsL,KAAK,gCAAiCjB,GACtCD,CACV,CACD9K,sCAAsC0I,GAClC,MAAMuD,QAAevM,KAAKwM,iCAAiCxD,GAC3D,OAAOuD,EAASA,EAAOhD,oBAAsB,IAChD,CACDjJ,uCAAuC0I,GACnChI,EAAOC,KAAK,+BAAgC+H,GAC5C,IAAI9H,EAAO,KACX,IACI,MAAM+J,EAAqB,CACvBjC,aAAcA,EACdC,QAAS,iBAEb,IAAIkC,EAAe,EACnB,EAAG,CACCnK,EAAO+G,MAAM,gCACb,MAAMwD,QAAgBvL,KAAK6K,OAAOtI,KAAK,IAAI4G,EAA0B8B,IACrEE,GAAgBI,EAAQnC,WAAW1I,OACnCM,EAAO+G,MAAM,+BAAgCwD,EAAQnC,WAAW1I,OAAQyK,GACxEI,EAAQnC,WAAWnD,SAASoD,IACpBA,EAAEE,sBAAiC,OAATrI,GAAiBmI,EAAEE,oBAAsBrI,EAAKqI,uBACxErI,EAAOmI,EACV,IAEL4B,EAA8B,UAAIM,EAAQ1I,SAC1D,OAAuBoI,EAA8B,UAC5C,CACD,MAAOhJ,GACHjB,EAAOkB,MAAM,2DAA4D8G,EAAc/G,EAAKA,EAC/F,CACD,OAAOf,CACV,CACDZ,oBAAoB+F,GAChBpG,EAAeC,mBAAmBmG,GAClC,MAAM0C,EAAS,CACX0D,mBAAoBpG,GAExB,IAAInF,EAAO,GACX,EAAG,CACCF,EAAOC,KAAK,oCAAqCC,EAAKR,OAAQqI,GAC9D,MAAM2D,QAAY1M,KAAK6K,OAAOtI,KAAK,IAAIoK,EAAyB5D,IAChE7H,EAAOA,EAAK8B,OAAO0J,EAAIE,WACvB7D,EAAOlG,UAAY6J,EAAI7J,SACnC,OAAmBkG,EAAOlG,WAClB,OAAO3B,CACV,CACDZ,sBAAsBuM,GAClB5M,EAAeC,mBAAmB2M,GAClC,MAAM3L,EAAO,GACb,IAAK,IAAIsK,EAAI,EAAGA,EAAIqB,EAAOnM,OAAQ8K,IAC/B,IACIxK,EAAOC,KAAK,cAAe4L,EAAOrB,IAClC,MAAMsB,EAAM,CACR9D,aAAc6D,EAAOrB,GAAGxC,oBAEtBhJ,KAAK6K,OAAOtI,KAAK,IAAIwK,EAAsBD,IACjD5L,EAAKsI,MAAK,EACb,CACD,MAAOvH,GACHjB,EAAOkB,MAAM,4BAA6B2K,EAAOrB,GAAIvJ,GACrDf,EAAKsI,MAAK,EACb,CAEL,OAAOtI,CACV,CACDZ,gCAAgC+F,GAC5BpG,EAAeC,mBAAmBmG,GAClCpG,EAAe8D,KAAKpD,EAAc6F,YAAYH,GAAQ3F,OAAS,GAC/DM,EAAOC,KAAK,qCAAsCoF,GAClD,MAAMwG,QAAe7M,KAAKgN,cAAc3G,GACxC,aAAarG,KAAKiN,gBAAgBJ,EACrC,CACDvM,gCAAgC4M,GAC5BjN,EAAeC,mBAAmBgN,GAClClM,EAAO+G,MAAM,+BAAgCmF,GAC7C,MAAMC,QAAanN,KAAK6K,OAAOtI,KAAK,IAAI6K,EAAkBF,IAC1DlM,EAAO+G,MAAM,kBAAmBoF,GAChC,IAAIjM,EAAO,KACPmM,EAAU,IACd,MAAQnM,GAAQ,CAAC,UAAW,aAAaL,SAASK,EAAKoM,SACnDpM,QAAalB,KAAK6K,OAAOtI,KAAK,IAAIgL,EAAuB,CAAEC,QAASL,EAAKK,iBACnEpB,EAAeC,KAAKgB,GAC1BA,GAAW,EACXrM,EAAOC,KAAK,WAAYC,GAE5B,OAAOA,CACV,CACDZ,yBAAyBkN,GACrB,IAAItM,EAAO,KAIX,OAHMsM,IACFtM,QAAalB,KAAK6K,OAAOtI,KAAK,IAAIkL,EAAiB,CAAED,QAASA,MAE3DtM,CACV,ECxKK,IAACwM,IACX,SAAWA,GACPA,EAA+B,QAAI,UACnCA,EAAoC,aAAI,eACxCA,EAAoC,aAAI,eACxCA,EAA6B,MAAI,QACjCA,EAAiC,UAAI,YACrCA,EAAiC,UAAI,YACrCA,EAAiC,UAAI,YACrCA,EAAiC,UAAI,YACrCA,EAA4B,KAAI,OAChCA,EAAgC,SAAI,WACpCA,EAAgC,SAAI,WACpCA,EAAgC,SAAI,WACpCA,EAAgC,SAAI,WACpCA,EAA+B,QAAI,UACnCA,EAA6B,MAAI,QACjCA,EAAsC,eAAI,eAC1CA,EAA0C,mBAAI,mBAC9CA,EAA0C,mBAAI,mBAC9CA,EAA0C,mBAAI,mBAC9CA,EAA0C,mBAAI,mBAC9CA,EAAqC,cAAI,mBACzCA,EAAyC,kBAAI,kBAC7CA,EAAyC,kBAAI,kBAC7CA,EAAyC,kBAAI,kBAC7CA,EAAyC,kBAAI,kBAC7CA,EAAsC,eAAI,eAC1CA,EAA4B,KAAI,MACnC,CA5BD,CA4BGA,KAA0BA,GAAwB,CAAA,ICzB9C,MAAMC,GACTC,GACA7N,YAAY8N,EAAa,MACrB7N,KAAK4N,GAAKC,GAA0B,IAAIC,EAAiB,CAAEnF,OAAQ,YAAaoF,WAAY,cAC/F,CACGC,uBACA,OAAOhO,KAAK4N,EACf,CACDtN,wBAAwB2N,EAAWC,EAAQC,EAAMC,EAAOV,GAAsBW,KAAM1J,EAAO2J,EAAgB,IAAIzG,KAAQ0G,GAAiB,GACpI,MAAMC,EAAS,GACTL,GAAQA,EAAKzN,OAAS,GACxByN,EAAKlI,SAASwI,IACVD,EAAOhF,KAAK,CAAEkF,KAAMD,EAAEE,IAAKC,MAAOH,EAAE9J,OAAQ,IAGpD,MAAMkK,EAAoBN,EAAiB,EAAI,GACzCO,EAAa,CACfC,UAAWd,EACXe,WAAY,CACR,CACIC,WAAYf,EACZgB,WAAYV,EACZW,KAAMC,OAAOhB,GACbQ,MAAOjK,EACP0K,UAAWf,EACXgB,kBAAmBT,KAI/B7N,EAAO2G,MAAM,4BAA6BmH,GAC1C,MAAMS,QAAevP,KAAK4N,GAAGrL,KAAK,IAAIiN,EAAqBV,IAE3D,OADA9N,EAAO2G,MAAM,aAAc4H,GACpBA,CACV,CACDjP,0CAA0CwM,GAEtC,GADA9L,EAAOC,KAAK,uCAAwC6L,EAAImB,UAAWnB,EAAIoB,OAAQpB,EAAI2C,WAC7E3C,EAAI/G,MAAU+G,EAAI4C,MACpB,MAAM,IAAIC,MAAM,yCAEpB,IAAK7C,EAAI/G,OAAS+G,EAAI4C,MAClB,MAAM,IAAIC,MAAM,6CAEpB,MAAMC,EAAQ9C,EAAI4C,YACN5C,EAAI+C,cAAcC,uBAAuBhD,EAAI4C,aAC7C5C,EAAI+C,cAAcE,sBAAsBjD,EAAI/G,MACxD/E,EAAO+G,MAAM,wBAAyB+E,EAAImB,UAAWnB,EAAIoB,OAAQpB,EAAI2C,UAAWG,GAChF,MAAMI,EAAkBlD,EAAI2C,UAAUQ,MAAM,KAAKC,KAAK,KAAO,OACvDC,EAAY/O,EAASgP,QAAQJ,GAAiBK,WAC9CC,QAAkBtQ,KAAKuQ,kBAAkBzD,EAAImB,UAAWnB,EAAIoB,OAAQpB,EAAIqB,KAAMT,GAAsB8C,MAAOZ,EAAIa,MAAON,GAAW,GAEvI,OADAnP,EAAO+G,MAAM,uBAAwBuI,GAC9BV,EAAIa,KACd,ECpDE,MAAMC,GACTvN,uBAAyBwN,OAAOC,KAAK,sBACrCzN,2BAA6B,cAC7BA,mBAAmB0N,EAAOC,EAAIC,EAAOxP,GACjC,IACIA,EAAQd,KAAOc,EAAQd,MAAQ,CAAA,EAC/BO,EAAOC,KAAK,wCAAyC8P,EAAOxP,GAC5D,MAAMqG,GAAM,IAAIC,MAAOC,UACjBkJ,EAAW,CACbF,GAAIA,EACJG,MAAO1P,EAAQ0P,MACfC,mBAAoBtJ,EACpBuJ,mBAAoB,UACpBC,eAAgB7P,EAAQ6P,eACxBC,eAAgBzJ,EAChB0J,iBAAkB,KAClB7Q,KAAMc,EAAQd,KACdyB,MAAO,KACPqP,KAAM,KACNC,YAAajQ,EAAQiQ,aAGzB,aADmBd,GAAWe,WAAWZ,EAAOE,EAAOC,EAAUN,GAAWgB,gBAE/E,CACD,MAAOzP,GAEH,MADAjB,EAAOkB,MAAM,8CAA+CX,EAASU,GAC/DA,CACT,CACJ,CACDkB,wBAAwB0N,EAAOE,EAAOC,EAAUW,GAC5C,IACI,MAAMC,EAAS,CAAA,EACfZ,EAASE,oBAAqB,IAAIrJ,MAAOC,UACzC8J,EAAOlB,GAAWmB,qBAAuBjQ,KAAKC,UAAUmP,GACxD,MAAMjI,EAAS,CACX+I,OAAQjB,EAAMvK,mBACdyL,IAAKhB,EACLiB,YAAahB,EAASQ,YACtBS,SAAUL,EACVM,KAAM,IAAIC,KAAK,CAACR,KAEhBX,EAASI,iBACTrI,EAAOqJ,mBAAqB,wBAA0BpB,EAASI,eAAiB,KAEpF,MAAMiB,QAAgBxB,EAAMyB,cAAc/P,KAAK,IAAIgQ,EAAiBxJ,IAEpE,OADA/H,EAAO2G,MAAM,oBAAqB0K,GAC3B3B,GAAW8B,KAAK3B,EAAOE,EACjC,CACD,MAAO9O,GAEH,MADAjB,EAAOkB,MAAM,mDAAoD8O,EAAU/O,GACrEA,CACT,CACJ,CACDkB,iCAAiC0N,EAAOE,EAAOvQ,EAAMe,GACjDP,EAAO+G,MAAM,uBAAwBgJ,GACrC,MAAM0B,QAAe/B,GAAWgC,cAAc7B,EAAOE,EAAO,kBAC5D0B,EAAOnB,kBAAmB,IAAIzJ,MAAOC,UACrC2K,EAAOtB,mBAAqB,WAC5B,MAAMS,EAAS,CAAA,EACfA,EAAOlB,GAAWmB,qBAAuBjQ,KAAKC,UAAU4Q,GACxD,MAAM1J,EAAS,CACX+I,OAAQjB,EAAMvK,mBACdyL,IAAKhB,EACLiB,YAAaS,EAAOjB,YACpBS,SAAUL,EACVM,KAAM1R,GAEJ4Q,EAAiBzQ,EAAcC,WAAWW,GAASoR,yBAA2BhS,EAAcC,WAAW6R,GAAQrB,gBACjHA,IACArI,EAAOqJ,mBAAqB,wBAA0BhB,EAAiB,KAE3E,MAAMwB,EAAS,IAAIC,EAAO,CACtBC,OAAQjC,EAAMyB,cACdvJ,OAAQA,EACRgK,KAAM,GACNC,UAAW,EACXC,SAAU,QACVC,mBAAmB,IAEvBN,EAAOO,GAAG,sBAAuBC,IAC7BpS,EAAOC,KAAK,iBAAkBmS,EAAS,IAE3C,MAAMf,QAAgBO,EAAOS,OAE7B,OADArS,EAAO2G,MAAM,oBAAqB0K,GAC3B3B,GAAW8B,KAAK3B,EAAOE,EACjC,CACD5N,2BAA2B0N,EAAOE,EAAOuC,GACrC,IACI,MAAMb,QAAe/B,GAAW8B,KAAK3B,EAAOE,GAE5C,OADA0B,EAAOtB,mBAAqBmC,EACrB5C,GAAWe,WAAWZ,EAAOE,EAAO0B,EAAQ/B,GAAWgB,gBACjE,CACD,MAAOzP,GAEH,MADAjB,EAAOkB,MAAM,uDAAwD6O,EAAO9O,GACtEA,CACT,CACJ,CACDkB,kBAAkBoQ,EAASC,GACvB,IACIxS,EAAO+G,MAAM,+BAAgCwL,EAAQjN,mBAAoBkN,GACzE,IAAIhB,EAAO,KACX,MAAM/R,QAAa8S,EAAQE,sBAAsBD,GACjDxS,EAAO+G,MAAM,qBAAsBtH,GACnC,MAAMiT,EAAajT,GAAQA,EAAKwR,SAAWxR,EAAKwR,SAASvB,GAAWmB,qBAAuB,KAU3F,OATI6B,GACAlB,EAAO5Q,KAAK+R,MAAMD,GACdlB,EAAKlB,mBAAqBkB,EAAKtQ,QAC/BsQ,EAAKjB,WAAagC,EAAQK,iCAAiCJ,KAI/DxS,EAAOsL,KAAK,mCAAoC7L,GAE7C+R,CACV,CACD,MAAOvQ,GAEH,MADAjB,EAAOkB,MAAM,oDAAqDsR,EAAMvR,GAClEA,CACT,CACJ,CACDkB,mBAAmBoQ,EAASC,GACxB,OAAO9C,GAAWxO,MAAMqR,EAASC,EAAM,UAC1C,CACDrQ,mBAAmBoQ,EAASC,EAAMtR,GAC9B,IACI,MAAMuQ,QAAe/B,GAAW8B,KAAKe,EAASC,GAG9C,OAFAf,EAAOvQ,MAAQA,EACfuQ,EAAOnB,kBAAmB,IAAIzJ,MAAOC,UAC9B4I,GAAWe,WAAW8B,EAASC,EAAMf,EAAQ/B,GAAWgB,gBAClE,CACD,MAAOzP,GAEH,MADAjB,EAAOkB,MAAM,oDAAqDsR,EAAMvR,GAClEA,CACT,CACJ,CACDkB,sBAAsBoQ,EAASC,EAAM7B,GACjC,IACI3Q,EAAOC,KAAK,qCAAsCuS,EAAM7B,EAASjR,QACjE,MAAM+R,QAAe/B,GAAW8B,KAAKe,EAASC,GAG9C,OAFAf,EAAOnB,kBAAmB,IAAIzJ,MAAOC,UACrC2K,EAAOtB,mBAAqB,WACrBT,GAAWe,WAAW8B,EAASC,EAAMf,EAAQd,EACvD,CACD,MAAO1P,GAEH,MADAjB,EAAOkB,MAAM,iDAAkDsR,EAAMvR,GAC/DA,CACT,CACJ,EClJE,MAAM4R,GACTC,GACAC,cACAhU,YAAY+T,EAAIC,EAAgB,MAC5B/T,KAAK8T,GAAKA,EACV9T,KAAK+T,cAAgBA,EACrB9T,EAAeC,mBAAmBF,KAAK8T,GAAI,KAC9C,CACGE,eACA,OAAOhU,KAAK8T,EACf,CACD3Q,+BAA+B8Q,EAAOC,GAIlC,OAHID,GAASC,IACTD,EAAME,aAAe,WAAaD,GAE/BD,CACV,CACD9Q,yBAAyB8Q,EAAOtF,EAAKhK,GAKjC,OAJIsP,GAAStT,EAAcC,WAAW+N,IAAQhO,EAAcC,WAAW+D,KACnEsP,EAAMhC,SAAWgC,EAAMhC,UAAY,CAAA,EACnCgC,EAAMhC,SAAStD,GAAOhK,GAEnBsP,CACV,CACD3N,mBACI,OAAOtG,KAAK+T,aACf,CACDzB,cACI,OAAOtS,KAAK8T,EACf,CACDxT,iBAAiBqO,EAAKyF,EAAS,MAC3B,IAEI,cADmBpU,KAAKyT,sBAAsB9E,EAAK3O,KAAKqU,UAAUD,GAErE,CACD,MAAOnS,GAEH,OADAjB,EAAO2G,MAAM,6CAA8C1F,IACpD,CACV,CACJ,CACD3B,+CAA+CqO,EAAKyF,EAAS,MACzD,IAAIlT,EAAO,KACX,IACI,MAAM6H,EAAS,CACX+I,OAAQ9R,KAAKqU,UAAUD,GACvBrC,IAAKpD,GAETzN,QAAalB,KAAK8T,GAAGvR,KAAK,IAAI+R,EAAiBvL,GAClD,CACD,MAAO9G,GACH,KAAIA,aAAesS,GAKf,MAAMtS,EAJNjB,EAAO+G,MAAM,oCAAqC4G,GAClDzN,EAAO,IAKd,CACD,OAAOA,CACV,CACDZ,qCAAqCqO,EAAKyF,EAAS,MAE/C,aADkBpU,KAAKwU,yCAAyC7F,EAAKyF,IAC1DlC,KAAKuC,sBACnB,CACDnU,6BAA6BqO,EAAKyF,EAAS,MACvC,IAAIlT,EAAO,KACX,MAAMwT,QAAY1U,KAAKwU,yCAAyC7F,EAAKyF,GACrE,GAAIM,GAAKxC,KAAM,CACX,MAAMpP,QAAY4R,EAAIxC,KAAKyC,uBAC3BzT,EAAOyP,OAAOC,KAAK9N,EACtB,CACD,OAAO5B,CACV,CACDZ,6BAA6BqO,EAAKyF,EAAS,MACvC,IAAIlT,EAAO,KACX,MAAMwT,QAAY1U,KAAKwU,yCAAyC7F,EAAKyF,GAIrE,OAHIM,GAAKxC,OACLhR,QAAawT,EAAIxC,KAAK0C,qBAEnB1T,CACV,CACDZ,6BAA6BqO,EAAKyF,EAAS,MACvC,MAAMzP,QAAc3E,KAAK6U,uBAAuBlG,EAAKyF,GACrD,OAAOzP,EAAQ/C,KAAK+R,MAAMhP,GAAS,IACtC,CACDrE,sBAAsBqO,EAAKyF,EAAS,MAChC,IAAIlT,EAAO,KACX,MAAM6H,EAAS,CACX+I,OAAQ9R,KAAKqU,UAAUD,GACvBrC,IAAKpD,GAET,IACIzN,QAAalB,KAAK8T,GAAGvR,KAAK,IAAIuS,EAAoB/L,GACrD,CACD,MAAO9G,GACH,IAAIA,GAA4B,KAArBA,EAAgB,WAKvB,MAAMA,EAJNjB,EAAOC,KAAK,+CAAgDmT,EAAQzF,GACpEzN,EAAO,IAKd,CACD,OAAOA,CACV,CACDZ,6BAA6BqO,EAAKoG,EAAYC,EAAUZ,GACpD,MAAMa,EAAOrT,KAAKC,UAAUkT,GAC5B,OAAO/U,KAAKkV,uBAAuBvG,EAAKsG,EAAMD,EAAUZ,EAC3D,CACD9T,6BAA6BqO,EAAKwG,EAAYH,EAAUZ,GACpD,MAAM7H,EAAS6I,EAAcC,0BAA0BF,GACvD,OAAOnV,KAAKsV,uBAAuB3G,EAAKpC,EAAQyI,EAAUZ,EAC7D,CACD9T,6BAA6BqO,EAAKnO,EAAMwU,EAAUZ,GAC9C,MAAMrL,EAASlE,OAAOC,OAAO,CAAA,EAAIkQ,GAAY,CAAA,EAAI,CAC7ClD,OAAQ9R,KAAKqU,UAAUD,GACvBrC,IAAKpD,EACLuD,KAAM1R,IAEJoS,EAAS,IAAIC,EAAO,CACtBC,OAAQ9S,KAAK8T,GACb/K,OAAQA,EACRgK,KAAM,GACNC,UAAW,EACXC,SAAU,QACVC,mBAAmB,IAEvBN,EAAOO,GAAG,sBAAuBC,IAC7BpS,EAAOC,KAAK,iBAAkBmS,EAAS,IAG3C,aADqBR,EAAOS,MAE/B,CACD/S,kBAAkBiV,EAAWC,EAAcC,EAAgBzV,KAAM0V,GAAoB,GACjFzV,EAAeC,mBAAmBqV,EAAW,aAC7CtV,EAAeC,mBAAmBsV,EAAc,gBAChDvV,EAAe8D,KAAKwR,EAAU9O,SAAS,KAAM,2BAC7CxG,EAAe8D,KAAKyR,EAAa/O,SAAS,KAAM,8BAChD,IAAIvF,EAAO,GACX,MAAMyU,QAAoB3V,KAAK6G,uBAAuB0O,GAChDK,QAAoBH,EAAc5O,uBAAuB2O,GACzD1L,EAAK,IAAIC,EACf,IAAK,IAAIyB,EAAI,EAAGA,EAAImK,EAAYjV,OAAQ8K,IAAK,CACzC,MAAMqK,EAAaF,EAAYnK,GAE/B,GADAxK,EAAOC,KAAK,qBAAsB4U,EAAY/L,EAAGgM,aAAatK,EAAImK,EAAYjV,SAC1EmV,EAAWpP,SAAS,KACpB,GAAIiP,EAAmB,CACnB1U,EAAOC,KAAK,iCACZ,MAAM8U,QAAa/V,KAAKgW,YAAYT,EAAYM,EAAYL,EAAeK,EAAYJ,EAAeC,GACtG1U,EAAOC,KAAK,sBAAuB8U,EAAKrV,OAAQmV,GAChD3U,EAAOA,EAAK8B,OAAO+S,EACtB,MAEG/U,EAAOC,KAAK,yDAA0D4U,OAGzE,CACD,IAAII,GAAa,EACjB,MAAMC,QAAgBlW,KAAKyT,sBAAsB8B,EAAYM,GAC7D,GAAID,EAAY/U,SAASgV,GAAa,CAClC,MAAMM,QAAmBV,EAAchC,sBAAsB+B,EAAeK,GACxEK,EAAQE,OAASD,EAAWC,OAC5BpV,EAAO+G,MAAM,wBACbkO,GAAa,EAEpB,CACD,GAAIA,EAAY,CACZjV,EAAO+G,MAAM,cACb,MAAMsO,QAAkBrW,KAAKsW,+BAA+Bf,EAAYM,GACxE,IACI,MAAMxD,QAAgBoD,EAAcH,uBAAuBE,EAAeK,EAAYQ,EAAWH,OAASK,GAC1GvV,EAAO2G,MAAM,oBAAqB0K,GAClCnR,EAAKsI,KAAKqM,EACb,CACD,MAAO5T,GACHjB,EAAOkB,MAAM,2BAA4B2T,EAAY5T,EACxD,CACJ,CACJ,CACJ,CAGD,OAFAjB,EAAOC,KAAK,4BAA6B0U,EAAYjV,OAAQQ,EAAKR,QAClEoJ,EAAGa,MACIzJ,CACV,CACDZ,4BAA4BqO,EAAKyF,EAAS,MACtC,IAAIlT,EAAO,KACX,IACIA,QAAalB,KAAK8T,GAAGvR,KAAK,IAAIiU,EAAkB,CAC5C1E,OAAQ9R,KAAKqU,UAAUD,GACvBrC,IAAKpD,IAEZ,CACD,MAAO1M,GACH,IAAIA,GAA4B,KAArBA,EAAgB,WAMvB,MADAjB,EAAOkB,MAAM,sCAAuCD,EAAKA,GACnDA,EALNjB,EAAOC,KAAK,4CAA6CjB,KAAKqU,UAAUD,GAASzF,GACjFzN,EAAO,IAMd,CACD,OAAOA,CACV,CACDZ,4BAA4BqO,EAAKyF,EAAS,MACtC,IACI,MAAM1H,QAAY1M,KAAKyT,sBAAsB9E,EAAKyF,GAClD,OAAI1H,GAAOA,EAAI+J,aACJzR,KAAKC,QAAO,IAAI4C,MAAOC,UAAY4E,EAAI+J,aAAa3O,WAAa,MAGxE9G,EAAOsL,KAAK,uDAAwDtM,KAAKqU,UAAUD,GAASzF,GACrF,KAEd,CACD,MAAO1M,GACH,GAAIA,GAA4B,KAArBA,EAAgB,WAEvB,OADAjB,EAAOsL,KAAK,4CAA6CtM,KAAKqU,UAAUD,GAASzF,GAC1E,KAGP,MAAM1M,CAEb,CACJ,CACD3B,eAAeoW,EAAQC,EAAQC,EAAY,KAAMC,EAAY,MACzD,MAAM9N,EAAS,CACX+N,WAAY,IAAM9W,KAAKqU,UAAUuC,GAAa,IAAMF,EACpD5E,OAAQ9R,KAAKqU,UAAUwC,GACvB9E,IAAK4E,EACLI,kBAAmB,QAGvB,aADmB/W,KAAK8T,GAAGvR,KAAK,IAAIyU,EAAkBjO,GAEzD,CACDzI,oBAAoBoW,EAAQC,EAAQC,EAAY,KAAMC,EAAY,MAC9D,IAAI3V,GAAO,EACX,UACsBlB,KAAKiX,SAASP,EAAQC,EAAQC,EAAWC,GAC3D3V,GAAO,CACV,CACD,MAAOe,GACHjB,EAAO2G,MAAM,iCAAkC1F,EAClD,CACD,OAAOf,CACV,CACDZ,uCAAuCqO,EAAKuI,EAAoB,KAAM9C,EAAS,MAC3E,MAAM+C,EAAa,CACfrF,OAAQ9R,KAAKqU,UAAUD,GACvBrC,IAAKpD,GAGT,aADmByI,EAAapX,KAAK8T,GAAI,IAAIQ,EAAiB6C,GAAa,CAAEE,UAAWH,GAE3F,CACD5W,6BAA6B+F,EAAQiR,GAAc,EAAOlD,EAAS,KAAMmD,EAAc,MACnF,MAAMC,EAAc,GACdzO,EAAS,CACX+I,OAAQ9R,KAAKqU,UAAUD,GACvBqD,OAAQpR,EACRqR,UAAW,KAEf,IAAIC,EAAW,KACf,EAAG,CACCA,QAAiB3X,KAAK8T,GAAGvR,KAAK,IAAIqV,EAAmB7O,IACrD,MAAM8O,EAAexR,EAAO3F,OACxBiX,EAAyB,gBACzBA,EAAyB,eAAE1R,SAAS6R,IAChC,IAAKP,GAAeC,EAAY9W,OAAS6W,EAAa,CAClD,MAAM5S,EAAQmT,EAAW,OAAEC,UAAUF,GACrCL,EAAYhO,KAAK7E,EACpB,KAGLgT,EAAmB,gBACb7Q,QAAQC,IAAI4Q,EAAmB,SAAErS,KAAIhF,MAAOwX,IAC9C,IAAKP,GAAeC,EAAY9W,OAAS6W,EACrC,GAAID,EAAa,CACb,MAAMU,EAAW,CACbzG,WAAYvR,KAAK4T,iCAAiCkE,EAAQ,IAAG,KAAM1D,GACnE6D,KAAMH,EAAQ,IAAEC,UAAUF,GAC1BK,KAAMJ,EAAS,MAEnBN,EAAYhO,KAAKwO,EACpB,MAEGR,EAAYhO,KAAKsO,EAAQ,IAAEC,UAAUF,GAE5C,KAGT9O,EAAOoP,OAASR,EAASS,UACrC,OAAiBrP,EAAOoP,UAAYZ,GAAeC,EAAY9W,OAAS6W,IAChE,OAAOC,CACV,CACDlX,4BAA4B+F,EAAQ+N,EAAS,MACzC,MAAMoD,EAAc,CAACnR,GACrB,IAAIgS,EAAM,EACV,KAAOA,EAAMb,EAAY9W,QAAQ,CAC7B,MAAM4X,EAAOd,EAAYa,KACzBrX,EAAO+G,MAAM,4BAA6BuQ,EAAMd,EAAY9W,OAAS2X,GACrE,MAAMvL,EAAM,CACRgF,OAAQ9R,KAAKqU,UAAUD,GACvBqD,OAAQa,EACRZ,UAAW,KAEf,IAAIvK,EAAO,KACX,GACIL,EAAIyL,kBAAoBpL,EAAOA,EAAKqL,sBAAwB,KAC5DrL,QAAanN,KAAK8T,GAAGvR,KAAK,IAAIqV,EAAmB9K,IACjDK,EAAKsL,eAAexS,SAASyS,IACzBlB,EAAYhO,KAAKkP,EAAEjB,OAAO,IAE9BzW,EAAO+G,MAAM,OAAQoF,SAChBA,EAAKqL,sBACjB,CACD,OAAOhB,CACV,CACDnD,UAAUsE,GACN,MAAMzX,EAAOyX,GAAkC3Y,KAAK+T,cACpD,IAAK7S,EACD,KAAM,+DAEV,OAAOA,CACV,ECpUE,MAAM0X,GACT9E,GACAM,OACA/N,OACAwS,cACAC,WACA3V,6BAA+B,UAC/B0N,MACA9Q,YAAY+T,EAAIM,EAAQ/N,EAAS,GAAIwS,EAAgBD,GAAOG,sBAAuBD,GAC/E9Y,KAAK8T,GAAKA,EACV9T,KAAKoU,OAASA,EACdpU,KAAKqG,OAASA,EACdrG,KAAK6Y,cAAgBA,EACrB7Y,KAAK8Y,WAAaA,EAClB9Y,KAAK6Q,MAAQ,IAAIgD,GAAe7T,KAAK8T,GAAI9T,KAAKoU,OACjD,CACG4E,mBACA,OAAOhZ,KAAK6Y,aACf,CACDvY,uBAAuBqO,EAAKuI,GACxBjX,EAAeC,mBAAmBF,KAAK8Y,WAAY,4DACnD7Y,EAAeC,mBAAmByO,EAAK,OACvC1O,EAAe8D,KAAKmT,EAAoB,EAAG,4CAC3C,MAAM+B,EAAQ,CAAEC,UAAWvK,GAE3B,aAD0B3O,KAAK8Y,WAAWK,kBAAkBF,EAAO/B,EAEtE,CACD3Q,UAAUoI,GACN,OAAOgC,OAAOC,KAAKjC,EAAK,UAAUyK,UACrC,CACDC,UAAU7F,GACN,OAAO7C,OAAOC,KAAK4C,GAAM4F,SAAS,SACrC,CACDE,aAAaC,EAAQvZ,KAAK6Y,eACtB,OAAO7Y,KAAKwZ,eAAeD,GAAS5Y,EAAc8Y,iBACrD,CACDD,eAAeD,EAAQvZ,KAAK6Y,eACxB,OAAO7Y,KAAKqG,OAASkT,EAAQ,GAChC,CACDjZ,YAAYiB,GACRA,EAAQgY,MAAQhY,EAAQgY,OAASvZ,KAAK6Y,cACtC,MAAMrF,EAAOxT,KAAKsZ,aAAa/X,EAAQgY,OACjC5K,EAAM3O,KAAKqZ,UAAU7F,GAC3B,OAAO9C,GAAWgJ,MAAM1Z,KAAK6Q,MAAOlC,EAAK6E,EAAMjS,EAClD,CACDjB,iBAAiB0Q,EAAUW,GACvB,MAAMhD,EAAM3O,KAAKuG,UAAUyK,EAASF,IACpC,OAAOJ,GAAWe,WAAWzR,KAAK6Q,MAAOlC,EAAKqC,EAAUW,EAC3D,CACDrR,YAAYiZ,EAAQvZ,KAAK6Y,cAAec,EAAmB,QACvD,IACI3Y,EAAOC,KAAK,4DAA6D0Y,EAAkBJ,GAC3F,MAAMK,QAAiB5Z,KAAK6Z,KAAKN,GAC3B3R,GAAM,IAAIC,MAAOC,UACjBkE,EAAU,GAChB,IAAK,IAAIR,EAAI,EAAGA,EAAIoO,EAASlZ,OAAQ8K,IAAK,CACtC,MAAMsO,EAAOF,EAASpO,GAEtB,IADoB5D,EAAMkS,EAAKzI,gBAAkB,IAChCsI,EAAkB,OACV3Z,KAAK6Q,MAAMjK,gBAAgB5G,KAAKuG,UAAUuT,EAAKhJ,KACpE9E,EAAQxC,KAAKsQ,EAChB,CACJ,CAED,OADA9Y,EAAO+G,MAAM,yBAA0BiE,EAAQtL,OAAQkZ,EAASlZ,QACzDsL,CACV,CACD,MAAO/J,GAEH,MADAjB,EAAOkB,MAAM,8CAA+CqX,EAAOtX,GAC7DA,CACT,CACJ,CACD3B,eAAeiZ,EAAQvZ,KAAK6Y,eACxB,IACI,MAAMxS,EAASrG,KAAKwZ,eAAeD,GACnCvY,EAAOC,KAAK,0BAA2BoF,GACvC,MAAMnF,QAAalB,KAAK6Q,MAAMhK,uBAAuBR,GAErD,OADArF,EAAO+G,MAAM,aAAc7G,GACpBA,CACV,CACD,MAAOe,GAEH,MADAjB,EAAOkB,MAAM,gDAAiDqX,EAAOtX,GAC/DA,CACT,CACJ,CACD3B,WAAWiZ,EAAQvZ,KAAK6Y,eACpB,IACI,MAAMxS,EAASrG,KAAKwZ,eAAeD,GACnCvY,EAAOC,KAAK,0BAA2BoF,GACvC,MACM0T,SADa/Z,KAAKga,SAAST,IACdjU,KAAK0B,GAAMhH,KAAKwS,KAAKxS,KAAKqZ,UAAUrZ,KAAKwZ,eAAeD,GAASvS,MAEpF,aADmBF,QAAQC,IAAIgT,EAElC,CACD,MAAO9X,GAEH,MADAjB,EAAOkB,MAAM,kDAAmDqX,EAAOtX,GACjEA,CACT,CACJ,CACD3B,oBAAoBwQ,EAAIwC,GACpB,MAAM2G,EAAWja,KAAKuG,UAAUuK,GAChC,OAAOJ,GAAWgC,cAAc1S,KAAK6Q,MAAOoJ,EAAU3G,EACzD,CACDhT,WAAWqO,GACP,MAAMsL,EAAWja,KAAKuG,UAAUoI,GAChC,OAAO+B,GAAW8B,KAAKxS,KAAK6Q,MAAOoJ,EACtC,CACD3Z,0BAA0B4Z,GACtBja,EAAeC,mBAAmBF,KAAK8Y,WAAY,4DACnD7Y,EAAeC,mBAAmBga,EAAa,eAC/C,MAAMC,QAAena,KAAK8Y,WAAWsB,YAAYF,GAC3CvL,EAAMwL,GAAQjB,UACpB,OAAOvK,EAAM3O,KAAKwS,KAAK7D,GAAO,IACjC,CACDrO,YAAYwQ,GACR,OAAOJ,GAAW2J,MAAMra,KAAK6Q,MAAO7Q,KAAKuG,UAAUuK,GACtD,CACDxQ,YAAYwQ,EAAI5O,GACZ,OAAOwO,GAAWxO,MAAMlC,KAAK6Q,MAAO7Q,KAAKuG,UAAUuK,GAAK5O,EAC3D,CACD5B,eAAewQ,EAAIa,GACf,OAAOjB,GAAW4J,SAASta,KAAK6Q,MAAO7Q,KAAKuG,UAAUuK,GAAKa,EAC9D,EC1HE,MAAM4I,GACTnT,SACAoT,IACArX,0BACI,MAAO,CACHsX,mBAAoB9Z,EAAc8Y,gBAClCiB,cAAe,OACfC,wBAAyB,iBACzBC,wBAAyB,iBACzBC,6BAA8B,KAC9BC,6BAA8B,KAErC,CACD/a,YAAYqH,EAAUoT,EAAMD,GAAaQ,oBACrC/a,KAAKoH,SAAWA,EAChBpH,KAAKwa,IAAMA,EACXva,EAAeC,mBAAmBkH,EAAU,YAC5CnH,EAAeC,mBAAmBsa,EAAK,OACvCva,EAAeC,mBAAmBsa,EAAIC,mBAAoB,0BAC1Dxa,EAAeC,mBAAmBsa,EAAIE,cAAe,oBACxD,CACDpa,iBAEI,aADiBN,KAAKoH,SAAS4T,gBACrBC,OAAS,EACtB,CACD3a,4BACUN,KAAKoH,SAAS8T,cAAc,CAAED,MAAO,GAAIE,oBAAqBtT,KAAKD,OAC5E,CACDtH,kBAAkB8a,GACd,IAAIC,QAAYrb,KAAKsb,WAKrB,OAJIF,IACAC,EAAMA,EAAI1R,QAAQ4R,IAAOH,EAAMva,SAAS0a,EAAEvb,KAAKwa,IAAIE,wBAC7C1a,KAAKoH,SAAS8T,cAAc,CAAED,MAAOI,EAAKF,oBAAqBtT,KAAKD,SAEvEyT,CACV,CACD/a,YAAYqE,GACR,IAAI0W,QAAYrb,KAAKsb,WAmBrB,OAlBI3W,IACAA,EAAM3E,KAAKwa,IAAIE,eAAiB/V,EAAM3E,KAAKwa,IAAIE,gBAAkB1a,KAAKwa,IAAIC,qBACtEza,KAAKwa,IAAIG,0BACThW,EAAM3E,KAAKwa,IAAIG,yBAA2BhW,EAAM3E,KAAKwa,IAAIG,0BAA4B9S,KAAKD,OAE1F5H,KAAKwa,IAAIK,+BACTlW,EAAM3E,KAAKwa,IAAIK,8BAAgClW,EAAM3E,KAAKwa,IAAIK,+BAAiCzZ,EAASC,MAAMma,SAE9Gxb,KAAKwa,IAAII,0BACTjW,EAAM3E,KAAKwa,IAAII,yBAA2B/S,KAAKD,OAE/C5H,KAAKwa,IAAIM,+BACTnW,EAAM3E,KAAKwa,IAAIM,8BAAgC1Z,EAASC,MAAMma,SAElEH,EAAMA,EAAI1R,QAAQ4R,GAAMA,EAAEvb,KAAKwa,IAAIE,iBAAmB/V,EAAM3E,KAAKwa,IAAIE,iBACrEW,EAAI7R,KAAK7E,SACH3E,KAAKoH,SAAS8T,cAAc,CAAED,MAAOI,EAAKF,oBAAqBtT,KAAKD,SAEvEjD,CACV,CACDrE,gBAAgBmb,GAEZ,aADkBzb,KAAKsb,YACZI,MAAMH,GAAMA,EAAEvb,KAAKwa,IAAIE,iBAAmBe,GACxD,CACDnb,oBAAoBqb,EAAcC,GAC9B3b,EAAeC,mBAAmByb,EAAc,gBAChD1b,EAAeC,mBAAmB0b,EAAY,cAC9C,MAAMtW,EAAM,CAAA,EAEZ,OADAA,EAAIqW,GAAgBC,EACb5b,KAAK6b,iBAAiBvW,EAChC,CACDhF,uBAAuB2T,GACnBhU,EAAeC,mBAAmB+T,EAAO,SACzC,IAAIoH,QAAYrb,KAAKsb,WAUrB,OATAD,EAAMA,EAAI1R,QAAQ4R,IACd,IAAIO,GAAW,EAMf,OALAjX,OAAOR,KAAK4P,GAAOhO,SAASe,IACxB,MAAM+U,EAAMC,EAAWC,iBAAiBV,EAAGvU,GACrC4U,EAAa3H,EAAMjN,GACzB8U,EAAWA,GAAYC,IAAQH,CAAU,IAEtCE,CAAQ,IAEZT,CACV,ECnFE,MAAMa,GACT9V,eACA+V,QACApc,YAAYqG,EAAgB+V,GACxBnc,KAAKoG,eAAiBA,EACtBpG,KAAKmc,QAAUA,EACflc,EAAeC,mBAAmBkG,EAAgB,kBAClDnG,EAAemc,uCAAuChW,EAAeE,mBAAoB,gCACzFrG,EAAemc,uCAAuCD,EAAS,UAClE,CACD7b,oBAAoB+b,GAChB,MAAMzX,EAASyX,GAAQ,CAAEpB,MAAO,GAAIE,oBAAqB,MACzDvW,EAAOuW,oBAAsBtT,KAAKD,MAGlC,cAFkB5H,KAAKoG,eAAeO,uBAAuB3G,KAAKmc,QAASvX,EAG9E,CACDtE,qBAKI,aAJoBN,KAAKoG,eAAeM,uBAAuB1G,KAAKmc,UAAa,CAC7ElB,MAAO,GACPE,oBAAqBtT,KAAKD,MAGjC,ECvBE,MAAM0U,GACTzL,MACAxK,OACAtG,YAAY8Q,EAAOxK,GAGf,GAFArG,KAAK6Q,MAAQA,EACb7Q,KAAKqG,OAASA,GACTwK,EACD,MAAM,IAAIlB,MAAM,gCAEpB,IAAKkB,EAAMvK,mBACP,MAAM,IAAIqJ,MAAM,8CAEvB,CACD4M,gBAAgB/I,GACZ,IAAItS,EAAO,GAOX,OANIlB,KAAKqG,SACLnF,GAAQlB,KAAKqG,QAEbmN,IACAtS,GAAQsS,GAELtS,CACV,CACDsb,cAAc1L,EAAI0C,GACd,IAAItS,EAAOlB,KAAKuc,gBAAgB/I,GAKhC,OAJItS,EAAKR,OAAS,IACdQ,GAAQ,KAEZA,GAAQ4P,EAAK,QACN5P,CACV,CACDZ,aAAawQ,EAAI0C,GACb,MAAMiJ,EAAWzc,KAAKwc,cAAc1L,EAAI0C,GAExC,OADAxS,EAAO+G,MAAM,4BAA6B0U,GACnCzc,KAAK6Q,MAAM6L,WAAWD,EAChC,CACDnc,YAAYwQ,EAAI0C,GACZ,MAAMiJ,EAAWzc,KAAKwc,cAAc1L,EAAI0C,GACxCxS,EAAO+G,MAAM,gBAAiB0U,GAC9B,MAAMvb,QAAclB,KAAK6Q,MAAMnK,uBAAuB+V,GAGtD,OAFAvb,EAAK4P,GAAKA,EACV5P,EAAKsS,KAAOA,EACLtS,CACV,CACDZ,YAAYqc,EAAMnJ,GACdmJ,EAAK7L,GAAK6L,EAAK7L,IAAMnQ,EAAc8Y,kBACnCkD,EAAKxB,qBAAsB,IAAItT,MAAOC,UACtC,MAAM2U,EAAWzc,KAAKwc,cAAcG,EAAK7L,GAAI0C,GAC7CxS,EAAO+G,MAAM,eAAgB0U,SACRzc,KAAK6Q,MAAMlK,uBAAuB8V,EAAUE,GAEjE,aADmB3c,KAAK4c,MAAMD,EAAK7L,GAAI0C,EAE1C,CACDlT,gBAAgBkT,GACZ,MAAMiJ,EAAWzc,KAAKuc,gBAAgB/I,GACtCxS,EAAO+G,MAAM,eAAgB0U,GAE7B,aADmBzc,KAAK6Q,MAAMhK,uBAAuB4V,EAExD,CACDnc,uBAAuBkT,GACnB,MAAMiJ,EAAWzc,KAAKuc,gBAAgB/I,GACtCxS,EAAO+G,MAAM,qBAAsB0U,GACnC,MACMI,SADc7c,KAAK8c,UAAUtJ,IACZlO,KAAK+D,GAAMrJ,KAAK4c,MAAMvT,EAAGmK,KAEhD,aADmB1M,QAAQC,IAAI8V,EAElC,CACDvc,aAAawQ,EAAI0C,GACb,MAAMiJ,EAAWzc,KAAKwc,cAAc1L,EAAI0C,GACxCxS,EAAO+G,MAAM,gBAAiB0U,GAE9B,OAAc,YADIzc,KAAK6Q,MAAMjK,gBAAgB6V,EAEhD,ECtEE,MAAMM,GACTC,OACAjd,YAAYid,GAER,GADAhd,KAAKgd,OAASA,GACTA,EACD,KAAM,wBAEb,CACGC,6BACA,OAAOjd,KAAKgd,MACf,CACDE,SACI,OAAOld,KAAKgd,MACf,CACD1c,mBAAmBuD,GACf,MAAMkC,EAAO,CACTL,UAAW7B,EACXsZ,MAAO,GAGX,OAA0C,WADVnd,KAAKod,2BAA2BC,GAAMrd,KAAKsd,YAAYD,IAAItX,IAClEwX,MAAM7c,MAClC,CACDJ,kBAAkB2T,GACd,OAAOjU,KAAKgd,OAAOza,KAAK,IAAIib,EAAYvJ,GAC3C,CACD3T,mBAAmB2T,GACf,OAAOjU,KAAKgd,OAAOza,KAAK,IAAIkb,EAAaxJ,GAC5C,CACD3T,gCAAgCod,EAAMzJ,EAAO0J,EAAUC,GACnD,IAAI1c,EAAO,KACX,GAAI+S,EAAO,CACP,IAAI4J,EAAaD,GAAgB,EACjC,EAAG,CACCC,IACA,IACI3c,QAAawc,EAAKzJ,EACrB,CACD,MAAOhS,GACH,IAAI8a,GAAce,4DAA4D7b,GAO1E,MAAMA,EAP0E,CAChF,MAAMoK,EAAiC,IAA1BrH,KAAK+Y,IAAI,EAAGF,GACzB7c,EAAO+G,MAAM,iEAAkEkM,EAAO4J,EAAYF,EAAUtR,SACtGD,EAAeC,KAAKA,GAC1BwR,GACH,CAIJ,CACJ,QAAS3c,KAAUyc,GAAYE,EAAaF,IACxCzc,GACDJ,EAAaC,kBAAkB,yFAA0F4c,EAAU1J,EAE1I,CACD,OAAO/S,CACV,CACDZ,6BAA6BmF,EAAK4H,EAAU,GACxC,IACI5H,EAAIuY,OAAS,QACbhd,EAAO+G,MAAM,6BAA8BtC,GAC3C,MAAMvE,EAAO,CACTuP,MAAO,EACPwN,aAAc,EACdC,MAAO,GAELxE,GAAQ,IAAI7R,MAAOC,UACzB,IAAIqW,EAAa,KACjB,MAAMC,EAAU3Y,EAAI0X,MACpB1X,EAAI0X,MAAQ,KACZ,GACIgB,QAAmBne,KAAKod,2BAA2BC,GAAMrd,KAAKqe,aAAahB,IAAI5X,GAC/EvE,EAAKuP,OAAS0N,EAAkB,MAChCjd,EAAK+c,cAAgBE,EAAyB,aAC9Cjd,EAAKgd,QACLzY,EAAuB,kBAAI0Y,EAAWG,uBAChClS,EAAeC,KAAKgB,GAC1BrM,EAAO2G,MAAM,iBAAkBzG,GAC3Bkd,GAAWld,EAAKuP,OAAS2N,GAAW3Y,EAAuB,oBAC3DzE,EAAOC,KAAK,uCAAwCmd,GACpD3Y,EAAuB,kBAAI,YAE1BA,EAAuB,mBAChC,MAAM8Y,GAAM,IAAI1W,MAAOC,UAEvB,OADA9G,EAAO+G,MAAM,qCAAsC7G,EAAMsd,EAAgBC,iBAAiBF,EAAM7E,GAAO,GAAOjU,GACvGvE,CACV,CACD,MAAOe,GAEH,OADAjB,EAAOkB,MAAM,wBAAyBD,EAAKwD,EAAKxD,GACzC,IACV,CACJ,CACD3B,wBAAwBmF,EAAK4H,EAAU,EAAGqR,EAAY,MAClD,MAAMxd,EAAO,GAIb,aAHMlB,KAAK2e,6BAA6BlZ,GAAKnF,MAAOse,IAChD1d,EAAKsI,KAAKoV,EAAE,GACbvR,EAASqR,GACLxd,CACV,CACDZ,mCAAmCmF,EAAKiY,EAAMrQ,EAAU,EAAGqR,EAAY,MACnE,IAAI9O,EAAM,EACV,IACI5O,EAAO+G,MAAM,uBAAwBtC,GACrC,MAAMiU,GAAQ,IAAI7R,MAAOC,UACzB9G,EAAO+G,MAAM,aAActC,GAC3B,IAAI0Y,QAAmBne,KAAKod,2BAA2BC,GAAMrd,KAAKqe,aAAahB,IAAI5X,GACnF,IAAK,IAAI+F,EAAI,EAAGA,EAAI2S,EAAWZ,MAAM7c,OAAQ8K,UACnCkS,EAAKS,EAAWZ,MAAM/R,IAC5BoE,IAEJ,IAAIsO,EAAQ,EACRW,EAAa,EACjB,KAAOV,EAAWG,mBAAmC,OAAdI,GAAsB9O,EAAM8O,KAAejZ,EAAI0X,OAAO,CACzFnc,EAAO2G,MAAM,wCAAyCwW,EAAWG,kBACjE7Y,EAAuB,kBAAI0Y,EAAWG,iBACtCH,QAAmBne,KAAKod,2BAA2BC,GAAMrd,KAAKqe,aAAahB,IAAI5X,GAC/E,IAAK,IAAI+F,EAAI,EAAGA,EAAI2S,EAAWZ,MAAM7c,OAAQ8K,UACnCkS,EAAKS,EAAWZ,MAAM/R,IAC5BoE,IAEJ5O,EAAO2G,MAAM,0BAA2BiI,GACxCsO,IACAW,GAAmC,IAArBV,EAAW3N,MAAc,EAAI,QACrCpE,EAAeC,KAAKgB,EAC7B,CACD,MAAMkR,GAAM,IAAI1W,MAAOC,UACvB9G,EAAO+G,MAAM,4EAA6E6H,EAAK4O,EAAgBC,iBAAiBF,EAAM7E,GAAO,GAAOjU,EAAKoZ,EAAYX,EACxK,CACD,MAAOjc,GACHjB,EAAOkB,MAAM,wBAAyBD,EAAKwD,EAAKxD,EACnD,CACD,OAAO2N,CACV,CACDtP,4BAA4ByF,EAAMsH,EAAU,GACxC,IACItH,EAAKiY,OAAS,QACd,MAAM9c,EAAO,CACTuP,MAAO,EACPwN,aAAc,EACdC,MAAO,GAEXld,EAAO+G,MAAM,4BAA6BhC,GAC1C,MAAM2T,GAAQ,IAAI7R,MAAOC,UACzB,IAAIqW,EAAa,KACjB,MAAMC,EAAUrY,EAAKoX,MACrBpX,EAAKoX,MAAQ,KACb,GACIgB,QAAmBne,KAAKod,2BAA2BC,GAAMrd,KAAKsd,YAAYD,IAAItX,GAC9E7E,EAAKuP,OAAS0N,EAAkB,MAChCjd,EAAK+c,cAAgBE,EAAyB,aAC9Cjd,EAAKgd,QACLnY,EAAwB,kBAAIoY,GAAYG,uBAClClS,EAAeC,KAAKgB,GAC1BrM,EAAO2G,MAAM,iBAAkBzG,GAC3Bkd,GAAWld,EAAKuP,OAAS2N,GAAWrY,EAAwB,oBAC5D/E,EAAOC,KAAK,sCAAuCmd,GACnDrY,EAAwB,kBAAI,YAE3BA,EAAwB,mBACjC,MAAMwY,GAAM,IAAI1W,MAAOC,UAEvB,OADA9G,EAAO+G,MAAM,qCAAsC7G,EAAMsd,EAAgBC,iBAAiBF,EAAM7E,GAAO,GAAO3T,GACvG7E,CACV,CACD,MAAOe,GAEH,OADAjB,EAAOkB,MAAM,wBAAyBD,EAAK8D,EAAM9D,GAC1C,IACV,CACJ,CACD3B,uBAAuByF,EAAMsH,EAAU,EAAGqR,EAAY,MAClD,MAAMxd,EAAO,GAIb,aAHMlB,KAAK8e,4BAA4B/Y,GAAMzF,MAAOse,IAChD1d,EAAKsI,KAAKoV,EAAE,GACbvR,EAASqR,GACLxd,CACV,CACDZ,kCAAkCyF,EAAM2X,EAAMrQ,EAAU,EAAGqR,EAAY,MACnE,IAAI9O,EAAM,EACV,IACI5O,EAAO+G,MAAM,sBAAuBhC,GACpC,MAAM2T,GAAQ,IAAI7R,MAAOC,UACzB9G,EAAO+G,MAAM,aAAchC,GAC3B,IAAIoY,QAAmBne,KAAKod,2BAA2BC,GAAMrd,KAAKsd,YAAYD,IAAItX,GAClF,IAAK,IAAIyF,EAAI,EAAGA,EAAI2S,EAAWZ,MAAM7c,OAAQ8K,UACnCkS,EAAKS,EAAWZ,MAAM/R,IAC5BoE,IAEJ,KAAOuO,EAAWG,mBAAmC,OAAdI,GAAsB9O,EAAM8O,KAAe3Y,EAAKoX,OAAO,CAC1Fnc,EAAO2G,MAAM,wCAAyCwW,EAAWG,kBACjEvY,EAAwB,kBAAIoY,EAAWG,iBACvCH,QAAmBne,KAAKod,2BAA2BC,GAAMrd,KAAKsd,YAAYD,IAAItX,GAC9E,IAAK,IAAIyF,EAAI,EAAGA,EAAI2S,EAAWZ,MAAM7c,OAAQ8K,UACnCkS,EAAKS,EAAWZ,MAAM/R,IAC5BoE,IAEJ5O,EAAO2G,MAAM,uBAAwBiI,SAC/BxD,EAAeC,KAAKgB,EAC7B,CACD,MAAMkR,GAAM,IAAI1W,MAAOC,UACvB9G,EAAO+G,MAAM,8CAA+C6H,EAAK4O,EAAgBC,iBAAiBF,EAAM7E,GAAO,GAAO3T,EACzH,CACD,MAAO9D,GACHjB,EAAOkB,MAAM,wBAAyBD,EAAK8D,EAAM9D,EACpD,CACD,OAAO2N,CACV,CACDtP,wBAAwBuD,EAAWkb,EAAUC,GACzC,IAAKA,GAAaA,EAAY,EAC1B,MAAM,IAAIrP,MAAM,0CAA4CqP,GAEhE,IAAI9d,EAAO,EACX,GAAM6d,GAAYA,EAASre,OAAS,EAAG,CACnC,IAAIue,EAAa,GAWjB,IAVAF,EAAS9Y,SAASiZ,IACdD,EAAWzV,KAAK,CACZ2V,WAAY,CACRC,KAAMF,EACNG,uBAAwB,QACxB3Z,UAAW7B,IAEjB,IAEN7C,EAAO+G,MAAM,kCAAmCkX,EAAWve,OAAQmD,GAC5Dob,EAAWve,OAAS,GAAG,CAC1B,MAAM4e,EAAWL,EAAWM,MAAM,EAAGva,KAAK2G,IAAIsT,EAAWve,OAAQse,IACjEC,EAAaA,EAAWM,MAAMD,EAAS5e,QACvC,MAAMqI,EAAS,CACXyW,aAAc,CAAE,EAChBH,uBAAwB,QACxBI,4BAA6B,QAEjC1W,EAAOyW,aAAa3b,GAAayb,EACjC,IAAII,EAAW,EACXrM,GAAO,EACPsM,EAAe,KACnB,MAAQtM,GAAQqM,EAAW,GAAG,CAC1B,IACIC,QAAqB3f,KAAKgd,OAAOza,KAAK,IAAIqd,EAAkB7W,GAC/D,CACD,MAAO9G,GACH,IAAI8a,GAAce,4DAA4D7b,GAK1E,MAAMA,EAJNjB,EAAOC,KAAK,mEACZ0e,EAAe,CAAEE,iBAAkB9W,EAAOyW,aAKjD,CACD,GAAMG,GACAA,EAAaE,kBACbF,EAAaE,iBAAiBhc,IAChC8b,EAAaE,iBAAiBhc,GAAWnD,OAAS,EAAG,CACrD,MAAMof,EAAU9a,KAAK+Y,IAAI,EAAG2B,GAC5B1e,EAAOsL,KAAK,uEAAwEqT,EAAaE,iBAAiBhc,GAAWnD,OAAQof,SAC/H1T,EAAeC,KAAe,IAAVyT,GAC1BJ,IACA3W,EAAOyW,aAAa3b,GAAa8b,EAAaE,iBAAiBhc,EAClE,MAEGwP,GAAO,CAEd,CACKsM,GACAA,EAAaE,kBACbF,EAAaE,iBAAiBhc,IAChC8b,EAAaE,iBAAiBhc,GAAWnD,OAAS,GAClDM,EAAOkB,MAAM,uDACbhB,GAAQoe,EAAS5e,OAASif,EAAaE,iBAAiBhc,GAAWnD,OACnEM,EAAOsL,KAAK,uBAAwBqT,EAAaE,mBAGjD3e,GAAQoe,EAAS5e,MAExB,CACJ,CACD,OAAOQ,CACV,CACDZ,iDAAiDmF,EAAKsa,EAAUf,EAAY,IACxE/e,EAAeC,mBAAmBuF,GAClCxF,EAAeC,mBAAmBuF,EAAIC,WACtCzF,EAAeC,mBAAmB6f,GAClC9f,EAAe8D,KAAKgc,EAASrf,OAAS,GACtC,MAAMsf,QAAmBhgB,KAAK8F,kBAAkBL,GAC1Cwa,EAAWlD,GAAcmD,mBAAmBF,EAAYD,GAE9D,aADmB/f,KAAKmgB,kBAAkB1a,EAAIC,UAAWua,EAAUjB,EAEtE,CACD1e,wBAAwBuD,EAAWuc,EAAQpB,GACvC,IAAKA,GAAaA,EAAY,GAAKA,EAAY,IAC3C,MAAM,IAAIrP,MAAM,+DAAiEqP,GAErF,IAAI9d,EAAO,GACX,MAAMmf,EAAU,GAChB,IAAIC,EAASzb,OAAOC,OAAO,GAAIsb,GAC/B,KAAOE,EAAO5f,OAAS,GAAG,CACtB,MAAM4e,EAAWgB,EAAOf,MAAM,EAAGva,KAAK2G,IAAI2U,EAAO5f,OAAQse,IACzDsB,EAASA,EAAOf,MAAMD,EAAS5e,QAC/B,MAAM6f,EAAa,CAAA,EACnBA,EAAW1c,GAAa,CACpB2c,KAAMlB,GAEV,MAAMmB,EAAY,CACdjB,aAAce,EACdlB,uBAAwB,SAE5BgB,EAAQ7W,KAAKiX,EAChB,CACDzf,EAAO+G,MAAM,qBAAsBsY,EAAQ3f,QAC3C,IAAK,IAAI8K,EAAI,EAAGA,EAAI6U,EAAQ3f,OAAQ8K,IAAK,CACjC6U,EAAQ3f,OAAS,GACjBM,EAAOC,KAAK,4BAA6BuK,EAAI,EAAG6U,EAAQ3f,QAE5D,MAAMuT,EAAQoM,EAAQ7U,GACtB,IAAIkU,EAAW,EACf,EAAG,CACC1e,EAAO2G,MAAM,aAAcsM,GAC3B,MAAMvH,QAAY1M,KAAKgd,OAAOza,KAAK,IAAIme,EAAgBzM,IACvD/S,EAAOA,EAAK8B,OAAO0J,EAAIiU,UAAU9c,IAC3B6I,EAAIkU,iBAAqBlU,EAAIkU,gBAAgB/c,IAAc6I,EAAIkU,gBAAgB/c,GAAW2c,KAAK9f,OAAS,GAAKgf,EAAW,KAC1H1e,EAAO2G,MAAM,gCAAiC+E,EAAIkU,gBAAgB/c,GAAW2c,YACvEpU,EAAeC,KAA6B,IAAxBrH,KAAK+Y,IAAI,EAAG2B,IACtCA,KAEJzL,EAAMuL,aAAe9S,EAAIkU,eACzC,QAAsB3M,EAAMuL,cAAgBvL,EAAMuL,aAAa3b,GAAW2c,KAAK9f,OAAS,EAC/E,CACD,OAAOQ,CACV,CACDZ,yBAAyBuD,EAAWQ,EAAM2a,GACtC,IAAKA,GAAaA,EAAY,EAC1B,MAAM,IAAIrP,MAAM,0CAA4CqP,GAEhE,IAAI9d,EAAO,EACX,GAAMmD,GAAQA,EAAK3D,OAAS,EAAG,CAC3B,IAAIue,EAAa,GAWjB,IAVA5a,EAAK4B,SAASiZ,IACVD,EAAWzV,KAAK,CACZqX,cAAe,CACX9O,IAAKmN,EACLG,uBAAwB,QACxB3Z,UAAW7B,IAEjB,IAEN7C,EAAO+G,MAAM,wCAAyCkX,EAAWve,OAAQmD,GAClEob,EAAWve,OAAS,GAAG,CAC1B,MAAM4e,EAAWL,EAAWM,MAAM,EAAGva,KAAK2G,IAAIsT,EAAWve,OAAQse,IACjEC,EAAaA,EAAWM,MAAMD,EAAS5e,QACvC,MAAMqI,EAAS,CACXyW,aAAc,CAAE,EAChBH,uBAAwB,QACxBI,4BAA6B,QAEjC1W,EAAOyW,aAAa3b,GAAayb,EACjC,IAAII,EAAW,EACXrM,GAAO,EACPsM,EAAe,KACnB,MAAQtM,GAAQqM,EAAW,GAAG,CAC1B,IACIC,QAAqB3f,KAAKgd,OAAOza,KAAK,IAAIqd,EAAkB7W,GAC/D,CACD,MAAO9G,GACH,IAAI8a,GAAce,4DAA4D7b,GAK1E,MAAMA,EAJNjB,EAAOC,KAAK,mEACZ0e,EAAe,CAAEE,iBAAkB9W,EAAOyW,aAKjD,CACD,GAAMG,GACAA,EAAaE,kBACbF,EAAaE,iBAAiBhc,IAChC8b,EAAaE,iBAAiBhc,GAAWnD,OAAS,EAAG,CACrD,MAAMof,EAAU9a,KAAK+Y,IAAI,EAAG2B,GAC5B1e,EAAOsL,KAAK,uEAAwEqT,EAAaE,iBAAiBhc,GAAWnD,OAAQof,SAC/H1T,EAAeC,KAAe,IAAVyT,GAC1BJ,IACA3W,EAAOyW,aAAa3b,GAAa8b,EAAaE,iBAAiBhc,EAClE,MAEGwP,GAAO,CAEd,CACKsM,GACAA,EAAaE,kBACbF,EAAaE,iBAAiBhc,IAChC8b,EAAaE,iBAAiBhc,GAAWnD,OAAS,GAClDM,EAAOkB,MAAM,uDACbhB,GAAQoe,EAAS5e,OAASif,EAAaE,iBAAiBhc,GAAWnD,OACnEM,EAAOsL,KAAK,uBAAwBqT,EAAaE,mBAGjD3e,GAAQoe,EAAS5e,OAErBM,EAAO+G,MAAM,sCAAuCkX,EAAWve,OAAQif,EAC1E,CACJ,CACD,OAAOze,CACV,CACDZ,gBAAgBuD,EAAWc,EAAOmc,EAAiB,GAC/C,IAAI5f,EAAO,KACP2c,EAAa,EACjB,MAAM9U,EAAS,CACXqW,KAAMza,EACN0a,uBAAwB,QACxB3Z,UAAW7B,GAEf,MAAQ3C,GAAQ2c,EAAaiD,GACzB,IACI5f,QAAalB,KAAKgd,OAAOza,KAAK,IAAIwe,EAAWhY,GAChD,CACD,MAAO9G,GACH,IAAI8a,GAAce,4DAA4D7b,GAO1E,MAAMA,EAP0E,CAChF,MAAMoK,EAAiC,IAA1BrH,KAAK+Y,IAAI,EAAGF,GACzB7c,EAAO+G,MAAM,kEAAmEgB,EAAQ8U,EAAYiD,EAAgBzU,SAC9GD,EAAeC,KAAKA,GAC1BwR,GACH,CAIJ,CAKL,OAHK3c,GACDF,EAAOsL,KAAK,sDAAuDvD,EAAQ+X,GAExE5f,CACV,CACDZ,4CAA4CuD,EAAWc,EAAOqc,GAC1D,IAAI9f,GAAO,EACX,MAAM6H,EAAS,CACXqW,KAAMza,EACN0a,uBAAwB,QACxB4B,oBAAqB,0DACrBrb,yBAA0B,CACtB,aAAcob,GAElBnb,0BAA2B,CACvB,QAAS,MAEbH,UAAW7B,GAEf,IACI,MAAMqd,QAAclhB,KAAKgd,OAAOza,KAAK,IAAIwe,EAAWhY,IACpD/H,EAAO2G,MAAM,aAAcuZ,GAC3BhgB,GAAO,CACV,CACD,MAAOe,GACH,GAAI8a,GAAce,4DAA4D7b,GAC1EjB,EAAO+G,MAAM,uDAAwDgB,SAC/DqD,EAAeC,KAAK,KAC1BnL,QAAalB,KAAKmhB,sCAAsCtd,EAAWc,EAAOqc,OAEzE,KAAI/e,IAAOA,EAAU,MAAqB,oCAAhBA,EAAU,KAKrC,MAAMA,EAJNjB,EAAO+G,MAAM,gDACb7G,GAAO,CAIV,CACJ,CACD,OAAOA,CACV,CACDZ,sCAAsCuD,EAAWc,EAAOob,EAAUqB,EAAgBC,EAAa,KAAMP,EAAiB,GAClH7gB,EAAe8D,KAAKgc,GAAYA,EAASrf,OAAS,GAAKqf,EAASrf,OAAS,EAAG,kCAC5E,IAAI4gB,EAAM,KACNzD,EAAa,EACjB,MAAM0D,EAAY,CACd,QAASxB,EAAS,IAEhByB,EAAa,CACf,QAAS7c,EAAMob,EAAS,KAE5B,IAAI0B,EAAU,iBACV1B,EAASrf,OAAS,IAClB+gB,GAAW,sBACXF,EAAU,SAAWxB,EAAS,GAC9ByB,EAAW,SAAW7c,EAAMob,EAAS,KAEzC,MAAMhX,EAAS,CACXqW,KAAMza,EACN0a,uBAAwB,QACxB4B,oBAAqBQ,EACrB7b,yBAA0B2b,EAC1B1b,0BAA2B2b,EAC3B9b,UAAW7B,GAEf,IAAI6d,EAAc,EAClB,MAAQJ,GAAOzD,EAAaiD,KAAoBO,GAAcK,EAAcL,IACxE,IACIC,QAAYthB,KAAKgd,OAAOza,KAAK,IAAIwe,EAAWhY,GAC/C,CACD,MAAO9G,GACH,GAAI8a,GAAce,4DAA4D7b,GAAM,CAChF4b,IACA,MAAMxR,EAAiC,IAA1BrH,KAAK+Y,IAAI,EAAGF,GACzB7c,EAAO+G,MAAM,kEAAmEgB,EAAQ8U,EAAYiD,EAAgBzU,SAC9GD,EAAeC,KAAKA,EAC7B,KACI,KAAIpK,IAAOA,EAAU,MAAqB,oCAAhBA,EAAU,KAYrC,MAAMA,EAZwE,CAC9E,IAAI0f,EAAW9c,OAAOC,OAAO,CAAA,EAAIiE,EAAOqW,MACxCpe,EAAOC,KAAK,+DAAgE0gB,GAC5EA,EAAWP,EAAeO,GAC1B5Y,EAAOqW,KAAOuC,EACd5Y,EAAOlD,0BAA0B,SAAW8b,EAAS5B,EAAS,IAC1DA,EAASrf,OAAS,IAClBqI,EAAOlD,0BAA0B,SAAW8b,EAAS5B,EAAS,KAElE2B,GACH,CAGA,CACJ,CAQL,OANIJ,GAAOI,EAAc,GACrB1gB,EAAOC,KAAK,mCAAoC0D,EAAOoE,EAAOqW,MAE7DkC,GACDtgB,EAAOsL,KAAK,+EAAgFvD,EAAQ8U,EAAY6D,GAE7GJ,EAAMvY,EAAOqW,KAAO,IAC9B,CACD9e,gBAAgBuD,EAAWQ,EAAMyc,EAAiB,GAC9C,IAAIc,EAAS,KACT/D,EAAa,EACjB,MAAM9U,EAAS,CACXrD,UAAW7B,EACXkO,IAAK1N,GAET,MAAQud,GAAU/D,EAAaiD,GAC3B,IACIc,QAAe5hB,KAAKgd,OAAOza,KAAK,IAAIsf,EAAW9Y,GAClD,CACD,MAAO9G,GACH,IAAI8a,GAAce,4DAA4D7b,GAO1E,MAAMA,EAP0E,CAChF,MAAMoK,EAAiC,IAA1BrH,KAAK+Y,IAAI,EAAGF,GACzB7c,EAAO+G,MAAM,iEAAkEgB,EAAQ8U,EAAYiD,EAAgBzU,SAC7GD,EAAeC,KAAKA,GAC1BwR,GACH,CAIJ,CAEA+D,GACD5gB,EAAOsL,KAAK,uDAAwDvD,EAAQ+X,GAGhF,OADec,GAAYA,EAAOxC,KAAOva,OAAOC,OAAO,CAAE,EAAE8c,EAAOxC,MAAQ,IAE7E,CACDjc,mEAAmElB,GAC/D,QAASA,KAASA,EAAU,MAAqB,2CAAhBA,EAAU,IAC9C,CACD3B,oCAAoCuD,EAAWQ,EAAMyd,EAAsBC,EAAcjB,EAAiB,GACtG,IAAIc,EAAS,KACT/D,EAAa,EACjB,MAAM9U,EAAS,CACXrD,UAAW7B,EACXkO,IAAK1N,EACL2d,iBAAkB,kCAClBpc,yBAA0B,CACtB,WAAYkc,GAEhBjc,0BAA2B,CACvB,UAAW,EACX,UAAW,GAEfob,oBAAqB,qBACrBgB,aAAc,WAElB,IAAIC,GAAe,EACnB,MAAQN,GAAU/D,EAAaiD,IAAmBoB,GAC9C,IACIN,QAAe5hB,KAAKgd,OAAOza,KAAK,IAAI4f,EAAkBpZ,GACzD,CACD,MAAO9G,GACH,GAAI8a,GAAce,4DAA4D7b,GAAM,CAChF,MAAMoK,EAAiC,IAA1BrH,KAAK+Y,IAAI,EAAGF,GACzB7c,EAAO+G,MAAM,mEAAoEgB,EAAQ8U,EAAYiD,EAAgBzU,SAC/GD,EAAeC,KAAKA,GAC1BwR,GACH,KACI,KAAM5b,IAASA,EAAU,MAAqB,oCAAhBA,EAAU,KAKzC,MAAMA,EAJNjB,EAAOC,KAAK,4DAA6DoD,GACzE6d,GAAe,CAIlB,CACJ,CAEAN,GAAWM,GACZlhB,EAAOsL,KAAK,yDAA0DvD,EAAQ+X,GAElF,MAAM5f,EAAS0gB,GAAYA,EAAOQ,WAAavd,OAAOC,OAAO,CAAE,EAAE8c,EAAOQ,YAAc,KAKtF,OAJIL,GAAgB7gB,GAAuC,IAA/BA,EAAK4gB,KAC7B9gB,EAAOC,KAAK,yCACNjB,KAAKmF,aAAatB,EAAWQ,IAEhCnD,CACV,CACDZ,mBAAmBuD,EAAWQ,GAC1B,MAAM0E,EAAS,CACXrD,UAAW7B,EACXkO,IAAK1N,GAGT,aADqBrE,KAAKgd,OAAOza,KAAK,IAAI8f,EAActZ,GAE3D,CACDzI,oBAAoBuD,EAAWQ,EAAMie,EAAkBC,EAAY,GAC/D,MAAMC,EAAS,CACX9c,UAAW7B,EACXkO,IAAK1N,EACL2d,iBAAkB,mDAClBpc,yBAA0B,CACtB,oBAAqB0c,GAEzBzc,0BAA2B,CACvB,OAAQ0c,GAEZN,aAAc,eAEZQ,QAAWziB,KAAKgd,OAAOza,KAAK,IAAI4f,EAAkBK,IAExD,OADaE,EAAcC,WAAWF,EAAGL,WAAWE,GAEvD,CACDnf,mBAAmByf,GACf,GAAMA,EAAI,CACN,MAAMC,EAAM,GACZhe,OAAOR,KAAKue,GAAI3c,SAASe,IACrB,MAAM4X,EAAIgE,EAAG5b,GACH,KAAN4X,EACAiE,EAAIrZ,KAAKxC,GAEJ4X,aAAa/Z,QAClBkY,GAAc+F,YAAYlE,EAC7B,IAEL5d,EAAO2G,MAAM,qBAAsBkb,GACnCA,EAAI5c,SAASe,WACF4b,EAAG5b,EAAE,GAEnB,CACJ,CACD7D,uBAAuB8Q,EAAO8O,GAC1B,IAAI7hB,EAAO,KAUX,OATM+S,GAAW8O,GAAaA,EAAUriB,OAAS,IAC7CQ,EAAO,CAAA,EACP6hB,EAAU9c,SAASe,IACViN,EAAMjN,IACPlG,EAAaC,kBAAkB,2CAA4CkT,EAAOjN,GAEtF9F,EAAK8F,GAAKiN,EAAMjN,EAAE,KAGnB9F,CACV,CACDiC,0BAA0B8Q,EAAO5P,GAE7B,OADa4P,EAAM3O,KAAKkG,GAAMuR,GAAciG,gBAAgBxX,EAAGnH,IAElE,ECrpBE,MAAM4e,GACTjG,OACAjd,YAAYid,GAER,GADAhd,KAAKgd,OAASA,GACTA,EACD,KAAM,wBAEb,CACD1c,kBAAkBuD,EAAWqf,GAAgB,GACzCjjB,EAAeC,mBAAmB2D,GAClC,MAAMoQ,EAAQ,CACVvO,UAAW7B,GAEf7C,EAAO+G,MAAM,wBAAyBlE,GACtC,MAAM3C,QAAalB,KAAKgd,OAAOza,KAAK,IAAI4gB,EAAmBlP,IAK3D,OAJIiP,IACAliB,EAAO+G,MAAM,uDACP/H,KAAKojB,mBAAmBvf,IAE3B3C,CACV,CACDZ,kBAAkB2T,EAAOoP,GAAe,EAAMC,GAAkB,GAC5DrjB,EAAeC,mBAAmB+T,GAClChU,EAAeC,mBAAmB+T,EAAMvO,WACxC1E,EAAO+G,MAAM,0BAA2BkM,SACnBjU,KAAKujB,YAAYtP,EAAMvO,aAEpC4d,GACAtiB,EAAO+G,MAAM,mDAAoDkM,EAAMvO,iBACjE1F,KAAKwjB,YAAYvP,EAAMvO,YAG7B5E,EAAaC,kBAAkB,oEAAqEkT,EAAMvO,YAGlH,MAAMxE,QAAalB,KAAKgd,OAAOza,KAAK,IAAIkhB,EAAmBxP,IAK3D,OAJIoP,IACAriB,EAAO+G,MAAM,uCACP/H,KAAK0jB,kBAAkBzP,EAAMvO,YAEhCxE,CACV,CACDZ,wBAAwBuD,GACpB,IAAI3C,GAAO,EACPwT,QAAY1U,KAAK2jB,kBAAkB9f,GACvC,KAAS6Q,GAASA,EAAIkP,OAAmC,WAA1BlP,EAAIkP,MAAMC,aACrC7iB,EAAO2G,MAAM,6CACPyE,EAAeC,KAAK,KAC1BqI,QAAY1U,KAAK2jB,kBAAkB9f,GAMvC,OAJK6Q,GAAQA,EAAIkP,QACb5iB,EAAOsL,KAAK,wDAAyDzI,GACrE3C,GAAO,GAEJA,CACV,CACDZ,yBAAyBuD,GACrB,IAAI6Q,QAAY1U,KAAK2jB,kBAAkB9f,GACvC,KAAS6Q,GACL1T,EAAO2G,MAAM,yDAA0D9D,EAAW6Q,EAAIkP,MAAMC,mBACtFzX,EAAeC,KAAK,KAC1BqI,QAAY1U,KAAK2jB,kBAAkB9f,EAE1C,CACDvD,kBAAkBuD,GAEd,cADmB7D,KAAK2jB,kBAAkB9f,EAE7C,CACDvD,sBACI,MAAM2T,EAAQ,CAAA,EACd,IAAI/S,EAAO,GACX,EAAG,CACC,MAAMwT,QAAY1U,KAAKgd,OAAOza,KAAK,IAAIuhB,EAAkB7P,IACzD/S,EAAOA,EAAK8B,OAAO0R,EAAIqP,YACvB9P,EAAM+P,wBAA0BtP,EAAIuP,sBAChD,OAAiBhQ,EAAM+P,yBACf,OAAO9iB,CACV,CACDZ,wBAAwBuD,GACpB,IAEI,aADkB7D,KAAKgd,OAAOza,KAAK,IAAI2hB,EAAqB,CAAExe,UAAW7B,IAE5E,CACD,MAAO5B,GACH,GAAIA,aAAekiB,EACf,OAAO,KAGP,MAAMliB,CAEb,CACJ,CACD3B,gBAAgB8jB,EAAcC,EAAcC,EAAWC,GAGnD,GAFAtkB,EAAemc,uCAAuCgI,EAAc,gBACpEnkB,EAAemc,uCAAuCiI,EAAc,gBAChEE,EACA,MAAMzjB,EAAa0jB,KAAK,qDAAsDJ,EAAcC,GAEhG,MAAMI,QAAoBzkB,KAAK2jB,kBAAkBS,GACjD,SAAUpkB,KAAKujB,YAAYc,GACvB,MAAMvjB,EAAa0jB,KAAK,2CAA4CH,GAExE,IAAKI,EACD,MAAM3jB,EAAa0jB,KAAK,gCAAiCJ,GAEjDK,EAAYb,MAAMc,qBACnBD,EAAYb,MAAMe,UAClBF,EAAYb,MAAMgB,uBAC7B,MAAMC,EAAchgB,OAAOC,OAAO,CAAA,EAAIwf,GAAa,CAAA,EAAI,CACnDI,qBAAsBD,EAAYb,MAAMc,qBACxChf,UAAW2e,EACXM,UAAWF,EAAYb,MAAMe,UAC7BG,sBAAuBL,EAAYb,MAAMkB,sBACzCF,uBAAwBH,EAAYb,MAAMgB,uBAAuBtf,KAAKyf,IAClE,MAAMC,EAASD,EAIf,OAHyD,IAArDC,EAAOC,uBAAuBC,oBAAgF,IAApDF,EAAOC,uBAAuBE,oBACxFH,EAAOC,2BAAwB1O,GAE5ByO,CAAM,IAEjBI,YAAaX,EAAYb,MAAMyB,mBAAmBD,YAClDH,sBAA4E,gBAArDR,EAAYb,MAAMyB,mBAAmBD,YACtDX,EAAYb,MAAMqB,2BAClB1O,EACN+O,oBAAqBb,EAAYb,MAAM0B,oBACvCC,iBAAkBd,EAAYb,MAAM4B,eACpCC,UAAMlP,EACNmP,WAAYjB,EAAYb,MAAM+B,mBAAmBD,WACjDE,0BAA2BnB,EAAYb,MAAMgC,4BAGjD,aADmB5lB,KAAKgd,OAAOza,KAAK,IAAIkhB,EAAmBoB,GAE9D,ECrIE,MAAMgB,GACTC,MACAC,QACAC,UACAC,SACAC,UACAnmB,YAAY+lB,EAAQ,EAAGC,EAAU,GAAIC,EAAY,IAAKC,EAAW,oBAC7DjmB,KAAK8lB,MAAQA,EACb9lB,KAAK+lB,QAAUA,EACf/lB,KAAKgmB,UAAYA,EACjBhmB,KAAKimB,SAAWA,EAChBhmB,EAAe8D,KAAK+hB,EAAQ,EAAG,+BAC/B7lB,EAAe8D,KAAKgiB,EAAU,EAAG,iCACjC9lB,EAAeC,mBAAmBS,EAAcC,WAAWqlB,GAAW,qCACtEhmB,EAAe8D,KAAKpD,EAAcwlB,UAAUF,GAAW,2BACvDhmB,EAAe8D,KAAKpD,EAAcylB,+BAA+BH,GAAW,iCAC5E,MAAMI,EAAerhB,KAAK+Y,IAAIkI,EAASvlB,OAAQolB,GAC/C7lB,EAAe8D,KAAKgiB,EAAUM,EAAc,2CAA6CN,EAAU,MAAQM,EAAe,KAC1HpmB,EAAeC,mBAAmBS,EAAcC,WAAWZ,KAAKgmB,WAAY,0CAC5E,MAAMM,EAAW3lB,EAAc4lB,wBAAwBT,EAAOG,GAC9DjmB,KAAKkmB,UAAYI,EAAS/G,MAAM,EAAGwG,EACtC,CACGS,iBACA,OAAO3hB,OAAOC,OAAO,GAAI9E,KAAKkmB,UACjC,CACGO,mBACA,OAAOzmB,KAAKkmB,UAAUlhB,KAAKC,MAAMD,KAAK0hB,SAAW1mB,KAAK+lB,SACzD,CACDY,gBAAgB1S,GACZhU,EAAeC,mBAAmBS,EAAcC,WAAWqT,GAAQ,kCAEnE,OADajU,KAAKkmB,UAAU5gB,KAAK+D,GAAM4K,EAAQjU,KAAKgmB,UAAY3c,GAEnE,CACDud,wBAAwBC,GACpB5mB,EAAe8D,KAAK8iB,GAAUA,EAAOnmB,OAAS,EAAG,kCACjD,IAAIQ,EAAO,GAIX,OAHA2lB,EAAO5gB,SAASuF,IACZtK,EAAOA,EAAK8B,OAAOhD,KAAK2mB,gBAAgBnb,GAAG,IAExCtK,CACV,CACD4lB,YAAY7S,GAER,OADAhU,EAAeC,mBAAmBS,EAAcC,WAAWqT,GAAQ,kCAC5DA,EAAQjU,KAAKgmB,UAAYhmB,KAAKymB,YACxC,CACDM,cAAc9S,GACVhU,EAAeC,mBAAmBS,EAAcC,WAAWqT,GAAQ,2CACnE,MAAM+S,EAAM/S,EAAMvT,OAASV,KAAK8lB,MAIhC,OAHIkB,EAAM,GAAK/S,EAAMgT,OAAOD,KAAShnB,KAAKgmB,YACtCllB,EAAaC,kBAAkB,kFAAmFf,KAAKgmB,UAAWgB,GAE/H/S,EAAM8D,UAAUiP,EAC1B,CACDE,aAAajT,GACThU,EAAeC,mBAAmBS,EAAcC,WAAWqT,GAAQ,2CACnE,MAAM+S,EAAM/S,EAAMvT,OAASV,KAAK8lB,MAIhC,OAHIkB,EAAM,GAAK/S,EAAMgT,OAAOD,KAAShnB,KAAKgmB,YACtCllB,EAAaC,kBAAkB,iFAAkFf,KAAKgmB,UAAWgB,GAE9H/S,EAAM8D,UAAU,EAAGiP,EAC7B,EC1DE,MAAMG,GACTxe,OACAye,iBACAC,IACAC,mBACAvnB,YAAY4I,EAAS,YAAaye,EAAmB,cACjDpnB,KAAK2I,OAASA,EACd3I,KAAKonB,iBAAmBA,EACxBpnB,KAAKqnB,IAAM,IAAIE,EAAU,CAAE5e,OAAQA,IACnC3I,KAAKsnB,mBAAqB,IAAIE,GAAyB,CAAE7e,OAAQA,GACpE,CACG8e,gBACA,OAAOznB,KAAKqnB,GACf,CACGK,+BACA,OAAO1nB,KAAKsnB,kBACf,CACDhnB,mBAAmBqnB,EAAYC,EAAuB,GAClD,IAAI1mB,GAAO,EACX,IACI,MAAM2mB,EAAa,CACfC,YAAa,CAACH,GACdI,QAAQ,GAEZ/mB,EAAOC,KAAK,+BAAgC4mB,SACtC7nB,KAAKqnB,IAAI9kB,KAAK,IAAIylB,EAAqBH,IAC7C7mB,EAAOC,KAAK,mDACZ,IAAIqM,QAAetN,KAAKioB,iBAAiBN,GACzC,GAAIC,EAAuB,EAAG,CAC1B,MAAMlO,GAAQ,IAAI7R,MAAOC,UACzB,KAASwF,GAAgC,KAAtBA,EAAO4a,MAAMC,OAAe,IAAItgB,MAAOC,UAAY4R,EAAQkO,GAC1E5mB,EAAO+G,MAAM,2DAA4DuF,EAAO4a,MAAO1J,EAAgBC,iBAAiBmJ,UAClHxb,EAAeC,KAAK,KAC1BiB,QAAetN,KAAKioB,iBAAiBN,EAE5C,CACJ,CACD,MAAO1lB,GACHjB,EAAOkB,MAAM,kCAAmCylB,EAAY1lB,EAAKA,GACjEf,GAAO,CACV,CACD,OAAOA,CACV,CACDZ,qBAAqBqnB,EAAYS,EAAsB,GACnD,IAAIlnB,GAAO,EACX,IACI,MAAMmnB,EAAc,CAChBP,YAAa,CAACH,GACdI,QAAQ,GAEZ/mB,EAAOC,KAAK,+BAAgConB,SACtCroB,KAAKqnB,IAAI9kB,KAAK,IAAI+lB,EAAsBD,IAC9CrnB,EAAOC,KAAK,mDACZ,IAAIqM,QAAetN,KAAKioB,iBAAiBN,GACzC,GAAIS,EAAsB,EAAG,CACzB,MAAM1O,GAAQ,IAAI7R,MAAOC,UACzB,KAASwF,GAAgC,KAAtBA,EAAO4a,MAAMC,OAAe,IAAItgB,MAAOC,UAAY4R,EAAQ0O,GAC1EpnB,EAAO+G,MAAM,2DAA4DuF,EAAO4a,MAAO1J,EAAgBC,iBAAiB2J,UAClHhc,EAAeC,KAAK,KAC1BiB,QAAetN,KAAKioB,iBAAiBN,EAE5C,CACKra,GAAYA,EAAOib,kBACrBvnB,EAAOC,KAAK,yBAA0BqM,EAAOib,iBAC7CvnB,EAAOC,KAAK,oDAAqDqM,EAAOib,iBAE/E,CACD,MAAOtmB,GACHjB,EAAOkB,MAAM,mCAAoCylB,EAAY1lB,EAAKA,GAClEf,GAAO,CACV,CACD,OAAOA,CACV,CACDZ,uBAAuBqnB,GACnB,MAAMjb,QAAY1M,KAAKwoB,iBAAiB,CAACb,IACzC,OAAsB,IAAfjb,EAAIhM,OAAegM,EAAI,GAAK,IACtC,CACDpM,uBAAuBmoB,EAAc,IACjC,IAAIvnB,EAAO,GACX,MAAM4L,EAAM,CACR4b,UAAW,MAEXD,GAAeA,EAAY/nB,OAAS,IACpCoM,EAAIgb,YAAcW,GAEtB,EAAG,CACCznB,EAAO+G,MAAM,4BAA6B+E,GAC1C,MAAMJ,QAAY1M,KAAKqnB,IAAI9kB,KAAK,IAAIomB,EAAyB7b,IAC7DJ,EAAIkc,aAAa3iB,SAASC,IACtBhF,EAAOA,EAAK8B,OAAOkD,EAAE2iB,UAAU,IAEnC/b,EAAI4b,UAAYhc,EAAIgc,SAChC,OAAiB5b,EAAI4b,WAEb,OADA1nB,EAAO+G,MAAM,wCAAyC7G,EAAKR,QACpDQ,CACV,CACDZ,iCAAiCqnB,EAAYmB,EAAiBC,GAC1D,MAAMC,EAAWD,GAAkB,WAC7Bjc,EAAM,CACRmc,WAAYtB,EACZuB,iBAAkBlpB,KAAKonB,iBACvB+B,eAAgBH,EAChBI,aAAcN,GAGlB,aADmB9oB,KAAKsnB,mBAAmB/kB,KAAK,IAAI8mB,GAAwBvc,GAE/E,EC5GE,MAAMwc,GACTC,UACAxpB,YAAYwpB,GACRvpB,KAAKupB,UAAYA,EACjBtpB,EAAeC,mBAAmBqpB,GAClCtpB,EAAe8D,KAAKwlB,EAAU7oB,OAAS,EAC1C,CACDJ,kBAAkB2X,GACdjX,EAAO2G,MAAM,iDAAkDsQ,GAC/D,IAAI/W,EAAO,KACX,IAAK,IAAIsK,EAAI,EAAGA,EAAIxL,KAAKupB,UAAU7oB,SAAWQ,EAAMsK,IAChD,IACItK,QAAalB,KAAKupB,UAAU/d,GAAGge,YAAYvR,EAC9C,CACD,MAAOhW,GACHjB,EAAOkB,MAAM,wCAAyCsJ,EAAGvJ,EAAKA,GAC9Df,EAAO,IACV,CAEL,OAAOA,CACV,ECpBE,MAAMuoB,GACTC,WACA3pB,YAAY2pB,GACR1pB,KAAK0pB,WAAaA,EAClBzpB,EAAeC,mBAAmBwpB,EACrC,CACDppB,oBACIU,EAAO2G,MAAM,gDAAiD3H,KAAK0pB,YACnE,IAAIxoB,EAAO,KACX,MAAMyoB,EAAMC,QAAUA,QAAQC,IAAMC,QAAkB,GAChDC,EAAUppB,EAAcC,WAAW+oB,EAAI3pB,KAAK0pB,aAClD,GAAIK,EACA,IACI7oB,EAAOU,KAAK+R,MAAMoW,EACrB,CACD,MAAO9nB,GAEH,MADAjB,EAAOkB,MAAM,sDAAuDD,EAAK8nB,EAAS9nB,GAC5EA,CACT,MAGDnB,EAAaC,kBAAkB,wCAAyCf,KAAK0pB,YAEjF,OAAOxoB,CACV,ECxBE,MAAM8oB,GACT5iB,SACAoT,IACAyP,iBAAmB,IAAIC,IACvB/mB,yCAKI,MAJa,CACTgnB,WAAY,EACZC,oBAAqB,IAG5B,CACDrqB,YAAYqH,EAAUoT,EAAMwP,GAAmBK,mCAC3CrqB,KAAKoH,SAAWA,EAChBpH,KAAKwa,IAAMA,EACXva,EAAeC,mBAAmBkH,GAClCnH,EAAeC,mBAAmBsa,EACrC,CACDla,gBAAgB2X,GAMZ,OALAjX,EAAO2G,MAAM,uCAAwCsQ,GAChDjY,KAAKiqB,iBAAiBK,IAAIrS,KAC3BjX,EAAO2G,MAAM,yCACb3H,KAAKiqB,iBAAiBM,IAAItS,EAAMjY,KAAKwqB,kBAAkBvS,KAEpDjY,KAAKiqB,iBAAiBQ,IAAIxS,EACpC,CACD3X,wBAAwB2X,GACpB,IAAIyH,EAAW,EACXxe,EAAO,KACX,MAAQA,GAAQwe,EAAW1f,KAAKwa,IAAI2P,YAAY,CAC5CzK,IACA1e,EAAO2G,MAAM,yBAA0BsQ,GACvC,IACI/W,QAAalB,KAAKoH,SAASoiB,YAAYvR,EAC1C,CACD,MAAOhW,GACH,MAAMyoB,EAAShL,EAAW1f,KAAKwa,IAAI4P,oBACnCppB,EAAOC,KAAK,wEAAyEgX,EAAMyH,EAAU1f,KAAKwa,IAAI2P,WAAYO,EAAQzoB,EAAKA,SACjImK,EAAeC,KAAKqe,EAC7B,CACJ,CAID,OAHKxpB,GACDJ,EAAaC,kBAAkB,sDAAuDkX,EAAMjY,KAAKwa,IAAI2P,YAElGjpB,CACV,EC5CE,MAAMypB,GACThmB,MACA5E,YAAY4E,GACR3E,KAAK2E,MAAQA,EACb1E,EAAeC,mBAAmByE,EACrC,CACDxB,kBAAkBynB,GACd,MAAMC,EAAI,IAAIX,IAId,OAHArlB,OAAOR,KAAKumB,GAAQ3kB,SAASe,IACzB6jB,EAAEN,IAAIvjB,EAAG4jB,EAAO5jB,GAAG,IAEhB,IAAI2jB,GAAgCE,EAC9C,CACDvqB,kBAAkB2X,GACdjX,EAAO2G,MAAM,+CAAgDsQ,GAE7D,OADajY,KAAK2E,MAAM8lB,IAAIxS,EAE/B,ECfE,MAAM6S,GACTtQ,IACAuQ,QACAhrB,YAAYya,GACRxa,KAAKwa,IAAMA,EACXva,EAAeC,mBAAmBsa,GAClCva,EAAeC,mBAAmBsa,EAAIwQ,YACtC/qB,EAAeC,mBAAmBsa,EAAI7R,QACtC1I,EAAe8D,OAAOyW,EAAIyQ,cAAgBzQ,EAAI7R,OAAQ,4CACtD,MAAMmL,EAAK0G,EAAIyQ,YAAc,IAAIC,EAAS,CAAEviB,OAAQ6R,EAAI7R,SACxD3I,KAAK+qB,QAAU,IAAIlX,GAAeC,EAAI0G,EAAIwQ,WAC7C,CACD1qB,kBAAkB2X,GACd,MAAMkT,EAAWxqB,EAAc6F,YAAYxG,KAAKwa,IAAI4Q,YAAcnT,EAAOtX,EAAc6F,YAAYxG,KAAKwa,IAAI6Q,YAC5GrqB,EAAO2G,MAAM,qEAAsE3H,KAAKwa,IAAIwQ,WAAYG,GACxG,MAAMrhB,EAAK,IAAIC,EACT7I,QAAalB,KAAK+qB,QAAQrkB,uBAAuBykB,GAEvD,OADArhB,EAAGa,MACIzJ,CACV,ECpBE,MAAMoqB,GACT3iB,OACA4iB,aACAC,IACAzrB,YAAY4I,EAAS,YAAa4iB,GAAe,GAC7CvrB,KAAK2I,OAASA,EACd3I,KAAKurB,aAAeA,EACpBtrB,EAAeC,mBAAmByI,GAClC1I,EAAeC,mBAAmBqrB,GAClCvrB,KAAKwrB,IAAM,IAAIC,GAAU,CAAE9iB,OAAQ3I,KAAK2I,QAC3C,CACDrI,kBAAkB2X,GACdjX,EAAO2G,MAAM,6CAA8CsQ,GAC3D,MAAMlP,EAAS,CACX2F,KAAMuJ,EACNyT,eAAgB1rB,KAAKurB,cAEzB,IAAIrqB,EAAO,KACP6oB,EAAU,KACd,IACI,MAAMplB,QAAc3E,KAAKwrB,IAAIjpB,KAAK,IAAIopB,GAAoB5iB,IAC1DghB,EAAUppB,EAAcC,WAAW+D,GAAOinB,WAAWhd,MACxD,CACD,MAAO3M,GACH,MAAM4pB,EAAU5pB,EAAU,MAAK,GAC/B,IAA8D,IAA1D4pB,EAAQC,cAAcC,QAAQ,uBAI7B,KAA4D,IAAxDF,EAAQC,cAAcC,QAAQ,qBAA6B,CAChE,MAAMC,EAAShrB,EAAOsL,KAAK,qEAAsE2L,GACjG,MAAM,IAAItI,MAAMqc,EACnB,CAGG,MADAhrB,EAAOkB,MAAM,oDAAqDD,EAAKA,GACjEA,CACT,CAVGjB,EAAOsL,KAAK,4FACNF,EAAeC,KAAK,IAUjC,CACD,GAAI0d,EACA,IACI7oB,EAAOU,KAAK+R,MAAMoW,EACrB,CACD,MAAO9nB,GAEH,MADAjB,EAAOkB,MAAM,sDAAuDD,EAAK8nB,EAAS9nB,GAC5EA,CACT,MAGDnB,EAAaC,kBAAkB,iEAAkEkX,GAErG,OAAO/W,CACV,ECrDE,MAAM+qB,GACTpoB,UACAgM,cACA9P,YAAY8D,EAAWgM,GACnB7P,KAAK6D,UAAYA,EACjB7D,KAAK6P,cAAgBA,CACxB,CACDvP,gBAAgB4rB,EAAMC,EAASC,GAC3B,MAAM/nB,EAAO,CAAE6nB,KAAMA,EAAMC,QAASA,GAC9BE,QAAgBrsB,KAAK6P,cAAcnL,UAAU1E,KAAK6D,UAAWQ,GAC7DnD,EAAOmrB,GAAWA,EAAQtnB,eAAiB8C,KAAKD,MAItD,OAHI1G,GAAQkrB,SACFpsB,KAAK6P,cAAc1K,aAAanF,KAAK6D,UAAWQ,GAEnDnD,CACV,CACDZ,gBAAgB4rB,GACZ,MAAMlH,QAAehlB,KAAK6P,cAAc3K,UAAUlF,KAAK6D,UAAWqoB,GAClE,OAAOlH,GAAUA,EAAOsH,iBAAiBC,cAAgB,CAC5D,CACDjsB,2BAA2BksB,GACvB,OAAO,IACV,ECrBE,MAAMC,GACTrlB,SACArH,YAAYqH,GACRpH,KAAKoH,SAAWA,CACnB,CACDjE,oBAAoB4F,GAChB9I,EAAeC,mBAAmB6I,EAAQ,UAC1C9I,EAAeC,mBAAmB6I,EAAOojB,QAAS,kBAClDlsB,EAAeC,mBAAmB6I,EAAOrI,OAAQ,iBACjDT,EAAeC,mBAAmB6I,EAAOkd,SAAU,mBACnD,IAAIiG,EAAO,GACX,IAAK,IAAI1gB,EAAI,EAAGA,EAAIzC,EAAOrI,OAAQ8K,IAC/B0gB,GAAQnjB,EAAOkd,SAASgB,OAAOjiB,KAAKC,MAAM8D,EAAOkd,SAASvlB,OAASsE,KAAK0hB,WAQ5E,MANa,CACTwF,KAAMA,EACNC,QAASpjB,EAAOojB,QAChBpZ,KAAMhK,EAAOgK,KACbhO,eAAgB8C,KAAKD,MAAmC,IAA3BmB,EAAO2jB,kBAG3C,CACDpsB,oBAAoByI,GAChB,MAAMpE,EAAQ8nB,GAAoBE,aAAa5jB,GAE/C,aADmB/I,KAAKoH,SAASwlB,UAAUjoB,GAC7BA,EAAQ,IACzB,CACDrE,gBAAgB4rB,EAAMC,EAASC,GAE3B,aADmBpsB,KAAKoH,SAASylB,UAAUlsB,EAAc6F,YAAY0lB,GAAOvrB,EAAc6F,YAAY2lB,GAAUC,EAEnH,EC9BE,MAAMU,GACT1mB,eACA+V,QACApc,YAAYqG,EAAgB+V,GACxBnc,KAAKoG,eAAiBA,EACtBpG,KAAKmc,QAAUA,EACflc,EAAeC,mBAAmBkG,EAAgB,kBAClDnG,EAAemc,uCAAuChW,EAAeE,mBAAoB,gCACzFrG,EAAemc,uCAAuCD,EAAS,UAClE,CACD7b,kBAKI,aAJoBN,KAAKoG,eAAeM,uBAAuB1G,KAAKmc,UAAa,CAC7E3b,KAAM,GACN2a,oBAAqBtT,KAAKD,MAGjC,CACDtH,iBAAiBysB,GACb,MAAMzU,EAAO,CACT9X,KAAMusB,GAAQ,GACd5R,oBAAqBtT,KAAKD,OAE9B0Q,EAAK9X,KAAO8X,EAAK9X,KAAKmJ,QAAQ8E,GAAMA,EAAE1J,eAAiB8C,KAAKD,QAC5D5G,EAAOC,KAAK,iCAAkCqX,EAAK9X,KAAKE,QAExD,aADmBV,KAAKoG,eAAeO,uBAAuB3G,KAAKmc,QAAS7D,EAE/E,CACDhY,gBAAgB4rB,EAAMC,EAASC,GAC3B,MAAMrQ,QAAY/b,KAAKgtB,YACjB9rB,EAAO6a,EAAIvb,KAAKkb,MAAMjN,GAAMA,GAAGyd,MAAMe,gBAAkBf,GAAMe,eAAiBxe,GAAG0d,SAASc,gBAAkBd,GAASc,gBAC3H,GAAI/rB,IACIkrB,GAAiBlrB,EAAK6D,eAAiB8C,KAAKD,OAAO,CACnD5G,EAAOC,KAAK,iDACZ,MAAMisB,EAAUnR,EAAIvb,KAAKmJ,QAAQ8E,GAAMA,GAAKvN,UACtClB,KAAKmtB,WAAWD,EACzB,CAEL,QAAShsB,GAAQA,EAAK6D,eAAiB8C,KAAKD,KAC/C,CACDtH,gBAAgB4rB,GACZ,MAAM7Q,QAAYrb,KAAKgtB,YACvB3R,EAAI7a,KAAKgJ,KAAK0iB,GAEd,cADoBlsB,KAAKmtB,WAAW9R,EAAI7a,KAE3C,EC5CE,MAAM4sB,GACTrtB,cAAiB,CACjBoD,4CAA4CkqB,GAClCzD,QAAQC,IACNlpB,EAAcC,WAAWysB,GACzBzD,QAAQC,IAAiB,YAAIwD,EAG7BvsB,EAAaC,kBAAkB,2CAInCD,EAAaC,kBAAkB,mEAEtC,ECfE,MAAMusB,GACTnqB,wBAAwBoqB,GACpB,OAAOA,GAAyB,cAAhBA,EAAMC,QAA0BD,EAAME,WAAaF,EAAME,UAAU/sB,OAAS,CAC/F,CACDyC,uBAAuBoqB,GACnB,OAAOA,GAASA,EAAMG,SAAWH,EAAMG,QAAQhtB,OAAS,GAAqC,WAAhC6sB,EAAMG,QAAQ,GAAGC,WACjF,CACDxqB,4BAA4BoqB,GACxB,OAAOA,GAASA,EAAMG,SAAWH,EAAMG,QAAQhtB,OAAS,GAAqC,gBAAhC6sB,EAAMG,QAAQ,GAAGE,WACjF,CACDzqB,sBAAsBoqB,GAClB,OAAOA,GAASA,EAAMG,SAAWH,EAAMG,QAAQhtB,OAAS,GAAqC,UAAhC6sB,EAAMG,QAAQ,GAAGE,WACjF,CACDzqB,kDAAkDoqB,GAC9C,OAAOA,GAASA,EAAMM,SAAWN,EAAMO,gBAAkBP,EAAMQ,QAClE,CACD5qB,8BAA8BoqB,GAC1B,OAAOA,GAASA,EAAMS,YAAcT,EAAM/Z,MAAQ+Z,EAAMO,cAC3D,CACD3qB,wCAAwCoqB,GACpC,OAAOA,GAASA,EAAMU,oBAAsBV,EAAMW,SACrD,CACD/qB,yBAAyBoqB,GACrB,OAAOvtB,KAAKmuB,iBAAiBZ,IAAUD,GAAoBc,mBAAmBb,EAAO,YACxF,CACDpqB,wBAAwBoqB,GACpB,OAAOvtB,KAAKquB,gBAAgBd,IAAUD,GAAoBc,mBAAmBb,EAChF,CACDpqB,6BAA6BoqB,GACzB,OAAOvtB,KAAKsuB,qBAAqBf,IAAUD,GAAoBc,mBAAmBb,EACrF,CACDpqB,uBAAuBoqB,GACnB,OAAOvtB,KAAKuuB,eAAehB,IAAUD,GAAoBc,mBAAmBb,EAC/E,CACDpqB,0BAA0BoqB,EAAOiB,EAAY,WACzC,OAAOjB,GAASA,EAAMiB,IAAcjB,EAAMiB,aAAsBC,OAAqC,IAA5BlB,EAAMiB,GAAW9tB,MAC7F,ECnCE,MAAMguB,GACTvrB,wBAAwBoqB,GACpB,OAAOD,GAAoBa,iBAAiBZ,EAC/C,CACDpqB,uBAAuBoqB,GACnB,OAAOD,GAAoBe,gBAAgBd,EAC9C,CACDpqB,4BAA4BoqB,GACxB,OAAOD,GAAoBgB,qBAAqBf,EACnD,CACDpqB,sBAAsBoqB,GAClB,OAAOD,GAAoBiB,eAAehB,EAC7C,CACDpqB,kDAAkDoqB,GAC9C,OAAOD,GAAoBqB,2CAA2CpB,EACzE,CACDpqB,8BAA8BoqB,GAC1B,OAAOD,GAAoBsB,uBAAuBrB,EACrD,CACDpqB,wCAAwCoqB,GACpC,OAAOD,GAAoBuB,iCAAiCtB,EAC/D,ECnBE,MAAMuB,GACTC,QACAC,aACAjvB,YAAYgvB,EAASC,GAGjB,GAFAhvB,KAAK+uB,QAAUA,EACf/uB,KAAKgvB,aAAeA,GACfhvB,KAAK+uB,QACN,KAAM,yBAEb,CACGE,oBACA,OAAOjvB,KAAK+uB,OACf,CACDzuB,8BAA8B4uB,EAAYC,EAAQH,EAAehvB,KAAKgvB,aAAcI,EAAa,KAC7FpuB,EAAOC,KAAK,6BAA8BiuB,EAAYC,GACtD,IACI,MAAMpmB,EAAS,CACXsmB,YAAa,CACTC,QAAS,CACL,CACIC,OAAQ,SACRC,kBAAmB,CACf9gB,KAAMwgB,EACNO,gBAAiB,CACb,CACI7gB,MAAOugB,IAGfO,IAAKN,EACLO,KAAM,YAKtBC,aAAcZ,GAEZzf,QAAevP,KAAK+uB,QAAQxsB,KAAK,IAAIstB,GAAgC9mB,IAC3E/H,EAAO+G,MAAM,4BAA6BwH,GAC1C,MAAMugB,EAAa,CACfC,GAAIxgB,EAAOygB,WAAWD,IAEpBE,QAAmBC,GAAmC,CAAEpd,OAAQ9S,KAAK+uB,QAASoB,YAAa,KAAOL,GAExG,GADA9uB,EAAO+G,MAAM,qBAAsBkoB,GAC/BA,EAAWG,QAAUC,GAAYC,QAEjC,OADAtvB,EAAOC,KAAK,4BAA6BiuB,EAAYF,IAC9C,CAEd,CACD,MAAO/sB,GACHjB,EAAOsL,KAAK,8CAA+C4iB,EAAYC,EAAQltB,EAClF,CAED,OADAjB,EAAOC,KAAK,kCAAmCiuB,EAAYC,IACpD,CACV,ECvDE,MAAMoB,GACT5sB,OACAE,UACA9D,YAAY4D,EAAQE,GAChB7D,KAAK2D,OAASA,EACd3D,KAAK6D,UAAYA,EACjB5D,EAAeC,mBAAmBF,KAAK2D,QACvC1D,EAAeC,mBAAmBF,KAAK6D,UAC1C,CACDvD,oBAAoBkwB,EAASC,GACzBzvB,EAAO2G,MAAM,qCAAsC6oB,EAASC,GAC5D,MAAM3jB,EAAM,CACR0jB,QAASA,EACTC,SAAUA,GAGd,aADmBzwB,KAAK2D,OAAOe,UAAU1E,KAAK6D,UAAWiJ,EAE5D,CACDxM,gCAAgCkwB,GAC5B,MAAM/qB,EAAM,CACRC,UAAW1F,KAAK6D,UAChB8B,uBAAwB,qBACxBE,0BAA2B,CACvB,WAAY2qB,IAIpB,aADkBxwB,KAAK2D,OAAOmC,kBAAkBL,EAEnD,CACDnF,qBAAqBowB,GAEjB,cADmB1wB,KAAK2D,OAAOuB,UAAUlF,KAAK6D,UAAW6sB,EAE5D,EChCE,MAAMC,GACTC,QACArvB,QAAU,CACNsvB,UAAW,EACX7K,UAAW,IACX3f,OAAQ,cACRyqB,OAAQ,IAEZ/wB,YAAY6wB,EAAShtB,GACjB5D,KAAK4wB,QAAUA,EACf3wB,EAAeC,mBAAmBF,KAAK4wB,QAAS,WAChD3wB,EAAeC,mBAAmB4pB,QAAQF,SAASC,IAAK,iEACpDjmB,IACA5D,KAAKuB,QAAUqC,GAEnB3D,EAAeC,mBAAmBF,KAAKuB,QAAQsvB,UAAW,0BAC1D5wB,EAAeC,mBAAmBF,KAAKuB,QAAQykB,UAAW,0BAC1D/lB,EAAe8D,KAAK/D,KAAKuB,QAAQsvB,UAAY,EAAG,+CACnD,CACDE,aAAaP,EAASC,GAClB,OAAQ9vB,EAAc6F,YAAYxG,KAAKuB,QAAQ8E,QAC3CmqB,EACA7vB,EAAc6F,YAAYxG,KAAKuB,QAAQykB,WACvCyK,EACA9vB,EAAc6F,YAAYxG,KAAKuB,QAAQuvB,OAC9C,CACDxwB,oBAAoBkwB,EAASC,GACzB,MAAMO,EAAWrwB,EAAcC,WAAWgpB,QAAQC,IAAI7pB,KAAK+wB,aAAaP,EAASC,KAC7EO,IAAarwB,EAAcswB,eAAeD,IAC1ClwB,EAAaC,kBAAkB,uFAAwFyvB,EAASC,GAUpI,OARaO,EACP,CACER,QAASA,EACTC,SAAUA,EACVS,WAAYF,EACZ5B,WAAYpvB,KAAKuB,QAAQsvB,iBAErB7wB,KAAK4wB,QAAQO,cAAcX,EAASC,EAEnD,CACDnwB,gCAAgCkwB,GAC5B,OAAOxwB,KAAK4wB,QAAQQ,0BAA0BZ,EACjD,CACDlwB,qBAAqBowB,GACjB,OAAO1wB,KAAK4wB,QAAQS,eAAeX,EACtC,EC9CE,MAAMY,GACT9wB,KACAT,YAAYS,EAAOsG,QAAQyqB,QAAQ,CAAE,IACjCvxB,KAAKQ,KAAOA,CACf,CACDF,oBAAoBkwB,EAASC,GACzBzvB,EAAO2G,MAAM,qCAAsC6oB,EAASC,GAE5D,aADgBzwB,KAAKQ,MACZgwB,EAAU,KAAOC,EAC7B,CACDnwB,gCAAgCkwB,GAC5B,MAAM/hB,QAAUzO,KAAKQ,KACfkU,EAAM,GAMZ,OALA7P,OAAOR,KAAKoK,GAAGxI,SAASe,IAChBA,EAAEwqB,WAAWhB,IACb9b,EAAIlL,KAAKiF,EAAEzH,GACd,IAEE0N,CACV,CACDpU,qBAAqBowB,GAGjB,aAFgB1wB,KAAKQ,MACnBkwB,EAAQF,QAAU,KAAOE,EAAQD,UAAYC,GACxC,CACV,ECxBE,MAAMe,GACTrqB,SACAyJ,MAAQ,IAAIqZ,IACZnqB,YAAYqH,GACRpH,KAAKoH,SAAWA,EAChBnH,EAAeC,mBAAmBF,KAAKoH,SAC1C,CACD9G,qBAAqBkwB,EAASC,EAAUiB,EAAe,KAAMC,GAAiB,GAC1E3wB,EAAO+G,MAAM,yCAA0CyoB,EAASC,EAAUkB,GAC1E,MAAMC,EAAS5xB,KAAK6Q,MAAM4Z,IAAIgH,GAAwBI,gBAAgBrB,EAASC,IAC/E,IAAIvvB,EAAO,KACX,MAAM0G,GAAM,IAAIC,MAAOC,UACvB,IAAK6pB,GAAoBC,EAAQ,CAC7B,MAAME,EAAWF,EAAOxC,WAAaxnB,EAA0B,IAApBgqB,EAAOxC,WAAoB,EAClEwC,EAAOG,cAAgBD,IACvB9wB,EAAO2G,MAAM,6BAA8B6oB,EAASC,GACpDvvB,EAAOU,KAAK+R,MAAMie,EAAOV,YAEhC,CACD,IAAKhwB,EAAM,CACP,MAAMgI,QAAalJ,KAAKgyB,oBAAoBxB,EAASC,GAC/CvnB,IACFlJ,KAAKiyB,WAAW/oB,GAChBhI,EAAOU,KAAK+R,MAAMzK,EAAKgoB,YAE9B,CAED,OADAhwB,EAAOA,GAAQwwB,EACRxwB,CACV,CACDZ,iCAAiCkwB,GAC7B,MAAMzpB,QAAY/G,KAAKkyB,sBAAsB1B,GACvCtvB,EAAO,IAAIgpB,IAKjB,OAJAnjB,EAAId,SAASsV,IACTra,EAAKqpB,IAAIhP,EAAEkV,SAAU7uB,KAAK+R,MAAM4H,EAAE2V,aAClClxB,KAAKiyB,WAAW1W,EAAE,IAEfra,CACV,CACDZ,0BAA0BkwB,EAASC,GAC/B,OAAOzwB,KAAKoH,SAAS+pB,cAAcX,EAASC,EAC/C,CACDnwB,4BAA4BkwB,GACxB,OAAOxwB,KAAKoH,SAASgqB,0BAA0BZ,EAClD,CACDlwB,qBAAqBkwB,EAASC,EAAUS,EAAY9B,GAChD,MAAMsB,EAAU,CACZF,QAASA,EACTC,SAAUA,EACVS,WAAYtvB,KAAKC,UAAUqvB,GAC3B9B,WAAYA,GAGhB,aADoBpvB,KAAKoH,SAASiqB,eAAeX,GAC1C1wB,KAAKoH,SAAS+pB,cAAcX,EAASC,EAC/C,CACDttB,uBAAuBqtB,EAASC,GAC5B,OAAOD,EAAU,MAAQC,CAC5B,CACDwB,WAAW/oB,GACP,GAAMA,EAAM,CACR,MAAMtB,GAAM,IAAIC,MAAOC,UACjB4oB,EAAU7rB,OAAOC,OAAO,CAAEitB,cAAenqB,GAAOsB,GACtDlJ,KAAK6Q,MAAM0Z,IAAIkH,GAAwBI,gBAAgB3oB,EAAKsnB,QAAStnB,EAAKunB,UAAWC,EACxF,CACJ,CACDpoB,aACItH,EAAO+G,MAAM,oCACb/H,KAAK6Q,MAAQ,IAAIqZ,GACpB,ECjEE,MAAMiI,GACTC,OACAryB,YAAYqyB,GACRnyB,EAAeC,mBAAmBkyB,EAAQ,UAC1CpyB,KAAKoyB,OAASA,EACTpyB,KAAKoyB,OAAOC,gBACbryB,KAAKoyB,OAAOC,cAAgB,IAE3BryB,KAAKoyB,OAAOjI,aACbnqB,KAAKoyB,OAAOjI,WAAa,EAEhC,CACDmI,gBAAgBjsB,GACZrG,KAAKoyB,OAAO7c,UAAYlP,CAC3B,CACDksB,gBAAgBlsB,GACZrG,KAAKoyB,OAAOI,UAAYnsB,CAC3B,CACD/F,iBAAiBqO,EAAKuJ,EAAMua,GAAU,GAClC,MAAM9b,EAAShI,EAAI+jB,QAAQ1yB,KAAKoyB,OAAO7c,UAAWvV,KAAKoyB,OAAOI,WAC9D,IAAIG,GAAmB,EACnBC,EAAU,EACd,MAAQD,GAAoBC,EAAU5yB,KAAKoyB,OAAOjI,YAAY,CAC1DnpB,EAAO+G,MAAM,GAAG6qB,EAAU,EAAI,SAASA,KAAa,KAAKH,EAAU,UAAY,oCACxE,CAACzyB,KAAKoyB,OAAOxb,UAAWjI,GAAKuB,KAAK,gBAAa,CAAClQ,KAAKoyB,OAAOvb,UAAWF,GAAQzG,KAAK,SAC3F,IACI,GAAIuiB,EAAS,CACT,MAAM1pB,EAAS,CACX+N,WAAY+b,mBAAmB,CAAC7yB,KAAKoyB,OAAOxb,UAAWjI,GAAKuB,KAAK,MACjE4B,OAAQ9R,KAAKoyB,OAAOvb,UACpB9E,IAAK4E,EACLI,kBAAmB,cAEjB/W,KAAKoyB,OAAOU,MAAMvwB,KAAK,IAAIyU,EAAkBjO,GACtD,KACI,CACD,MAAMgqB,QAAgB/yB,KAAKoyB,OAAOY,MAAMzwB,KAAK,IAAI+R,EAAiB,CAAExC,OAAQ9R,KAAKoyB,OAAOxb,UAAW7E,IAAKpD,KAClG5F,EAAS,CACX+I,OAAQ9R,KAAKoyB,OAAOvb,UACpB9E,IAAK4E,EACLzE,KAAM6gB,EAAQ7gB,KACd+gB,cAAe/a,GAEbtF,EAAS,IAAIC,EAAO,CACtBC,OAAQ9S,KAAKoyB,OAAOU,MACpB/pB,OAAQA,EACRgK,KAAM,GACNC,UAAW,EACXC,SAAU,QACVC,mBAAmB,IAEvBN,EAAOO,GAAG,sBAAuBC,IAC7BpS,EAAOC,KAAK,iBAAkBmS,EAAS,UAErCR,EAAOS,MAChB,CACDsf,GAAmB,CACtB,CACD,MAAO1wB,GACHjB,EAAOsL,KAAK,SAASmmB,EAAU,UAAY,mCACtC,CAACzyB,KAAKoyB,OAAOxb,UAAWjI,GAAKuB,KAAK,gBAAa,CAAClQ,KAAKoyB,OAAOvb,UAAWF,GAAQzG,KAAK,YAAajO,GACtG2wB,GACH,CACJ,CACD5xB,EAAO+G,MAAM,YAAY0qB,EAAU,UAAY,sCAClC,CAACzyB,KAAKoyB,OAAOxb,UAAWjI,GAAKuB,KAAK,gBAAa,CAAClQ,KAAKoyB,OAAOvb,UAAWF,GAAQzG,KAAK,QACpG,CACD5P,kBAAkB8T,EAAQ/N,EAAQyN,GAC9B9S,EAAOC,KAAK,oBAAoB,CAACmT,EAAQ/N,GAAQ6J,KAAK,SACtD,MAAMnH,EAAS,CACX+I,OAAQsC,EACRqD,OAAQpR,GAEZ,IAAI6sB,GAAO,EACX,MAAMhyB,EAAO,CAAA,EACb,KAAOgyB,GAAM,CACT,MAAMvb,QAAiB7D,EAAGvR,KAAK,IAAI4wB,EAAqBpqB,IACxDmqB,EAAOvb,EAASyb,YAChBzb,EAAS0b,SAASptB,SAASqtB,IACvBpyB,EAAKoyB,EAAIvhB,KAAO,CAAEA,IAAKuhB,EAAIvhB,IAAK0E,aAAc6c,EAAI7c,aAAcL,KAAMkd,EAAIld,KAAMmd,KAAMD,EAAIC,KAAM,IAEhGL,IACAnqB,EAAOwP,kBAAoBZ,EAASa,sBAE3C,CACD,OAAOtX,CACV,CACDZ,qBACIU,EAAOC,KAAK,YAAYjB,KAAKoyB,OAAOxb,aAAa5W,KAAKoyB,OAAO7c,wCAC5CvV,KAAKoyB,OAAOvb,aAAa7W,KAAKoyB,OAAOI,cACtD,MAAM1a,EAAKxX,MAAOgzB,UACRtzB,KAAKwzB,WAAWF,EAAIvhB,IAAKuhB,EAAIC,KAAK,EAE5C,IAAIE,QAAkBzzB,KAAK0zB,mBAQ3B,OAPID,EAAUE,SAASjzB,OAAS,GAAK+yB,EAAUG,KAAKlzB,OAAS,WACnD0L,EAAeynB,8BAA8B/b,EAAI2b,EAAUE,SAAU3zB,KAAMA,KAAKoyB,OAAOC,qBACvFjmB,EAAeynB,8BAA8B/b,EAAI2b,EAAUG,KAAM5zB,KAAMA,KAAKoyB,OAAOC,eACzFrxB,EAAOC,KAAK,gBACZwyB,QAAkBzzB,KAAK0zB,mBACvB1yB,EAAO+G,MAAM,oBAAqB0rB,IAED,IAA9BA,EAAUE,SAASjzB,QAA0C,IAA1B+yB,EAAUG,KAAKlzB,MAC5D,CACDJ,yBACI,MAAMwzB,EAAS9zB,KAAK+zB,YAAY/zB,KAAKoyB,OAAOxb,UAAW5W,KAAKoyB,OAAO7c,UAAWvV,KAAKoyB,OAAOY,OACpFgB,EAASh0B,KAAK+zB,YAAY/zB,KAAKoyB,OAAOvb,UAAW7W,KAAKoyB,OAAOI,UAAWxyB,KAAKoyB,OAAOU,OACpFmB,QAAgBH,EAChBI,QAAgBF,EAChB9yB,EAAO,CACTyyB,SAAU,GACVQ,QAAS,GACTP,KAAM,IAoBV,aAlBMxnB,EAAeynB,+BAA+BllB,IAChD,MAAMylB,EAAOH,EAAQtlB,GACfgI,EAAShI,EAAI+jB,QAAQ1yB,KAAKoyB,OAAO7c,UAAWvV,KAAKoyB,OAAOI,WACxD6B,EAAOH,EAAQI,eAAe3d,GAAUud,EAAQvd,QAAUJ,EAC3D8d,EAIDD,EAAKb,OAASc,EAAKd,MAInBa,EAAK3d,aAAa3O,WAAausB,EAAK5d,aAAa3O,UACjD5G,EAAKizB,QAAQ3qB,KAAK4qB,GAJlBlzB,EAAK0yB,KAAKpqB,KAAK4qB,GAJflzB,EAAKyyB,SAASnqB,KAAK4qB,EAWH,GACrBvvB,OAAOR,KAAK4vB,GAAUj0B,KAAMA,KAAKoyB,OAAOC,eACpCnxB,CACV,ECtIE,MAAMqzB,GACTpxB,6BAA6BwB,GACzB,IAAIzD,GAAO,EAIX,OAHIyD,IACAzD,EAAOyD,EAAM6sB,WAAW,UAAY7sB,EAAM6vB,OAAO9zB,OAAS,GAEvDQ,CACV,CACDiC,4BAA4BwB,GACxB1E,EAAe8D,KAAKwwB,GAAUE,sBAAsB9vB,GAAQ,kBAC5D,MAAM+vB,EAAO/vB,EAAMonB,QAAQ,IAAK,GAEhC,OADa2I,EAAO,EAAI/vB,EAAMoT,UAAU,EAAG2c,GAAQ/vB,EAAMoT,UAAU,EAEtE,CACD5U,yBAAyBwB,GACrB1E,EAAe8D,KAAKwwB,GAAUE,sBAAsB9vB,GAAQ,kBAC5D,MAAM+vB,EAAO/vB,EAAMonB,QAAQ,IAAK,GAEhC,OADa2I,EAAO,EAAI/vB,EAAMoT,UAAU2c,EAAO,GAAK,IAEvD,ECjBE,MAAMC,GACTC,IACAxC,OACAjvB,aAAe,IAAI0xB,OAAO,kBAC1B90B,YAAY60B,EAAKxC,EAAS,IAItB,GAHApyB,KAAK40B,IAAMA,EACX50B,KAAKoyB,OAASA,EACdnyB,EAAeC,mBAAmBF,KAAK40B,KACjCxC,EAAO0C,UAAY1C,EAAO0C,QAAQxuB,mBACpC,MAAM,IAAIqJ,MAAM,kDAEvB,CACGolB,gBACA,OAAO/0B,KAAK40B,GACf,CACDt0B,oBAAoB00B,EAAK7I,EAAS8I,EAAkBC,EAAkB,KAAMC,EAAa,KAAMC,EAAe,MAO1G,OANAn1B,EAAeC,mBAAmB+0B,GAC7Bj1B,KAAKoyB,OAAOiD,kBACbv0B,EAAaC,kBAAkB,qDAEnCi0B,EAAIM,kBAAoBt1B,KAAKoyB,OAAOiD,iBAAiBE,eAAeN,EAAkB9I,EAASgJ,EAAYC,GAC3GJ,EAAIQ,WAAeN,QAAwBl1B,KAAKoyB,OAAOiD,iBAAiBE,eAAeL,EAAiB/I,GAAW,KAC5G6I,CACV,CACD10B,2BAA2B00B,EAAK7I,EAAS8I,EAAkBC,EAAkB,KAAMC,EAAa,KAAMC,EAAe,MACjH,MAAMK,QAAez1B,KAAK01B,cAAcV,EAAK7I,EAAS8I,EAAkBC,EAAiBC,EAAYC,GAErG,aADmBp1B,KAAK21B,UAAUF,EAErC,CACDG,oBAAoBC,GAUhB,OATcA,GAAU,IAAIlsB,QAAQmsB,IAChC,GAAK91B,KAAKoyB,OAAO2D,0BAA2E,GAA/C/1B,KAAKoyB,OAAO2D,yBAAyBr1B,OAG7E,CAED,QADcV,KAAKoyB,OAAO2D,yBAAyBra,MAAMrS,GAAMA,EAAEyQ,KAAKgc,IAEzE,CALG,OAAO,CAKV,GAGR,CACDx1B,+BAA+B00B,GAC3B,IAAI9zB,GAAO,EACX,GAAM8zB,GAASh1B,KAAKoyB,OAAO0C,UAAYE,EAAIgB,aAAc,CACrDh1B,EAAO+G,MAAM,mCAAoCitB,EAAIiB,sBACrD,IAAIC,EAAav1B,EAAc6F,YAAYxG,KAAKoyB,OAAO+D,eAClDD,EAAWzvB,SAAS,OACrByvB,GAAc,KAElB,MAAMtuB,EAAMxG,EAASC,MACrB60B,GACI,QACItuB,EAAItG,SAAS,QACb,UACAsG,EAAItG,SAAS,MACb,QACAsG,EAAItG,SAAS,MACb,SACAsG,EAAItG,SAAS,MACb,IACAsG,EAAItG,SAAS,cACrB40B,GAAc,QACd,UACUl2B,KAAKoyB,OAAO0C,QAAQnuB,uBAAuBuvB,EAAYlB,GAC7D9zB,GAAO,CACV,CACD,MAAOe,GACHjB,EAAOsL,KAAK,qCAAsC4pB,EAAYlB,EAAK/yB,EACtE,CACJ,CACD,OAAOf,CACV,CACDk1B,mCAAmCpB,GAC/B,GAAIh1B,KAAKoyB,OAAOiE,0BAA2B,CACvC,MAEMC,EAFU31B,EAAc6F,YAAYwuB,EAAIQ,YAAY90B,OACzCC,EAAc6F,YAAYwuB,EAAIM,aAAa50B,OAE5D,GAAI41B,EAAYt2B,KAAKoyB,OAAOiE,0BAA2B,CAGnD,GAFAr1B,EAAOsL,KAAK,qDAAsDtM,KAAKoyB,OAAOiE,0BAA2BC,GACzGtB,EAAIuB,YAAcvB,EAAIuB,aAAe,GACjC51B,EAAcC,WAAWo0B,EAAIQ,YAAa,CAC1C,MAAMgB,EAAY,CACdC,SAAU,wBACVjlB,YAAa,aACbklB,WAAYC,EAAcC,8BAA8B5B,EAAIQ,aAEhER,EAAIuB,YAAY/sB,KAAKgtB,EACxB,CACD,GAAI71B,EAAcC,WAAWo0B,EAAIM,aAAc,CAC3C,MAAMuB,EAAa,CACfJ,SAAU,0BACVjlB,YAAa,YACbklB,WAAYC,EAAcC,8BAA8B5B,EAAIM,cAEhEN,EAAIuB,YAAY/sB,KAAKqtB,EACxB,CACD7B,EAAIM,YAAc,KAClBN,EAAIQ,WAAa,sGACpB,CACJ,CACJ,CACDsB,yCAAyC9B,GACrC,GAAIh1B,KAAKoyB,OAAO2E,+BAAgC,CAC5C,MAAMC,EAAW,GACbhC,EAAIuB,aACJvB,EAAIuB,YAAYtwB,SAASV,IACjBA,EAAEmxB,YAAcnxB,EAAEmxB,WAAWh2B,OAASV,KAAKoyB,OAAO2E,+BAClDC,EAASxtB,KAAKjE,IAGdvE,EAAOsL,KAAK,+CAAgD/G,EAAEkxB,SAAUlxB,EAAEiM,YAAajM,EAAEmxB,WAAWh2B,QACpGs2B,EAASxtB,KAAK,CACVitB,SAAU,6BAA+B91B,EAAcs2B,sBAAsB,GAAK,OAClFzlB,YAAa,aACbklB,WAAYC,EAAcC,8BAA8B,cACpDrxB,EAAEkxB,SACF,YACAlxB,EAAEiM,YACF,6BACAjM,EAAEmxB,WAAWh2B,OACb,6BACAV,KAAKoyB,OAAO2E,kCAEvB,IAGT/B,EAAIuB,YAAcS,CACrB,CACJ,CACD12B,gBAAgB42B,GACZj3B,EAAeC,mBAAmBg3B,EAAO,uBACzCj3B,EAAeC,mBAAmBg3B,EAAMjB,qBAAsB,yCAC9D,IAAI/0B,EAAO,KACPi2B,EAAcn3B,KAAK41B,oBAAoBsB,EAAMjB,sBACjD,MAAMmB,EAAUF,EAAMG,aAAe,GAAKr3B,KAAKoyB,OAAOkF,kBAAoB,GACpEC,GAAgBL,EAAMK,cAAgB,IAAIv0B,OAAOo0B,GAC5B,IAAvBD,EAAYz2B,QAAgB62B,EAAa72B,OAAS,IAClDM,EAAO+G,MAAM,oEACbovB,EAAcI,GAElB,MAAMvC,EAAMnwB,OAAOC,OAAO,CAAE,EAAEoyB,GAQ9B,GAPAlC,EAAIwC,wBAA0BN,EAAMjB,qBACpCjB,EAAIyC,gBAAkBP,EAAMK,aAC5BvC,EAAIiB,qBAAuBkB,EAC3BnC,EAAIuC,aAAeA,EACnBv3B,KAAKo2B,mCAAmCpB,GACxCh1B,KAAK82B,yCAAyC9B,SACxCh1B,KAAK03B,yBAAyB1C,GACI,IAApCA,EAAIiB,qBAAqBv1B,OACzBM,EAAOC,KAAK,qFAEX,CACD,MAAM02B,EAAS,OAAS3C,EAAIiB,qBAAqB/lB,KAAK,MAAQ,KACxD0nB,EAAY5C,EAAIuC,cAAgBvC,EAAIuC,aAAa72B,OAAS,EAAI,QAAUs0B,EAAIuC,aAAarnB,KAAK,MAAQ,KAAO,GACnH,IACI,MAAMU,EAAOokB,EAAI6C,aAAe73B,KAAKoyB,OAAO0F,sBACtCC,EAAW,WACXC,EAAc,UACpB,IAAIC,EAAU,SAAWrnB,EAAO,KAChCqnB,GAAWN,EACXM,GAAWL,EACXK,GAAW,YAAcjD,EAAIkD,QAAU,KACvCD,GAAW,sBACXA,GAAW,4CAA8CF,EAAW,MACpEE,GAAW,SAAWF,EAAW,KACjCE,GAAW,kDAAoDD,EAAc,MACvEr3B,EAAcC,WAAWo0B,EAAIM,eAC/B2C,GAAW,SAAWD,EAAc,KACpCC,GAAW,+CACXA,GAAWjD,EAAIM,aAEb30B,EAAcC,WAAWo0B,EAAIQ,cAC/ByC,GAAW,SAAWD,EAAc,KACpCC,GAAW,+BACXA,GAAWjD,EAAIQ,YAEnByC,GAAW,SAAWD,EAAc,OAChChD,EAAIuB,aACJvB,EAAIuB,YAAYtwB,SAASV,IACrB0yB,GAAW,SAAWF,EAAW,KACjCE,GAAW,iBAAmB1yB,EAAEiM,YAAc,WAAajM,EAAEkxB,SAAW,MACxEwB,GAAW,sCACXA,GAAW,sCACXA,GAAW1yB,EAAEmxB,WAAWhE,QAAQ,eAAgB,QAAU,MAAM,IAGxEuF,GAAW,SAAWF,EAAW,OACjC,MAAMhvB,EAAS,CACXovB,WAAY,CAAEC,MAAM,IAAIC,aAAcC,OAAOL,KAEjD/2B,QAAalB,KAAK40B,IAAIryB,KAAK,IAAIg2B,GAAoBxvB,GACtD,CACD,MAAO9G,GACHjB,EAAOkB,MAAM,mCAAoCD,EAAKA,EACzD,CACJ,CACD,OAAOf,CACV,CACDiC,kBAAkBq1B,GACd,OAAiB,OAAVA,GAAkB7D,GAAO8D,MAAM3e,KAAK0e,EAC9C,ECzME,MAAME,GACTC,IACAC,SACA74B,YAAY44B,EAAM,IAAIE,GAAU,CAAElwB,OAAQ,cAAgBiwB,GACtD54B,KAAK24B,IAAMA,EACX34B,KAAK44B,SAAWA,EAChB34B,EAAeC,mBAAmBF,KAAK24B,IAAK,OAC5C14B,EAAeC,mBAAmBF,KAAK44B,SAAU,WACpD,CACGE,gBACA,OAAO94B,KAAK24B,GACf,CACDr4B,kBAAkBy4B,EAAOC,GAAiB,GACtC,IAAIzpB,EAAS,KACb,IACI,MAAM0pB,EAAYF,GAAgB,sBAC5BG,EAA2B,iBAAdD,EAAyBA,EAAYr3B,KAAKC,UAAUo3B,GACjElwB,EAAS,CACXowB,SAAUn5B,KAAK44B,SACfQ,QAASF,GAEbl4B,EAAO+G,MAAM,uBAAwBgB,GACrCwG,QAAevP,KAAK24B,IAAIp2B,KAAK,IAAI82B,GAAetwB,GACnD,CACD,MAAO9G,GACH,IAAI+2B,EAIA,MAAM/2B,EAHNjB,EAAOkB,MAAM,4CAA6C62B,EAAO92B,EAKxE,CACD,OAAOsN,CACV,CACDjP,+BAA+By4B,EAAOO,EAAWN,GAAiB,GAC9D,IAAI93B,EAAO,KAOX,OANIo4B,EACAp4B,QAAalB,KAAKu5B,YAAYR,EAAOC,GAGrCh4B,EAAOC,KAAK,gDAAiD83B,GAE1D73B,CACV,EC3CE,MAAMs4B,GACTzO,QACAlnB,UACA9D,YAAYgrB,EAASlnB,GACjB7D,KAAK+qB,QAAUA,EACf/qB,KAAK6D,UAAYA,EACjB5D,EAAeC,mBAAmB6qB,EAAS,WAC3C9qB,EAAeC,mBAAmBS,EAAcC,WAAWZ,KAAK6D,WAAY,YAC/E,CACDvD,kBAAkBm5B,EAASviB,EAAoB,IAC3C,IAAIhW,GAAO,EACX,GAAMu4B,GAAaviB,EAAmB,CAClC,MAAMwiB,EAAa10B,KAAKC,OAAM,IAAI4C,MAAOC,UAAY,KAM/CiB,EAAS,CACXqW,KANQ,CACRua,WAAYF,EACZjvB,UAAWkvB,EACXE,QAASF,EAAaxiB,GAItBmI,uBAAwB,QACxB3Z,UAAW1F,KAAK6D,UAChBod,oBAAqB,oCAEzB,UACsBjhB,KAAK+qB,QAAQ7N,SAAS3a,KAAK,IAAIs3B,EAAe9wB,IAChE7H,GAAO,CACV,CACD,MAAOe,GACCmN,OAAOnN,GAAK8pB,QAAQ,oCAAsC,GAC1D/qB,EAAO2G,MAAM,+BAAgC8xB,EAEpD,CACJ,CACD,OAAOv4B,CACV,CACDZ,kBAAkBm5B,GACd,GAAI94B,EAAcC,WAAW64B,GACzB,IACI,MAAMK,QAAY95B,KAAK+qB,QAAQ5lB,aAAanF,KAAK6D,UAAW,CAAE81B,WAAYF,IAC1Ez4B,EAAO2G,MAAM,wBAAyB8xB,EAASK,EAClD,CACD,MAAO73B,GACHjB,EAAOsL,KAAK,uCAAwCmtB,EAASx3B,EAAKA,EACrE,CAER,CACD3B,8BACI,MAAMo5B,EAAa10B,KAAKC,OAAM,IAAI4C,MAAOC,UAAY,KAC/C/B,EAAO,CACTL,UAAW1F,KAAK6D,UAChBk2B,iBAAkB,iBAClBl0B,0BAA2B,CACvB,OAAQ6zB,IAIVzZ,SADajgB,KAAK+qB,QAAQ/kB,iBAAiBD,IAC3BT,KAAKsZ,IACV,CAAE+a,WAAY/a,EAAc,eAI7C,aADsB5e,KAAK+qB,QAAQvlB,mBAAmBxF,KAAK6D,UAAWoc,EAAU,GAEnF,EChEE,MAAM+Z,GACTC,OAAS,IAAI/P,IACbnqB,cAAiB,CACjBO,kBAAkBm5B,EAASviB,EAAoB,IAC3C,IAAIhW,GAAO,EACX,GAAIP,EAAcC,WAAW64B,GAAU,CACnC,MAAM7xB,EAAMC,KAAKD,MACXmU,EAAM/b,KAAKi6B,OAAOxP,IAAIgP,KACvB1d,GAAOA,EAAMnU,KACd5H,KAAKi6B,OAAO1P,IAAIkP,EAAS7xB,EAA0B,IAApBsP,GAC/BhW,GAAO,EAEd,CACD,OAAOA,CACV,CACDZ,kBAAkBm5B,GACV94B,EAAcC,WAAW64B,IACzBz5B,KAAKi6B,OAAOC,OAAOT,EAE1B,CACDn5B,8BACI,MAAM65B,EAAW,GACXvyB,EAAMC,KAAKD,MASjB,OARA5H,KAAKi6B,OAAOh0B,SAAQ,CAAC2Y,EAAG5X,KAChB4X,EAAIhX,GACJuyB,EAAS3wB,KAAKxC,EACjB,IAELmzB,EAASl0B,SAASe,IACdhH,KAAKi6B,OAAOC,OAAOlzB,EAAE,IAElBmzB,EAASz5B,MACnB"}