first commit
SAP-ERP Portal CI/CD / build (push) Failing after 5m20s

This commit is contained in:
John
2026-09-23 17:31:02 +05:30
commit 69b4e68baf
51657 changed files with 3864077 additions and 0 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+52
View File
@@ -0,0 +1,52 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CEKEntry = void 0;
// This code is based on the `mssql-jdbc` library published under the conditions of MIT license.
// Copyright (c) 2019 Microsoft Corporation
class CEKEntry {
constructor(ordinalVal) {
this.columnEncryptionKeyValues = void 0;
this.ordinal = void 0;
this.databaseId = void 0;
this.cekId = void 0;
this.cekVersion = void 0;
this.cekMdVersion = void 0;
this.ordinal = ordinalVal;
this.databaseId = 0;
this.cekId = 0;
this.cekVersion = 0;
this.cekMdVersion = Buffer.alloc(0);
this.columnEncryptionKeyValues = [];
}
add(encryptedKey, dbId, keyId, keyVersion, mdVersion, keyPath, keyStoreName, algorithmName) {
const encryptionKey = {
encryptedKey,
dbId,
keyId,
keyVersion,
mdVersion,
keyPath,
keyStoreName,
algorithmName
};
this.columnEncryptionKeyValues.push(encryptionKey);
if (this.databaseId === 0) {
this.databaseId = dbId;
this.cekId = keyId;
this.cekVersion = keyVersion;
this.cekMdVersion = mdVersion;
} else if (this.databaseId !== dbId || this.cekId !== keyId || this.cekVersion !== keyVersion || !this.cekMdVersion || !mdVersion || this.cekMdVersion.length !== mdVersion.length) {
throw new Error('Invalid databaseId, cekId, cekVersion or cekMdVersion.');
}
}
}
exports.CEKEntry = CEKEntry;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDRUtFbnRyeSIsImNvbnN0cnVjdG9yIiwib3JkaW5hbFZhbCIsImNvbHVtbkVuY3J5cHRpb25LZXlWYWx1ZXMiLCJvcmRpbmFsIiwiZGF0YWJhc2VJZCIsImNla0lkIiwiY2VrVmVyc2lvbiIsImNla01kVmVyc2lvbiIsIkJ1ZmZlciIsImFsbG9jIiwiYWRkIiwiZW5jcnlwdGVkS2V5IiwiZGJJZCIsImtleUlkIiwia2V5VmVyc2lvbiIsIm1kVmVyc2lvbiIsImtleVBhdGgiLCJrZXlTdG9yZU5hbWUiLCJhbGdvcml0aG1OYW1lIiwiZW5jcnlwdGlvbktleSIsInB1c2giLCJsZW5ndGgiLCJFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbHdheXMtZW5jcnlwdGVkL2Nlay1lbnRyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gdGhlIGBtc3NxbC1qZGJjYCBsaWJyYXJ5IHB1Ymxpc2hlZCB1bmRlciB0aGUgY29uZGl0aW9ucyBvZiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAoYykgMjAxOSBNaWNyb3NvZnQgQ29ycG9yYXRpb25cblxuaW1wb3J0IHsgRW5jcnlwdGlvbktleUluZm8gfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENFS0VudHJ5IHtcbiAgY29sdW1uRW5jcnlwdGlvbktleVZhbHVlczogRW5jcnlwdGlvbktleUluZm9bXTtcbiAgb3JkaW5hbDogbnVtYmVyO1xuICBkYXRhYmFzZUlkOiBudW1iZXI7XG4gIGNla0lkOiBudW1iZXI7XG4gIGNla1ZlcnNpb246IG51bWJlcjtcbiAgY2VrTWRWZXJzaW9uOiBCdWZmZXI7XG5cbiAgY29uc3RydWN0b3Iob3JkaW5hbFZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5vcmRpbmFsID0gb3JkaW5hbFZhbDtcbiAgICB0aGlzLmRhdGFiYXNlSWQgPSAwO1xuICAgIHRoaXMuY2VrSWQgPSAwO1xuICAgIHRoaXMuY2VrVmVyc2lvbiA9IDA7XG4gICAgdGhpcy5jZWtNZFZlcnNpb24gPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgdGhpcy5jb2x1bW5FbmNyeXB0aW9uS2V5VmFsdWVzID0gW107XG4gIH1cblxuICBhZGQoZW5jcnlwdGVkS2V5OiBCdWZmZXIsIGRiSWQ6IG51bWJlciwga2V5SWQ6IG51bWJlciwga2V5VmVyc2lvbjogbnVtYmVyLCBtZFZlcnNpb246IEJ1ZmZlciwga2V5UGF0aDogc3RyaW5nLCBrZXlTdG9yZU5hbWU6IHN0cmluZywgYWxnb3JpdGhtTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZW5jcnlwdGlvbktleTogRW5jcnlwdGlvbktleUluZm8gPSB7XG4gICAgICBlbmNyeXB0ZWRLZXksXG4gICAgICBkYklkLFxuICAgICAga2V5SWQsXG4gICAgICBrZXlWZXJzaW9uLFxuICAgICAgbWRWZXJzaW9uLFxuICAgICAga2V5UGF0aCxcbiAgICAgIGtleVN0b3JlTmFtZSxcbiAgICAgIGFsZ29yaXRobU5hbWUsXG4gICAgfTtcblxuICAgIHRoaXMuY29sdW1uRW5jcnlwdGlvbktleVZhbHVlcy5wdXNoKGVuY3J5cHRpb25LZXkpO1xuXG4gICAgaWYgKHRoaXMuZGF0YWJhc2VJZCA9PT0gMCkge1xuICAgICAgdGhpcy5kYXRhYmFzZUlkID0gZGJJZDtcbiAgICAgIHRoaXMuY2VrSWQgPSBrZXlJZDtcbiAgICAgIHRoaXMuY2VrVmVyc2lvbiA9IGtleVZlcnNpb247XG4gICAgICB0aGlzLmNla01kVmVyc2lvbiA9IG1kVmVyc2lvbjtcbiAgICB9IGVsc2UgaWYgKCh0aGlzLmRhdGFiYXNlSWQgIT09IGRiSWQpIHx8ICh0aGlzLmNla0lkICE9PSBrZXlJZCkgfHwgKHRoaXMuY2VrVmVyc2lvbiAhPT0ga2V5VmVyc2lvbikgfHwgIXRoaXMuY2VrTWRWZXJzaW9uIHx8ICFtZFZlcnNpb24gfHwgdGhpcy5jZWtNZFZlcnNpb24ubGVuZ3RoICE9PSBtZFZlcnNpb24ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YWJhc2VJZCwgY2VrSWQsIGNla1ZlcnNpb24gb3IgY2VrTWRWZXJzaW9uLicpO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUlPLE1BQU1BLFFBQU4sQ0FBZTtFQVFwQkMsV0FBVyxDQUFDQyxVQUFELEVBQXFCO0lBQUEsS0FQaENDLHlCQU9nQztJQUFBLEtBTmhDQyxPQU1nQztJQUFBLEtBTGhDQyxVQUtnQztJQUFBLEtBSmhDQyxLQUlnQztJQUFBLEtBSGhDQyxVQUdnQztJQUFBLEtBRmhDQyxZQUVnQztJQUM5QixLQUFLSixPQUFMLEdBQWVGLFVBQWY7SUFDQSxLQUFLRyxVQUFMLEdBQWtCLENBQWxCO0lBQ0EsS0FBS0MsS0FBTCxHQUFhLENBQWI7SUFDQSxLQUFLQyxVQUFMLEdBQWtCLENBQWxCO0lBQ0EsS0FBS0MsWUFBTCxHQUFvQkMsTUFBTSxDQUFDQyxLQUFQLENBQWEsQ0FBYixDQUFwQjtJQUNBLEtBQUtQLHlCQUFMLEdBQWlDLEVBQWpDO0VBQ0Q7O0VBRURRLEdBQUcsQ0FBQ0MsWUFBRCxFQUF1QkMsSUFBdkIsRUFBcUNDLEtBQXJDLEVBQW9EQyxVQUFwRCxFQUF3RUMsU0FBeEUsRUFBMkZDLE9BQTNGLEVBQTRHQyxZQUE1RyxFQUFrSUMsYUFBbEksRUFBK0o7SUFDaEssTUFBTUMsYUFBZ0MsR0FBRztNQUN2Q1IsWUFEdUM7TUFFdkNDLElBRnVDO01BR3ZDQyxLQUh1QztNQUl2Q0MsVUFKdUM7TUFLdkNDLFNBTHVDO01BTXZDQyxPQU51QztNQU92Q0MsWUFQdUM7TUFRdkNDO0lBUnVDLENBQXpDO0lBV0EsS0FBS2hCLHlCQUFMLENBQStCa0IsSUFBL0IsQ0FBb0NELGFBQXBDOztJQUVBLElBQUksS0FBS2YsVUFBTCxLQUFvQixDQUF4QixFQUEyQjtNQUN6QixLQUFLQSxVQUFMLEdBQWtCUSxJQUFsQjtNQUNBLEtBQUtQLEtBQUwsR0FBYVEsS0FBYjtNQUNBLEtBQUtQLFVBQUwsR0FBa0JRLFVBQWxCO01BQ0EsS0FBS1AsWUFBTCxHQUFvQlEsU0FBcEI7SUFDRCxDQUxELE1BS08sSUFBSyxLQUFLWCxVQUFMLEtBQW9CUSxJQUFyQixJQUErQixLQUFLUCxLQUFMLEtBQWVRLEtBQTlDLElBQXlELEtBQUtQLFVBQUwsS0FBb0JRLFVBQTdFLElBQTRGLENBQUMsS0FBS1AsWUFBbEcsSUFBa0gsQ0FBQ1EsU0FBbkgsSUFBZ0ksS0FBS1IsWUFBTCxDQUFrQmMsTUFBbEIsS0FBNkJOLFNBQVMsQ0FBQ00sTUFBM0ssRUFBbUw7TUFDeEwsTUFBTSxJQUFJQyxLQUFKLENBQVUsd0RBQVYsQ0FBTjtJQUNEO0VBQ0Y7O0FBdkNtQiJ9
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+47
View File
@@ -0,0 +1,47 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getKey = void 0;
var _symmetricKey = _interopRequireDefault(require("./symmetric-key"));
var _lruCache = _interopRequireDefault(require("lru-cache"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// This code is based on the `mssql-jdbc` library published under the conditions of MIT license.
// Copyright (c) 2019 Microsoft Corporation
const cache = new _lruCache.default(0);
const getKey = async (keyInfo, options) => {
if (!options.trustedServerNameAE) {
throw new Error('Server name should not be null in getKey');
}
const serverName = options.trustedServerNameAE;
const keyLookupValue = `${serverName}:${Buffer.from(keyInfo.encryptedKey).toString('base64')}:${keyInfo.keyStoreName}`;
if (cache.has(keyLookupValue)) {
return cache.get(keyLookupValue);
} else {
const provider = options.encryptionKeyStoreProviders && options.encryptionKeyStoreProviders[keyInfo.keyStoreName];
if (!provider) {
throw new Error(`Failed to decrypt a column encryption key. Invalid key store provider name: ${keyInfo.keyStoreName}. A key store provider name must denote either a system key store provider or a registered custom key store provider. Valid (currently registered) custom key store provider names are: ${options.encryptionKeyStoreProviders}. Please verify key store provider information in column master key definitions in the database, and verify all custom key store providers used in your application are registered properly.`);
}
const plaintextKey = await provider.decryptColumnEncryptionKey(keyInfo.keyPath, keyInfo.algorithmName, keyInfo.encryptedKey);
const encryptionKey = new _symmetricKey.default(plaintextKey);
if (options.columnEncryptionKeyCacheTTL > 0) {
cache.set(keyLookupValue, encryptionKey, options.columnEncryptionKeyCacheTTL);
}
return encryptionKey;
}
};
exports.getKey = getKey;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjYWNoZSIsIkxSVSIsImdldEtleSIsImtleUluZm8iLCJvcHRpb25zIiwidHJ1c3RlZFNlcnZlck5hbWVBRSIsIkVycm9yIiwic2VydmVyTmFtZSIsImtleUxvb2t1cFZhbHVlIiwiQnVmZmVyIiwiZnJvbSIsImVuY3J5cHRlZEtleSIsInRvU3RyaW5nIiwia2V5U3RvcmVOYW1lIiwiaGFzIiwiZ2V0IiwicHJvdmlkZXIiLCJlbmNyeXB0aW9uS2V5U3RvcmVQcm92aWRlcnMiLCJwbGFpbnRleHRLZXkiLCJkZWNyeXB0Q29sdW1uRW5jcnlwdGlvbktleSIsImtleVBhdGgiLCJhbGdvcml0aG1OYW1lIiwiZW5jcnlwdGlvbktleSIsIlN5bW1ldHJpY0tleSIsImNvbHVtbkVuY3J5cHRpb25LZXlDYWNoZVRUTCIsInNldCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbHdheXMtZW5jcnlwdGVkL3N5bW1ldHJpYy1rZXktY2FjaGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBgbXNzcWwtamRiY2AgbGlicmFyeSBwdWJsaXNoZWQgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2YgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTkgTWljcm9zb2Z0IENvcnBvcmF0aW9uXG5cbmltcG9ydCB7IEVuY3J5cHRpb25LZXlJbmZvIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgU3ltbWV0cmljS2V5IGZyb20gJy4vc3ltbWV0cmljLWtleSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIGFzIENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5cbmNvbnN0IGNhY2hlID0gbmV3IExSVTxzdHJpbmcsIFN5bW1ldHJpY0tleT4oMCk7XG5cbmV4cG9ydCBjb25zdCBnZXRLZXkgPSBhc3luYyAoa2V5SW5mbzogRW5jcnlwdGlvbktleUluZm8sIG9wdGlvbnM6IENvbm5lY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTeW1tZXRyaWNLZXk+ID0+IHtcbiAgaWYgKCFvcHRpb25zLnRydXN0ZWRTZXJ2ZXJOYW1lQUUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBuYW1lIHNob3VsZCBub3QgYmUgbnVsbCBpbiBnZXRLZXknKTtcbiAgfVxuXG4gIGNvbnN0IHNlcnZlck5hbWU6IHN0cmluZyA9IG9wdGlvbnMudHJ1c3RlZFNlcnZlck5hbWVBRTtcblxuICBjb25zdCBrZXlMb29rdXBWYWx1ZSA9IGAke3NlcnZlck5hbWV9OiR7QnVmZmVyLmZyb20oa2V5SW5mby5lbmNyeXB0ZWRLZXkpLnRvU3RyaW5nKCdiYXNlNjQnKX06JHtrZXlJbmZvLmtleVN0b3JlTmFtZX1gO1xuXG4gIGlmIChjYWNoZS5oYXMoa2V5TG9va3VwVmFsdWUpKSB7XG4gICAgcmV0dXJuIGNhY2hlLmdldChrZXlMb29rdXBWYWx1ZSkgYXMgU3ltbWV0cmljS2V5O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gb3B0aW9ucy5lbmNyeXB0aW9uS2V5U3RvcmVQcm92aWRlcnMgJiYgb3B0aW9ucy5lbmNyeXB0aW9uS2V5U3RvcmVQcm92aWRlcnNba2V5SW5mby5rZXlTdG9yZU5hbWVdO1xuICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY3J5cHQgYSBjb2x1bW4gZW5jcnlwdGlvbiBrZXkuIEludmFsaWQga2V5IHN0b3JlIHByb3ZpZGVyIG5hbWU6ICR7a2V5SW5mby5rZXlTdG9yZU5hbWV9LiBBIGtleSBzdG9yZSBwcm92aWRlciBuYW1lIG11c3QgZGVub3RlIGVpdGhlciBhIHN5c3RlbSBrZXkgc3RvcmUgcHJvdmlkZXIgb3IgYSByZWdpc3RlcmVkIGN1c3RvbSBrZXkgc3RvcmUgcHJvdmlkZXIuIFZhbGlkIChjdXJyZW50bHkgcmVnaXN0ZXJlZCkgY3VzdG9tIGtleSBzdG9yZSBwcm92aWRlciBuYW1lcyBhcmU6ICR7b3B0aW9ucy5lbmNyeXB0aW9uS2V5U3RvcmVQcm92aWRlcnN9LiBQbGVhc2UgdmVyaWZ5IGtleSBzdG9yZSBwcm92aWRlciBpbmZvcm1hdGlvbiBpbiBjb2x1bW4gbWFzdGVyIGtleSBkZWZpbml0aW9ucyBpbiB0aGUgZGF0YWJhc2UsIGFuZCB2ZXJpZnkgYWxsIGN1c3RvbSBrZXkgc3RvcmUgcHJvdmlkZXJzIHVzZWQgaW4geW91ciBhcHBsaWNhdGlvbiBhcmUgcmVnaXN0ZXJlZCBwcm9wZXJseS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBwbGFpbnRleHRLZXk6IEJ1ZmZlciA9IGF3YWl0IHByb3ZpZGVyLmRlY3J5cHRDb2x1bW5FbmNyeXB0aW9uS2V5KGtleUluZm8ua2V5UGF0aCwga2V5SW5mby5hbGdvcml0aG1OYW1lLCBrZXlJbmZvLmVuY3J5cHRlZEtleSk7XG5cbiAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gbmV3IFN5bW1ldHJpY0tleShwbGFpbnRleHRLZXkpO1xuXG4gICAgaWYgKG9wdGlvbnMuY29sdW1uRW5jcnlwdGlvbktleUNhY2hlVFRMID4gMCkge1xuICAgICAgY2FjaGUuc2V0KGtleUxvb2t1cFZhbHVlLCBlbmNyeXB0aW9uS2V5LCBvcHRpb25zLmNvbHVtbkVuY3J5cHRpb25LZXlDYWNoZVRUTCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuY3J5cHRpb25LZXk7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQTs7QUFFQTs7OztBQU5BO0FBQ0E7QUFPQSxNQUFNQSxLQUFLLEdBQUcsSUFBSUMsaUJBQUosQ0FBOEIsQ0FBOUIsQ0FBZDs7QUFFTyxNQUFNQyxNQUFNLEdBQUcsT0FBT0MsT0FBUCxFQUFtQ0MsT0FBbkMsS0FBeUY7RUFDN0csSUFBSSxDQUFDQSxPQUFPLENBQUNDLG1CQUFiLEVBQWtDO0lBQ2hDLE1BQU0sSUFBSUMsS0FBSixDQUFVLDBDQUFWLENBQU47RUFDRDs7RUFFRCxNQUFNQyxVQUFrQixHQUFHSCxPQUFPLENBQUNDLG1CQUFuQztFQUVBLE1BQU1HLGNBQWMsR0FBSSxHQUFFRCxVQUFXLElBQUdFLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZUCxPQUFPLENBQUNRLFlBQXBCLEVBQWtDQyxRQUFsQyxDQUEyQyxRQUEzQyxDQUFxRCxJQUFHVCxPQUFPLENBQUNVLFlBQWEsRUFBckg7O0VBRUEsSUFBSWIsS0FBSyxDQUFDYyxHQUFOLENBQVVOLGNBQVYsQ0FBSixFQUErQjtJQUM3QixPQUFPUixLQUFLLENBQUNlLEdBQU4sQ0FBVVAsY0FBVixDQUFQO0VBQ0QsQ0FGRCxNQUVPO0lBQ0wsTUFBTVEsUUFBUSxHQUFHWixPQUFPLENBQUNhLDJCQUFSLElBQXVDYixPQUFPLENBQUNhLDJCQUFSLENBQW9DZCxPQUFPLENBQUNVLFlBQTVDLENBQXhEOztJQUNBLElBQUksQ0FBQ0csUUFBTCxFQUFlO01BQ2IsTUFBTSxJQUFJVixLQUFKLENBQVcsK0VBQThFSCxPQUFPLENBQUNVLFlBQWEsMkxBQTBMVCxPQUFPLENBQUNhLDJCQUE0Qiw4TEFBNVUsQ0FBTjtJQUNEOztJQUVELE1BQU1DLFlBQW9CLEdBQUcsTUFBTUYsUUFBUSxDQUFDRywwQkFBVCxDQUFvQ2hCLE9BQU8sQ0FBQ2lCLE9BQTVDLEVBQXFEakIsT0FBTyxDQUFDa0IsYUFBN0QsRUFBNEVsQixPQUFPLENBQUNRLFlBQXBGLENBQW5DO0lBRUEsTUFBTVcsYUFBYSxHQUFHLElBQUlDLHFCQUFKLENBQWlCTCxZQUFqQixDQUF0Qjs7SUFFQSxJQUFJZCxPQUFPLENBQUNvQiwyQkFBUixHQUFzQyxDQUExQyxFQUE2QztNQUMzQ3hCLEtBQUssQ0FBQ3lCLEdBQU4sQ0FBVWpCLGNBQVYsRUFBMEJjLGFBQTFCLEVBQXlDbEIsT0FBTyxDQUFDb0IsMkJBQWpEO0lBQ0Q7O0lBRUQsT0FBT0YsYUFBUDtFQUNEO0FBQ0YsQ0EzQk0ifQ==
+32
View File
@@ -0,0 +1,32 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.SymmetricKey = void 0;
// This code is based on the `mssql-jdbc` library published under the conditions of MIT license.
// Copyright (c) 2019 Microsoft Corporation
class SymmetricKey {
constructor(rootKey) {
this.rootKey = void 0;
if (!rootKey) {
throw new Error('Column encryption key cannot be null.');
} else if (0 === rootKey.length) {
throw new Error('Empty column encryption key specified.');
}
this.rootKey = rootKey;
}
zeroOutKey() {
this.rootKey = Buffer.alloc(this.rootKey.length);
}
}
exports.SymmetricKey = SymmetricKey;
var _default = SymmetricKey;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTeW1tZXRyaWNLZXkiLCJjb25zdHJ1Y3RvciIsInJvb3RLZXkiLCJFcnJvciIsImxlbmd0aCIsInplcm9PdXRLZXkiLCJCdWZmZXIiLCJhbGxvYyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbHdheXMtZW5jcnlwdGVkL3N5bW1ldHJpYy1rZXkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBgbXNzcWwtamRiY2AgbGlicmFyeSBwdWJsaXNoZWQgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2YgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTkgTWljcm9zb2Z0IENvcnBvcmF0aW9uXG5cbmV4cG9ydCBjbGFzcyBTeW1tZXRyaWNLZXkge1xuICByb290S2V5OiBCdWZmZXI7XG5cbiAgY29uc3RydWN0b3Iocm9vdEtleTogQnVmZmVyKSB7XG4gICAgaWYgKCFyb290S2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbiBlbmNyeXB0aW9uIGtleSBjYW5ub3QgYmUgbnVsbC4nKTtcbiAgICB9IGVsc2UgaWYgKDAgPT09IHJvb3RLZXkubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IGNvbHVtbiBlbmNyeXB0aW9uIGtleSBzcGVjaWZpZWQuJyk7XG4gICAgfVxuICAgIHRoaXMucm9vdEtleSA9IHJvb3RLZXk7XG4gIH1cblxuICB6ZXJvT3V0S2V5KCkge1xuICAgIHRoaXMucm9vdEtleSA9IEJ1ZmZlci5hbGxvYyh0aGlzLnJvb3RLZXkubGVuZ3RoKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgU3ltbWV0cmljS2V5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUVPLE1BQU1BLFlBQU4sQ0FBbUI7RUFHeEJDLFdBQVcsQ0FBQ0MsT0FBRCxFQUFrQjtJQUFBLEtBRjdCQSxPQUU2Qjs7SUFDM0IsSUFBSSxDQUFDQSxPQUFMLEVBQWM7TUFDWixNQUFNLElBQUlDLEtBQUosQ0FBVSx1Q0FBVixDQUFOO0lBQ0QsQ0FGRCxNQUVPLElBQUksTUFBTUQsT0FBTyxDQUFDRSxNQUFsQixFQUEwQjtNQUMvQixNQUFNLElBQUlELEtBQUosQ0FBVSx3Q0FBVixDQUFOO0lBQ0Q7O0lBQ0QsS0FBS0QsT0FBTCxHQUFlQSxPQUFmO0VBQ0Q7O0VBRURHLFVBQVUsR0FBRztJQUNYLEtBQUtILE9BQUwsR0FBZUksTUFBTSxDQUFDQyxLQUFQLENBQWEsS0FBS0wsT0FBTCxDQUFhRSxNQUExQixDQUFmO0VBQ0Q7O0FBZHVCOzs7ZUFnQlhKLFkifQ==
+60
View File
@@ -0,0 +1,60 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SQLServerStatementColumnEncryptionSetting = exports.SQLServerEncryptionType = exports.DescribeParameterEncryptionResultSet2 = exports.DescribeParameterEncryptionResultSet1 = void 0;
// This code is based on the `mssql-jdbc` library published under the conditions of MIT license.
// Copyright (c) 2019 Microsoft Corporation
let SQLServerEncryptionType;
exports.SQLServerEncryptionType = SQLServerEncryptionType;
(function (SQLServerEncryptionType) {
SQLServerEncryptionType[SQLServerEncryptionType["Deterministic"] = 1] = "Deterministic";
SQLServerEncryptionType[SQLServerEncryptionType["Randomized"] = 2] = "Randomized";
SQLServerEncryptionType[SQLServerEncryptionType["PlainText"] = 0] = "PlainText";
})(SQLServerEncryptionType || (exports.SQLServerEncryptionType = SQLServerEncryptionType = {}));
// Fields in the first resultset of "sp_describe_parameter_encryption"
// We expect the server to return the fields in the resultset in the same order as mentioned below.
// If the server changes the below order, then transparent parameter encryption will break.
let DescribeParameterEncryptionResultSet1; // Fields in the second resultset of "sp_describe_parameter_encryption"
// We expect the server to return the fields in the resultset in the same order as mentioned below.
// If the server changes the below order, then transparent parameter encryption will break.
exports.DescribeParameterEncryptionResultSet1 = DescribeParameterEncryptionResultSet1;
(function (DescribeParameterEncryptionResultSet1) {
DescribeParameterEncryptionResultSet1[DescribeParameterEncryptionResultSet1["KeyOrdinal"] = 0] = "KeyOrdinal";
DescribeParameterEncryptionResultSet1[DescribeParameterEncryptionResultSet1["DbId"] = 1] = "DbId";
DescribeParameterEncryptionResultSet1[DescribeParameterEncryptionResultSet1["KeyId"] = 2] = "KeyId";
DescribeParameterEncryptionResultSet1[DescribeParameterEncryptionResultSet1["KeyVersion"] = 3] = "KeyVersion";
DescribeParameterEncryptionResultSet1[DescribeParameterEncryptionResultSet1["KeyMdVersion"] = 4] = "KeyMdVersion";
DescribeParameterEncryptionResultSet1[DescribeParameterEncryptionResultSet1["EncryptedKey"] = 5] = "EncryptedKey";
DescribeParameterEncryptionResultSet1[DescribeParameterEncryptionResultSet1["ProviderName"] = 6] = "ProviderName";
DescribeParameterEncryptionResultSet1[DescribeParameterEncryptionResultSet1["KeyPath"] = 7] = "KeyPath";
DescribeParameterEncryptionResultSet1[DescribeParameterEncryptionResultSet1["KeyEncryptionAlgorithm"] = 8] = "KeyEncryptionAlgorithm";
})(DescribeParameterEncryptionResultSet1 || (exports.DescribeParameterEncryptionResultSet1 = DescribeParameterEncryptionResultSet1 = {}));
let DescribeParameterEncryptionResultSet2;
exports.DescribeParameterEncryptionResultSet2 = DescribeParameterEncryptionResultSet2;
(function (DescribeParameterEncryptionResultSet2) {
DescribeParameterEncryptionResultSet2[DescribeParameterEncryptionResultSet2["ParameterOrdinal"] = 0] = "ParameterOrdinal";
DescribeParameterEncryptionResultSet2[DescribeParameterEncryptionResultSet2["ParameterName"] = 1] = "ParameterName";
DescribeParameterEncryptionResultSet2[DescribeParameterEncryptionResultSet2["ColumnEncryptionAlgorithm"] = 2] = "ColumnEncryptionAlgorithm";
DescribeParameterEncryptionResultSet2[DescribeParameterEncryptionResultSet2["ColumnEncrytionType"] = 3] = "ColumnEncrytionType";
DescribeParameterEncryptionResultSet2[DescribeParameterEncryptionResultSet2["ColumnEncryptionKeyOrdinal"] = 4] = "ColumnEncryptionKeyOrdinal";
DescribeParameterEncryptionResultSet2[DescribeParameterEncryptionResultSet2["NormalizationRuleVersion"] = 5] = "NormalizationRuleVersion";
})(DescribeParameterEncryptionResultSet2 || (exports.DescribeParameterEncryptionResultSet2 = DescribeParameterEncryptionResultSet2 = {}));
let SQLServerStatementColumnEncryptionSetting;
exports.SQLServerStatementColumnEncryptionSetting = SQLServerStatementColumnEncryptionSetting;
(function (SQLServerStatementColumnEncryptionSetting) {
SQLServerStatementColumnEncryptionSetting[SQLServerStatementColumnEncryptionSetting["UseConnectionSetting"] = 0] = "UseConnectionSetting";
SQLServerStatementColumnEncryptionSetting[SQLServerStatementColumnEncryptionSetting["Enabled"] = 1] = "Enabled";
SQLServerStatementColumnEncryptionSetting[SQLServerStatementColumnEncryptionSetting["ResultSetOnly"] = 2] = "ResultSetOnly";
SQLServerStatementColumnEncryptionSetting[SQLServerStatementColumnEncryptionSetting["Disabled"] = 3] = "Disabled";
})(SQLServerStatementColumnEncryptionSetting || (exports.SQLServerStatementColumnEncryptionSetting = SQLServerStatementColumnEncryptionSetting = {}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTUUxTZXJ2ZXJFbmNyeXB0aW9uVHlwZSIsIkRlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEiLCJEZXNjcmliZVBhcmFtZXRlckVuY3J5cHRpb25SZXN1bHRTZXQyIiwiU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmciXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYWx3YXlzLWVuY3J5cHRlZC90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gdGhlIGBtc3NxbC1qZGJjYCBsaWJyYXJ5IHB1Ymxpc2hlZCB1bmRlciB0aGUgY29uZGl0aW9ucyBvZiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAoYykgMjAxOSBNaWNyb3NvZnQgQ29ycG9yYXRpb25cblxuaW1wb3J0IHsgQ0VLRW50cnkgfSBmcm9tICcuL2Nlay1lbnRyeSc7XG5pbXBvcnQgeyBCYXNlTWV0YWRhdGEgfSBmcm9tICcuLi9tZXRhZGF0YS1wYXJzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY3J5cHRpb25LZXlJbmZvIHtcbiAgZW5jcnlwdGVkS2V5OiBCdWZmZXI7XG4gIGRiSWQ6IG51bWJlcjtcbiAga2V5SWQ6IG51bWJlcjtcbiAga2V5VmVyc2lvbjogbnVtYmVyO1xuICBtZFZlcnNpb246IEJ1ZmZlcjtcbiAga2V5UGF0aDogc3RyaW5nO1xuICBrZXlTdG9yZU5hbWU6IHN0cmluZztcbiAgYWxnb3JpdGhtTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBTUUxTZXJ2ZXJFbmNyeXB0aW9uVHlwZSB7XG4gIERldGVybWluaXN0aWMgPSAxLFxuICBSYW5kb21pemVkID0gMixcbiAgUGxhaW5UZXh0ID0gMCxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0aW9uQWxnb3JpdGhtIHtcbiAgZW5jcnlwdERhdGE6IChwbGFpblRleHQ6IEJ1ZmZlcikgPT4gQnVmZmVyO1xuICBkZWNyeXB0RGF0YTogKGNpcGhlclRleHQ6IEJ1ZmZlcikgPT4gQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyeXB0b01ldGFkYXRhIHtcbiAgY2VrRW50cnk/OiBDRUtFbnRyeTtcbiAgY2lwaGVyQWxnb3JpdGhtSWQ6IG51bWJlcjtcbiAgY2lwaGVyQWxnb3JpdGhtTmFtZT86IHN0cmluZztcbiAgbm9ybWFsaXphdGlvblJ1bGVWZXJzaW9uOiBCdWZmZXI7XG4gIGVuY3J5cHRpb25LZXlJbmZvPzogRW5jcnlwdGlvbktleUluZm87XG4gIG9yZGluYWw6IG51bWJlcjtcbiAgZW5jcnlwdGlvblR5cGU6IFNRTFNlcnZlckVuY3J5cHRpb25UeXBlO1xuICBjaXBoZXJBbGdvcml0aG0/OiBFbmNyeXB0aW9uQWxnb3JpdGhtO1xuICBiYXNlVHlwZUluZm8/OiBCYXNlTWV0YWRhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFzaE1hcDxUPiB7XG4gIFtoYXNoOiBzdHJpbmddOiBUO1xufVxuXG5cbi8vIEZpZWxkcyBpbiB0aGUgZmlyc3QgcmVzdWx0c2V0IG9mIFwic3BfZGVzY3JpYmVfcGFyYW1ldGVyX2VuY3J5cHRpb25cIlxuLy8gV2UgZXhwZWN0IHRoZSBzZXJ2ZXIgdG8gcmV0dXJuIHRoZSBmaWVsZHMgaW4gdGhlIHJlc3VsdHNldCBpbiB0aGUgc2FtZSBvcmRlciBhcyBtZW50aW9uZWQgYmVsb3cuXG4vLyBJZiB0aGUgc2VydmVyIGNoYW5nZXMgdGhlIGJlbG93IG9yZGVyLCB0aGVuIHRyYW5zcGFyZW50IHBhcmFtZXRlciBlbmNyeXB0aW9uIHdpbGwgYnJlYWsuXG5leHBvcnQgZW51bSBEZXNjcmliZVBhcmFtZXRlckVuY3J5cHRpb25SZXN1bHRTZXQxIHtcbiAgS2V5T3JkaW5hbCxcbiAgRGJJZCxcbiAgS2V5SWQsXG4gIEtleVZlcnNpb24sXG4gIEtleU1kVmVyc2lvbixcbiAgRW5jcnlwdGVkS2V5LFxuICBQcm92aWRlck5hbWUsXG4gIEtleVBhdGgsXG4gIEtleUVuY3J5cHRpb25BbGdvcml0aG1cbn1cblxuXG4vLyBGaWVsZHMgaW4gdGhlIHNlY29uZCByZXN1bHRzZXQgb2YgXCJzcF9kZXNjcmliZV9wYXJhbWV0ZXJfZW5jcnlwdGlvblwiXG4vLyBXZSBleHBlY3QgdGhlIHNlcnZlciB0byByZXR1cm4gdGhlIGZpZWxkcyBpbiB0aGUgcmVzdWx0c2V0IGluIHRoZSBzYW1lIG9yZGVyIGFzIG1lbnRpb25lZCBiZWxvdy5cbi8vIElmIHRoZSBzZXJ2ZXIgY2hhbmdlcyB0aGUgYmVsb3cgb3JkZXIsIHRoZW4gdHJhbnNwYXJlbnQgcGFyYW1ldGVyIGVuY3J5cHRpb24gd2lsbCBicmVhay5cbmV4cG9ydCBlbnVtIERlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDIge1xuICBQYXJhbWV0ZXJPcmRpbmFsLFxuICBQYXJhbWV0ZXJOYW1lLFxuICBDb2x1bW5FbmNyeXB0aW9uQWxnb3JpdGhtLFxuICBDb2x1bW5FbmNyeXRpb25UeXBlLFxuICBDb2x1bW5FbmNyeXB0aW9uS2V5T3JkaW5hbCxcbiAgTm9ybWFsaXphdGlvblJ1bGVWZXJzaW9uXG59XG5cbmV4cG9ydCBlbnVtIFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nIHtcbiAgLyoqXG4gICAqIGlmIFwiQ29sdW1uIEVuY3J5cHRpb24gU2V0dGluZz1FbmFibGVkXCIgaW4gdGhlIGNvbm5lY3Rpb24gc3RyaW5nLCB1c2UgRW5hYmxlZC4gT3RoZXJ3aXNlLCBtYXBzIHRvIERpc2FibGVkLlxuICAgKi9cbiAgVXNlQ29ubmVjdGlvblNldHRpbmcsXG4gIC8qKlxuICAgKiBFbmFibGVzIFRDRSBmb3IgdGhlIGNvbW1hbmQuIE92ZXJyaWRlcyB0aGUgY29ubmVjdGlvbiBsZXZlbCBzZXR0aW5nIGZvciB0aGlzIGNvbW1hbmQuXG4gICAqL1xuICBFbmFibGVkLFxuICAvKipcbiAgICogUGFyYW1ldGVycyB3aWxsIG5vdCBiZSBlbmNyeXB0ZWQsIG9ubHkgdGhlIFJlc3VsdFNldCB3aWxsIGJlIGRlY3J5cHRlZC4gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gZm9yIHF1ZXJpZXMgdGhhdFxuICAgKiBkbyBub3QgcGFzcyBhbnkgZW5jcnlwdGVkIGlucHV0IHBhcmFtZXRlcnMuIE92ZXJyaWRlcyB0aGUgY29ubmVjdGlvbiBsZXZlbCBzZXR0aW5nIGZvciB0aGlzIGNvbW1hbmQuXG4gICAqL1xuICBSZXN1bHRTZXRPbmx5LFxuICAvKipcbiAgICogRGlzYWJsZXMgVENFIGZvciB0aGUgY29tbWFuZC5PdmVycmlkZXMgdGhlIGNvbm5lY3Rpb24gbGV2ZWwgc2V0dGluZyBmb3IgdGhpcyBjb21tYW5kLlxuICAgKi9cbiAgRGlzYWJsZWQsXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7SUFnQllBLHVCOzs7V0FBQUEsdUI7RUFBQUEsdUIsQ0FBQUEsdUI7RUFBQUEsdUIsQ0FBQUEsdUI7RUFBQUEsdUIsQ0FBQUEsdUI7R0FBQUEsdUIsdUNBQUFBLHVCOztBQTRCWjtBQUNBO0FBQ0E7SUFDWUMscUMsRUFhWjtBQUNBO0FBQ0E7Ozs7V0FmWUEscUM7RUFBQUEscUMsQ0FBQUEscUM7RUFBQUEscUMsQ0FBQUEscUM7RUFBQUEscUMsQ0FBQUEscUM7RUFBQUEscUMsQ0FBQUEscUM7RUFBQUEscUMsQ0FBQUEscUM7RUFBQUEscUMsQ0FBQUEscUM7RUFBQUEscUMsQ0FBQUEscUM7RUFBQUEscUMsQ0FBQUEscUM7RUFBQUEscUMsQ0FBQUEscUM7R0FBQUEscUMscURBQUFBLHFDOztJQWdCQUMscUM7OztXQUFBQSxxQztFQUFBQSxxQyxDQUFBQSxxQztFQUFBQSxxQyxDQUFBQSxxQztFQUFBQSxxQyxDQUFBQSxxQztFQUFBQSxxQyxDQUFBQSxxQztFQUFBQSxxQyxDQUFBQSxxQztFQUFBQSxxQyxDQUFBQSxxQztHQUFBQSxxQyxxREFBQUEscUM7O0lBU0FDLHlDOzs7V0FBQUEseUM7RUFBQUEseUMsQ0FBQUEseUM7RUFBQUEseUMsQ0FBQUEseUM7RUFBQUEseUMsQ0FBQUEseUM7RUFBQUEseUMsQ0FBQUEseUM7R0FBQUEseUMseURBQUFBLHlDIn0=
+27
View File
@@ -0,0 +1,27 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.shouldHonorAE = void 0;
var _types = require("./types");
// This code is based on the `mssql-jdbc` library published under the conditions of MIT license.
// Copyright (c) 2019 Microsoft Corporation
const shouldHonorAE = (stmtColumnEncryptionSetting, columnEncryptionSetting) => {
switch (stmtColumnEncryptionSetting) {
case _types.SQLServerStatementColumnEncryptionSetting.Disabled:
case _types.SQLServerStatementColumnEncryptionSetting.ResultSetOnly:
return false;
case _types.SQLServerStatementColumnEncryptionSetting.Enabled:
return true;
default:
return columnEncryptionSetting;
}
};
exports.shouldHonorAE = shouldHonorAE;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzaG91bGRIb25vckFFIiwic3RtdENvbHVtbkVuY3J5cHRpb25TZXR0aW5nIiwiY29sdW1uRW5jcnlwdGlvblNldHRpbmciLCJTUUxTZXJ2ZXJTdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyIsIkRpc2FibGVkIiwiUmVzdWx0U2V0T25seSIsIkVuYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYWx3YXlzLWVuY3J5cHRlZC91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gdGhlIGBtc3NxbC1qZGJjYCBsaWJyYXJ5IHB1Ymxpc2hlZCB1bmRlciB0aGUgY29uZGl0aW9ucyBvZiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAoYykgMjAxOSBNaWNyb3NvZnQgQ29ycG9yYXRpb25cblxuaW1wb3J0IHsgU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IHNob3VsZEhvbm9yQUUgPSAoc3RtdENvbHVtbkVuY3J5cHRpb25TZXR0aW5nOiBTUUxTZXJ2ZXJTdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZywgY29sdW1uRW5jcnlwdGlvblNldHRpbmc6IGJvb2xlYW4pOiBib29sZWFuID0+IHtcbiAgc3dpdGNoIChzdG10Q29sdW1uRW5jcnlwdGlvblNldHRpbmcpIHtcbiAgICBjYXNlIFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nLkRpc2FibGVkOlxuICAgIGNhc2UgU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcuUmVzdWx0U2V0T25seTpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjYXNlIFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nLkVuYWJsZWQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbHVtbkVuY3J5cHRpb25TZXR0aW5nO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0E7O0FBSEE7QUFDQTtBQUlPLE1BQU1BLGFBQWEsR0FBRyxDQUFDQywyQkFBRCxFQUF5RUMsdUJBQXpFLEtBQXVIO0VBQ2xKLFFBQVFELDJCQUFSO0lBQ0UsS0FBS0UsaURBQTBDQyxRQUEvQztJQUNBLEtBQUtELGlEQUEwQ0UsYUFBL0M7TUFDRSxPQUFPLEtBQVA7O0lBQ0YsS0FBS0YsaURBQTBDRyxPQUEvQztNQUNFLE9BQU8sSUFBUDs7SUFDRjtNQUNFLE9BQU9KLHVCQUFQO0VBUEo7QUFTRCxDQVZNIn0=