localspace 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/drivers/indexeddb.d.ts.map +1 -1
- package/dist/drivers/indexeddb.js +6 -8
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/drivers/indexeddb.ts +5 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../src/drivers/indexeddb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAKP,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../src/drivers/indexeddb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAKP,MAAM,UAAU,CAAC;AAgkClB,QAAA,MAAM,YAAY,EAAE,MAanB,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -451,6 +451,9 @@ function iterate(iterator, callback) {
|
|
|
451
451
|
const cursor = req.result;
|
|
452
452
|
if (cursor) {
|
|
453
453
|
let value = cursor.value;
|
|
454
|
+
if (value === undefined) {
|
|
455
|
+
value = null;
|
|
456
|
+
}
|
|
454
457
|
if (isEncodedBlob(value)) {
|
|
455
458
|
value = decodeBlob(value);
|
|
456
459
|
}
|
|
@@ -500,14 +503,11 @@ function setItem(key, value, callback) {
|
|
|
500
503
|
const storeName = requireStoreName(dbInfo);
|
|
501
504
|
const store = transaction.objectStore(storeName);
|
|
502
505
|
let actualValue = value;
|
|
503
|
-
if (actualValue ===
|
|
504
|
-
actualValue =
|
|
506
|
+
if (actualValue === undefined) {
|
|
507
|
+
actualValue = null;
|
|
505
508
|
}
|
|
506
509
|
const req = store.put(actualValue, key);
|
|
507
510
|
transaction.oncomplete = () => {
|
|
508
|
-
if (actualValue === undefined) {
|
|
509
|
-
actualValue = null;
|
|
510
|
-
}
|
|
511
511
|
resolve(actualValue);
|
|
512
512
|
};
|
|
513
513
|
transaction.onabort = transaction.onerror = () => {
|
|
@@ -833,8 +833,6 @@ function dropInstance(options, callback) {
|
|
|
833
833
|
advanceReadiness(forage._dbInfo);
|
|
834
834
|
}
|
|
835
835
|
}
|
|
836
|
-
// Close the database after use
|
|
837
|
-
db.close();
|
|
838
836
|
})
|
|
839
837
|
.catch((err) => {
|
|
840
838
|
if (dbContext) {
|
|
@@ -862,4 +860,4 @@ const asyncStorage = {
|
|
|
862
860
|
dropInstance,
|
|
863
861
|
};
|
|
864
862
|
export default asyncStorage;
|
|
865
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZGRiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RyaXZlcnMvaW5kZXhlZGRiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFPQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQVc3QyxNQUFNLHlCQUF5QixHQUFHLGtDQUFrQyxDQUFDO0FBQ3JFLElBQUksYUFBa0MsQ0FBQztBQUN2QyxNQUFNLFVBQVUsR0FBOEIsRUFBRSxDQUFDO0FBQ2pELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBRTNDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQztBQUM3QixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFDL0IsSUFBSSx3QkFBd0IsR0FBNEIsSUFBSSxDQUFDO0FBRTdELE1BQU0sa0JBQWtCLEdBQUcsR0FBMEIsRUFBRTtJQUNyRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFlRixTQUFTLE1BQU07SUFDYixJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FDTCxNQUFNLENBQUMsU0FBUztZQUNoQixNQUFNLENBQUMsZUFBZTtZQUN0QixNQUFNLENBQUMsWUFBWTtZQUNu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LEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQzt3QkFDdkIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNuQyxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsK0JBQStCO2dCQUMvQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCxlQUFlLENBQUMsZ0JBQTBCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ25ELENBQUM7Z0JBQ0QsTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sWUFBWSxHQUFXO0lBQzNCLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLFlBQVk7SUFDWixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUEyQjtJQUM5RCxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxVQUFVO0lBQ1YsS0FBSztJQUNMLE1BQU07SUFDTixHQUFHO0lBQ0gsSUFBSTtJQUNKLFlBQVk7Q0FDYixDQUFDO0FBRUYsZUFBZSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIERyaXZlcixcbiAgRGJJbmZvLFxuICBMb2NhbFNwYWNlQ29uZmlnLFxuICBDYWxsYmFjayxcbiAgTG9jYWxTcGFjZUluc3RhbmNlLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBleGVjdXRlQ2FsbGJhY2ssIG5vcm1hbGl6ZUtleSwgY3JlYXRlQmxvYiB9IGZyb20gJy4uL3V0aWxzL2hlbHBlcnMnO1xuaW1wb3J0IHNlcmlhbGl6ZXIgZnJvbSAnLi4vdXRpbHMvc2VyaWFsaXplcic7XG5cbnR5cGUgSW5kZXhlZERCRHJpdmVyQ29udGV4dCA9IExvY2FsU3BhY2VJbnN0YW5jZSAmXG4gIFBhcnRpYWw8RHJpdmVyPiAmIHtcbiAgICBfZGJJbmZvOiBEYkluZm87XG4gICAgX2RlZmF1bHRDb25maWc6IExvY2FsU3BhY2VDb25maWc7XG4gICAgX2luaXRSZWFkeT86ICgpID0+IFByb21pc2U8dm9pZD47XG4gICAgcmVhZHkoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBjb25maWcoKTogTG9jYWxTcGFjZUNvbmZpZztcbiAgfTtcblxuY29uc3QgREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSA9ICdsb2NhbC1mb3JhZ2UtZGV0ZWN0LWJsb2Itc3VwcG9ydCc7XG5sZXQgc3VwcG9ydHNCbG9iczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbmNvbnN0IGRiQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIERiQ29udGV4dD4gPSB7fTtcbmNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuY29uc3QgUkVBRF9PTkxZID0gJ3JlYWRvbmx5JztcbmNvbnN0IFJFQURfV1JJVEUgPSAncmVhZHdyaXRlJztcbmxldCBkZXRlY3RCbG9iU3VwcG9ydFByb21pc2U6IFByb21pc2U8Ym9vbGVhbj4gfCBudWxsID0gbnVsbDtcblxuY29uc3QgZ2V0TmF2aWdhdG9yT2JqZWN0ID0gKCk6IE5hdmlnYXRvciB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3I7XG4gIH1cblxuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmludGVyZmFjZSBEYkNvbnRleHQge1xuICBmb3JhZ2VzOiBJbmRleGVkREJEcml2ZXJDb250ZXh0W107XG4gIGRiOiBJREJEYXRhYmFzZSB8IG51bGw7XG4gIGRiUmVhZHk6IFByb21pc2U8dm9pZD4gfCBudWxsO1xuICBkZWZlcnJlZE9wZXJhdGlvbnM6IERlZmVycmVkT3BlcmF0aW9uW107XG59XG5cbmludGVyZmFjZSBEZWZlcnJlZE9wZXJhdGlvbiB7XG4gIHByb21pc2U6IFByb21pc2U8dm9pZD47XG4gIHJlc29sdmU6ICgpID0+IHZvaWQ7XG4gIHJlamVjdDogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZ2V0SURCKCk6IElEQkZhY3RvcnkgfCBudWxsIHtcbiAgaWYgKHR5cGVvZiBpbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGluZGV4ZWREQjtcbiAgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgd2luZG93LmluZGV4ZWREQiB8fFxuICAgICAgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fFxuICAgICAgd2luZG93Lm1vekluZGV4ZWREQiB8fFxuICAgICAgd2luZG93Lk9JbmRleGVkREIgfHxcbiAgICAgIHdpbmRvdy5tc0luZGV4ZWREQiB8fFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzSW5kZXhlZERCVmFsaWQoKTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGNvbnN0IGlkYiA9IGdldElEQigpO1xuICAgIGlmICghaWRiKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBpZiBJbmRleGVkREIgaXMgYXZhaWxhYmxlIGFuZCBmdW5jdGlvbmFsXG4gICAgY29uc3QgbmF2ID0gZ2V0TmF2aWdhdG9yT2JqZWN0KCk7XG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2Py51c2VyQWdlbnQgPz8gJyc7XG4gICAgY29uc3QgaXNTYWZhcmkgPVxuICAgICAgISFuYXYgJiYgL1NhZmFyaS8udGVzdCh1c2VyQWdlbnQpICYmICEvQ2hyb21lLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiAgICAvLyBTYWZhcmkgcHJpdmF0ZSBicm93c2luZyBtb2RlIHRocm93cyB3aGVuIHRyeWluZyB0byBhY2Nlc3MgaW5kZXhlZERCXG4gICAgaWYgKGlzU2FmYXJpKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3Qgb3BlblJlcXVlc3QgPSBpZGIub3BlbignX19sb2NhbGZvcmFnZV90ZXN0Jyk7XG4gICAgICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICBvcGVuUmVxdWVzdC5yZXN1bHQuY2xvc2UoKTtcbiAgICAgICAgICBpZGIuZGVsZXRlRGF0YWJhc2UoJ19fbG9jYWxmb3JhZ2VfdGVzdCcpO1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIG9wZW5SZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrQmxvYlN1cHBvcnQoZGI6IElEQkRhdGFiYXNlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmICh0eXBlb2Ygc3VwcG9ydHNCbG9icyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdXBwb3J0c0Jsb2JzKTtcbiAgfVxuXG4gIGlmIChkZXRlY3RCbG9iU3VwcG9ydFByb21pc2UpIHtcbiAgICByZXR1cm4gZGV0ZWN0QmxvYlN1cHBvcnRQcm9taXNlO1xuICB9XG5cbiAgZGV0ZWN0QmxvYlN1cHBvcnRQcm9taXNlID0gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCB0eG4gPSBkYi50cmFuc2FjdGlvbihERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFLCBSRUFEX1dSSVRFKTtcbiAgICBjb25zdCBibG9iID0gY3JlYXRlQmxvYihbJyddKTtcblxuICAgIHR4bi5vYmplY3RTdG9yZShERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFKS5wdXQoYmxvYiwgJ2tleScpO1xuXG4gICAgdHhuLm9uYWJvcnQgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgdHhuLm9uZXJyb3IgPSB0eG4ub25hYm9ydDtcblxuICAgIHR4bi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgY29uc3QgbmF2ID0gZ2V0TmF2aWdhdG9yT2JqZWN0KCk7XG4gICAgICBjb25zdCB1YSA9IG5hdj8udXNlckFnZW50ID8/ICcnO1xuICAgICAgY29uc3QgbWF0Y2hlZENocm9tZSA9IHVhLm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICAgIGNvbnN0IG1hdGNoZWRFZGdlID0gdWEubWF0Y2goL0VkZ2VcXC8vKTtcbiAgICAgIGNvbnN0IGNocm9tZVZlcnNpb24gPSBtYXRjaGVkQ2hyb21lXG4gICAgICAgID8gcGFyc2VJbnQobWF0Y2hlZENocm9tZVsxXSwgMTApXG4gICAgICAgIDogTmFOO1xuICAgICAgY29uc3Qgc3VwcG9ydHNMYXJnZUJsb2JzID1cbiAgICAgICAgISFtYXRjaGVkRWRnZSB8fFxuICAgICAgICAhbWF0Y2hlZENocm9tZSB8fFxuICAgICAgICBOdW1iZXIuaXNOYU4oY2hyb21lVmVyc2lvbikgfHxcbiAgICAgICAgY2hyb21lVmVyc2lvbiA+PSA0MztcbiAgICAgIHJlc29sdmUoc3VwcG9ydHNMYXJnZUJsb2JzKTtcbiAgICB9O1xuICB9KVxuICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIHN1cHBvcnRzQmxvYnMgPSByZXN1bHQ7XG4gICAgICBkZXRlY3RCbG9iU3VwcG9ydFByb21pc2UgPSBudWxsO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KVxuICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICBkZXRlY3RCbG9iU3VwcG9ydFByb21pc2UgPSBudWxsO1xuICAgICAgc3VwcG9ydHNCbG9icyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gIHJldHVybiBkZXRlY3RCbG9iU3VwcG9ydFByb21pc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iOiBCbG9iKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICBpZiAodHlwZW9mIGJsb2IuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gYmxvYi5hcnJheUJ1ZmZlcigpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBGaWxlUmVhZGVyID09PSAndW5kZWZpbmVkJykge1xuICAgIHRocm93IG5ldyBFcnJvcignQmxvYiBzZXJpYWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPEFycmF5QnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHJlamVjdChyZWFkZXIuZXJyb3IpO1xuICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXIpO1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuY29kZUJsb2IoYmxvYjogQmxvYik6IFByb21pc2U8e1xuICBfX2xvY2FsX2ZvcmFnZV9lbmNvZGVkX2Jsb2I6IGJvb2xlYW47XG4gIGRhdGE6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufT4ge1xuICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgcmV0dXJuIHtcbiAgICBfX2xvY2FsX2ZvcmFnZV9lbmNvZGVkX2Jsb2I6IHRydWUsXG4gICAgZGF0YTogc2VyaWFsaXplci5idWZmZXJUb1N0cmluZyhhcnJheUJ1ZmZlciksXG4gICAgdHlwZTogYmxvYi50eXBlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBkZWNvZGVCbG9iKGVuY29kZWRCbG9iOiB7XG4gIF9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYjogYm9vbGVhbjtcbiAgZGF0YTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59KTogQmxvYiB7XG4gIGNvbnN0IGJ1ZmZlciA9IHNlcmlhbGl6ZXIuc3RyaW5nVG9CdWZmZXIoZW5jb2RlZEJsb2IuZGF0YSk7XG4gIHJldHVybiBjcmVhdGVCbG9iKFtidWZmZXJdLCB7IHR5cGU6IGVuY29kZWRCbG9iLnR5cGUgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRW5jb2RlZEJsb2IodmFsdWU/OiB7XG4gIF9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYj86IGJvb2xlYW47XG59KTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXZhbHVlPy5fX2xvY2FsX2ZvcmFnZV9lbmNvZGVkX2Jsb2I7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURiQ29udGV4dCgpOiBEYkNvbnRleHQge1xuICByZXR1cm4ge1xuICAgIGZvcmFnZXM6IFtdLFxuICAgIGRiOiBudWxsLFxuICAgIGRiUmVhZHk6IG51bGwsXG4gICAgZGVmZXJyZWRPcGVyYXRpb25zOiBbXSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZURiTmFtZShkYkluZm86IERiSW5mbyk6IHN0cmluZyB7XG4gIGlmIChkYkluZm8ubmFtZSkge1xuICAgIHJldHVybiBkYkluZm8ubmFtZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0luZGV4ZWREQiBkYXRhYmFzZSBuYW1lIGlzIG5vdCBjb25maWd1cmVkLicpO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlU3RvcmVOYW1lKGRiSW5mbzogRGJJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGRiSW5mby5zdG9yZU5hbWUpIHtcbiAgICByZXR1cm4gZGJJbmZvLnN0b3JlTmFtZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0luZGV4ZWREQiBzdG9yZU5hbWUgaXMgbm90IGNvbmZpZ3VyZWQuJyk7XG59XG5cbmZ1bmN0aW9uIGRlZmVyUmVhZGluZXNzKGRiSW5mbzogRGJJbmZvKTogdm9pZCB7XG4gIGNvbnN0IGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWUhXTtcbiAgY29uc3QgZGVmZXJyZWRPcGVyYXRpb246IERlZmVycmVkT3BlcmF0aW9uID0ge1xuICAgIHByb21pc2U6IG51bGwgYXMgYW55LFxuICAgIHJlc29sdmU6IG51bGwgYXMgYW55LFxuICAgIHJlamVjdDogbnVsbCBhcyBhbnksXG4gIH07XG5cbiAgZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xuXG4gIGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucHVzaChkZWZlcnJlZE9wZXJhdGlvbik7XG5cbiAgaWYgKCFkYkNvbnRleHQuZGJSZWFkeSkge1xuICAgIGRiQ29udGV4dC5kYlJlYWR5ID0gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgfSBlbHNlIHtcbiAgICBkYkNvbnRleHQuZGJSZWFkeSA9IGRiQ29udGV4dC5kYlJlYWR5LnRoZW4oKCkgPT4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWR2YW5jZVJlYWRpbmVzcyhkYkluZm86IERiSW5mbyk6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQge1xuICBjb25zdCBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lIV07XG4gIGNvbnN0IGRlZmVycmVkT3BlcmF0aW9uID0gZGJDb250ZXh0LmRlZmVycmVkT3BlcmF0aW9ucy5wb3AoKTtcblxuICBpZiAoZGVmZXJyZWRPcGVyYXRpb24pIHtcbiAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZXNvbHZlKCk7XG4gICAgcmV0dXJuIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVqZWN0UmVhZGluZXNzKFxuICBkYkluZm86IERiSW5mbyxcbiAgZXJyOiBFcnJvclxuKTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWUhXTtcbiAgY29uc3QgZGVmZXJyZWRPcGVyYXRpb24gPSBkYkNvbnRleHQuZGVmZXJyZWRPcGVyYXRpb25zLnBvcCgpO1xuXG4gIGlmIChkZWZlcnJlZE9wZXJhdGlvbikge1xuICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlamVjdChlcnIpO1xuICAgIHJldHVybiBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENvbm5lY3Rpb24oXG4gIGRiSW5mbzogRGJJbmZvLFxuICB1cGdyYWRlTmVlZGVkOiBib29sZWFuXG4pOiBQcm9taXNlPElEQkRhdGFiYXNlPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaWRiID0gZ2V0SURCKCk7XG4gICAgaWYgKCFpZGIpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdJbmRleGVkREIgbm90IGF2YWlsYWJsZScpKTtcbiAgICB9XG5cbiAgICBkYkNvbnRleHRzW2RiSW5mby5uYW1lIV0gPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lIV0gfHwgY3JlYXRlRGJDb250ZXh0KCk7XG5cbiAgICBpZiAoZGJJbmZvLmRiKSB7XG4gICAgICBpZiAodXBncmFkZU5lZWRlZCkge1xuICAgICAgICBkZWZlclJlYWRpbmVzcyhkYkluZm8pO1xuICAgICAgICBkYkluZm8uZGIuY2xvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGRiSW5mby5kYik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbnJlcSA9IHVwZ3JhZGVOZWVkZWRcbiAgICAgID8gaWRiLm9wZW4oZGJJbmZvLm5hbWUhLCBkYkluZm8udmVyc2lvbilcbiAgICAgIDogaWRiLm9wZW4oZGJJbmZvLm5hbWUhKTtcblxuICAgIGlmICh1cGdyYWRlTmVlZGVkKSB7XG4gICAgICBvcGVucmVxLm9udXBncmFkZW5lZWRlZCA9IChlOiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZGIgPSAoZS50YXJnZXQgYXMgSURCT3BlbkRCUmVxdWVzdCkucmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKGRiSW5mby5zdG9yZU5hbWUhKTtcbiAgICAgICAgICBpZiAoZS5vbGRWZXJzaW9uIDw9IDEpIHtcbiAgICAgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXg6IGFueSkge1xuICAgICAgICAgIGlmIChleC5uYW1lID09PSAnQ29uc3RyYWludEVycm9yJykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBgVGhlIGRhdGFiYXNlIFwiJHtkYkluZm8ubmFtZX1cIiBoYXMgYmVlbiB1cGdyYWRlZCBmcm9tIHZlcnNpb24gJHtlLm9sZFZlcnNpb259IHRvIHZlcnNpb24gJHtlLm5ld1ZlcnNpb259LCBidXQgdGhlIHN0b3JhZ2UgXCIke2RiSW5mby5zdG9yZU5hbWV9XCIgYWxyZWFkeSBleGlzdHMuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIG9wZW5yZXEub25lcnJvciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmVqZWN0KChlLnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5lcnJvcik7XG4gICAgfTtcblxuICAgIG9wZW5yZXEub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGIgPSBvcGVucmVxLnJlc3VsdDtcbiAgICAgIGRiLm9udmVyc2lvbmNoYW5nZSA9IChlOiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgICAgKGUudGFyZ2V0IGFzIElEQkRhdGFiYXNlKS5jbG9zZSgpO1xuICAgICAgfTtcbiAgICAgIHJlc29sdmUoZGIpO1xuICAgICAgYWR2YW5jZVJlYWRpbmVzcyhkYkluZm8pO1xuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1VwZ3JhZGVOZWVkZWQoZGJJbmZvOiBEYkluZm8sIGRlZmF1bHRWZXJzaW9uOiBudW1iZXIpOiBib29sZWFuIHtcbiAgaWYgKCFkYkluZm8uZGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGlzTmV3U3RvcmUgPSAhZGJJbmZvLmRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoZGJJbmZvLnN0b3JlTmFtZSEpO1xuICBjb25zdCBpc0Rvd25ncmFkZSA9IGRiSW5mby52ZXJzaW9uISA8IGRiSW5mby5kYi52ZXJzaW9uO1xuICBjb25zdCBpc1VwZ3JhZGUgPSBkYkluZm8udmVyc2lvbiEgPiBkYkluZm8uZGIudmVyc2lvbjtcblxuICBpZiAoaXNEb3duZ3JhZGUpIHtcbiAgICBpZiAoZGJJbmZvLnZlcnNpb24gIT09IGRlZmF1bHRWZXJzaW9uKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBUaGUgZGF0YWJhc2UgXCIke2RiSW5mby5uYW1lfVwiIGNhbid0IGJlIGRvd25ncmFkZWQgZnJvbSB2ZXJzaW9uICR7ZGJJbmZvLmRiLnZlcnNpb259IHRvIHZlcnNpb24gJHtkYkluZm8udmVyc2lvbn0uYFxuICAgICAgKTtcbiAgICB9XG4gICAgZGJJbmZvLnZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbjtcbiAgfVxuXG4gIGlmIChpc1VwZ3JhZGUgfHwgaXNOZXdTdG9yZSkge1xuICAgIGlmIChpc05ld1N0b3JlKSB7XG4gICAgICBjb25zdCBpbmNWZXJzaW9uID0gZGJJbmZvLmRiLnZlcnNpb24gKyAxO1xuICAgICAgaWYgKGluY1ZlcnNpb24gPiBkYkluZm8udmVyc2lvbiEpIHtcbiAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBpbmNWZXJzaW9uO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHJhbnNhY3Rpb24oXG4gIGRiSW5mbzogRGJJbmZvLFxuICBtb2RlOiBJREJUcmFuc2FjdGlvbk1vZGUsXG4gIGNhbGxiYWNrOiAoZXJyb3I6IEVycm9yIHwgbnVsbCwgdHJhbnNhY3Rpb24/OiBJREJUcmFuc2FjdGlvbikgPT4gdm9pZCxcbiAgcmV0cmllczogbnVtYmVyID0gMVxuKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgdHggPSBkYkluZm8uZGIhLnRyYW5zYWN0aW9uKGRiSW5mby5zdG9yZU5hbWUhLCBtb2RlKTtcbiAgICBjYWxsYmFjayhudWxsLCB0eCk7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKFxuICAgICAgcmV0cmllcyA+IDAgJiZcbiAgICAgICghZGJJbmZvLmRiIHx8XG4gICAgICAgIGVyci5uYW1lID09PSAnSW52YWxpZFN0YXRlRXJyb3InIHx8XG4gICAgICAgIGVyci5uYW1lID09PSAnTm90Rm91bmRFcnJvcicpXG4gICAgKSB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWRiSW5mby5kYiB8fFxuICAgICAgICAgICAgKGVyci5uYW1lID09PSAnTm90Rm91bmRFcnJvcicgJiZcbiAgICAgICAgICAgICAgIWRiSW5mby5kYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGRiSW5mby5zdG9yZU5hbWUhKSAmJlxuICAgICAgICAgICAgICBkYkluZm8udmVyc2lvbiEgPD0gZGJJbmZvLmRiLnZlcnNpb24pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICAgIGRiSW5mby52ZXJzaW9uID0gZGJJbmZvLmRiLnZlcnNpb24gKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdldENvbm5lY3Rpb24oZGJJbmZvLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdHJ5UmVjb25uZWN0KGRiSW5mbykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihkYkluZm8sIG1vZGUsIGNhbGxiYWNrLCByZXRyaWVzIC0gMSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxiYWNrKGVycik7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5UmVjb25uZWN0KGRiSW5mbzogRGJJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gIGRlZmVyUmVhZGluZXNzKGRiSW5mbyk7XG5cbiAgY29uc3QgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZSFdO1xuICBjb25zdCBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXM7XG5cbiAgZm9yIChjb25zdCBmb3JhZ2Ugb2YgZm9yYWdlcykge1xuICAgIGlmIChmb3JhZ2UuX2RiSW5mby5kYikge1xuICAgICAgZm9yYWdlLl9kYkluZm8uZGIuY2xvc2UoKTtcbiAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgZGJJbmZvLmRiID0gbnVsbDtcblxuICByZXR1cm4gZ2V0Q29ubmVjdGlvbihkYkluZm8sIGZhbHNlKVxuICAgIC50aGVuKChkYikgPT4ge1xuICAgICAgZGJJbmZvLmRiID0gZGI7XG4gICAgICBpZiAoaXNVcGdyYWRlTmVlZGVkKGRiSW5mbywgMS4wKSkge1xuICAgICAgICByZXR1cm4gZ2V0Q29ubmVjdGlvbihkYkluZm8sIHRydWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRiO1xuICAgIH0pXG4gICAgLnRoZW4oKGRiKSA9PiB7XG4gICAgICBkYkluZm8uZGIgPSBkYkNvbnRleHQuZGIgPSBkYjtcbiAgICAgIGZvciAoY29uc3QgZm9yYWdlIG9mIGZvcmFnZXMpIHtcbiAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICByZWplY3RSZWFkaW5lc3MoZGJJbmZvLCBlcnIpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfaW5pdFN0b3JhZ2UoXG4gIHRoaXM6IEluZGV4ZWREQkRyaXZlckNvbnRleHQsXG4gIGNvbmZpZzogTG9jYWxTcGFjZUNvbmZpZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBjb25zdCBkYkluZm86IERiSW5mbyA9IHsgZGI6IG51bGwgfTtcblxuICBmb3IgKGNvbnN0IGkgaW4gY29uZmlnKSB7XG4gICAgT2JqZWN0LmFzc2lnbihkYkluZm8sIHtcbiAgICAgIFtpXTogY29uZmlnW2kgYXMga2V5b2YgTG9jYWxTcGFjZUNvbmZpZ10sXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBkYk5hbWUgPSByZXF1aXJlRGJOYW1lKGRiSW5mbyk7XG4gIGxldCBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiTmFtZV07XG5cbiAgaWYgKCFkYkNvbnRleHQpIHtcbiAgICBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiTmFtZV0gPSBjcmVhdGVEYkNvbnRleHQoKTtcbiAgfVxuXG4gIGRiQ29udGV4dC5mb3JhZ2VzLnB1c2goc2VsZik7XG5cbiAgaWYgKCFzZWxmLl9pbml0UmVhZHkpIHtcbiAgICBzZWxmLl9pbml0UmVhZHkgPSBzZWxmLnJlYWR5O1xuICAgIHNlbGYucmVhZHkgPSBmdWxseVJlYWR5O1xuICB9XG5cbiAgY29uc3QgaW5pdFByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuICBmdW5jdGlvbiBpZ25vcmVFcnJvcnMoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgZm9yIChjb25zdCBmb3JhZ2Ugb2YgZGJDb250ZXh0LmZvcmFnZXMpIHtcbiAgICBpZiAoZm9yYWdlICE9PSBzZWxmKSB7XG4gICAgICBjb25zdCBpbml0UmVhZHkgPSAoZm9yYWdlLl9pbml0UmVhZHkgPz8gZm9yYWdlLnJlYWR5KS5iaW5kKGZvcmFnZSk7XG4gICAgICBpbml0UHJvbWlzZXMucHVzaChpbml0UmVhZHkoKS5jYXRjaChpZ25vcmVFcnJvcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXMuc2xpY2UoMCk7XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoaW5pdFByb21pc2VzKTtcblxuICBkYkluZm8uZGIgPSBkYkNvbnRleHQuZGI7XG4gIGNvbnN0IGRiID0gYXdhaXQgZ2V0Q29ubmVjdGlvbihkYkluZm8sIGZhbHNlKTtcbiAgZGJJbmZvLmRiID0gZGI7XG5cbiAgY29uc3QgZGVmYXVsdFZlcnNpb24gPSBzZWxmLl9kZWZhdWx0Q29uZmlnLnZlcnNpb24gPz8gMTtcbiAgaWYgKGlzVXBncmFkZU5lZWRlZChkYkluZm8sIGRlZmF1bHRWZXJzaW9uKSkge1xuICAgIGNvbnN0IHVwZ3JhZGVkRGIgPSBhd2FpdCBnZXRDb25uZWN0aW9uKGRiSW5mbywgdHJ1ZSk7XG4gICAgZGJJbmZvLmRiID0gZGJDb250ZXh0LmRiID0gdXBncmFkZWREYjtcbiAgfSBlbHNlIHtcbiAgICBkYkluZm8uZGIgPSBkYkNvbnRleHQuZGIgPSBkYjtcbiAgfVxuXG4gIHNlbGYuX2RiSW5mbyA9IGRiSW5mbztcblxuICBmb3IgKGNvbnN0IGZvcmFnZSBvZiBmb3JhZ2VzKSB7XG4gICAgaWYgKGZvcmFnZSAhPT0gc2VsZikge1xuICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBkYkluZm8uZGI7XG4gICAgICBmb3JhZ2UuX2RiSW5mby52ZXJzaW9uID0gZGJJbmZvLnZlcnNpb247XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZ1bGx5UmVhZHkoXG4gIHRoaXM6IEluZGV4ZWREQkRyaXZlckNvbnRleHQsXG4gIGNhbGxiYWNrPzogQ2FsbGJhY2s8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzZWxmID0gdGhpcztcblxuICBjb25zdCBpbml0UmVhZHkgPSAoc2VsZi5faW5pdFJlYWR5ID8/IHNlbGYucmVhZHkpLmJpbmQoc2VsZik7XG4gIGNvbnN0IHByb21pc2UgPSBpbml0UmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICBjb25zdCBkYk5hbWUgPSByZXF1aXJlRGJOYW1lKHNlbGYuX2RiSW5mbyk7XG4gICAgY29uc3QgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYk5hbWVdO1xuICAgIGlmIChkYkNvbnRleHQgJiYgZGJDb250ZXh0LmRiUmVhZHkpIHtcbiAgICAgIHJldHVybiBkYkNvbnRleHQuZGJSZWFkeTtcbiAgICB9XG4gIH0pO1xuXG4gIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBnZXRJdGVtPFQ+KFxuICB0aGlzOiBJbmRleGVkREJEcml2ZXJDb250ZXh0LFxuICBrZXk6IHN0cmluZyxcbiAgY2FsbGJhY2s/OiBDYWxsYmFjazxUPlxuKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFQgfCBudWxsPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2VsZlxuICAgICAgLnJlYWR5KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oXG4gICAgICAgICAgc2VsZi5fZGJJbmZvLFxuICAgICAgICAgIFJFQURfT05MWSxcbiAgICAgICAgICAoZXJyOiBFcnJvciB8IG51bGwsIHRyYW5zYWN0aW9uPzogSURCVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gcmVxdWlyZVN0b3JlTmFtZShzZWxmLl9kYkluZm8pO1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uIS5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICAgICAgICAgICAgICBjb25zdCByZXEgPSBzdG9yZS5nZXQoa2V5KTtcblxuICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzRW5jb2RlZEJsb2IodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlY29kZUJsb2IodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICByZXEub25lcnJvciA9ICgpID0+IHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChyZWplY3QpO1xuICB9KTtcblxuICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2sgYXMgQ2FsbGJhY2s8VCB8IG51bGw+KTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGl0ZXJhdGU8VCwgVT4oXG4gIHRoaXM6IEluZGV4ZWREQkRyaXZlckNvbnRleHQsXG4gIGl0ZXJhdG9yOiAodmFsdWU6IFQsIGtleTogc3RyaW5nLCBpdGVyYXRpb25OdW1iZXI6IG51bWJlcikgPT4gVSxcbiAgY2FsbGJhY2s/OiBDYWxsYmFjazxVPlxuKTogUHJvbWlzZTxVPiB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxVPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2VsZlxuICAgICAgLnJlYWR5KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oXG4gICAgICAgICAgc2VsZi5fZGJJbmZvLFxuICAgICAgICAgIFJFQURfT05MWSxcbiAgICAgICAgICAoZXJyOiBFcnJvciB8IG51bGwsIHRyYW5zYWN0aW9uPzogSURCVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gcmVxdWlyZVN0b3JlTmFtZShzZWxmLl9kYkluZm8pO1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uIS5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICAgICAgICAgICAgICBjb25zdCByZXEgPSBzdG9yZS5vcGVuQ3Vyc29yKCk7XG4gICAgICAgICAgICAgIGxldCBpdGVyYXRpb25OdW1iZXIgPSAxO1xuXG4gICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBjdXJzb3IudmFsdWU7XG4gICAgICAgICAgICAgICAgICBpZiAoaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkZWNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGl0ZXJhdG9yKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmtleSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbk51bWJlcisrXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCBhcyBVKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgfSk7XG5cbiAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldEl0ZW08VD4oXG4gIHRoaXM6IEluZGV4ZWREQkRyaXZlckNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogVCxcbiAgY2FsbGJhY2s/OiBDYWxsYmFjazxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8VCB8IG51bGwgfCB1bmRlZmluZWQ+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgZGJJbmZvOiBEYkluZm87XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbGYucmVhZHkoKTtcbiAgICAgIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcblxuICAgICAgaWYgKHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBCbG9iXScpIHtcbiAgICAgICAgY29uc3QgYmxvYlN1cHBvcnQgPSBhd2FpdCBjaGVja0Jsb2JTdXBwb3J0KGRiSW5mby5kYiEpO1xuICAgICAgICBpZiAoIWJsb2JTdXBwb3J0KSB7XG4gICAgICAgICAgdmFsdWUgPSAoYXdhaXQgZW5jb2RlQmxvYih2YWx1ZSBhcyBCbG9iKSkgYXMgVDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjcmVhdGVUcmFuc2FjdGlvbihcbiAgICAgICAgZGJJbmZvLFxuICAgICAgICBSRUFEX1dSSVRFLFxuICAgICAgICAoZXJyOiBFcnJvciB8IG51bGwsIHRyYW5zYWN0aW9uPzogSURCVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycik7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gcmVxdWlyZVN0b3JlTmFtZShkYkluZm8pO1xuICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbiEub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcbiAgICAgICAgICAgIGxldCBhY3R1YWxWYWx1ZTogVCB8IG51bGwgfCB1bmRlZmluZWQgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKGFjdHVhbFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGFjdHVhbFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXEgPSBzdG9yZS5wdXQoYWN0dWFsVmFsdWUsIGtleSk7XG5cbiAgICAgICAgICAgIHRyYW5zYWN0aW9uIS5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoYWN0dWFsVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGFjdHVhbFZhbHVlKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRyYW5zYWN0aW9uIS5vbmFib3J0ID0gdHJhbnNhY3Rpb24hLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGVyciA9IHJlcS5lcnJvciB8fCB0cmFuc2FjdGlvbiEuZXJyb3I7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuICB9KTtcblxuICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSBhcyBQcm9taXNlPFQ+LCBjYWxsYmFjayk7XG4gIHJldHVybiBwcm9taXNlIGFzIFByb21pc2U8VD47XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0oXG4gIHRoaXM6IEluZGV4ZWREQkRyaXZlckNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICBjYWxsYmFjaz86IENhbGxiYWNrPHZvaWQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2VsZlxuICAgICAgLnJlYWR5KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oXG4gICAgICAgICAgc2VsZi5fZGJJbmZvLFxuICAgICAgICAgIFJFQURfV1JJVEUsXG4gICAgICAgICAgKGVycjogRXJyb3IgfCBudWxsLCB0cmFuc2FjdGlvbj86IElEQlRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycik7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0b3JlTmFtZSA9IHJlcXVpcmVTdG9yZU5hbWUoc2VsZi5fZGJJbmZvKTtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbiEub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgY29uc3QgcmVxID0gc3RvcmUuZGVsZXRlKGtleSk7XG5cbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb24hLm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uIS5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uIS5vbmFib3J0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IHJlcS5lcnJvciB8fCB0cmFuc2FjdGlvbiEuZXJyb3I7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKHJlamVjdCk7XG4gIH0pO1xuXG4gIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBjbGVhcihcbiAgdGhpczogSW5kZXhlZERCRHJpdmVyQ29udGV4dCxcbiAgY2FsbGJhY2s/OiBDYWxsYmFjazx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2VsZlxuICAgICAgLnJlYWR5KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oXG4gICAgICAgICAgc2VsZi5fZGJJbmZvLFxuICAgICAgICAgIFJFQURfV1JJVEUsXG4gICAgICAgICAgKGVycjogRXJyb3IgfCBudWxsLCB0cmFuc2FjdGlvbj86IElEQlRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycik7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0b3JlTmFtZSA9IHJlcXVpcmVTdG9yZU5hbWUoc2VsZi5fZGJJbmZvKTtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbiEub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgY29uc3QgcmVxID0gc3RvcmUuY2xlYXIoKTtcblxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbiEub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb24hLm9uYWJvcnQgPSB0cmFuc2FjdGlvbiEub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSByZXEuZXJyb3IgfHwgdHJhbnNhY3Rpb24hLmVycm9yO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChyZWplY3QpO1xuICB9KTtcblxuICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoKFxuICB0aGlzOiBJbmRleGVkREJEcml2ZXJDb250ZXh0LFxuICBjYWxsYmFjaz86IENhbGxiYWNrPG51bWJlcj5cbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZWxmXG4gICAgICAucmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihcbiAgICAgICAgICBzZWxmLl9kYkluZm8sXG4gICAgICAgICAgUkVBRF9PTkxZLFxuICAgICAgICAgIChlcnI6IEVycm9yIHwgbnVsbCwgdHJhbnNhY3Rpb24/OiBJREJUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSByZXF1aXJlU3RvcmVOYW1lKHNlbGYuX2RiSW5mbyk7XG4gICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24hLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgIGNvbnN0IHJlcSA9IHN0b3JlLmNvdW50KCk7XG5cbiAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxLnJlc3VsdCk7XG4gICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKHJlamVjdCk7XG4gIH0pO1xuXG4gIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXkoXG4gIHRoaXM6IEluZGV4ZWREQkRyaXZlckNvbnRleHQsXG4gIG46IG51bWJlcixcbiAgY2FsbGJhY2s/OiBDYWxsYmFjazxzdHJpbmc+XG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPHN0cmluZyB8IG51bGw+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAobiA8IDApIHtcbiAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZlxuICAgICAgLnJlYWR5KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oXG4gICAgICAgICAgc2VsZi5fZGJJbmZvLFxuICAgICAgICAgIFJFQURfT05MWSxcbiAgICAgICAgICAoZXJyOiBFcnJvciB8IG51bGwsIHRyYW5zYWN0aW9uPzogSURCVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gcmVxdWlyZVN0b3JlTmFtZShzZWxmLl9kYkluZm8pO1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uIS5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICAgICAgICAgICAgICBsZXQgYWR2YW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY29uc3QgcmVxID0gc3RvcmUub3BlbktleUN1cnNvcigpO1xuXG4gICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjdXJzb3Iua2V5IGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmICghYWR2YW5jZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3IuYWR2YW5jZShuKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY3Vyc29yLmtleSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICByZXEub25lcnJvciA9ICgpID0+IHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChyZWplY3QpO1xuICB9KTtcblxuICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2sgYXMgQ2FsbGJhY2s8c3RyaW5nIHwgbnVsbD4pO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24ga2V5cyhcbiAgdGhpczogSW5kZXhlZERCRHJpdmVyQ29udGV4dCxcbiAgY2FsbGJhY2s/OiBDYWxsYmFjazxzdHJpbmdbXT5cbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPHN0cmluZ1tdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2VsZlxuICAgICAgLnJlYWR5KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oXG4gICAgICAgICAgc2VsZi5fZGJJbmZvLFxuICAgICAgICAgIFJFQURfT05MWSxcbiAgICAgICAgICAoZXJyOiBFcnJvciB8IG51bGwsIHRyYW5zYWN0aW9uPzogSURCVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gcmVxdWlyZVN0b3JlTmFtZShzZWxmLl9kYkluZm8pO1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uIS5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICAgICAgICAgICAgICBjb25zdCByZXEgPSBzdG9yZS5vcGVuS2V5Q3Vyc29yKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3IgPSByZXEucmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmICghY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGtleXMpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3Vyc29yLmtleSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKHJlamVjdCk7XG4gIH0pO1xuXG4gIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBkcm9wSW5zdGFuY2UoXG4gIHRoaXM6IEluZGV4ZWREQkRyaXZlckNvbnRleHQsXG4gIG9wdGlvbnM/OiBMb2NhbFNwYWNlQ29uZmlnLFxuICBjYWxsYmFjaz86IENhbGxiYWNrPHZvaWQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGNvbnN0IGN1cnJlbnRDb25maWcgPSBzZWxmLmNvbmZpZygpO1xuXG4gIC8vIE5vcm1hbGl6ZSBvcHRpb25zXG4gIGNvbnN0IGVmZmVjdGl2ZU9wdGlvbnM6IExvY2FsU3BhY2VDb25maWcgPSB7XG4gICAgLi4uKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyA/IG9wdGlvbnMgOiB7fSksXG4gIH07XG5cbiAgaWYgKCFlZmZlY3RpdmVPcHRpb25zLm5hbWUpIHtcbiAgICBlZmZlY3RpdmVPcHRpb25zLm5hbWUgPSBjdXJyZW50Q29uZmlnLm5hbWU7XG4gICAgaWYgKCFlZmZlY3RpdmVPcHRpb25zLnN0b3JlTmFtZSkge1xuICAgICAgZWZmZWN0aXZlT3B0aW9ucy5zdG9yZU5hbWUgPSBjdXJyZW50Q29uZmlnLnN0b3JlTmFtZTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25zXG4gIGlmICghZWZmZWN0aXZlT3B0aW9ucy5uYW1lKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudHMnKSk7XG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldE5hbWUgPSBlZmZlY3RpdmVPcHRpb25zLm5hbWUhO1xuICBjb25zdCBjdXJyZW50RGIgPSBzZWxmLl9kYkluZm8/LmRiID8/IG51bGw7XG4gIGNvbnN0IHNob3VsZFJldXNlQ3VycmVudERiID1cbiAgICB0YXJnZXROYW1lID09PSBjdXJyZW50Q29uZmlnLm5hbWUgJiYgY3VycmVudERiICE9PSBudWxsO1xuXG4gIGxldCBkYlByb21pc2U6IFByb21pc2U8SURCRGF0YWJhc2U+O1xuICBpZiAoc2hvdWxkUmV1c2VDdXJyZW50RGIgJiYgY3VycmVudERiKSB7XG4gICAgZGJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGN1cnJlbnREYik7XG4gIH0gZWxzZSB7XG4gICAgZGJQcm9taXNlID0gZ2V0Q29ubmVjdGlvbihlZmZlY3RpdmVPcHRpb25zIGFzIERiSW5mbywgZmFsc2UpLnRoZW4oKGRiKSA9PiB7XG4gICAgICBjb25zdCBkYkNvbnRleHQgPSBkYkNvbnRleHRzW3RhcmdldE5hbWVdO1xuICAgICAgaWYgKGRiQ29udGV4dCkge1xuICAgICAgICBjb25zdCBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXM7XG4gICAgICAgIGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICBmb3IgKGNvbnN0IGZvcmFnZSBvZiBmb3JhZ2VzKSB7XG4gICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBkYjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRiO1xuICAgIH0pO1xuICB9XG5cbiAgbGV0IHByb21pc2U6IFByb21pc2U8dm9pZD47XG5cbiAgLy8gQ2FzZSAxOiBEcm9wIGVudGlyZSBkYXRhYmFzZSAobm8gc3RvcmVOYW1lIHNwZWNpZmllZClcbiAgaWYgKCFlZmZlY3RpdmVPcHRpb25zLnN0b3JlTmFtZSkge1xuICAgIHByb21pc2UgPSBkYlByb21pc2UudGhlbigoZGIpID0+IHtcbiAgICAgIGRlZmVyUmVhZGluZXNzKGVmZmVjdGl2ZU9wdGlvbnMgYXMgRGJJbmZvKTtcblxuICAgICAgY29uc3QgZGJDb250ZXh0ID0gZGJDb250ZXh0c1t0YXJnZXROYW1lXTtcbiAgICAgIGNvbnN0IGZvcmFnZXMgPSBkYkNvbnRleHQ/LmZvcmFnZXMgfHwgW107XG5cbiAgICAgIC8vIENsb3NlIGFsbCBjb25uZWN0aW9uc1xuICAgICAgZGIuY2xvc2UoKTtcbiAgICAgIGZvciAoY29uc3QgZm9yYWdlIG9mIGZvcmFnZXMpIHtcbiAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWxldGUgdGhlIGVudGlyZSBkYXRhYmFzZVxuICAgICAgY29uc3QgZHJvcERCUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgaWRiID0gZ2V0SURCKCk7XG4gICAgICAgIGlmICghaWRiKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ0luZGV4ZWREQiBub3QgYXZhaWxhYmxlJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxID0gaWRiLmRlbGV0ZURhdGFiYXNlKHRhcmdldE5hbWUpO1xuXG4gICAgICAgIHJlcS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IgfHwgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIGRhdGFiYXNlJykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlcS5vbmJsb2NrZWQgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYGRyb3BJbnN0YW5jZSBibG9ja2VkIGZvciBkYXRhYmFzZSBcIiR7dGFyZ2V0TmFtZX1cIiB1bnRpbCBhbGwgb3BlbiBjb25uZWN0aW9ucyBhcmUgY2xvc2VkYFxuICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVxLm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRyb3BEQlByb21pc2VcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChkYkNvbnRleHQpIHtcbiAgICAgICAgICAgIGRiQ29udGV4dC5kYiA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZvcmFnZSBvZiBmb3JhZ2VzKSB7XG4gICAgICAgICAgICAgIGFkdmFuY2VSZWFkaW5lc3MoZm9yYWdlLl9kYkluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZGJDb250ZXh0KSB7XG4gICAgICAgICAgICByZWplY3RSZWFkaW5lc3MoZWZmZWN0aXZlT3B0aW9ucyBhcyBEYkluZm8sIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2FzZSAyOiBEcm9wIHNwZWNpZmljIG9iamVjdCBzdG9yZVxuICAgIHByb21pc2UgPSBkYlByb21pc2UudGhlbigoZGIpID0+IHtcbiAgICAgIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhlZmZlY3RpdmVPcHRpb25zLnN0b3JlTmFtZSEpKSB7XG4gICAgICAgIC8vIFN0b3JlIGRvZXNuJ3QgZXhpc3QsIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdWZXJzaW9uID0gZGIudmVyc2lvbiArIDE7XG5cbiAgICAgIGRlZmVyUmVhZGluZXNzKGVmZmVjdGl2ZU9wdGlvbnMgYXMgRGJJbmZvKTtcblxuICAgICAgY29uc3QgZGJDb250ZXh0ID0gZGJDb250ZXh0c1t0YXJnZXROYW1lXTtcbiAgICAgIGNvbnN0IGZvcmFnZXMgPSBkYkNvbnRleHQ/LmZvcmFnZXMgfHwgW107XG5cbiAgICAgIC8vIENsb3NlIGFsbCBjb25uZWN0aW9uc1xuICAgICAgZGIuY2xvc2UoKTtcbiAgICAgIGZvciAoY29uc3QgZm9yYWdlIG9mIGZvcmFnZXMpIHtcbiAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBudWxsO1xuICAgICAgICBmb3JhZ2UuX2RiSW5mby52ZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgICAgIH1cblxuICAgICAgLy8gRGVsZXRlIHRoZSBvYmplY3Qgc3RvcmUgYnkgdXBncmFkaW5nIHRoZSBkYXRhYmFzZVxuICAgICAgY29uc3QgZHJvcE9iamVjdFByb21pc2UgPSBuZXcgUHJvbWlzZTxJREJEYXRhYmFzZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBpZGIgPSBnZXRJREIoKTtcbiAgICAgICAgaWYgKCFpZGIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignSW5kZXhlZERCIG5vdCBhdmFpbGFibGUnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXEgPSBpZGIub3Blbih0YXJnZXROYW1lLCBuZXdWZXJzaW9uKTtcblxuICAgICAgICByZXEub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgaWYgKGRiKSB7XG4gICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QocmVxLmVycm9yIHx8IG5ldyBFcnJvcignRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UnKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVxLm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgaWYgKGRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoZWZmZWN0aXZlT3B0aW9ucy5zdG9yZU5hbWUhKSkge1xuICAgICAgICAgICAgZGIuZGVsZXRlT2JqZWN0U3RvcmUoZWZmZWN0aXZlT3B0aW9ucy5zdG9yZU5hbWUhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVxLm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBkYiA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgcmVzb2x2ZShkYik7XG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRyb3BPYmplY3RQcm9taXNlXG4gICAgICAgIC50aGVuKChkYikgPT4ge1xuICAgICAgICAgIGlmIChkYkNvbnRleHQpIHtcbiAgICAgICAgICAgIGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmb3JhZ2Ugb2YgZm9yYWdlcykge1xuICAgICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICAgICAgICBhZHZhbmNlUmVhZGluZXNzKGZvcmFnZS5fZGJJbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ2xvc2UgdGhlIGRhdGFiYXNlIGFmdGVyIHVzZVxuICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKGRiQ29udGV4dCkge1xuICAgICAgICAgICAgcmVqZWN0UmVhZGluZXNzKGVmZmVjdGl2ZU9wdGlvbnMgYXMgRGJJbmZvLCBlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmNvbnN0IGFzeW5jU3RvcmFnZTogRHJpdmVyID0ge1xuICBfZHJpdmVyOiAnYXN5bmNTdG9yYWdlJyxcbiAgX2luaXRTdG9yYWdlLFxuICBfc3VwcG9ydDogKCgpID0+IGlzSW5kZXhlZERCVmFsaWQoKSkgYXMgKCkgPT4gUHJvbWlzZTxib29sZWFuPixcbiAgaXRlcmF0ZSxcbiAgZ2V0SXRlbSxcbiAgc2V0SXRlbSxcbiAgcmVtb3ZlSXRlbSxcbiAgY2xlYXIsXG4gIGxlbmd0aCxcbiAga2V5LFxuICBrZXlzLFxuICBkcm9wSW5zdGFuY2UsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBhc3luY1N0b3JhZ2U7XG4iXX0=
|
|
863
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZGRiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RyaXZlcnMvaW5kZXhlZGRiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFPQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQVc3QyxNQUFNLHlCQUF5QixHQUFHLGtDQUFrQyxDQUFDO0FBQ3JFLElBQUksYUFBa0MsQ0FBQztBQUN2QyxNQUFNLFVBQVUsR0FBOEIsRUFBRSxDQUFDO0FBQ2pELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBRTNDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQztBQUM3QixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFDL0IsSUFBSSx3QkFBd0IsR0FBNEIsSUFBSSxDQUFDO0FBRTdELE1BQU0sa0JBQWtCLEdBQUcsR0FBMEIsRUFBRTtJQUNyRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFlRixTQUFTLE1BQU07SUFDYixJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FDTCxNQUFNLENBQUMsU0FBUztZQUNoQixNQUFNLENBQUMsZUFBZTtZQUN0QixNQUFNLENBQUMsWUFBWTtZQUNu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S0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO3dCQUN2QixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ25DLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNkLGVBQWUsQ0FBQyxnQkFBMEIsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbkQsQ0FBQztnQkFDRCxNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxZQUFZLEdBQVc7SUFDM0IsT0FBTyxFQUFFLGNBQWM7SUFDdkIsWUFBWTtJQUNaLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQTJCO0lBQzlELE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztJQUNQLFVBQVU7SUFDVixLQUFLO0lBQ0wsTUFBTTtJQUNOLEdBQUc7SUFDSCxJQUFJO0lBQ0osWUFBWTtDQUNiLENBQUM7QUFFRixlQUFlLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRHJpdmVyLFxuICBEYkluZm8sXG4gIExvY2FsU3BhY2VDb25maWcsXG4gIENhbGxiYWNrLFxuICBMb2NhbFNwYWNlSW5zdGFuY2UsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGV4ZWN1dGVDYWxsYmFjaywgbm9ybWFsaXplS2V5LCBjcmVhdGVCbG9iIH0gZnJvbSAnLi4vdXRpbHMvaGVscGVycyc7XG5pbXBvcnQgc2VyaWFsaXplciBmcm9tICcuLi91dGlscy9zZXJpYWxpemVyJztcblxudHlwZSBJbmRleGVkREJEcml2ZXJDb250ZXh0ID0gTG9jYWxTcGFjZUluc3RhbmNlICZcbiAgUGFydGlhbDxEcml2ZXI+ICYge1xuICAgIF9kYkluZm86IERiSW5mbztcbiAgICBfZGVmYXVsdENvbmZpZzogTG9jYWxTcGFjZUNvbmZpZztcbiAgICBfaW5pdFJlYWR5PzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICByZWFkeSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNvbmZpZygpOiBMb2NhbFNwYWNlQ29uZmlnO1xuICB9O1xuXG5jb25zdCBERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFID0gJ2xvY2FsLWZvcmFnZS1kZXRlY3QtYmxvYi1zdXBwb3J0JztcbmxldCBzdXBwb3J0c0Jsb2JzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuY29uc3QgZGJDb250ZXh0czogUmVjb3JkPHN0cmluZywgRGJDb250ZXh0PiA9IHt9O1xuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5jb25zdCBSRUFEX09OTFkgPSAncmVhZG9ubHknO1xuY29uc3QgUkVBRF9XUklURSA9ICdyZWFkd3JpdGUnO1xubGV0IGRldGVjdEJsb2JTdXBwb3J0UHJvbWlzZTogUHJvbWlzZTxib29sZWFuPiB8IG51bGwgPSBudWxsO1xuXG5jb25zdCBnZXROYXZpZ2F0b3JPYmplY3QgPSAoKTogTmF2aWdhdG9yIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gd2luZG93Lm5hdmlnYXRvcjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuYXZpZ2F0b3I7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuaW50ZXJmYWNlIERiQ29udGV4dCB7XG4gIGZvcmFnZXM6IEluZGV4ZWREQkRyaXZlckNvbnRleHRbXTtcbiAgZGI6IElEQkRhdGFiYXNlIHwgbnVsbDtcbiAgZGJSZWFkeTogUHJvbWlzZTx2b2lkPiB8IG51bGw7XG4gIGRlZmVycmVkT3BlcmF0aW9uczogRGVmZXJyZWRPcGVyYXRpb25bXTtcbn1cblxuaW50ZXJmYWNlIERlZmVycmVkT3BlcmF0aW9uIHtcbiAgcHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcbiAgcmVzb2x2ZTogKCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5mdW5jdGlvbiBnZXRJREIoKTogSURCRmFjdG9yeSB8IG51bGwge1xuICBpZiAodHlwZW9mIGluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gaW5kZXhlZERCO1xuICB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAoXG4gICAgICB3aW5kb3cuaW5kZXhlZERCIHx8XG4gICAgICB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8XG4gICAgICB3aW5kb3cubW96SW5kZXhlZERCIHx8XG4gICAgICB3aW5kb3cuT0luZGV4ZWREQiB8fFxuICAgICAgd2luZG93Lm1zSW5kZXhlZERCIHx8XG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNJbmRleGVkREJWYWxpZCgpOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgaWRiID0gZ2V0SURCKCk7XG4gICAgaWYgKCFpZGIpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGlmIEluZGV4ZWREQiBpcyBhdmFpbGFibGUgYW5kIGZ1bmN0aW9uYWxcbiAgICBjb25zdCBuYXYgPSBnZXROYXZpZ2F0b3JPYmplY3QoKTtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXY/LnVzZXJBZ2VudCA/PyAnJztcbiAgICBjb25zdCBpc1NhZmFyaSA9XG4gICAgICAhIW5hdiAmJiAvU2FmYXJpLy50ZXN0KHVzZXJBZ2VudCkgJiYgIS9DaHJvbWUvLnRlc3QodXNlckFnZW50KTtcblxuICAgIC8vIFNhZmFyaSBwcml2YXRlIGJyb3dzaW5nIG1vZGUgdGhyb3dzIHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyBpbmRleGVkREJcbiAgICBpZiAoaXNTYWZhcmkpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCBvcGVuUmVxdWVzdCA9IGlkYi5vcGVuKCdfX2xvY2FsZm9yYWdlX3Rlc3QnKTtcbiAgICAgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgIG9wZW5SZXF1ZXN0LnJlc3VsdC5jbG9zZSgpO1xuICAgICAgICAgIGlkYi5kZWxldGVEYXRhYmFzZSgnX19sb2NhbGZvcmFnZV90ZXN0Jyk7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgb3BlblJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tCbG9iU3VwcG9ydChkYjogSURCRGF0YWJhc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKHR5cGVvZiBzdXBwb3J0c0Jsb2JzID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN1cHBvcnRzQmxvYnMpO1xuICB9XG5cbiAgaWYgKGRldGVjdEJsb2JTdXBwb3J0UHJvbWlzZSkge1xuICAgIHJldHVybiBkZXRlY3RCbG9iU3VwcG9ydFByb21pc2U7XG4gIH1cblxuICBkZXRlY3RCbG9iU3VwcG9ydFByb21pc2UgPSBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHR4biA9IGRiLnRyYW5zYWN0aW9uKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUsIFJFQURfV1JJVEUpO1xuICAgIGNvbnN0IGJsb2IgPSBjcmVhdGVCbG9iKFsnJ10pO1xuXG4gICAgdHhuLm9iamVjdFN0b3JlKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUpLnB1dChibG9iLCAna2V5Jyk7XG5cbiAgICB0eG4ub25hYm9ydCA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgIH07XG5cbiAgICB0eG4ub25lcnJvciA9IHR4bi5vbmFib3J0O1xuXG4gICAgdHhuLm9uY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBuYXYgPSBnZXROYXZpZ2F0b3JPYmplY3QoKTtcbiAgICAgIGNvbnN0IHVhID0gbmF2Py51c2VyQWdlbnQgPz8gJyc7XG4gICAgICBjb25zdCBtYXRjaGVkQ2hyb21lID0gdWEubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgICAgY29uc3QgbWF0Y2hlZEVkZ2UgPSB1YS5tYXRjaCgvRWRnZVxcLy8pO1xuICAgICAgY29uc3QgY2hyb21lVmVyc2lvbiA9IG1hdGNoZWRDaHJvbWVcbiAgICAgICAgPyBwYXJzZUludChtYXRjaGVkQ2hyb21lWzFdLCAxMClcbiAgICAgICAgOiBOYU47XG4gICAgICBjb25zdCBzdXBwb3J0c0xhcmdlQmxvYnMgPVxuICAgICAgICAhIW1hdGNoZWRFZGdlIHx8XG4gICAgICAgICFtYXRjaGVkQ2hyb21lIHx8XG4gICAgICAgIE51bWJlci5pc05hTihjaHJvbWVWZXJzaW9uKSB8fFxuICAgICAgICBjaHJvbWVWZXJzaW9uID49IDQzO1xuICAgICAgcmVzb2x2ZShzdXBwb3J0c0xhcmdlQmxvYnMpO1xuICAgIH07XG4gIH0pXG4gICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgc3VwcG9ydHNCbG9icyA9IHJlc3VsdDtcbiAgICAgIGRldGVjdEJsb2JTdXBwb3J0UHJvbWlzZSA9IG51bGw7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pXG4gICAgLmNhdGNoKCgpID0+IHtcbiAgICAgIGRldGVjdEJsb2JTdXBwb3J0UHJvbWlzZSA9IG51bGw7XG4gICAgICBzdXBwb3J0c0Jsb2JzID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGRldGVjdEJsb2JTdXBwb3J0UHJvbWlzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2I6IEJsb2IpOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XG4gIGlmICh0eXBlb2YgYmxvYi5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBibG9iLmFycmF5QnVmZmVyKCk7XG4gIH1cblxuICBpZiAodHlwZW9mIEZpbGVSZWFkZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCbG9iIHNlcmlhbGl6YXRpb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2U8QXJyYXlCdWZmZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlYWRlci5lcnJvcik7XG4gICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBBcnJheUJ1ZmZlcik7XG4gICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5jb2RlQmxvYihibG9iOiBCbG9iKTogUHJvbWlzZTx7XG4gIF9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYjogYm9vbGVhbjtcbiAgZGF0YTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59PiB7XG4gIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpO1xuICByZXR1cm4ge1xuICAgIF9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYjogdHJ1ZSxcbiAgICBkYXRhOiBzZXJpYWxpemVyLmJ1ZmZlclRvU3RyaW5nKGFycmF5QnVmZmVyKSxcbiAgICB0eXBlOiBibG9iLnR5cGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJsb2IoZW5jb2RlZEJsb2I6IHtcbiAgX19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iOiBib29sZWFuO1xuICBkYXRhOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn0pOiBCbG9iIHtcbiAgY29uc3QgYnVmZmVyID0gc2VyaWFsaXplci5zdHJpbmdUb0J1ZmZlcihlbmNvZGVkQmxvYi5kYXRhKTtcbiAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogZW5jb2RlZEJsb2IudHlwZSB9KTtcbn1cblxuZnVuY3Rpb24gaXNFbmNvZGVkQmxvYih2YWx1ZT86IHtcbiAgX19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iPzogYm9vbGVhbjtcbn0pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhdmFsdWU/Ll9fbG9jYWxfZm9yYWdlX2VuY29kZWRfYmxvYjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGJDb250ZXh0KCk6IERiQ29udGV4dCB7XG4gIHJldHVybiB7XG4gICAgZm9yYWdlczogW10sXG4gICAgZGI6IG51bGwsXG4gICAgZGJSZWFkeTogbnVsbCxcbiAgICBkZWZlcnJlZE9wZXJhdGlvbnM6IFtdLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXF1aXJlRGJOYW1lKGRiSW5mbzogRGJJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGRiSW5mby5uYW1lKSB7XG4gICAgcmV0dXJuIGRiSW5mby5uYW1lO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignSW5kZXhlZERCIGRhdGFiYXNlIG5hbWUgaXMgbm90IGNvbmZpZ3VyZWQuJyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVTdG9yZU5hbWUoZGJJbmZvOiBEYkluZm8pOiBzdHJpbmcge1xuICBpZiAoZGJJbmZvLnN0b3JlTmFtZSkge1xuICAgIHJldHVybiBkYkluZm8uc3RvcmVOYW1lO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignSW5kZXhlZERCIHN0b3JlTmFtZSBpcyBub3QgY29uZmlndXJlZC4nKTtcbn1cblxuZnVuY3Rpb24gZGVmZXJSZWFkaW5lc3MoZGJJbmZvOiBEYkluZm8pOiB2b2lkIHtcbiAgY29uc3QgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZSFdO1xuICBjb25zdCBkZWZlcnJlZE9wZXJhdGlvbjogRGVmZXJyZWRPcGVyYXRpb24gPSB7XG4gICAgcHJvbWlzZTogbnVsbCBhcyBhbnksXG4gICAgcmVzb2x2ZTogbnVsbCBhcyBhbnksXG4gICAgcmVqZWN0OiBudWxsIGFzIGFueSxcbiAgfTtcblxuICBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlc29sdmUgPSByZXNvbHZlO1xuICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlamVjdCA9IHJlamVjdDtcbiAgfSk7XG5cbiAgZGJDb250ZXh0LmRlZmVycmVkT3BlcmF0aW9ucy5wdXNoKGRlZmVycmVkT3BlcmF0aW9uKTtcblxuICBpZiAoIWRiQ29udGV4dC5kYlJlYWR5KSB7XG4gICAgZGJDb250ZXh0LmRiUmVhZHkgPSBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICB9IGVsc2Uge1xuICAgIGRiQ29udGV4dC5kYlJlYWR5ID0gZGJDb250ZXh0LmRiUmVhZHkudGhlbigoKSA9PiBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZHZhbmNlUmVhZGluZXNzKGRiSW5mbzogRGJJbmZvKTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWUhXTtcbiAgY29uc3QgZGVmZXJyZWRPcGVyYXRpb24gPSBkYkNvbnRleHQuZGVmZXJyZWRPcGVyYXRpb25zLnBvcCgpO1xuXG4gIGlmIChkZWZlcnJlZE9wZXJhdGlvbikge1xuICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlc29sdmUoKTtcbiAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWplY3RSZWFkaW5lc3MoXG4gIGRiSW5mbzogRGJJbmZvLFxuICBlcnI6IEVycm9yXG4pOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZSFdO1xuICBjb25zdCBkZWZlcnJlZE9wZXJhdGlvbiA9IGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7XG5cbiAgaWYgKGRlZmVycmVkT3BlcmF0aW9uKSB7XG4gICAgZGVmZXJyZWRPcGVyYXRpb24ucmVqZWN0KGVycik7XG4gICAgcmV0dXJuIGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbihcbiAgZGJJbmZvOiBEYkluZm8sXG4gIHVwZ3JhZGVOZWVkZWQ6IGJvb2xlYW5cbik6IFByb21pc2U8SURCRGF0YWJhc2U+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpZGIgPSBnZXRJREIoKTtcbiAgICBpZiAoIWlkYikge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ0luZGV4ZWREQiBub3QgYXZhaWxhYmxlJykpO1xuICAgIH1cblxuICAgIGRiQ29udGV4dHNbZGJJbmZvLm5hbWUhXSA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWUhXSB8fCBjcmVhdGVEYkNvbnRleHQoKTtcblxuICAgIGlmIChkYkluZm8uZGIpIHtcbiAgICAgIGlmICh1cGdyYWRlTmVlZGVkKSB7XG4gICAgICAgIGRlZmVyUmVhZGluZXNzKGRiSW5mbyk7XG4gICAgICAgIGRiSW5mby5kYi5jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoZGJJbmZvLmRiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvcGVucmVxID0gdXBncmFkZU5lZWRlZFxuICAgICAgPyBpZGIub3BlbihkYkluZm8ubmFtZSEsIGRiSW5mby52ZXJzaW9uKVxuICAgICAgOiBpZGIub3BlbihkYkluZm8ubmFtZSEpO1xuXG4gICAgaWYgKHVwZ3JhZGVOZWVkZWQpIHtcbiAgICAgIG9wZW5yZXEub251cGdyYWRlbmVlZGVkID0gKGU6IElEQlZlcnNpb25DaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkYiA9IChlLnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5yZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoZGJJbmZvLnN0b3JlTmFtZSEpO1xuICAgICAgICAgIGlmIChlLm9sZFZlcnNpb24gPD0gMSkge1xuICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChleDogYW55KSB7XG4gICAgICAgICAgaWYgKGV4Lm5hbWUgPT09ICdDb25zdHJhaW50RXJyb3InKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIGBUaGUgZGF0YWJhc2UgXCIke2RiSW5mby5uYW1lfVwiIGhhcyBiZWVuIHVwZ3JhZGVkIGZyb20gdmVyc2lvbiAke2Uub2xkVmVyc2lvbn0gdG8gdmVyc2lvbiAke2UubmV3VmVyc2lvbn0sIGJ1dCB0aGUgc3RvcmFnZSBcIiR7ZGJJbmZvLnN0b3JlTmFtZX1cIiBhbHJlYWR5IGV4aXN0cy5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3BlbnJlcS5vbmVycm9yID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZWplY3QoKGUudGFyZ2V0IGFzIElEQk9wZW5EQlJlcXVlc3QpLmVycm9yKTtcbiAgICB9O1xuXG4gICAgb3BlbnJlcS5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYiA9IG9wZW5yZXEucmVzdWx0O1xuICAgICAgZGIub252ZXJzaW9uY2hhbmdlID0gKGU6IElEQlZlcnNpb25DaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICAoZS50YXJnZXQgYXMgSURCRGF0YWJhc2UpLmNsb3NlKCk7XG4gICAgICB9O1xuICAgICAgcmVzb2x2ZShkYik7XG4gICAgICBhZHZhbmNlUmVhZGluZXNzKGRiSW5mbyk7XG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVXBncmFkZU5lZWRlZChkYkluZm86IERiSW5mbywgZGVmYXVsdFZlcnNpb246IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAoIWRiSW5mby5kYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgaXNOZXdTdG9yZSA9ICFkYkluZm8uZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhkYkluZm8uc3RvcmVOYW1lISk7XG4gIGNvbnN0IGlzRG93bmdyYWRlID0gZGJJbmZvLnZlcnNpb24hIDwgZGJJbmZvLmRiLnZlcnNpb247XG4gIGNvbnN0IGlzVXBncmFkZSA9IGRiSW5mby52ZXJzaW9uISA+IGRiSW5mby5kYi52ZXJzaW9uO1xuXG4gIGlmIChpc0Rvd25ncmFkZSkge1xuICAgIGlmIChkYkluZm8udmVyc2lvbiAhPT0gZGVmYXVsdFZlcnNpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFRoZSBkYXRhYmFzZSBcIiR7ZGJJbmZvLm5hbWV9XCIgY2FuJ3QgYmUgZG93bmdyYWRlZCBmcm9tIHZlcnNpb24gJHtkYkluZm8uZGIudmVyc2lvbn0gdG8gdmVyc2lvbiAke2RiSW5mby52ZXJzaW9ufS5gXG4gICAgICApO1xuICAgIH1cbiAgICBkYkluZm8udmVyc2lvbiA9IGRiSW5mby5kYi52ZXJzaW9uO1xuICB9XG5cbiAgaWYgKGlzVXBncmFkZSB8fCBpc05ld1N0b3JlKSB7XG4gICAgaWYgKGlzTmV3U3RvcmUpIHtcbiAgICAgIGNvbnN0IGluY1ZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICBpZiAoaW5jVmVyc2lvbiA+IGRiSW5mby52ZXJzaW9uISkge1xuICAgICAgICBkYkluZm8udmVyc2lvbiA9IGluY1ZlcnNpb247XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2FjdGlvbihcbiAgZGJJbmZvOiBEYkluZm8sXG4gIG1vZGU6IElEQlRyYW5zYWN0aW9uTW9kZSxcbiAgY2FsbGJhY2s6IChlcnJvcjogRXJyb3IgfCBudWxsLCB0cmFuc2FjdGlvbj86IElEQlRyYW5zYWN0aW9uKSA9PiB2b2lkLFxuICByZXRyaWVzOiBudW1iZXIgPSAxXG4pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0eCA9IGRiSW5mby5kYiEudHJhbnNhY3Rpb24oZGJJbmZvLnN0b3JlTmFtZSEsIG1vZGUpO1xuICAgIGNhbGxiYWNrKG51bGwsIHR4KTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICByZXRyaWVzID4gMCAmJlxuICAgICAgKCFkYkluZm8uZGIgfHxcbiAgICAgICAgZXJyLm5hbWUgPT09ICdJbnZhbGlkU3RhdGVFcnJvcicgfHxcbiAgICAgICAgZXJyLm5hbWUgPT09ICdOb3RGb3VuZEVycm9yJylcbiAgICApIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhZGJJbmZvLmRiIHx8XG4gICAgICAgICAgICAoZXJyLm5hbWUgPT09ICdOb3RGb3VuZEVycm9yJyAmJlxuICAgICAgICAgICAgICAhZGJJbmZvLmRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoZGJJbmZvLnN0b3JlTmFtZSEpICYmXG4gICAgICAgICAgICAgIGRiSW5mby52ZXJzaW9uISA8PSBkYkluZm8uZGIudmVyc2lvbilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChkYkluZm8uZGIpIHtcbiAgICAgICAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29ubmVjdGlvbihkYkluZm8sIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0cnlSZWNvbm5lY3QoZGJJbmZvKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKGRiSW5mbywgbW9kZSwgY2FsbGJhY2ssIHJldHJpZXMgLSAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGJhY2soZXJyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlSZWNvbm5lY3QoZGJJbmZvOiBEYkluZm8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgZGVmZXJSZWFkaW5lc3MoZGJJbmZvKTtcblxuICBjb25zdCBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lIV07XG4gIGNvbnN0IGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICBmb3IgKGNvbnN0IGZvcmFnZSBvZiBmb3JhZ2VzKSB7XG4gICAgaWYgKGZvcmFnZS5fZGJJbmZvLmRiKSB7XG4gICAgICBmb3JhZ2UuX2RiSW5mby5kYi5jbG9zZSgpO1xuICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBudWxsO1xuICAgIH1cbiAgfVxuICBkYkluZm8uZGIgPSBudWxsO1xuXG4gIHJldHVybiBnZXRDb25uZWN0aW9uKGRiSW5mbywgZmFsc2UpXG4gICAgLnRoZW4oKGRiKSA9PiB7XG4gICAgICBkYkluZm8uZGIgPSBkYjtcbiAgICAgIGlmIChpc1VwZ3JhZGVOZWVkZWQoZGJJbmZvLCAxLjApKSB7XG4gICAgICAgIHJldHVybiBnZXRDb25uZWN0aW9uKGRiSW5mbywgdHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGI7XG4gICAgfSlcbiAgICAudGhlbigoZGIpID0+IHtcbiAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgZm9yIChjb25zdCBmb3JhZ2Ugb2YgZm9yYWdlcykge1xuICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IGRiO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIHJlamVjdFJlYWRpbmVzcyhkYkluZm8sIGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9pbml0U3RvcmFnZShcbiAgdGhpczogSW5kZXhlZERCRHJpdmVyQ29udGV4dCxcbiAgY29uZmlnOiBMb2NhbFNwYWNlQ29uZmlnXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGNvbnN0IGRiSW5mbzogRGJJbmZvID0geyBkYjogbnVsbCB9O1xuXG4gIGZvciAoY29uc3QgaSBpbiBjb25maWcpIHtcbiAgICBPYmplY3QuYXNzaWduKGRiSW5mbywge1xuICAgICAgW2ldOiBjb25maWdbaSBhcyBrZXlvZiBMb2NhbFNwYWNlQ29uZmlnXSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGRiTmFtZSA9IHJlcXVpcmVEYk5hbWUoZGJJbmZvKTtcbiAgbGV0IGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJOYW1lXTtcblxuICBpZiAoIWRiQ29udGV4dCkge1xuICAgIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJOYW1lXSA9IGNyZWF0ZURiQ29udGV4dCgpO1xuICB9XG5cbiAgZGJDb250ZXh0LmZvcmFnZXMucHVzaChzZWxmKTtcblxuICBpZiAoIXNlbGYuX2luaXRSZWFkeSkge1xuICAgIHNlbGYuX2luaXRSZWFkeSA9IHNlbGYucmVhZHk7XG4gICAgc2VsZi5yZWFkeSA9IGZ1bGx5UmVhZHk7XG4gIH1cblxuICBjb25zdCBpbml0UHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG4gIGZ1bmN0aW9uIGlnbm9yZUVycm9ycygpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGZvcmFnZSBvZiBkYkNvbnRleHQuZm9yYWdlcykge1xuICAgIGlmIChmb3JhZ2UgIT09IHNlbGYpIHtcbiAgICAgIGNvbnN0IGluaXRSZWFkeSA9IChmb3JhZ2UuX2luaXRSZWFkeSA/PyBmb3JhZ2UucmVhZHkpLmJpbmQoZm9yYWdlKTtcbiAgICAgIGluaXRQcm9taXNlcy5wdXNoKGluaXRSZWFkeSgpLmNhdGNoKGlnbm9yZUVycm9ycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcy5zbGljZSgwKTtcblxuICBhd2FpdCBQcm9taXNlLmFsbChpbml0UHJvbWlzZXMpO1xuXG4gIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYjtcbiAgY29uc3QgZGIgPSBhd2FpdCBnZXRDb25uZWN0aW9uKGRiSW5mbywgZmFsc2UpO1xuICBkYkluZm8uZGIgPSBkYjtcblxuICBjb25zdCBkZWZhdWx0VmVyc2lvbiA9IHNlbGYuX2RlZmF1bHRDb25maWcudmVyc2lvbiA/PyAxO1xuICBpZiAoaXNVcGdyYWRlTmVlZGVkKGRiSW5mbywgZGVmYXVsdFZlcnNpb24pKSB7XG4gICAgY29uc3QgdXBncmFkZWREYiA9IGF3YWl0IGdldENvbm5lY3Rpb24oZGJJbmZvLCB0cnVlKTtcbiAgICBkYkluZm8uZGIgPSBkYkNvbnRleHQuZGIgPSB1cGdyYWRlZERiO1xuICB9IGVsc2Uge1xuICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYiA9IGRiO1xuICB9XG5cbiAgc2VsZi5fZGJJbmZvID0gZGJJbmZvO1xuXG4gIGZvciAoY29uc3QgZm9yYWdlIG9mIGZvcmFnZXMpIHtcbiAgICBpZiAoZm9yYWdlICE9PSBzZWxmKSB7XG4gICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IGRiSW5mby5kYjtcbiAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBkYkluZm8udmVyc2lvbjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZnVsbHlSZWFkeShcbiAgdGhpczogSW5kZXhlZERCRHJpdmVyQ29udGV4dCxcbiAgY2FsbGJhY2s/OiBDYWxsYmFjazx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIGNvbnN0IGluaXRSZWFkeSA9IChzZWxmLl9pbml0UmVhZHkgPz8gc2VsZi5yZWFkeSkuYmluZChzZWxmKTtcbiAgY29uc3QgcHJvbWlzZSA9IGluaXRSZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgIGNvbnN0IGRiTmFtZSA9IHJlcXVpcmVEYk5hbWUoc2VsZi5fZGJJbmZvKTtcbiAgICBjb25zdCBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiTmFtZV07XG4gICAgaWYgKGRiQ29udGV4dCAmJiBkYkNvbnRleHQuZGJSZWFkeSkge1xuICAgICAgcmV0dXJuIGRiQ29udGV4dC5kYlJlYWR5O1xuICAgIH1cbiAgfSk7XG5cbiAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGdldEl0ZW08VD4oXG4gIHRoaXM6IEluZGV4ZWREQkRyaXZlckNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICBjYWxsYmFjaz86IENhbGxiYWNrPFQ+XG4pOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8VCB8IG51bGw+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZWxmXG4gICAgICAucmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihcbiAgICAgICAgICBzZWxmLl9kYkluZm8sXG4gICAgICAgICAgUkVBRF9PTkxZLFxuICAgICAgICAgIChlcnI6IEVycm9yIHwgbnVsbCwgdHJhbnNhY3Rpb24/OiBJREJUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSByZXF1aXJlU3RvcmVOYW1lKHNlbGYuX2RiSW5mbyk7XG4gICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24hLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgIGNvbnN0IHJlcSA9IHN0b3JlLmdldChrZXkpO1xuXG4gICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNFbmNvZGVkQmxvYih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVjb2RlQmxvYih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKHJlamVjdCk7XG4gIH0pO1xuXG4gIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayBhcyBDYWxsYmFjazxUIHwgbnVsbD4pO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gaXRlcmF0ZTxULCBVPihcbiAgdGhpczogSW5kZXhlZERCRHJpdmVyQ29udGV4dCxcbiAgaXRlcmF0b3I6ICh2YWx1ZTogVCwga2V5OiBzdHJpbmcsIGl0ZXJhdGlvbk51bWJlcjogbnVtYmVyKSA9PiBVLFxuICBjYWxsYmFjaz86IENhbGxiYWNrPFU+XG4pOiBQcm9taXNlPFU+IHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFU+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZWxmXG4gICAgICAucmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihcbiAgICAgICAgICBzZWxmLl9kYkluZm8sXG4gICAgICAgICAgUkVBRF9PTkxZLFxuICAgICAgICAgIChlcnI6IEVycm9yIHwgbnVsbCwgdHJhbnNhY3Rpb24/OiBJREJUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSByZXF1aXJlU3RvcmVOYW1lKHNlbGYuX2RiSW5mbyk7XG4gICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24hLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgIGNvbnN0IHJlcSA9IHN0b3JlLm9wZW5DdXJzb3IoKTtcbiAgICAgICAgICAgICAgbGV0IGl0ZXJhdGlvbk51bWJlciA9IDE7XG5cbiAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3IgPSByZXEucmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChjdXJzb3IpIHtcbiAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGN1cnNvci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChpc0VuY29kZWRCbG9iKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlY29kZUJsb2IodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaXRlcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3Iua2V5IGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uTnVtYmVyKytcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmNvbnRpbnVlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkIGFzIFUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICByZXEub25lcnJvciA9ICgpID0+IHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChyZWplY3QpO1xuICB9KTtcblxuICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0SXRlbTxUPihcbiAgdGhpczogSW5kZXhlZERCRHJpdmVyQ29udGV4dCxcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBULFxuICBjYWxsYmFjaz86IENhbGxiYWNrPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUIHwgbnVsbCB8IHVuZGVmaW5lZD4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBkYkluZm86IERiSW5mbztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VsZi5yZWFkeSgpO1xuICAgICAgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuXG4gICAgICBpZiAodG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEJsb2JdJykge1xuICAgICAgICBjb25zdCBibG9iU3VwcG9ydCA9IGF3YWl0IGNoZWNrQmxvYlN1cHBvcnQoZGJJbmZvLmRiISk7XG4gICAgICAgIGlmICghYmxvYlN1cHBvcnQpIHtcbiAgICAgICAgICB2YWx1ZSA9IChhd2FpdCBlbmNvZGVCbG9iKHZhbHVlIGFzIEJsb2IpKSBhcyBUO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKFxuICAgICAgICBkYkluZm8sXG4gICAgICAgIFJFQURfV1JJVEUsXG4gICAgICAgIChlcnI6IEVycm9yIHwgbnVsbCwgdHJhbnNhY3Rpb24/OiBJREJUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSByZXF1aXJlU3RvcmVOYW1lKGRiSW5mbyk7XG4gICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uIS5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICAgICAgICAgICAgbGV0IGFjdHVhbFZhbHVlOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoYWN0dWFsVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBhY3R1YWxWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IHN0b3JlLnB1dChhY3R1YWxWYWx1ZSwga2V5KTtcblxuICAgICAgICAgICAgdHJhbnNhY3Rpb24hLm9uY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoYWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdHJhbnNhY3Rpb24hLm9uYWJvcnQgPSB0cmFuc2FjdGlvbiEub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyID0gcmVxLmVycm9yIHx8IHRyYW5zYWN0aW9uIS5lcnJvcjtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlIGFzIFByb21pc2U8VD4sIGNhbGxiYWNrKTtcbiAgcmV0dXJuIHByb21pc2UgYXMgUHJvbWlzZTxUPjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSXRlbShcbiAgdGhpczogSW5kZXhlZERCRHJpdmVyQ29udGV4dCxcbiAga2V5OiBzdHJpbmcsXG4gIGNhbGxiYWNrPzogQ2FsbGJhY2s8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZWxmXG4gICAgICAucmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihcbiAgICAgICAgICBzZWxmLl9kYkluZm8sXG4gICAgICAgICAgUkVBRF9XUklURSxcbiAgICAgICAgICAoZXJyOiBFcnJvciB8IG51bGwsIHRyYW5zYWN0aW9uPzogSURCVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gcmVxdWlyZVN0b3JlTmFtZShzZWxmLl9kYkluZm8pO1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uIS5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICAgICAgICAgICAgICBjb25zdCByZXEgPSBzdG9yZS5kZWxldGUoa2V5KTtcblxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbiEub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb24hLm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb24hLm9uYWJvcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gcmVxLmVycm9yIHx8IHRyYW5zYWN0aW9uIS5lcnJvcjtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgfSk7XG5cbiAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGNsZWFyKFxuICB0aGlzOiBJbmRleGVkREJEcml2ZXJDb250ZXh0LFxuICBjYWxsYmFjaz86IENhbGxiYWNrPHZvaWQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZWxmXG4gICAgICAucmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihcbiAgICAgICAgICBzZWxmLl9kYkluZm8sXG4gICAgICAgICAgUkVBRF9XUklURSxcbiAgICAgICAgICAoZXJyOiBFcnJvciB8IG51bGwsIHRyYW5zYWN0aW9uPzogSURCVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gcmVxdWlyZVN0b3JlTmFtZShzZWxmLl9kYkluZm8pO1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uIS5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICAgICAgICAgICAgICBjb25zdCByZXEgPSBzdG9yZS5jbGVhcigpO1xuXG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uIS5vbmNvbXBsZXRlID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB0cmFuc2FjdGlvbiEub25hYm9ydCA9IHRyYW5zYWN0aW9uIS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IHJlcS5lcnJvciB8fCB0cmFuc2FjdGlvbiEuZXJyb3I7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKHJlamVjdCk7XG4gIH0pO1xuXG4gIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBsZW5ndGgoXG4gIHRoaXM6IEluZGV4ZWREQkRyaXZlckNvbnRleHQsXG4gIGNhbGxiYWNrPzogQ2FsbGJhY2s8bnVtYmVyPlxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNlbGZcbiAgICAgIC5yZWFkeSgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKFxuICAgICAgICAgIHNlbGYuX2RiSW5mbyxcbiAgICAgICAgICBSRUFEX09OTFksXG4gICAgICAgICAgKGVycjogRXJyb3IgfCBudWxsLCB0cmFuc2FjdGlvbj86IElEQlRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycik7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0b3JlTmFtZSA9IHJlcXVpcmVTdG9yZU5hbWUoc2VsZi5fZGJJbmZvKTtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbiEub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgY29uc3QgcmVxID0gc3RvcmUuY291bnQoKTtcblxuICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXEucmVzdWx0KTtcbiAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgfSk7XG5cbiAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGtleShcbiAgdGhpczogSW5kZXhlZERCRHJpdmVyQ29udGV4dCxcbiAgbjogbnVtYmVyLFxuICBjYWxsYmFjaz86IENhbGxiYWNrPHN0cmluZz5cbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICBjb25zdCBzZWxmID0gdGhpcztcblxuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8c3RyaW5nIHwgbnVsbD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmIChuIDwgMCkge1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZWxmXG4gICAgICAucmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihcbiAgICAgICAgICBzZWxmLl9kYkluZm8sXG4gICAgICAgICAgUkVBRF9PTkxZLFxuICAgICAgICAgIChlcnI6IEVycm9yIHwgbnVsbCwgdHJhbnNhY3Rpb24/OiBJREJUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSByZXF1aXJlU3RvcmVOYW1lKHNlbGYuX2RiSW5mbyk7XG4gICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24hLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgIGxldCBhZHZhbmNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zdCByZXEgPSBzdG9yZS5vcGVuS2V5Q3Vyc29yKCk7XG5cbiAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3IgPSByZXEucmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmICghY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGN1cnNvci5rZXkgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKCFhZHZhbmNlZCkge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvci5hZHZhbmNlKG4pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjdXJzb3Iua2V5IGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKHJlamVjdCk7XG4gIH0pO1xuXG4gIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayBhcyBDYWxsYmFjazxzdHJpbmcgfCBudWxsPik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzKFxuICB0aGlzOiBJbmRleGVkREJEcml2ZXJDb250ZXh0LFxuICBjYWxsYmFjaz86IENhbGxiYWNrPHN0cmluZ1tdPlxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBzZWxmID0gdGhpcztcblxuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8c3RyaW5nW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZWxmXG4gICAgICAucmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihcbiAgICAgICAgICBzZWxmLl9kYkluZm8sXG4gICAgICAgICAgUkVBRF9PTkxZLFxuICAgICAgICAgIChlcnI6IEVycm9yIHwgbnVsbCwgdHJhbnNhY3Rpb24/OiBJREJUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSByZXF1aXJlU3RvcmVOYW1lKHNlbGYuX2RiSW5mbyk7XG4gICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24hLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgIGNvbnN0IHJlcSA9IHN0b3JlLm9wZW5LZXlDdXJzb3IoKTtcbiAgICAgICAgICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvciA9IHJlcS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJzb3IpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtleXMucHVzaChjdXJzb3Iua2V5IGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yLmNvbnRpbnVlKCk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgfSk7XG5cbiAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGRyb3BJbnN0YW5jZShcbiAgdGhpczogSW5kZXhlZERCRHJpdmVyQ29udGV4dCxcbiAgb3B0aW9ucz86IExvY2FsU3BhY2VDb25maWcsXG4gIGNhbGxiYWNrPzogQ2FsbGJhY2s8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgY29uc3QgY3VycmVudENvbmZpZyA9IHNlbGYuY29uZmlnKCk7XG5cbiAgLy8gTm9ybWFsaXplIG9wdGlvbnNcbiAgY29uc3QgZWZmZWN0aXZlT3B0aW9uczogTG9jYWxTcGFjZUNvbmZpZyA9IHtcbiAgICAuLi4odHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnID8gb3B0aW9ucyA6IHt9KSxcbiAgfTtcblxuICBpZiAoIWVmZmVjdGl2ZU9wdGlvbnMubmFtZSkge1xuICAgIGVmZmVjdGl2ZU9wdGlvbnMubmFtZSA9IGN1cnJlbnRDb25maWcubmFtZTtcbiAgICBpZiAoIWVmZmVjdGl2ZU9wdGlvbnMuc3RvcmVOYW1lKSB7XG4gICAgICBlZmZlY3RpdmVPcHRpb25zLnN0b3JlTmFtZSA9IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbnNcbiAgaWYgKCFlZmZlY3RpdmVPcHRpb25zLm5hbWUpIHtcbiAgICBjb25zdCBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cycpKTtcbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgY29uc3QgdGFyZ2V0TmFtZSA9IGVmZmVjdGl2ZU9wdGlvbnMubmFtZSE7XG4gIGNvbnN0IGN1cnJlbnREYiA9IHNlbGYuX2RiSW5mbz8uZGIgPz8gbnVsbDtcbiAgY29uc3Qgc2hvdWxkUmV1c2VDdXJyZW50RGIgPVxuICAgIHRhcmdldE5hbWUgPT09IGN1cnJlbnRDb25maWcubmFtZSAmJiBjdXJyZW50RGIgIT09IG51bGw7XG5cbiAgbGV0IGRiUHJvbWlzZTogUHJvbWlzZTxJREJEYXRhYmFzZT47XG4gIGlmIChzaG91bGRSZXVzZUN1cnJlbnREYiAmJiBjdXJyZW50RGIpIHtcbiAgICBkYlByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY3VycmVudERiKTtcbiAgfSBlbHNlIHtcbiAgICBkYlByb21pc2UgPSBnZXRDb25uZWN0aW9uKGVmZmVjdGl2ZU9wdGlvbnMgYXMgRGJJbmZvLCBmYWxzZSkudGhlbigoZGIpID0+IHtcbiAgICAgIGNvbnN0IGRiQ29udGV4dCA9IGRiQ29udGV4dHNbdGFyZ2V0TmFtZV07XG4gICAgICBpZiAoZGJDb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcbiAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgIGZvciAoY29uc3QgZm9yYWdlIG9mIGZvcmFnZXMpIHtcbiAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGI7XG4gICAgfSk7XG4gIH1cblxuICBsZXQgcHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyBDYXNlIDE6IERyb3AgZW50aXJlIGRhdGFiYXNlIChubyBzdG9yZU5hbWUgc3BlY2lmaWVkKVxuICBpZiAoIWVmZmVjdGl2ZU9wdGlvbnMuc3RvcmVOYW1lKSB7XG4gICAgcHJvbWlzZSA9IGRiUHJvbWlzZS50aGVuKChkYikgPT4ge1xuICAgICAgZGVmZXJSZWFkaW5lc3MoZWZmZWN0aXZlT3B0aW9ucyBhcyBEYkluZm8pO1xuXG4gICAgICBjb25zdCBkYkNvbnRleHQgPSBkYkNvbnRleHRzW3RhcmdldE5hbWVdO1xuICAgICAgY29uc3QgZm9yYWdlcyA9IGRiQ29udGV4dD8uZm9yYWdlcyB8fCBbXTtcblxuICAgICAgLy8gQ2xvc2UgYWxsIGNvbm5lY3Rpb25zXG4gICAgICBkYi5jbG9zZSgpO1xuICAgICAgZm9yIChjb25zdCBmb3JhZ2Ugb2YgZm9yYWdlcykge1xuICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIERlbGV0ZSB0aGUgZW50aXJlIGRhdGFiYXNlXG4gICAgICBjb25zdCBkcm9wREJQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBpZGIgPSBnZXRJREIoKTtcbiAgICAgICAgaWYgKCFpZGIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignSW5kZXhlZERCIG5vdCBhdmFpbGFibGUnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXEgPSBpZGIuZGVsZXRlRGF0YWJhc2UodGFyZ2V0TmFtZSk7XG5cbiAgICAgICAgcmVxLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KHJlcS5lcnJvciB8fCBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgZGF0YWJhc2UnKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVxLm9uYmxvY2tlZCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgZHJvcEluc3RhbmNlIGJsb2NrZWQgZm9yIGRhdGFiYXNlIFwiJHt0YXJnZXROYW1lfVwiIHVudGlsIGFsbCBvcGVuIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWRgXG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXEub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZHJvcERCUHJvbWlzZVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKGRiQ29udGV4dCkge1xuICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZm9yYWdlIG9mIGZvcmFnZXMpIHtcbiAgICAgICAgICAgICAgYWR2YW5jZVJlYWRpbmVzcyhmb3JhZ2UuX2RiSW5mbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGlmIChkYkNvbnRleHQpIHtcbiAgICAgICAgICAgIHJlamVjdFJlYWRpbmVzcyhlZmZlY3RpdmVPcHRpb25zIGFzIERiSW5mbywgZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDYXNlIDI6IERyb3Agc3BlY2lmaWMgb2JqZWN0IHN0b3JlXG4gICAgcHJvbWlzZSA9IGRiUHJvbWlzZS50aGVuKChkYikgPT4ge1xuICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGVmZmVjdGl2ZU9wdGlvbnMuc3RvcmVOYW1lISkpIHtcbiAgICAgICAgLy8gU3RvcmUgZG9lc24ndCBleGlzdCwgbm90aGluZyB0byBkb1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBkYi52ZXJzaW9uICsgMTtcblxuICAgICAgZGVmZXJSZWFkaW5lc3MoZWZmZWN0aXZlT3B0aW9ucyBhcyBEYkluZm8pO1xuXG4gICAgICBjb25zdCBkYkNvbnRleHQgPSBkYkNvbnRleHRzW3RhcmdldE5hbWVdO1xuICAgICAgY29uc3QgZm9yYWdlcyA9IGRiQ29udGV4dD8uZm9yYWdlcyB8fCBbXTtcblxuICAgICAgLy8gQ2xvc2UgYWxsIGNvbm5lY3Rpb25zXG4gICAgICBkYi5jbG9zZSgpO1xuICAgICAgZm9yIChjb25zdCBmb3JhZ2Ugb2YgZm9yYWdlcykge1xuICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYiA9IG51bGw7XG4gICAgICAgIGZvcmFnZS5fZGJJbmZvLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWxldGUgdGhlIG9iamVjdCBzdG9yZSBieSB1cGdyYWRpbmcgdGhlIGRhdGFiYXNlXG4gICAgICBjb25zdCBkcm9wT2JqZWN0UHJvbWlzZSA9IG5ldyBQcm9taXNlPElEQkRhdGFiYXNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGlkYiA9IGdldElEQigpO1xuICAgICAgICBpZiAoIWlkYikge1xuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdJbmRleGVkREIgbm90IGF2YWlsYWJsZScpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcSA9IGlkYi5vcGVuKHRhcmdldE5hbWUsIG5ld1ZlcnNpb24pO1xuXG4gICAgICAgIHJlcS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICBpZiAoZGIpIHtcbiAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IgfHwgbmV3IEVycm9yKCdGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZScpKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXEub251cGdyYWRlbmVlZGVkID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICBpZiAoZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhlZmZlY3RpdmVPcHRpb25zLnN0b3JlTmFtZSEpKSB7XG4gICAgICAgICAgICBkYi5kZWxldGVPYmplY3RTdG9yZShlZmZlY3RpdmVPcHRpb25zLnN0b3JlTmFtZSEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXEub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZHJvcE9iamVjdFByb21pc2VcbiAgICAgICAgLnRoZW4oKGRiKSA9PiB7XG4gICAgICAgICAgaWYgKGRiQ29udGV4dCkge1xuICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZvcmFnZSBvZiBmb3JhZ2VzKSB7XG4gICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gZGI7XG4gICAgICAgICAgICAgIGFkdmFuY2VSZWFkaW5lc3MoZm9yYWdlLl9kYkluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZGJDb250ZXh0KSB7XG4gICAgICAgICAgICByZWplY3RSZWFkaW5lc3MoZWZmZWN0aXZlT3B0aW9ucyBhcyBEYkluZm8sIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuY29uc3QgYXN5bmNTdG9yYWdlOiBEcml2ZXIgPSB7XG4gIF9kcml2ZXI6ICdhc3luY1N0b3JhZ2UnLFxuICBfaW5pdFN0b3JhZ2UsXG4gIF9zdXBwb3J0OiAoKCkgPT4gaXNJbmRleGVkREJWYWxpZCgpKSBhcyAoKSA9PiBQcm9taXNlPGJvb2xlYW4+LFxuICBpdGVyYXRlLFxuICBnZXRJdGVtLFxuICBzZXRJdGVtLFxuICByZW1vdmVJdGVtLFxuICBjbGVhcixcbiAgbGVuZ3RoLFxuICBrZXksXG4gIGtleXMsXG4gIGRyb3BJbnN0YW5jZSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jU3RvcmFnZTtcbiJdfQ==
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";function e(e,t,r,n){return new(r||(r=Promise))(function(o,i){function s(e){try{a(n.next(e))}catch(e){i(e)}}function c(e){try{a(n.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(s,c)}a((n=n.apply(e,t||[])).next())})}function t(e,t){return t&&e.then(e=>t(null,e),e=>t(e,void 0)),e}function r(e,t,r,n){const o=e=>e instanceof Error?e:new Error(String(e));if(null==n?void 0:n.compatibilityMode)return"function"==typeof t&&e.then(e=>{t(e)}),"function"==typeof r&&e.catch(e=>{r(o(e))}),e;const i=e=>{const n=o(e);r?r(n):t&&t(n,void 0)};return t?e.then(e=>t(null,e),i):r&&e.catch(i),e}function n(e,t){return-1!==e.indexOf(t)}function o(e){return Array.isArray(e)}function i(e){return"string"!=typeof e?(console.warn(`key passed to LocalSpace API is not a string (got ${typeof e}). Using String() to convert.`),String(e)):e}function s(e,...t){const r=e;for(const e of t)if(e){const t=e;for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const e=t[n];r[n]=o(e)?[...e]:e}}return e}function c(e,t){try{return new Blob(e,t)}catch(r){if(!(r instanceof Error)||"TypeError"!==r.name)throw r;const n=window,o=n.BlobBuilder||n.MSBlobBuilder||n.MozBlobBuilder||n.WebKitBlobBuilder;if(!o)throw new Error("Blob constructor not supported");const i=new o;for(const t of e)i.append(t);return i.getBlob(null==t?void 0:t.type)}}Object.defineProperty(exports,"__esModule",{value:!0}),"function"==typeof SuppressedError&&SuppressedError;const a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/^~~local_forage_type~([^~]+)~/,d="__lfsc__:",u="arbf",f="blob",h="si08",v="ui08",b="uic8",y="si16",g="si32",p="ur16",m="ui32",_="fl32",w="fl64",I="bi64",S="bu64",D=Object.prototype.toString,E=()=>{let e;return e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e};function P(e){const t=E(),r=.75*e.length,n=e.length;let o=0,i=r;"="===e[e.length-1]&&(i--,"="===e[e.length-2]&&i--);const s=new t.ArrayBuffer(i),c=new t.Uint8Array(s);for(let t=0;t<n;t+=4){const r=a.indexOf(e[t]),n=a.indexOf(e[t+1]),i=a.indexOf(e[t+2]),s=a.indexOf(e[t+3]);c[o++]=r<<2|n>>4,c[o++]=(15&n)<<4|i>>2,c[o++]=(3&i)<<6|63&s}return s}function O(e){const t=new(E().Uint8Array)(e);let r="";for(let e=0;e<t.length;e+=3)r+=a[t[e]>>2],r+=a[(3&t[e])<<4|t[e+1]>>4],r+=a[(15&t[e+1])<<2|t[e+2]>>6],r+=a[63&t[e+2]];return t.length%3==2?r=r.substring(0,r.length-1)+"=":t.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}const j={"[object Int8Array]":h,"[object Uint8Array]":v,"[object Uint8ClampedArray]":b,"[object Int16Array]":y,"[object Uint16Array]":p,"[object Int32Array]":g,"[object Uint32Array]":m,"[object Float32Array]":_,"[object Float64Array]":w,"[object BigInt64Array]":I,"[object BigUint64Array]":S};const A={serialize:function(t){return e(this,void 0,void 0,function*(){const e=null!=t?D.call(t):"";if("[object ArrayBuffer]"===e)return d+u+O(t);if(function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}(t)){const r=j[e];if(!r)throw new Error("Failed to get type for BinaryArray");const n=t.buffer,o=n instanceof ArrayBuffer?n:new Uint8Array(n).slice().buffer;return d+r+O(o)}if("[object Blob]"===e){const e=t,r=yield e.arrayBuffer(),n="~~local_forage_type~"+e.type+"~"+O(r);return d+f+n}try{return JSON.stringify(t)}catch(e){throw console.error("Couldn't convert value into a JSON string: ",t),e}})},deserialize:function(e){if(e.substring(0,9)!==d)return JSON.parse(e);const t=e.substring(13),r=e.substring(9,13);let n,o=t;if(r===f&&l.test(t)){const e=t.match(l);e&&(n=e[1],o=t.substring(e[0].length))}const i=P(o),s=E();switch(r){case u:return i;case f:return c([i],{type:n});case h:return new s.Int8Array(i);case v:return new s.Uint8Array(i);case b:return new s.Uint8ClampedArray(i);case y:return new s.Int16Array(i);case p:return new s.Uint16Array(i);case g:return new s.Int32Array(i);case m:return new s.Uint32Array(i);case _:return new s.Float32Array(i);case w:return new s.Float64Array(i);case I:if(void 0===s.BigInt64Array)throw new Error("BigInt64Array is not supported in this environment");return new s.BigInt64Array(i);case S:if(void 0===s.BigUint64Array)throw new Error("BigUint64Array is not supported in this environment");return new s.BigUint64Array(i);default:throw new Error("Unknown type: "+r)}},stringToBuffer:P,bufferToString:O},B="local-forage-detect-blob-support";let N;const x={},k=Object.prototype.toString,z="readonly",R="readwrite";let C=null;const U=()=>"undefined"!=typeof window&&window.navigator?window.navigator:"undefined"!=typeof navigator?navigator:void 0;function L(){return"undefined"!=typeof indexedDB?indexedDB:"undefined"!=typeof window&&(window.indexedDB||window.webkitIndexedDB||window.mozIndexedDB||window.OIndexedDB||window.msIndexedDB)||null}function M(t){return e(this,void 0,void 0,function*(){const r=yield function(t){return e(this,void 0,void 0,function*(){if("function"==typeof t.arrayBuffer)return t.arrayBuffer();if("undefined"==typeof FileReader)throw new Error("Blob serialization not supported in this environment");return new Promise((e,r)=>{const n=new FileReader;n.onerror=()=>r(n.error),n.onloadend=()=>e(n.result),n.readAsArrayBuffer(t)})})}(t);return{__local_forage_encoded_blob:!0,data:A.bufferToString(r),type:t.type}})}function F(e){return c([A.stringToBuffer(e.data)],{type:e.type})}function $(e){return!!(null==e?void 0:e.__local_forage_encoded_blob)}function T(e){if(e.name)return e.name;throw new Error("IndexedDB database name is not configured.")}function W(e){if(e.storeName)return e.storeName;throw new Error("IndexedDB storeName is not configured.")}function V(e){const t=x[e.name],r={promise:null,resolve:null,reject:null};r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),t.deferredOperations.push(r),t.dbReady?t.dbReady=t.dbReady.then(()=>r.promise):t.dbReady=r.promise}function G(e){const t=x[e.name].deferredOperations.pop();if(t)return t.resolve(),t.promise}function J(e,t){const r=x[e.name].deferredOperations.pop();if(r)return r.reject(t),r.promise}function K(e,t){return new Promise((r,n)=>{const o=L();if(!o)return n(new Error("IndexedDB not available"));if(x[e.name]=x[e.name]||{forages:[],db:null,dbReady:null,deferredOperations:[]},e.db){if(!t)return r(e.db);V(e),e.db.close()}const i=t?o.open(e.name,e.version):o.open(e.name);t&&(i.onupgradeneeded=t=>{const r=t.target.result;try{r.createObjectStore(e.storeName),t.oldVersion<=1&&r.createObjectStore(B)}catch(r){if("ConstraintError"!==r.name)throw r;console.warn(`The database "${e.name}" has been upgraded from version ${t.oldVersion} to version ${t.newVersion}, but the storage "${e.storeName}" already exists.`)}}),i.onerror=e=>{e.preventDefault(),n(e.target.error)},i.onsuccess=()=>{const t=i.result;t.onversionchange=e=>{e.target.close()},r(t),G(e)}})}function X(e,t){if(!e.db)return!0;const r=!e.db.objectStoreNames.contains(e.storeName),n=e.version<e.db.version,o=e.version>e.db.version;if(n&&(e.version!==t&&console.warn(`The database "${e.name}" can't be downgraded from version ${e.db.version} to version ${e.version}.`),e.version=e.db.version),o||r){if(r){const t=e.db.version+1;t>e.version&&(e.version=t)}return!0}return!1}function Q(e,t,r,n=1){try{const n=e.db.transaction(e.storeName,t);r(null,n)}catch(o){if(n>0&&(!e.db||"InvalidStateError"===o.name||"NotFoundError"===o.name))return void Promise.resolve().then(()=>{if(!e.db||"NotFoundError"===o.name&&!e.db.objectStoreNames.contains(e.storeName)&&e.version<=e.db.version)return e.db&&(e.version=e.db.version+1),K(e,!0)}).then(()=>function(e){V(e);const t=x[e.name],r=t.forages;for(const e of r)e._dbInfo.db&&(e._dbInfo.db.close(),e._dbInfo.db=null);return e.db=null,K(e,!1).then(t=>(e.db=t,X(e,1)?K(e,!0):t)).then(n=>{e.db=t.db=n;for(const e of r)e._dbInfo.db=n}).catch(t=>{throw J(e,t),t})}(e).then(()=>{Q(e,t,r,n-1)})).catch(r);r(o)}}function H(e){var r;const n=this,o=(null!==(r=n._initReady)&&void 0!==r?r:n.ready).bind(n)().then(()=>{const e=T(n._dbInfo),t=x[e];if(t&&t.dbReady)return t.dbReady});return t(o,e),o}const q={_driver:"asyncStorage",_initStorage:function(t){return e(this,void 0,void 0,function*(){var e,r;const n=this,o={db:null};for(const e in t)Object.assign(o,{[e]:t[e]});const i=T(o);let s=x[i];s||(s=x[i]={forages:[],db:null,dbReady:null,deferredOperations:[]}),s.forages.push(n),n._initReady||(n._initReady=n.ready,n.ready=H);const c=[];function a(){return Promise.resolve()}for(const t of s.forages)if(t!==n){const r=(null!==(e=t._initReady)&&void 0!==e?e:t.ready).bind(t);c.push(r().catch(a))}const l=s.forages.slice(0);yield Promise.all(c),o.db=s.db;const d=yield K(o,!1);o.db=d;if(X(o,null!==(r=n._defaultConfig.version)&&void 0!==r?r:1)){const e=yield K(o,!0);o.db=s.db=e}else o.db=s.db=d;n._dbInfo=o;for(const e of l)e!==n&&(e._dbInfo.db=o.db,e._dbInfo.version=o.version)})},_support:()=>function(){var e;try{const t=L();if(!t)return!1;const r=U(),n=null!==(e=null==r?void 0:r.userAgent)&&void 0!==e?e:"";return!(r&&/Safari/.test(n)&&!/Chrome/.test(n))||new Promise(e=>{const r=t.open("__localforage_test");r.onsuccess=()=>{r.result.close(),t.deleteDatabase("__localforage_test"),e(!0)},r.onerror=()=>e(!1)})}catch(e){return!1}}(),iterate:function(e,r){const n=this,o=new Promise((t,r)=>{n.ready().then(()=>{Q(n._dbInfo,z,(o,i)=>{if(o)return r(o);try{const o=W(n._dbInfo),s=i.objectStore(o).openCursor();let c=1;s.onsuccess=()=>{const r=s.result;if(r){let n=r.value;$(n)&&(n=F(n));const o=e(n,r.key,c++);void 0!==o?t(o):r.continue()}else t(void 0)},s.onerror=()=>r(s.error)}catch(e){r(e)}})}).catch(r)});return t(o,r),o},getItem:function(e,r){const n=this;e=i(e);const o=new Promise((t,r)=>{n.ready().then(()=>{Q(n._dbInfo,z,(o,i)=>{if(o)return r(o);try{const o=W(n._dbInfo),s=i.objectStore(o).get(e);s.onsuccess=()=>{let e=s.result;void 0===e&&(e=null),$(e)&&(e=F(e)),t(e)},s.onerror=()=>r(s.error)}catch(e){r(e)}})}).catch(r)});return t(o,r),o},setItem:function(r,n,o){return e(this,void 0,void 0,function*(){const s=this;r=i(r);const a=new Promise((t,o)=>e(this,void 0,void 0,function*(){let e;try{if(yield s.ready(),e=s._dbInfo,"[object Blob]"===k.call(n)){const t=yield(i=e.db,"boolean"==typeof N?Promise.resolve(N):C||(C=new Promise(e=>{const t=i.transaction(B,R),r=c([""]);t.objectStore(B).put(r,"key"),t.onabort=t=>{t.preventDefault(),t.stopPropagation(),e(!1)},t.onerror=t.onabort,t.oncomplete=()=>{var t;const r=U(),n=null!==(t=null==r?void 0:r.userAgent)&&void 0!==t?t:"",o=n.match(/Chrome\/(\d+)/),i=n.match(/Edge\//),s=o?parseInt(o[1],10):NaN,c=!!i||!o||Number.isNaN(s)||s>=43;e(c)}}).then(e=>(N=e,C=null,e)).catch(()=>(C=null,N=!1,!1)),C));t||(n=yield M(n))}Q(e,R,(i,s)=>{if(i)return o(i);try{const i=W(e),c=s.objectStore(i);let a=n;null===a&&(a=void 0);const l=c.put(a,r);s.oncomplete=()=>{void 0===a&&(a=null),t(a)},s.onabort=s.onerror=()=>{const e=l.error||s.error;o(e)}}catch(e){o(e)}})}catch(e){o(e)}var i}));return t(a,o),a})},removeItem:function(e,r){const n=this;e=i(e);const o=new Promise((t,r)=>{n.ready().then(()=>{Q(n._dbInfo,R,(o,i)=>{if(o)return r(o);try{const o=W(n._dbInfo),s=i.objectStore(o).delete(e);i.oncomplete=()=>t(),i.onerror=()=>r(s.error),i.onabort=()=>{const e=s.error||i.error;r(e)}}catch(e){r(e)}})}).catch(r)});return t(o,r),o},clear:function(e){const r=this,n=new Promise((e,t)=>{r.ready().then(()=>{Q(r._dbInfo,R,(n,o)=>{if(n)return t(n);try{const n=W(r._dbInfo),i=o.objectStore(n).clear();o.oncomplete=()=>e(),o.onabort=o.onerror=()=>{const e=i.error||o.error;t(e)}}catch(e){t(e)}})}).catch(t)});return t(n,e),n},length:function(e){const r=this,n=new Promise((e,t)=>{r.ready().then(()=>{Q(r._dbInfo,z,(n,o)=>{if(n)return t(n);try{const n=W(r._dbInfo),i=o.objectStore(n).count();i.onsuccess=()=>e(i.result),i.onerror=()=>t(i.error)}catch(e){t(e)}})}).catch(t)});return t(n,e),n},key:function(e,r){const n=this,o=new Promise((t,r)=>{e<0?t(null):n.ready().then(()=>{Q(n._dbInfo,z,(o,i)=>{if(o)return r(o);try{const o=W(n._dbInfo),s=i.objectStore(o);let c=!1;const a=s.openKeyCursor();a.onsuccess=()=>{const r=a.result;r?0===e||c?t(r.key):(c=!0,r.advance(e)):t(null)},a.onerror=()=>r(a.error)}catch(e){r(e)}})}).catch(r)});return t(o,r),o},keys:function(e){const r=this,n=new Promise((e,t)=>{r.ready().then(()=>{Q(r._dbInfo,z,(n,o)=>{if(n)return t(n);try{const n=W(r._dbInfo),i=o.objectStore(n).openKeyCursor(),s=[];i.onsuccess=()=>{const t=i.result;t?(s.push(t.key),t.continue()):e(s)},i.onerror=()=>t(i.error)}catch(e){t(e)}})}).catch(t)});return t(n,e),n},dropInstance:function(e,r){var n,o;const i=this.config(),s=Object.assign({},"object"==typeof e?e:{});if(s.name||(s.name=i.name,s.storeName||(s.storeName=i.storeName)),!s.name){const e=Promise.reject(new Error("Invalid arguments"));return t(e,r),e}const c=s.name,a=null!==(o=null===(n=this._dbInfo)||void 0===n?void 0:n.db)&&void 0!==o?o:null;let l,d;return l=c===i.name&&null!==a&&a?Promise.resolve(a):K(s,!1).then(e=>{const t=x[c];if(t){const r=t.forages;t.db=e;for(const t of r)t._dbInfo.db=e}return e}),d=s.storeName?l.then(e=>{if(!e.objectStoreNames.contains(s.storeName))return;const t=e.version+1;V(s);const r=x[c],n=(null==r?void 0:r.forages)||[];e.close();for(const e of n)e._dbInfo.db=null,e._dbInfo.version=t;const o=new Promise((e,r)=>{const n=L();if(!n)return r(new Error("IndexedDB not available"));const o=n.open(c,t);o.onerror=()=>{const e=o.result;e&&e.close(),r(o.error||new Error("Failed to open database"))},o.onupgradeneeded=()=>{const e=o.result;e.objectStoreNames.contains(s.storeName)&&e.deleteObjectStore(s.storeName)},o.onsuccess=()=>{const t=o.result;e(t)}});return o.then(e=>{if(r){r.db=e;for(const t of n)t._dbInfo.db=e,G(t._dbInfo)}e.close()}).catch(e=>{throw r&&J(s,e),e})}):l.then(e=>{V(s);const t=x[c],r=(null==t?void 0:t.forages)||[];e.close();for(const e of r)e._dbInfo.db=null;return new Promise((e,t)=>{const r=L();if(!r)return t(new Error("IndexedDB not available"));const n=r.deleteDatabase(c);n.onerror=()=>{t(n.error||new Error("Failed to delete database"))},n.onblocked=()=>{console.warn(`dropInstance blocked for database "${c}" until all open connections are closed`)},n.onsuccess=()=>{e()}}).then(()=>{if(t){t.db=null;for(const e of r)G(e._dbInfo)}}).catch(e=>{throw t&&J(s,e),e})}),t(d,r),d}};function Y(e,t){let r=e.name+"/";return e.storeName!==t.storeName&&(r+=e.storeName+"/"),r}function Z(){return!function(){const e="_localforage_support_test";try{return localStorage.setItem(e,"true"),localStorage.removeItem(e),!1}catch(e){return!0}}()||localStorage.length>0}function ee(e){const r=this.ready().then(()=>{const e=this._dbInfo,t=localStorage.length,r=[];for(let n=0;n<t;n++){const t=localStorage.key(n);t&&0===t.indexOf(e.keyPrefix)&&r.push(t.substring(e.keyPrefix.length))}return r});return t(r,e),r}const te={_driver:"localStorageWrapper",_initStorage:function(t){return e(this,void 0,void 0,function*(){const e=Object.assign(Object.assign({},t),{keyPrefix:Y(t,this._defaultConfig),serializer:A});if(!Z())throw new Error("localStorage not usable");this._dbInfo=e})},_support:function(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(e){return!1}}(),iterate:function(e,r){const n=this.ready().then(()=>{const t=this._dbInfo,r=t.keyPrefix,n=r.length,o=localStorage.length;let i=1;for(let s=0;s<o;s++){const o=localStorage.key(s);if(!o||0!==o.indexOf(r))continue;const c=localStorage.getItem(o);let a=null;null!==c&&(a=t.serializer.deserialize(c));const l=e(a,o.substring(n),i++);if(void 0!==l)return l}});return t(n,r),n},getItem:function(e,r){const n=i(e),o=this.ready().then(()=>{const e=this._dbInfo,t=localStorage.getItem(e.keyPrefix+n);return null===t?null:e.serializer.deserialize(t)});return t(o,r),o},setItem:function(r,n,o){return e(this,void 0,void 0,function*(){const s=i(r),c=this.ready().then(()=>e(this,void 0,void 0,function*(){const e=void 0===n?null:n,t=yield this._dbInfo.serializer.serialize(e);try{return localStorage.setItem(this._dbInfo.keyPrefix+s,t),e}catch(e){if(e instanceof Error&&("QuotaExceededError"===e.name||"NS_ERROR_DOM_QUOTA_REACHED"===e.name))throw e;throw e}}));return t(c,o),c})},removeItem:function(e,r){const n=i(e),o=this.ready().then(()=>{const e=this._dbInfo;localStorage.removeItem(e.keyPrefix+n)});return t(o,r),o},clear:function(e){const r=this.ready().then(()=>{const e=this._dbInfo.keyPrefix;for(let t=localStorage.length-1;t>=0;t--){const r=localStorage.key(t);r&&0===r.indexOf(e)&&localStorage.removeItem(r)}});return t(r,e),r},length:function(e){const r=ee.call(this).then(e=>e.length);return t(r,e),r},key:function(e,r){const n=this.ready().then(()=>{const t=this._dbInfo.keyPrefix,r=[];for(let e=0;e<localStorage.length;e++){const n=localStorage.key(e);n&&0===n.indexOf(t)&&r.push(n.substring(t.length))}return e<0||e>=r.length?null:r[e]});return t(n,r),n},keys:ee,dropInstance:function(e,r){const n=Object.assign({},e||{});if(!n.name){const e=this.config();n.name=e.name,n.storeName=e.storeName}const o=n.name?new Promise(e=>{const t=n.storeName?Y(n,this._defaultConfig):`${n.name}/`;for(let e=localStorage.length-1;e>=0;e--){const r=localStorage.key(e);r&&0===r.indexOf(t)&&localStorage.removeItem(r)}e()}):Promise.reject(new Error("Invalid arguments"));return t(o,r),o}},re={},ne={},oe={INDEXEDDB:q,LOCALSTORAGE:te},ie=[oe.INDEXEDDB._driver,oe.LOCALSTORAGE._driver],se=["dropInstance"],ce=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(se),ae={description:"",driver:ie.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1,compatibilityMode:!1},le=(e,t)=>{if(e)return r=>{(null==t?void 0:t.compatibilityMode)?e(r):e(r,void 0)}};function de(e,t){e[t]=function(...r){return e.ready().then(()=>e[t].apply(e,r))}}class ue{constructor(e){this.INDEXEDDB="asyncStorage",this.LOCALSTORAGE="localStorageWrapper",this._driverSet=null,this._pendingDriverInitialization=null,this._isRunningDefaultDriverSelection=!1,this._manualDriverOverride=!1,this._initDriver=null,this._ready=null,this._dbInfo=null;const t=[];for(const e in oe)if(Object.prototype.hasOwnProperty.call(oe,e)){const r=oe[e],n=r._driver;this[e]=n,re[n]||t.push(this.defineDriver(r).catch(e=>{console.warn(`Failed to define LocalSpace driver "${n}"`,e)}))}this._defaultConfig=s({},ae),this._config=s({},this._defaultConfig,e||{}),this._wrapLibraryMethodsWithReady();const r=t.length>0?Promise.all(t).then(()=>{}):Promise.resolve();this._pendingDriverInitialization=r.then(()=>this._runDefaultDriverSelection()),this._pendingDriverInitialization.then(()=>{this._pendingDriverInitialization=null},()=>{this._pendingDriverInitialization=null})}config(e){if("object"==typeof e&&null!==e){if(this._ready)return new Error("Can't call config() after LocalSpace has been used.");const t=e,r=this._config;for(const e of Object.keys(t)){const n=t[e];if("storeName"!==e||"string"!=typeof n){if("version"===e&&"number"!=typeof n)return new Error("Database version must be a number.");r[e]=n}else r.storeName=n.replace(/\W/g,"_")}return!t.driver||this.setDriver(this._config.driver)}if("string"==typeof e){const t=e;return this._config[t]}return this._config}createInstance(e){return new ue(e)}defineDriver(t,o,i){return e(this,void 0,void 0,function*(){const s=new Promise((r,o)=>e(this,void 0,void 0,function*(){try{const e=t._driver,i=new Error("Custom driver not compliant");if(!t._driver)return void o(i);const s=t,c=ce.concat("_initStorage");for(const e of c){const t=!n(se,e),r=s[e];if((t||r)&&"function"!=typeof r)return void o(i)}(()=>{const e=e=>function(...t){const r=new Error(`Method ${e} is not implemented by the current driver`),n=t[t.length-1];return"function"==typeof n&&n(r),Promise.reject(r)};for(const t of se)s[t]||(s[t]=e(t))})();const a=n=>{re[e]&&console.info(`Redefining LocalSpace driver: ${e}`),re[e]=t,ne[e]=n,r()};if("_support"in t)if(t._support&&"function"==typeof t._support){a(yield t._support())}else a(!!t._support);else a(!0)}catch(e){o(e)}})),c=this._getCallbackOptions();return r(s,o,le(i,c),c),s})}driver(){return this._driver||null}getDriver(t,n,o){return e(this,void 0,void 0,function*(){const e=re[t]?Promise.resolve(re[t]):Promise.reject(new Error("Driver not found.")),i=this._getCallbackOptions();return r(e,n,le(o,i),i),e})}getSerializer(t){return e(this,void 0,void 0,function*(){const e=Promise.resolve(A);return r(e,t,void 0,this._getCallbackOptions()),e})}ready(t){return e(this,void 0,void 0,function*(){var e,n;const o=(null!==(n=null!==(e=this._driverSet)&&void 0!==e?e:this._pendingDriverInitialization)&&void 0!==n?n:Promise.resolve()).then(()=>(null===this._ready&&(this._ready=this._initDriver?this._initDriver():Promise.resolve()),this._ready)),i=this._getCallbackOptions();return r(o,t,le(t,i),i),o})}setDriver(t,n,i){return e(this,void 0,void 0,function*(){this._pendingDriverInitialization&&!this._isRunningDefaultDriverSelection&&(yield this._pendingDriverInitialization),this._isRunningDefaultDriverSelection||(this._manualDriverOverride=!0),o(t)||(t=[t]);const s=this._getSupportedDrivers(t),c=this._getCallbackOptions();if(0===s.length){const e=new Error("No available storage method found."),t=Promise.resolve().then(()=>{throw e});return this._driverSet=t,r(t,n,le(i,c),c),t}const a=()=>{var e;this._config.driver=null!==(e=this.driver())&&void 0!==e?e:void 0},l=t=>e(this,void 0,void 0,function*(){this._extend(t),a();const e=this._initStorage;return this._ready="function"==typeof e?e.call(this,this._config):Promise.resolve(),yield this._ready,this._ready}),d=t=>()=>e(this,void 0,void 0,function*(){let r=0;return(()=>e(this,void 0,void 0,function*(){for(;r<t.length;){const e=t[r];r++,this._dbInfo=null,this._ready=null;try{const t=yield this.getDriver(e);return void(yield l(t))}catch(e){}}a();const e=new Error("No available storage method found.");throw this._driverSet=Promise.resolve().then(()=>{throw e}),e}))()}),u=null!==this._driverSet?this._driverSet.catch(()=>Promise.resolve()):Promise.resolve();return this._driverSet=u.then(()=>e(this,void 0,void 0,function*(){const e=s[0];this._dbInfo=null,this._ready=null;const t=yield this.getDriver(e);this._driver=t._driver,a(),this._wrapLibraryMethodsWithReady(),this._initDriver=d(s)})).catch(()=>{a();const e=new Error("No available storage method found.");throw this._driverSet=Promise.resolve().then(()=>{throw e}),e}),r(this._driverSet,n,le(i,c),c),this._driverSet})}supports(e){return!!ne[e]}_extend(e){s(this,e)}_getSupportedDrivers(e){const t=[];for(const r of e)this.supports(r)&&t.push(r);return t}_wrapLibraryMethodsWithReady(){for(const e of ce)de(this,e)}_runDefaultDriverSelection(){var e;return this._manualDriverOverride?null!==(e=this._driverSet)&&void 0!==e?e:Promise.resolve():(this._isRunningDefaultDriverSelection=!0,this.setDriver(this._config.driver).then(()=>{this._isRunningDefaultDriverSelection=!1},e=>{throw this._isRunningDefaultDriverSelection=!1,e}))}_getCallbackOptions(){return{compatibilityMode:!(!this._config||"boolean"!=typeof this._config.compatibilityMode)&&!!this._config.compatibilityMode}}iterate(t,r){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}getItem(t,r){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}setItem(t,r,n){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}removeItem(t,r){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}clear(t){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}length(t){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}key(t,r){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}keys(t){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}dropInstance(t,r){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}}const fe=new ue;exports.LocalSpace=ue,exports.default=fe,exports.indexedDBDriver=q,exports.localStorageDriver=te,exports.serializer=A;
|
|
1
|
+
"use strict";function e(e,t,r,n){return new(r||(r=Promise))(function(o,i){function s(e){try{a(n.next(e))}catch(e){i(e)}}function c(e){try{a(n.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(s,c)}a((n=n.apply(e,t||[])).next())})}function t(e,t){return t&&e.then(e=>t(null,e),e=>t(e,void 0)),e}function r(e,t,r,n){const o=e=>e instanceof Error?e:new Error(String(e));if(null==n?void 0:n.compatibilityMode)return"function"==typeof t&&e.then(e=>{t(e)}),"function"==typeof r&&e.catch(e=>{r(o(e))}),e;const i=e=>{const n=o(e);r?r(n):t&&t(n,void 0)};return t?e.then(e=>t(null,e),i):r&&e.catch(i),e}function n(e,t){return-1!==e.indexOf(t)}function o(e){return Array.isArray(e)}function i(e){return"string"!=typeof e?(console.warn(`key passed to LocalSpace API is not a string (got ${typeof e}). Using String() to convert.`),String(e)):e}function s(e,...t){const r=e;for(const e of t)if(e){const t=e;for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const e=t[n];r[n]=o(e)?[...e]:e}}return e}function c(e,t){try{return new Blob(e,t)}catch(r){if(!(r instanceof Error)||"TypeError"!==r.name)throw r;const n=window,o=n.BlobBuilder||n.MSBlobBuilder||n.MozBlobBuilder||n.WebKitBlobBuilder;if(!o)throw new Error("Blob constructor not supported");const i=new o;for(const t of e)i.append(t);return i.getBlob(null==t?void 0:t.type)}}Object.defineProperty(exports,"__esModule",{value:!0}),"function"==typeof SuppressedError&&SuppressedError;const a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/^~~local_forage_type~([^~]+)~/,d="__lfsc__:",u="arbf",f="blob",h="si08",v="ui08",b="uic8",y="si16",g="si32",p="ur16",m="ui32",_="fl32",w="fl64",I="bi64",S="bu64",D=Object.prototype.toString,E=()=>{let e;return e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e};function P(e){const t=E(),r=.75*e.length,n=e.length;let o=0,i=r;"="===e[e.length-1]&&(i--,"="===e[e.length-2]&&i--);const s=new t.ArrayBuffer(i),c=new t.Uint8Array(s);for(let t=0;t<n;t+=4){const r=a.indexOf(e[t]),n=a.indexOf(e[t+1]),i=a.indexOf(e[t+2]),s=a.indexOf(e[t+3]);c[o++]=r<<2|n>>4,c[o++]=(15&n)<<4|i>>2,c[o++]=(3&i)<<6|63&s}return s}function O(e){const t=new(E().Uint8Array)(e);let r="";for(let e=0;e<t.length;e+=3)r+=a[t[e]>>2],r+=a[(3&t[e])<<4|t[e+1]>>4],r+=a[(15&t[e+1])<<2|t[e+2]>>6],r+=a[63&t[e+2]];return t.length%3==2?r=r.substring(0,r.length-1)+"=":t.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}const j={"[object Int8Array]":h,"[object Uint8Array]":v,"[object Uint8ClampedArray]":b,"[object Int16Array]":y,"[object Uint16Array]":p,"[object Int32Array]":g,"[object Uint32Array]":m,"[object Float32Array]":_,"[object Float64Array]":w,"[object BigInt64Array]":I,"[object BigUint64Array]":S};const A={serialize:function(t){return e(this,void 0,void 0,function*(){const e=null!=t?D.call(t):"";if("[object ArrayBuffer]"===e)return d+u+O(t);if(function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}(t)){const r=j[e];if(!r)throw new Error("Failed to get type for BinaryArray");const n=t.buffer,o=n instanceof ArrayBuffer?n:new Uint8Array(n).slice().buffer;return d+r+O(o)}if("[object Blob]"===e){const e=t,r=yield e.arrayBuffer(),n="~~local_forage_type~"+e.type+"~"+O(r);return d+f+n}try{return JSON.stringify(t)}catch(e){throw console.error("Couldn't convert value into a JSON string: ",t),e}})},deserialize:function(e){if(e.substring(0,9)!==d)return JSON.parse(e);const t=e.substring(13),r=e.substring(9,13);let n,o=t;if(r===f&&l.test(t)){const e=t.match(l);e&&(n=e[1],o=t.substring(e[0].length))}const i=P(o),s=E();switch(r){case u:return i;case f:return c([i],{type:n});case h:return new s.Int8Array(i);case v:return new s.Uint8Array(i);case b:return new s.Uint8ClampedArray(i);case y:return new s.Int16Array(i);case p:return new s.Uint16Array(i);case g:return new s.Int32Array(i);case m:return new s.Uint32Array(i);case _:return new s.Float32Array(i);case w:return new s.Float64Array(i);case I:if(void 0===s.BigInt64Array)throw new Error("BigInt64Array is not supported in this environment");return new s.BigInt64Array(i);case S:if(void 0===s.BigUint64Array)throw new Error("BigUint64Array is not supported in this environment");return new s.BigUint64Array(i);default:throw new Error("Unknown type: "+r)}},stringToBuffer:P,bufferToString:O},B="local-forage-detect-blob-support";let N;const x={},k=Object.prototype.toString,z="readonly",R="readwrite";let C=null;const U=()=>"undefined"!=typeof window&&window.navigator?window.navigator:"undefined"!=typeof navigator?navigator:void 0;function L(){return"undefined"!=typeof indexedDB?indexedDB:"undefined"!=typeof window&&(window.indexedDB||window.webkitIndexedDB||window.mozIndexedDB||window.OIndexedDB||window.msIndexedDB)||null}function M(t){return e(this,void 0,void 0,function*(){const r=yield function(t){return e(this,void 0,void 0,function*(){if("function"==typeof t.arrayBuffer)return t.arrayBuffer();if("undefined"==typeof FileReader)throw new Error("Blob serialization not supported in this environment");return new Promise((e,r)=>{const n=new FileReader;n.onerror=()=>r(n.error),n.onloadend=()=>e(n.result),n.readAsArrayBuffer(t)})})}(t);return{__local_forage_encoded_blob:!0,data:A.bufferToString(r),type:t.type}})}function F(e){return c([A.stringToBuffer(e.data)],{type:e.type})}function $(e){return!!(null==e?void 0:e.__local_forage_encoded_blob)}function T(e){if(e.name)return e.name;throw new Error("IndexedDB database name is not configured.")}function W(e){if(e.storeName)return e.storeName;throw new Error("IndexedDB storeName is not configured.")}function V(e){const t=x[e.name],r={promise:null,resolve:null,reject:null};r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),t.deferredOperations.push(r),t.dbReady?t.dbReady=t.dbReady.then(()=>r.promise):t.dbReady=r.promise}function G(e){const t=x[e.name].deferredOperations.pop();if(t)return t.resolve(),t.promise}function J(e,t){const r=x[e.name].deferredOperations.pop();if(r)return r.reject(t),r.promise}function K(e,t){return new Promise((r,n)=>{const o=L();if(!o)return n(new Error("IndexedDB not available"));if(x[e.name]=x[e.name]||{forages:[],db:null,dbReady:null,deferredOperations:[]},e.db){if(!t)return r(e.db);V(e),e.db.close()}const i=t?o.open(e.name,e.version):o.open(e.name);t&&(i.onupgradeneeded=t=>{const r=t.target.result;try{r.createObjectStore(e.storeName),t.oldVersion<=1&&r.createObjectStore(B)}catch(r){if("ConstraintError"!==r.name)throw r;console.warn(`The database "${e.name}" has been upgraded from version ${t.oldVersion} to version ${t.newVersion}, but the storage "${e.storeName}" already exists.`)}}),i.onerror=e=>{e.preventDefault(),n(e.target.error)},i.onsuccess=()=>{const t=i.result;t.onversionchange=e=>{e.target.close()},r(t),G(e)}})}function X(e,t){if(!e.db)return!0;const r=!e.db.objectStoreNames.contains(e.storeName),n=e.version<e.db.version,o=e.version>e.db.version;if(n&&(e.version!==t&&console.warn(`The database "${e.name}" can't be downgraded from version ${e.db.version} to version ${e.version}.`),e.version=e.db.version),o||r){if(r){const t=e.db.version+1;t>e.version&&(e.version=t)}return!0}return!1}function Q(e,t,r,n=1){try{const n=e.db.transaction(e.storeName,t);r(null,n)}catch(o){if(n>0&&(!e.db||"InvalidStateError"===o.name||"NotFoundError"===o.name))return void Promise.resolve().then(()=>{if(!e.db||"NotFoundError"===o.name&&!e.db.objectStoreNames.contains(e.storeName)&&e.version<=e.db.version)return e.db&&(e.version=e.db.version+1),K(e,!0)}).then(()=>function(e){V(e);const t=x[e.name],r=t.forages;for(const e of r)e._dbInfo.db&&(e._dbInfo.db.close(),e._dbInfo.db=null);return e.db=null,K(e,!1).then(t=>(e.db=t,X(e,1)?K(e,!0):t)).then(n=>{e.db=t.db=n;for(const e of r)e._dbInfo.db=n}).catch(t=>{throw J(e,t),t})}(e).then(()=>{Q(e,t,r,n-1)})).catch(r);r(o)}}function H(e){var r;const n=this,o=(null!==(r=n._initReady)&&void 0!==r?r:n.ready).bind(n)().then(()=>{const e=T(n._dbInfo),t=x[e];if(t&&t.dbReady)return t.dbReady});return t(o,e),o}const q={_driver:"asyncStorage",_initStorage:function(t){return e(this,void 0,void 0,function*(){var e,r;const n=this,o={db:null};for(const e in t)Object.assign(o,{[e]:t[e]});const i=T(o);let s=x[i];s||(s=x[i]={forages:[],db:null,dbReady:null,deferredOperations:[]}),s.forages.push(n),n._initReady||(n._initReady=n.ready,n.ready=H);const c=[];function a(){return Promise.resolve()}for(const t of s.forages)if(t!==n){const r=(null!==(e=t._initReady)&&void 0!==e?e:t.ready).bind(t);c.push(r().catch(a))}const l=s.forages.slice(0);yield Promise.all(c),o.db=s.db;const d=yield K(o,!1);o.db=d;if(X(o,null!==(r=n._defaultConfig.version)&&void 0!==r?r:1)){const e=yield K(o,!0);o.db=s.db=e}else o.db=s.db=d;n._dbInfo=o;for(const e of l)e!==n&&(e._dbInfo.db=o.db,e._dbInfo.version=o.version)})},_support:()=>function(){var e;try{const t=L();if(!t)return!1;const r=U(),n=null!==(e=null==r?void 0:r.userAgent)&&void 0!==e?e:"";return!(r&&/Safari/.test(n)&&!/Chrome/.test(n))||new Promise(e=>{const r=t.open("__localforage_test");r.onsuccess=()=>{r.result.close(),t.deleteDatabase("__localforage_test"),e(!0)},r.onerror=()=>e(!1)})}catch(e){return!1}}(),iterate:function(e,r){const n=this,o=new Promise((t,r)=>{n.ready().then(()=>{Q(n._dbInfo,z,(o,i)=>{if(o)return r(o);try{const o=W(n._dbInfo),s=i.objectStore(o).openCursor();let c=1;s.onsuccess=()=>{const r=s.result;if(r){let n=r.value;void 0===n&&(n=null),$(n)&&(n=F(n));const o=e(n,r.key,c++);void 0!==o?t(o):r.continue()}else t(void 0)},s.onerror=()=>r(s.error)}catch(e){r(e)}})}).catch(r)});return t(o,r),o},getItem:function(e,r){const n=this;e=i(e);const o=new Promise((t,r)=>{n.ready().then(()=>{Q(n._dbInfo,z,(o,i)=>{if(o)return r(o);try{const o=W(n._dbInfo),s=i.objectStore(o).get(e);s.onsuccess=()=>{let e=s.result;void 0===e&&(e=null),$(e)&&(e=F(e)),t(e)},s.onerror=()=>r(s.error)}catch(e){r(e)}})}).catch(r)});return t(o,r),o},setItem:function(r,n,o){return e(this,void 0,void 0,function*(){const s=this;r=i(r);const a=new Promise((t,o)=>e(this,void 0,void 0,function*(){let e;try{if(yield s.ready(),e=s._dbInfo,"[object Blob]"===k.call(n)){const t=yield(i=e.db,"boolean"==typeof N?Promise.resolve(N):C||(C=new Promise(e=>{const t=i.transaction(B,R),r=c([""]);t.objectStore(B).put(r,"key"),t.onabort=t=>{t.preventDefault(),t.stopPropagation(),e(!1)},t.onerror=t.onabort,t.oncomplete=()=>{var t;const r=U(),n=null!==(t=null==r?void 0:r.userAgent)&&void 0!==t?t:"",o=n.match(/Chrome\/(\d+)/),i=n.match(/Edge\//),s=o?parseInt(o[1],10):NaN,c=!!i||!o||Number.isNaN(s)||s>=43;e(c)}}).then(e=>(N=e,C=null,e)).catch(()=>(C=null,N=!1,!1)),C));t||(n=yield M(n))}Q(e,R,(i,s)=>{if(i)return o(i);try{const i=W(e),c=s.objectStore(i);let a=n;void 0===a&&(a=null);const l=c.put(a,r);s.oncomplete=()=>{t(a)},s.onabort=s.onerror=()=>{const e=l.error||s.error;o(e)}}catch(e){o(e)}})}catch(e){o(e)}var i}));return t(a,o),a})},removeItem:function(e,r){const n=this;e=i(e);const o=new Promise((t,r)=>{n.ready().then(()=>{Q(n._dbInfo,R,(o,i)=>{if(o)return r(o);try{const o=W(n._dbInfo),s=i.objectStore(o).delete(e);i.oncomplete=()=>t(),i.onerror=()=>r(s.error),i.onabort=()=>{const e=s.error||i.error;r(e)}}catch(e){r(e)}})}).catch(r)});return t(o,r),o},clear:function(e){const r=this,n=new Promise((e,t)=>{r.ready().then(()=>{Q(r._dbInfo,R,(n,o)=>{if(n)return t(n);try{const n=W(r._dbInfo),i=o.objectStore(n).clear();o.oncomplete=()=>e(),o.onabort=o.onerror=()=>{const e=i.error||o.error;t(e)}}catch(e){t(e)}})}).catch(t)});return t(n,e),n},length:function(e){const r=this,n=new Promise((e,t)=>{r.ready().then(()=>{Q(r._dbInfo,z,(n,o)=>{if(n)return t(n);try{const n=W(r._dbInfo),i=o.objectStore(n).count();i.onsuccess=()=>e(i.result),i.onerror=()=>t(i.error)}catch(e){t(e)}})}).catch(t)});return t(n,e),n},key:function(e,r){const n=this,o=new Promise((t,r)=>{e<0?t(null):n.ready().then(()=>{Q(n._dbInfo,z,(o,i)=>{if(o)return r(o);try{const o=W(n._dbInfo),s=i.objectStore(o);let c=!1;const a=s.openKeyCursor();a.onsuccess=()=>{const r=a.result;r?0===e||c?t(r.key):(c=!0,r.advance(e)):t(null)},a.onerror=()=>r(a.error)}catch(e){r(e)}})}).catch(r)});return t(o,r),o},keys:function(e){const r=this,n=new Promise((e,t)=>{r.ready().then(()=>{Q(r._dbInfo,z,(n,o)=>{if(n)return t(n);try{const n=W(r._dbInfo),i=o.objectStore(n).openKeyCursor(),s=[];i.onsuccess=()=>{const t=i.result;t?(s.push(t.key),t.continue()):e(s)},i.onerror=()=>t(i.error)}catch(e){t(e)}})}).catch(t)});return t(n,e),n},dropInstance:function(e,r){var n,o;const i=this.config(),s=Object.assign({},"object"==typeof e?e:{});if(s.name||(s.name=i.name,s.storeName||(s.storeName=i.storeName)),!s.name){const e=Promise.reject(new Error("Invalid arguments"));return t(e,r),e}const c=s.name,a=null!==(o=null===(n=this._dbInfo)||void 0===n?void 0:n.db)&&void 0!==o?o:null;let l,d;return l=c===i.name&&null!==a&&a?Promise.resolve(a):K(s,!1).then(e=>{const t=x[c];if(t){const r=t.forages;t.db=e;for(const t of r)t._dbInfo.db=e}return e}),d=s.storeName?l.then(e=>{if(!e.objectStoreNames.contains(s.storeName))return;const t=e.version+1;V(s);const r=x[c],n=(null==r?void 0:r.forages)||[];e.close();for(const e of n)e._dbInfo.db=null,e._dbInfo.version=t;const o=new Promise((e,r)=>{const n=L();if(!n)return r(new Error("IndexedDB not available"));const o=n.open(c,t);o.onerror=()=>{const e=o.result;e&&e.close(),r(o.error||new Error("Failed to open database"))},o.onupgradeneeded=()=>{const e=o.result;e.objectStoreNames.contains(s.storeName)&&e.deleteObjectStore(s.storeName)},o.onsuccess=()=>{const t=o.result;e(t)}});return o.then(e=>{if(r){r.db=e;for(const t of n)t._dbInfo.db=e,G(t._dbInfo)}}).catch(e=>{throw r&&J(s,e),e})}):l.then(e=>{V(s);const t=x[c],r=(null==t?void 0:t.forages)||[];e.close();for(const e of r)e._dbInfo.db=null;return new Promise((e,t)=>{const r=L();if(!r)return t(new Error("IndexedDB not available"));const n=r.deleteDatabase(c);n.onerror=()=>{t(n.error||new Error("Failed to delete database"))},n.onblocked=()=>{console.warn(`dropInstance blocked for database "${c}" until all open connections are closed`)},n.onsuccess=()=>{e()}}).then(()=>{if(t){t.db=null;for(const e of r)G(e._dbInfo)}}).catch(e=>{throw t&&J(s,e),e})}),t(d,r),d}};function Y(e,t){let r=e.name+"/";return e.storeName!==t.storeName&&(r+=e.storeName+"/"),r}function Z(){return!function(){const e="_localforage_support_test";try{return localStorage.setItem(e,"true"),localStorage.removeItem(e),!1}catch(e){return!0}}()||localStorage.length>0}function ee(e){const r=this.ready().then(()=>{const e=this._dbInfo,t=localStorage.length,r=[];for(let n=0;n<t;n++){const t=localStorage.key(n);t&&0===t.indexOf(e.keyPrefix)&&r.push(t.substring(e.keyPrefix.length))}return r});return t(r,e),r}const te={_driver:"localStorageWrapper",_initStorage:function(t){return e(this,void 0,void 0,function*(){const e=Object.assign(Object.assign({},t),{keyPrefix:Y(t,this._defaultConfig),serializer:A});if(!Z())throw new Error("localStorage not usable");this._dbInfo=e})},_support:function(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(e){return!1}}(),iterate:function(e,r){const n=this.ready().then(()=>{const t=this._dbInfo,r=t.keyPrefix,n=r.length,o=localStorage.length;let i=1;for(let s=0;s<o;s++){const o=localStorage.key(s);if(!o||0!==o.indexOf(r))continue;const c=localStorage.getItem(o);let a=null;null!==c&&(a=t.serializer.deserialize(c));const l=e(a,o.substring(n),i++);if(void 0!==l)return l}});return t(n,r),n},getItem:function(e,r){const n=i(e),o=this.ready().then(()=>{const e=this._dbInfo,t=localStorage.getItem(e.keyPrefix+n);return null===t?null:e.serializer.deserialize(t)});return t(o,r),o},setItem:function(r,n,o){return e(this,void 0,void 0,function*(){const s=i(r),c=this.ready().then(()=>e(this,void 0,void 0,function*(){const e=void 0===n?null:n,t=yield this._dbInfo.serializer.serialize(e);try{return localStorage.setItem(this._dbInfo.keyPrefix+s,t),e}catch(e){if(e instanceof Error&&("QuotaExceededError"===e.name||"NS_ERROR_DOM_QUOTA_REACHED"===e.name))throw e;throw e}}));return t(c,o),c})},removeItem:function(e,r){const n=i(e),o=this.ready().then(()=>{const e=this._dbInfo;localStorage.removeItem(e.keyPrefix+n)});return t(o,r),o},clear:function(e){const r=this.ready().then(()=>{const e=this._dbInfo.keyPrefix;for(let t=localStorage.length-1;t>=0;t--){const r=localStorage.key(t);r&&0===r.indexOf(e)&&localStorage.removeItem(r)}});return t(r,e),r},length:function(e){const r=ee.call(this).then(e=>e.length);return t(r,e),r},key:function(e,r){const n=this.ready().then(()=>{const t=this._dbInfo.keyPrefix,r=[];for(let e=0;e<localStorage.length;e++){const n=localStorage.key(e);n&&0===n.indexOf(t)&&r.push(n.substring(t.length))}return e<0||e>=r.length?null:r[e]});return t(n,r),n},keys:ee,dropInstance:function(e,r){const n=Object.assign({},e||{});if(!n.name){const e=this.config();n.name=e.name,n.storeName=e.storeName}const o=n.name?new Promise(e=>{const t=n.storeName?Y(n,this._defaultConfig):`${n.name}/`;for(let e=localStorage.length-1;e>=0;e--){const r=localStorage.key(e);r&&0===r.indexOf(t)&&localStorage.removeItem(r)}e()}):Promise.reject(new Error("Invalid arguments"));return t(o,r),o}},re={},ne={},oe={INDEXEDDB:q,LOCALSTORAGE:te},ie=[oe.INDEXEDDB._driver,oe.LOCALSTORAGE._driver],se=["dropInstance"],ce=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(se),ae={description:"",driver:ie.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1,compatibilityMode:!1},le=(e,t)=>{if(e)return r=>{(null==t?void 0:t.compatibilityMode)?e(r):e(r,void 0)}};function de(e,t){e[t]=function(...r){return e.ready().then(()=>e[t].apply(e,r))}}class ue{constructor(e){this.INDEXEDDB="asyncStorage",this.LOCALSTORAGE="localStorageWrapper",this._driverSet=null,this._pendingDriverInitialization=null,this._isRunningDefaultDriverSelection=!1,this._manualDriverOverride=!1,this._initDriver=null,this._ready=null,this._dbInfo=null;const t=[];for(const e in oe)if(Object.prototype.hasOwnProperty.call(oe,e)){const r=oe[e],n=r._driver;this[e]=n,re[n]||t.push(this.defineDriver(r).catch(e=>{console.warn(`Failed to define LocalSpace driver "${n}"`,e)}))}this._defaultConfig=s({},ae),this._config=s({},this._defaultConfig,e||{}),this._wrapLibraryMethodsWithReady();const r=t.length>0?Promise.all(t).then(()=>{}):Promise.resolve();this._pendingDriverInitialization=r.then(()=>this._runDefaultDriverSelection()),this._pendingDriverInitialization.then(()=>{this._pendingDriverInitialization=null},()=>{this._pendingDriverInitialization=null})}config(e){if("object"==typeof e&&null!==e){if(this._ready)return new Error("Can't call config() after LocalSpace has been used.");const t=e,r=this._config;for(const e of Object.keys(t)){const n=t[e];if("storeName"!==e||"string"!=typeof n){if("version"===e&&"number"!=typeof n)return new Error("Database version must be a number.");r[e]=n}else r.storeName=n.replace(/\W/g,"_")}return!t.driver||this.setDriver(this._config.driver)}if("string"==typeof e){const t=e;return this._config[t]}return this._config}createInstance(e){return new ue(e)}defineDriver(t,o,i){return e(this,void 0,void 0,function*(){const s=new Promise((r,o)=>e(this,void 0,void 0,function*(){try{const e=t._driver,i=new Error("Custom driver not compliant");if(!t._driver)return void o(i);const s=t,c=ce.concat("_initStorage");for(const e of c){const t=!n(se,e),r=s[e];if((t||r)&&"function"!=typeof r)return void o(i)}(()=>{const e=e=>function(...t){const r=new Error(`Method ${e} is not implemented by the current driver`),n=t[t.length-1];return"function"==typeof n&&n(r),Promise.reject(r)};for(const t of se)s[t]||(s[t]=e(t))})();const a=n=>{re[e]&&console.info(`Redefining LocalSpace driver: ${e}`),re[e]=t,ne[e]=n,r()};if("_support"in t)if(t._support&&"function"==typeof t._support){a(yield t._support())}else a(!!t._support);else a(!0)}catch(e){o(e)}})),c=this._getCallbackOptions();return r(s,o,le(i,c),c),s})}driver(){return this._driver||null}getDriver(t,n,o){return e(this,void 0,void 0,function*(){const e=re[t]?Promise.resolve(re[t]):Promise.reject(new Error("Driver not found.")),i=this._getCallbackOptions();return r(e,n,le(o,i),i),e})}getSerializer(t){return e(this,void 0,void 0,function*(){const e=Promise.resolve(A);return r(e,t,void 0,this._getCallbackOptions()),e})}ready(t){return e(this,void 0,void 0,function*(){var e,n;const o=(null!==(n=null!==(e=this._driverSet)&&void 0!==e?e:this._pendingDriverInitialization)&&void 0!==n?n:Promise.resolve()).then(()=>(null===this._ready&&(this._ready=this._initDriver?this._initDriver():Promise.resolve()),this._ready)),i=this._getCallbackOptions();return r(o,t,le(t,i),i),o})}setDriver(t,n,i){return e(this,void 0,void 0,function*(){this._pendingDriverInitialization&&!this._isRunningDefaultDriverSelection&&(yield this._pendingDriverInitialization),this._isRunningDefaultDriverSelection||(this._manualDriverOverride=!0),o(t)||(t=[t]);const s=this._getSupportedDrivers(t),c=this._getCallbackOptions();if(0===s.length){const e=new Error("No available storage method found."),t=Promise.resolve().then(()=>{throw e});return this._driverSet=t,r(t,n,le(i,c),c),t}const a=()=>{var e;this._config.driver=null!==(e=this.driver())&&void 0!==e?e:void 0},l=t=>e(this,void 0,void 0,function*(){this._extend(t),a();const e=this._initStorage;return this._ready="function"==typeof e?e.call(this,this._config):Promise.resolve(),yield this._ready,this._ready}),d=t=>()=>e(this,void 0,void 0,function*(){let r=0;return(()=>e(this,void 0,void 0,function*(){for(;r<t.length;){const e=t[r];r++,this._dbInfo=null,this._ready=null;try{const t=yield this.getDriver(e);return void(yield l(t))}catch(e){}}a();const e=new Error("No available storage method found.");throw this._driverSet=Promise.resolve().then(()=>{throw e}),e}))()}),u=null!==this._driverSet?this._driverSet.catch(()=>Promise.resolve()):Promise.resolve();return this._driverSet=u.then(()=>e(this,void 0,void 0,function*(){const e=s[0];this._dbInfo=null,this._ready=null;const t=yield this.getDriver(e);this._driver=t._driver,a(),this._wrapLibraryMethodsWithReady(),this._initDriver=d(s)})).catch(()=>{a();const e=new Error("No available storage method found.");throw this._driverSet=Promise.resolve().then(()=>{throw e}),e}),r(this._driverSet,n,le(i,c),c),this._driverSet})}supports(e){return!!ne[e]}_extend(e){s(this,e)}_getSupportedDrivers(e){const t=[];for(const r of e)this.supports(r)&&t.push(r);return t}_wrapLibraryMethodsWithReady(){for(const e of ce)de(this,e)}_runDefaultDriverSelection(){var e;return this._manualDriverOverride?null!==(e=this._driverSet)&&void 0!==e?e:Promise.resolve():(this._isRunningDefaultDriverSelection=!0,this.setDriver(this._config.driver).then(()=>{this._isRunningDefaultDriverSelection=!1},e=>{throw this._isRunningDefaultDriverSelection=!1,e}))}_getCallbackOptions(){return{compatibilityMode:!(!this._config||"boolean"!=typeof this._config.compatibilityMode)&&!!this._config.compatibilityMode}}iterate(t,r){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}getItem(t,r){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}setItem(t,r,n){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}removeItem(t,r){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}clear(t){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}length(t){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}key(t,r){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}keys(t){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}dropInstance(t,r){return e(this,void 0,void 0,function*(){throw new Error("Driver not initialized")})}}const fe=new ue;exports.LocalSpace=ue,exports.default=fe,exports.indexedDBDriver=q,exports.localStorageDriver=te,exports.serializer=A;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|