Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

minio

Package Overview
Dependencies
Maintainers
0
Versions
80
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

minio - npm Package Compare versions

Comparing version 8.0.0 to 8.0.1

1

dist/main/helpers.d.ts

@@ -5,2 +5,3 @@ import type { Encryption, ObjectMetaData, RequestHeaders } from "./internal/type.js";

export declare const DEFAULT_REGION = "us-east-1";
export declare const PRESIGN_EXPIRY_DAYS_MAX: number;
export interface ICopySourceOptions {

@@ -7,0 +8,0 @@ Bucket: string;

4

dist/main/helpers.js

@@ -21,2 +21,4 @@ "use strict";

exports.DEFAULT_REGION = DEFAULT_REGION;
const PRESIGN_EXPIRY_DAYS_MAX = 24 * 60 * 60 * 7; // 7 days in seconds
exports.PRESIGN_EXPIRY_DAYS_MAX = PRESIGN_EXPIRY_DAYS_MAX;
class CopySourceOptions {

@@ -225,2 +227,2 @@ constructor({

exports.SelectResults = SelectResults;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsInBhdGgiLCJxdWVyeXN0cmluZyIsImVycm9ycyIsIl9oZWxwZXIiLCJfdHlwZSIsImV4cG9ydHMiLCJSRVRFTlRJT05fTU9ERVMiLCJFTkNSWVBUSU9OX1RZUEVTIiwiTEVHQUxfSE9MRF9TVEFUVVMiLCJSRVRFTlRJT05fVkFMSURJVFlfVU5JVFMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiREVGQVVMVF9SRUdJT04iLCJDb3B5U291cmNlT3B0aW9ucyIsImNvbnN0cnVjdG9yIiwiQnVja2V0IiwiVmVyc2lvbklEIiwiTWF0Y2hFVGFnIiwiTm9NYXRjaEVUYWciLCJNYXRjaE1vZGlmaWVkU2luY2UiLCJNYXRjaFVubW9kaWZpZWRTaW5jZSIsIk1hdGNoUmFuZ2UiLCJTdGFydCIsIkVuZCIsIkVuY3J5cHRpb24iLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZSIsImlzVmFsaWRCdWNrZXROYW1lIiwiSW52YWxpZEJ1Y2tldE5hbWVFcnJvciIsImlzVmFsaWRPYmplY3ROYW1lIiwiSW52YWxpZE9iamVjdE5hbWVFcnJvciIsImlzTnVtYmVyIiwiZ2V0SGVhZGVycyIsImhlYWRlck9wdGlvbnMiLCJlbmNvZGVVUkkiLCJpc0VtcHR5IiwicmVtb3ZlRGlyQW5kRmlsZXMiLCJkaXJQYXRoIiwicmVtb3ZlU2VsZiIsInJtU3luYyIsInJlY3Vyc2l2ZSIsImZvcmNlIiwicmVhZGRpclN5bmMiLCJmb3JFYWNoIiwiaXRlbSIsImpvaW4iLCJDb3B5RGVzdGluYXRpb25PcHRpb25zIiwiVXNlck1ldGFkYXRhIiwiVXNlclRhZ3MiLCJMZWdhbEhvbGQiLCJSZXRhaW5VbnRpbERhdGUiLCJNb2RlIiwiTWV0YWRhdGFEaXJlY3RpdmUiLCJyZXBsYWNlRGlyZWN0aXZlIiwidXNlclRhZ3MiLCJpc09iamVjdCIsInN0cmluZ2lmeSIsImlzU3RyaW5nIiwidmFsdWUiLCJlbnRyaWVzIiwidG9TdHJpbmciLCJlbmNyeXB0aW9uSGVhZGVycyIsImdldEVuY3J5cHRpb25IZWFkZXJzIiwiR09WRVJOQU5DRSIsIkNPTVBMSUFOQ0UiLCJpbmNsdWRlcyIsImlzRW1wdHlPYmplY3QiLCJTZWxlY3RSZXN1bHRzIiwicmVjb3JkcyIsInJlc3BvbnNlIiwic3RhdHMiLCJwcm9ncmVzcyIsInNldFN0YXRzIiwiZ2V0U3RhdHMiLCJzZXRQcm9ncmVzcyIsImdldFByb2dyZXNzIiwic2V0UmVzcG9uc2UiLCJnZXRSZXNwb25zZSIsInNldFJlY29yZHMiLCJnZXRSZWNvcmRzIl0sInNvdXJjZXMiOlsiaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnXG5cbmltcG9ydCAqIGFzIHF1ZXJ5c3RyaW5nIGZyb20gJ3F1ZXJ5LXN0cmluZydcblxuaW1wb3J0ICogYXMgZXJyb3JzIGZyb20gJy4vZXJyb3JzLnRzJ1xuaW1wb3J0IHtcbiAgZ2V0RW5jcnlwdGlvbkhlYWRlcnMsXG4gIGlzRW1wdHksXG4gIGlzRW1wdHlPYmplY3QsXG4gIGlzTnVtYmVyLFxuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzVmFsaWRCdWNrZXROYW1lLFxuICBpc1ZhbGlkT2JqZWN0TmFtZSxcbn0gZnJvbSAnLi9pbnRlcm5hbC9oZWxwZXIudHMnXG5pbXBvcnQgdHlwZSB7IEVuY3J5cHRpb24sIE9iamVjdE1ldGFEYXRhLCBSZXF1ZXN0SGVhZGVycyB9IGZyb20gJy4vaW50ZXJuYWwvdHlwZS50cydcbmltcG9ydCB7IFJFVEVOVElPTl9NT0RFUyB9IGZyb20gJy4vaW50ZXJuYWwvdHlwZS50cydcblxuZXhwb3J0IHsgRU5DUllQVElPTl9UWVBFUywgTEVHQUxfSE9MRF9TVEFUVVMsIFJFVEVOVElPTl9NT0RFUywgUkVURU5USU9OX1ZBTElESVRZX1VOSVRTIH0gZnJvbSAnLi9pbnRlcm5hbC90eXBlLnRzJ1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRUdJT04gPSAndXMtZWFzdC0xJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb3B5U291cmNlT3B0aW9ucyB7XG4gIEJ1Y2tldDogc3RyaW5nXG4gIE9iamVjdDogc3RyaW5nXG4gIC8qKlxuICAgKiBWYWxpZCB2ZXJzaW9uSWRcbiAgICovXG4gIFZlcnNpb25JRD86IHN0cmluZ1xuICAvKipcbiAgICogRXRhZyB0byBtYXRjaFxuICAgKi9cbiAgTWF0Y2hFVGFnPzogc3RyaW5nXG4gIC8qKlxuICAgKiBFdGFnIHRvIGV4Y2x1ZGVcbiAgICovXG4gIE5vTWF0Y2hFVGFnPzogc3RyaW5nXG4gIC8qKlxuICAgKiBNb2RpZmllZCBEYXRlIG9mIHRoZSBvYmplY3QvcGFydC4gIFVUQyBEYXRlIGluIHN0cmluZyBmb3JtYXRcbiAgICovXG4gIE1hdGNoTW9kaWZpZWRTaW5jZT86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIE1vZGlmaWVkIERhdGUgb2YgdGhlIG9iamVjdC9wYXJ0IHRvIGV4Y2x1ZGUgVVRDIERhdGUgaW4gc3RyaW5nIGZvcm1hdFxuICAgKi9cbiAgTWF0Y2hVbm1vZGlmaWVkU2luY2U/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiB0cnVlIG9yIGZhbHNlIE9iamVjdCByYW5nZSB0byBtYXRjaFxuICAgKi9cbiAgTWF0Y2hSYW5nZT86IGJvb2xlYW5cbiAgU3RhcnQ/OiBudW1iZXJcbiAgRW5kPzogbnVtYmVyXG4gIEVuY3J5cHRpb24/OiBFbmNyeXB0aW9uXG59XG5cbmV4cG9ydCBjbGFzcyBDb3B5U291cmNlT3B0aW9ucyB7XG4gIHB1YmxpYyByZWFkb25seSBCdWNrZXQ6IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgT2JqZWN0OiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IFZlcnNpb25JRDogc3RyaW5nXG4gIHB1YmxpYyBNYXRjaEVUYWc6IHN0cmluZ1xuICBwcml2YXRlIHJlYWRvbmx5IE5vTWF0Y2hFVGFnOiBzdHJpbmdcbiAgcHJpdmF0ZSByZWFkb25seSBNYXRjaE1vZGlmaWVkU2luY2U6IHN0cmluZyB8IG51bGxcbiAgcHJpdmF0ZSByZWFkb25seSBNYXRjaFVubW9kaWZpZWRTaW5jZTogc3RyaW5nIHwgbnVsbFxuICBwdWJsaWMgcmVhZG9ubHkgTWF0Y2hSYW5nZTogYm9vbGVhblxuICBwdWJsaWMgcmVhZG9ubHkgU3RhcnQ6IG51bWJlclxuICBwdWJsaWMgcmVhZG9ubHkgRW5kOiBudW1iZXJcbiAgcHJpdmF0ZSByZWFkb25seSBFbmNyeXB0aW9uPzogRW5jcnlwdGlvblxuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBCdWNrZXQsXG4gICAgT2JqZWN0LFxuICAgIFZlcnNpb25JRCA9ICcnLFxuICAgIE1hdGNoRVRhZyA9ICcnLFxuICAgIE5vTWF0Y2hFVGFnID0gJycsXG4gICAgTWF0Y2hNb2RpZmllZFNpbmNlID0gbnVsbCxcbiAgICBNYXRjaFVubW9kaWZpZWRTaW5jZSA9IG51bGwsXG4gICAgTWF0Y2hSYW5nZSA9IGZhbHNlLFxuICAgIFN0YXJ0ID0gMCxcbiAgICBFbmQgPSAwLFxuICAgIEVuY3J5cHRpb24gPSB1bmRlZmluZWQsXG4gIH06IElDb3B5U291cmNlT3B0aW9ucykge1xuICAgIHRoaXMuQnVja2V0ID0gQnVja2V0XG4gICAgdGhpcy5PYmplY3QgPSBPYmplY3RcbiAgICB0aGlzLlZlcnNpb25JRCA9IFZlcnNpb25JRFxuICAgIHRoaXMuTWF0Y2hFVGFnID0gTWF0Y2hFVGFnXG4gICAgdGhpcy5Ob01hdGNoRVRhZyA9IE5vTWF0Y2hFVGFnXG4gICAgdGhpcy5NYXRjaE1vZGlmaWVkU2luY2UgPSBNYXRjaE1vZGlmaWVkU2luY2VcbiAgICB0aGlzLk1hdGNoVW5tb2RpZmllZFNpbmNlID0gTWF0Y2hVbm1vZGlmaWVkU2luY2VcbiAgICB0aGlzLk1hdGNoUmFuZ2UgPSBNYXRjaFJhbmdlXG4gICAgdGhpcy5TdGFydCA9IFN0YXJ0XG4gICAgdGhpcy5FbmQgPSBFbmRcbiAgICB0aGlzLkVuY3J5cHRpb24gPSBFbmNyeXB0aW9uXG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICBpZiAoIWlzVmFsaWRCdWNrZXROYW1lKHRoaXMuQnVja2V0KSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQnVja2V0TmFtZUVycm9yKCdJbnZhbGlkIFNvdXJjZSBidWNrZXQgbmFtZTogJyArIHRoaXMuQnVja2V0KVxuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRPYmplY3ROYW1lKHRoaXMuT2JqZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkT2JqZWN0TmFtZUVycm9yKGBJbnZhbGlkIFNvdXJjZSBvYmplY3QgbmFtZTogJHt0aGlzLk9iamVjdH1gKVxuICAgIH1cbiAgICBpZiAoKHRoaXMuTWF0Y2hSYW5nZSAmJiB0aGlzLlN0YXJ0ICE9PSAtMSAmJiB0aGlzLkVuZCAhPT0gLTEgJiYgdGhpcy5TdGFydCA+IHRoaXMuRW5kKSB8fCB0aGlzLlN0YXJ0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkT2JqZWN0TmFtZUVycm9yKCdTb3VyY2Ugc3RhcnQgbXVzdCBiZSBub24tbmVnYXRpdmUsIGFuZCBzdGFydCBtdXN0IGJlIGF0IG1vc3QgZW5kLicpXG4gICAgfSBlbHNlIGlmICgodGhpcy5NYXRjaFJhbmdlICYmICFpc051bWJlcih0aGlzLlN0YXJ0KSkgfHwgIWlzTnVtYmVyKHRoaXMuRW5kKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkT2JqZWN0TmFtZUVycm9yKFxuICAgICAgICAnTWF0Y2hSYW5nZSBpcyBzcGVjaWZpZWQuIEJ1dCBJbnZhbGlkIFN0YXJ0IGFuZCBFbmQgdmFsdWVzIGFyZSBzcGVjaWZpZWQuJyxcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZ2V0SGVhZGVycygpOiBSZXF1ZXN0SGVhZGVycyB7XG4gICAgY29uc3QgaGVhZGVyT3B0aW9uczogUmVxdWVzdEhlYWRlcnMgPSB7fVxuICAgIGhlYWRlck9wdGlvbnNbJ3gtYW16LWNvcHktc291cmNlJ10gPSBlbmNvZGVVUkkodGhpcy5CdWNrZXQgKyAnLycgKyB0aGlzLk9iamVjdClcblxuICAgIGlmICghaXNFbXB0eSh0aGlzLlZlcnNpb25JRCkpIHtcbiAgICAgIGhlYWRlck9wdGlvbnNbJ3gtYW16LWNvcHktc291cmNlJ10gPSBgJHtlbmNvZGVVUkkodGhpcy5CdWNrZXQgKyAnLycgKyB0aGlzLk9iamVjdCl9P3ZlcnNpb25JZD0ke3RoaXMuVmVyc2lvbklEfWBcbiAgICB9XG5cbiAgICBpZiAoIWlzRW1wdHkodGhpcy5NYXRjaEVUYWcpKSB7XG4gICAgICBoZWFkZXJPcHRpb25zWyd4LWFtei1jb3B5LXNvdXJjZS1pZi1tYXRjaCddID0gdGhpcy5NYXRjaEVUYWdcbiAgICB9XG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuTm9NYXRjaEVUYWcpKSB7XG4gICAgICBoZWFkZXJPcHRpb25zWyd4LWFtei1jb3B5LXNvdXJjZS1pZi1ub25lLW1hdGNoJ10gPSB0aGlzLk5vTWF0Y2hFVGFnXG4gICAgfVxuXG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuTWF0Y2hNb2RpZmllZFNpbmNlKSkge1xuICAgICAgaGVhZGVyT3B0aW9uc1sneC1hbXotY29weS1zb3VyY2UtaWYtbW9kaWZpZWQtc2luY2UnXSA9IHRoaXMuTWF0Y2hNb2RpZmllZFNpbmNlXG4gICAgfVxuICAgIGlmICghaXNFbXB0eSh0aGlzLk1hdGNoVW5tb2RpZmllZFNpbmNlKSkge1xuICAgICAgaGVhZGVyT3B0aW9uc1sneC1hbXotY29weS1zb3VyY2UtaWYtdW5tb2RpZmllZC1zaW5jZSddID0gdGhpcy5NYXRjaFVubW9kaWZpZWRTaW5jZVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJPcHRpb25zXG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2Ugbm9kZWpzIGZzIG1vZHVsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGlyQW5kRmlsZXMoZGlyUGF0aDogc3RyaW5nLCByZW1vdmVTZWxmID0gdHJ1ZSkge1xuICBpZiAocmVtb3ZlU2VsZikge1xuICAgIHJldHVybiBmcy5ybVN5bmMoZGlyUGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gIH1cblxuICBmcy5yZWFkZGlyU3luYyhkaXJQYXRoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgZnMucm1TeW5jKHBhdGguam9pbihkaXJQYXRoLCBpdGVtKSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gIH0pXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvcHlEZXN0aW5hdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogQnVja2V0IG5hbWVcbiAgICovXG4gIEJ1Y2tldDogc3RyaW5nXG4gIC8qKlxuICAgKiBPYmplY3QgTmFtZSBmb3IgdGhlIGRlc3RpbmF0aW9uIChjb21wb3NlZC9jb3BpZWQpIG9iamVjdCBkZWZhdWx0c1xuICAgKi9cbiAgT2JqZWN0OiBzdHJpbmdcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBkZWZhdWx0cyB0byB7fVxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgRW5jcnlwdGlvbj86IEVuY3J5cHRpb25cbiAgVXNlck1ldGFkYXRhPzogT2JqZWN0TWV0YURhdGFcbiAgLyoqXG4gICAqIHF1ZXJ5LXN0cmluZyBlbmNvZGVkIHN0cmluZyBvciBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IE9iamVjdFxuICAgKi9cbiAgVXNlclRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgc3RyaW5nXG4gIExlZ2FsSG9sZD86ICdvbicgfCAnb2ZmJ1xuICAvKipcbiAgICogVVRDIERhdGUgU3RyaW5nXG4gICAqL1xuICBSZXRhaW5VbnRpbERhdGU/OiBzdHJpbmdcbiAgTW9kZT86IFJFVEVOVElPTl9NT0RFU1xuICBNZXRhZGF0YURpcmVjdGl2ZT86ICdDT1BZJyB8ICdSRVBMQUNFJ1xufVxuXG5leHBvcnQgY2xhc3MgQ29weURlc3RpbmF0aW9uT3B0aW9ucyB7XG4gIHB1YmxpYyByZWFkb25seSBCdWNrZXQ6IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgT2JqZWN0OiBzdHJpbmdcbiAgcHJpdmF0ZSByZWFkb25seSBFbmNyeXB0aW9uPzogRW5jcnlwdGlvblxuICBwcml2YXRlIHJlYWRvbmx5IFVzZXJNZXRhZGF0YT86IE9iamVjdE1ldGFEYXRhXG4gIHByaXZhdGUgcmVhZG9ubHkgVXNlclRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgc3RyaW5nXG4gIHByaXZhdGUgcmVhZG9ubHkgTGVnYWxIb2xkPzogJ29uJyB8ICdvZmYnXG4gIHByaXZhdGUgcmVhZG9ubHkgUmV0YWluVW50aWxEYXRlPzogc3RyaW5nXG4gIHByaXZhdGUgcmVhZG9ubHkgTW9kZT86IFJFVEVOVElPTl9NT0RFU1xuICBwcml2YXRlIHJlYWRvbmx5IE1ldGFkYXRhRGlyZWN0aXZlPzogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIEJ1Y2tldCxcbiAgICBPYmplY3QsXG4gICAgRW5jcnlwdGlvbixcbiAgICBVc2VyTWV0YWRhdGEsXG4gICAgVXNlclRhZ3MsXG4gICAgTGVnYWxIb2xkLFxuICAgIFJldGFpblVudGlsRGF0ZSxcbiAgICBNb2RlLFxuICAgIE1ldGFkYXRhRGlyZWN0aXZlLFxuICB9OiBJQ29weURlc3RpbmF0aW9uT3B0aW9ucykge1xuICAgIHRoaXMuQnVja2V0ID0gQnVja2V0XG4gICAgdGhpcy5PYmplY3QgPSBPYmplY3RcbiAgICB0aGlzLkVuY3J5cHRpb24gPSBFbmNyeXB0aW9uID8/IHVuZGVmaW5lZCAvLyBudWxsIGlucHV0IHdpbGwgYmVjb21lIHVuZGVmaW5lZCwgZWFzeSBmb3IgcnVudGltZSBhc3NlcnRcbiAgICB0aGlzLlVzZXJNZXRhZGF0YSA9IFVzZXJNZXRhZGF0YVxuICAgIHRoaXMuVXNlclRhZ3MgPSBVc2VyVGFnc1xuICAgIHRoaXMuTGVnYWxIb2xkID0gTGVnYWxIb2xkXG4gICAgdGhpcy5Nb2RlID0gTW9kZSAvLyByZXRlbnRpb24gbW9kZVxuICAgIHRoaXMuUmV0YWluVW50aWxEYXRlID0gUmV0YWluVW50aWxEYXRlXG4gICAgdGhpcy5NZXRhZGF0YURpcmVjdGl2ZSA9IE1ldGFkYXRhRGlyZWN0aXZlXG4gIH1cblxuICBnZXRIZWFkZXJzKCk6IFJlcXVlc3RIZWFkZXJzIHtcbiAgICBjb25zdCByZXBsYWNlRGlyZWN0aXZlID0gJ1JFUExBQ0UnXG4gICAgY29uc3QgaGVhZGVyT3B0aW9uczogUmVxdWVzdEhlYWRlcnMgPSB7fVxuXG4gICAgY29uc3QgdXNlclRhZ3MgPSB0aGlzLlVzZXJUYWdzXG4gICAgaWYgKCFpc0VtcHR5KHVzZXJUYWdzKSkge1xuICAgICAgaGVhZGVyT3B0aW9uc1snWC1BbXotVGFnZ2luZy1EaXJlY3RpdmUnXSA9IHJlcGxhY2VEaXJlY3RpdmVcbiAgICAgIGhlYWRlck9wdGlvbnNbJ1gtQW16LVRhZ2dpbmcnXSA9IGlzT2JqZWN0KHVzZXJUYWdzKVxuICAgICAgICA/IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh1c2VyVGFncylcbiAgICAgICAgOiBpc1N0cmluZyh1c2VyVGFncylcbiAgICAgICAgPyB1c2VyVGFnc1xuICAgICAgICA6ICcnXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuTW9kZSkge1xuICAgICAgaGVhZGVyT3B0aW9uc1snWC1BbXotT2JqZWN0LUxvY2stTW9kZSddID0gdGhpcy5Nb2RlIC8vIEdPVkVSTkFOQ0Ugb3IgQ09NUExJQU5DRVxuICAgIH1cblxuICAgIGlmICh0aGlzLlJldGFpblVudGlsRGF0ZSkge1xuICAgICAgaGVhZGVyT3B0aW9uc1snWC1BbXotT2JqZWN0LUxvY2stUmV0YWluLVVudGlsLURhdGUnXSA9IHRoaXMuUmV0YWluVW50aWxEYXRlIC8vIG5lZWRzIHRvIGJlIFVUQy5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5MZWdhbEhvbGQpIHtcbiAgICAgIGhlYWRlck9wdGlvbnNbJ1gtQW16LU9iamVjdC1Mb2NrLUxlZ2FsLUhvbGQnXSA9IHRoaXMuTGVnYWxIb2xkIC8vIE9OIG9yIE9GRlxuICAgIH1cblxuICAgIGlmICh0aGlzLlVzZXJNZXRhZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5Vc2VyTWV0YWRhdGEpKSB7XG4gICAgICAgIGhlYWRlck9wdGlvbnNbYFgtQW16LU1ldGEtJHtrZXl9YF0gPSB2YWx1ZS50b1N0cmluZygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuTWV0YWRhdGFEaXJlY3RpdmUpIHtcbiAgICAgIGhlYWRlck9wdGlvbnNbYFgtQW16LU1ldGFkYXRhLURpcmVjdGl2ZWBdID0gdGhpcy5NZXRhZGF0YURpcmVjdGl2ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLkVuY3J5cHRpb24pIHtcbiAgICAgIGNvbnN0IGVuY3J5cHRpb25IZWFkZXJzID0gZ2V0RW5jcnlwdGlvbkhlYWRlcnModGhpcy5FbmNyeXB0aW9uKVxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW5jcnlwdGlvbkhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlck9wdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJPcHRpb25zXG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICBpZiAoIWlzVmFsaWRCdWNrZXROYW1lKHRoaXMuQnVja2V0KSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQnVja2V0TmFtZUVycm9yKCdJbnZhbGlkIERlc3RpbmF0aW9uIGJ1Y2tldCBuYW1lOiAnICsgdGhpcy5CdWNrZXQpXG4gICAgfVxuICAgIGlmICghaXNWYWxpZE9iamVjdE5hbWUodGhpcy5PYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRPYmplY3ROYW1lRXJyb3IoYEludmFsaWQgRGVzdGluYXRpb24gb2JqZWN0IG5hbWU6ICR7dGhpcy5PYmplY3R9YClcbiAgICB9XG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuVXNlck1ldGFkYXRhKSAmJiAhaXNPYmplY3QodGhpcy5Vc2VyTWV0YWRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRPYmplY3ROYW1lRXJyb3IoYERlc3RpbmF0aW9uIFVzZXJNZXRhZGF0YSBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGgga2V5IHZhbHVlIHBhaXJzYClcbiAgICB9XG5cbiAgICBpZiAoIWlzRW1wdHkodGhpcy5Nb2RlKSAmJiAhW1JFVEVOVElPTl9NT0RFUy5HT1ZFUk5BTkNFLCBSRVRFTlRJT05fTU9ERVMuQ09NUExJQU5DRV0uaW5jbHVkZXModGhpcy5Nb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkT2JqZWN0TmFtZUVycm9yKFxuICAgICAgICBgSW52YWxpZCBNb2RlIHNwZWNpZmllZCBmb3IgZGVzdGluYXRpb24gb2JqZWN0IGl0IHNob3VsZCBiZSBvbmUgb2YgW0dPVkVSTkFOQ0UsQ09NUExJQU5DRV1gLFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmICh0aGlzLkVuY3J5cHRpb24gIT09IHVuZGVmaW5lZCAmJiBpc0VtcHR5T2JqZWN0KHRoaXMuRW5jcnlwdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZE9iamVjdE5hbWVFcnJvcihgSW52YWxpZCBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGRlc3RpbmF0aW9uIG9iamVjdCBgKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbi8qKlxuICogbWF5YmUgdGhpcyBzaG91bGQgYmUgYSBnZW5lcmljIHR5cGUgZm9yIFJlY29yZHMsIGxlYXZlIGl0IGZvciBsYXRlciByZWZhY3RvclxuICovXG5leHBvcnQgY2xhc3MgU2VsZWN0UmVzdWx0cyB7XG4gIHByaXZhdGUgcmVjb3Jkcz86IHVua25vd25cbiAgcHJpdmF0ZSByZXNwb25zZT86IHVua25vd25cbiAgcHJpdmF0ZSBzdGF0cz86IHN0cmluZ1xuICBwcml2YXRlIHByb2dyZXNzPzogdW5rbm93blxuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICByZWNvcmRzLCAvLyBwYXJzZWQgZGF0YSBhcyBzdHJlYW1cbiAgICByZXNwb25zZSwgLy8gb3JpZ2luYWwgcmVzcG9uc2Ugc3RyZWFtXG4gICAgc3RhdHMsIC8vIHN0YXRzIGFzIHhtbFxuICAgIHByb2dyZXNzLCAvLyBzdGF0cyBhcyB4bWxcbiAgfToge1xuICAgIHJlY29yZHM/OiB1bmtub3duXG4gICAgcmVzcG9uc2U/OiB1bmtub3duXG4gICAgc3RhdHM/OiBzdHJpbmdcbiAgICBwcm9ncmVzcz86IHVua25vd25cbiAgfSkge1xuICAgIHRoaXMucmVjb3JkcyA9IHJlY29yZHNcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgICB0aGlzLnN0YXRzID0gc3RhdHNcbiAgICB0aGlzLnByb2dyZXNzID0gcHJvZ3Jlc3NcbiAgfVxuXG4gIHNldFN0YXRzKHN0YXRzOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0YXRzID0gc3RhdHNcbiAgfVxuXG4gIGdldFN0YXRzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRzXG4gIH1cblxuICBzZXRQcm9ncmVzcyhwcm9ncmVzczogdW5rbm93bikge1xuICAgIHRoaXMucHJvZ3Jlc3MgPSBwcm9ncmVzc1xuICB9XG5cbiAgZ2V0UHJvZ3Jlc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NcbiAgfVxuXG4gIHNldFJlc3BvbnNlKHJlc3BvbnNlOiB1bmtub3duKSB7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cblxuICBnZXRSZXNwb25zZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZVxuICB9XG5cbiAgc2V0UmVjb3JkcyhyZWNvcmRzOiB1bmtub3duKSB7XG4gICAgdGhpcy5yZWNvcmRzID0gcmVjb3Jkc1xuICB9XG5cbiAgZ2V0UmVjb3JkcygpOiB1bmtub3duIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvcmRzXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsRUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsSUFBQSxHQUFBRix1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsV0FBQSxHQUFBSCx1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUcsTUFBQSxHQUFBSix1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBV0EsSUFBQUssS0FBQSxHQUFBTCxPQUFBO0FBQW9ETSxPQUFBLENBQUFDLGVBQUEsR0FBQUYsS0FBQSxDQUFBRSxlQUFBO0FBQUFELE9BQUEsQ0FBQUUsZ0JBQUEsR0FBQUgsS0FBQSxDQUFBRyxnQkFBQTtBQUFBRixPQUFBLENBQUFHLGlCQUFBLEdBQUFKLEtBQUEsQ0FBQUksaUJBQUE7QUFBQUgsT0FBQSxDQUFBSSx3QkFBQSxHQUFBTCxLQUFBLENBQUFLLHdCQUFBO0FBQUEsU0FBQUMseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLFdBQUEsV0FBQUEsV0FBQSxHQUFBRyxnQkFBQSxHQUFBRCxpQkFBQSxLQUFBRixXQUFBO0FBQUEsU0FBQWIsd0JBQUFpQixHQUFBLEVBQUFKLFdBQUEsU0FBQUEsV0FBQSxJQUFBSSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxX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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsInBhdGgiLCJxdWVyeXN0cmluZyIsImVycm9ycyIsIl9oZWxwZXIiLCJfdHlwZSIsImV4cG9ydHMiLCJSRVRFTlRJT05fTU9ERVMiLCJFTkNSWVBUSU9OX1RZUEVTIiwiTEVHQUxfSE9MRF9TVEFUVVMiLCJSRVRFTlRJT05fVkFMSURJVFlfVU5JVFMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiREVGQVVMVF9SRUdJT04iLCJQUkVTSUdOX0VYUElSWV9EQVlTX01BWCIsIkNvcHlTb3VyY2VPcHRpb25zIiwiY29uc3RydWN0b3IiLCJCdWNrZXQiLCJWZXJzaW9uSUQiLCJNYXRjaEVUYWciLCJOb01hdGNoRVRhZyIsIk1hdGNoTW9kaWZpZWRTaW5jZSIsIk1hdGNoVW5tb2RpZmllZFNpbmNlIiwiTWF0Y2hSYW5nZSIsIlN0YXJ0IiwiRW5kIiwiRW5jcnlwdGlvbiIsInVuZGVmaW5lZCIsInZhbGlkYXRlIiwiaXNWYWxpZEJ1Y2tldE5hbWUiLCJJbnZhbGlkQnVja2V0TmFtZUVycm9yIiwiaXNWYWxpZE9iamVjdE5hbWUiLCJJbnZhbGlkT2JqZWN0TmFtZUVycm9yIiwiaXNOdW1iZXIiLCJnZXRIZWFkZXJzIiwiaGVhZGVyT3B0aW9ucyIsImVuY29kZVVSSSIsImlzRW1wdHkiLCJyZW1vdmVEaXJBbmRGaWxlcyIsImRpclBhdGgiLCJyZW1vdmVTZWxmIiwicm1TeW5jIiwicmVjdXJzaXZlIiwiZm9yY2UiLCJyZWFkZGlyU3luYyIsImZvckVhY2giLCJpdGVtIiwiam9pbiIsIkNvcHlEZXN0aW5hdGlvbk9wdGlvbnMiLCJVc2VyTWV0YWRhdGEiLCJVc2VyVGFncyIsIkxlZ2FsSG9sZCIsIlJldGFpblVudGlsRGF0ZSIsIk1vZGUiLCJNZXRhZGF0YURpcmVjdGl2ZSIsInJlcGxhY2VEaXJlY3RpdmUiLCJ1c2VyVGFncyIsImlzT2JqZWN0Iiwic3RyaW5naWZ5IiwiaXNTdHJpbmciLCJ2YWx1ZSIsImVudHJpZXMiLCJ0b1N0cmluZyIsImVuY3J5cHRpb25IZWFkZXJzIiwiZ2V0RW5jcnlwdGlvbkhlYWRlcnMiLCJHT1ZFUk5BTkNFIiwiQ09NUExJQU5DRSIsImluY2x1ZGVzIiwiaXNFbXB0eU9iamVjdCIsIlNlbGVjdFJlc3VsdHMiLCJyZWNvcmRzIiwicmVzcG9uc2UiLCJzdGF0cyIsInByb2dyZXNzIiwic2V0U3RhdHMiLCJnZXRTdGF0cyIsInNldFByb2dyZXNzIiwiZ2V0UHJvZ3Jlc3MiLCJzZXRSZXNwb25zZSIsImdldFJlc3BvbnNlIiwic2V0UmVjb3JkcyIsImdldFJlY29yZHMiXSwic291cmNlcyI6WyJoZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCdcblxuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnktc3RyaW5nJ1xuXG5pbXBvcnQgKiBhcyBlcnJvcnMgZnJvbSAnLi9lcnJvcnMudHMnXG5pbXBvcnQge1xuICBnZXRFbmNyeXB0aW9uSGVhZGVycyxcbiAgaXNFbXB0eSxcbiAgaXNFbXB0eU9iamVjdCxcbiAgaXNOdW1iZXIsXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNWYWxpZEJ1Y2tldE5hbWUsXG4gIGlzVmFsaWRPYmplY3ROYW1lLFxufSBmcm9tICcuL2ludGVybmFsL2hlbHBlci50cydcbmltcG9ydCB0eXBlIHsgRW5jcnlwdGlvbiwgT2JqZWN0TWV0YURhdGEsIFJlcXVlc3RIZWFkZXJzIH0gZnJvbSAnLi9pbnRlcm5hbC90eXBlLnRzJ1xuaW1wb3J0IHsgUkVURU5USU9OX01PREVTIH0gZnJvbSAnLi9pbnRlcm5hbC90eXBlLnRzJ1xuXG5leHBvcnQgeyBFTkNSWVBUSU9OX1RZUEVTLCBMRUdBTF9IT0xEX1NUQVRVUywgUkVURU5USU9OX01PREVTLCBSRVRFTlRJT05fVkFMSURJVFlfVU5JVFMgfSBmcm9tICcuL2ludGVybmFsL3R5cGUudHMnXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFR0lPTiA9ICd1cy1lYXN0LTEnXG5cbmV4cG9ydCBjb25zdCBQUkVTSUdOX0VYUElSWV9EQVlTX01BWCA9IDI0ICogNjAgKiA2MCAqIDcgLy8gNyBkYXlzIGluIHNlY29uZHNcblxuZXhwb3J0IGludGVyZmFjZSBJQ29weVNvdXJjZU9wdGlvbnMge1xuICBCdWNrZXQ6IHN0cmluZ1xuICBPYmplY3Q6IHN0cmluZ1xuICAvKipcbiAgICogVmFsaWQgdmVyc2lvbklkXG4gICAqL1xuICBWZXJzaW9uSUQ/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEV0YWcgdG8gbWF0Y2hcbiAgICovXG4gIE1hdGNoRVRhZz86IHN0cmluZ1xuICAvKipcbiAgICogRXRhZyB0byBleGNsdWRlXG4gICAqL1xuICBOb01hdGNoRVRhZz86IHN0cmluZ1xuICAvKipcbiAgICogTW9kaWZpZWQgRGF0ZSBvZiB0aGUgb2JqZWN0L3BhcnQuICBVVEMgRGF0ZSBpbiBzdHJpbmcgZm9ybWF0XG4gICAqL1xuICBNYXRjaE1vZGlmaWVkU2luY2U/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiBNb2RpZmllZCBEYXRlIG9mIHRoZSBvYmplY3QvcGFydCB0byBleGNsdWRlIFVUQyBEYXRlIGluIHN0cmluZyBmb3JtYXRcbiAgICovXG4gIE1hdGNoVW5tb2RpZmllZFNpbmNlPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICogdHJ1ZSBvciBmYWxzZSBPYmplY3QgcmFuZ2UgdG8gbWF0Y2hcbiAgICovXG4gIE1hdGNoUmFuZ2U/OiBib29sZWFuXG4gIFN0YXJ0PzogbnVtYmVyXG4gIEVuZD86IG51bWJlclxuICBFbmNyeXB0aW9uPzogRW5jcnlwdGlvblxufVxuXG5leHBvcnQgY2xhc3MgQ29weVNvdXJjZU9wdGlvbnMge1xuICBwdWJsaWMgcmVhZG9ubHkgQnVja2V0OiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IE9iamVjdDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBWZXJzaW9uSUQ6IHN0cmluZ1xuICBwdWJsaWMgTWF0Y2hFVGFnOiBzdHJpbmdcbiAgcHJpdmF0ZSByZWFkb25seSBOb01hdGNoRVRhZzogc3RyaW5nXG4gIHByaXZhdGUgcmVhZG9ubHkgTWF0Y2hNb2RpZmllZFNpbmNlOiBzdHJpbmcgfCBudWxsXG4gIHByaXZhdGUgcmVhZG9ubHkgTWF0Y2hVbm1vZGlmaWVkU2luY2U6IHN0cmluZyB8IG51bGxcbiAgcHVibGljIHJlYWRvbmx5IE1hdGNoUmFuZ2U6IGJvb2xlYW5cbiAgcHVibGljIHJlYWRvbmx5IFN0YXJ0OiBudW1iZXJcbiAgcHVibGljIHJlYWRvbmx5IEVuZDogbnVtYmVyXG4gIHByaXZhdGUgcmVhZG9ubHkgRW5jcnlwdGlvbj86IEVuY3J5cHRpb25cblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgQnVja2V0LFxuICAgIE9iamVjdCxcbiAgICBWZXJzaW9uSUQgPSAnJyxcbiAgICBNYXRjaEVUYWcgPSAnJyxcbiAgICBOb01hdGNoRVRhZyA9ICcnLFxuICAgIE1hdGNoTW9kaWZpZWRTaW5jZSA9IG51bGwsXG4gICAgTWF0Y2hVbm1vZGlmaWVkU2luY2UgPSBudWxsLFxuICAgIE1hdGNoUmFuZ2UgPSBmYWxzZSxcbiAgICBTdGFydCA9IDAsXG4gICAgRW5kID0gMCxcbiAgICBFbmNyeXB0aW9uID0gdW5kZWZpbmVkLFxuICB9OiBJQ29weVNvdXJjZU9wdGlvbnMpIHtcbiAgICB0aGlzLkJ1Y2tldCA9IEJ1Y2tldFxuICAgIHRoaXMuT2JqZWN0ID0gT2JqZWN0XG4gICAgdGhpcy5WZXJzaW9uSUQgPSBWZXJzaW9uSURcbiAgICB0aGlzLk1hdGNoRVRhZyA9IE1hdGNoRVRhZ1xuICAgIHRoaXMuTm9NYXRjaEVUYWcgPSBOb01hdGNoRVRhZ1xuICAgIHRoaXMuTWF0Y2hNb2RpZmllZFNpbmNlID0gTWF0Y2hNb2RpZmllZFNpbmNlXG4gICAgdGhpcy5NYXRjaFVubW9kaWZpZWRTaW5jZSA9IE1hdGNoVW5tb2RpZmllZFNpbmNlXG4gICAgdGhpcy5NYXRjaFJhbmdlID0gTWF0Y2hSYW5nZVxuICAgIHRoaXMuU3RhcnQgPSBTdGFydFxuICAgIHRoaXMuRW5kID0gRW5kXG4gICAgdGhpcy5FbmNyeXB0aW9uID0gRW5jcnlwdGlvblxuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgaWYgKCFpc1ZhbGlkQnVja2V0TmFtZSh0aGlzLkJ1Y2tldCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEJ1Y2tldE5hbWVFcnJvcignSW52YWxpZCBTb3VyY2UgYnVja2V0IG5hbWU6ICcgKyB0aGlzLkJ1Y2tldClcbiAgICB9XG4gICAgaWYgKCFpc1ZhbGlkT2JqZWN0TmFtZSh0aGlzLk9iamVjdCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZE9iamVjdE5hbWVFcnJvcihgSW52YWxpZCBTb3VyY2Ugb2JqZWN0IG5hbWU6ICR7dGhpcy5PYmplY3R9YClcbiAgICB9XG4gICAgaWYgKCh0aGlzLk1hdGNoUmFuZ2UgJiYgdGhpcy5TdGFydCAhPT0gLTEgJiYgdGhpcy5FbmQgIT09IC0xICYmIHRoaXMuU3RhcnQgPiB0aGlzLkVuZCkgfHwgdGhpcy5TdGFydCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZE9iamVjdE5hbWVFcnJvcignU291cmNlIHN0YXJ0IG11c3QgYmUgbm9uLW5lZ2F0aXZlLCBhbmQgc3RhcnQgbXVzdCBiZSBhdCBtb3N0IGVuZC4nKVxuICAgIH0gZWxzZSBpZiAoKHRoaXMuTWF0Y2hSYW5nZSAmJiAhaXNOdW1iZXIodGhpcy5TdGFydCkpIHx8ICFpc051bWJlcih0aGlzLkVuZCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZE9iamVjdE5hbWVFcnJvcihcbiAgICAgICAgJ01hdGNoUmFuZ2UgaXMgc3BlY2lmaWVkLiBCdXQgSW52YWxpZCBTdGFydCBhbmQgRW5kIHZhbHVlcyBhcmUgc3BlY2lmaWVkLicsXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGdldEhlYWRlcnMoKTogUmVxdWVzdEhlYWRlcnMge1xuICAgIGNvbnN0IGhlYWRlck9wdGlvbnM6IFJlcXVlc3RIZWFkZXJzID0ge31cbiAgICBoZWFkZXJPcHRpb25zWyd4LWFtei1jb3B5LXNvdXJjZSddID0gZW5jb2RlVVJJKHRoaXMuQnVja2V0ICsgJy8nICsgdGhpcy5PYmplY3QpXG5cbiAgICBpZiAoIWlzRW1wdHkodGhpcy5WZXJzaW9uSUQpKSB7XG4gICAgICBoZWFkZXJPcHRpb25zWyd4LWFtei1jb3B5LXNvdXJjZSddID0gYCR7ZW5jb2RlVVJJKHRoaXMuQnVja2V0ICsgJy8nICsgdGhpcy5PYmplY3QpfT92ZXJzaW9uSWQ9JHt0aGlzLlZlcnNpb25JRH1gXG4gICAgfVxuXG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuTWF0Y2hFVGFnKSkge1xuICAgICAgaGVhZGVyT3B0aW9uc1sneC1hbXotY29weS1zb3VyY2UtaWYtbWF0Y2gnXSA9IHRoaXMuTWF0Y2hFVGFnXG4gICAgfVxuICAgIGlmICghaXNFbXB0eSh0aGlzLk5vTWF0Y2hFVGFnKSkge1xuICAgICAgaGVhZGVyT3B0aW9uc1sneC1hbXotY29weS1zb3VyY2UtaWYtbm9uZS1tYXRjaCddID0gdGhpcy5Ob01hdGNoRVRhZ1xuICAgIH1cblxuICAgIGlmICghaXNFbXB0eSh0aGlzLk1hdGNoTW9kaWZpZWRTaW5jZSkpIHtcbiAgICAgIGhlYWRlck9wdGlvbnNbJ3gtYW16LWNvcHktc291cmNlLWlmLW1vZGlmaWVkLXNpbmNlJ10gPSB0aGlzLk1hdGNoTW9kaWZpZWRTaW5jZVxuICAgIH1cbiAgICBpZiAoIWlzRW1wdHkodGhpcy5NYXRjaFVubW9kaWZpZWRTaW5jZSkpIHtcbiAgICAgIGhlYWRlck9wdGlvbnNbJ3gtYW16LWNvcHktc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2UnXSA9IHRoaXMuTWF0Y2hVbm1vZGlmaWVkU2luY2VcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyT3B0aW9uc1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIG5vZGVqcyBmcyBtb2R1bGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURpckFuZEZpbGVzKGRpclBhdGg6IHN0cmluZywgcmVtb3ZlU2VsZiA9IHRydWUpIHtcbiAgaWYgKHJlbW92ZVNlbGYpIHtcbiAgICByZXR1cm4gZnMucm1TeW5jKGRpclBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICB9XG5cbiAgZnMucmVhZGRpclN5bmMoZGlyUGF0aCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIGZzLnJtU3luYyhwYXRoLmpvaW4oZGlyUGF0aCwgaXRlbSksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICB9KVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb3B5RGVzdGluYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEJ1Y2tldCBuYW1lXG4gICAqL1xuICBCdWNrZXQ6IHN0cmluZ1xuICAvKipcbiAgICogT2JqZWN0IE5hbWUgZm9yIHRoZSBkZXN0aW5hdGlvbiAoY29tcG9zZWQvY29waWVkKSBvYmplY3QgZGVmYXVsdHNcbiAgICovXG4gIE9iamVjdDogc3RyaW5nXG4gIC8qKlxuICAgKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgdG8ge31cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIEVuY3J5cHRpb24/OiBFbmNyeXB0aW9uXG4gIFVzZXJNZXRhZGF0YT86IE9iamVjdE1ldGFEYXRhXG4gIC8qKlxuICAgKiBxdWVyeS1zdHJpbmcgZW5jb2RlZCBzdHJpbmcgb3IgUmVjb3JkPHN0cmluZywgc3RyaW5nPiBPYmplY3RcbiAgICovXG4gIFVzZXJUYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZ1xuICBMZWdhbEhvbGQ/OiAnb24nIHwgJ29mZidcbiAgLyoqXG4gICAqIFVUQyBEYXRlIFN0cmluZ1xuICAgKi9cbiAgUmV0YWluVW50aWxEYXRlPzogc3RyaW5nXG4gIE1vZGU/OiBSRVRFTlRJT05fTU9ERVNcbiAgTWV0YWRhdGFEaXJlY3RpdmU/OiAnQ09QWScgfCAnUkVQTEFDRSdcbn1cblxuZXhwb3J0IGNsYXNzIENvcHlEZXN0aW5hdGlvbk9wdGlvbnMge1xuICBwdWJsaWMgcmVhZG9ubHkgQnVja2V0OiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IE9iamVjdDogc3RyaW5nXG4gIHByaXZhdGUgcmVhZG9ubHkgRW5jcnlwdGlvbj86IEVuY3J5cHRpb25cbiAgcHJpdmF0ZSByZWFkb25seSBVc2VyTWV0YWRhdGE/OiBPYmplY3RNZXRhRGF0YVxuICBwcml2YXRlIHJlYWRvbmx5IFVzZXJUYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZ1xuICBwcml2YXRlIHJlYWRvbmx5IExlZ2FsSG9sZD86ICdvbicgfCAnb2ZmJ1xuICBwcml2YXRlIHJlYWRvbmx5IFJldGFpblVudGlsRGF0ZT86IHN0cmluZ1xuICBwcml2YXRlIHJlYWRvbmx5IE1vZGU/OiBSRVRFTlRJT05fTU9ERVNcbiAgcHJpdmF0ZSByZWFkb25seSBNZXRhZGF0YURpcmVjdGl2ZT86IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBCdWNrZXQsXG4gICAgT2JqZWN0LFxuICAgIEVuY3J5cHRpb24sXG4gICAgVXNlck1ldGFkYXRhLFxuICAgIFVzZXJUYWdzLFxuICAgIExlZ2FsSG9sZCxcbiAgICBSZXRhaW5VbnRpbERhdGUsXG4gICAgTW9kZSxcbiAgICBNZXRhZGF0YURpcmVjdGl2ZSxcbiAgfTogSUNvcHlEZXN0aW5hdGlvbk9wdGlvbnMpIHtcbiAgICB0aGlzLkJ1Y2tldCA9IEJ1Y2tldFxuICAgIHRoaXMuT2JqZWN0ID0gT2JqZWN0XG4gICAgdGhpcy5FbmNyeXB0aW9uID0gRW5jcnlwdGlvbiA/PyB1bmRlZmluZWQgLy8gbnVsbCBpbnB1dCB3aWxsIGJlY29tZSB1bmRlZmluZWQsIGVhc3kgZm9yIHJ1bnRpbWUgYXNzZXJ0XG4gICAgdGhpcy5Vc2VyTWV0YWRhdGEgPSBVc2VyTWV0YWRhdGFcbiAgICB0aGlzLlVzZXJUYWdzID0gVXNlclRhZ3NcbiAgICB0aGlzLkxlZ2FsSG9sZCA9IExlZ2FsSG9sZFxuICAgIHRoaXMuTW9kZSA9IE1vZGUgLy8gcmV0ZW50aW9uIG1vZGVcbiAgICB0aGlzLlJldGFpblVudGlsRGF0ZSA9IFJldGFpblVudGlsRGF0ZVxuICAgIHRoaXMuTWV0YWRhdGFEaXJlY3RpdmUgPSBNZXRhZGF0YURpcmVjdGl2ZVxuICB9XG5cbiAgZ2V0SGVhZGVycygpOiBSZXF1ZXN0SGVhZGVycyB7XG4gICAgY29uc3QgcmVwbGFjZURpcmVjdGl2ZSA9ICdSRVBMQUNFJ1xuICAgIGNvbnN0IGhlYWRlck9wdGlvbnM6IFJlcXVlc3RIZWFkZXJzID0ge31cblxuICAgIGNvbnN0IHVzZXJUYWdzID0gdGhpcy5Vc2VyVGFnc1xuICAgIGlmICghaXNFbXB0eSh1c2VyVGFncykpIHtcbiAgICAgIGhlYWRlck9wdGlvbnNbJ1gtQW16LVRhZ2dpbmctRGlyZWN0aXZlJ10gPSByZXBsYWNlRGlyZWN0aXZlXG4gICAgICBoZWFkZXJPcHRpb25zWydYLUFtei1UYWdnaW5nJ10gPSBpc09iamVjdCh1c2VyVGFncylcbiAgICAgICAgPyBxdWVyeXN0cmluZy5zdHJpbmdpZnkodXNlclRhZ3MpXG4gICAgICAgIDogaXNTdHJpbmcodXNlclRhZ3MpXG4gICAgICAgID8gdXNlclRhZ3NcbiAgICAgICAgOiAnJ1xuICAgIH1cblxuICAgIGlmICh0aGlzLk1vZGUpIHtcbiAgICAgIGhlYWRlck9wdGlvbnNbJ1gtQW16LU9iamVjdC1Mb2NrLU1vZGUnXSA9IHRoaXMuTW9kZSAvLyBHT1ZFUk5BTkNFIG9yIENPTVBMSUFOQ0VcbiAgICB9XG5cbiAgICBpZiAodGhpcy5SZXRhaW5VbnRpbERhdGUpIHtcbiAgICAgIGhlYWRlck9wdGlvbnNbJ1gtQW16LU9iamVjdC1Mb2NrLVJldGFpbi1VbnRpbC1EYXRlJ10gPSB0aGlzLlJldGFpblVudGlsRGF0ZSAvLyBuZWVkcyB0byBiZSBVVEMuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuTGVnYWxIb2xkKSB7XG4gICAgICBoZWFkZXJPcHRpb25zWydYLUFtei1PYmplY3QtTG9jay1MZWdhbC1Ib2xkJ10gPSB0aGlzLkxlZ2FsSG9sZCAvLyBPTiBvciBPRkZcbiAgICB9XG5cbiAgICBpZiAodGhpcy5Vc2VyTWV0YWRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuVXNlck1ldGFkYXRhKSkge1xuICAgICAgICBoZWFkZXJPcHRpb25zW2BYLUFtei1NZXRhLSR7a2V5fWBdID0gdmFsdWUudG9TdHJpbmcoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLk1ldGFkYXRhRGlyZWN0aXZlKSB7XG4gICAgICBoZWFkZXJPcHRpb25zW2BYLUFtei1NZXRhZGF0YS1EaXJlY3RpdmVgXSA9IHRoaXMuTWV0YWRhdGFEaXJlY3RpdmVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5FbmNyeXB0aW9uKSB7XG4gICAgICBjb25zdCBlbmNyeXB0aW9uSGVhZGVycyA9IGdldEVuY3J5cHRpb25IZWFkZXJzKHRoaXMuRW5jcnlwdGlvbilcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVuY3J5cHRpb25IZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJPcHRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyT3B0aW9uc1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgaWYgKCFpc1ZhbGlkQnVja2V0TmFtZSh0aGlzLkJ1Y2tldCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEJ1Y2tldE5hbWVFcnJvcignSW52YWxpZCBEZXN0aW5hdGlvbiBidWNrZXQgbmFtZTogJyArIHRoaXMuQnVja2V0KVxuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRPYmplY3ROYW1lKHRoaXMuT2JqZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkT2JqZWN0TmFtZUVycm9yKGBJbnZhbGlkIERlc3RpbmF0aW9uIG9iamVjdCBuYW1lOiAke3RoaXMuT2JqZWN0fWApXG4gICAgfVxuICAgIGlmICghaXNFbXB0eSh0aGlzLlVzZXJNZXRhZGF0YSkgJiYgIWlzT2JqZWN0KHRoaXMuVXNlck1ldGFkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkT2JqZWN0TmFtZUVycm9yKGBEZXN0aW5hdGlvbiBVc2VyTWV0YWRhdGEgc2hvdWxkIGJlIGFuIG9iamVjdCB3aXRoIGtleSB2YWx1ZSBwYWlyc2ApXG4gICAgfVxuXG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuTW9kZSkgJiYgIVtSRVRFTlRJT05fTU9ERVMuR09WRVJOQU5DRSwgUkVURU5USU9OX01PREVTLkNPTVBMSUFOQ0VdLmluY2x1ZGVzKHRoaXMuTW9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZE9iamVjdE5hbWVFcnJvcihcbiAgICAgICAgYEludmFsaWQgTW9kZSBzcGVjaWZpZWQgZm9yIGRlc3RpbmF0aW9uIG9iamVjdCBpdCBzaG91bGQgYmUgb25lIG9mIFtHT1ZFUk5BTkNFLENPTVBMSUFOQ0VdYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5FbmNyeXB0aW9uICE9PSB1bmRlZmluZWQgJiYgaXNFbXB0eU9iamVjdCh0aGlzLkVuY3J5cHRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRPYmplY3ROYW1lRXJyb3IoYEludmFsaWQgRW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBkZXN0aW5hdGlvbiBvYmplY3QgYClcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG4vKipcbiAqIG1heWJlIHRoaXMgc2hvdWxkIGJlIGEgZ2VuZXJpYyB0eXBlIGZvciBSZWNvcmRzLCBsZWF2ZSBpdCBmb3IgbGF0ZXIgcmVmYWN0b3JcbiAqL1xuZXhwb3J0IGNsYXNzIFNlbGVjdFJlc3VsdHMge1xuICBwcml2YXRlIHJlY29yZHM/OiB1bmtub3duXG4gIHByaXZhdGUgcmVzcG9uc2U/OiB1bmtub3duXG4gIHByaXZhdGUgc3RhdHM/OiBzdHJpbmdcbiAgcHJpdmF0ZSBwcm9ncmVzcz86IHVua25vd25cblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgcmVjb3JkcywgLy8gcGFyc2VkIGRhdGEgYXMgc3RyZWFtXG4gICAgcmVzcG9uc2UsIC8vIG9yaWdpbmFsIHJlc3BvbnNlIHN0cmVhbVxuICAgIHN0YXRzLCAvLyBzdGF0cyBhcyB4bWxcbiAgICBwcm9ncmVzcywgLy8gc3RhdHMgYXMgeG1sXG4gIH06IHtcbiAgICByZWNvcmRzPzogdW5rbm93blxuICAgIHJlc3BvbnNlPzogdW5rbm93blxuICAgIHN0YXRzPzogc3RyaW5nXG4gICAgcHJvZ3Jlc3M/OiB1bmtub3duXG4gIH0pIHtcbiAgICB0aGlzLnJlY29yZHMgPSByZWNvcmRzXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gICAgdGhpcy5zdGF0cyA9IHN0YXRzXG4gICAgdGhpcy5wcm9ncmVzcyA9IHByb2dyZXNzXG4gIH1cblxuICBzZXRTdGF0cyhzdGF0czogc3RyaW5nKSB7XG4gICAgdGhpcy5zdGF0cyA9IHN0YXRzXG4gIH1cblxuICBnZXRTdGF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0c1xuICB9XG5cbiAgc2V0UHJvZ3Jlc3MocHJvZ3Jlc3M6IHVua25vd24pIHtcbiAgICB0aGlzLnByb2dyZXNzID0gcHJvZ3Jlc3NcbiAgfVxuXG4gIGdldFByb2dyZXNzKCkge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzXG4gIH1cblxuICBzZXRSZXNwb25zZShyZXNwb25zZTogdW5rbm93bikge1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG5cbiAgZ2V0UmVzcG9uc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2VcbiAgfVxuXG4gIHNldFJlY29yZHMocmVjb3JkczogdW5rbm93bikge1xuICAgIHRoaXMucmVjb3JkcyA9IHJlY29yZHNcbiAgfVxuXG4gIGdldFJlY29yZHMoKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMucmVjb3Jkc1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLEVBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLElBQUEsR0FBQUYsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFFLFdBQUEsR0FBQUgsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFHLE1BQUEsR0FBQUosdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQVdBLElBQUFLLEtBQUEsR0FBQUwsT0FBQTtBQUFvRE0sT0FBQSxDQUFBQyxlQUFBLEdBQUFGLEtBQUEsQ0FBQUUsZUFBQTtBQUFBRCxPQUFBLENBQUFFLGdCQUFBLEdBQUFILEtBQUEsQ0FBQUcsZ0JBQUE7QUFBQUYsT0FBQSxDQUFBRyxpQkFBQSxHQUFBSixLQUFBLENBQUFJLGlCQUFBO0FBQUFILE9BQUEsQ0FBQUksd0JBQUEsR0FBQUwsS0FBQSxDQUFBSyx3QkFBQTtBQUFBLFNBQUFDLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEsa0NBQUFDLGlCQUFBLE9BQUFELE9BQUEsUUFBQUUsZ0JBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxXQUFBLFdBQUFBLFdBQUEsR0FBQUcsZ0JB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

@@ -10,6 +10,9 @@ /// <reference types="node" />

import type { SelectResults } from "../helpers.js";
import { LEGAL_HOLD_STATUS } from "../helpers.js";
import { CopyDestinationOptions, CopySourceOptions, LEGAL_HOLD_STATUS } from "../helpers.js";
import type { PostPolicyResult } from '../minio';
import { CopyConditions } from "./copy-conditions.js";
import { Extensions } from "./extensions.js";
import { PostPolicy } from "./post-policy.js";
import type { Region } from "./s3-endpoints.js";
import type { Binary, BucketItemFromList, BucketItemStat, BucketStream, BucketVersioningConfiguration, EncryptionConfig, GetObjectLegalHoldOptions, IncompleteUploadedBucketItem, IRequest, ItemBucketMetadata, LifecycleConfig, LifeCycleConfigParam, ObjectLockInfo, ObjectMetaData, PutObjectLegalHoldOptions, ReplicationConfig, ReplicationConfigOpts, RequestHeaders, ResultCallback, Retention, SelectOptions, StatObjectOpts, Tag, TaggingOpts, Tags, Transport, UploadedObjectInfo, VersionIdentificator } from "./type.js";
import type { Binary, BucketItemFromList, BucketItemStat, BucketStream, BucketVersioningConfiguration, CopyObjectResult, EncryptionConfig, GetObjectLegalHoldOptions, GetObjectOpts, GetObjectRetentionOpts, IncompleteUploadedBucketItem, IRequest, ItemBucketMetadata, LifecycleConfig, LifeCycleConfigParam, ObjectLockInfo, ObjectMetaData, ObjectRetentionInfo, PreSignRequestParams, PutObjectLegalHoldOptions, RemoveObjectsParam, RemoveObjectsResponse, ReplicationConfig, ReplicationConfigOpts, RequestHeaders, ResultCallback, Retention, SelectOptions, StatObjectOpts, Tag, TaggingOpts, Tags, Transport, UploadedObjectInfo } from "./type.js";
import type { ListMultipartResult, UploadedPart } from "./xml-parser.js";

@@ -89,2 +92,8 @@ declare const requestOptionProperties: readonly ["agent", "ca", "cert", "ciphers", "clientCertEngine", "crl", "dhparam", "ecdhCurve", "family", "honorCipherOrder", "key", "passphrase", "pfx", "rejectUnauthorized", "secureOptions", "secureProtocol", "servername", "sessionIdContext"];

/**
* Set application specific information.
* Generates User-Agent in the following style.
* MinIO (OS; ARCH) LIB/VER APP/VER
*/
setAppInfo(appName: string, appVersion: string): void;
/**
* returns options object that can be used with http.request()

@@ -185,3 +194,3 @@ * Takes care of constructing virtual-host-style or path-style hostname

*/
getObject(bucketName: string, objectName: string, getOpts?: VersionIdentificator): Promise<stream.Readable>;
getObject(bucketName: string, objectName: string, getOpts?: GetObjectOpts): Promise<stream.Readable>;
/**

@@ -195,3 +204,3 @@ * Callback is called with readable stream of the partial object content.

*/
getPartialObject(bucketName: string, objectName: string, offset: number, length?: number, getOpts?: VersionIdentificator): Promise<stream.Readable>;
getPartialObject(bucketName: string, objectName: string, offset: number, length?: number, getOpts?: GetObjectOpts): Promise<stream.Readable>;
/**

@@ -206,3 +215,3 @@ * download object content to a file.

*/
fGetObject(bucketName: string, objectName: string, filePath: string, getOpts?: VersionIdentificator): Promise<void>;
fGetObject(bucketName: string, objectName: string, filePath: string, getOpts?: GetObjectOpts): Promise<void>;
/**

@@ -212,11 +221,2 @@ * Stat information of the object.

statObject(bucketName: string, objectName: string, statOpts?: StatObjectOpts): Promise<BucketItemStat>;
/**
* Remove the specified object.
* @deprecated use new promise style API
*/
removeObject(bucketName: string, objectName: string, removeOpts: RemoveOptions, callback: NoResultCallback): void;
/**
* @deprecated use new promise style API
*/
removeObject(bucketName: string, objectName: string, callback: NoResultCallback): void;
removeObject(bucketName: string, objectName: string, removeOpts?: RemoveOptions): Promise<void>;

@@ -299,3 +299,3 @@ listIncompleteUploads(bucket: string, prefix: string, recursive: boolean): BucketStream<IncompleteUploadedBucketItem>;

*/
getObjectTagging(bucketName: string, objectName: string, getOpts?: VersionIdentificator): Promise<Tag[]>;
getObjectTagging(bucketName: string, objectName: string, getOpts?: GetObjectOpts): Promise<Tag[]>;
/**

@@ -315,7 +315,7 @@ * Set the policy on a bucket or an object prefix.

setObjectLockConfig(bucketName: string, lockConfigOpts: Omit<ObjectLockInfo, 'objectLockEnabled'>): Promise<void>;
getBucketVersioning(bucketName: string): Promise<void>;
getBucketVersioning(bucketName: string): Promise<BucketVersioningConfiguration>;
setBucketVersioning(bucketName: string, versionConfig: BucketVersioningConfiguration): Promise<void>;
private setTagging;
private removeTagging;
setBucketTagging(bucketName: string, tags: Tag): Promise<void>;
setBucketTagging(bucketName: string, tags: Tags): Promise<void>;
removeBucketTagging(bucketName: string): Promise<void>;

@@ -332,3 +332,30 @@ setObjectTagging(bucketName: string, objectName: string, tags: Tags, putOpts: TaggingOpts): Promise<void>;

removeBucketEncryption(bucketName: string): Promise<void>;
getObjectRetention(bucketName: string, objectName: string, getOpts?: GetObjectRetentionOpts): Promise<ObjectRetentionInfo | null | undefined>;
removeObjects(bucketName: string, objectsList: RemoveObjectsParam): Promise<RemoveObjectsResponse[]>;
removeIncompleteUpload(bucketName: string, objectName: string): Promise<void>;
private copyObjectV1;
private copyObjectV2;
copyObject(source: CopySourceOptions, dest: CopyDestinationOptions): Promise<CopyObjectResult>;
copyObject(targetBucketName: string, targetObjectName: string, sourceBucketNameAndObjectName: string, conditions?: CopyConditions): Promise<CopyObjectResult>;
uploadPart(partConfig: {
bucketName: string;
objectName: string;
uploadID: string;
partNumber: number;
headers: RequestHeaders;
}): Promise<{
etag: string;
key: string;
part: number;
}>;
composeObject(destObjConfig: CopyDestinationOptions, sourceObjList: CopySourceOptions[]): Promise<boolean | {
etag: string;
versionId: string | null;
} | Promise<void> | CopyObjectResult>;
presignedUrl(method: string, bucketName: string, objectName: string, expires?: number | PreSignRequestParams | undefined, reqParams?: PreSignRequestParams | Date, requestDate?: Date): Promise<string>;
presignedGetObject(bucketName: string, objectName: string, expires?: number, respHeaders?: PreSignRequestParams | Date, requestDate?: Date): Promise<string>;
presignedPutObject(bucketName: string, objectName: string, expires?: number): Promise<string>;
newPostPolicy(): PostPolicy;
presignedPostPolicy(postPolicy: PostPolicy): Promise<PostPolicyResult>;
}
export {};

@@ -6,5 +6,12 @@ /// <reference types="node" />

import type { Readable as ReadableStream } from 'node:stream';
import type { CopyDestinationOptions, CopySourceOptions } from "../helpers.js";
import type { CopyConditions } from "./copy-conditions.js";
export type VersionIdentificator = {
versionId?: string;
};
export type GetObjectOpts = VersionIdentificator & {
SSECustomerAlgorithm?: string;
SSECustomerKey?: string;
SSECustomerKeyMD5?: string;
};
export type Binary = string | Buffer;

@@ -199,5 +206,2 @@ export type ResponseHeader = Record<string, string>;

export type VersioningSuspended = 'Suspended';
export type BucketVersioningConfiguration = {
Status: VersioningEnabled | VersioningSuspended;
};
export type TaggingOpts = {

@@ -261,6 +265,6 @@ versionId: string;

export type Expiration = {
Date: string;
Date?: string;
Days: number;
DeleteMarker: boolean;
DeleteAll: boolean;
DeleteMarker?: boolean;
DeleteAll?: boolean;
};

@@ -317,2 +321,63 @@ export type RuleFilterAnd = {

Rule: EncryptionRule[];
};
export type GetObjectRetentionOpts = {
versionId: string;
};
export type ObjectRetentionInfo = {
mode: RETENTION_MODES;
retainUntilDate: string;
};
export type RemoveObjectsEntry = {
name: string;
versionId?: string;
};
export type ObjectName = string;
export type RemoveObjectsParam = ObjectName[] | RemoveObjectsEntry[];
export type RemoveObjectsRequestEntry = {
Key: string;
VersionId?: string;
};
export type RemoveObjectsResponse = null | undefined | {
Error?: {
Code?: string;
Message?: string;
Key?: string;
VersionId?: string;
};
};
export type CopyObjectResultV1 = {
etag: string;
lastModified: string | Date;
};
export type CopyObjectResultV2 = {
Bucket?: string;
Key?: string;
LastModified: string | Date;
MetaData?: ResponseHeader;
VersionId?: string | null;
SourceVersionId?: string | null;
Etag?: string;
Size?: number;
};
export type CopyObjectResult = CopyObjectResultV1 | CopyObjectResultV2;
export type CopyObjectParams = [CopySourceOptions, CopyDestinationOptions] | [string, string, string, CopyConditions?];
export type ExcludedPrefix = {
Prefix: string;
};
export type BucketVersioningConfiguration = {
Status: VersioningEnabled | VersioningSuspended;
MFADelete?: string;
ExcludedPrefixes?: ExcludedPrefix[];
ExcludeFolders?: boolean;
};
export type UploadPartConfig = {
bucketName: string;
objectName: string;
uploadID: string;
partNumber: number;
headers: RequestHeaders;
sourceObj: string;
};
export type PreSignRequestParams = {
[key: string]: string;
};

@@ -36,2 +36,2 @@ "use strict";

exports.LEGAL_HOLD_STATUS = LEGAL_HOLD_STATUS;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFTkNSWVBUSU9OX1RZUEVTIiwiZXhwb3J0cyIsIlJFVEVOVElPTl9NT0RFUyIsIlJFVEVOVElPTl9WQUxJRElUWV9VTklUUyIsIkxFR0FMX0hPTERfU1RBVFVTIl0sInNvdXJjZXMiOlsidHlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGh0dHAgZnJvbSAnbm9kZTpodHRwJ1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZSBhcyBSZWFkYWJsZVN0cmVhbSB9IGZyb20gJ25vZGU6c3RyZWFtJ1xuXG5leHBvcnQgdHlwZSBWZXJzaW9uSWRlbnRpZmljYXRvciA9IHtcbiAgdmVyc2lvbklkPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEJpbmFyeSA9IHN0cmluZyB8IEJ1ZmZlclxuXG4vLyBub2RlanMgSW5jb21pbmdIdHRwSGVhZGVycyBpcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4sIGJ1dCBpdCdzIGFjdHVhbGx5IHRoaXM6XG5leHBvcnQgdHlwZSBSZXNwb25zZUhlYWRlciA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuZXhwb3J0IHR5cGUgT2JqZWN0TWV0YURhdGEgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RIZWFkZXJzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IHVuZGVmaW5lZD5cblxuZXhwb3J0IHR5cGUgRW5jcnlwdGlvbiA9XG4gIHwge1xuICAgICAgdHlwZTogRU5DUllQVElPTl9UWVBFUy5TU0VDXG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IEVOQ1JZUFRJT05fVFlQRVMuS01TXG4gICAgICBTU0VBbGdvcml0aG0/OiBzdHJpbmdcbiAgICAgIEtNU01hc3RlcktleUlEPzogc3RyaW5nXG4gICAgfVxuXG5leHBvcnQgdHlwZSBFbmFibGVkT3JEaXNhYmxlZFN0YXR1cyA9ICdFbmFibGVkJyB8ICdEaXNhYmxlZCdcbmV4cG9ydCBlbnVtIEVOQ1JZUFRJT05fVFlQRVMge1xuICAvKipcbiAgICogU1NFQyByZXByZXNlbnRzIHNlcnZlci1zaWRlLWVuY3J5cHRpb24gd2l0aCBjdXN0b21lciBwcm92aWRlZCBrZXlzXG4gICAqL1xuICBTU0VDID0gJ1NTRS1DJyxcbiAgLyoqXG4gICAqIEtNUyByZXByZXNlbnRzIHNlcnZlci1zaWRlLWVuY3J5cHRpb24gd2l0aCBtYW5hZ2VkIGtleXNcbiAgICovXG4gIEtNUyA9ICdLTVMnLFxufVxuXG5leHBvcnQgZW51bSBSRVRFTlRJT05fTU9ERVMge1xuICBHT1ZFUk5BTkNFID0gJ0dPVkVSTkFOQ0UnLFxuICBDT01QTElBTkNFID0gJ0NPTVBMSUFOQ0UnLFxufVxuXG5leHBvcnQgZW51bSBSRVRFTlRJT05fVkFMSURJVFlfVU5JVFMge1xuICBEQVlTID0gJ0RheXMnLFxuICBZRUFSUyA9ICdZZWFycycsXG59XG5cbmV4cG9ydCBlbnVtIExFR0FMX0hPTERfU1RBVFVTIHtcbiAgRU5BQkxFRCA9ICdPTicsXG4gIERJU0FCTEVEID0gJ09GRicsXG59XG5cbmV4cG9ydCB0eXBlIFRyYW5zcG9ydCA9IFBpY2s8dHlwZW9mIGh0dHAsICdyZXF1ZXN0Jz5cblxuZXhwb3J0IGludGVyZmFjZSBJUmVxdWVzdCB7XG4gIHByb3RvY29sOiBzdHJpbmdcbiAgcG9ydD86IG51bWJlciB8IHN0cmluZ1xuICBtZXRob2Q6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgaGVhZGVyczogUmVxdWVzdEhlYWRlcnNcbn1cblxuZXhwb3J0IHR5cGUgSUNhbm9uaWNhbFJlcXVlc3QgPSBzdHJpbmdcblxuZXhwb3J0IGludGVyZmFjZSBJbmNvbXBsZXRlVXBsb2FkZWRCdWNrZXRJdGVtIHtcbiAga2V5OiBzdHJpbmdcbiAgdXBsb2FkSWQ6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUl0ZW0ge1xuICBLZXk6IHN0cmluZ1xuICBWYWx1ZTogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlbUJ1Y2tldE1ldGFkYXRhTGlzdCB7XG4gIEl0ZW1zOiBNZXRhZGF0YUl0ZW1bXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1CdWNrZXRNZXRhZGF0YSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIFtrZXk6IHN0cmluZ106IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldEl0ZW1Gcm9tTGlzdCB7XG4gIG5hbWU6IHN0cmluZ1xuICBjcmVhdGlvbkRhdGU6IERhdGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRJdGVtQ29weSB7XG4gIGV0YWc6IHN0cmluZ1xuICBsYXN0TW9kaWZpZWQ6IERhdGVcbn1cblxuZXhwb3J0IHR5cGUgQnVja2V0SXRlbSA9XG4gIHwge1xuICAgICAgbmFtZTogc3RyaW5nXG4gICAgICBzaXplOiBudW1iZXJcbiAgICAgIGV0YWc6IHN0cmluZ1xuICAgICAgcHJlZml4PzogbmV2ZXJcbiAgICAgIGxhc3RNb2RpZmllZDogRGF0ZVxuICAgIH1cbiAgfCB7XG4gICAgICBuYW1lPzogbmV2ZXJcbiAgICAgIGV0YWc/OiBuZXZlclxuICAgICAgbGFzdE1vZGlmaWVkPzogbmV2ZXJcbiAgICAgIHByZWZpeDogc3RyaW5nXG4gICAgICBzaXplOiAwXG4gICAgfVxuXG5leHBvcnQgdHlwZSBCdWNrZXRJdGVtV2l0aE1ldGFkYXRhID0gQnVja2V0SXRlbSAmIHtcbiAgbWV0YWRhdGE/OiBJdGVtQnVja2V0TWV0YWRhdGEgfCBJdGVtQnVja2V0TWV0YWRhdGFMaXN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3RyZWFtPFQ+IGV4dGVuZHMgUmVhZGFibGVTdHJlYW0ge1xuICBvbihldmVudDogJ2RhdGEnLCBsaXN0ZW5lcjogKGl0ZW06IFQpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdlbmQnIHwgJ3BhdXNlJyB8ICdyZWFkYWJsZScgfCAncmVzdW1lJyB8ICdjbG9zZScsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIG9uKGV2ZW50OiAnZXJyb3InLCBsaXN0ZW5lcjogKGVycjogRXJyb3IpID0+IHZvaWQpOiB0aGlzXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgb24oZXZlbnQ6IHN0cmluZyB8IHN5bWJvbCwgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHRoaXNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRJdGVtU3RhdCB7XG4gIHNpemU6IG51bWJlclxuICBldGFnOiBzdHJpbmdcbiAgbGFzdE1vZGlmaWVkOiBEYXRlXG4gIG1ldGFEYXRhOiBJdGVtQnVja2V0TWV0YWRhdGFcbiAgdmVyc2lvbklkPzogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBTdGF0T2JqZWN0T3B0cyA9IHtcbiAgdmVyc2lvbklkPzogc3RyaW5nXG59XG5cbi8qIFJlcGxpY2F0aW9uIENvbmZpZyB0eXBlcyAqL1xuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25SdWxlU3RhdHVzID0ge1xuICBTdGF0dXM6IEVuYWJsZWRPckRpc2FibGVkU3RhdHVzXG59XG5cbmV4cG9ydCB0eXBlIFRhZyA9IHtcbiAgS2V5OiBzdHJpbmdcbiAgVmFsdWU6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBUYWdzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXG5leHBvcnQgdHlwZSBSZXBsaWNhdGlvblJ1bGVEZXN0aW5hdGlvbiA9IHtcbiAgQnVja2V0OiBzdHJpbmdcbiAgU3RvcmFnZUNsYXNzOiBzdHJpbmdcbn1cbmV4cG9ydCB0eXBlIFJlcGxpY2F0aW9uUnVsZUFuZCA9IHtcbiAgUHJlZml4OiBzdHJpbmdcbiAgVGFnczogVGFnW11cbn1cblxuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25SdWxlRmlsdGVyID0ge1xuICBQcmVmaXg6IHN0cmluZ1xuICBBbmQ6IFJlcGxpY2F0aW9uUnVsZUFuZFxuICBUYWc6IFRhZ1xufVxuXG5leHBvcnQgdHlwZSBSZXBsaWNhTW9kaWZpY2F0aW9ucyA9IHtcbiAgU3RhdHVzOiBSZXBsaWNhdGlvblJ1bGVTdGF0dXNcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEgPSB7XG4gIFJlcGxpY2FNb2RpZmljYXRpb25zOiBSZXBsaWNhTW9kaWZpY2F0aW9uc1xufVxuXG5leHBvcnQgdHlwZSBFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uID0ge1xuICBTdGF0dXM6IFJlcGxpY2F0aW9uUnVsZVN0YXR1c1xufVxuXG5leHBvcnQgdHlwZSBSZXBsaWNhdGlvblJ1bGUgPSB7XG4gIElEOiBzdHJpbmdcbiAgU3RhdHVzOiBSZXBsaWNhdGlvblJ1bGVTdGF0dXNcbiAgUHJpb3JpdHk6IG51bWJlclxuICBEZWxldGVNYXJrZXJSZXBsaWNhdGlvbjogUmVwbGljYXRpb25SdWxlU3RhdHVzIC8vIHNob3VsZCBiZSBzZXQgdG8gXCJEaXNhYmxlZFwiIGJ5IGRlZmF1bHRcbiAgRGVsZXRlUmVwbGljYXRpb246IFJlcGxpY2F0aW9uUnVsZVN0YXR1c1xuICBEZXN0aW5hdGlvbjogUmVwbGljYXRpb25SdWxlRGVzdGluYXRpb25cbiAgRmlsdGVyOiBSZXBsaWNhdGlvblJ1bGVGaWx0ZXJcbiAgU291cmNlU2VsZWN0aW9uQ3JpdGVyaWE6IFNvdXJjZVNlbGVjdGlvbkNyaXRlcmlhXG4gIEV4aXN0aW5nT2JqZWN0UmVwbGljYXRpb246IEV4aXN0aW5nT2JqZWN0UmVwbGljYXRpb25cbn1cblxuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25Db25maWdPcHRzID0ge1xuICByb2xlOiBzdHJpbmdcbiAgcnVsZXM6IFJlcGxpY2F0aW9uUnVsZVtdXG59XG5cbmV4cG9ydCB0eXBlIFJlcGxpY2F0aW9uQ29uZmlnID0ge1xuICBSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb246IFJlcGxpY2F0aW9uQ29uZmlnT3B0c1xufVxuLyogUmVwbGljYXRpb24gQ29uZmlnIHR5cGVzICovXG5cbmV4cG9ydCB0eXBlIFJlc3VsdENhbGxiYWNrPFQ+ID0gKGVycm9yOiBFcnJvciB8IG51bGwsIHJlc3VsdDogVCkgPT4gdm9pZFxuXG5leHBvcnQgdHlwZSBHZXRPYmplY3RMZWdhbEhvbGRPcHRpb25zID0ge1xuICB2ZXJzaW9uSWQ6IHN0cmluZ1xufVxuLyoqXG4gKiBAZGVwcmVjYXRlZCBrZWVwIGZvciBiYWNrd2FyZCBjb21wYXRpYmxlLCB1c2UgYExFR0FMX0hPTERfU1RBVFVTYCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCB0eXBlIExlZ2FsSG9sZFN0YXR1cyA9IExFR0FMX0hPTERfU1RBVFVTXG5cbmV4cG9ydCB0eXBlIFB1dE9iamVjdExlZ2FsSG9sZE9wdGlvbnMgPSB7XG4gIHZlcnNpb25JZD86IHN0cmluZ1xuICBzdGF0dXM6IExFR0FMX0hPTERfU1RBVFVTXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkZWRPYmplY3RJbmZvIHtcbiAgZXRhZzogc3RyaW5nXG4gIHZlcnNpb25JZDogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldGVudGlvbk9wdGlvbnMge1xuICB2ZXJzaW9uSWQ6IHN0cmluZ1xuICBtb2RlPzogUkVURU5USU9OX01PREVTXG4gIHJldGFpblVudGlsRGF0ZT86IElzb0RhdGVcbiAgZ292ZXJuYW5jZUJ5cGFzcz86IGJvb2xlYW5cbn1cbmV4cG9ydCB0eXBlIFJldGVudGlvbiA9IFJldGVudGlvbk9wdGlvbnMgfCBFbXB0eU9iamVjdFxuZXhwb3J0IHR5cGUgSXNvRGF0ZSA9IHN0cmluZ1xuZXhwb3J0IHR5cGUgRW1wdHlPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj5cblxuZXhwb3J0IHR5cGUgT2JqZWN0TG9ja0luZm8gPVxuICB8IHtcbiAgICAgIG9iamVjdExvY2tFbmFibGVkOiBFbmFibGVkT3JEaXNhYmxlZFN0YXR1c1xuICAgICAgbW9kZTogUkVURU5USU9OX01PREVTXG4gICAgICB1bml0OiBSRVRFTlRJT05fVkFMSURJVFlfVU5JVFNcbiAgICAgIHZhbGlkaXR5OiBudW1iZXJcbiAgICB9XG4gIHwgRW1wdHlPYmplY3RcblxuZXhwb3J0IHR5cGUgT2JqZWN0TG9ja0NvbmZpZ1BhcmFtID0ge1xuICBPYmplY3RMb2NrRW5hYmxlZD86ICdFbmFibGVkJyB8IHVuZGVmaW5lZFxuICBSdWxlPzpcbiAgICB8IHtcbiAgICAgICAgRGVmYXVsdFJldGVudGlvbjpcbiAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgTW9kZTogUkVURU5USU9OX01PREVTXG4gICAgICAgICAgICAgIERheXM6IG51bWJlclxuICAgICAgICAgICAgICBZZWFyczogbnVtYmVyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfCBFbXB0eU9iamVjdFxuICAgICAgfVxuICAgIHwgRW1wdHlPYmplY3Rcbn1cblxuZXhwb3J0IHR5cGUgVmVyc2lvbmluZ0VuYWJsZWQgPSAnRW5hYmxlZCdcbmV4cG9ydCB0eXBlIFZlcnNpb25pbmdTdXNwZW5kZWQgPSAnU3VzcGVuZGVkJ1xuXG5leHBvcnQgdHlwZSBCdWNrZXRWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiA9IHtcbiAgU3RhdHVzOiBWZXJzaW9uaW5nRW5hYmxlZCB8IFZlcnNpb25pbmdTdXNwZW5kZWRcbiAgLy8gVE9ETyBhZGQgRXhjbHVkZWRQcmVmaXhlcywgRXhjbHVkZUZvbGRlcnMgd2hpY2ggYXJlICBwYXJ0IG9mIE1pbklPJ3MgZXh0ZW5zaW9uLCBhcyBhbiBlbmhhbmNlbWVudC5cbn1cblxuZXhwb3J0IHR5cGUgVGFnZ2luZ09wdHMgPSB7XG4gIHZlcnNpb25JZDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFB1dFRhZ2dpbmdQYXJhbXMgPSB7XG4gIGJ1Y2tldE5hbWU6IHN0cmluZ1xuICBvYmplY3ROYW1lPzogc3RyaW5nXG4gIHRhZ3M6IFRhZ3NcbiAgcHV0T3B0cz86IFRhZ2dpbmdPcHRzXG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZVRhZ2dpbmdQYXJhbXMgPSB7XG4gIGJ1Y2tldE5hbWU6IHN0cmluZ1xuICBvYmplY3ROYW1lPzogc3RyaW5nXG4gIHJlbW92ZU9wdHM/OiBUYWdnaW5nT3B0c1xufVxuXG5leHBvcnQgdHlwZSBJbnB1dFNlcmlhbGl6YXRpb24gPSB7XG4gIENvbXByZXNzaW9uVHlwZT86ICdOT05FJyB8ICdHWklQJyB8ICdCWklQMidcbiAgQ1NWPzoge1xuICAgIEFsbG93UXVvdGVkUmVjb3JkRGVsaW1pdGVyPzogYm9vbGVhblxuICAgIENvbW1lbnRzPzogc3RyaW5nXG4gICAgRmllbGREZWxpbWl0ZXI/OiBzdHJpbmdcbiAgICBGaWxlSGVhZGVySW5mbz86ICdOT05FJyB8ICdJR05PUkUnIHwgJ1VTRSdcbiAgICBRdW90ZUNoYXJhY3Rlcj86IHN0cmluZ1xuICAgIFF1b3RlRXNjYXBlQ2hhcmFjdGVyPzogc3RyaW5nXG4gICAgUmVjb3JkRGVsaW1pdGVyPzogc3RyaW5nXG4gIH1cbiAgSlNPTj86IHtcbiAgICBUeXBlOiAnRE9DVU1FTlQnIHwgJ0xJTkVTJ1xuICB9XG4gIFBhcnF1ZXQ/OiBFbXB0eU9iamVjdFxufVxuXG5leHBvcnQgdHlwZSBPdXRwdXRTZXJpYWxpemF0aW9uID0ge1xuICBDU1Y/OiB7XG4gICAgRmllbGREZWxpbWl0ZXI/OiBzdHJpbmdcbiAgICBRdW90ZUNoYXJhY3Rlcj86IHN0cmluZ1xuICAgIFF1b3RlRXNjYXBlQ2hhcmFjdGVyPzogc3RyaW5nXG4gICAgUXVvdGVGaWVsZHM/OiBzdHJpbmdcbiAgICBSZWNvcmREZWxpbWl0ZXI/OiBzdHJpbmdcbiAgfVxuICBKU09OPzoge1xuICAgIFJlY29yZERlbGltaXRlcj86IHN0cmluZ1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFByb2dyZXNzID0geyBFbmFibGVkOiBib29sZWFuIH1cbmV4cG9ydCB0eXBlIFNjYW5SYW5nZSA9IHsgU3RhcnQ6IG51bWJlcjsgRW5kOiBudW1iZXIgfVxuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9ucyA9IHtcbiAgZXhwcmVzc2lvbjogc3RyaW5nXG4gIGV4cHJlc3Npb25UeXBlPzogc3RyaW5nXG4gIGlucHV0U2VyaWFsaXphdGlvbjogSW5wdXRTZXJpYWxpemF0aW9uXG4gIG91dHB1dFNlcmlhbGl6YXRpb246IE91dHB1dFNlcmlhbGl6YXRpb25cbiAgcmVxdWVzdFByb2dyZXNzPzogU2VsZWN0UHJvZ3Jlc3NcbiAgc2NhblJhbmdlPzogU2NhblJhbmdlXG59XG5leHBvcnQgdHlwZSBFeHBpcmF0aW9uID0ge1xuICBEYXRlOiBzdHJpbmdcbiAgRGF5czogbnVtYmVyXG4gIERlbGV0ZU1hcmtlcjogYm9vbGVhblxuICBEZWxldGVBbGw6IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgUnVsZUZpbHRlckFuZCA9IHtcbiAgUHJlZml4OiBzdHJpbmdcbiAgVGFnczogVGFnW11cbn1cbmV4cG9ydCB0eXBlIFJ1bGVGaWx0ZXIgPSB7XG4gIEFuZD86IFJ1bGVGaWx0ZXJBbmRcbiAgUHJlZml4OiBzdHJpbmdcbiAgVGFnPzogVGFnW11cbn1cblxuZXhwb3J0IHR5cGUgTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uID0ge1xuICBOb25jdXJyZW50RGF5czogbnVtYmVyXG4gIE5ld2VyTm9uY3VycmVudFZlcnNpb25zPzogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIE5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbiA9IHtcbiAgU3RvcmFnZUNsYXNzOiBzdHJpbmdcbiAgTm9uY3VycmVudERheXM/OiBudW1iZXJcbiAgTmV3ZXJOb25jdXJyZW50VmVyc2lvbnM/OiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgVHJhbnNpdGlvbiA9IHtcbiAgRGF0ZT86IHN0cmluZ1xuICBTdG9yYWdlQ2xhc3M6IHN0cmluZ1xuICBEYXlzOiBudW1iZXJcbn1cbmV4cG9ydCB0eXBlIEFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZCA9IHtcbiAgRGF5c0FmdGVySW5pdGlhdGlvbjogbnVtYmVyXG59XG5leHBvcnQgdHlwZSBMaWZlY3ljbGVSdWxlID0ge1xuICBBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQ/OiBBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWRcbiAgSUQ6IHN0cmluZ1xuICBQcmVmaXg/OiBzdHJpbmdcbiAgU3RhdHVzPzogc3RyaW5nXG4gIEV4cGlyYXRpb24/OiBFeHBpcmF0aW9uXG4gIFJ1bGVGaWx0ZXI/OiBSdWxlRmlsdGVyXG4gIE5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbj86IE5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvblxuICBOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb24/OiBOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25cbiAgVHJhbnNpdGlvbj86IFRyYW5zaXRpb25cbn1cblxuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlQ29uZmlnID0ge1xuICBSdWxlOiBMaWZlY3ljbGVSdWxlW11cbn1cblxuZXhwb3J0IHR5cGUgTGlmZUN5Y2xlQ29uZmlnUGFyYW0gPSBMaWZlY3ljbGVDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkIHwgJydcblxuZXhwb3J0IHR5cGUgQXBwbHlTU0VCeURlZmF1bHQgPSB7XG4gIEttc01hc3RlcktleUlEPzogc3RyaW5nXG4gIFNTRUFsZ29yaXRobTogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEVuY3J5cHRpb25SdWxlID0ge1xuICBBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0PzogQXBwbHlTU0VCeURlZmF1bHRcbn1cblxuZXhwb3J0IHR5cGUgRW5jcnlwdGlvbkNvbmZpZyA9IHtcbiAgUnVsZTogRW5jcnlwdGlvblJ1bGVbXVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQVNBO0FBQUEsSUFrQllBLGdCQUFnQiwwQkFBaEJBLGdCQUFnQjtFQUFoQkEsZ0JBQWdCO0VBQWhCQSxnQkFBZ0I7RUFBQSxPQUFoQkEsZ0JBQWdCO0FBQUE7QUFBQUMsT0FBQSxDQUFBRCxnQkFBQSxHQUFBQSxnQkFBQTtBQUFBLElBV2hCRSxlQUFlLDBCQUFmQSxlQUFlO0VBQWZBLGVBQWU7RUFBZkEsZUFBZTtFQUFBLE9BQWZBLGVBQWU7QUFBQTtBQUFBRCxPQUFBLENBQUFDLGVBQUEsR0FBQUEsZUFBQTtBQUFBLElBS2ZDLHdCQUF3QiwwQkFBeEJBLHdCQUF3QjtFQUF4QkEsd0JBQXdCO0VBQXhCQSx3QkFBd0I7RUFBQSxPQUF4QkEsd0JBQXdCO0FBQUE7QUFBQUYsT0FBQSxDQUFBRSx3QkFBQSxHQUFBQSx3QkFBQTtBQUFBLElBS3hCQyxpQkFBaUIsMEJBQWpCQSxpQkFBaUI7RUFBakJBLGlCQUFpQjtFQUFqQkEsaUJBQWlCO0VBQUEsT0FBakJBLGlCQUFpQjtBQUFBO0FBMEY3QjtBQTJEQTtBQU9BO0FBQ0E7QUFDQTtBQUZBSCxPQUFBLENBQUFHLGlCQUFBLEdBQUFBLGlCQUFBIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFTkNSWVBUSU9OX1RZUEVTIiwiZXhwb3J0cyIsIlJFVEVOVElPTl9NT0RFUyIsIlJFVEVOVElPTl9WQUxJRElUWV9VTklUUyIsIkxFR0FMX0hPTERfU1RBVFVTIl0sInNvdXJjZXMiOlsidHlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGh0dHAgZnJvbSAnbm9kZTpodHRwJ1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZSBhcyBSZWFkYWJsZVN0cmVhbSB9IGZyb20gJ25vZGU6c3RyZWFtJ1xuXG5pbXBvcnQgdHlwZSB7IENvcHlEZXN0aW5hdGlvbk9wdGlvbnMsIENvcHlTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vaGVscGVycy50cydcbmltcG9ydCB0eXBlIHsgQ29weUNvbmRpdGlvbnMgfSBmcm9tICcuL2NvcHktY29uZGl0aW9ucy50cydcblxuZXhwb3J0IHR5cGUgVmVyc2lvbklkZW50aWZpY2F0b3IgPSB7XG4gIHZlcnNpb25JZD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBHZXRPYmplY3RPcHRzID0gVmVyc2lvbklkZW50aWZpY2F0b3IgJiB7XG4gIFNTRUN1c3RvbWVyQWxnb3JpdGhtPzogc3RyaW5nXG4gIFNTRUN1c3RvbWVyS2V5Pzogc3RyaW5nXG4gIFNTRUN1c3RvbWVyS2V5TUQ1Pzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEJpbmFyeSA9IHN0cmluZyB8IEJ1ZmZlclxuXG4vLyBub2RlanMgSW5jb21pbmdIdHRwSGVhZGVycyBpcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4sIGJ1dCBpdCdzIGFjdHVhbGx5IHRoaXM6XG5leHBvcnQgdHlwZSBSZXNwb25zZUhlYWRlciA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuZXhwb3J0IHR5cGUgT2JqZWN0TWV0YURhdGEgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RIZWFkZXJzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IHVuZGVmaW5lZD5cblxuZXhwb3J0IHR5cGUgRW5jcnlwdGlvbiA9XG4gIHwge1xuICAgICAgdHlwZTogRU5DUllQVElPTl9UWVBFUy5TU0VDXG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IEVOQ1JZUFRJT05fVFlQRVMuS01TXG4gICAgICBTU0VBbGdvcml0aG0/OiBzdHJpbmdcbiAgICAgIEtNU01hc3RlcktleUlEPzogc3RyaW5nXG4gICAgfVxuXG5leHBvcnQgdHlwZSBFbmFibGVkT3JEaXNhYmxlZFN0YXR1cyA9ICdFbmFibGVkJyB8ICdEaXNhYmxlZCdcbmV4cG9ydCBlbnVtIEVOQ1JZUFRJT05fVFlQRVMge1xuICAvKipcbiAgICogU1NFQyByZXByZXNlbnRzIHNlcnZlci1zaWRlLWVuY3J5cHRpb24gd2l0aCBjdXN0b21lciBwcm92aWRlZCBrZXlzXG4gICAqL1xuICBTU0VDID0gJ1NTRS1DJyxcbiAgLyoqXG4gICAqIEtNUyByZXByZXNlbnRzIHNlcnZlci1zaWRlLWVuY3J5cHRpb24gd2l0aCBtYW5hZ2VkIGtleXNcbiAgICovXG4gIEtNUyA9ICdLTVMnLFxufVxuXG5leHBvcnQgZW51bSBSRVRFTlRJT05fTU9ERVMge1xuICBHT1ZFUk5BTkNFID0gJ0dPVkVSTkFOQ0UnLFxuICBDT01QTElBTkNFID0gJ0NPTVBMSUFOQ0UnLFxufVxuXG5leHBvcnQgZW51bSBSRVRFTlRJT05fVkFMSURJVFlfVU5JVFMge1xuICBEQVlTID0gJ0RheXMnLFxuICBZRUFSUyA9ICdZZWFycycsXG59XG5cbmV4cG9ydCBlbnVtIExFR0FMX0hPTERfU1RBVFVTIHtcbiAgRU5BQkxFRCA9ICdPTicsXG4gIERJU0FCTEVEID0gJ09GRicsXG59XG5cbmV4cG9ydCB0eXBlIFRyYW5zcG9ydCA9IFBpY2s8dHlwZW9mIGh0dHAsICdyZXF1ZXN0Jz5cblxuZXhwb3J0IGludGVyZmFjZSBJUmVxdWVzdCB7XG4gIHByb3RvY29sOiBzdHJpbmdcbiAgcG9ydD86IG51bWJlciB8IHN0cmluZ1xuICBtZXRob2Q6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgaGVhZGVyczogUmVxdWVzdEhlYWRlcnNcbn1cblxuZXhwb3J0IHR5cGUgSUNhbm9uaWNhbFJlcXVlc3QgPSBzdHJpbmdcblxuZXhwb3J0IGludGVyZmFjZSBJbmNvbXBsZXRlVXBsb2FkZWRCdWNrZXRJdGVtIHtcbiAga2V5OiBzdHJpbmdcbiAgdXBsb2FkSWQ6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUl0ZW0ge1xuICBLZXk6IHN0cmluZ1xuICBWYWx1ZTogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlbUJ1Y2tldE1ldGFkYXRhTGlzdCB7XG4gIEl0ZW1zOiBNZXRhZGF0YUl0ZW1bXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1CdWNrZXRNZXRhZGF0YSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIFtrZXk6IHN0cmluZ106IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldEl0ZW1Gcm9tTGlzdCB7XG4gIG5hbWU6IHN0cmluZ1xuICBjcmVhdGlvbkRhdGU6IERhdGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRJdGVtQ29weSB7XG4gIGV0YWc6IHN0cmluZ1xuICBsYXN0TW9kaWZpZWQ6IERhdGVcbn1cblxuZXhwb3J0IHR5cGUgQnVja2V0SXRlbSA9XG4gIHwge1xuICAgICAgbmFtZTogc3RyaW5nXG4gICAgICBzaXplOiBudW1iZXJcbiAgICAgIGV0YWc6IHN0cmluZ1xuICAgICAgcHJlZml4PzogbmV2ZXJcbiAgICAgIGxhc3RNb2RpZmllZDogRGF0ZVxuICAgIH1cbiAgfCB7XG4gICAgICBuYW1lPzogbmV2ZXJcbiAgICAgIGV0YWc/OiBuZXZlclxuICAgICAgbGFzdE1vZGlmaWVkPzogbmV2ZXJcbiAgICAgIHByZWZpeDogc3RyaW5nXG4gICAgICBzaXplOiAwXG4gICAgfVxuXG5leHBvcnQgdHlwZSBCdWNrZXRJdGVtV2l0aE1ldGFkYXRhID0gQnVja2V0SXRlbSAmIHtcbiAgbWV0YWRhdGE/OiBJdGVtQnVja2V0TWV0YWRhdGEgfCBJdGVtQnVja2V0TWV0YWRhdGFMaXN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3RyZWFtPFQ+IGV4dGVuZHMgUmVhZGFibGVTdHJlYW0ge1xuICBvbihldmVudDogJ2RhdGEnLCBsaXN0ZW5lcjogKGl0ZW06IFQpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdlbmQnIHwgJ3BhdXNlJyB8ICdyZWFkYWJsZScgfCAncmVzdW1lJyB8ICdjbG9zZScsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIG9uKGV2ZW50OiAnZXJyb3InLCBsaXN0ZW5lcjogKGVycjogRXJyb3IpID0+IHZvaWQpOiB0aGlzXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgb24oZXZlbnQ6IHN0cmluZyB8IHN5bWJvbCwgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHRoaXNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRJdGVtU3RhdCB7XG4gIHNpemU6IG51bWJlclxuICBldGFnOiBzdHJpbmdcbiAgbGFzdE1vZGlmaWVkOiBEYXRlXG4gIG1ldGFEYXRhOiBJdGVtQnVja2V0TWV0YWRhdGFcbiAgdmVyc2lvbklkPzogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBTdGF0T2JqZWN0T3B0cyA9IHtcbiAgdmVyc2lvbklkPzogc3RyaW5nXG59XG5cbi8qIFJlcGxpY2F0aW9uIENvbmZpZyB0eXBlcyAqL1xuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25SdWxlU3RhdHVzID0ge1xuICBTdGF0dXM6IEVuYWJsZWRPckRpc2FibGVkU3RhdHVzXG59XG5cbmV4cG9ydCB0eXBlIFRhZyA9IHtcbiAgS2V5OiBzdHJpbmdcbiAgVmFsdWU6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBUYWdzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXG5leHBvcnQgdHlwZSBSZXBsaWNhdGlvblJ1bGVEZXN0aW5hdGlvbiA9IHtcbiAgQnVja2V0OiBzdHJpbmdcbiAgU3RvcmFnZUNsYXNzOiBzdHJpbmdcbn1cbmV4cG9ydCB0eXBlIFJlcGxpY2F0aW9uUnVsZUFuZCA9IHtcbiAgUHJlZml4OiBzdHJpbmdcbiAgVGFnczogVGFnW11cbn1cblxuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25SdWxlRmlsdGVyID0ge1xuICBQcmVmaXg6IHN0cmluZ1xuICBBbmQ6IFJlcGxpY2F0aW9uUnVsZUFuZFxuICBUYWc6IFRhZ1xufVxuXG5leHBvcnQgdHlwZSBSZXBsaWNhTW9kaWZpY2F0aW9ucyA9IHtcbiAgU3RhdHVzOiBSZXBsaWNhdGlvblJ1bGVTdGF0dXNcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEgPSB7XG4gIFJlcGxpY2FNb2RpZmljYXRpb25zOiBSZXBsaWNhTW9kaWZpY2F0aW9uc1xufVxuXG5leHBvcnQgdHlwZSBFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uID0ge1xuICBTdGF0dXM6IFJlcGxpY2F0aW9uUnVsZVN0YXR1c1xufVxuXG5leHBvcnQgdHlwZSBSZXBsaWNhdGlvblJ1bGUgPSB7XG4gIElEOiBzdHJpbmdcbiAgU3RhdHVzOiBSZXBsaWNhdGlvblJ1bGVTdGF0dXNcbiAgUHJpb3JpdHk6IG51bWJlclxuICBEZWxldGVNYXJrZXJSZXBsaWNhdGlvbjogUmVwbGljYXRpb25SdWxlU3RhdHVzIC8vIHNob3VsZCBiZSBzZXQgdG8gXCJEaXNhYmxlZFwiIGJ5IGRlZmF1bHRcbiAgRGVsZXRlUmVwbGljYXRpb246IFJlcGxpY2F0aW9uUnVsZVN0YXR1c1xuICBEZXN0aW5hdGlvbjogUmVwbGljYXRpb25SdWxlRGVzdGluYXRpb25cbiAgRmlsdGVyOiBSZXBsaWNhdGlvblJ1bGVGaWx0ZXJcbiAgU291cmNlU2VsZWN0aW9uQ3JpdGVyaWE6IFNvdXJjZVNlbGVjdGlvbkNyaXRlcmlhXG4gIEV4aXN0aW5nT2JqZWN0UmVwbGljYXRpb246IEV4aXN0aW5nT2JqZWN0UmVwbGljYXRpb25cbn1cblxuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25Db25maWdPcHRzID0ge1xuICByb2xlOiBzdHJpbmdcbiAgcnVsZXM6IFJlcGxpY2F0aW9uUnVsZVtdXG59XG5cbmV4cG9ydCB0eXBlIFJlcGxpY2F0aW9uQ29uZmlnID0ge1xuICBSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb246IFJlcGxpY2F0aW9uQ29uZmlnT3B0c1xufVxuLyogUmVwbGljYXRpb24gQ29uZmlnIHR5cGVzICovXG5cbmV4cG9ydCB0eXBlIFJlc3VsdENhbGxiYWNrPFQ+ID0gKGVycm9yOiBFcnJvciB8IG51bGwsIHJlc3VsdDogVCkgPT4gdm9pZFxuXG5leHBvcnQgdHlwZSBHZXRPYmplY3RMZWdhbEhvbGRPcHRpb25zID0ge1xuICB2ZXJzaW9uSWQ6IHN0cmluZ1xufVxuLyoqXG4gKiBAZGVwcmVjYXRlZCBrZWVwIGZvciBiYWNrd2FyZCBjb21wYXRpYmxlLCB1c2UgYExFR0FMX0hPTERfU1RBVFVTYCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCB0eXBlIExlZ2FsSG9sZFN0YXR1cyA9IExFR0FMX0hPTERfU1RBVFVTXG5cbmV4cG9ydCB0eXBlIFB1dE9iamVjdExlZ2FsSG9sZE9wdGlvbnMgPSB7XG4gIHZlcnNpb25JZD86IHN0cmluZ1xuICBzdGF0dXM6IExFR0FMX0hPTERfU1RBVFVTXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkZWRPYmplY3RJbmZvIHtcbiAgZXRhZzogc3RyaW5nXG4gIHZlcnNpb25JZDogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldGVudGlvbk9wdGlvbnMge1xuICB2ZXJzaW9uSWQ6IHN0cmluZ1xuICBtb2RlPzogUkVURU5USU9OX01PREVTXG4gIHJldGFpblVudGlsRGF0ZT86IElzb0RhdGVcbiAgZ292ZXJuYW5jZUJ5cGFzcz86IGJvb2xlYW5cbn1cbmV4cG9ydCB0eXBlIFJldGVudGlvbiA9IFJldGVudGlvbk9wdGlvbnMgfCBFbXB0eU9iamVjdFxuZXhwb3J0IHR5cGUgSXNvRGF0ZSA9IHN0cmluZ1xuZXhwb3J0IHR5cGUgRW1wdHlPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj5cblxuZXhwb3J0IHR5cGUgT2JqZWN0TG9ja0luZm8gPVxuICB8IHtcbiAgICAgIG9iamVjdExvY2tFbmFibGVkOiBFbmFibGVkT3JEaXNhYmxlZFN0YXR1c1xuICAgICAgbW9kZTogUkVURU5USU9OX01PREVTXG4gICAgICB1bml0OiBSRVRFTlRJT05fVkFMSURJVFlfVU5JVFNcbiAgICAgIHZhbGlkaXR5OiBudW1iZXJcbiAgICB9XG4gIHwgRW1wdHlPYmplY3RcblxuZXhwb3J0IHR5cGUgT2JqZWN0TG9ja0NvbmZpZ1BhcmFtID0ge1xuICBPYmplY3RMb2NrRW5hYmxlZD86ICdFbmFibGVkJyB8IHVuZGVmaW5lZFxuICBSdWxlPzpcbiAgICB8IHtcbiAgICAgICAgRGVmYXVsdFJldGVudGlvbjpcbiAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgTW9kZTogUkVURU5USU9OX01PREVTXG4gICAgICAgICAgICAgIERheXM6IG51bWJlclxuICAgICAgICAgICAgICBZZWFyczogbnVtYmVyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfCBFbXB0eU9iamVjdFxuICAgICAgfVxuICAgIHwgRW1wdHlPYmplY3Rcbn1cblxuZXhwb3J0IHR5cGUgVmVyc2lvbmluZ0VuYWJsZWQgPSAnRW5hYmxlZCdcbmV4cG9ydCB0eXBlIFZlcnNpb25pbmdTdXNwZW5kZWQgPSAnU3VzcGVuZGVkJ1xuXG5leHBvcnQgdHlwZSBUYWdnaW5nT3B0cyA9IHtcbiAgdmVyc2lvbklkOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgUHV0VGFnZ2luZ1BhcmFtcyA9IHtcbiAgYnVja2V0TmFtZTogc3RyaW5nXG4gIG9iamVjdE5hbWU/OiBzdHJpbmdcbiAgdGFnczogVGFnc1xuICBwdXRPcHRzPzogVGFnZ2luZ09wdHNcbn1cblxuZXhwb3J0IHR5cGUgUmVtb3ZlVGFnZ2luZ1BhcmFtcyA9IHtcbiAgYnVja2V0TmFtZTogc3RyaW5nXG4gIG9iamVjdE5hbWU/OiBzdHJpbmdcbiAgcmVtb3ZlT3B0cz86IFRhZ2dpbmdPcHRzXG59XG5cbmV4cG9ydCB0eXBlIElucHV0U2VyaWFsaXphdGlvbiA9IHtcbiAgQ29tcHJlc3Npb25UeXBlPzogJ05PTkUnIHwgJ0daSVAnIHwgJ0JaSVAyJ1xuICBDU1Y/OiB7XG4gICAgQWxsb3dRdW90ZWRSZWNvcmREZWxpbWl0ZXI/OiBib29sZWFuXG4gICAgQ29tbWVudHM/OiBzdHJpbmdcbiAgICBGaWVsZERlbGltaXRlcj86IHN0cmluZ1xuICAgIEZpbGVIZWFkZXJJbmZvPzogJ05PTkUnIHwgJ0lHTk9SRScgfCAnVVNFJ1xuICAgIFF1b3RlQ2hhcmFjdGVyPzogc3RyaW5nXG4gICAgUXVvdGVFc2NhcGVDaGFyYWN0ZXI/OiBzdHJpbmdcbiAgICBSZWNvcmREZWxpbWl0ZXI/OiBzdHJpbmdcbiAgfVxuICBKU09OPzoge1xuICAgIFR5cGU6ICdET0NVTUVOVCcgfCAnTElORVMnXG4gIH1cbiAgUGFycXVldD86IEVtcHR5T2JqZWN0XG59XG5cbmV4cG9ydCB0eXBlIE91dHB1dFNlcmlhbGl6YXRpb24gPSB7XG4gIENTVj86IHtcbiAgICBGaWVsZERlbGltaXRlcj86IHN0cmluZ1xuICAgIFF1b3RlQ2hhcmFjdGVyPzogc3RyaW5nXG4gICAgUXVvdGVFc2NhcGVDaGFyYWN0ZXI/OiBzdHJpbmdcbiAgICBRdW90ZUZpZWxkcz86IHN0cmluZ1xuICAgIFJlY29yZERlbGltaXRlcj86IHN0cmluZ1xuICB9XG4gIEpTT04/OiB7XG4gICAgUmVjb3JkRGVsaW1pdGVyPzogc3RyaW5nXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgU2VsZWN0UHJvZ3Jlc3MgPSB7IEVuYWJsZWQ6IGJvb2xlYW4gfVxuZXhwb3J0IHR5cGUgU2NhblJhbmdlID0geyBTdGFydDogbnVtYmVyOyBFbmQ6IG51bWJlciB9XG5leHBvcnQgdHlwZSBTZWxlY3RPcHRpb25zID0ge1xuICBleHByZXNzaW9uOiBzdHJpbmdcbiAgZXhwcmVzc2lvblR5cGU/OiBzdHJpbmdcbiAgaW5wdXRTZXJpYWxpemF0aW9uOiBJbnB1dFNlcmlhbGl6YXRpb25cbiAgb3V0cHV0U2VyaWFsaXphdGlvbjogT3V0cHV0U2VyaWFsaXphdGlvblxuICByZXF1ZXN0UHJvZ3Jlc3M/OiBTZWxlY3RQcm9ncmVzc1xuICBzY2FuUmFuZ2U/OiBTY2FuUmFuZ2Vcbn1cbmV4cG9ydCB0eXBlIEV4cGlyYXRpb24gPSB7XG4gIERhdGU/OiBzdHJpbmdcbiAgRGF5czogbnVtYmVyXG4gIERlbGV0ZU1hcmtlcj86IGJvb2xlYW5cbiAgRGVsZXRlQWxsPzogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBSdWxlRmlsdGVyQW5kID0ge1xuICBQcmVmaXg6IHN0cmluZ1xuICBUYWdzOiBUYWdbXVxufVxuZXhwb3J0IHR5cGUgUnVsZUZpbHRlciA9IHtcbiAgQW5kPzogUnVsZUZpbHRlckFuZFxuICBQcmVmaXg6IHN0cmluZ1xuICBUYWc/OiBUYWdbXVxufVxuXG5leHBvcnQgdHlwZSBOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb24gPSB7XG4gIE5vbmN1cnJlbnREYXlzOiBudW1iZXJcbiAgTmV3ZXJOb25jdXJyZW50VmVyc2lvbnM/OiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uID0ge1xuICBTdG9yYWdlQ2xhc3M6IHN0cmluZ1xuICBOb25jdXJyZW50RGF5cz86IG51bWJlclxuICBOZXdlck5vbmN1cnJlbnRWZXJzaW9ucz86IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBUcmFuc2l0aW9uID0ge1xuICBEYXRlPzogc3RyaW5nXG4gIFN0b3JhZ2VDbGFzczogc3RyaW5nXG4gIERheXM6IG51bWJlclxufVxuZXhwb3J0IHR5cGUgQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkID0ge1xuICBEYXlzQWZ0ZXJJbml0aWF0aW9uOiBudW1iZXJcbn1cbmV4cG9ydCB0eXBlIExpZmVjeWNsZVJ1bGUgPSB7XG4gIEFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZD86IEFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZFxuICBJRDogc3RyaW5nXG4gIFByZWZpeD86IHN0cmluZ1xuICBTdGF0dXM/OiBzdHJpbmdcbiAgRXhwaXJhdGlvbj86IEV4cGlyYXRpb25cbiAgUnVsZUZpbHRlcj86IFJ1bGVGaWx0ZXJcbiAgTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uPzogTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uXG4gIE5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbj86IE5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvblxuICBUcmFuc2l0aW9uPzogVHJhbnNpdGlvblxufVxuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVDb25maWcgPSB7XG4gIFJ1bGU6IExpZmVjeWNsZVJ1bGVbXVxufVxuXG5leHBvcnQgdHlwZSBMaWZlQ3ljbGVDb25maWdQYXJhbSA9IExpZmVjeWNsZUNvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQgfCAnJ1xuXG5leHBvcnQgdHlwZSBBcHBseVNTRUJ5RGVmYXVsdCA9IHtcbiAgS21zTWFzdGVyS2V5SUQ/OiBzdHJpbmdcbiAgU1NFQWxnb3JpdGhtOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgRW5jcnlwdGlvblJ1bGUgPSB7XG4gIEFwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQ/OiBBcHBseVNTRUJ5RGVmYXVsdFxufVxuXG5leHBvcnQgdHlwZSBFbmNyeXB0aW9uQ29uZmlnID0ge1xuICBSdWxlOiBFbmNyeXB0aW9uUnVsZVtdXG59XG5cbmV4cG9ydCB0eXBlIEdldE9iamVjdFJldGVudGlvbk9wdHMgPSB7XG4gIHZlcnNpb25JZDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIE9iamVjdFJldGVudGlvbkluZm8gPSB7XG4gIG1vZGU6IFJFVEVOVElPTl9NT0RFU1xuICByZXRhaW5VbnRpbERhdGU6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBSZW1vdmVPYmplY3RzRW50cnkgPSB7XG4gIG5hbWU6IHN0cmluZ1xuICB2ZXJzaW9uSWQ/OiBzdHJpbmdcbn1cbmV4cG9ydCB0eXBlIE9iamVjdE5hbWUgPSBzdHJpbmdcblxuZXhwb3J0IHR5cGUgUmVtb3ZlT2JqZWN0c1BhcmFtID0gT2JqZWN0TmFtZVtdIHwgUmVtb3ZlT2JqZWN0c0VudHJ5W11cblxuZXhwb3J0IHR5cGUgUmVtb3ZlT2JqZWN0c1JlcXVlc3RFbnRyeSA9IHtcbiAgS2V5OiBzdHJpbmdcbiAgVmVyc2lvbklkPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZU9iamVjdHNSZXNwb25zZSA9XG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuICB8IHtcbiAgICAgIEVycm9yPzoge1xuICAgICAgICBDb2RlPzogc3RyaW5nXG4gICAgICAgIE1lc3NhZ2U/OiBzdHJpbmdcbiAgICAgICAgS2V5Pzogc3RyaW5nXG4gICAgICAgIFZlcnNpb25JZD86IHN0cmluZ1xuICAgICAgfVxuICAgIH1cblxuZXhwb3J0IHR5cGUgQ29weU9iamVjdFJlc3VsdFYxID0ge1xuICBldGFnOiBzdHJpbmdcbiAgbGFzdE1vZGlmaWVkOiBzdHJpbmcgfCBEYXRlXG59XG5leHBvcnQgdHlwZSBDb3B5T2JqZWN0UmVzdWx0VjIgPSB7XG4gIEJ1Y2tldD86IHN0cmluZ1xuICBLZXk/OiBzdHJpbmdcbiAgTGFzdE1vZGlmaWVkOiBzdHJpbmcgfCBEYXRlXG4gIE1ldGFEYXRhPzogUmVzcG9uc2VIZWFkZXJcbiAgVmVyc2lvbklkPzogc3RyaW5nIHwgbnVsbFxuICBTb3VyY2VWZXJzaW9uSWQ/OiBzdHJpbmcgfCBudWxsXG4gIEV0YWc/OiBzdHJpbmdcbiAgU2l6ZT86IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBDb3B5T2JqZWN0UmVzdWx0ID0gQ29weU9iamVjdFJlc3VsdFYxIHwgQ29weU9iamVjdFJlc3VsdFYyXG5leHBvcnQgdHlwZSBDb3B5T2JqZWN0UGFyYW1zID0gW0NvcHlTb3VyY2VPcHRpb25zLCBDb3B5RGVzdGluYXRpb25PcHRpb25zXSB8IFtzdHJpbmcsIHN0cmluZywgc3RyaW5nLCBDb3B5Q29uZGl0aW9ucz9dXG5cbmV4cG9ydCB0eXBlIEV4Y2x1ZGVkUHJlZml4ID0ge1xuICBQcmVmaXg6IHN0cmluZ1xufVxuZXhwb3J0IHR5cGUgQnVja2V0VmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24gPSB7XG4gIFN0YXR1czogVmVyc2lvbmluZ0VuYWJsZWQgfCBWZXJzaW9uaW5nU3VzcGVuZGVkXG4gIC8qIEJlbG93IGFyZSBtaW5pbyBvbmx5IGV4dGVuc2lvbnMgKi9cbiAgTUZBRGVsZXRlPzogc3RyaW5nXG4gIEV4Y2x1ZGVkUHJlZml4ZXM/OiBFeGNsdWRlZFByZWZpeFtdXG4gIEV4Y2x1ZGVGb2xkZXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBVcGxvYWRQYXJ0Q29uZmlnID0ge1xuICBidWNrZXROYW1lOiBzdHJpbmdcbiAgb2JqZWN0TmFtZTogc3RyaW5nXG4gIHVwbG9hZElEOiBzdHJpbmdcbiAgcGFydE51bWJlcjogbnVtYmVyXG4gIGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzXG4gIHNvdXJjZU9iajogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFByZVNpZ25SZXF1ZXN0UGFyYW1zID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQWtCQTtBQUFBLElBa0JZQSxnQkFBZ0IsMEJBQWhCQSxnQkFBZ0I7RUFBaEJBLGdCQUFnQjtFQUFoQkEsZ0JBQWdCO0VBQUEsT0FBaEJBLGdCQUFnQjtBQUFBO0FBQUFDLE9BQUEsQ0FBQUQsZ0JBQUEsR0FBQUEsZ0JBQUE7QUFBQSxJQVdoQkUsZUFBZSwwQkFBZkEsZUFBZTtFQUFmQSxlQUFlO0VBQWZBLGVBQWU7RUFBQSxPQUFmQSxlQUFlO0FBQUE7QUFBQUQsT0FBQSxDQUFBQyxlQUFBLEdBQUFBLGVBQUE7QUFBQSxJQUtmQyx3QkFBd0IsMEJBQXhCQSx3QkFBd0I7RUFBeEJBLHdCQUF3QjtFQUF4QkEsd0JBQXdCO0VBQUEsT0FBeEJBLHdCQUF3QjtBQUFBO0FBQUFGLE9BQUEsQ0FBQUUsd0JBQUEsR0FBQUEsd0JBQUE7QUFBQSxJQUt4QkMsaUJBQWlCLDBCQUFqQkEsaUJBQWlCO0VBQWpCQSxpQkFBaUI7RUFBakJBLGlCQUFpQjtFQUFBLE9BQWpCQSxpQkFBaUI7QUFBQTtBQTBGN0I7QUEyREE7QUFPQTtBQUNBO0FBQ0E7QUFGQUgsT0FBQSxDQUFBRyxpQkFBQSxHQUFBQSxpQkFBQSJ9

@@ -5,3 +5,3 @@ /// <reference types="node" />

import { SelectResults } from "../helpers.js";
import type { BucketItemFromList, BucketItemWithMetadata, ObjectLockInfo, ReplicationConfig } from "./type.js";
import type { BucketItemFromList, BucketItemWithMetadata, CopyObjectResultV1, ObjectLockInfo, ReplicationConfig } from "./type.js";
export declare function parseBucketRegion(xml: string): string;

@@ -88,2 +88,9 @@ export declare function parseError(xml: string, headerInfo: Record<string, unknown>): Record<string, unknown>;

export declare function parseBucketEncryptionConfig(xml: string): any;
export declare function parseObjectRetentionConfig(xml: string): {
mode: any;
retainUntilDate: any;
};
export declare function removeObjectsParser(xml: string): any[];
export declare function parseCopyObject(xml: string): CopyObjectResultV1;
export declare function uploadPartParser(xml: string): any;
export {};
// imported from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/93cfb0ec069731dcdfc31464788613f7cddb8192/types/minio/index.d.ts
/* eslint-disable @typescript-eslint/no-explicit-any */
import type { CopyDestinationOptions, CopySourceOptions, LEGAL_HOLD_STATUS, RETENTION_MODES, RETENTION_VALIDITY_UNITS } from "./helpers.js";
import type { LEGAL_HOLD_STATUS, RETENTION_MODES, RETENTION_VALIDITY_UNITS } from "./helpers.js";
import type { ClientOptions, NoResultCallback, RemoveOptions } from "./internal/client.js";

@@ -9,3 +9,3 @@ import { TypedClient } from "./internal/client.js";

import { PostPolicy } from "./internal/post-policy.js";
import type { BucketItem, BucketItemCopy, BucketItemFromList, BucketItemStat, BucketItemWithMetadata, BucketStream, EmptyObject, ExistingObjectReplication, GetObjectLegalHoldOptions, IncompleteUploadedBucketItem, InputSerialization, IsoDate, ItemBucketMetadata, ItemBucketMetadataList, LegalHoldStatus, LifecycleConfig, LifecycleRule, MetadataItem, ObjectLockInfo, OutputSerialization, PutObjectLegalHoldOptions, ReplicaModifications, ReplicationConfig, ReplicationConfigOpts, ReplicationRule, ReplicationRuleAnd, ReplicationRuleDestination, ReplicationRuleFilter, ReplicationRuleStatus, ResultCallback, Retention, RetentionOptions, ScanRange, SelectOptions, SelectProgress, SourceSelectionCriteria, Tag, VersionIdentificator } from "./internal/type.js";
import type { BucketItem, BucketItemCopy, BucketItemFromList, BucketItemStat, BucketItemWithMetadata, BucketStream, EmptyObject, ExistingObjectReplication, GetObjectLegalHoldOptions, IncompleteUploadedBucketItem, InputSerialization, IsoDate, ItemBucketMetadata, ItemBucketMetadataList, LegalHoldStatus, LifecycleConfig, LifecycleRule, MetadataItem, ObjectLockInfo, OutputSerialization, PutObjectLegalHoldOptions, ReplicaModifications, ReplicationConfig, ReplicationConfigOpts, ReplicationRule, ReplicationRuleAnd, ReplicationRuleDestination, ReplicationRuleFilter, ReplicationRuleStatus, ResultCallback, Retention, RetentionOptions, ScanRange, SelectOptions, SelectProgress, SourceSelectionCriteria, Tag } from "./internal/type.js";
import type { NotificationConfig, NotificationEvent, NotificationPoller } from "./notification.js";

@@ -59,42 +59,3 @@ export * from "./errors.js";

listObjectsV2(bucketName: string, prefix?: string, recursive?: boolean, startAfter?: string): BucketStream<BucketItem>;
copyObject(bucketName: string, objectName: string, sourceObject: string, conditions: CopyConditions, callback: ResultCallback<BucketItemCopy>): void;
copyObject(bucketName: string, objectName: string, sourceObject: string, conditions: CopyConditions): Promise<BucketItemCopy>;
removeObjects(bucketName: string, objectsList: string[], callback: NoResultCallback): void;
removeObjects(bucketName: string, objectsList: string[]): Promise<void>;
removeIncompleteUpload(bucketName: string, objectName: string, callback: NoResultCallback): void;
removeIncompleteUpload(bucketName: string, objectName: string): Promise<void>;
getObjectRetention(bucketName: string, objectName: string, options: VersionIdentificator, callback: ResultCallback<Retention>): void;
getObjectRetention(bucketName: string, objectName: string, options: VersionIdentificator): Promise<Retention>;
composeObject(destObjConfig: CopyDestinationOptions, sourceObjList: CopySourceOptions[], callback: ResultCallback<SourceObjectStats>): void;
composeObject(destObjConfig: CopyDestinationOptions, sourceObjList: CopySourceOptions[]): Promise<SourceObjectStats>;
// Presigned operations
presignedUrl(httpMethod: string, bucketName: string, objectName: string, callback: ResultCallback<string>): void;
presignedUrl(httpMethod: string, bucketName: string, objectName: string, expiry: number, callback: ResultCallback<string>): void;
presignedUrl(httpMethod: string, bucketName: string, objectName: string, expiry: number, reqParams: {
[key: string]: any;
}, callback: ResultCallback<string>): void;
presignedUrl(httpMethod: string, bucketName: string, objectName: string, expiry: number, reqParams: {
[key: string]: any;
}, requestDate: Date, callback: ResultCallback<string>): void;
presignedUrl(httpMethod: string, bucketName: string, objectName: string, expiry?: number, reqParams?: {
[key: string]: any;
}, requestDate?: Date): Promise<string>;
presignedGetObject(bucketName: string, objectName: string, callback: ResultCallback<string>): void;
presignedGetObject(bucketName: string, objectName: string, expiry: number, callback: ResultCallback<string>): void;
presignedGetObject(bucketName: string, objectName: string, expiry: number, respHeaders: {
[key: string]: any;
}, callback: ResultCallback<string>): void;
presignedGetObject(bucketName: string, objectName: string, expiry: number, respHeaders: {
[key: string]: any;
}, requestDate: Date, callback: ResultCallback<string>): void;
presignedGetObject(bucketName: string, objectName: string, expiry?: number, respHeaders?: {
[key: string]: any;
}, requestDate?: Date): Promise<string>;
presignedPutObject(bucketName: string, objectName: string, callback: ResultCallback<string>): void;
presignedPutObject(bucketName: string, objectName: string, expiry: number, callback: ResultCallback<string>): void;
presignedPutObject(bucketName: string, objectName: string, expiry?: number): Promise<string>;
presignedPostPolicy(policy: PostPolicy, callback: ResultCallback<PostPolicyResult>): void;
presignedPostPolicy(policy: PostPolicy): Promise<PostPolicyResult>;
// Bucket Policy & Notification operations

@@ -108,5 +69,2 @@ getBucketNotification(bucketName: string, callback: ResultCallback<NotificationConfig>): void;

listenBucketNotification(bucketName: string, prefix: string, suffix: string, events: NotificationEvent[]): NotificationPoller;
// Other
newPostPolicy(): PostPolicy;
}

@@ -5,2 +5,2 @@ import type { IRequest } from "./internal/type.js";

export declare function signV4ByServiceName(request: IRequest, accessKey: string, secretKey: string, region: string, requestDate: Date, contentSha256: string, serviceName?: string): string;
export declare function presignSignatureV4(request: IRequest, accessKey: string, secretKey: string, sessionToken: string | undefined, region: string, requestDate: Date, expires: number): string;
export declare function presignSignatureV4(request: IRequest, accessKey: string, secretKey: string, sessionToken: string | undefined, region: string, requestDate: Date, expires: number | undefined): string;

@@ -12,2 +12,3 @@ "use strict";

var errors = _interopRequireWildcard(require("./errors.js"), true);
var _helpers = require("./helpers.js");
var _helper = require("./internal/helper.js");

@@ -233,9 +234,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }

}
if (!(0, _helper.isNumber)(expires)) {
if (expires && !(0, _helper.isNumber)(expires)) {
throw new TypeError('expires should be of type "number"');
}
if (expires < 1) {
if (expires && expires < 1) {
throw new errors.ExpiresParamError('expires param cannot be less than 1 seconds');
}
if (expires > 604800) {
if (expires && expires > _helpers.PRESIGN_EXPIRY_DAYS_MAX) {
throw new errors.ExpiresParamError('expires param cannot be greater than 7 days');

@@ -270,2 +271,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJlcnJvcnMiLCJfaGVscGVyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsInNpZ25WNEFsZ29yaXRobSIsImdldENhbm9uaWNhbFJlcXVlc3QiLCJtZXRob2QiLCJwYXRoIiwiaGVhZGVycyIsInNpZ25lZEhlYWRlcnMiLCJoYXNoZWRQYXlsb2FkIiwiaXNTdHJpbmciLCJUeXBlRXJyb3IiLCJpc09iamVjdCIsIkFycmF5IiwiaXNBcnJheSIsImhlYWRlcnNBcnJheSIsInJlZHVjZSIsImFjYyIsImkiLCJ2YWwiLCJyZXBsYWNlIiwicHVzaCIsInRvTG93ZXJDYXNlIiwicmVxdWVzdFJlc291cmNlIiwic3BsaXQiLCJyZXF1ZXN0UXVlcnkiLCJzb3J0IiwibWFwIiwiZWxlbWVudCIsImluY2x1ZGVzIiwiam9pbiIsInRvVXBwZXJDYXNlIiwiZ2V0Q3JlZGVudGlhbCIsImFjY2Vzc0tleSIsInJlZ2lvbiIsInJlcXVlc3REYXRlIiwic2VydmljZU5hbWUiLCJnZXRTY29wZSIsImdldFNpZ25lZEhlYWRlcnMiLCJpZ25vcmVkSGVhZGVycyIsImtleXMiLCJmaWx0ZXIiLCJoZWFkZXIiLCJnZXRTaWduaW5nS2V5IiwiZGF0ZSIsInNlY3JldEtleSIsImRhdGVMaW5lIiwibWFrZURhdGVTaG9ydCIsImhtYWMxIiwiY3JlYXRlSG1hYyIsInVwZGF0ZSIsImRpZ2VzdCIsImhtYWMyIiwiaG1hYzMiLCJnZXRTdHJpbmdUb1NpZ24iLCJjYW5vbmljYWxSZXF1ZXN0IiwiaGFzaCIsImNyZWF0ZUhhc2giLCJzY29wZSIsInN0cmluZ1RvU2lnbiIsIm1ha2VEYXRlTG9uZyIsInBvc3RQcmVzaWduU2lnbmF0dXJlVjQiLCJwb2xpY3lCYXNlNjQiLCJzaWduaW5nS2V5Iiwic2lnblY0IiwicmVxdWVzdCIsInNoYTI1NnN1bSIsIkFjY2Vzc0tleVJlcXVpcmVkRXJyb3IiLCJTZWNyZXRLZXlSZXF1aXJlZEVycm9yIiwic2VydmljZUlkZW50aWZpZXIiLCJjcmVkZW50aWFsIiwic2lnbmF0dXJlIiwic2lnblY0QnlTZXJ2aWNlTmFtZSIsImNvbnRlbnRTaGEyNTYiLCJwcmVzaWduU2lnbmF0dXJlVjQiLCJzZXNzaW9uVG9rZW4iLCJleHBpcmVzIiwiaXNOdW1iZXIiLCJFeHBpcmVzUGFyYW1FcnJvciIsImlzbzg2MDFEYXRlIiwidXJpRXNjYXBlIiwicmVzb3VyY2UiLCJxdWVyeSIsInByb3RvY29sIiwiaG9zdCJdLCJzb3VyY2VzIjpbInNpZ25pbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIE1pbklPIEphdmFzY3JpcHQgTGlicmFyeSBmb3IgQW1hem9uIFMzIENvbXBhdGlibGUgQ2xvdWQgU3RvcmFnZSwgKEMpIDIwMTYgTWluSU8sIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ25vZGU6Y3J5cHRvJ1xuXG5pbXBvcnQgKiBhcyBlcnJvcnMgZnJvbSAnLi9lcnJvcnMudHMnXG5pbXBvcnQgeyBnZXRTY29wZSwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZywgbWFrZURhdGVMb25nLCBtYWtlRGF0ZVNob3J0LCB1cmlFc2NhcGUgfSBmcm9tICcuL2ludGVybmFsL2hlbHBlci50cydcbmltcG9ydCB0eXBlIHsgSUNhbm9uaWNhbFJlcXVlc3QsIElSZXF1ZXN0LCBSZXF1ZXN0SGVhZGVycyB9IGZyb20gJy4vaW50ZXJuYWwvdHlwZS50cydcblxuY29uc3Qgc2lnblY0QWxnb3JpdGhtID0gJ0FXUzQtSE1BQy1TSEEyNTYnXG5cbi8vIGdldENhbm9uaWNhbFJlcXVlc3QgZ2VuZXJhdGUgYSBjYW5vbmljYWwgcmVxdWVzdCBvZiBzdHlsZS5cbi8vXG4vLyBjYW5vbmljYWxSZXF1ZXN0ID1cbi8vICA8SFRUUE1ldGhvZD5cXG5cbi8vICA8Q2Fub25pY2FsVVJJPlxcblxuLy8gIDxDYW5vbmljYWxRdWVyeVN0cmluZz5cXG5cbi8vICA8Q2Fub25pY2FsSGVhZGVycz5cXG5cbi8vICA8U2lnbmVkSGVhZGVycz5cXG5cbi8vICA8SGFzaGVkUGF5bG9hZD5cbi8vXG5mdW5jdGlvbiBnZXRDYW5vbmljYWxSZXF1ZXN0KFxuICBtZXRob2Q6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycyxcbiAgc2lnbmVkSGVhZGVyczogc3RyaW5nW10sXG4gIGhhc2hlZFBheWxvYWQ6IHN0cmluZyxcbik6IElDYW5vbmljYWxSZXF1ZXN0IHtcbiAgaWYgKCFpc1N0cmluZyhtZXRob2QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWV0aG9kIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcocGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXRoIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNPYmplY3QoaGVhZGVycykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdoZWFkZXJzIHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheShzaWduZWRIZWFkZXJzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpZ25lZEhlYWRlcnMgc2hvdWxkIGJlIG9mIHR5cGUgXCJhcnJheVwiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKGhhc2hlZFBheWxvYWQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaGFzaGVkUGF5bG9hZCBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnNBcnJheSA9IHNpZ25lZEhlYWRlcnMucmVkdWNlKChhY2MsIGkpID0+IHtcbiAgICAvLyBUcmltIHNwYWNlcyBmcm9tIHRoZSB2YWx1ZSAocmVxdWlyZWQgYnkgVjQgc3BlYylcbiAgICBjb25zdCB2YWwgPSBgJHtoZWFkZXJzW2ldfWAucmVwbGFjZSgvICsvZywgJyAnKVxuICAgIGFjYy5wdXNoKGAke2kudG9Mb3dlckNhc2UoKX06JHt2YWx9YClcbiAgICByZXR1cm4gYWNjXG4gIH0sIFtdIGFzIHN0cmluZ1tdKVxuXG4gIGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHBhdGguc3BsaXQoJz8nKVswXVxuICBsZXQgcmVxdWVzdFF1ZXJ5ID0gcGF0aC5zcGxpdCgnPycpWzFdXG4gIGlmICghcmVxdWVzdFF1ZXJ5KSB7XG4gICAgcmVxdWVzdFF1ZXJ5ID0gJydcbiAgfVxuXG4gIGlmIChyZXF1ZXN0UXVlcnkpIHtcbiAgICByZXF1ZXN0UXVlcnkgPSByZXF1ZXN0UXVlcnlcbiAgICAgIC5zcGxpdCgnJicpXG4gICAgICAuc29ydCgpXG4gICAgICAubWFwKChlbGVtZW50KSA9PiAoIWVsZW1lbnQuaW5jbHVkZXMoJz0nKSA/IGVsZW1lbnQgKyAnPScgOiBlbGVtZW50KSlcbiAgICAgIC5qb2luKCcmJylcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgcmVxdWVzdFJlc291cmNlLFxuICAgIHJlcXVlc3RRdWVyeSxcbiAgICBoZWFkZXJzQXJyYXkuam9pbignXFxuJykgKyAnXFxuJyxcbiAgICBzaWduZWRIZWFkZXJzLmpvaW4oJzsnKS50b0xvd2VyQ2FzZSgpLFxuICAgIGhhc2hlZFBheWxvYWQsXG4gIF0uam9pbignXFxuJylcbn1cblxuLy8gZ2VuZXJhdGUgYSBjcmVkZW50aWFsIHN0cmluZ1xuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbChhY2Nlc3NLZXk6IHN0cmluZywgcmVnaW9uOiBzdHJpbmcsIHJlcXVlc3REYXRlPzogRGF0ZSwgc2VydmljZU5hbWUgPSAnczMnKSB7XG4gIGlmICghaXNTdHJpbmcoYWNjZXNzS2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FjY2Vzc0tleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHJlZ2lvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWdpb24gc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cbiAgaWYgKCFpc09iamVjdChyZXF1ZXN0RGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZXF1ZXN0RGF0ZSBzaG91bGQgYmUgb2YgdHlwZSBcIm9iamVjdFwiJylcbiAgfVxuICByZXR1cm4gYCR7YWNjZXNzS2V5fS8ke2dldFNjb3BlKHJlZ2lvbiwgcmVxdWVzdERhdGUsIHNlcnZpY2VOYW1lKX1gXG59XG5cbi8vIFJldHVybnMgc2lnbmVkIGhlYWRlcnMgYXJyYXkgLSBhbHBoYWJldGljYWxseSBzb3J0ZWRcbmZ1bmN0aW9uIGdldFNpZ25lZEhlYWRlcnMoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMpOiBzdHJpbmdbXSB7XG4gIGlmICghaXNPYmplY3QoaGVhZGVycykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZXF1ZXN0IHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIC8vIEV4Y2VycHRzIGZyb20gQGxzZWdhbCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy9pc3N1ZXMvNjU5I2lzc3VlY29tbWVudC0xMjA0NzcyNThcbiAgLy9cbiAgLy8gIFVzZXItQWdlbnQ6XG4gIC8vXG4gIC8vICAgICAgVGhpcyBpcyBpZ25vcmVkIGZyb20gc2lnbmluZyBiZWNhdXNlIHNpZ25pbmcgdGhpcyBjYXVzZXMgcHJvYmxlbXMgd2l0aCBnZW5lcmF0aW5nIHByZS1zaWduZWQgVVJMc1xuICAvLyAgICAgICh0aGF0IGFyZSBleGVjdXRlZCBieSBvdGhlciBhZ2VudHMpIG9yIHdoZW4gY3VzdG9tZXJzIHBhc3MgcmVxdWVzdHMgdGhyb3VnaCBwcm94aWVzLCB3aGljaCBtYXlcbiAgLy8gICAgICBtb2RpZnkgdGhlIHVzZXItYWdlbnQuXG4gIC8vXG4gIC8vICBDb250ZW50LUxlbmd0aDpcbiAgLy9cbiAgLy8gICAgICBUaGlzIGlzIGlnbm9yZWQgZnJvbSBzaWduaW5nIGJlY2F1c2UgZ2VuZXJhdGluZyBhIHByZS1zaWduZWQgVVJMIHNob3VsZCBub3QgcHJvdmlkZSBhIGNvbnRlbnQtbGVuZ3RoXG4gIC8vICAgICAgY29uc3RyYWludCwgc3BlY2lmaWNhbGx5IHdoZW4gdmVuZGluZyBhIFMzIHByZS1zaWduZWQgUFVUIFVSTC4gVGhlIGNvcm9sbGFyeSB0byB0aGlzIGlzIHRoYXQgd2hlblxuICAvLyAgICAgIHNlbmRpbmcgcmVndWxhciByZXF1ZXN0cyAobm9uLXByZS1zaWduZWQpLCB0aGUgc2lnbmF0dXJlIGNvbnRhaW5zIGEgY2hlY2tzdW0gb2YgdGhlIGJvZHksIHdoaWNoXG4gIC8vICAgICAgaW1wbGljaXRseSB2YWxpZGF0ZXMgdGhlIHBheWxvYWQgbGVuZ3RoIChzaW5jZSBjaGFuZ2luZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdvdWxkIGNoYW5nZSB0aGUgY2hlY2tzdW0pXG4gIC8vICAgICAgYW5kIHRoZXJlZm9yZSB0aGlzIGhlYWRlciBpcyBub3QgdmFsdWFibGUgaW4gdGhlIHNpZ25hdHVyZS5cbiAgLy9cbiAgLy8gIENvbnRlbnQtVHlwZTpcbiAgLy9cbiAgLy8gICAgICBTaWduaW5nIHRoaXMgaGVhZGVyIGNhdXNlcyBxdWl0ZSBhIG51bWJlciBvZiBwcm9ibGVtcyBpbiBicm93c2VyIGVudmlyb25tZW50cywgd2hlcmUgYnJvd3NlcnNcbiAgLy8gICAgICBsaWtlIHRvIG1vZGlmeSBhbmQgbm9ybWFsaXplIHRoZSBjb250ZW50LXR5cGUgaGVhZGVyIGluIGRpZmZlcmVudCB3YXlzLiBUaGVyZSBpcyBtb3JlIGluZm9ybWF0aW9uXG4gIC8vICAgICAgb24gdGhpcyBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMvaXNzdWVzLzI0NC4gQXZvaWRpbmcgdGhpcyBmaWVsZCBzaW1wbGlmaWVzIGxvZ2ljXG4gIC8vICAgICAgYW5kIHJlZHVjZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGZ1dHVyZSBidWdzXG4gIC8vXG4gIC8vICBBdXRob3JpemF0aW9uOlxuICAvL1xuICAvLyAgICAgIElzIHNraXBwZWQgZm9yIG9idmlvdXMgcmVhc29uc1xuXG4gIGNvbnN0IGlnbm9yZWRIZWFkZXJzID0gWydhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICd1c2VyLWFnZW50J11cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgLmZpbHRlcigoaGVhZGVyKSA9PiAhaWdub3JlZEhlYWRlcnMuaW5jbHVkZXMoaGVhZGVyKSlcbiAgICAuc29ydCgpXG59XG5cbi8vIHJldHVybnMgdGhlIGtleSB1c2VkIGZvciBjYWxjdWxhdGluZyBzaWduYXR1cmVcbmZ1bmN0aW9uIGdldFNpZ25pbmdLZXkoZGF0ZTogRGF0ZSwgcmVnaW9uOiBzdHJpbmcsIHNlY3JldEtleTogc3RyaW5nLCBzZXJ2aWNlTmFtZSA9ICdzMycpIHtcbiAgaWYgKCFpc09iamVjdChkYXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGUgc2hvdWxkIGJlIG9mIHR5cGUgXCJvYmplY3RcIicpXG4gIH1cbiAgaWYgKCFpc1N0cmluZyhyZWdpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVnaW9uIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBjb25zdCBkYXRlTGluZSA9IG1ha2VEYXRlU2hvcnQoZGF0ZSlcbiAgY29uc3QgaG1hYzEgPSBjcnlwdG9cbiAgICAgIC5jcmVhdGVIbWFjKCdzaGEyNTYnLCAnQVdTNCcgKyBzZWNyZXRLZXkpXG4gICAgICAudXBkYXRlKGRhdGVMaW5lKVxuICAgICAgLmRpZ2VzdCgpLFxuICAgIGhtYWMyID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTI1NicsIGhtYWMxKS51cGRhdGUocmVnaW9uKS5kaWdlc3QoKSxcbiAgICBobWFjMyA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGEyNTYnLCBobWFjMikudXBkYXRlKHNlcnZpY2VOYW1lKS5kaWdlc3QoKVxuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTI1NicsIGhtYWMzKS51cGRhdGUoJ2F3czRfcmVxdWVzdCcpLmRpZ2VzdCgpXG59XG5cbi8vIHJldHVybnMgdGhlIHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIHNpZ25lZFxuZnVuY3Rpb24gZ2V0U3RyaW5nVG9TaWduKGNhbm9uaWNhbFJlcXVlc3Q6IElDYW5vbmljYWxSZXF1ZXN0LCByZXF1ZXN0RGF0ZTogRGF0ZSwgcmVnaW9uOiBzdHJpbmcsIHNlcnZpY2VOYW1lID0gJ3MzJykge1xuICBpZiAoIWlzU3RyaW5nKGNhbm9uaWNhbFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2Fub25pY2FsUmVxdWVzdCBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHJlcXVlc3REYXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcXVlc3REYXRlIHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcocmVnaW9uKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlZ2lvbiBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShjYW5vbmljYWxSZXF1ZXN0KS5kaWdlc3QoJ2hleCcpXG4gIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUocmVnaW9uLCByZXF1ZXN0RGF0ZSwgc2VydmljZU5hbWUpXG4gIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtzaWduVjRBbGdvcml0aG0sIG1ha2VEYXRlTG9uZyhyZXF1ZXN0RGF0ZSksIHNjb3BlLCBoYXNoXVxuXG4gIHJldHVybiBzdHJpbmdUb1NpZ24uam9pbignXFxuJylcbn1cblxuLy8gY2FsY3VsYXRlIHRoZSBzaWduYXR1cmUgb2YgdGhlIFBPU1QgcG9saWN5XG5leHBvcnQgZnVuY3Rpb24gcG9zdFByZXNpZ25TaWduYXR1cmVWNChyZWdpb246IHN0cmluZywgZGF0ZTogRGF0ZSwgc2VjcmV0S2V5OiBzdHJpbmcsIHBvbGljeUJhc2U2NDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpc1N0cmluZyhyZWdpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVnaW9uIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNPYmplY3QoZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRlIHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHBvbGljeUJhc2U2NCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwb2xpY3lCYXNlNjQgc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cbiAgY29uc3Qgc2lnbmluZ0tleSA9IGdldFNpZ25pbmdLZXkoZGF0ZSwgcmVnaW9uLCBzZWNyZXRLZXkpXG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMjU2Jywgc2lnbmluZ0tleSkudXBkYXRlKHBvbGljeUJhc2U2NCkuZGlnZXN0KCdoZXgnKS50b0xvd2VyQ2FzZSgpXG59XG5cbi8vIFJldHVybnMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyXG5leHBvcnQgZnVuY3Rpb24gc2lnblY0KFxuICByZXF1ZXN0OiBJUmVxdWVzdCxcbiAgYWNjZXNzS2V5OiBzdHJpbmcsXG4gIHNlY3JldEtleTogc3RyaW5nLFxuICByZWdpb246IHN0cmluZyxcbiAgcmVxdWVzdERhdGU6IERhdGUsXG4gIHNoYTI1NnN1bTogc3RyaW5nLFxuICBzZXJ2aWNlTmFtZSA9ICdzMycsXG4pIHtcbiAgaWYgKCFpc09iamVjdChyZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcXVlc3Qgc2hvdWxkIGJlIG9mIHR5cGUgXCJvYmplY3RcIicpXG4gIH1cbiAgaWYgKCFpc1N0cmluZyhhY2Nlc3NLZXkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYWNjZXNzS2V5IHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHJlZ2lvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWdpb24gc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cblxuICBpZiAoIWFjY2Vzc0tleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuQWNjZXNzS2V5UmVxdWlyZWRFcnJvcignYWNjZXNzS2V5IGlzIHJlcXVpcmVkIGZvciBzaWduaW5nJylcbiAgfVxuICBpZiAoIXNlY3JldEtleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU2VjcmV0S2V5UmVxdWlyZWRFcnJvcignc2VjcmV0S2V5IGlzIHJlcXVpcmVkIGZvciBzaWduaW5nJylcbiAgfVxuXG4gIGNvbnN0IHNpZ25lZEhlYWRlcnMgPSBnZXRTaWduZWRIZWFkZXJzKHJlcXVlc3QuaGVhZGVycylcbiAgY29uc3QgY2Fub25pY2FsUmVxdWVzdCA9IGdldENhbm9uaWNhbFJlcXVlc3QocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QucGF0aCwgcmVxdWVzdC5oZWFkZXJzLCBzaWduZWRIZWFkZXJzLCBzaGEyNTZzdW0pXG4gIGNvbnN0IHNlcnZpY2VJZGVudGlmaWVyID0gc2VydmljZU5hbWUgfHwgJ3MzJ1xuICBjb25zdCBzdHJpbmdUb1NpZ24gPSBnZXRTdHJpbmdUb1NpZ24oY2Fub25pY2FsUmVxdWVzdCwgcmVxdWVzdERhdGUsIHJlZ2lvbiwgc2VydmljZUlkZW50aWZpZXIpXG4gIGNvbnN0IHNpZ25pbmdLZXkgPSBnZXRTaWduaW5nS2V5KHJlcXVlc3REYXRlLCByZWdpb24sIHNlY3JldEtleSwgc2VydmljZUlkZW50aWZpZXIpXG4gIGNvbnN0IGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKGFjY2Vzc0tleSwgcmVnaW9uLCByZXF1ZXN0RGF0ZSwgc2VydmljZUlkZW50aWZpZXIpXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGEyNTYnLCBzaWduaW5nS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoJ2hleCcpLnRvTG93ZXJDYXNlKClcblxuICByZXR1cm4gYCR7c2lnblY0QWxnb3JpdGhtfSBDcmVkZW50aWFsPSR7Y3JlZGVudGlhbH0sIFNpZ25lZEhlYWRlcnM9JHtzaWduZWRIZWFkZXJzXG4gICAgLmpvaW4oJzsnKVxuICAgIC50b0xvd2VyQ2FzZSgpfSwgU2lnbmF0dXJlPSR7c2lnbmF0dXJlfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25WNEJ5U2VydmljZU5hbWUoXG4gIHJlcXVlc3Q6IElSZXF1ZXN0LFxuICBhY2Nlc3NLZXk6IHN0cmluZyxcbiAgc2VjcmV0S2V5OiBzdHJpbmcsXG4gIHJlZ2lvbjogc3RyaW5nLFxuICByZXF1ZXN0RGF0ZTogRGF0ZSxcbiAgY29udGVudFNoYTI1Njogc3RyaW5nLFxuICBzZXJ2aWNlTmFtZSA9ICdzMycsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gc2lnblY0KHJlcXVlc3QsIGFjY2Vzc0tleSwgc2VjcmV0S2V5LCByZWdpb24sIHJlcXVlc3REYXRlLCBjb250ZW50U2hhMjU2LCBzZXJ2aWNlTmFtZSlcbn1cblxuLy8gcmV0dXJucyBhIHByZXNpZ25lZCBVUkwgc3RyaW5nXG5leHBvcnQgZnVuY3Rpb24gcHJlc2lnblNpZ25hdHVyZVY0KFxuICByZXF1ZXN0OiBJUmVxdWVzdCxcbiAgYWNjZXNzS2V5OiBzdHJpbmcsXG4gIHNlY3JldEtleTogc3RyaW5nLFxuICBzZXNzaW9uVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcmVnaW9uOiBzdHJpbmcsXG4gIHJlcXVlc3REYXRlOiBEYXRlLFxuICBleHBpcmVzOiBudW1iZXIsXG4pIHtcbiAgaWYgKCFpc09iamVjdChyZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcXVlc3Qgc2hvdWxkIGJlIG9mIHR5cGUgXCJvYmplY3RcIicpXG4gIH1cbiAgaWYgKCFpc1N0cmluZyhhY2Nlc3NLZXkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYWNjZXNzS2V5IHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHJlZ2lvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWdpb24gc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cblxuICBpZiAoIWFjY2Vzc0tleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuQWNjZXNzS2V5UmVxdWlyZWRFcnJvcignYWNjZXNzS2V5IGlzIHJlcXVpcmVkIGZvciBwcmVzaWduaW5nJylcbiAgfVxuICBpZiAoIXNlY3JldEtleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU2VjcmV0S2V5UmVxdWlyZWRFcnJvcignc2VjcmV0S2V5IGlzIHJlcXVpcmVkIGZvciBwcmVzaWduaW5nJylcbiAgfVxuXG4gIGlmICghaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBpcmVzIHNob3VsZCBiZSBvZiB0eXBlIFwibnVtYmVyXCInKVxuICB9XG4gIGlmIChleHBpcmVzIDwgMSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuRXhwaXJlc1BhcmFtRXJyb3IoJ2V4cGlyZXMgcGFyYW0gY2Fubm90IGJlIGxlc3MgdGhhbiAxIHNlY29uZHMnKVxuICB9XG4gIGlmIChleHBpcmVzID4gNjA0ODAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FeHBpcmVzUGFyYW1FcnJvcignZXhwaXJlcyBwYXJhbSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDcgZGF5cycpXG4gIH1cblxuICBjb25zdCBpc284NjAxRGF0ZSA9IG1ha2VEYXRlTG9uZyhyZXF1ZXN0RGF0ZSlcbiAgY29uc3Qgc2lnbmVkSGVhZGVycyA9IGdldFNpZ25lZEhlYWRlcnMocmVxdWVzdC5oZWFkZXJzKVxuICBjb25zdCBjcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbChhY2Nlc3NLZXksIHJlZ2lvbiwgcmVxdWVzdERhdGUpXG4gIGNvbnN0IGhhc2hlZFBheWxvYWQgPSAnVU5TSUdORUQtUEFZTE9BRCdcblxuICBjb25zdCByZXF1ZXN0UXVlcnk6IHN0cmluZ1tdID0gW11cbiAgcmVxdWVzdFF1ZXJ5LnB1c2goYFgtQW16LUFsZ29yaXRobT0ke3NpZ25WNEFsZ29yaXRobX1gKVxuICByZXF1ZXN0UXVlcnkucHVzaChgWC1BbXotQ3JlZGVudGlhbD0ke3VyaUVzY2FwZShjcmVkZW50aWFsKX1gKVxuICByZXF1ZXN0UXVlcnkucHVzaChgWC1BbXotRGF0ZT0ke2lzbzg2MDFEYXRlfWApXG4gIHJlcXVlc3RRdWVyeS5wdXNoKGBYLUFtei1FeHBpcmVzPSR7ZXhwaXJlc31gKVxuICByZXF1ZXN0UXVlcnkucHVzaChgWC1BbXotU2lnbmVkSGVhZGVycz0ke3VyaUVzY2FwZShzaWduZWRIZWFkZXJzLmpvaW4oJzsnKS50b0xvd2VyQ2FzZSgpKX1gKVxuICBpZiAoc2Vzc2lvblRva2VuKSB7XG4gICAgcmVxdWVzdFF1ZXJ5LnB1c2goYFgtQW16LVNlY3VyaXR5LVRva2VuPSR7dXJpRXNjYXBlKHNlc3Npb25Ub2tlbil9YClcbiAgfVxuXG4gIGNvbnN0IHJlc291cmNlID0gcmVxdWVzdC5wYXRoLnNwbGl0KCc/JylbMF1cbiAgbGV0IHF1ZXJ5ID0gcmVxdWVzdC5wYXRoLnNwbGl0KCc/JylbMV1cbiAgaWYgKHF1ZXJ5KSB7XG4gICAgcXVlcnkgPSBxdWVyeSArICcmJyArIHJlcXVlc3RRdWVyeS5qb2luKCcmJylcbiAgfSBlbHNlIHtcbiAgICBxdWVyeSA9IHJlcXVlc3RRdWVyeS5qb2luKCcmJylcbiAgfVxuXG4gIGNvbnN0IHBhdGggPSByZXNvdXJjZSArICc/JyArIHF1ZXJ5XG5cbiAgY29uc3QgY2Fub25pY2FsUmVxdWVzdCA9IGdldENhbm9uaWNhbFJlcXVlc3QocmVxdWVzdC5tZXRob2QsIHBhdGgsIHJlcXVlc3QuaGVhZGVycywgc2lnbmVkSGVhZGVycywgaGFzaGVkUGF5bG9hZClcblxuICBjb25zdCBzdHJpbmdUb1NpZ24gPSBnZXRTdHJpbmdUb1NpZ24oY2Fub25pY2FsUmVxdWVzdCwgcmVxdWVzdERhdGUsIHJlZ2lvbilcbiAgY29uc3Qgc2lnbmluZ0tleSA9IGdldFNpZ25pbmdLZXkocmVxdWVzdERhdGUsIHJlZ2lvbiwgc2VjcmV0S2V5KVxuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMjU2Jywgc2lnbmluZ0tleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KCdoZXgnKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiByZXF1ZXN0LnByb3RvY29sICsgJy8vJyArIHJlcXVlc3QuaGVhZGVycy5ob3N0ICsgcGF0aCArIGAmWC1BbXotU2lnbmF0dXJlPSR7c2lnbmF0dXJlfWBcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBZ0JBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLE1BQUEsR0FBQUYsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUFxSCxTQUFBRyx5QkFB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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJlcnJvcnMiLCJfaGVscGVycyIsIl9oZWxwZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0Iiwic2lnblY0QWxnb3JpdGhtIiwiZ2V0Q2Fub25pY2FsUmVxdWVzdCIsIm1ldGhvZCIsInBhdGgiLCJoZWFkZXJzIiwic2lnbmVkSGVhZGVycyIsImhhc2hlZFBheWxvYWQiLCJpc1N0cmluZyIsIlR5cGVFcnJvciIsImlzT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiaGVhZGVyc0FycmF5IiwicmVkdWNlIiwiYWNjIiwiaSIsInZhbCIsInJlcGxhY2UiLCJwdXNoIiwidG9Mb3dlckNhc2UiLCJyZXF1ZXN0UmVzb3VyY2UiLCJzcGxpdCIsInJlcXVlc3RRdWVyeSIsInNvcnQiLCJtYXAiLCJlbGVtZW50IiwiaW5jbHVkZXMiLCJqb2luIiwidG9VcHBlckNhc2UiLCJnZXRDcmVkZW50aWFsIiwiYWNjZXNzS2V5IiwicmVnaW9uIiwicmVxdWVzdERhdGUiLCJzZXJ2aWNlTmFtZSIsImdldFNjb3BlIiwiZ2V0U2lnbmVkSGVhZGVycyIsImlnbm9yZWRIZWFkZXJzIiwia2V5cyIsImZpbHRlciIsImhlYWRlciIsImdldFNpZ25pbmdLZXkiLCJkYXRlIiwic2VjcmV0S2V5IiwiZGF0ZUxpbmUiLCJtYWtlRGF0ZVNob3J0IiwiaG1hYzEiLCJjcmVhdGVIbWFjIiwidXBkYXRlIiwiZGlnZXN0IiwiaG1hYzIiLCJobWFjMyIsImdldFN0cmluZ1RvU2lnbiIsImNhbm9uaWNhbFJlcXVlc3QiLCJoYXNoIiwiY3JlYXRlSGFzaCIsInNjb3BlIiwic3RyaW5nVG9TaWduIiwibWFrZURhdGVMb25nIiwicG9zdFByZXNpZ25TaWduYXR1cmVWNCIsInBvbGljeUJhc2U2NCIsInNpZ25pbmdLZXkiLCJzaWduVjQiLCJyZXF1ZXN0Iiwic2hhMjU2c3VtIiwiQWNjZXNzS2V5UmVxdWlyZWRFcnJvciIsIlNlY3JldEtleVJlcXVpcmVkRXJyb3IiLCJzZXJ2aWNlSWRlbnRpZmllciIsImNyZWRlbnRpYWwiLCJzaWduYXR1cmUiLCJzaWduVjRCeVNlcnZpY2VOYW1lIiwiY29udGVudFNoYTI1NiIsInByZXNpZ25TaWduYXR1cmVWNCIsInNlc3Npb25Ub2tlbiIsImV4cGlyZXMiLCJpc051bWJlciIsIkV4cGlyZXNQYXJhbUVycm9yIiwiUFJFU0lHTl9FWFBJUllfREFZU19NQVgiLCJpc284NjAxRGF0ZSIsInVyaUVzY2FwZSIsInJlc291cmNlIiwicXVlcnkiLCJwcm90b2NvbCIsImhvc3QiXSwic291cmNlcyI6WyJzaWduaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBNaW5JTyBKYXZhc2NyaXB0IExpYnJhcnkgZm9yIEFtYXpvbiBTMyBDb21wYXRpYmxlIENsb3VkIFN0b3JhZ2UsIChDKSAyMDE2IE1pbklPLCBJbmMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdub2RlOmNyeXB0bydcblxuaW1wb3J0ICogYXMgZXJyb3JzIGZyb20gJy4vZXJyb3JzLnRzJ1xuaW1wb3J0IHsgUFJFU0lHTl9FWFBJUllfREFZU19NQVggfSBmcm9tICcuL2hlbHBlcnMudHMnXG5pbXBvcnQgeyBnZXRTY29wZSwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZywgbWFrZURhdGVMb25nLCBtYWtlRGF0ZVNob3J0LCB1cmlFc2NhcGUgfSBmcm9tICcuL2ludGVybmFsL2hlbHBlci50cydcbmltcG9ydCB0eXBlIHsgSUNhbm9uaWNhbFJlcXVlc3QsIElSZXF1ZXN0LCBSZXF1ZXN0SGVhZGVycyB9IGZyb20gJy4vaW50ZXJuYWwvdHlwZS50cydcblxuY29uc3Qgc2lnblY0QWxnb3JpdGhtID0gJ0FXUzQtSE1BQy1TSEEyNTYnXG5cbi8vIGdldENhbm9uaWNhbFJlcXVlc3QgZ2VuZXJhdGUgYSBjYW5vbmljYWwgcmVxdWVzdCBvZiBzdHlsZS5cbi8vXG4vLyBjYW5vbmljYWxSZXF1ZXN0ID1cbi8vICA8SFRUUE1ldGhvZD5cXG5cbi8vICA8Q2Fub25pY2FsVVJJPlxcblxuLy8gIDxDYW5vbmljYWxRdWVyeVN0cmluZz5cXG5cbi8vICA8Q2Fub25pY2FsSGVhZGVycz5cXG5cbi8vICA8U2lnbmVkSGVhZGVycz5cXG5cbi8vICA8SGFzaGVkUGF5bG9hZD5cbi8vXG5mdW5jdGlvbiBnZXRDYW5vbmljYWxSZXF1ZXN0KFxuICBtZXRob2Q6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycyxcbiAgc2lnbmVkSGVhZGVyczogc3RyaW5nW10sXG4gIGhhc2hlZFBheWxvYWQ6IHN0cmluZyxcbik6IElDYW5vbmljYWxSZXF1ZXN0IHtcbiAgaWYgKCFpc1N0cmluZyhtZXRob2QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWV0aG9kIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcocGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXRoIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNPYmplY3QoaGVhZGVycykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdoZWFkZXJzIHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheShzaWduZWRIZWFkZXJzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpZ25lZEhlYWRlcnMgc2hvdWxkIGJlIG9mIHR5cGUgXCJhcnJheVwiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKGhhc2hlZFBheWxvYWQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaGFzaGVkUGF5bG9hZCBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnNBcnJheSA9IHNpZ25lZEhlYWRlcnMucmVkdWNlKChhY2MsIGkpID0+IHtcbiAgICAvLyBUcmltIHNwYWNlcyBmcm9tIHRoZSB2YWx1ZSAocmVxdWlyZWQgYnkgVjQgc3BlYylcbiAgICBjb25zdCB2YWwgPSBgJHtoZWFkZXJzW2ldfWAucmVwbGFjZSgvICsvZywgJyAnKVxuICAgIGFjYy5wdXNoKGAke2kudG9Mb3dlckNhc2UoKX06JHt2YWx9YClcbiAgICByZXR1cm4gYWNjXG4gIH0sIFtdIGFzIHN0cmluZ1tdKVxuXG4gIGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHBhdGguc3BsaXQoJz8nKVswXVxuICBsZXQgcmVxdWVzdFF1ZXJ5ID0gcGF0aC5zcGxpdCgnPycpWzFdXG4gIGlmICghcmVxdWVzdFF1ZXJ5KSB7XG4gICAgcmVxdWVzdFF1ZXJ5ID0gJydcbiAgfVxuXG4gIGlmIChyZXF1ZXN0UXVlcnkpIHtcbiAgICByZXF1ZXN0UXVlcnkgPSByZXF1ZXN0UXVlcnlcbiAgICAgIC5zcGxpdCgnJicpXG4gICAgICAuc29ydCgpXG4gICAgICAubWFwKChlbGVtZW50KSA9PiAoIWVsZW1lbnQuaW5jbHVkZXMoJz0nKSA/IGVsZW1lbnQgKyAnPScgOiBlbGVtZW50KSlcbiAgICAgIC5qb2luKCcmJylcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgcmVxdWVzdFJlc291cmNlLFxuICAgIHJlcXVlc3RRdWVyeSxcbiAgICBoZWFkZXJzQXJyYXkuam9pbignXFxuJykgKyAnXFxuJyxcbiAgICBzaWduZWRIZWFkZXJzLmpvaW4oJzsnKS50b0xvd2VyQ2FzZSgpLFxuICAgIGhhc2hlZFBheWxvYWQsXG4gIF0uam9pbignXFxuJylcbn1cblxuLy8gZ2VuZXJhdGUgYSBjcmVkZW50aWFsIHN0cmluZ1xuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbChhY2Nlc3NLZXk6IHN0cmluZywgcmVnaW9uOiBzdHJpbmcsIHJlcXVlc3REYXRlPzogRGF0ZSwgc2VydmljZU5hbWUgPSAnczMnKSB7XG4gIGlmICghaXNTdHJpbmcoYWNjZXNzS2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FjY2Vzc0tleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHJlZ2lvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWdpb24gc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cbiAgaWYgKCFpc09iamVjdChyZXF1ZXN0RGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZXF1ZXN0RGF0ZSBzaG91bGQgYmUgb2YgdHlwZSBcIm9iamVjdFwiJylcbiAgfVxuICByZXR1cm4gYCR7YWNjZXNzS2V5fS8ke2dldFNjb3BlKHJlZ2lvbiwgcmVxdWVzdERhdGUsIHNlcnZpY2VOYW1lKX1gXG59XG5cbi8vIFJldHVybnMgc2lnbmVkIGhlYWRlcnMgYXJyYXkgLSBhbHBoYWJldGljYWxseSBzb3J0ZWRcbmZ1bmN0aW9uIGdldFNpZ25lZEhlYWRlcnMoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMpOiBzdHJpbmdbXSB7XG4gIGlmICghaXNPYmplY3QoaGVhZGVycykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZXF1ZXN0IHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIC8vIEV4Y2VycHRzIGZyb20gQGxzZWdhbCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy9pc3N1ZXMvNjU5I2lzc3VlY29tbWVudC0xMjA0NzcyNThcbiAgLy9cbiAgLy8gIFVzZXItQWdlbnQ6XG4gIC8vXG4gIC8vICAgICAgVGhpcyBpcyBpZ25vcmVkIGZyb20gc2lnbmluZyBiZWNhdXNlIHNpZ25pbmcgdGhpcyBjYXVzZXMgcHJvYmxlbXMgd2l0aCBnZW5lcmF0aW5nIHByZS1zaWduZWQgVVJMc1xuICAvLyAgICAgICh0aGF0IGFyZSBleGVjdXRlZCBieSBvdGhlciBhZ2VudHMpIG9yIHdoZW4gY3VzdG9tZXJzIHBhc3MgcmVxdWVzdHMgdGhyb3VnaCBwcm94aWVzLCB3aGljaCBtYXlcbiAgLy8gICAgICBtb2RpZnkgdGhlIHVzZXItYWdlbnQuXG4gIC8vXG4gIC8vICBDb250ZW50LUxlbmd0aDpcbiAgLy9cbiAgLy8gICAgICBUaGlzIGlzIGlnbm9yZWQgZnJvbSBzaWduaW5nIGJlY2F1c2UgZ2VuZXJhdGluZyBhIHByZS1zaWduZWQgVVJMIHNob3VsZCBub3QgcHJvdmlkZSBhIGNvbnRlbnQtbGVuZ3RoXG4gIC8vICAgICAgY29uc3RyYWludCwgc3BlY2lmaWNhbGx5IHdoZW4gdmVuZGluZyBhIFMzIHByZS1zaWduZWQgUFVUIFVSTC4gVGhlIGNvcm9sbGFyeSB0byB0aGlzIGlzIHRoYXQgd2hlblxuICAvLyAgICAgIHNlbmRpbmcgcmVndWxhciByZXF1ZXN0cyAobm9uLXByZS1zaWduZWQpLCB0aGUgc2lnbmF0dXJlIGNvbnRhaW5zIGEgY2hlY2tzdW0gb2YgdGhlIGJvZHksIHdoaWNoXG4gIC8vICAgICAgaW1wbGljaXRseSB2YWxpZGF0ZXMgdGhlIHBheWxvYWQgbGVuZ3RoIChzaW5jZSBjaGFuZ2luZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdvdWxkIGNoYW5nZSB0aGUgY2hlY2tzdW0pXG4gIC8vICAgICAgYW5kIHRoZXJlZm9yZSB0aGlzIGhlYWRlciBpcyBub3QgdmFsdWFibGUgaW4gdGhlIHNpZ25hdHVyZS5cbiAgLy9cbiAgLy8gIENvbnRlbnQtVHlwZTpcbiAgLy9cbiAgLy8gICAgICBTaWduaW5nIHRoaXMgaGVhZGVyIGNhdXNlcyBxdWl0ZSBhIG51bWJlciBvZiBwcm9ibGVtcyBpbiBicm93c2VyIGVudmlyb25tZW50cywgd2hlcmUgYnJvd3NlcnNcbiAgLy8gICAgICBsaWtlIHRvIG1vZGlmeSBhbmQgbm9ybWFsaXplIHRoZSBjb250ZW50LXR5cGUgaGVhZGVyIGluIGRpZmZlcmVudCB3YXlzLiBUaGVyZSBpcyBtb3JlIGluZm9ybWF0aW9uXG4gIC8vICAgICAgb24gdGhpcyBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMvaXNzdWVzLzI0NC4gQXZvaWRpbmcgdGhpcyBmaWVsZCBzaW1wbGlmaWVzIGxvZ2ljXG4gIC8vICAgICAgYW5kIHJlZHVjZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGZ1dHVyZSBidWdzXG4gIC8vXG4gIC8vICBBdXRob3JpemF0aW9uOlxuICAvL1xuICAvLyAgICAgIElzIHNraXBwZWQgZm9yIG9idmlvdXMgcmVhc29uc1xuXG4gIGNvbnN0IGlnbm9yZWRIZWFkZXJzID0gWydhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICd1c2VyLWFnZW50J11cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgLmZpbHRlcigoaGVhZGVyKSA9PiAhaWdub3JlZEhlYWRlcnMuaW5jbHVkZXMoaGVhZGVyKSlcbiAgICAuc29ydCgpXG59XG5cbi8vIHJldHVybnMgdGhlIGtleSB1c2VkIGZvciBjYWxjdWxhdGluZyBzaWduYXR1cmVcbmZ1bmN0aW9uIGdldFNpZ25pbmdLZXkoZGF0ZTogRGF0ZSwgcmVnaW9uOiBzdHJpbmcsIHNlY3JldEtleTogc3RyaW5nLCBzZXJ2aWNlTmFtZSA9ICdzMycpIHtcbiAgaWYgKCFpc09iamVjdChkYXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGUgc2hvdWxkIGJlIG9mIHR5cGUgXCJvYmplY3RcIicpXG4gIH1cbiAgaWYgKCFpc1N0cmluZyhyZWdpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVnaW9uIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBjb25zdCBkYXRlTGluZSA9IG1ha2VEYXRlU2hvcnQoZGF0ZSlcbiAgY29uc3QgaG1hYzEgPSBjcnlwdG9cbiAgICAgIC5jcmVhdGVIbWFjKCdzaGEyNTYnLCAnQVdTNCcgKyBzZWNyZXRLZXkpXG4gICAgICAudXBkYXRlKGRhdGVMaW5lKVxuICAgICAgLmRpZ2VzdCgpLFxuICAgIGhtYWMyID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTI1NicsIGhtYWMxKS51cGRhdGUocmVnaW9uKS5kaWdlc3QoKSxcbiAgICBobWFjMyA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGEyNTYnLCBobWFjMikudXBkYXRlKHNlcnZpY2VOYW1lKS5kaWdlc3QoKVxuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTI1NicsIGhtYWMzKS51cGRhdGUoJ2F3czRfcmVxdWVzdCcpLmRpZ2VzdCgpXG59XG5cbi8vIHJldHVybnMgdGhlIHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIHNpZ25lZFxuZnVuY3Rpb24gZ2V0U3RyaW5nVG9TaWduKGNhbm9uaWNhbFJlcXVlc3Q6IElDYW5vbmljYWxSZXF1ZXN0LCByZXF1ZXN0RGF0ZTogRGF0ZSwgcmVnaW9uOiBzdHJpbmcsIHNlcnZpY2VOYW1lID0gJ3MzJykge1xuICBpZiAoIWlzU3RyaW5nKGNhbm9uaWNhbFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2Fub25pY2FsUmVxdWVzdCBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHJlcXVlc3REYXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcXVlc3REYXRlIHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcocmVnaW9uKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlZ2lvbiBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShjYW5vbmljYWxSZXF1ZXN0KS5kaWdlc3QoJ2hleCcpXG4gIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUocmVnaW9uLCByZXF1ZXN0RGF0ZSwgc2VydmljZU5hbWUpXG4gIGNvbnN0IHN0cmluZ1RvU2lnbiA9IFtzaWduVjRBbGdvcml0aG0sIG1ha2VEYXRlTG9uZyhyZXF1ZXN0RGF0ZSksIHNjb3BlLCBoYXNoXVxuXG4gIHJldHVybiBzdHJpbmdUb1NpZ24uam9pbignXFxuJylcbn1cblxuLy8gY2FsY3VsYXRlIHRoZSBzaWduYXR1cmUgb2YgdGhlIFBPU1QgcG9saWN5XG5leHBvcnQgZnVuY3Rpb24gcG9zdFByZXNpZ25TaWduYXR1cmVWNChyZWdpb246IHN0cmluZywgZGF0ZTogRGF0ZSwgc2VjcmV0S2V5OiBzdHJpbmcsIHBvbGljeUJhc2U2NDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpc1N0cmluZyhyZWdpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVnaW9uIHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNPYmplY3QoZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRlIHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHBvbGljeUJhc2U2NCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwb2xpY3lCYXNlNjQgc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cbiAgY29uc3Qgc2lnbmluZ0tleSA9IGdldFNpZ25pbmdLZXkoZGF0ZSwgcmVnaW9uLCBzZWNyZXRLZXkpXG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMjU2Jywgc2lnbmluZ0tleSkudXBkYXRlKHBvbGljeUJhc2U2NCkuZGlnZXN0KCdoZXgnKS50b0xvd2VyQ2FzZSgpXG59XG5cbi8vIFJldHVybnMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyXG5leHBvcnQgZnVuY3Rpb24gc2lnblY0KFxuICByZXF1ZXN0OiBJUmVxdWVzdCxcbiAgYWNjZXNzS2V5OiBzdHJpbmcsXG4gIHNlY3JldEtleTogc3RyaW5nLFxuICByZWdpb246IHN0cmluZyxcbiAgcmVxdWVzdERhdGU6IERhdGUsXG4gIHNoYTI1NnN1bTogc3RyaW5nLFxuICBzZXJ2aWNlTmFtZSA9ICdzMycsXG4pIHtcbiAgaWYgKCFpc09iamVjdChyZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcXVlc3Qgc2hvdWxkIGJlIG9mIHR5cGUgXCJvYmplY3RcIicpXG4gIH1cbiAgaWYgKCFpc1N0cmluZyhhY2Nlc3NLZXkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYWNjZXNzS2V5IHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHJlZ2lvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWdpb24gc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cblxuICBpZiAoIWFjY2Vzc0tleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuQWNjZXNzS2V5UmVxdWlyZWRFcnJvcignYWNjZXNzS2V5IGlzIHJlcXVpcmVkIGZvciBzaWduaW5nJylcbiAgfVxuICBpZiAoIXNlY3JldEtleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU2VjcmV0S2V5UmVxdWlyZWRFcnJvcignc2VjcmV0S2V5IGlzIHJlcXVpcmVkIGZvciBzaWduaW5nJylcbiAgfVxuXG4gIGNvbnN0IHNpZ25lZEhlYWRlcnMgPSBnZXRTaWduZWRIZWFkZXJzKHJlcXVlc3QuaGVhZGVycylcbiAgY29uc3QgY2Fub25pY2FsUmVxdWVzdCA9IGdldENhbm9uaWNhbFJlcXVlc3QocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QucGF0aCwgcmVxdWVzdC5oZWFkZXJzLCBzaWduZWRIZWFkZXJzLCBzaGEyNTZzdW0pXG4gIGNvbnN0IHNlcnZpY2VJZGVudGlmaWVyID0gc2VydmljZU5hbWUgfHwgJ3MzJ1xuICBjb25zdCBzdHJpbmdUb1NpZ24gPSBnZXRTdHJpbmdUb1NpZ24oY2Fub25pY2FsUmVxdWVzdCwgcmVxdWVzdERhdGUsIHJlZ2lvbiwgc2VydmljZUlkZW50aWZpZXIpXG4gIGNvbnN0IHNpZ25pbmdLZXkgPSBnZXRTaWduaW5nS2V5KHJlcXVlc3REYXRlLCByZWdpb24sIHNlY3JldEtleSwgc2VydmljZUlkZW50aWZpZXIpXG4gIGNvbnN0IGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKGFjY2Vzc0tleSwgcmVnaW9uLCByZXF1ZXN0RGF0ZSwgc2VydmljZUlkZW50aWZpZXIpXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGEyNTYnLCBzaWduaW5nS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoJ2hleCcpLnRvTG93ZXJDYXNlKClcblxuICByZXR1cm4gYCR7c2lnblY0QWxnb3JpdGhtfSBDcmVkZW50aWFsPSR7Y3JlZGVudGlhbH0sIFNpZ25lZEhlYWRlcnM9JHtzaWduZWRIZWFkZXJzXG4gICAgLmpvaW4oJzsnKVxuICAgIC50b0xvd2VyQ2FzZSgpfSwgU2lnbmF0dXJlPSR7c2lnbmF0dXJlfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25WNEJ5U2VydmljZU5hbWUoXG4gIHJlcXVlc3Q6IElSZXF1ZXN0LFxuICBhY2Nlc3NLZXk6IHN0cmluZyxcbiAgc2VjcmV0S2V5OiBzdHJpbmcsXG4gIHJlZ2lvbjogc3RyaW5nLFxuICByZXF1ZXN0RGF0ZTogRGF0ZSxcbiAgY29udGVudFNoYTI1Njogc3RyaW5nLFxuICBzZXJ2aWNlTmFtZSA9ICdzMycsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gc2lnblY0KHJlcXVlc3QsIGFjY2Vzc0tleSwgc2VjcmV0S2V5LCByZWdpb24sIHJlcXVlc3REYXRlLCBjb250ZW50U2hhMjU2LCBzZXJ2aWNlTmFtZSlcbn1cblxuLy8gcmV0dXJucyBhIHByZXNpZ25lZCBVUkwgc3RyaW5nXG5leHBvcnQgZnVuY3Rpb24gcHJlc2lnblNpZ25hdHVyZVY0KFxuICByZXF1ZXN0OiBJUmVxdWVzdCxcbiAgYWNjZXNzS2V5OiBzdHJpbmcsXG4gIHNlY3JldEtleTogc3RyaW5nLFxuICBzZXNzaW9uVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcmVnaW9uOiBzdHJpbmcsXG4gIHJlcXVlc3REYXRlOiBEYXRlLFxuICBleHBpcmVzOiBudW1iZXIgfCB1bmRlZmluZWQsXG4pIHtcbiAgaWYgKCFpc09iamVjdChyZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlcXVlc3Qgc2hvdWxkIGJlIG9mIHR5cGUgXCJvYmplY3RcIicpXG4gIH1cbiAgaWYgKCFpc1N0cmluZyhhY2Nlc3NLZXkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYWNjZXNzS2V5IHNob3VsZCBiZSBvZiB0eXBlIFwic3RyaW5nXCInKVxuICB9XG4gIGlmICghaXNTdHJpbmcoc2VjcmV0S2V5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldEtleSBzaG91bGQgYmUgb2YgdHlwZSBcInN0cmluZ1wiJylcbiAgfVxuICBpZiAoIWlzU3RyaW5nKHJlZ2lvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWdpb24gc2hvdWxkIGJlIG9mIHR5cGUgXCJzdHJpbmdcIicpXG4gIH1cblxuICBpZiAoIWFjY2Vzc0tleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuQWNjZXNzS2V5UmVxdWlyZWRFcnJvcignYWNjZXNzS2V5IGlzIHJlcXVpcmVkIGZvciBwcmVzaWduaW5nJylcbiAgfVxuICBpZiAoIXNlY3JldEtleSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU2VjcmV0S2V5UmVxdWlyZWRFcnJvcignc2VjcmV0S2V5IGlzIHJlcXVpcmVkIGZvciBwcmVzaWduaW5nJylcbiAgfVxuXG4gIGlmIChleHBpcmVzICYmICFpc051bWJlcihleHBpcmVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGlyZXMgc2hvdWxkIGJlIG9mIHR5cGUgXCJudW1iZXJcIicpXG4gIH1cbiAgaWYgKGV4cGlyZXMgJiYgZXhwaXJlcyA8IDEpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkV4cGlyZXNQYXJhbUVycm9yKCdleHBpcmVzIHBhcmFtIGNhbm5vdCBiZSBsZXNzIHRoYW4gMSBzZWNvbmRzJylcbiAgfVxuICBpZiAoZXhwaXJlcyAmJiBleHBpcmVzID4gUFJFU0lHTl9FWFBJUllfREFZU19NQVgpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkV4cGlyZXNQYXJhbUVycm9yKCdleHBpcmVzIHBhcmFtIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gNyBkYXlzJylcbiAgfVxuXG4gIGNvbnN0IGlzbzg2MDFEYXRlID0gbWFrZURhdGVMb25nKHJlcXVlc3REYXRlKVxuICBjb25zdCBzaWduZWRIZWFkZXJzID0gZ2V0U2lnbmVkSGVhZGVycyhyZXF1ZXN0LmhlYWRlcnMpXG4gIGNvbnN0IGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKGFjY2Vzc0tleSwgcmVnaW9uLCByZXF1ZXN0RGF0ZSlcbiAgY29uc3QgaGFzaGVkUGF5bG9hZCA9ICdVTlNJR05FRC1QQVlMT0FEJ1xuXG4gIGNvbnN0IHJlcXVlc3RRdWVyeTogc3RyaW5nW10gPSBbXVxuICByZXF1ZXN0UXVlcnkucHVzaChgWC1BbXotQWxnb3JpdGhtPSR7c2lnblY0QWxnb3JpdGhtfWApXG4gIHJlcXVlc3RRdWVyeS5wdXNoKGBYLUFtei1DcmVkZW50aWFsPSR7dXJpRXNjYXBlKGNyZWRlbnRpYWwpfWApXG4gIHJlcXVlc3RRdWVyeS5wdXNoKGBYLUFtei1EYXRlPSR7aXNvODYwMURhdGV9YClcbiAgcmVxdWVzdFF1ZXJ5LnB1c2goYFgtQW16LUV4cGlyZXM9JHtleHBpcmVzfWApXG4gIHJlcXVlc3RRdWVyeS5wdXNoKGBYLUFtei1TaWduZWRIZWFkZXJzPSR7dXJpRXNjYXBlKHNpZ25lZEhlYWRlcnMuam9pbignOycpLnRvTG93ZXJDYXNlKCkpfWApXG4gIGlmIChzZXNzaW9uVG9rZW4pIHtcbiAgICByZXF1ZXN0UXVlcnkucHVzaChgWC1BbXotU2VjdXJpdHktVG9rZW49JHt1cmlFc2NhcGUoc2Vzc2lvblRva2VuKX1gKVxuICB9XG5cbiAgY29uc3QgcmVzb3VyY2UgPSByZXF1ZXN0LnBhdGguc3BsaXQoJz8nKVswXVxuICBsZXQgcXVlcnkgPSByZXF1ZXN0LnBhdGguc3BsaXQoJz8nKVsxXVxuICBpZiAocXVlcnkpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5ICsgJyYnICsgcmVxdWVzdFF1ZXJ5LmpvaW4oJyYnKVxuICB9IGVsc2Uge1xuICAgIHF1ZXJ5ID0gcmVxdWVzdFF1ZXJ5LmpvaW4oJyYnKVxuICB9XG5cbiAgY29uc3QgcGF0aCA9IHJlc291cmNlICsgJz8nICsgcXVlcnlcblxuICBjb25zdCBjYW5vbmljYWxSZXF1ZXN0ID0gZ2V0Q2Fub25pY2FsUmVxdWVzdChyZXF1ZXN0Lm1ldGhvZCwgcGF0aCwgcmVxdWVzdC5oZWFkZXJzLCBzaWduZWRIZWFkZXJzLCBoYXNoZWRQYXlsb2FkKVxuXG4gIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGdldFN0cmluZ1RvU2lnbihjYW5vbmljYWxSZXF1ZXN0LCByZXF1ZXN0RGF0ZSwgcmVnaW9uKVxuICBjb25zdCBzaWduaW5nS2V5ID0gZ2V0U2lnbmluZ0tleShyZXF1ZXN0RGF0ZSwgcmVnaW9uLCBzZWNyZXRLZXkpXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGEyNTYnLCBzaWduaW5nS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoJ2hleCcpLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIHJlcXVlc3QucHJvdG9jb2wgKyAnLy8nICsgcmVxdWVzdC5oZWFkZXJzLmhvc3QgKyBwYXRoICsgYCZYLUFtei1TaWduYXR1cmU9JHtzaWduYXR1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

@@ -8,3 +8,2 @@ "use strict";

exports.getConcater = getConcater;
exports.getCopyObjectTransformer = getCopyObjectTransformer;
exports.getHashSummer = getHashSummer;

@@ -14,6 +13,2 @@ exports.getListObjectsTransformer = getListObjectsTransformer;

exports.getListObjectsV2WithMetadataTransformer = getListObjectsV2WithMetadataTransformer;
exports.objectLegalHoldTransformer = objectLegalHoldTransformer;
exports.objectRetentionTransformer = objectRetentionTransformer;
exports.removeObjectsTransformer = removeObjectsTransformer;
exports.uploadPartTransformer = uploadPartTransformer;
var Crypto = _interopRequireWildcard(require("crypto"), true);

@@ -109,7 +104,2 @@ var _through = require("through2");

// Parses CopyObject response.
function getCopyObjectTransformer() {
return getConcater(xmlParsers.parseCopyObject);
}
// Parses listObjects response.

@@ -134,14 +124,2 @@ function getListObjectsTransformer() {

}
function objectRetentionTransformer() {
return getConcater(xmlParsers.parseObjectRetentionConfig);
}
function objectLegalHoldTransformer() {
return getConcater(xmlParsers.parseObjectLegalHoldConfig);
}
function uploadPartTransformer() {
return getConcater(xmlParsers.uploadPartParser);
}
function removeObjectsTransformer() {
return getConcater(xmlParsers.removeObjectsParser);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcnlwdG8iLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdGhyb3VnaCIsIl9oZWxwZXIiLCJ4bWxQYXJzZXJzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsImdldENvbmNhdGVyIiwicGFyc2VyIiwiZW1pdEVycm9yIiwib2JqZWN0TW9kZSIsImJ1ZnMiLCJpc0Z1bmN0aW9uIiwiVHlwZUVycm9yIiwiVGhyb3VnaDIiLCJjaHVuayIsImVuYyIsImNiIiwicHVzaCIsIkJ1ZmZlciIsImNvbmNhdCIsInRvU3RyaW5nIiwibGVuZ3RoIiwiZ2V0SGFzaFN1bW1lciIsImVuYWJsZVNIQTI1NiIsIm1kNSIsImNyZWF0ZUhhc2giLCJzaGEyNTYiLCJ1cGRhdGUiLCJtZDVzdW0iLCJzaGEyNTZzdW0iLCJkaWdlc3QiLCJoYXNoRGF0YSIsImdldENvcHlPYmplY3RUcmFuc2Zvcm1lciIsInBhcnNlQ29weU9iamVjdCIsImdldExpc3RPYmplY3RzVHJhbnNmb3JtZXIiLCJwYXJzZUxpc3RPYmplY3RzIiwiZ2V0TGlzdE9iamVjdHNWMlRyYW5zZm9ybWVyIiwicGFyc2VMaXN0T2JqZWN0c1YyIiwiZ2V0TGlzdE9iamVjdHNWMldpdGhNZXRhZGF0YVRyYW5zZm9ybWVyIiwicGFyc2VMaXN0T2JqZWN0c1YyV2l0aE1ldGFkYXRhIiwiZ2V0QnVja2V0Tm90aWZpY2F0aW9uVHJhbnNmb3JtZXIiLCJwYXJzZUJ1Y2tldE5vdGlmaWNhdGlvbiIsIm9iamVjdFJldGVudGlvblRyYW5zZm9ybWVyIiwicGFyc2VPYmplY3RSZXRlbnRpb25Db25maWciLCJvYmplY3RMZWdhbEhvbGRUcmFuc2Zvcm1lciIsInBhcnNlT2JqZWN0TGVnYWxIb2xkQ29uZmlnIiwidXBsb2FkUGFydFRyYW5zZm9ybWVyIiwidXBsb2FkUGFydFBhcnNlciIsInJlbW92ZU9iamVjdHNUcmFuc2Zvcm1lciIsInJlbW92ZU9iamVjdHNQYXJzZXIiXSwic291cmNlcyI6WyJ0cmFuc2Zvcm1lcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIE1pbklPIEphdmFzY3JpcHQgTGlicmFyeSBmb3IgQW1hem9uIFMzIENvbXBhdGlibGUgQ2xvdWQgU3RvcmFnZSwgKEMpIDIwMTUsIDIwMTYgTWluSU8sIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgQ3J5cHRvIGZyb20gJ25vZGU6Y3J5cHRvJ1xuXG5pbXBvcnQgVGhyb3VnaDIgZnJvbSAndGhyb3VnaDInXG5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2ludGVybmFsL2hlbHBlci50cydcbmltcG9ydCAqIGFzIHhtbFBhcnNlcnMgZnJvbSAnLi94bWwtcGFyc2Vycy5qcydcblxuLy8gZ2V0Q29uY2F0ZXIgcmV0dXJucyBhIHN0cmVhbSB0aGF0IGNvbmNhdGVuYXRlcyB0aGUgaW5wdXQgYW5kIGVtaXRzXG4vLyB0aGUgY29uY2F0ZW5hdGVkIG91dHB1dCB3aGVuICdlbmQnIGhhcyByZWFjaGVkLiBJZiBhbiBvcHRpb25hbFxuLy8gcGFyc2VyIGZ1bmN0aW9uIGlzIHBhc3NlZCB1cG9uIHJlYWNoaW5nIHRoZSAnZW5kJyBvZiB0aGUgc3RyZWFtLFxuLy8gYHBhcnNlcihjb25jYXRlbmF0ZWRfZGF0YSlgIHdpbGwgYmUgZW1pdHRlZC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25jYXRlcihwYXJzZXIsIGVtaXRFcnJvcikge1xuICB2YXIgb2JqZWN0TW9kZSA9IGZhbHNlXG4gIHZhciBidWZzID0gW11cblxuICBpZiAocGFyc2VyICYmICFpc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgc2hvdWxkIGJlIG9mIHR5cGUgXCJmdW5jdGlvblwiJylcbiAgfVxuXG4gIGlmIChwYXJzZXIpIHtcbiAgICBvYmplY3RNb2RlID0gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIFRocm91Z2gyKFxuICAgIHsgb2JqZWN0TW9kZSB9LFxuICAgIGZ1bmN0aW9uIChjaHVuaywgZW5jLCBjYikge1xuICAgICAgYnVmcy5wdXNoKGNodW5rKVxuICAgICAgY2IoKVxuICAgIH0sXG4gICAgZnVuY3Rpb24gKGNiKSB7XG4gICAgICBpZiAoZW1pdEVycm9yKSB7XG4gICAgICAgIGNiKHBhcnNlcihCdWZmZXIuY29uY2F0KGJ1ZnMpLnRvU3RyaW5nKCkpKVxuICAgICAgICAvLyBjYihlKSB3b3VsZCBtZWFuIHdlIGhhdmUgdG8gZW1pdCAnZW5kJyBieSBleHBsaWNpdGx5IGNhbGxpbmcgdGhpcy5wdXNoKG51bGwpXG4gICAgICAgIHRoaXMucHVzaChudWxsKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChidWZzLmxlbmd0aCkge1xuICAgICAgICBpZiAocGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy5wdXNoKHBhcnNlcihCdWZmZXIuY29uY2F0KGJ1ZnMpLnRvU3RyaW5nKCkpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHVzaChCdWZmZXIuY29uY2F0KGJ1ZnMpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYigpXG4gICAgfSxcbiAgKVxufVxuXG4vLyBBIHRocm91Z2ggc3RyZWFtIHRoYXQgY2FsY3VsYXRlcyBtZDVzdW0gYW5kIHNoYTI1NnN1bVxuZXhwb3J0IGZ1bmN0aW9uIGdldEhhc2hTdW1tZXIoZW5hYmxlU0hBMjU2KSB7XG4gIHZhciBtZDUgPSBDcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JylcbiAgdmFyIHNoYTI1NiA9IENyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKVxuXG4gIHJldHVybiBUaHJvdWdoMi5vYmooXG4gICAgZnVuY3Rpb24gKGNodW5rLCBlbmMsIGNiKSB7XG4gICAgICBpZiAoZW5hYmxlU0hBMjU2KSB7XG4gICAgICAgIHNoYTI1Ni51cGRhdGUoY2h1bmspXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZDUudXBkYXRlKGNodW5rKVxuICAgICAgfVxuICAgICAgY2IoKVxuICAgIH0sXG4gICAgZnVuY3Rpb24gKGNiKSB7XG4gICAgICB2YXIgbWQ1c3VtID0gJydcbiAgICAgIHZhciBzaGEyNTZzdW0gPSAnJ1xuICAgICAgaWYgKGVuYWJsZVNIQTI1Nikge1xuICAgICAgICBzaGEyNTZzdW0gPSBzaGEyNTYuZGlnZXN0KCdoZXgnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWQ1c3VtID0gbWQ1LmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIH1cbiAgICAgIHZhciBoYXNoRGF0YSA9IHsgbWQ1c3VtLCBzaGEyNTZzdW0gfVxuICAgICAgdGhpcy5wdXNoKGhhc2hEYXRhKVxuICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgICBjYigpXG4gICAgfSxcbiAgKVxufVxuXG4vLyBGb2xsb3dpbmcgZnVuY3Rpb25zIHJldHVybiBhIHN0cmVhbSBvYmplY3QgdGhhdCBwYXJzZXMgWE1MXG4vLyBhbmQgZW1pdHMgc3VpdGFibGUgSmF2YXNjcmlwdCBvYmplY3RzLlxuXG4vLyBQYXJzZXMgQ29weU9iamVjdCByZXNwb25zZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb3B5T2JqZWN0VHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlQ29weU9iamVjdClcbn1cblxuLy8gUGFyc2VzIGxpc3RPYmplY3RzIHJlc3BvbnNlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RPYmplY3RzVHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlTGlzdE9iamVjdHMpXG59XG5cbi8vIFBhcnNlcyBsaXN0T2JqZWN0cyByZXNwb25zZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0T2JqZWN0c1YyVHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlTGlzdE9iamVjdHNWMilcbn1cblxuLy8gUGFyc2VzIGxpc3RPYmplY3RzIHdpdGggbWV0YWRhdGEgcmVzcG9uc2UuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdE9iamVjdHNWMldpdGhNZXRhZGF0YVRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZUxpc3RPYmplY3RzVjJXaXRoTWV0YWRhdGEpXG59XG5cbi8vIFBhcnNlcyBHRVQvU0VUIEJ1Y2tldE5vdGlmaWNhdGlvbiByZXNwb25zZVxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1Y2tldE5vdGlmaWNhdGlvblRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZUJ1Y2tldE5vdGlmaWNhdGlvbilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdFJldGVudGlvblRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZU9iamVjdFJldGVudGlvbkNvbmZpZylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdExlZ2FsSG9sZFRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZU9iamVjdExlZ2FsSG9sZENvbmZpZylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZFBhcnRUcmFuc2Zvcm1lcigpIHtcbiAgcmV0dXJuIGdldENvbmNhdGVyKHhtbFBhcnNlcnMudXBsb2FkUGFydFBhcnNlcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU9iamVjdHNUcmFuc2Zvcm1lcigpIHtcbiAgcmV0dXJuIGdldENvbmNhdGVyKHhtbFBhcnNlcnMucmVtb3ZlT2JqZWN0c1BhcnNlcilcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFKLHVCQUFBLENBQUFDLE9BQUE7QUFBOEMsU0FBQUkseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLFdBQUEsV0FBQUEsV0FB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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcnlwdG8iLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdGhyb3VnaCIsIl9oZWxwZXIiLCJ4bWxQYXJzZXJzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsImdldENvbmNhdGVyIiwicGFyc2VyIiwiZW1pdEVycm9yIiwib2JqZWN0TW9kZSIsImJ1ZnMiLCJpc0Z1bmN0aW9uIiwiVHlwZUVycm9yIiwiVGhyb3VnaDIiLCJjaHVuayIsImVuYyIsImNiIiwicHVzaCIsIkJ1ZmZlciIsImNvbmNhdCIsInRvU3RyaW5nIiwibGVuZ3RoIiwiZ2V0SGFzaFN1bW1lciIsImVuYWJsZVNIQTI1NiIsIm1kNSIsImNyZWF0ZUhhc2giLCJzaGEyNTYiLCJ1cGRhdGUiLCJtZDVzdW0iLCJzaGEyNTZzdW0iLCJkaWdlc3QiLCJoYXNoRGF0YSIsImdldExpc3RPYmplY3RzVHJhbnNmb3JtZXIiLCJwYXJzZUxpc3RPYmplY3RzIiwiZ2V0TGlzdE9iamVjdHNWMlRyYW5zZm9ybWVyIiwicGFyc2VMaXN0T2JqZWN0c1YyIiwiZ2V0TGlzdE9iamVjdHNWMldpdGhNZXRhZGF0YVRyYW5zZm9ybWVyIiwicGFyc2VMaXN0T2JqZWN0c1YyV2l0aE1ldGFkYXRhIiwiZ2V0QnVja2V0Tm90aWZpY2F0aW9uVHJhbnNmb3JtZXIiLCJwYXJzZUJ1Y2tldE5vdGlmaWNhdGlvbiJdLCJzb3VyY2VzIjpbInRyYW5zZm9ybWVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogTWluSU8gSmF2YXNjcmlwdCBMaWJyYXJ5IGZvciBBbWF6b24gUzMgQ29tcGF0aWJsZSBDbG91ZCBTdG9yYWdlLCAoQykgMjAxNSwgMjAxNiBNaW5JTywgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBDcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nXG5cbmltcG9ydCBUaHJvdWdoMiBmcm9tICd0aHJvdWdoMidcblxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaW50ZXJuYWwvaGVscGVyLnRzJ1xuaW1wb3J0ICogYXMgeG1sUGFyc2VycyBmcm9tICcuL3htbC1wYXJzZXJzLmpzJ1xuXG4vLyBnZXRDb25jYXRlciByZXR1cm5zIGEgc3RyZWFtIHRoYXQgY29uY2F0ZW5hdGVzIHRoZSBpbnB1dCBhbmQgZW1pdHNcbi8vIHRoZSBjb25jYXRlbmF0ZWQgb3V0cHV0IHdoZW4gJ2VuZCcgaGFzIHJlYWNoZWQuIElmIGFuIG9wdGlvbmFsXG4vLyBwYXJzZXIgZnVuY3Rpb24gaXMgcGFzc2VkIHVwb24gcmVhY2hpbmcgdGhlICdlbmQnIG9mIHRoZSBzdHJlYW0sXG4vLyBgcGFyc2VyKGNvbmNhdGVuYXRlZF9kYXRhKWAgd2lsbCBiZSBlbWl0dGVkLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmNhdGVyKHBhcnNlciwgZW1pdEVycm9yKSB7XG4gIHZhciBvYmplY3RNb2RlID0gZmFsc2VcbiAgdmFyIGJ1ZnMgPSBbXVxuXG4gIGlmIChwYXJzZXIgJiYgIWlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBzaG91bGQgYmUgb2YgdHlwZSBcImZ1bmN0aW9uXCInKVxuICB9XG5cbiAgaWYgKHBhcnNlcikge1xuICAgIG9iamVjdE1vZGUgPSB0cnVlXG4gIH1cblxuICByZXR1cm4gVGhyb3VnaDIoXG4gICAgeyBvYmplY3RNb2RlIH0sXG4gICAgZnVuY3Rpb24gKGNodW5rLCBlbmMsIGNiKSB7XG4gICAgICBidWZzLnB1c2goY2h1bmspXG4gICAgICBjYigpXG4gICAgfSxcbiAgICBmdW5jdGlvbiAoY2IpIHtcbiAgICAgIGlmIChlbWl0RXJyb3IpIHtcbiAgICAgICAgY2IocGFyc2VyKEJ1ZmZlci5jb25jYXQoYnVmcykudG9TdHJpbmcoKSkpXG4gICAgICAgIC8vIGNiKGUpIHdvdWxkIG1lYW4gd2UgaGF2ZSB0byBlbWl0ICdlbmQnIGJ5IGV4cGxpY2l0bHkgY2FsbGluZyB0aGlzLnB1c2gobnVsbClcbiAgICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGJ1ZnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChwYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnB1c2gocGFyc2VyKEJ1ZmZlci5jb25jYXQoYnVmcykudG9TdHJpbmcoKSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wdXNoKEJ1ZmZlci5jb25jYXQoYnVmcykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNiKClcbiAgICB9LFxuICApXG59XG5cbi8vIEEgdGhyb3VnaCBzdHJlYW0gdGhhdCBjYWxjdWxhdGVzIG1kNXN1bSBhbmQgc2hhMjU2c3VtXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGFzaFN1bW1lcihlbmFibGVTSEEyNTYpIHtcbiAgdmFyIG1kNSA9IENyeXB0by5jcmVhdGVIYXNoKCdtZDUnKVxuICB2YXIgc2hhMjU2ID0gQ3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpXG5cbiAgcmV0dXJuIFRocm91Z2gyLm9iaihcbiAgICBmdW5jdGlvbiAoY2h1bmssIGVuYywgY2IpIHtcbiAgICAgIGlmIChlbmFibGVTSEEyNTYpIHtcbiAgICAgICAgc2hhMjU2LnVwZGF0ZShjaHVuaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1kNS51cGRhdGUoY2h1bmspXG4gICAgICB9XG4gICAgICBjYigpXG4gICAgfSxcbiAgICBmdW5jdGlvbiAoY2IpIHtcbiAgICAgIHZhciBtZDVzdW0gPSAnJ1xuICAgICAgdmFyIHNoYTI1NnN1bSA9ICcnXG4gICAgICBpZiAoZW5hYmxlU0hBMjU2KSB7XG4gICAgICAgIHNoYTI1NnN1bSA9IHNoYTI1Ni5kaWdlc3QoJ2hleCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZDVzdW0gPSBtZDUuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgfVxuICAgICAgdmFyIGhhc2hEYXRhID0geyBtZDVzdW0sIHNoYTI1NnN1bSB9XG4gICAgICB0aGlzLnB1c2goaGFzaERhdGEpXG4gICAgICB0aGlzLnB1c2gobnVsbClcbiAgICAgIGNiKClcbiAgICB9LFxuICApXG59XG5cbi8vIEZvbGxvd2luZyBmdW5jdGlvbnMgcmV0dXJuIGEgc3RyZWFtIG9iamVjdCB0aGF0IHBhcnNlcyBYTUxcbi8vIGFuZCBlbWl0cyBzdWl0YWJsZSBKYXZhc2NyaXB0IG9iamVjdHMuXG5cbi8vIFBhcnNlcyBsaXN0T2JqZWN0cyByZXNwb25zZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0T2JqZWN0c1RyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZUxpc3RPYmplY3RzKVxufVxuXG4vLyBQYXJzZXMgbGlzdE9iamVjdHMgcmVzcG9uc2UuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdE9iamVjdHNWMlRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZUxpc3RPYmplY3RzVjIpXG59XG5cbi8vIFBhcnNlcyBsaXN0T2JqZWN0cyB3aXRoIG1ldGFkYXRhIHJlc3BvbnNlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RPYmplY3RzVjJXaXRoTWV0YWRhdGFUcmFuc2Zvcm1lcigpIHtcbiAgcmV0dXJuIGdldENvbmNhdGVyKHhtbFBhcnNlcnMucGFyc2VMaXN0T2JqZWN0c1YyV2l0aE1ldGFkYXRhKVxufVxuXG4vLyBQYXJzZXMgR0VUL1NFVCBCdWNrZXROb3RpZmljYXRpb24gcmVzcG9uc2VcbmV4cG9ydCBmdW5jdGlvbiBnZXRCdWNrZXROb3RpZmljYXRpb25UcmFuc2Zvcm1lcigpIHtcbiAgcmV0dXJuIGdldENvbmNhdGVyKHhtbFBhcnNlcnMucGFyc2VCdWNrZXROb3RpZmljYXRpb24pXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBZ0JBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUosdUJBQUEsQ0FBQUMsT0FBQTtBQUE4QyxTQUFBSSx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxp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

@@ -7,10 +7,5 @@ "use strict";

exports.parseBucketNotification = parseBucketNotification;
exports.parseCopyObject = parseCopyObject;
exports.parseListObjects = parseListObjects;
exports.parseListObjectsV2 = parseListObjectsV2;
exports.parseListObjectsV2WithMetadata = parseListObjectsV2WithMetadata;
exports.parseObjectLegalHoldConfig = parseObjectLegalHoldConfig;
exports.parseObjectRetentionConfig = parseObjectRetentionConfig;
exports.removeObjectsParser = removeObjectsParser;
exports.uploadPartParser = uploadPartParser;
var _fastXmlParser = require("fast-xml-parser");

@@ -43,22 +38,2 @@ var errors = _interopRequireWildcard(require("./errors.js"), true);

// parse XML response for copy object
function parseCopyObject(xml) {
var result = {
etag: '',
lastModified: ''
};
var xmlobj = (0, _helper.parseXml)(xml);
if (!xmlobj.CopyObjectResult) {
throw new errors.InvalidXMLError('Missing tag: "CopyObjectResult"');
}
xmlobj = xmlobj.CopyObjectResult;
if (xmlobj.ETag) {
result.etag = xmlobj.ETag.replace(/^"/g, '').replace(/"$/g, '').replace(/^&quot;/g, '').replace(/&quot;$/g, '').replace(/^&#34;/g, '').replace(/&#34;$/g, '');
}
if (xmlobj.LastModified) {
result.lastModified = new Date(xmlobj.LastModified);
}
return result;
}
// parse XML response for bucket notification

@@ -346,27 +321,2 @@ function parseBucketNotification(xml) {

}
function parseObjectRetentionConfig(xml) {
const xmlObj = (0, _helper.parseXml)(xml);
const retentionConfig = xmlObj.Retention;
return {
mode: retentionConfig.Mode,
retainUntilDate: retentionConfig.RetainUntilDate
};
}
function parseObjectLegalHoldConfig(xml) {
const xmlObj = (0, _helper.parseXml)(xml);
return xmlObj.LegalHold;
}
function uploadPartParser(xml) {
const xmlObj = (0, _helper.parseXml)(xml);
const respEl = xmlObj.CopyPartResult;
return respEl;
}
function removeObjectsParser(xml) {
const xmlObj = (0, _helper.parseXml)(xml);
if (xmlObj.DeleteResult && xmlObj.DeleteResult.Error) {
// return errors as array always. as the response is object in case of single object passed in removeObjects
return (0, _helper.toArray)(xmlObj.DeleteResult.Error);
}
return [];
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZmFzdFhtbFBhcnNlciIsInJlcXVpcmUiLCJlcnJvcnMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9oZWxwZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiZnhwV2l0aG91dE51bVBhcnNlciIsIlhNTFBhcnNlciIsIm51bWJlclBhcnNlT3B0aW9ucyIsInNraXBMaWtlIiwicGFyc2VDb3B5T2JqZWN0IiwieG1sIiwicmVzdWx0IiwiZXRhZyIsImxhc3RNb2RpZmllZCIsInhtbG9iaiIsInBhcnNlWG1sIiwiQ29weU9iamVjdFJlc3VsdCIsIkludmFsaWRYTUxFcnJvciIsIkVUYWciLCJyZXBsYWNlIiwiTGFzdE1vZGlmaWVkIiwiRGF0ZSIsInBhcnNlQnVja2V0Tm90aWZpY2F0aW9uIiwiVG9waWNDb25maWd1cmF0aW9uIiwiUXVldWVDb25maWd1cmF0aW9uIiwiQ2xvdWRGdW5jdGlvbkNvbmZpZ3VyYXRpb24iLCJnZW5FdmVudHMiLCJldmVudHMiLCJ0b0FycmF5IiwiZm9yRWFjaCIsInMzZXZlbnQiLCJwdXNoIiwiZ2VuRmlsdGVyUnVsZXMiLCJmaWx0ZXJzIiwiUzNLZXkiLCJGaWx0ZXJSdWxlIiwicnVsZSIsIk5hbWUiLCJWYWx1ZSIsIk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24iLCJjb25maWciLCJJZCIsIlRvcGljIiwiRXZlbnQiLCJGaWx0ZXIiLCJRdWV1ZSIsIkNsb3VkRnVuY3Rpb24iLCJmb3JtYXRPYmpJbmZvIiwiY29udGVudCIsIm9wdHMiLCJLZXkiLCJTaXplIiwiVmVyc2lvbklkIiwiSXNMYXRlc3QiLCJpc09iamVjdCIsIm5hbWUiLCJzYW5pdGl6ZU9iamVjdEtleSIsInNhbml0aXplRVRhZyIsInNpemUiLCJzYW5pdGl6ZVNpemUiLCJ2ZXJzaW9uSWQiLCJpc0xhdGVzdCIsImlzRGVsZXRlTWFya2VyIiwiSXNEZWxldGVNYXJrZXIiLCJwYXJzZUxpc3RPYmplY3RzIiwib2JqZWN0cyIsImlzVHJ1bmNhdGVkIiwibmV4dE1hcmtlciIsIm5leHRWZXJzaW9uS2V5TWFya2VyIiwicGFyc2UiLCJwYXJzZUNvbW1vblByZWZpeGVzRW50aXR5IiwicmVzcG9uc2VFbnRpdHkiLCJjb21tb25QcmVmaXgiLCJwcmVmaXgiLCJQcmVmaXgiLCJsaXN0QnVja2V0UmVzdWx0IiwiTGlzdEJ1Y2tldFJlc3VsdCIsImxpc3RWZXJzaW9uc1Jlc3VsdCIsIkxpc3RWZXJzaW9uc1Jlc3VsdCIsIklzVHJ1bmNhdGVkIiwiQ29udGVudHMiLCJOZXh0TWFya2VyIiwibGVuZ3RoIiwiQ29tbW9uUHJlZml4ZXMiLCJWZXJzaW9uIiwiRGVsZXRlTWFya2VyIiwiTmV4dEtleU1hcmtlciIsIk5leHRWZXJzaW9uSWRNYXJrZXIiLCJ2ZXJzaW9uSWRNYXJrZXIiLCJwYXJzZUxpc3RPYmplY3RzVjIiLCJOZXh0Q29udGludWF0aW9uVG9rZW4iLCJuZXh0Q29udGludWF0aW9uVG9rZW4iLCJwYXJzZUxpc3RPYmplY3RzVjJXaXRoTWV0YWRhdGEiLCJtZXRhZGF0YSIsIlVzZXJNZXRhZGF0YSIsInBhcnNlT2JqZWN0UmV0ZW50aW9uQ29uZmlnIiwieG1sT2JqIiwicmV0ZW50aW9uQ29uZmlnIiwiUmV0ZW50aW9uIiwibW9kZSIsIk1vZGUiLCJyZXRhaW5VbnRpbERhdGUiLCJSZXRhaW5VbnRpbERhdGUiLCJwYXJzZU9iamVjdExlZ2FsSG9sZENvbmZpZyIsIkxlZ2FsSG9sZCIsInVwbG9hZFBhcnRQYXJzZXIiLCJyZXNwRWwiLCJDb3B5UGFydFJlc3VsdCIsInJlbW92ZU9iamVjdHNQYXJzZXIiLCJEZWxldGVSZXN1bHQiLCJFcnJvciJdLCJzb3VyY2VzIjpbInhtbC1wYXJzZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBNaW5JTyBKYXZhc2NyaXB0IExpYnJhcnkgZm9yIEFtYXpvbiBTMyBDb21wYXRpYmxlIENsb3VkIFN0b3JhZ2UsIChDKSAyMDE1IE1pbklPLCBJbmMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFhNTFBhcnNlciB9IGZyb20gJ2Zhc3QteG1sLXBhcnNlcidcblxuaW1wb3J0ICogYXMgZXJyb3JzIGZyb20gJy4vZXJyb3JzLnRzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIHBhcnNlWG1sLCBzYW5pdGl6ZUVUYWcsIHNhbml0aXplT2JqZWN0S2V5LCBzYW5pdGl6ZVNpemUsIHRvQXJyYXkgfSBmcm9tICcuL2ludGVybmFsL2hlbHBlci50cydcblxuY29uc3QgZnhwV2l0aG91dE51bVBhcnNlciA9IG5ldyBYTUxQYXJzZXIoe1xuICBudW1iZXJQYXJzZU9wdGlvbnM6IHtcbiAgICBza2lwTGlrZTogLy4vLFxuICB9LFxufSlcblxuLy8gcGFyc2UgWE1MIHJlc3BvbnNlIGZvciBjb3B5IG9iamVjdFxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29weU9iamVjdCh4bWwpIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBldGFnOiAnJyxcbiAgICBsYXN0TW9kaWZpZWQ6ICcnLFxuICB9XG5cbiAgdmFyIHhtbG9iaiA9IHBhcnNlWG1sKHhtbClcbiAgaWYgKCF4bWxvYmouQ29weU9iamVjdFJlc3VsdCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFhNTEVycm9yKCdNaXNzaW5nIHRhZzogXCJDb3B5T2JqZWN0UmVzdWx0XCInKVxuICB9XG4gIHhtbG9iaiA9IHhtbG9iai5Db3B5T2JqZWN0UmVzdWx0XG4gIGlmICh4bWxvYmouRVRhZykge1xuICAgIHJlc3VsdC5ldGFnID0geG1sb2JqLkVUYWcucmVwbGFjZSgvXlwiL2csICcnKVxuICAgICAgLnJlcGxhY2UoL1wiJC9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC9eJnF1b3Q7L2csICcnKVxuICAgICAgLnJlcGxhY2UoLyZxdW90OyQvZywgJycpXG4gICAgICAucmVwbGFjZSgvXiYjMzQ7L2csICcnKVxuICAgICAgLnJlcGxhY2UoLyYjMzQ7JC9nLCAnJylcbiAgfVxuICBpZiAoeG1sb2JqLkxhc3RNb2RpZmllZCkge1xuICAgIHJlc3VsdC5sYXN0TW9kaWZpZWQgPSBuZXcgRGF0ZSh4bWxvYmouTGFzdE1vZGlmaWVkKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBwYXJzZSBYTUwgcmVzcG9uc2UgZm9yIGJ1Y2tldCBub3RpZmljYXRpb25cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJ1Y2tldE5vdGlmaWNhdGlvbih4bWwpIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBUb3BpY0NvbmZpZ3VyYXRpb246IFtdLFxuICAgIFF1ZXVlQ29uZmlndXJhdGlvbjogW10sXG4gICAgQ2xvdWRGdW5jdGlvbkNvbmZpZ3VyYXRpb246IFtdLFxuICB9XG4gIC8vIFBhcnNlIHRoZSBldmVudHMgbGlzdFxuICB2YXIgZ2VuRXZlbnRzID0gZnVuY3Rpb24gKGV2ZW50cykge1xuICAgIHZhciByZXN1bHQgPSBbXVxuICAgIGlmIChldmVudHMpIHtcbiAgICAgIHRvQXJyYXkoZXZlbnRzKS5mb3JFYWNoKChzM2V2ZW50KSA9PiB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHMzZXZlbnQpXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbiAgLy8gUGFyc2UgYWxsIGZpbHRlciBydWxlc1xuICB2YXIgZ2VuRmlsdGVyUnVsZXMgPSBmdW5jdGlvbiAoZmlsdGVycykge1xuICAgIHZhciByZXN1bHQgPSBbXVxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICBmaWx0ZXJzID0gdG9BcnJheShmaWx0ZXJzKVxuICAgICAgaWYgKGZpbHRlcnNbMF0uUzNLZXkpIHtcbiAgICAgICAgZmlsdGVyc1swXS5TM0tleSA9IHRvQXJyYXkoZmlsdGVyc1swXS5TM0tleSlcbiAgICAgICAgaWYgKGZpbHRlcnNbMF0uUzNLZXlbMF0uRmlsdGVyUnVsZSkge1xuICAgICAgICAgIHRvQXJyYXkoZmlsdGVyc1swXS5TM0tleVswXS5GaWx0ZXJSdWxlKS5mb3JFYWNoKChydWxlKSA9PiB7XG4gICAgICAgICAgICB2YXIgTmFtZSA9IHRvQXJyYXkocnVsZS5OYW1lKVswXVxuICAgICAgICAgICAgdmFyIFZhbHVlID0gdG9BcnJheShydWxlLlZhbHVlKVswXVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBOYW1lLCBWYWx1ZSB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgdmFyIHhtbG9iaiA9IHBhcnNlWG1sKHhtbClcbiAgeG1sb2JqID0geG1sb2JqLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25cblxuICAvLyBQYXJzZSBhbGwgdG9waWMgY29uZmlndXJhdGlvbnMgaW4gdGhlIHhtbFxuICBpZiAoeG1sb2JqLlRvcGljQ29uZmlndXJhdGlvbikge1xuICAgIHRvQXJyYXkoeG1sb2JqLlRvcGljQ29uZmlndXJhdGlvbikuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICB2YXIgSWQgPSB0b0FycmF5KGNvbmZpZy5JZClbMF1cbiAgICAgIHZhciBUb3BpYyA9IHRvQXJyYXkoY29uZmlnLlRvcGljKVswXVxuICAgICAgdmFyIEV2ZW50ID0gZ2VuRXZlbnRzKGNvbmZpZy5FdmVudClcbiAgICAgIHZhciBGaWx0ZXIgPSBnZW5GaWx0ZXJSdWxlcyhjb25maWcuRmlsdGVyKVxuICAgICAgcmVzdWx0LlRvcGljQ29uZmlndXJhdGlvbi5wdXNoKHsgSWQsIFRvcGljLCBFdmVudCwgRmlsdGVyIH0pXG4gICAgfSlcbiAgfVxuICAvLyBQYXJzZSBhbGwgdG9waWMgY29uZmlndXJhdGlvbnMgaW4gdGhlIHhtbFxuICBpZiAoeG1sb2JqLlF1ZXVlQ29uZmlndXJhdGlvbikge1xuICAgIHRvQXJyYXkoeG1sb2JqLlF1ZXVlQ29uZmlndXJhdGlvbikuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICB2YXIgSWQgPSB0b0FycmF5KGNvbmZpZy5JZClbMF1cbiAgICAgIHZhciBRdWV1ZSA9IHRvQXJyYXkoY29uZmlnLlF1ZXVlKVswXVxuICAgICAgdmFyIEV2ZW50ID0gZ2VuRXZlbnRzKGNvbmZpZy5FdmVudClcbiAgICAgIHZhciBGaWx0ZXIgPSBnZW5GaWx0ZXJSdWxlcyhjb25maWcuRmlsdGVyKVxuICAgICAgcmVzdWx0LlF1ZXVlQ29uZmlndXJhdGlvbi5wdXNoKHsgSWQsIFF1ZXVlLCBFdmVudCwgRmlsdGVyIH0pXG4gICAgfSlcbiAgfVxuICAvLyBQYXJzZSBhbGwgUXVldWVDb25maWd1cmF0aW9uIGFycmF5c1xuICBpZiAoeG1sb2JqLkNsb3VkRnVuY3Rpb25Db25maWd1cmF0aW9uKSB7XG4gICAgdG9BcnJheSh4bWxvYmouQ2xvdWRGdW5jdGlvbkNvbmZpZ3VyYXRpb24pLmZvckVhY2goKGNvbmZpZykgPT4ge1xuICAgICAgdmFyIElkID0gdG9BcnJheShjb25maWcuSWQpWzBdXG4gICAgICB2YXIgQ2xvdWRGdW5jdGlvbiA9IHRvQXJyYXkoY29uZmlnLkNsb3VkRnVuY3Rpb24pWzBdXG4gICAgICB2YXIgRXZlbnQgPSBnZW5FdmVudHMoY29uZmlnLkV2ZW50KVxuICAgICAgdmFyIEZpbHRlciA9IGdlbkZpbHRlclJ1bGVzKGNvbmZpZy5GaWx0ZXIpXG4gICAgICByZXN1bHQuQ2xvdWRGdW5jdGlvbkNvbmZpZ3VyYXRpb24ucHVzaCh7IElkLCBDbG91ZEZ1bmN0aW9uLCBFdmVudCwgRmlsdGVyIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuY29uc3QgZm9ybWF0T2JqSW5mbyA9IChjb250ZW50LCBvcHRzID0ge30pID0+IHtcbiAgbGV0IHsgS2V5LCBMYXN0TW9kaWZpZWQsIEVUYWcsIFNpemUsIFZlcnNpb25JZCwgSXNMYXRlc3QgfSA9IGNvbnRlbnRcblxuICBpZiAoIWlzT2JqZWN0KG9wdHMpKSB7XG4gICAgb3B0cyA9IHt9XG4gIH1cblxuICBjb25zdCBuYW1lID0gc2FuaXRpemVPYmplY3RLZXkodG9BcnJheShLZXkpWzBdKVxuICBjb25zdCBsYXN0TW9kaWZpZWQgPSBuZXcgRGF0ZSh0b0FycmF5KExhc3RNb2RpZmllZClbMF0pXG4gIGNvbnN0IGV0YWcgPSBzYW5pdGl6ZUVUYWcodG9BcnJheShFVGFnKVswXSlcbiAgY29uc3Qgc2l6ZSA9IHNhbml0aXplU2l6ZShTaXplKVxuXG4gIHJldHVybiB7XG4gICAgbmFtZSxcbiAgICBsYXN0TW9kaWZpZWQsXG4gICAgZXRhZyxcbiAgICBzaXplLFxuICAgIHZlcnNpb25JZDogVmVyc2lvbklkLFxuICAgIGlzTGF0ZXN0OiBJc0xhdGVzdCxcbiAgICBpc0RlbGV0ZU1hcmtlcjogb3B0cy5Jc0RlbGV0ZU1hcmtlciA/IG9wdHMuSXNEZWxldGVNYXJrZXIgOiBmYWxzZSxcbiAgfVxufVxuXG4vLyBwYXJzZSBYTUwgcmVzcG9uc2UgZm9yIGxpc3Qgb2JqZWN0cyBpbiBhIGJ1Y2tldFxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGlzdE9iamVjdHMoeG1sKSB7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgb2JqZWN0czogW10sXG4gICAgaXNUcnVuY2F0ZWQ6IGZhbHNlLFxuICB9XG4gIGxldCBpc1RydW5jYXRlZCA9IGZhbHNlXG4gIGxldCBuZXh0TWFya2VyLCBuZXh0VmVyc2lvbktleU1hcmtlclxuICBjb25zdCB4bWxvYmogPSBmeHBXaXRob3V0TnVtUGFyc2VyLnBhcnNlKHhtbClcblxuICBjb25zdCBwYXJzZUNvbW1vblByZWZpeGVzRW50aXR5ID0gKHJlc3BvbnNlRW50aXR5KSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlRW50aXR5KSB7XG4gICAgICB0b0FycmF5KHJlc3BvbnNlRW50aXR5KS5mb3JFYWNoKChjb21tb25QcmVmaXgpID0+IHtcbiAgICAgICAgcmVzdWx0Lm9iamVjdHMucHVzaCh7IHByZWZpeDogc2FuaXRpemVPYmplY3RLZXkodG9BcnJheShjb21tb25QcmVmaXguUHJlZml4KVswXSksIHNpemU6IDAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbGlzdEJ1Y2tldFJlc3VsdCA9IHhtbG9iai5MaXN0QnVja2V0UmVzdWx0XG4gIGNvbnN0IGxpc3RWZXJzaW9uc1Jlc3VsdCA9IHhtbG9iai5MaXN0VmVyc2lvbnNSZXN1bHRcblxuICBpZiAobGlzdEJ1Y2tldFJlc3VsdCkge1xuICAgIGlmIChsaXN0QnVja2V0UmVzdWx0LklzVHJ1bmNhdGVkKSB7XG4gICAgICBpc1RydW5jYXRlZCA9IGxpc3RCdWNrZXRSZXN1bHQuSXNUcnVuY2F0ZWRcbiAgICB9XG4gICAgaWYgKGxpc3RCdWNrZXRSZXN1bHQuQ29udGVudHMpIHtcbiAgICAgIHRvQXJyYXkobGlzdEJ1Y2tldFJlc3VsdC5Db250ZW50cykuZm9yRWFjaCgoY29udGVudCkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gc2FuaXRpemVPYmplY3RLZXkodG9BcnJheShjb250ZW50LktleSlbMF0pXG4gICAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IG5ldyBEYXRlKHRvQXJyYXkoY29udGVudC5MYXN0TW9kaWZpZWQpWzBdKVxuICAgICAgICBjb25zdCBldGFnID0gc2FuaXRpemVFVGFnKHRvQXJyYXkoY29udGVudC5FVGFnKVswXSlcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHNhbml0aXplU2l6ZShjb250ZW50LlNpemUpXG4gICAgICAgIHJlc3VsdC5vYmplY3RzLnB1c2goeyBuYW1lLCBsYXN0TW9kaWZpZWQsIGV0YWcsIHNpemUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGxpc3RCdWNrZXRSZXN1bHQuTmV4dE1hcmtlcikge1xuICAgICAgbmV4dE1hcmtlciA9IGxpc3RCdWNrZXRSZXN1bHQuTmV4dE1hcmtlclxuICAgIH0gZWxzZSBpZiAoaXNUcnVuY2F0ZWQgJiYgcmVzdWx0Lm9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dE1hcmtlciA9IHJlc3VsdC5vYmplY3RzW3Jlc3VsdC5vYmplY3RzLmxlbmd0aCAtIDFdLm5hbWVcbiAgICB9XG4gICAgcGFyc2VDb21tb25QcmVmaXhlc0VudGl0eShsaXN0QnVja2V0UmVzdWx0LkNvbW1vblByZWZpeGVzKVxuICB9XG5cbiAgaWYgKGxpc3RWZXJzaW9uc1Jlc3VsdCkge1xuICAgIGlmIChsaXN0VmVyc2lvbnNSZXN1bHQuSXNUcnVuY2F0ZWQpIHtcbiAgICAgIGlzVHJ1bmNhdGVkID0gbGlzdFZlcnNpb25zUmVzdWx0LklzVHJ1bmNhdGVkXG4gICAgfVxuXG4gICAgaWYgKGxpc3RWZXJzaW9uc1Jlc3VsdC5WZXJzaW9uKSB7XG4gICAgICB0b0FycmF5KGxpc3RWZXJzaW9uc1Jlc3VsdC5WZXJzaW9uKS5mb3JFYWNoKChjb250ZW50KSA9PiB7XG4gICAgICAgIHJlc3VsdC5vYmplY3RzLnB1c2goZm9ybWF0T2JqSW5mbyhjb250ZW50KSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChsaXN0VmVyc2lvbnNSZXN1bHQuRGVsZXRlTWFya2VyKSB7XG4gICAgICB0b0FycmF5KGxpc3RWZXJzaW9uc1Jlc3VsdC5EZWxldGVNYXJrZXIpLmZvckVhY2goKGNvbnRlbnQpID0+IHtcbiAgICAgICAgcmVzdWx0Lm9iamVjdHMucHVzaChmb3JtYXRPYmpJbmZvKGNvbnRlbnQsIHsgSXNEZWxldGVNYXJrZXI6IHRydWUgfSkpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChsaXN0VmVyc2lvbnNSZXN1bHQuTmV4dEtleU1hcmtlcikge1xuICAgICAgbmV4dFZlcnNpb25LZXlNYXJrZXIgPSBsaXN0VmVyc2lvbnNSZXN1bHQuTmV4dEtleU1hcmtlclxuICAgIH1cbiAgICBpZiAobGlzdFZlcnNpb25zUmVzdWx0Lk5leHRWZXJzaW9uSWRNYXJrZXIpIHtcbiAgICAgIHJlc3VsdC52ZXJzaW9uSWRNYXJrZXIgPSBsaXN0VmVyc2lvbnNSZXN1bHQuTmV4dFZlcnNpb25JZE1hcmtlclxuICAgIH1cbiAgICBwYXJzZUNvbW1vblByZWZpeGVzRW50aXR5KGxpc3RWZXJzaW9uc1Jlc3VsdC5Db21tb25QcmVmaXhlcylcbiAgfVxuXG4gIHJlc3VsdC5pc1RydW5jYXRlZCA9IGlzVHJ1bmNhdGVkXG4gIGlmIChpc1RydW5jYXRlZCkge1xuICAgIHJlc3VsdC5uZXh0TWFya2VyID0gbmV4dFZlcnNpb25LZXlNYXJrZXIgfHwgbmV4dE1hcmtlclxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gcGFyc2UgWE1MIHJlc3BvbnNlIGZvciBsaXN0IG9iamVjdHMgdjIgaW4gYSBidWNrZXRcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpc3RPYmplY3RzVjIoeG1sKSB7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgb2JqZWN0czogW10sXG4gICAgaXNUcnVuY2F0ZWQ6IGZhbHNlLFxuICB9XG4gIHZhciB4bWxvYmogPSBwYXJzZVhtbCh4bWwpXG4gIGlmICgheG1sb2JqLkxpc3RCdWNrZXRSZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRYTUxFcnJvcignTWlzc2luZyB0YWc6IFwiTGlzdEJ1Y2tldFJlc3VsdFwiJylcbiAgfVxuICB4bWxvYmogPSB4bWxvYmouTGlzdEJ1Y2tldFJlc3VsdFxuICBpZiAoeG1sb2JqLklzVHJ1bmNhdGVkKSB7XG4gICAgcmVzdWx0LmlzVHJ1bmNhdGVkID0geG1sb2JqLklzVHJ1bmNhdGVkXG4gIH1cbiAgaWYgKHhtbG9iai5OZXh0Q29udGludWF0aW9uVG9rZW4pIHtcbiAgICByZXN1bHQubmV4dENvbnRpbnVhdGlvblRva2VuID0geG1sb2JqLk5leHRDb250aW51YXRpb25Ub2tlblxuICB9XG4gIGlmICh4bWxvYmouQ29udGVudHMpIHtcbiAgICB0b0FycmF5KHhtbG9iai5Db250ZW50cykuZm9yRWFjaCgoY29udGVudCkgPT4ge1xuICAgICAgdmFyIG5hbWUgPSBzYW5pdGl6ZU9iamVjdEtleSh0b0FycmF5KGNvbnRlbnQuS2V5KVswXSlcbiAgICAgIHZhciBsYXN0TW9kaWZpZWQgPSBuZXcgRGF0ZShjb250ZW50Lkxhc3RNb2RpZmllZClcbiAgICAgIHZhciBldGFnID0gc2FuaXRpemVFVGFnKGNvbnRlbnQuRVRhZylcbiAgICAgIHZhciBzaXplID0gY29udGVudC5TaXplXG4gICAgICByZXN1bHQub2JqZWN0cy5wdXNoKHsgbmFtZSwgbGFzdE1vZGlmaWVkLCBldGFnLCBzaXplIH0pXG4gICAgfSlcbiAgfVxuICBpZiAoeG1sb2JqLkNvbW1vblByZWZpeGVzKSB7XG4gICAgdG9BcnJheSh4bWxvYmouQ29tbW9uUHJlZml4ZXMpLmZvckVhY2goKGNvbW1vblByZWZpeCkgPT4ge1xuICAgICAgcmVzdWx0Lm9iamVjdHMucHVzaCh7IHByZWZpeDogc2FuaXRpemVPYmplY3RLZXkodG9BcnJheShjb21tb25QcmVmaXguUHJlZml4KVswXSksIHNpemU6IDAgfSlcbiAgICB9KVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gcGFyc2UgWE1MIHJlc3BvbnNlIGZvciBsaXN0IG9iamVjdHMgdjIgd2l0aCBtZXRhZGF0YSBpbiBhIGJ1Y2tldFxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGlzdE9iamVjdHNWMldpdGhNZXRhZGF0YSh4bWwpIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBvYmplY3RzOiBbXSxcbiAgICBpc1RydW5jYXRlZDogZmFsc2UsXG4gIH1cbiAgdmFyIHhtbG9iaiA9IHBhcnNlWG1sKHhtbClcbiAgaWYgKCF4bWxvYmouTGlzdEJ1Y2tldFJlc3VsdCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFhNTEVycm9yKCdNaXNzaW5nIHRhZzogXCJMaXN0QnVja2V0UmVzdWx0XCInKVxuICB9XG4gIHhtbG9iaiA9IHhtbG9iai5MaXN0QnVja2V0UmVzdWx0XG4gIGlmICh4bWxvYmouSXNUcnVuY2F0ZWQpIHtcbiAgICByZXN1bHQuaXNUcnVuY2F0ZWQgPSB4bWxvYmouSXNUcnVuY2F0ZWRcbiAgfVxuICBpZiAoeG1sb2JqLk5leHRDb250aW51YXRpb25Ub2tlbikge1xuICAgIHJlc3VsdC5uZXh0Q29udGludWF0aW9uVG9rZW4gPSB4bWxvYmouTmV4dENvbnRpbnVhdGlvblRva2VuXG4gIH1cblxuICBpZiAoeG1sb2JqLkNvbnRlbnRzKSB7XG4gICAgdG9BcnJheSh4bWxvYmouQ29udGVudHMpLmZvckVhY2goKGNvbnRlbnQpID0+IHtcbiAgICAgIHZhciBuYW1lID0gc2FuaXRpemVPYmplY3RLZXkoY29udGVudC5LZXkpXG4gICAgICB2YXIgbGFzdE1vZGlmaWVkID0gbmV3IERhdGUoY29udGVudC5MYXN0TW9kaWZpZWQpXG4gICAgICB2YXIgZXRhZyA9IHNhbml0aXplRVRhZyhjb250ZW50LkVUYWcpXG4gICAgICB2YXIgc2l6ZSA9IGNvbnRlbnQuU2l6ZVxuICAgICAgdmFyIG1ldGFkYXRhXG4gICAgICBpZiAoY29udGVudC5Vc2VyTWV0YWRhdGEgIT0gbnVsbCkge1xuICAgICAgICBtZXRhZGF0YSA9IHRvQXJyYXkoY29udGVudC5Vc2VyTWV0YWRhdGEpWzBdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXRhZGF0YSA9IG51bGxcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5vYmplY3RzLnB1c2goeyBuYW1lLCBsYXN0TW9kaWZpZWQsIGV0YWcsIHNpemUsIG1ldGFkYXRhIH0pXG4gICAgfSlcbiAgfVxuXG4gIGlmICh4bWxvYmouQ29tbW9uUHJlZml4ZXMpIHtcbiAgICB0b0FycmF5KHhtbG9iai5Db21tb25QcmVmaXhlcykuZm9yRWFjaCgoY29tbW9uUHJlZml4KSA9PiB7XG4gICAgICByZXN1bHQub2JqZWN0cy5wdXNoKHsgcHJlZml4OiBzYW5pdGl6ZU9iamVjdEtleSh0b0FycmF5KGNvbW1vblByZWZpeC5QcmVmaXgpWzBdKSwgc2l6ZTogMCB9KVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPYmplY3RSZXRlbnRpb25Db25maWcoeG1sKSB7XG4gIGNvbnN0IHhtbE9iaiA9IHBhcnNlWG1sKHhtbClcbiAgY29uc3QgcmV0ZW50aW9uQ29uZmlnID0geG1sT2JqLlJldGVudGlvblxuXG4gIHJldHVybiB7XG4gICAgbW9kZTogcmV0ZW50aW9uQ29uZmlnLk1vZGUsXG4gICAgcmV0YWluVW50aWxEYXRlOiByZXRlbnRpb25Db25maWcuUmV0YWluVW50aWxEYXRlLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9iamVjdExlZ2FsSG9sZENvbmZpZyh4bWwpIHtcbiAgY29uc3QgeG1sT2JqID0gcGFyc2VYbWwoeG1sKVxuICByZXR1cm4geG1sT2JqLkxlZ2FsSG9sZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkUGFydFBhcnNlcih4bWwpIHtcbiAgY29uc3QgeG1sT2JqID0gcGFyc2VYbWwoeG1sKVxuICBjb25zdCByZXNwRWwgPSB4bWxPYmouQ29weVBhcnRSZXN1bHRcbiAgcmV0dXJuIHJlc3BFbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlT2JqZWN0c1BhcnNlcih4bWwpIHtcbiAgY29uc3QgeG1sT2JqID0gcGFyc2VYbWwoeG1sKVxuICBpZiAoeG1sT2JqLkRlbGV0ZVJlc3VsdCAmJiB4bWxPYmouRGVsZXRlUmVzdWx0LkVycm9yKSB7XG4gICAgLy8gcmV0dXJuIGVycm9ycyBhcyBhcnJheSBhbHdheXMuIGFzIHRoZSByZXNwb25zZSBpcyBvYmplY3QgaW4gY2FzZSBvZiBzaW5nbGUgb2JqZWN0IHBhc3NlZCBpbiByZW1vdmVPYmplY3RzXG4gICAgcmV0dXJuIHRvQXJyYXkoeG1sT2JqLkRlbGV0ZVJlc3VsdC5FcnJvcilcbiAgfVxuICByZXR1cm4gW11cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsSUFBQUEsY0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsTUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQWlILFNBQUFJLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEsa0NBQUFDLGlCQUFBLE9BQUFELE9BQUEsUUFBQUUsZ0JBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxXQUFBLFdBQUFBLFdBQUEsR0FBQUcsZ0JBQUEsR0FBQUQsaUJBQUEsS0FBQUYsV0FBQTtBQUFBLFNBQUFILHdCQUFBTyxHQUFBLEVBQUFKLFdBQUEsU0FBQUEsV0FBQSxJQUFBSSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxXQUFBRCxHQUFBLFFBQUFBLEdBQUEsb0JBQUFBLEdBQUEsd0JBQUFBLEdB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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZmFzdFhtbFBhcnNlciIsInJlcXVpcmUiLCJlcnJvcnMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9oZWxwZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiZnhwV2l0aG91dE51bVBhcnNlciIsIlhNTFBhcnNlciIsIm51bWJlclBhcnNlT3B0aW9ucyIsInNraXBMaWtlIiwicGFyc2VCdWNrZXROb3RpZmljYXRpb24iLCJ4bWwiLCJyZXN1bHQiLCJUb3BpY0NvbmZpZ3VyYXRpb24iLCJRdWV1ZUNvbmZpZ3VyYXRpb24iLCJDbG91ZEZ1bmN0aW9uQ29uZmlndXJhdGlvbiIsImdlbkV2ZW50cyIsImV2ZW50cyIsInRvQXJyYXkiLCJmb3JFYWNoIiwiczNldmVudCIsInB1c2giLCJnZW5GaWx0ZXJSdWxlcyIsImZpbHRlcnMiLCJTM0tleSIsIkZpbHRlclJ1bGUiLCJydWxlIiwiTmFtZSIsIlZhbHVlIiwieG1sb2JqIiwicGFyc2VYbWwiLCJOb3RpZmljYXRpb25Db25maWd1cmF0aW9uIiwiY29uZmlnIiwiSWQiLCJUb3BpYyIsIkV2ZW50IiwiRmlsdGVyIiwiUXVldWUiLCJDbG91ZEZ1bmN0aW9uIiwiZm9ybWF0T2JqSW5mbyIsImNvbnRlbnQiLCJvcHRzIiwiS2V5IiwiTGFzdE1vZGlmaWVkIiwiRVRhZyIsIlNpemUiLCJWZXJzaW9uSWQiLCJJc0xhdGVzdCIsImlzT2JqZWN0IiwibmFtZSIsInNhbml0aXplT2JqZWN0S2V5IiwibGFzdE1vZGlmaWVkIiwiRGF0ZSIsImV0YWciLCJzYW5pdGl6ZUVUYWciLCJzaXplIiwic2FuaXRpemVTaXplIiwidmVyc2lvbklkIiwiaXNMYXRlc3QiLCJpc0RlbGV0ZU1hcmtlciIsIklzRGVsZXRlTWFya2VyIiwicGFyc2VMaXN0T2JqZWN0cyIsIm9iamVjdHMiLCJpc1RydW5jYXRlZCIsIm5leHRNYXJrZXIiLCJuZXh0VmVyc2lvbktleU1hcmtlciIsInBhcnNlIiwicGFyc2VDb21tb25QcmVmaXhlc0VudGl0eSIsInJlc3BvbnNlRW50aXR5IiwiY29tbW9uUHJlZml4IiwicHJlZml4IiwiUHJlZml4IiwibGlzdEJ1Y2tldFJlc3VsdCIsIkxpc3RCdWNrZXRSZXN1bHQiLCJsaXN0VmVyc2lvbnNSZXN1bHQiLCJMaXN0VmVyc2lvbnNSZXN1bHQiLCJJc1RydW5jYXRlZCIsIkNvbnRlbnRzIiwiTmV4dE1hcmtlciIsImxlbmd0aCIsIkNvbW1vblByZWZpeGVzIiwiVmVyc2lvbiIsIkRlbGV0ZU1hcmtlciIsIk5leHRLZXlNYXJrZXIiLCJOZXh0VmVyc2lvbklkTWFya2VyIiwidmVyc2lvbklkTWFya2VyIiwicGFyc2VMaXN0T2JqZWN0c1YyIiwiSW52YWxpZFhNTEVycm9yIiwiTmV4dENvbnRpbnVhdGlvblRva2VuIiwibmV4dENvbnRpbnVhdGlvblRva2VuIiwicGFyc2VMaXN0T2JqZWN0c1YyV2l0aE1ldGFkYXRhIiwibWV0YWRhdGEiLCJVc2VyTWV0YWRhdGEiXSwic291cmNlcyI6WyJ4bWwtcGFyc2Vycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogTWluSU8gSmF2YXNjcmlwdCBMaWJyYXJ5IGZvciBBbWF6b24gUzMgQ29tcGF0aWJsZSBDbG91ZCBTdG9yYWdlLCAoQykgMjAxNSBNaW5JTywgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBYTUxQYXJzZXIgfSBmcm9tICdmYXN0LXhtbC1wYXJzZXInXG5cbmltcG9ydCAqIGFzIGVycm9ycyBmcm9tICcuL2Vycm9ycy50cydcbmltcG9ydCB7IGlzT2JqZWN0LCBwYXJzZVhtbCwgc2FuaXRpemVFVGFnLCBzYW5pdGl6ZU9iamVjdEtleSwgc2FuaXRpemVTaXplLCB0b0FycmF5IH0gZnJvbSAnLi9pbnRlcm5hbC9oZWxwZXIudHMnXG5cbmNvbnN0IGZ4cFdpdGhvdXROdW1QYXJzZXIgPSBuZXcgWE1MUGFyc2VyKHtcbiAgbnVtYmVyUGFyc2VPcHRpb25zOiB7XG4gICAgc2tpcExpa2U6IC8uLyxcbiAgfSxcbn0pXG5cbi8vIHBhcnNlIFhNTCByZXNwb25zZSBmb3IgYnVja2V0IG5vdGlmaWNhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQnVja2V0Tm90aWZpY2F0aW9uKHhtbCkge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIFRvcGljQ29uZmlndXJhdGlvbjogW10sXG4gICAgUXVldWVDb25maWd1cmF0aW9uOiBbXSxcbiAgICBDbG91ZEZ1bmN0aW9uQ29uZmlndXJhdGlvbjogW10sXG4gIH1cbiAgLy8gUGFyc2UgdGhlIGV2ZW50cyBsaXN0XG4gIHZhciBnZW5FdmVudHMgPSBmdW5jdGlvbiAoZXZlbnRzKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdXG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgdG9BcnJheShldmVudHMpLmZvckVhY2goKHMzZXZlbnQpID0+IHtcbiAgICAgICAgcmVzdWx0LnB1c2goczNldmVudClcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuICAvLyBQYXJzZSBhbGwgZmlsdGVyIHJ1bGVzXG4gIHZhciBnZW5GaWx0ZXJSdWxlcyA9IGZ1bmN0aW9uIChmaWx0ZXJzKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIGZpbHRlcnMgPSB0b0FycmF5KGZpbHRlcnMpXG4gICAgICBpZiAoZmlsdGVyc1swXS5TM0tleSkge1xuICAgICAgICBmaWx0ZXJzWzBdLlMzS2V5ID0gdG9BcnJheShmaWx0ZXJzWzBdLlMzS2V5KVxuICAgICAgICBpZiAoZmlsdGVyc1swXS5TM0tleVswXS5GaWx0ZXJSdWxlKSB7XG4gICAgICAgICAgdG9BcnJheShmaWx0ZXJzWzBdLlMzS2V5WzBdLkZpbHRlclJ1bGUpLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgICAgICAgIHZhciBOYW1lID0gdG9BcnJheShydWxlLk5hbWUpWzBdXG4gICAgICAgICAgICB2YXIgVmFsdWUgPSB0b0FycmF5KHJ1bGUuVmFsdWUpWzBdXG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IE5hbWUsIFZhbHVlIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICB2YXIgeG1sb2JqID0gcGFyc2VYbWwoeG1sKVxuICB4bWxvYmogPSB4bWxvYmouTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblxuXG4gIC8vIFBhcnNlIGFsbCB0b3BpYyBjb25maWd1cmF0aW9ucyBpbiB0aGUgeG1sXG4gIGlmICh4bWxvYmouVG9waWNDb25maWd1cmF0aW9uKSB7XG4gICAgdG9BcnJheSh4bWxvYmouVG9waWNDb25maWd1cmF0aW9uKS5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgIHZhciBJZCA9IHRvQXJyYXkoY29uZmlnLklkKVswXVxuICAgICAgdmFyIFRvcGljID0gdG9BcnJheShjb25maWcuVG9waWMpWzBdXG4gICAgICB2YXIgRXZlbnQgPSBnZW5FdmVudHMoY29uZmlnLkV2ZW50KVxuICAgICAgdmFyIEZpbHRlciA9IGdlbkZpbHRlclJ1bGVzKGNvbmZpZy5GaWx0ZXIpXG4gICAgICByZXN1bHQuVG9waWNDb25maWd1cmF0aW9uLnB1c2goeyBJZCwgVG9waWMsIEV2ZW50LCBGaWx0ZXIgfSlcbiAgICB9KVxuICB9XG4gIC8vIFBhcnNlIGFsbCB0b3BpYyBjb25maWd1cmF0aW9ucyBpbiB0aGUgeG1sXG4gIGlmICh4bWxvYmouUXVldWVDb25maWd1cmF0aW9uKSB7XG4gICAgdG9BcnJheSh4bWxvYmouUXVldWVDb25maWd1cmF0aW9uKS5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgIHZhciBJZCA9IHRvQXJyYXkoY29uZmlnLklkKVswXVxuICAgICAgdmFyIFF1ZXVlID0gdG9BcnJheShjb25maWcuUXVldWUpWzBdXG4gICAgICB2YXIgRXZlbnQgPSBnZW5FdmVudHMoY29uZmlnLkV2ZW50KVxuICAgICAgdmFyIEZpbHRlciA9IGdlbkZpbHRlclJ1bGVzKGNvbmZpZy5GaWx0ZXIpXG4gICAgICByZXN1bHQuUXVldWVDb25maWd1cmF0aW9uLnB1c2goeyBJZCwgUXVldWUsIEV2ZW50LCBGaWx0ZXIgfSlcbiAgICB9KVxuICB9XG4gIC8vIFBhcnNlIGFsbCBRdWV1ZUNvbmZpZ3VyYXRpb24gYXJyYXlzXG4gIGlmICh4bWxvYmouQ2xvdWRGdW5jdGlvbkNvbmZpZ3VyYXRpb24pIHtcbiAgICB0b0FycmF5KHhtbG9iai5DbG91ZEZ1bmN0aW9uQ29uZmlndXJhdGlvbikuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICB2YXIgSWQgPSB0b0FycmF5KGNvbmZpZy5JZClbMF1cbiAgICAgIHZhciBDbG91ZEZ1bmN0aW9uID0gdG9BcnJheShjb25maWcuQ2xvdWRGdW5jdGlvbilbMF1cbiAgICAgIHZhciBFdmVudCA9IGdlbkV2ZW50cyhjb25maWcuRXZlbnQpXG4gICAgICB2YXIgRmlsdGVyID0gZ2VuRmlsdGVyUnVsZXMoY29uZmlnLkZpbHRlcilcbiAgICAgIHJlc3VsdC5DbG91ZEZ1bmN0aW9uQ29uZmlndXJhdGlvbi5wdXNoKHsgSWQsIENsb3VkRnVuY3Rpb24sIEV2ZW50LCBGaWx0ZXIgfSlcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5jb25zdCBmb3JtYXRPYmpJbmZvID0gKGNvbnRlbnQsIG9wdHMgPSB7fSkgPT4ge1xuICBsZXQgeyBLZXksIExhc3RNb2RpZmllZCwgRVRhZywgU2l6ZSwgVmVyc2lvbklkLCBJc0xhdGVzdCB9ID0gY29udGVudFxuXG4gIGlmICghaXNPYmplY3Qob3B0cykpIHtcbiAgICBvcHRzID0ge31cbiAgfVxuXG4gIGNvbnN0IG5hbWUgPSBzYW5pdGl6ZU9iamVjdEtleSh0b0FycmF5KEtleSlbMF0pXG4gIGNvbnN0IGxhc3RNb2RpZmllZCA9IG5ldyBEYXRlKHRvQXJyYXkoTGFzdE1vZGlmaWVkKVswXSlcbiAgY29uc3QgZXRhZyA9IHNhbml0aXplRVRhZyh0b0FycmF5KEVUYWcpWzBdKVxuICBjb25zdCBzaXplID0gc2FuaXRpemVTaXplKFNpemUpXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lLFxuICAgIGxhc3RNb2RpZmllZCxcbiAgICBldGFnLFxuICAgIHNpemUsXG4gICAgdmVyc2lvbklkOiBWZXJzaW9uSWQsXG4gICAgaXNMYXRlc3Q6IElzTGF0ZXN0LFxuICAgIGlzRGVsZXRlTWFya2VyOiBvcHRzLklzRGVsZXRlTWFya2VyID8gb3B0cy5Jc0RlbGV0ZU1hcmtlciA6IGZhbHNlLFxuICB9XG59XG5cbi8vIHBhcnNlIFhNTCByZXNwb25zZSBmb3IgbGlzdCBvYmplY3RzIGluIGEgYnVja2V0XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMaXN0T2JqZWN0cyh4bWwpIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBvYmplY3RzOiBbXSxcbiAgICBpc1RydW5jYXRlZDogZmFsc2UsXG4gIH1cbiAgbGV0IGlzVHJ1bmNhdGVkID0gZmFsc2VcbiAgbGV0IG5leHRNYXJrZXIsIG5leHRWZXJzaW9uS2V5TWFya2VyXG4gIGNvbnN0IHhtbG9iaiA9IGZ4cFdpdGhvdXROdW1QYXJzZXIucGFyc2UoeG1sKVxuXG4gIGNvbnN0IHBhcnNlQ29tbW9uUHJlZml4ZXNFbnRpdHkgPSAocmVzcG9uc2VFbnRpdHkpID0+IHtcbiAgICBpZiAocmVzcG9uc2VFbnRpdHkpIHtcbiAgICAgIHRvQXJyYXkocmVzcG9uc2VFbnRpdHkpLmZvckVhY2goKGNvbW1vblByZWZpeCkgPT4ge1xuICAgICAgICByZXN1bHQub2JqZWN0cy5wdXNoKHsgcHJlZml4OiBzYW5pdGl6ZU9iamVjdEtleSh0b0FycmF5KGNvbW1vblByZWZpeC5QcmVmaXgpWzBdKSwgc2l6ZTogMCB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBsaXN0QnVja2V0UmVzdWx0ID0geG1sb2JqLkxpc3RCdWNrZXRSZXN1bHRcbiAgY29uc3QgbGlzdFZlcnNpb25zUmVzdWx0ID0geG1sb2JqLkxpc3RWZXJzaW9uc1Jlc3VsdFxuXG4gIGlmIChsaXN0QnVja2V0UmVzdWx0KSB7XG4gICAgaWYgKGxpc3RCdWNrZXRSZXN1bHQuSXNUcnVuY2F0ZWQpIHtcbiAgICAgIGlzVHJ1bmNhdGVkID0gbGlzdEJ1Y2tldFJlc3VsdC5Jc1RydW5jYXRlZFxuICAgIH1cbiAgICBpZiAobGlzdEJ1Y2tldFJlc3VsdC5Db250ZW50cykge1xuICAgICAgdG9BcnJheShsaXN0QnVja2V0UmVzdWx0LkNvbnRlbnRzKS5mb3JFYWNoKChjb250ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBzYW5pdGl6ZU9iamVjdEtleSh0b0FycmF5KGNvbnRlbnQuS2V5KVswXSlcbiAgICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gbmV3IERhdGUodG9BcnJheShjb250ZW50Lkxhc3RNb2RpZmllZClbMF0pXG4gICAgICAgIGNvbnN0IGV0YWcgPSBzYW5pdGl6ZUVUYWcodG9BcnJheShjb250ZW50LkVUYWcpWzBdKVxuICAgICAgICBjb25zdCBzaXplID0gc2FuaXRpemVTaXplKGNvbnRlbnQuU2l6ZSlcbiAgICAgICAgcmVzdWx0Lm9iamVjdHMucHVzaCh7IG5hbWUsIGxhc3RNb2RpZmllZCwgZXRhZywgc2l6ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAobGlzdEJ1Y2tldFJlc3VsdC5OZXh0TWFya2VyKSB7XG4gICAgICBuZXh0TWFya2VyID0gbGlzdEJ1Y2tldFJlc3VsdC5OZXh0TWFya2VyXG4gICAgfSBlbHNlIGlmIChpc1RydW5jYXRlZCAmJiByZXN1bHQub2JqZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0TWFya2VyID0gcmVzdWx0Lm9iamVjdHNbcmVzdWx0Lm9iamVjdHMubGVuZ3RoIC0gMV0ubmFtZVxuICAgIH1cbiAgICBwYXJzZUNvbW1vblByZWZpeGVzRW50aXR5KGxpc3RCdWNrZXRSZXN1bHQuQ29tbW9uUHJlZml4ZXMpXG4gIH1cblxuICBpZiAobGlzdFZlcnNpb25zUmVzdWx0KSB7XG4gICAgaWYgKGxpc3RWZXJzaW9uc1Jlc3VsdC5Jc1RydW5jYXRlZCkge1xuICAgICAgaXNUcnVuY2F0ZWQgPSBsaXN0VmVyc2lvbnNSZXN1bHQuSXNUcnVuY2F0ZWRcbiAgICB9XG5cbiAgICBpZiAobGlzdFZlcnNpb25zUmVzdWx0LlZlcnNpb24pIHtcbiAgICAgIHRvQXJyYXkobGlzdFZlcnNpb25zUmVzdWx0LlZlcnNpb24pLmZvckVhY2goKGNvbnRlbnQpID0+IHtcbiAgICAgICAgcmVzdWx0Lm9iamVjdHMucHVzaChmb3JtYXRPYmpJbmZvKGNvbnRlbnQpKVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGxpc3RWZXJzaW9uc1Jlc3VsdC5EZWxldGVNYXJrZXIpIHtcbiAgICAgIHRvQXJyYXkobGlzdFZlcnNpb25zUmVzdWx0LkRlbGV0ZU1hcmtlcikuZm9yRWFjaCgoY29udGVudCkgPT4ge1xuICAgICAgICByZXN1bHQub2JqZWN0cy5wdXNoKGZvcm1hdE9iakluZm8oY29udGVudCwgeyBJc0RlbGV0ZU1hcmtlcjogdHJ1ZSB9KSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGxpc3RWZXJzaW9uc1Jlc3VsdC5OZXh0S2V5TWFya2VyKSB7XG4gICAgICBuZXh0VmVyc2lvbktleU1hcmtlciA9IGxpc3RWZXJzaW9uc1Jlc3VsdC5OZXh0S2V5TWFya2VyXG4gICAgfVxuICAgIGlmIChsaXN0VmVyc2lvbnNSZXN1bHQuTmV4dFZlcnNpb25JZE1hcmtlcikge1xuICAgICAgcmVzdWx0LnZlcnNpb25JZE1hcmtlciA9IGxpc3RWZXJzaW9uc1Jlc3VsdC5OZXh0VmVyc2lvbklkTWFya2VyXG4gICAgfVxuICAgIHBhcnNlQ29tbW9uUHJlZml4ZXNFbnRpdHkobGlzdFZlcnNpb25zUmVzdWx0LkNvbW1vblByZWZpeGVzKVxuICB9XG5cbiAgcmVzdWx0LmlzVHJ1bmNhdGVkID0gaXNUcnVuY2F0ZWRcbiAgaWYgKGlzVHJ1bmNhdGVkKSB7XG4gICAgcmVzdWx0Lm5leHRNYXJrZXIgPSBuZXh0VmVyc2lvbktleU1hcmtlciB8fCBuZXh0TWFya2VyXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBwYXJzZSBYTUwgcmVzcG9uc2UgZm9yIGxpc3Qgb2JqZWN0cyB2MiBpbiBhIGJ1Y2tldFxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGlzdE9iamVjdHNWMih4bWwpIHtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBvYmplY3RzOiBbXSxcbiAgICBpc1RydW5jYXRlZDogZmFsc2UsXG4gIH1cbiAgdmFyIHhtbG9iaiA9IHBhcnNlWG1sKHhtbClcbiAgaWYgKCF4bWxvYmouTGlzdEJ1Y2tldFJlc3VsdCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFhNTEVycm9yKCdNaXNzaW5nIHRhZzogXCJMaXN0QnVja2V0UmVzdWx0XCInKVxuICB9XG4gIHhtbG9iaiA9IHhtbG9iai5MaXN0QnVja2V0UmVzdWx0XG4gIGlmICh4bWxvYmouSXNUcnVuY2F0ZWQpIHtcbiAgICByZXN1bHQuaXNUcnVuY2F0ZWQgPSB4bWxvYmouSXNUcnVuY2F0ZWRcbiAgfVxuICBpZiAoeG1sb2JqLk5leHRDb250aW51YXRpb25Ub2tlbikge1xuICAgIHJlc3VsdC5uZXh0Q29udGludWF0aW9uVG9rZW4gPSB4bWxvYmouTmV4dENvbnRpbnVhdGlvblRva2VuXG4gIH1cbiAgaWYgKHhtbG9iai5Db250ZW50cykge1xuICAgIHRvQXJyYXkoeG1sb2JqLkNvbnRlbnRzKS5mb3JFYWNoKChjb250ZW50KSA9PiB7XG4gICAgICB2YXIgbmFtZSA9IHNhbml0aXplT2JqZWN0S2V5KHRvQXJyYXkoY29udGVudC5LZXkpWzBdKVxuICAgICAgdmFyIGxhc3RNb2RpZmllZCA9IG5ldyBEYXRlKGNvbnRlbnQuTGFzdE1vZGlmaWVkKVxuICAgICAgdmFyIGV0YWcgPSBzYW5pdGl6ZUVUYWcoY29udGVudC5FVGFnKVxuICAgICAgdmFyIHNpemUgPSBjb250ZW50LlNpemVcbiAgICAgIHJlc3VsdC5vYmplY3RzLnB1c2goeyBuYW1lLCBsYXN0TW9kaWZpZWQsIGV0YWcsIHNpemUgfSlcbiAgICB9KVxuICB9XG4gIGlmICh4bWxvYmouQ29tbW9uUHJlZml4ZXMpIHtcbiAgICB0b0FycmF5KHhtbG9iai5Db21tb25QcmVmaXhlcykuZm9yRWFjaCgoY29tbW9uUHJlZml4KSA9PiB7XG4gICAgICByZXN1bHQub2JqZWN0cy5wdXNoKHsgcHJlZml4OiBzYW5pdGl6ZU9iamVjdEtleSh0b0FycmF5KGNvbW1vblByZWZpeC5QcmVmaXgpWzBdKSwgc2l6ZTogMCB9KVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBwYXJzZSBYTUwgcmVzcG9uc2UgZm9yIGxpc3Qgb2JqZWN0cyB2MiB3aXRoIG1ldGFkYXRhIGluIGEgYnVja2V0XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMaXN0T2JqZWN0c1YyV2l0aE1ldGFkYXRhKHhtbCkge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIG9iamVjdHM6IFtdLFxuICAgIGlzVHJ1bmNhdGVkOiBmYWxzZSxcbiAgfVxuICB2YXIgeG1sb2JqID0gcGFyc2VYbWwoeG1sKVxuICBpZiAoIXhtbG9iai5MaXN0QnVja2V0UmVzdWx0KSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkWE1MRXJyb3IoJ01pc3NpbmcgdGFnOiBcIkxpc3RCdWNrZXRSZXN1bHRcIicpXG4gIH1cbiAgeG1sb2JqID0geG1sb2JqLkxpc3RCdWNrZXRSZXN1bHRcbiAgaWYgKHhtbG9iai5Jc1RydW5jYXRlZCkge1xuICAgIHJlc3VsdC5pc1RydW5jYXRlZCA9IHhtbG9iai5Jc1RydW5jYXRlZFxuICB9XG4gIGlmICh4bWxvYmouTmV4dENvbnRpbnVhdGlvblRva2VuKSB7XG4gICAgcmVzdWx0Lm5leHRDb250aW51YXRpb25Ub2tlbiA9IHhtbG9iai5OZXh0Q29udGludWF0aW9uVG9rZW5cbiAgfVxuXG4gIGlmICh4bWxvYmouQ29udGVudHMpIHtcbiAgICB0b0FycmF5KHhtbG9iai5Db250ZW50cykuZm9yRWFjaCgoY29udGVudCkgPT4ge1xuICAgICAgdmFyIG5hbWUgPSBzYW5pdGl6ZU9iamVjdEtleShjb250ZW50LktleSlcbiAgICAgIHZhciBsYXN0TW9kaWZpZWQgPSBuZXcgRGF0ZShjb250ZW50Lkxhc3RNb2RpZmllZClcbiAgICAgIHZhciBldGFnID0gc2FuaXRpemVFVGFnKGNvbnRlbnQuRVRhZylcbiAgICAgIHZhciBzaXplID0gY29udGVudC5TaXplXG4gICAgICB2YXIgbWV0YWRhdGFcbiAgICAgIGlmIChjb250ZW50LlVzZXJNZXRhZGF0YSAhPSBudWxsKSB7XG4gICAgICAgIG1ldGFkYXRhID0gdG9BcnJheShjb250ZW50LlVzZXJNZXRhZGF0YSlbMF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1ldGFkYXRhID0gbnVsbFxuICAgICAgfVxuICAgICAgcmVzdWx0Lm9iamVjdHMucHVzaCh7IG5hbWUsIGxhc3RNb2RpZmllZCwgZXRhZywgc2l6ZSwgbWV0YWRhdGEgfSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKHhtbG9iai5Db21tb25QcmVmaXhlcykge1xuICAgIHRvQXJyYXkoeG1sb2JqLkNvbW1vblByZWZpeGVzKS5mb3JFYWNoKChjb21tb25QcmVmaXgpID0+IHtcbiAgICAgIHJlc3VsdC5vYmplY3RzLnB1c2goeyBwcmVmaXg6IHNhbml0aXplT2JqZWN0S2V5KHRvQXJyYXkoY29tbW9uUHJlZml4LlByZWZpeClbMF0pLCBzaXplOiAwIH0pXG4gICAgfSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWdCQSxJQUFBQSxjQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxNQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFBaUgsU0FBQUkseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLFdBQUEsV0FBQUEsV0FBQSxHQUFBRyxnQkFBQSxHQUFBRCxpQkFBQSxLQUFBRixXQUFBO0FBQUEsU0FBQUgsd0JBQUFPLEdBQUEsRUFBQUosV0FBQSxTQUFBQSxXQUFBLElBQUFJLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLFdBQUFELEdBQUEsUUFBQUEsR0FBQSxv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
{
"name": "minio",
"version": "8.0.0",
"version": "8.0.1",
"description": "S3 Compatible Cloud Storage client",

@@ -5,0 +5,0 @@ "main": "./dist/main/minio.js",

@@ -158,3 +158,3 @@ # 适用于Amazon S3兼容云存储的Minio JavaScript Library [![Slack](https://slack.min.io/slack?type=svg)](https://slack.min.io)

* [bucket-exists.mjs](https://github.com/minio/minio-js/blob/master/examples/bucket-exists.mjs)
* [make-bucket.js](https://github.com/minio/minio-js/blob/master/examples/make-bucket.js)
* [make-bucket.mjs](https://github.com/minio/minio-js/blob/master/examples/make-bucket.js)
* [remove-bucket.mjs](https://github.com/minio/minio-js/blob/master/examples/remove-bucket.mjs)

@@ -177,5 +177,5 @@ * [list-incomplete-uploads.js](https://github.com/minio/minio-js/blob/master/examples/list-incomplete-uploads.js)

#### 完整示例 : Presigned操作
* [presigned-getobject.js](https://github.com/minio/minio-js/blob/master/examples/presigned-getobject.js)
* [presigned-putobject.js](https://github.com/minio/minio-js/blob/master/examples/presigned-putobject.js)
* [presigned-postpolicy.js](https://github.com/minio/minio-js/blob/master/examples/presigned-postpolicy.js)
* [presigned-getobject.mjs](https://github.com/minio/minio-js/blob/master/examples/presigned-getobject.js)
* [presigned-putobject.mjs](https://github.com/minio/minio-js/blob/master/examples/presigned-putobject.js)
* [presigned-postpolicy.mjs](https://github.com/minio/minio-js/blob/master/examples/presigned-postpolicy.js)

@@ -182,0 +182,0 @@ #### 完整示例 : 存储桶通知

@@ -171,2 +171,3 @@ # MinIO JavaScript Library for Amazon S3 Compatible Cloud Storage [![Slack](https://slack.min.io/slack?type=svg)](https://slack.min.io)

- [`presignedUrl`](https://min.io/docs/minio/linux/developers/javascript/API.html#presignedUrl)
- [`presignedGetObject`](https://min.io/docs/minio/linux/developers/javascript/API.html#presignedGetObject)

@@ -197,3 +198,3 @@ - [`presignedPutObject`](https://min.io/docs/minio/linux/developers/javascript/API.html#presignedPutObject)

- [bucket-exists.mjs](https://github.com/minio/minio-js/blob/master/examples/bucket-exists.mjs)
- [make-bucket.js](https://github.com/minio/minio-js/blob/master/examples/make-bucket.js)
- [make-bucket.mjs](https://github.com/minio/minio-js/blob/master/examples/make-bucket.js)
- [remove-bucket.mjs](https://github.com/minio/minio-js/blob/master/examples/remove-bucket.mjs)

@@ -235,17 +236,17 @@ - [list-incomplete-uploads.js](https://github.com/minio/minio-js/blob/master/examples/list-incomplete-uploads.js)

- [stat-object.mjs](https://github.com/minio/minio-js/blob/master/examples/stat-object.mjs)
- [get-object-retention.js](https://github.com/minio/minio-js/blob/master/examples/get-object-retention.js)
- [put-object-retention.js](https://github.com/minio/minio-js/blob/master/examples/put-object-retention.js)
- [get-object-retention.mjs](https://github.com/minio/minio-js/blob/master/examples/get-object-retention.mjs)
- [put-object-retention.mjs](https://github.com/minio/minio-js/blob/master/examples/put-object-retention.mjs)
- [put-object-tagging.mjs](https://github.com/minio/minio-js/blob/master/examples/put-object-tagging.js)
- [get-object-tagging.mjs](https://github.com/minio/minio-js/blob/master/examples/get-object-tagging.mjs)
- [remove-object-tagging.mjs](https://github.com/minio/minio-js/blob/master/examples/remove-object-tagging.js)
- [set-object-legal-hold.js](https://github.com/minio/minio-js/blob/master/examples/set-object-legalhold.mjs)
- [get-object-legal-hold.js](https://github.com/minio/minio-js/blob/master/examples/get-object-legal-hold.mjs)
- [compose-object.js](https://github.com/minio/minio-js/blob/master/examples/compose-object.js)
- [select-object-content.js](https://github.com/minio/minio-js/blob/master/examples/select-object-content.mjs)
- [set-object-legal-hold.mjs](https://github.com/minio/minio-js/blob/master/examples/set-object-legalhold.mjs)
- [get-object-legal-hold.mjs](https://github.com/minio/minio-js/blob/master/examples/get-object-legal-hold.mjs)
- [compose-object.mjs](https://github.com/minio/minio-js/blob/master/examples/compose-object.js)
- [select-object-content.mjs](https://github.com/minio/minio-js/blob/master/examples/select-object-content.mjs)
#### Presigned Operations
- [presigned-getobject.js](https://github.com/minio/minio-js/blob/master/examples/presigned-getobject.js)
- [presigned-putobject.js](https://github.com/minio/minio-js/blob/master/examples/presigned-putobject.js)
- [presigned-postpolicy.js](https://github.com/minio/minio-js/blob/master/examples/presigned-postpolicy.js)
- [presigned-getobject.mjs](https://github.com/minio/minio-js/blob/master/examples/presigned-getobject.js)
- [presigned-putobject.mjs](https://github.com/minio/minio-js/blob/master/examples/presigned-putobject.js)
- [presigned-postpolicy.mjs](https://github.com/minio/minio-js/blob/master/examples/presigned-postpolicy.js)

@@ -252,0 +253,0 @@ #### Bucket Notification Operations

@@ -24,2 +24,4 @@ import * as fs from 'node:fs'

export const PRESIGN_EXPIRY_DAYS_MAX = 24 * 60 * 60 * 7 // 7 days in seconds
export interface ICopySourceOptions {

@@ -26,0 +28,0 @@ Bucket: string

import type * as http from 'node:http'
import type { Readable as ReadableStream } from 'node:stream'
import type { CopyDestinationOptions, CopySourceOptions } from '../helpers.ts'
import type { CopyConditions } from './copy-conditions.ts'
export type VersionIdentificator = {

@@ -8,2 +11,8 @@ versionId?: string

export type GetObjectOpts = VersionIdentificator & {
SSECustomerAlgorithm?: string
SSECustomerKey?: string
SSECustomerKeyMD5?: string
}
export type Binary = string | Buffer

@@ -258,7 +267,2 @@

export type BucketVersioningConfiguration = {
Status: VersioningEnabled | VersioningSuspended
// TODO add ExcludedPrefixes, ExcludeFolders which are part of MinIO's extension, as an enhancement.
}
export type TaggingOpts = {

@@ -322,6 +326,6 @@ versionId: string

export type Expiration = {
Date: string
Date?: string
Days: number
DeleteMarker: boolean
DeleteAll: boolean
DeleteMarker?: boolean
DeleteAll?: boolean
}

@@ -388,1 +392,75 @@

}
export type GetObjectRetentionOpts = {
versionId: string
}
export type ObjectRetentionInfo = {
mode: RETENTION_MODES
retainUntilDate: string
}
export type RemoveObjectsEntry = {
name: string
versionId?: string
}
export type ObjectName = string
export type RemoveObjectsParam = ObjectName[] | RemoveObjectsEntry[]
export type RemoveObjectsRequestEntry = {
Key: string
VersionId?: string
}
export type RemoveObjectsResponse =
| null
| undefined
| {
Error?: {
Code?: string
Message?: string
Key?: string
VersionId?: string
}
}
export type CopyObjectResultV1 = {
etag: string
lastModified: string | Date
}
export type CopyObjectResultV2 = {
Bucket?: string
Key?: string
LastModified: string | Date
MetaData?: ResponseHeader
VersionId?: string | null
SourceVersionId?: string | null
Etag?: string
Size?: number
}
export type CopyObjectResult = CopyObjectResultV1 | CopyObjectResultV2
export type CopyObjectParams = [CopySourceOptions, CopyDestinationOptions] | [string, string, string, CopyConditions?]
export type ExcludedPrefix = {
Prefix: string
}
export type BucketVersioningConfiguration = {
Status: VersioningEnabled | VersioningSuspended
/* Below are minio only extensions */
MFADelete?: string
ExcludedPrefixes?: ExcludedPrefix[]
ExcludeFolders?: boolean
}
export type UploadPartConfig = {
bucketName: string
objectName: string
uploadID: string
partNumber: number
headers: RequestHeaders
sourceObj: string
}
export type PreSignRequestParams = { [key: string]: string }

@@ -11,3 +11,9 @@ import type * as http from 'node:http'

import { readAsString } from './response.ts'
import type { BucketItemFromList, BucketItemWithMetadata, ObjectLockInfo, ReplicationConfig } from './type.ts'
import type {
BucketItemFromList,
BucketItemWithMetadata,
CopyObjectResultV1,
ObjectLockInfo,
ReplicationConfig,
} from './type.ts'
import { RETENTION_VALIDITY_UNITS } from './type.ts'

@@ -552,1 +558,51 @@

}
export function parseObjectRetentionConfig(xml: string) {
const xmlObj = parseXml(xml)
const retentionConfig = xmlObj.Retention
return {
mode: retentionConfig.Mode,
retainUntilDate: retentionConfig.RetainUntilDate,
}
}
export function removeObjectsParser(xml: string) {
const xmlObj = parseXml(xml)
if (xmlObj.DeleteResult && xmlObj.DeleteResult.Error) {
// return errors as array always. as the response is object in case of single object passed in removeObjects
return toArray(xmlObj.DeleteResult.Error)
}
return []
}
// parse XML response for copy object
export function parseCopyObject(xml: string): CopyObjectResultV1 {
const result: CopyObjectResultV1 = {
etag: '',
lastModified: '',
}
let xmlobj = parseXml(xml)
if (!xmlobj.CopyObjectResult) {
throw new errors.InvalidXMLError('Missing tag: "CopyObjectResult"')
}
xmlobj = xmlobj.CopyObjectResult
if (xmlobj.ETag) {
result.etag = xmlobj.ETag.replace(/^"/g, '')
.replace(/"$/g, '')
.replace(/^&quot;/g, '')
.replace(/&quot;$/g, '')
.replace(/^&#34;/g, '')
.replace(/&#34;$/g, '')
}
if (xmlobj.LastModified) {
result.lastModified = new Date(xmlobj.LastModified)
}
return result
}
export function uploadPartParser(xml: string) {
const xmlObj = parseXml(xml)
const respEl = xmlObj.CopyPartResult
return respEl
}
// imported from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/93cfb0ec069731dcdfc31464788613f7cddb8192/types/minio/index.d.ts
/* eslint-disable @typescript-eslint/no-explicit-any */
import type {
CopyDestinationOptions,
CopySourceOptions,
LEGAL_HOLD_STATUS,
RETENTION_MODES,
RETENTION_VALIDITY_UNITS,
} from './helpers.ts'
import type { LEGAL_HOLD_STATUS, RETENTION_MODES, RETENTION_VALIDITY_UNITS } from './helpers.ts'
import type { ClientOptions, NoResultCallback, RemoveOptions } from './internal/client.ts'

@@ -53,3 +47,2 @@ import { TypedClient } from './internal/client.ts'

Tag,
VersionIdentificator,
} from './internal/type.ts'

@@ -152,104 +145,2 @@ import type { NotificationConfig, NotificationEvent, NotificationPoller } from './notification.ts'

copyObject(
bucketName: string,
objectName: string,
sourceObject: string,
conditions: CopyConditions,
callback: ResultCallback<BucketItemCopy>,
): void
copyObject(
bucketName: string,
objectName: string,
sourceObject: string,
conditions: CopyConditions,
): Promise<BucketItemCopy>
removeObjects(bucketName: string, objectsList: string[], callback: NoResultCallback): void
removeObjects(bucketName: string, objectsList: string[]): Promise<void>
removeIncompleteUpload(bucketName: string, objectName: string, callback: NoResultCallback): void
removeIncompleteUpload(bucketName: string, objectName: string): Promise<void>
getObjectRetention(
bucketName: string,
objectName: string,
options: VersionIdentificator,
callback: ResultCallback<Retention>,
): void
getObjectRetention(bucketName: string, objectName: string, options: VersionIdentificator): Promise<Retention>
composeObject(
destObjConfig: CopyDestinationOptions,
sourceObjList: CopySourceOptions[],
callback: ResultCallback<SourceObjectStats>,
): void
composeObject(destObjConfig: CopyDestinationOptions, sourceObjList: CopySourceOptions[]): Promise<SourceObjectStats>
// Presigned operations
presignedUrl(httpMethod: string, bucketName: string, objectName: string, callback: ResultCallback<string>): void
presignedUrl(
httpMethod: string,
bucketName: string,
objectName: string,
expiry: number,
callback: ResultCallback<string>,
): void
presignedUrl(
httpMethod: string,
bucketName: string,
objectName: string,
expiry: number,
reqParams: { [key: string]: any },
callback: ResultCallback<string>,
): void
presignedUrl(
httpMethod: string,
bucketName: string,
objectName: string,
expiry: number,
reqParams: { [key: string]: any },
requestDate: Date,
callback: ResultCallback<string>,
): void
presignedUrl(
httpMethod: string,
bucketName: string,
objectName: string,
expiry?: number,
reqParams?: { [key: string]: any },
requestDate?: Date,
): Promise<string>
presignedGetObject(bucketName: string, objectName: string, callback: ResultCallback<string>): void
presignedGetObject(bucketName: string, objectName: string, expiry: number, callback: ResultCallback<string>): void
presignedGetObject(
bucketName: string,
objectName: string,
expiry: number,
respHeaders: { [key: string]: any },
callback: ResultCallback<string>,
): void
presignedGetObject(
bucketName: string,
objectName: string,
expiry: number,
respHeaders: { [key: string]: any },
requestDate: Date,
callback: ResultCallback<string>,
): void
presignedGetObject(
bucketName: string,
objectName: string,
expiry?: number,
respHeaders?: { [key: string]: any },
requestDate?: Date,
): Promise<string>
presignedPutObject(bucketName: string, objectName: string, callback: ResultCallback<string>): void
presignedPutObject(bucketName: string, objectName: string, expiry: number, callback: ResultCallback<string>): void
presignedPutObject(bucketName: string, objectName: string, expiry?: number): Promise<string>
presignedPostPolicy(policy: PostPolicy, callback: ResultCallback<PostPolicyResult>): void
presignedPostPolicy(policy: PostPolicy): Promise<PostPolicyResult>
// Bucket Policy & Notification operations

@@ -275,5 +166,2 @@ getBucketNotification(bucketName: string, callback: ResultCallback<NotificationConfig>): void

): NotificationPoller
// Other
newPostPolicy(): PostPolicy
}

@@ -19,10 +19,5 @@ /*

import async from 'async'
import _ from 'lodash'
import * as querystring from 'query-string'
import { TextEncoder } from 'web-encoding'
import xml2js from 'xml2js'
import * as errors from './errors.ts'
import { CopyDestinationOptions, CopySourceOptions } from './helpers.ts'
import { callbackify } from './internal/callbackify.js'

@@ -32,7 +27,2 @@ import { TypedClient } from './internal/client.ts'

import {
calculateEvenSplits,
extractMetadata,
getScope,
getSourceVersionId,
getVersionId,
isBoolean,

@@ -44,13 +34,5 @@ isFunction,

isValidBucketName,
isValidDate,
isValidObjectName,
isValidPrefix,
makeDateLong,
PART_CONSTRAINTS,
partsRequired,
pipesetup,
sanitizeETag,
toMd5,
uriEscape,
uriResourceEscape,
} from './internal/helper.ts'

@@ -60,3 +42,2 @@ import { PostPolicy } from './internal/post-policy.ts'

import { promisify } from './promisify.js'
import { postPresignSignatureV4, presignSignatureV4 } from './signing.ts'
import * as transformers from './transformers.js'

@@ -70,191 +51,7 @@

export class Client extends TypedClient {
// Set application specific information.
//
// Generates User-Agent in the following style.
//
// MinIO (OS; ARCH) LIB/VER APP/VER
//
// __Arguments__
// * `appName` _string_ - Application name.
// * `appVersion` _string_ - Application version.
setAppInfo(appName, appVersion) {
if (!isString(appName)) {
throw new TypeError(`Invalid appName: ${appName}`)
}
if (appName.trim() === '') {
throw new errors.InvalidArgumentError('Input appName cannot be empty.')
}
if (!isString(appVersion)) {
throw new TypeError(`Invalid appVersion: ${appVersion}`)
}
if (appVersion.trim() === '') {
throw new errors.InvalidArgumentError('Input appVersion cannot be empty.')
}
this.userAgent = `${this.userAgent} ${appName}/${appVersion}`
}
// Remove the partially uploaded object.
//
// __Arguments__
// * `bucketName` _string_: name of the bucket
// * `objectName` _string_: name of the object
// * `callback(err)` _function_: callback function is called with non `null` value in case of error
removeIncompleteUpload(bucketName, objectName, cb) {
if (!isValidBucketName(bucketName)) {
throw new errors.IsValidBucketNameError('Invalid bucket name: ' + bucketName)
}
if (!isValidObjectName(objectName)) {
throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`)
}
if (!isFunction(cb)) {
throw new TypeError('callback should be of type "function"')
}
var removeUploadId
async.during(
(cb) => {
this.findUploadId(bucketName, objectName).then((uploadId) => {
removeUploadId = uploadId
cb(null, uploadId)
}, cb)
},
(cb) => {
var method = 'DELETE'
var query = `uploadId=${removeUploadId}`
this.makeRequest({ method, bucketName, objectName, query }, '', [204], '', false, (e) => cb(e))
},
cb,
)
}
// Copy the object.
//
// __Arguments__
// * `bucketName` _string_: name of the bucket
// * `objectName` _string_: name of the object
// * `srcObject` _string_: path of the source object to be copied
// * `conditions` _CopyConditions_: copy conditions that needs to be satisfied (optional, default `null`)
// * `callback(err, {etag, lastModified})` _function_: non null `err` indicates error, `etag` _string_ and `listModifed` _Date_ are respectively the etag and the last modified date of the newly copied object
copyObjectV1(arg1, arg2, arg3, arg4, arg5) {
var bucketName = arg1
var objectName = arg2
var srcObject = arg3
var conditions, cb
if (typeof arg4 == 'function' && arg5 === undefined) {
conditions = null
cb = arg4
} else {
conditions = arg4
cb = arg5
}
if (!isValidBucketName(bucketName)) {
throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName)
}
if (!isValidObjectName(objectName)) {
throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`)
}
if (!isString(srcObject)) {
throw new TypeError('srcObject should be of type "string"')
}
if (srcObject === '') {
throw new errors.InvalidPrefixError(`Empty source prefix`)
}
if (conditions !== null && !(conditions instanceof CopyConditions)) {
throw new TypeError('conditions should be of type "CopyConditions"')
}
var headers = {}
headers['x-amz-copy-source'] = uriResourceEscape(srcObject)
if (conditions !== null) {
if (conditions.modified !== '') {
headers['x-amz-copy-source-if-modified-since'] = conditions.modified
}
if (conditions.unmodified !== '') {
headers['x-amz-copy-source-if-unmodified-since'] = conditions.unmodified
}
if (conditions.matchETag !== '') {
headers['x-amz-copy-source-if-match'] = conditions.matchETag
}
if (conditions.matchEtagExcept !== '') {
headers['x-amz-copy-source-if-none-match'] = conditions.matchETagExcept
}
}
var method = 'PUT'
this.makeRequest({ method, bucketName, objectName, headers }, '', [200], '', true, (e, response) => {
if (e) {
return cb(e)
}
var transformer = transformers.getCopyObjectTransformer()
pipesetup(response, transformer)
.on('error', (e) => cb(e))
.on('data', (data) => cb(null, data))
})
}
/**
* Internal Method to perform copy of an object.
* @param sourceConfig __object__ instance of CopySourceOptions @link ./helpers/CopySourceOptions
* @param destConfig __object__ instance of CopyDestinationOptions @link ./helpers/CopyDestinationOptions
* @param cb __function__ called with null if there is an error
* @returns Promise if no callack is passed.
*/
copyObjectV2(sourceConfig, destConfig, cb) {
if (!(sourceConfig instanceof CopySourceOptions)) {
throw new errors.InvalidArgumentError('sourceConfig should of type CopySourceOptions ')
}
if (!(destConfig instanceof CopyDestinationOptions)) {
throw new errors.InvalidArgumentError('destConfig should of type CopyDestinationOptions ')
}
if (!destConfig.validate()) {
return false
}
if (!destConfig.validate()) {
return false
}
if (!isFunction(cb)) {
throw new TypeError('callback should be of type "function"')
}
const headers = Object.assign({}, sourceConfig.getHeaders(), destConfig.getHeaders())
const bucketName = destConfig.Bucket
const objectName = destConfig.Object
const method = 'PUT'
this.makeRequest({ method, bucketName, objectName, headers }, '', [200], '', true, (e, response) => {
if (e) {
return cb(e)
}
const transformer = transformers.getCopyObjectTransformer()
pipesetup(response, transformer)
.on('error', (e) => cb(e))
.on('data', (data) => {
const resHeaders = response.headers
const copyObjResponse = {
Bucket: destConfig.Bucket,
Key: destConfig.Object,
LastModified: data.LastModified,
MetaData: extractMetadata(resHeaders),
VersionId: getVersionId(resHeaders),
SourceVersionId: getSourceVersionId(resHeaders),
Etag: sanitizeETag(resHeaders.etag),
Size: +resHeaders['content-length'],
}
return cb(null, copyObjResponse)
})
})
}
// Backward compatibility for Copy Object API.
copyObject(...allArgs) {
if (allArgs[0] instanceof CopySourceOptions && allArgs[1] instanceof CopyDestinationOptions) {
return this.copyObjectV2(...arguments)
}
return this.copyObjectV1(...arguments)
}
// list a batch of objects

@@ -543,276 +340,2 @@ listObjectsQuery(bucketName, prefix, marker, listQueryOpts = {}) {

// Remove all the objects residing in the objectsList.
//
// __Arguments__
// * `bucketName` _string_: name of the bucket
// * `objectsList` _array_: array of objects of one of the following:
// * List of Object names as array of strings which are object keys: ['objectname1','objectname2']
// * List of Object name and versionId as an object: [{name:"objectname",versionId:"my-version-id"}]
removeObjects(bucketName, objectsList, cb) {
if (!isValidBucketName(bucketName)) {
throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName)
}
if (!Array.isArray(objectsList)) {
throw new errors.InvalidArgumentError('objectsList should be a list')
}
if (!isFunction(cb)) {
throw new TypeError('callback should be of type "function"')
}
const maxEntries = 1000
const query = 'delete'
const method = 'POST'
let result = objectsList.reduce(
(result, entry) => {
result.list.push(entry)
if (result.list.length === maxEntries) {
result.listOfList.push(result.list)
result.list = []
}
return result
},
{ listOfList: [], list: [] },
)
if (result.list.length > 0) {
result.listOfList.push(result.list)
}
const encoder = new TextEncoder()
const batchResults = []
async.eachSeries(
result.listOfList,
(list, batchCb) => {
var objects = []
list.forEach(function (value) {
if (isObject(value)) {
objects.push({ Key: value.name, VersionId: value.versionId })
} else {
objects.push({ Key: value })
}
})
let deleteObjects = { Delete: { Quiet: true, Object: objects } }
const builder = new xml2js.Builder({ headless: true })
let payload = builder.buildObject(deleteObjects)
payload = Buffer.from(encoder.encode(payload))
const headers = {}
headers['Content-MD5'] = toMd5(payload)
let removeObjectsResult
this.makeRequest({ method, bucketName, query, headers }, payload, [200], '', true, (e, response) => {
if (e) {
return batchCb(e)
}
pipesetup(response, transformers.removeObjectsTransformer())
.on('data', (data) => {
removeObjectsResult = data
})
.on('error', (e) => {
return batchCb(e, null)
})
.on('end', () => {
batchResults.push(removeObjectsResult)
return batchCb(null, removeObjectsResult)
})
})
},
() => {
cb(null, _.flatten(batchResults))
},
)
}
// Generate a generic presigned URL which can be
// used for HTTP methods GET, PUT, HEAD and DELETE
//
// __Arguments__
// * `method` _string_: name of the HTTP method
// * `bucketName` _string_: name of the bucket
// * `objectName` _string_: name of the object
// * `expiry` _number_: expiry in seconds (optional, default 7 days)
// * `reqParams` _object_: request parameters (optional) e.g {versionId:"10fa9946-3f64-4137-a58f-888065c0732e"}
// * `requestDate` _Date_: A date object, the url will be issued at (optional)
presignedUrl(method, bucketName, objectName, expires, reqParams, requestDate, cb) {
if (this.anonymous) {
throw new errors.AnonymousRequestError('Presigned ' + method + ' url cannot be generated for anonymous requests')
}
if (isFunction(requestDate)) {
cb = requestDate
requestDate = new Date()
}
if (isFunction(reqParams)) {
cb = reqParams
reqParams = {}
requestDate = new Date()
}
if (isFunction(expires)) {
cb = expires
reqParams = {}
expires = 24 * 60 * 60 * 7 // 7 days in seconds
requestDate = new Date()
}
if (!isNumber(expires)) {
throw new TypeError('expires should be of type "number"')
}
if (!isObject(reqParams)) {
throw new TypeError('reqParams should be of type "object"')
}
if (!isValidDate(requestDate)) {
throw new TypeError('requestDate should be of type "Date" and valid')
}
if (!isFunction(cb)) {
throw new TypeError('callback should be of type "function"')
}
var query = querystring.stringify(reqParams)
this.getBucketRegion(bucketName, (e, region) => {
if (e) {
return cb(e)
}
// This statement is added to ensure that we send error through
// callback on presign failure.
var url
var reqOptions = this.getRequestOptions({ method, region, bucketName, objectName, query })
this.checkAndRefreshCreds()
try {
url = presignSignatureV4(
reqOptions,
this.accessKey,
this.secretKey,
this.sessionToken,
region,
requestDate,
expires,
)
} catch (pe) {
return cb(pe)
}
cb(null, url)
})
}
// Generate a presigned URL for GET
//
// __Arguments__
// * `bucketName` _string_: name of the bucket
// * `objectName` _string_: name of the object
// * `expiry` _number_: expiry in seconds (optional, default 7 days)
// * `respHeaders` _object_: response headers to override or request params for query (optional) e.g {versionId:"10fa9946-3f64-4137-a58f-888065c0732e"}
// * `requestDate` _Date_: A date object, the url will be issued at (optional)
presignedGetObject(bucketName, objectName, expires, respHeaders, requestDate, cb) {
if (!isValidBucketName(bucketName)) {
throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName)
}
if (!isValidObjectName(objectName)) {
throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`)
}
if (isFunction(respHeaders)) {
cb = respHeaders
respHeaders = {}
requestDate = new Date()
}
var validRespHeaders = [
'response-content-type',
'response-content-language',
'response-expires',
'response-cache-control',
'response-content-disposition',
'response-content-encoding',
]
validRespHeaders.forEach((header) => {
if (respHeaders !== undefined && respHeaders[header] !== undefined && !isString(respHeaders[header])) {
throw new TypeError(`response header ${header} should be of type "string"`)
}
})
return this.presignedUrl('GET', bucketName, objectName, expires, respHeaders, requestDate, cb)
}
// Generate a presigned URL for PUT. Using this URL, the browser can upload to S3 only with the specified object name.
//
// __Arguments__
// * `bucketName` _string_: name of the bucket
// * `objectName` _string_: name of the object
// * `expiry` _number_: expiry in seconds (optional, default 7 days)
presignedPutObject(bucketName, objectName, expires, cb) {
if (!isValidBucketName(bucketName)) {
throw new errors.InvalidBucketNameError(`Invalid bucket name: ${bucketName}`)
}
if (!isValidObjectName(objectName)) {
throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`)
}
return this.presignedUrl('PUT', bucketName, objectName, expires, cb)
}
// return PostPolicy object
newPostPolicy() {
return new PostPolicy()
}
// presignedPostPolicy can be used in situations where we want more control on the upload than what
// presignedPutObject() provides. i.e Using presignedPostPolicy we will be able to put policy restrictions
// on the object's `name` `bucket` `expiry` `Content-Type` `Content-Disposition` `metaData`
presignedPostPolicy(postPolicy, cb) {
if (this.anonymous) {
throw new errors.AnonymousRequestError('Presigned POST policy cannot be generated for anonymous requests')
}
if (!isObject(postPolicy)) {
throw new TypeError('postPolicy should be of type "object"')
}
if (!isFunction(cb)) {
throw new TypeError('cb should be of type "function"')
}
this.getBucketRegion(postPolicy.formData.bucket, (e, region) => {
if (e) {
return cb(e)
}
var date = new Date()
var dateStr = makeDateLong(date)
this.checkAndRefreshCreds()
if (!postPolicy.policy.expiration) {
// 'expiration' is mandatory field for S3.
// Set default expiration date of 7 days.
var expires = new Date()
expires.setSeconds(24 * 60 * 60 * 7)
postPolicy.setExpires(expires)
}
postPolicy.policy.conditions.push(['eq', '$x-amz-date', dateStr])
postPolicy.formData['x-amz-date'] = dateStr
postPolicy.policy.conditions.push(['eq', '$x-amz-algorithm', 'AWS4-HMAC-SHA256'])
postPolicy.formData['x-amz-algorithm'] = 'AWS4-HMAC-SHA256'
postPolicy.policy.conditions.push(['eq', '$x-amz-credential', this.accessKey + '/' + getScope(region, date)])
postPolicy.formData['x-amz-credential'] = this.accessKey + '/' + getScope(region, date)
if (this.sessionToken) {
postPolicy.policy.conditions.push(['eq', '$x-amz-security-token', this.sessionToken])
postPolicy.formData['x-amz-security-token'] = this.sessionToken
}
var policyBase64 = Buffer.from(JSON.stringify(postPolicy.policy)).toString('base64')
postPolicy.formData.policy = policyBase64
var signature = postPresignSignatureV4(region, date, this.secretKey, policyBase64)
postPolicy.formData['x-amz-signature'] = signature
var opts = {}
opts.region = region
opts.bucketName = postPolicy.formData.bucket
var reqOptions = this.getRequestOptions(opts)
var portStr = this.port == 80 || this.port === 443 ? '' : `:${this.port.toString()}`
var urlStr = `${reqOptions.protocol}//${reqOptions.host}${portStr}${reqOptions.path}`
cb(null, { postURL: urlStr, formData: postPolicy.formData })
})
}
// Remove all the notification configurations in the S3 provider

@@ -887,275 +410,7 @@ setBucketNotification(bucketName, config, cb) {

}
getObjectRetention(bucketName, objectName, getOpts, cb) {
if (!isValidBucketName(bucketName)) {
throw new errors.InvalidBucketNameError('Invalid bucket name: ' + bucketName)
}
if (!isValidObjectName(objectName)) {
throw new errors.InvalidObjectNameError(`Invalid object name: ${objectName}`)
}
if (!isObject(getOpts)) {
throw new errors.InvalidArgumentError('callback should be of type "object"')
} else if (getOpts.versionId && !isString(getOpts.versionId)) {
throw new errors.InvalidArgumentError('VersionID should be of type "string"')
}
if (cb && !isFunction(cb)) {
throw new errors.InvalidArgumentError('callback should be of type "function"')
}
const method = 'GET'
let query = 'retention'
if (getOpts.versionId) {
query += `&versionId=${getOpts.versionId}`
}
this.makeRequest({ method, bucketName, objectName, query }, '', [200], '', true, (e, response) => {
if (e) {
return cb(e)
}
let retentionConfig = Buffer.from('')
pipesetup(response, transformers.objectRetentionTransformer())
.on('data', (data) => {
retentionConfig = data
})
.on('error', cb)
.on('end', () => {
cb(null, retentionConfig)
})
})
}
/**
* Internal method to upload a part during compose object.
* @param partConfig __object__ contains the following.
* bucketName __string__
* objectName __string__
* uploadID __string__
* partNumber __number__
* headers __object__
* @param cb called with null incase of error.
*/
uploadPartCopy(partConfig, cb) {
const { bucketName, objectName, uploadID, partNumber, headers } = partConfig
const method = 'PUT'
let query = `uploadId=${uploadID}&partNumber=${partNumber}`
const requestOptions = { method, bucketName, objectName: objectName, query, headers }
return this.makeRequest(requestOptions, '', [200], '', true, (e, response) => {
let partCopyResult = Buffer.from('')
if (e) {
return cb(e)
}
pipesetup(response, transformers.uploadPartTransformer())
.on('data', (data) => {
partCopyResult = data
})
.on('error', cb)
.on('end', () => {
let uploadPartCopyRes = {
etag: sanitizeETag(partCopyResult.ETag),
key: objectName,
part: partNumber,
}
cb(null, uploadPartCopyRes)
})
})
}
composeObject(destObjConfig = {}, sourceObjList = [], cb) {
const me = this // many async flows. so store the ref.
const sourceFilesLength = sourceObjList.length
if (!Array.isArray(sourceObjList)) {
throw new errors.InvalidArgumentError('sourceConfig should an array of CopySourceOptions ')
}
if (!(destObjConfig instanceof CopyDestinationOptions)) {
throw new errors.InvalidArgumentError('destConfig should of type CopyDestinationOptions ')
}
if (sourceFilesLength < 1 || sourceFilesLength > PART_CONSTRAINTS.MAX_PARTS_COUNT) {
throw new errors.InvalidArgumentError(
`"There must be as least one and up to ${PART_CONSTRAINTS.MAX_PARTS_COUNT} source objects.`,
)
}
if (!isFunction(cb)) {
throw new TypeError('callback should be of type "function"')
}
for (let i = 0; i < sourceFilesLength; i++) {
if (!sourceObjList[i].validate()) {
return false
}
}
if (!destObjConfig.validate()) {
return false
}
const getStatOptions = (srcConfig) => {
let statOpts = {}
if (!_.isEmpty(srcConfig.VersionID)) {
statOpts = {
versionId: srcConfig.VersionID,
}
}
return statOpts
}
const srcObjectSizes = []
let totalSize = 0
let totalParts = 0
const sourceObjStats = sourceObjList.map((srcItem) =>
me.statObject(srcItem.Bucket, srcItem.Object, getStatOptions(srcItem)),
)
return Promise.all(sourceObjStats)
.then((srcObjectInfos) => {
const validatedStats = srcObjectInfos.map((resItemStat, index) => {
const srcConfig = sourceObjList[index]
let srcCopySize = resItemStat.size
// Check if a segment is specified, and if so, is the
// segment within object bounds?
if (srcConfig.MatchRange) {
// Since range is specified,
// 0 <= src.srcStart <= src.srcEnd
// so only invalid case to check is:
const srcStart = srcConfig.Start
const srcEnd = srcConfig.End
if (srcEnd >= srcCopySize || srcStart < 0) {
throw new errors.InvalidArgumentError(
`CopySrcOptions ${index} has invalid segment-to-copy [${srcStart}, ${srcEnd}] (size is ${srcCopySize})`,
)
}
srcCopySize = srcEnd - srcStart + 1
}
// Only the last source may be less than `absMinPartSize`
if (srcCopySize < PART_CONSTRAINTS.ABS_MIN_PART_SIZE && index < sourceFilesLength - 1) {
throw new errors.InvalidArgumentError(
`CopySrcOptions ${index} is too small (${srcCopySize}) and it is not the last part.`,
)
}
// Is data to copy too large?
totalSize += srcCopySize
if (totalSize > PART_CONSTRAINTS.MAX_MULTIPART_PUT_OBJECT_SIZE) {
throw new errors.InvalidArgumentError(`Cannot compose an object of size ${totalSize} (> 5TiB)`)
}
// record source size
srcObjectSizes[index] = srcCopySize
// calculate parts needed for current source
totalParts += partsRequired(srcCopySize)
// Do we need more parts than we are allowed?
if (totalParts > PART_CONSTRAINTS.MAX_PARTS_COUNT) {
throw new errors.InvalidArgumentError(
`Your proposed compose object requires more than ${PART_CONSTRAINTS.MAX_PARTS_COUNT} parts`,
)
}
return resItemStat
})
if ((totalParts === 1 && totalSize <= PART_CONSTRAINTS.MAX_PART_SIZE) || totalSize === 0) {
return this.copyObject(sourceObjList[0], destObjConfig, cb) // use copyObjectV2
}
// preserve etag to avoid modification of object while copying.
for (let i = 0; i < sourceFilesLength; i++) {
sourceObjList[i].MatchETag = validatedStats[i].etag
}
const splitPartSizeList = validatedStats.map((resItemStat, idx) => {
const calSize = calculateEvenSplits(srcObjectSizes[idx], sourceObjList[idx])
return calSize
})
function getUploadPartConfigList(uploadId) {
const uploadPartConfigList = []
splitPartSizeList.forEach((splitSize, splitIndex) => {
const { startIndex: startIdx, endIndex: endIdx, objInfo: objConfig } = splitSize
let partIndex = splitIndex + 1 // part index starts from 1.
const totalUploads = Array.from(startIdx)
const headers = sourceObjList[splitIndex].getHeaders()
totalUploads.forEach((splitStart, upldCtrIdx) => {
let splitEnd = endIdx[upldCtrIdx]
const sourceObj = `${objConfig.Bucket}/${objConfig.Object}`
headers['x-amz-copy-source'] = `${sourceObj}`
headers['x-amz-copy-source-range'] = `bytes=${splitStart}-${splitEnd}`
const uploadPartConfig = {
bucketName: destObjConfig.Bucket,
objectName: destObjConfig.Object,
uploadID: uploadId,
partNumber: partIndex,
headers: headers,
sourceObj: sourceObj,
}
uploadPartConfigList.push(uploadPartConfig)
})
})
return uploadPartConfigList
}
const performUploadParts = (uploadId) => {
const uploadList = getUploadPartConfigList(uploadId)
async.map(uploadList, me.uploadPartCopy.bind(me), (err, res) => {
if (err) {
this.abortMultipartUpload(destObjConfig.Bucket, destObjConfig.Object, uploadId).then(
() => cb(),
(err) => cb(err),
)
return
}
const partsDone = res.map((partCopy) => ({ etag: partCopy.etag, part: partCopy.part }))
return me.completeMultipartUpload(destObjConfig.Bucket, destObjConfig.Object, uploadId, partsDone).then(
(result) => cb(null, result),
(err) => cb(err),
)
})
}
const newUploadHeaders = destObjConfig.getHeaders()
me.initiateNewMultipartUpload(destObjConfig.Bucket, destObjConfig.Object, newUploadHeaders).then(
(uploadId) => {
performUploadParts(uploadId)
},
(err) => {
cb(err, null)
},
)
})
.catch((error) => {
cb(error, null)
})
}
}
// Promisify various public-facing APIs on the Client module.
Client.prototype.copyObject = promisify(Client.prototype.copyObject)
Client.prototype.removeObjects = promisify(Client.prototype.removeObjects)
Client.prototype.presignedUrl = promisify(Client.prototype.presignedUrl)
Client.prototype.presignedGetObject = promisify(Client.prototype.presignedGetObject)
Client.prototype.presignedPutObject = promisify(Client.prototype.presignedPutObject)
Client.prototype.presignedPostPolicy = promisify(Client.prototype.presignedPostPolicy)
Client.prototype.getBucketNotification = promisify(Client.prototype.getBucketNotification)
Client.prototype.setBucketNotification = promisify(Client.prototype.setBucketNotification)
Client.prototype.removeAllBucketNotification = promisify(Client.prototype.removeAllBucketNotification)
Client.prototype.removeIncompleteUpload = promisify(Client.prototype.removeIncompleteUpload)
Client.prototype.getObjectRetention = promisify(Client.prototype.getObjectRetention)
Client.prototype.composeObject = promisify(Client.prototype.composeObject)

@@ -1201,1 +456,10 @@ // refactored API use promise internally

Client.prototype.removeBucketEncryption = callbackify(Client.prototype.removeBucketEncryption)
Client.prototype.getObjectRetention = callbackify(Client.prototype.getObjectRetention)
Client.prototype.removeObjects = callbackify(Client.prototype.removeObjects)
Client.prototype.removeIncompleteUpload = callbackify(Client.prototype.removeIncompleteUpload)
Client.prototype.copyObject = callbackify(Client.prototype.copyObject)
Client.prototype.composeObject = callbackify(Client.prototype.composeObject)
Client.prototype.presignedUrl = callbackify(Client.prototype.presignedUrl)
Client.prototype.presignedGetObject = callbackify(Client.prototype.presignedGetObject)
Client.prototype.presignedPutObject = callbackify(Client.prototype.presignedPutObject)
Client.prototype.presignedPostPolicy = callbackify(Client.prototype.presignedPostPolicy)

@@ -20,2 +20,3 @@ /*

import * as errors from './errors.ts'
import { PRESIGN_EXPIRY_DAYS_MAX } from './helpers.ts'
import { getScope, isNumber, isObject, isString, makeDateLong, makeDateShort, uriEscape } from './internal/helper.ts'

@@ -262,3 +263,3 @@ import type { ICanonicalRequest, IRequest, RequestHeaders } from './internal/type.ts'

requestDate: Date,
expires: number,
expires: number | undefined,
) {

@@ -285,9 +286,9 @@ if (!isObject(request)) {

if (!isNumber(expires)) {
if (expires && !isNumber(expires)) {
throw new TypeError('expires should be of type "number"')
}
if (expires < 1) {
if (expires && expires < 1) {
throw new errors.ExpiresParamError('expires param cannot be less than 1 seconds')
}
if (expires > 604800) {
if (expires && expires > PRESIGN_EXPIRY_DAYS_MAX) {
throw new errors.ExpiresParamError('expires param cannot be greater than 7 days')

@@ -294,0 +295,0 @@ }

@@ -98,7 +98,2 @@ /*

// Parses CopyObject response.
export function getCopyObjectTransformer() {
return getConcater(xmlParsers.parseCopyObject)
}
// Parses listObjects response.

@@ -123,17 +118,1 @@ export function getListObjectsTransformer() {

}
export function objectRetentionTransformer() {
return getConcater(xmlParsers.parseObjectRetentionConfig)
}
export function objectLegalHoldTransformer() {
return getConcater(xmlParsers.parseObjectLegalHoldConfig)
}
export function uploadPartTransformer() {
return getConcater(xmlParsers.uploadPartParser)
}
export function removeObjectsTransformer() {
return getConcater(xmlParsers.removeObjectsParser)
}

@@ -28,29 +28,2 @@ /*

// parse XML response for copy object
export function parseCopyObject(xml) {
var result = {
etag: '',
lastModified: '',
}
var xmlobj = parseXml(xml)
if (!xmlobj.CopyObjectResult) {
throw new errors.InvalidXMLError('Missing tag: "CopyObjectResult"')
}
xmlobj = xmlobj.CopyObjectResult
if (xmlobj.ETag) {
result.etag = xmlobj.ETag.replace(/^"/g, '')
.replace(/"$/g, '')
.replace(/^&quot;/g, '')
.replace(/&quot;$/g, '')
.replace(/^&#34;/g, '')
.replace(/&#34;$/g, '')
}
if (xmlobj.LastModified) {
result.lastModified = new Date(xmlobj.LastModified)
}
return result
}
// parse XML response for bucket notification

@@ -302,31 +275,1 @@ export function parseBucketNotification(xml) {

}
export function parseObjectRetentionConfig(xml) {
const xmlObj = parseXml(xml)
const retentionConfig = xmlObj.Retention
return {
mode: retentionConfig.Mode,
retainUntilDate: retentionConfig.RetainUntilDate,
}
}
export function parseObjectLegalHoldConfig(xml) {
const xmlObj = parseXml(xml)
return xmlObj.LegalHold
}
export function uploadPartParser(xml) {
const xmlObj = parseXml(xml)
const respEl = xmlObj.CopyPartResult
return respEl
}
export function removeObjectsParser(xml) {
const xmlObj = parseXml(xml)
if (xmlObj.DeleteResult && xmlObj.DeleteResult.Error) {
// return errors as array always. as the response is object in case of single object passed in removeObjects
return toArray(xmlObj.DeleteResult.Error)
}
return []
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc