Socket
Socket
Sign inDemoInstall

@orbit/memory

Package Overview
Dependencies
7
Maintainers
1
Versions
42
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.17.0-beta.26 to 0.17.0-beta.27

12

dist/commonjs/memory-cache.js

@@ -48,5 +48,9 @@ "use strict";

(_b = settings.transformBuilder) !== null && _b !== void 0 ? _b : (settings.transformBuilder = this._transformBuilder);
(_c = settings.validatorFor) !== null && _c !== void 0 ? _c : (settings.validatorFor = this._validatorFor);
(_d = settings.defaultQueryOptions) !== null && _d !== void 0 ? _d : (settings.defaultQueryOptions = this._defaultQueryOptions);
(_e = settings.defaultTransformOptions) !== null && _e !== void 0 ? _e : (settings.defaultTransformOptions = this._defaultTransformOptions);
(_c = settings.defaultQueryOptions) !== null && _c !== void 0 ? _c : (settings.defaultQueryOptions = this._defaultQueryOptions);
(_d = settings.defaultTransformOptions) !== null && _d !== void 0 ? _d : (settings.defaultTransformOptions = this._defaultTransformOptions);
(_e = settings.validatorFor) !== null && _e !== void 0 ? _e : (settings.validatorFor = this._validatorFor);
if (settings.autoValidate === undefined &&
settings.validatorFor === undefined) {
settings.autoValidate = false;
}
return new MemoryCache(settings);

@@ -259,2 +263,2 @@ }

exports.MemoryCache = MemoryCache;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbW9yeS1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzQ0FBb0M7QUFPcEMsZ0RBQWdEO0FBQ2hELHNEQVM2QjtBQUM3Qiw0Q0FVd0I7QUFDeEIsd0NBQW9EO0FBRXBELE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsWUFBSyxDQUFDO0FBb0NwQzs7Ozs7R0FLRztBQUNILE1BQWEsV0FPWCxTQUFRLDhCQUF5QztJQVNqRCxZQUFZLFFBQXVEO1FBQ2pFLE1BQU0sRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFakQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWxCLHNFQUFzRTtRQUN0RSw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLDJCQUEyQjtZQUM5QixxQkFBcUIsYUFBckIscUJBQXFCLGNBQXJCLHFCQUFxQixHQUFJLElBQUksS0FBSyxTQUFTLENBQUM7UUFFOUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUFJLENBQ0YsV0FBbUUsRUFBRTs7UUFFckUsb0JBQW9CO1FBQ3BCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM5QixRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFL0Isd0JBQXdCO1FBQ3hCLE1BQUEsUUFBUSxDQUFDLFlBQVksb0NBQXJCLFFBQVEsQ0FBQyxZQUFZLEdBQUssSUFBSSxDQUFDLGFBQWEsRUFBQztRQUM3QyxNQUFBLFFBQVEsQ0FBQyxnQkFBZ0Isb0NBQXpCLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBSyxJQUFJLENBQUMsaUJBQWlCLEVBQUM7UUFDckQsTUFBQSxRQUFRLENBQUMsWUFBWSxvQ0FBckIsUUFBUSxDQUFDLFlBQVksR0FBSyxJQUFJLENBQUMsYUFBYSxFQUFDO1FBQzdDLE1BQUEsUUFBUSxDQUFDLG1CQUFtQixvQ0FBNUIsUUFBUSxDQUFDLG1CQUFtQixHQUFLLElBQUksQ0FBQyxvQkFBb0IsRUFBQztRQUMzRCxNQUFBLFFBQVEsQ0FBQyx1QkFBdUIsb0NBQWhDLFFBQVEsQ0FBQyx1QkFBdUIsR0FBSyxJQUFJLENBQUMsd0JBQXdCLEVBQUM7UUFFbkUsT0FBTyxJQUFJLFdBQVcsQ0FDcEIsUUFBeUQsQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFlRCxLQUFLLENBQ0gsV0FBa0QsRUFDbEQsT0FBc0M7UUFFdEMsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLGdCQUFnQixFQUFFLEdBQUcsT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksRUFBRSxDQUFDO1FBRXRELE1BQU0sQ0FDSix3R0FBd0csRUFDeEcsV0FBVyxDQUFDLDBCQUEwQixDQUN2QyxDQUFDO1FBRUYsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFL0MsSUFBSSxRQUFRLEtBQUssS0FBSyxFQUFFO1lBQ3RCLEdBQUcsR0FBRyxJQUFBLGtDQUF3QixFQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FDaEIsR0FBRyxFQUNILGdCQUEwQyxDQUMzQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FDaEIsR0FBRyxFQUNILGdCQUE2QyxDQUM5QyxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTTtRQUNKLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFeEIsTUFBTSxDQUNKLHFEQUFxRCxFQUNyRCxJQUFJLEtBQUssU0FBUyxDQUNuQixDQUFDO1FBRUYsTUFBTSxDQUNKLDhGQUE4RixFQUM5RixJQUFJLENBQUMsMkJBQTJCLENBQ2pDLENBQUM7UUFFRiwwQ0FBMEM7UUFDMUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFeEMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUViLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxhQUFhLENBQUMsUUFBd0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxjQUFjLENBQ1osZ0JBQTRDO1FBRTVDLElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNyQixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQ3hCLE9BQU8sRUFDUCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FDekMsQ0FDRixDQUFDO1lBQ0YsT0FBTyxPQUFPLENBQUM7U0FDaEI7YUFBTSxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxFQUFFO1lBQy9DLE1BQU0sSUFBSSxHQUFXLGdCQUFnQixDQUFDO1lBQ3RDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDakQ7YUFBTTtZQUNMLE1BQU0sT0FBTyxHQUF3QixFQUFFLENBQUM7WUFDeEMsTUFBTSxVQUFVLEdBQXFCLGdCQUFnQixDQUFDO1lBQ3RELEtBQUssSUFBSSxRQUFRLElBQUksVUFBVSxFQUFFO2dCQUMvQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLE1BQU0sRUFBRTtvQkFDVixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN0QjthQUNGO1lBQ0QsT0FBTyxPQUFPLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQXlCO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxjQUFjLENBQUMsT0FBNEI7UUFDekMsSUFBSSxRQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzFCLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDakQ7UUFDRCxLQUFLLElBQUksSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FDZCxjQUE4QjtRQUU5QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLE1BQU0sRUFBRTtZQUNWLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7YUFBTTtZQUNMLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLGdCQUFrQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsTUFBTSxRQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ3pCLEtBQUssSUFBSSxjQUFjLElBQUksZ0JBQWdCLEVBQUU7WUFDM0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNoRCxJQUFJLE1BQU0sRUFBRTtnQkFDVixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNyQixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwRCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDL0M7U0FDRjtRQUNELEtBQUssSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELDJCQUEyQixDQUN6QiwwQkFBNkQ7UUFFN0QsTUFBTSxPQUFPLEdBQWlDLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBcUIsS0FBSyxDQUFDLE9BQU8sQ0FDaEQsMEJBQTBCLENBQzNCO1lBQ0MsQ0FBQyxDQUFDLDBCQUEwQjtZQUM1QixDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRWpDLEtBQUssSUFBSSxRQUFRLElBQUksVUFBVSxFQUFFO1lBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxJQUFJLE1BQU0sRUFBRTtnQkFDVixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzdDO1NBQ0Y7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsMkJBQTJCLENBQ3pCLGFBQTJDO1FBRTNDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQzdELENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUNuQixDQUFDO1lBQ0YsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFBLGFBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsYUFBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUNsRCxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFDbEIsSUFBSSxDQUNMLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4QkFBOEIsQ0FDNUIsYUFBMkM7UUFFM0MsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzFCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FDN0QsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQ25CLENBQUM7WUFDRixJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUN2QixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sQ0FBQyxDQUNDLElBQUEsK0JBQXFCLEVBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUMzQyxHQUFHLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQ3BDLENBQ0osQ0FBQztnQkFDRixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQ2xELENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUNsQixPQUFPLENBQ1IsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSztRQUNILElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFdEIsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4QixTQUFTLENBQ1AseUhBQXlILENBQzFILENBQUM7WUFDRixJQUFJLGFBQUosSUFBSSxjQUFKLElBQUksSUFBSixJQUFJLEdBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDO1NBQ3ZCO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFbkIsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztTQUM3QjtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoRCxJQUFJLFdBQVcsR0FBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSx3QkFBWSxDQUNwQyxXQUFXLENBQ1osQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksd0JBQVksRUFBNkIsQ0FBQzthQUNyRTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFFbEMsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3RDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxJQUFJLDBCQUEwQjtRQUM1QixPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQztJQUMxQyxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE1BQU0sQ0FDSiwwR0FBMEcsRUFDMUcsSUFBSSxDQUFDLDJCQUEyQixDQUNqQyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsaUJBQXNDLENBQUM7SUFDckQsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxvQkFBb0I7SUFDcEIsNkVBQTZFO0lBRW5FLE9BQU8sQ0FHZixTQUEwQixFQUMxQixPQUFZO1FBRVosSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDcEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUN4QixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUEsZUFBTyxFQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FDOUIsQ0FBQztTQUNIO1FBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFjLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLG1CQUFtQjtRQUMzQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDdkMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksMENBQTJCLENBQUM7Z0JBQ3RELE1BQU07Z0JBQ04sTUFBTTthQUNQLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVTLDBCQUEwQixDQUNsQyxJQUE0QztRQUU1QyxNQUFNLG9CQUFvQixHQUV0QixFQUFFLENBQUM7UUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDaEQsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksd0JBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHFCQUFxQixHQUFHLG9CQUFvQixDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQWpZRCxrQ0FpWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmJpdCB9IGZyb20gJ0BvcmJpdC9jb3JlJztcbmltcG9ydCB7XG4gIERlZmF1bHRSZXF1ZXN0T3B0aW9ucyxcbiAgRnVsbFJlcXVlc3RPcHRpb25zLFxuICBGdWxsUmVzcG9uc2UsXG4gIFJlcXVlc3RPcHRpb25zXG59IGZyb20gJ0BvcmJpdC9kYXRhJztcbmltcG9ydCB7IEltbXV0YWJsZU1hcCB9IGZyb20gJ0BvcmJpdC9pbW11dGFibGUnO1xuaW1wb3J0IHtcbiAgUmVjb3JkQ2FjaGVRdWVyeU9wdGlvbnMsXG4gIFJlY29yZENhY2hlVHJhbnNmb3JtT3B0aW9ucyxcbiAgUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzLFxuICBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eSxcbiAgUmVjb3JkVHJhbnNmb3JtQnVmZmVyLFxuICBTaW1wbGVSZWNvcmRUcmFuc2Zvcm1CdWZmZXIsXG4gIFN5bmNSZWNvcmRDYWNoZSxcbiAgU3luY1JlY29yZENhY2hlU2V0dGluZ3Ncbn0gZnJvbSAnQG9yYml0L3JlY29yZC1jYWNoZSc7XG5pbXBvcnQge1xuICBjb2FsZXNjZVJlY29yZE9wZXJhdGlvbnMsXG4gIGVxdWFsUmVjb3JkSWRlbnRpdGllcyxcbiAgSW5pdGlhbGl6ZWRSZWNvcmQsXG4gIFJlY29yZElkZW50aXR5LFxuICBSZWNvcmRPcGVyYXRpb24sXG4gIFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgUmVjb3JkVHJhbnNmb3JtLFxuICBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBSZWNvcmRUcmFuc2Zvcm1SZXN1bHRcbn0gZnJvbSAnQG9yYml0L3JlY29yZHMnO1xuaW1wb3J0IHsgY2xvbmUsIERpY3QsIHRvQXJyYXkgfSBmcm9tICdAb3JiaXQvdXRpbHMnO1xuXG5jb25zdCB7IGFzc2VydCwgZGVwcmVjYXRlIH0gPSBPcmJpdDtcblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlDYWNoZU1lcmdlT3B0aW9ucyB7XG4gIGNvYWxlc2NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlDYWNoZVNldHRpbmdzPFxuICBRTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkQ2FjaGVRdWVyeU9wdGlvbnMsXG4gIFRPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRDYWNoZVRyYW5zZm9ybU9wdGlvbnMsXG4gIFFCID0gUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBUQiA9IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIsXG4gIFFSRCA9IHVua25vd24sXG4gIFRSRCBleHRlbmRzIFJlY29yZENhY2hlVXBkYXRlRGV0YWlscyA9IFJlY29yZENhY2hlVXBkYXRlRGV0YWlsc1xuPiBleHRlbmRzIFN5bmNSZWNvcmRDYWNoZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCPiB7XG4gIGJhc2U/OiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+O1xuICB0cmFja1VwZGF0ZU9wZXJhdGlvbnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUNhY2hlQ2xhc3M8XG4gIFFPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRDYWNoZVF1ZXJ5T3B0aW9ucyxcbiAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlVHJhbnNmb3JtT3B0aW9ucyxcbiAgUUIgPSBSZWNvcmRRdWVyeUJ1aWxkZXIsXG4gIFRCID0gUmVjb3JkVHJhbnNmb3JtQnVpbGRlcixcbiAgUVJEID0gdW5rbm93bixcbiAgVFJEIGV4dGVuZHMgUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzID0gUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzXG4+IHtcbiAgbmV3IChzZXR0aW5nczogTWVtb3J5Q2FjaGVTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+KTogTWVtb3J5Q2FjaGU8XG4gICAgUU8sXG4gICAgVE8sXG4gICAgUUIsXG4gICAgVEIsXG4gICAgUVJELFxuICAgIFRSRFxuICA+O1xufVxuXG4vKipcbiAqIEEgY2FjaGUgdXNlZCB0byBhY2Nlc3MgcmVjb3JkcyBpbiBtZW1vcnkuXG4gKlxuICogQmVjYXVzZSBkYXRhIGlzIHN0b3JlZCBpbiBpbW11dGFibGUgbWFwcywgdGhpcyB0eXBlIG9mIGNhY2hlIGNhbiBiZSBmb3JrZWRcbiAqIGVmZmljaWVudGx5LlxuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5Q2FjaGU8XG4gIFFPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRDYWNoZVF1ZXJ5T3B0aW9ucyxcbiAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlVHJhbnNmb3JtT3B0aW9ucyxcbiAgUUIgPSBSZWNvcmRRdWVyeUJ1aWxkZXIsXG4gIFRCID0gUmVjb3JkVHJhbnNmb3JtQnVpbGRlcixcbiAgUVJEID0gdW5rbm93bixcbiAgVFJEIGV4dGVuZHMgUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzID0gUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzXG4+IGV4dGVuZHMgU3luY1JlY29yZENhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4ge1xuICBwcm90ZWN0ZWQgX2Jhc2U/OiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+O1xuICBwcm90ZWN0ZWQgX3JlY29yZHMhOiBEaWN0PEltbXV0YWJsZU1hcDxzdHJpbmcsIEluaXRpYWxpemVkUmVjb3JkPj47XG4gIHByb3RlY3RlZCBfaW52ZXJzZVJlbGF0aW9uc2hpcHMhOiBEaWN0PFxuICAgIEltbXV0YWJsZU1hcDxzdHJpbmcsIFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5W10+XG4gID47XG4gIHByb3RlY3RlZCBfdXBkYXRlT3BlcmF0aW9ucz86IFJlY29yZE9wZXJhdGlvbltdO1xuICBwcm90ZWN0ZWQgX2lzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBNZW1vcnlDYWNoZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4pIHtcbiAgICBjb25zdCB7IGJhc2UsIHRyYWNrVXBkYXRlT3BlcmF0aW9ucyB9ID0gc2V0dGluZ3M7XG5cbiAgICBzdXBlcihzZXR0aW5ncyk7XG5cbiAgICB0aGlzLl9iYXNlID0gYmFzZTtcblxuICAgIC8vIFRyYWNrIHVwZGF0ZSBvcGVyYXRpb25zIGlmIGV4cGxpY2l0bHkgdG9sZCB0byBkbyBzbywgb3IgaWYgYSBgYmFzZWBcbiAgICAvLyBjYWNoZSBoYXMgYmVlbiBzcGVjaWZpZWQuXG4gICAgdGhpcy5faXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnMgPVxuICAgICAgdHJhY2tVcGRhdGVPcGVyYXRpb25zID8/IGJhc2UgIT09IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIGdldCBiYXNlKCk6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9iYXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lLCBvciBcImZvcmtcIiwgZnJvbSBhIFwiYmFzZVwiIGNhY2hlLlxuICAgKlxuICAgKiBUaGUgZm9ya2VkIGNhY2hlIHdpbGwgaGF2ZSB0aGUgc2FtZSBgc2NoZW1hYCBhbmQgYGtleU1hcGAgYXMgaXRzIGJhc2VcbiAgICogc291cmNlLiBUaGUgZm9ya2VkIGNhY2hlIHdpbGwgc3RhcnQgd2l0aCB0aGUgc2FtZSBpbW11dGFibGUgZG9jdW1lbnQgYXMgdGhlXG4gICAqIGJhc2Ugc291cmNlLiBJdHMgY29udGVudHMgYW5kIGxvZyB3aWxsIGV2b2x2ZSBpbmRlcGVuZGVudGx5LlxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgZm9ya2VkIGNhY2hlXG4gICAqL1xuICBmb3JrKFxuICAgIHNldHRpbmdzOiBQYXJ0aWFsPE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPj4gPSB7fVxuICApOiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+IHtcbiAgICAvLyByZXF1aXJlZCBzZXR0aW5nc1xuICAgIHNldHRpbmdzLmJhc2UgPSB0aGlzO1xuICAgIHNldHRpbmdzLnNjaGVtYSA9IHRoaXMuc2NoZW1hO1xuICAgIHNldHRpbmdzLmtleU1hcCA9IHRoaXMuX2tleU1hcDtcblxuICAgIC8vIGN1c3RvbWl6YWJsZSBzZXR0aW5nc1xuICAgIHNldHRpbmdzLnF1ZXJ5QnVpbGRlciA/Pz0gdGhpcy5fcXVlcnlCdWlsZGVyO1xuICAgIHNldHRpbmdzLnRyYW5zZm9ybUJ1aWxkZXIgPz89IHRoaXMuX3RyYW5zZm9ybUJ1aWxkZXI7XG4gICAgc2V0dGluZ3MudmFsaWRhdG9yRm9yID8/PSB0aGlzLl92YWxpZGF0b3JGb3I7XG4gICAgc2V0dGluZ3MuZGVmYXVsdFF1ZXJ5T3B0aW9ucyA/Pz0gdGhpcy5fZGVmYXVsdFF1ZXJ5T3B0aW9ucztcbiAgICBzZXR0aW5ncy5kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucyA/Pz0gdGhpcy5fZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnM7XG5cbiAgICByZXR1cm4gbmV3IE1lbW9yeUNhY2hlKFxuICAgICAgc2V0dGluZ3MgYXMgTWVtb3J5Q2FjaGVTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZXMgdGhlIG9wZXJhdGlvbnMgZnJvbSBhIGZvcmtlZCBjYWNoZSBiYWNrIHRvIHRoaXMgY2FjaGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSByZXN1bHQgb2YgY2FsbGluZyBgdXBkYXRlYCB3aXRoIHRoZSBvcGVyYXRpb25zXG4gICAqL1xuICBtZXJnZTxSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdD4oXG4gICAgZm9ya2VkQ2FjaGU6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4sXG4gICAgb3B0aW9ucz86IERlZmF1bHRSZXF1ZXN0T3B0aW9uczxUTz4gJiBNZW1vcnlDYWNoZU1lcmdlT3B0aW9uc1xuICApOiBSZXF1ZXN0RGF0YTtcbiAgbWVyZ2U8UmVxdWVzdERhdGEgZXh0ZW5kcyBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQgPSBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQ+KFxuICAgIGZvcmtlZENhY2hlOiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+LFxuICAgIG9wdGlvbnM6IEZ1bGxSZXF1ZXN0T3B0aW9uczxUTz4gJiBNZW1vcnlDYWNoZU1lcmdlT3B0aW9uc1xuICApOiBGdWxsUmVzcG9uc2U8UmVxdWVzdERhdGEsIFRSRCwgUmVjb3JkT3BlcmF0aW9uPjtcbiAgbWVyZ2U8UmVxdWVzdERhdGEgZXh0ZW5kcyBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQgPSBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQ+KFxuICAgIGZvcmtlZENhY2hlOiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+LFxuICAgIG9wdGlvbnM/OiBUTyAmIE1lbW9yeUNhY2hlTWVyZ2VPcHRpb25zXG4gICk6IFJlcXVlc3REYXRhIHwgRnVsbFJlc3BvbnNlPFJlcXVlc3REYXRhLCBUUkQsIFJlY29yZE9wZXJhdGlvbj4ge1xuICAgIGxldCB7IGNvYWxlc2NlLCAuLi5yZW1haW5pbmdPcHRpb25zIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgYXNzZXJ0KFxuICAgICAgJ01lbW9yeUNhY2hlI21lcmdlIGNhbiBvbmx5IG1lcmdlIGEgZm9ya2VkIGNhY2hlIHRoYXQgaXMgY29uZmlndXJlZCB3aXRoIGB0cmFja1VwZGF0ZU9wZXJhdGlvbnM6IHRydWVgLicsXG4gICAgICBmb3JrZWRDYWNoZS5pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9uc1xuICAgICk7XG5cbiAgICBsZXQgb3BzID0gZm9ya2VkQ2FjaGUuZ2V0QWxsVXBkYXRlT3BlcmF0aW9ucygpO1xuXG4gICAgaWYgKGNvYWxlc2NlICE9PSBmYWxzZSkge1xuICAgICAgb3BzID0gY29hbGVzY2VSZWNvcmRPcGVyYXRpb25zKG9wcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmZ1bGxSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlPFJlcXVlc3REYXRhPihcbiAgICAgICAgb3BzLFxuICAgICAgICByZW1haW5pbmdPcHRpb25zIGFzIEZ1bGxSZXF1ZXN0T3B0aW9uczxUTz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZTxSZXF1ZXN0RGF0YT4oXG4gICAgICAgIG9wcyxcbiAgICAgICAgcmVtYWluaW5nT3B0aW9ucyBhcyBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8VE8+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWJhc2UgcmVzZXRzIHRoaXMgY2FjaGUncyBzdGF0ZSB0byB0aGF0IG9mIGl0cyBiYXNlIGNhY2hlLCB0aGVuIHJlLWFwcGxpZXNcbiAgICogYW55IHRyYWNrZWQgdXBkYXRlIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIFJlYmFzaW5nIHJlcXVpcmVzIGJvdGggYSBgYmFzZWAgY2FjaGUgYXMgd2VsbCBhcyB0cmFja2luZyBvZiB1cGRhdGVcbiAgICogb3BlcmF0aW9ucyAod2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gYSBgYmFzZWAgY2FjaGUgaXMgYXNzaWduZWQpLlxuICAgKi9cbiAgcmViYXNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLl9iYXNlO1xuXG4gICAgYXNzZXJ0KFxuICAgICAgJ0EgYGJhc2VgIGNhY2hlIG11c3QgYmUgZGVmaW5lZCBmb3IgYHJlYmFzZWAgdG8gd29yaycsXG4gICAgICBiYXNlICE9PSB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgYXNzZXJ0KFxuICAgICAgJ01lbW9yeUNhY2hlI3JlYmFzZSByZXF1aXJlcyB0aGF0IHRoZSBjYWNoZSBpcyBjb25maWd1cmVkIHdpdGggYHRyYWNrVXBkYXRlT3BlcmF0aW9uczogdHJ1ZWAuJyxcbiAgICAgIHRoaXMuX2lzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zXG4gICAgKTtcblxuICAgIC8vIGdldCB1cGRhdGUgb3BzIHByaW9yIHRvIHJlc2V0dGluZyBzdGF0ZVxuICAgIGxldCBvcHMgPSB0aGlzLmdldEFsbFVwZGF0ZU9wZXJhdGlvbnMoKTtcblxuICAgIC8vIHJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgY2FjaGUgdG8gbWF0Y2ggaXRzIGJhc2UgY2FjaGVcbiAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICAvLyByZWFwcGx5IHVwZGF0ZSBvcHNcbiAgICB0aGlzLnVwZGF0ZShvcHMpO1xuICB9XG5cbiAgZ2V0UmVjb3JkU3luYyhpZGVudGl0eTogUmVjb3JkSWRlbnRpdHkpOiBJbml0aWFsaXplZFJlY29yZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlY29yZHNbaWRlbnRpdHkudHlwZV0uZ2V0KGlkZW50aXR5LmlkKTtcbiAgfVxuXG4gIGdldFJlY29yZHNTeW5jKFxuICAgIHR5cGVPcklkZW50aXRpZXM/OiBzdHJpbmcgfCBSZWNvcmRJZGVudGl0eVtdXG4gICk6IEluaXRpYWxpemVkUmVjb3JkW10ge1xuICAgIGlmICh0eXBlT3JJZGVudGl0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gT2JqZWN0LmtleXModGhpcy5zY2hlbWEubW9kZWxzKTtcbiAgICAgIGNvbnN0IHJlY29yZHM6IEluaXRpYWxpemVkUmVjb3JkW10gPSBbXTtcbiAgICAgIHR5cGVzLmZvckVhY2goKHR5cGUpID0+XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KFxuICAgICAgICAgIHJlY29yZHMsXG4gICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLl9yZWNvcmRzW3R5cGVdLnZhbHVlcygpKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlY29yZHM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZU9ySWRlbnRpdGllcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHR5cGU6IHN0cmluZyA9IHR5cGVPcklkZW50aXRpZXM7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9yZWNvcmRzW3R5cGVdLnZhbHVlcygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVjb3JkczogSW5pdGlhbGl6ZWRSZWNvcmRbXSA9IFtdO1xuICAgICAgY29uc3QgaWRlbnRpdGllczogUmVjb3JkSWRlbnRpdHlbXSA9IHR5cGVPcklkZW50aXRpZXM7XG4gICAgICBmb3IgKGxldCBpZGVudGl0eSBvZiBpZGVudGl0aWVzKSB7XG4gICAgICAgIGxldCByZWNvcmQgPSB0aGlzLmdldFJlY29yZFN5bmMoaWRlbnRpdHkpO1xuICAgICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgICAgcmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZWNvcmRzO1xuICAgIH1cbiAgfVxuXG4gIHNldFJlY29yZFN5bmMocmVjb3JkOiBJbml0aWFsaXplZFJlY29yZCk6IHZvaWQge1xuICAgIHRoaXMuX3JlY29yZHNbcmVjb3JkLnR5cGVdLnNldChyZWNvcmQuaWQsIHJlY29yZCk7XG4gIH1cblxuICBzZXRSZWNvcmRzU3luYyhyZWNvcmRzOiBJbml0aWFsaXplZFJlY29yZFtdKTogdm9pZCB7XG4gICAgbGV0IHR5cGVkTWFwOiBhbnkgPSB7fTtcbiAgICBmb3IgKGxldCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgdHlwZWRNYXBbcmVjb3JkLnR5cGVdID0gdHlwZWRNYXBbcmVjb3JkLnR5cGVdIHx8IFtdO1xuICAgICAgdHlwZWRNYXBbcmVjb3JkLnR5cGVdLnB1c2goW3JlY29yZC5pZCwgcmVjb3JkXSk7XG4gICAgfVxuICAgIGZvciAobGV0IHR5cGUgaW4gdHlwZWRNYXApIHtcbiAgICAgIHRoaXMuX3JlY29yZHNbdHlwZV0uc2V0TWFueSh0eXBlZE1hcFt0eXBlXSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlUmVjb3JkU3luYyhcbiAgICByZWNvcmRJZGVudGl0eTogUmVjb3JkSWRlbnRpdHlcbiAgKTogSW5pdGlhbGl6ZWRSZWNvcmQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlY29yZE1hcCA9IHRoaXMuX3JlY29yZHNbcmVjb3JkSWRlbnRpdHkudHlwZV07XG4gICAgY29uc3QgcmVjb3JkID0gcmVjb3JkTWFwLmdldChyZWNvcmRJZGVudGl0eS5pZCk7XG4gICAgaWYgKHJlY29yZCkge1xuICAgICAgcmVjb3JkTWFwLnJlbW92ZShyZWNvcmRJZGVudGl0eS5pZCk7XG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVJlY29yZHNTeW5jKHJlY29yZElkZW50aXRpZXM6IFJlY29yZElkZW50aXR5W10pOiBJbml0aWFsaXplZFJlY29yZFtdIHtcbiAgICBjb25zdCByZWNvcmRzID0gW107XG4gICAgY29uc3QgdHlwZWRJZHM6IGFueSA9IHt9O1xuICAgIGZvciAobGV0IHJlY29yZElkZW50aXR5IG9mIHJlY29yZElkZW50aXRpZXMpIHtcbiAgICAgIGxldCByZWNvcmQgPSB0aGlzLmdldFJlY29yZFN5bmMocmVjb3JkSWRlbnRpdHkpO1xuICAgICAgaWYgKHJlY29yZCkge1xuICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgdHlwZWRJZHNbcmVjb3JkLnR5cGVdID0gdHlwZWRJZHNbcmVjb3JkLnR5cGVdIHx8IFtdO1xuICAgICAgICB0eXBlZElkc1tyZWNvcmQudHlwZV0ucHVzaChyZWNvcmRJZGVudGl0eS5pZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IHR5cGUgaW4gdHlwZWRJZHMpIHtcbiAgICAgIHRoaXMuX3JlY29yZHNbdHlwZV0ucmVtb3ZlTWFueSh0eXBlZElkc1t0eXBlXSk7XG4gICAgfVxuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG5cbiAgZ2V0SW52ZXJzZVJlbGF0aW9uc2hpcHNTeW5jKFxuICAgIHJlY29yZElkZW50aXR5T3JJZGVudGl0aWVzOiBSZWNvcmRJZGVudGl0eSB8IFJlY29yZElkZW50aXR5W11cbiAgKTogUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXSB7XG4gICAgY29uc3QgcmVzdWx0czogUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXSA9IFtdO1xuICAgIGNvbnN0IGlkZW50aXRpZXM6IFJlY29yZElkZW50aXR5W10gPSBBcnJheS5pc0FycmF5KFxuICAgICAgcmVjb3JkSWRlbnRpdHlPcklkZW50aXRpZXNcbiAgICApXG4gICAgICA/IHJlY29yZElkZW50aXR5T3JJZGVudGl0aWVzXG4gICAgICA6IFtyZWNvcmRJZGVudGl0eU9ySWRlbnRpdGllc107XG5cbiAgICBmb3IgKGxldCBpZGVudGl0eSBvZiBpZGVudGl0aWVzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9pbnZlcnNlUmVsYXRpb25zaGlwc1tpZGVudGl0eS50eXBlXS5nZXQoaWRlbnRpdHkuaWQpO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXN1bHRzLCByZXN1bHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgYWRkSW52ZXJzZVJlbGF0aW9uc2hpcHNTeW5jKFxuICAgIHJlbGF0aW9uc2hpcHM6IFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5W11cbiAgKTogdm9pZCB7XG4gICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKChyKSA9PiB7XG4gICAgICBsZXQgcmVscyA9IHRoaXMuX2ludmVyc2VSZWxhdGlvbnNoaXBzW3IucmVsYXRlZFJlY29yZC50eXBlXS5nZXQoXG4gICAgICAgIHIucmVsYXRlZFJlY29yZC5pZFxuICAgICAgKTtcbiAgICAgIHJlbHMgPSByZWxzID8gWy4uLnJlbHMsIGNsb25lKHIpXSA6IFtjbG9uZShyKV07XG4gICAgICB0aGlzLl9pbnZlcnNlUmVsYXRpb25zaGlwc1tyLnJlbGF0ZWRSZWNvcmQudHlwZV0uc2V0KFxuICAgICAgICByLnJlbGF0ZWRSZWNvcmQuaWQsXG4gICAgICAgIHJlbHNcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVJbnZlcnNlUmVsYXRpb25zaGlwc1N5bmMoXG4gICAgcmVsYXRpb25zaGlwczogUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXVxuICApOiB2b2lkIHtcbiAgICByZWxhdGlvbnNoaXBzLmZvckVhY2goKHIpID0+IHtcbiAgICAgIGxldCByZWxzID0gdGhpcy5faW52ZXJzZVJlbGF0aW9uc2hpcHNbci5yZWxhdGVkUmVjb3JkLnR5cGVdLmdldChcbiAgICAgICAgci5yZWxhdGVkUmVjb3JkLmlkXG4gICAgICApO1xuICAgICAgaWYgKHJlbHMpIHtcbiAgICAgICAgbGV0IG5ld1JlbHMgPSByZWxzLmZpbHRlcihcbiAgICAgICAgICAocmVsKSA9PlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgZXF1YWxSZWNvcmRJZGVudGl0aWVzKHJlbC5yZWNvcmQsIHIucmVjb3JkKSAmJlxuICAgICAgICAgICAgICByZWwucmVsYXRpb25zaGlwID09PSByLnJlbGF0aW9uc2hpcFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9pbnZlcnNlUmVsYXRpb25zaGlwc1tyLnJlbGF0ZWRSZWNvcmQudHlwZV0uc2V0KFxuICAgICAgICAgIHIucmVsYXRlZFJlY29yZC5pZCxcbiAgICAgICAgICBuZXdSZWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBjYWNoZSdzIHRvIGl0cyBpbml0aWFsIHN0YXRlLCB3aGljaCB3aWxsIGJlIGVpdGhlciBlbXB0eSBvciBhXG4gICAqIGNsb25lIG9mIGl0cyBgYmFzZWAgY2FjaGUsIGlmIGl0IGhhcyBvbmUuXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICBsZXQgYmFzZSA9IHRoaXMuX2Jhc2U7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRlcHJlY2F0ZShcbiAgICAgICAgJ0NhbGxpbmcgTWVtb3J5Q2FjaGUjcmVzZXQgd2l0aCBhIGBiYXNlYCBhcmd1bWVudCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkIGNvbmZpZ3VyZSB5b3VyIE1lbW9yeUNhY2hlIHdpdGggYSBgYmFzZWAgY2FjaGUuJ1xuICAgICAgKTtcbiAgICAgIGJhc2UgPz89IGFyZ3VtZW50c1swXTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWNvcmRzID0ge307XG5cbiAgICBpZiAodGhpcy5faXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnMpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZU9wZXJhdGlvbnMgPSBbXTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLl9zY2hlbWEubW9kZWxzKS5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgICBsZXQgYmFzZVJlY29yZHMgPSBiYXNlPy5fcmVjb3Jkc1t0eXBlXTtcblxuICAgICAgdGhpcy5fcmVjb3Jkc1t0eXBlXSA9IG5ldyBJbW11dGFibGVNYXA8c3RyaW5nLCBJbml0aWFsaXplZFJlY29yZD4oXG4gICAgICAgIGJhc2VSZWNvcmRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVzZXRJbnZlcnNlUmVsYXRpb25zaGlwcyhiYXNlKTtcblxuICAgIHRoaXMuX3Byb2Nlc3NvcnMuZm9yRWFjaCgocHJvY2Vzc29yKSA9PiBwcm9jZXNzb3IucmVzZXQoYmFzZSkpO1xuXG4gICAgdGhpcy5lbWl0KCdyZXNldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZ3JhZGUgdGhlIGNhY2hlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzY2hlbWEuXG4gICAqL1xuICB1cGdyYWRlKCk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuX3NjaGVtYS5tb2RlbHMpLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fcmVjb3Jkc1t0eXBlXSkge1xuICAgICAgICB0aGlzLl9yZWNvcmRzW3R5cGVdID0gbmV3IEltbXV0YWJsZU1hcDxzdHJpbmcsIEluaXRpYWxpemVkUmVjb3JkPigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVzZXRJbnZlcnNlUmVsYXRpb25zaGlwcygpO1xuXG4gICAgZm9yIChsZXQgcHJvY2Vzc29yIG9mIHRoaXMuX3Byb2Nlc3NvcnMpIHtcbiAgICAgIHByb2Nlc3Nvci51cGdyYWRlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9ucztcbiAgfVxuXG4gIGdldEFsbFVwZGF0ZU9wZXJhdGlvbnMoKTogUmVjb3JkT3BlcmF0aW9uW10ge1xuICAgIGFzc2VydChcbiAgICAgICdNZW1vcnlDYWNoZSNnZXRBbGxVcGRhdGVPcGVyYXRpb25zIHJlcXVpcmVzIHRoYXQgY2FjaGUgYmUgY29uZmlndXJlZCB3aXRoIGB0cmFja1VwZGF0ZU9wZXJhdGlvbnM6IHRydWVgLicsXG4gICAgICB0aGlzLl9pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9uc1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlT3BlcmF0aW9ucyBhcyBSZWNvcmRPcGVyYXRpb25bXTtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFByb3RlY3RlZCBtZXRob2RzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgcHJvdGVjdGVkIF91cGRhdGU8XG4gICAgUmVxdWVzdERhdGEgZXh0ZW5kcyBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQgPSBSZWNvcmRUcmFuc2Zvcm1SZXN1bHRcbiAgPihcbiAgICB0cmFuc2Zvcm06IFJlY29yZFRyYW5zZm9ybSxcbiAgICBvcHRpb25zPzogVE9cbiAgKTogRnVsbFJlc3BvbnNlPFJlcXVlc3REYXRhLCBUUkQsIFJlY29yZE9wZXJhdGlvbj4ge1xuICAgIGlmICh0aGlzLl9pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9ucykge1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoXG4gICAgICAgIHRoaXMuX3VwZGF0ZU9wZXJhdGlvbnMsXG4gICAgICAgIHRvQXJyYXkodHJhbnNmb3JtLm9wZXJhdGlvbnMpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuX3VwZGF0ZTxSZXF1ZXN0RGF0YT4odHJhbnNmb3JtLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBgX2dldFRyYW5zZm9ybUJ1ZmZlcmAgb24gYmFzZSBgU3luY1JlY29yZENhY2hlYCB0byBwcm92aWRlIGFcbiAgICogYHRyYW5zZm9ybUJ1ZmZlcmAgaWYgYSBjdXN0b20gb25lIGhhc24ndCBiZWVuIHByb3ZpZGVkIHZpYSB0aGUgY29uc3RydWN0b3JcbiAgICogc2V0dGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0VHJhbnNmb3JtQnVmZmVyKCk6IFJlY29yZFRyYW5zZm9ybUJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuX3RyYW5zZm9ybUJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSwga2V5TWFwIH0gPSB0aGlzO1xuICAgICAgdGhpcy5fdHJhbnNmb3JtQnVmZmVyID0gbmV3IFNpbXBsZVJlY29yZFRyYW5zZm9ybUJ1ZmZlcih7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAga2V5TWFwXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybUJ1ZmZlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVzZXRJbnZlcnNlUmVsYXRpb25zaGlwcyhcbiAgICBiYXNlPzogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBpbnZlcnNlUmVsYXRpb25zaGlwczogRGljdDxcbiAgICAgIEltbXV0YWJsZU1hcDxzdHJpbmcsIFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5W10+XG4gICAgPiA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHRoaXMuX3NjaGVtYS5tb2RlbHMpLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgIGxldCBiYXNlUmVsYXRpb25zaGlwcyA9IGJhc2UgJiYgYmFzZS5faW52ZXJzZVJlbGF0aW9uc2hpcHNbdHlwZV07XG4gICAgICBpbnZlcnNlUmVsYXRpb25zaGlwc1t0eXBlXSA9IG5ldyBJbW11dGFibGVNYXAoYmFzZVJlbGF0aW9uc2hpcHMpO1xuICAgIH0pO1xuICAgIHRoaXMuX2ludmVyc2VSZWxhdGlvbnNoaXBzID0gaW52ZXJzZVJlbGF0aW9uc2hpcHM7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbW9yeS1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzQ0FBb0M7QUFPcEMsZ0RBQWdEO0FBQ2hELHNEQVM2QjtBQUM3Qiw0Q0FVd0I7QUFDeEIsd0NBQW9EO0FBRXBELE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsWUFBSyxDQUFDO0FBb0NwQzs7Ozs7R0FLRztBQUNILE1BQWEsV0FPWCxTQUFRLDhCQUF5QztJQVNqRCxZQUFZLFFBQXVEO1FBQ2pFLE1BQU0sRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFakQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWxCLHNFQUFzRTtRQUN0RSw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLDJCQUEyQjtZQUM5QixxQkFBcUIsYUFBckIscUJBQXFCLGNBQXJCLHFCQUFxQixHQUFJLElBQUksS0FBSyxTQUFTLENBQUM7UUFFOUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUFJLENBQ0YsV0FBbUUsRUFBRTs7UUFFckUsb0JBQW9CO1FBQ3BCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM5QixRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFL0Isd0JBQXdCO1FBQ3hCLE1BQUEsUUFBUSxDQUFDLFlBQVksb0NBQXJCLFFBQVEsQ0FBQyxZQUFZLEdBQUssSUFBSSxDQUFDLGFBQWEsRUFBQztRQUM3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SSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSx3QkFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7SUFDcEQsQ0FBQztDQUNGO0FBdllELGtDQXVZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yYml0IH0gZnJvbSAnQG9yYml0L2NvcmUnO1xuaW1wb3J0IHtcbiAgRGVmYXVsdFJlcXVlc3RPcHRpb25zLFxuICBGdWxsUmVxdWVzdE9wdGlvbnMsXG4gIEZ1bGxSZXNwb25zZSxcbiAgUmVxdWVzdE9wdGlvbnNcbn0gZnJvbSAnQG9yYml0L2RhdGEnO1xuaW1wb3J0IHsgSW1tdXRhYmxlTWFwIH0gZnJvbSAnQG9yYml0L2ltbXV0YWJsZSc7XG5pbXBvcnQge1xuICBSZWNvcmRDYWNoZVF1ZXJ5T3B0aW9ucyxcbiAgUmVjb3JkQ2FjaGVUcmFuc2Zvcm1PcHRpb25zLFxuICBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMsXG4gIFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5LFxuICBSZWNvcmRUcmFuc2Zvcm1CdWZmZXIsXG4gIFNpbXBsZVJlY29yZFRyYW5zZm9ybUJ1ZmZlcixcbiAgU3luY1JlY29yZENhY2hlLFxuICBTeW5jUmVjb3JkQ2FjaGVTZXR0aW5nc1xufSBmcm9tICdAb3JiaXQvcmVjb3JkLWNhY2hlJztcbmltcG9ydCB7XG4gIGNvYWxlc2NlUmVjb3JkT3BlcmF0aW9ucyxcbiAgZXF1YWxSZWNvcmRJZGVudGl0aWVzLFxuICBJbml0aWFsaXplZFJlY29yZCxcbiAgUmVjb3JkSWRlbnRpdHksXG4gIFJlY29yZE9wZXJhdGlvbixcbiAgUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBSZWNvcmRUcmFuc2Zvcm0sXG4gIFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIsXG4gIFJlY29yZFRyYW5zZm9ybVJlc3VsdFxufSBmcm9tICdAb3JiaXQvcmVjb3Jkcyc7XG5pbXBvcnQgeyBjbG9uZSwgRGljdCwgdG9BcnJheSB9IGZyb20gJ0BvcmJpdC91dGlscyc7XG5cbmNvbnN0IHsgYXNzZXJ0LCBkZXByZWNhdGUgfSA9IE9yYml0O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUNhY2hlTWVyZ2VPcHRpb25zIHtcbiAgY29hbGVzY2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUNhY2hlU2V0dGluZ3M8XG4gIFFPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRDYWNoZVF1ZXJ5T3B0aW9ucyxcbiAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlVHJhbnNmb3JtT3B0aW9ucyxcbiAgUUIgPSBSZWNvcmRRdWVyeUJ1aWxkZXIsXG4gIFRCID0gUmVjb3JkVHJhbnNmb3JtQnVpbGRlcixcbiAgUVJEID0gdW5rbm93bixcbiAgVFJEIGV4dGVuZHMgUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzID0gUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzXG4+IGV4dGVuZHMgU3luY1JlY29yZENhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEI+IHtcbiAgYmFzZT86IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIHRyYWNrVXBkYXRlT3BlcmF0aW9ucz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5Q2FjaGVDbGFzczxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlUXVlcnlPcHRpb25zLFxuICBUTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkQ2FjaGVUcmFuc2Zvcm1PcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBRUkQgPSB1bmtub3duLFxuICBUUkQgZXh0ZW5kcyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgPSBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHNcbj4ge1xuICBuZXcgKHNldHRpbmdzOiBNZW1vcnlDYWNoZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4pOiBNZW1vcnlDYWNoZTxcbiAgICBRTyxcbiAgICBUTyxcbiAgICBRQixcbiAgICBUQixcbiAgICBRUkQsXG4gICAgVFJEXG4gID47XG59XG5cbi8qKlxuICogQSBjYWNoZSB1c2VkIHRvIGFjY2VzcyByZWNvcmRzIGluIG1lbW9yeS5cbiAqXG4gKiBCZWNhdXNlIGRhdGEgaXMgc3RvcmVkIGluIGltbXV0YWJsZSBtYXBzLCB0aGlzIHR5cGUgb2YgY2FjaGUgY2FuIGJlIGZvcmtlZFxuICogZWZmaWNpZW50bHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlDYWNoZTxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlUXVlcnlPcHRpb25zLFxuICBUTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkQ2FjaGVUcmFuc2Zvcm1PcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBRUkQgPSB1bmtub3duLFxuICBUUkQgZXh0ZW5kcyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgPSBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHNcbj4gZXh0ZW5kcyBTeW5jUmVjb3JkQ2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPiB7XG4gIHByb3RlY3RlZCBfYmFzZT86IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIHByb3RlY3RlZCBfcmVjb3JkcyE6IERpY3Q8SW1tdXRhYmxlTWFwPHN0cmluZywgSW5pdGlhbGl6ZWRSZWNvcmQ+PjtcbiAgcHJvdGVjdGVkIF9pbnZlcnNlUmVsYXRpb25zaGlwcyE6IERpY3Q8XG4gICAgSW1tdXRhYmxlTWFwPHN0cmluZywgUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXT5cbiAgPjtcbiAgcHJvdGVjdGVkIF91cGRhdGVPcGVyYXRpb25zPzogUmVjb3JkT3BlcmF0aW9uW107XG4gIHByb3RlY3RlZCBfaXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnM6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2V0dGluZ3M6IE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPikge1xuICAgIGNvbnN0IHsgYmFzZSwgdHJhY2tVcGRhdGVPcGVyYXRpb25zIH0gPSBzZXR0aW5ncztcblxuICAgIHN1cGVyKHNldHRpbmdzKTtcblxuICAgIHRoaXMuX2Jhc2UgPSBiYXNlO1xuXG4gICAgLy8gVHJhY2sgdXBkYXRlIG9wZXJhdGlvbnMgaWYgZXhwbGljaXRseSB0b2xkIHRvIGRvIHNvLCBvciBpZiBhIGBiYXNlYFxuICAgIC8vIGNhY2hlIGhhcyBiZWVuIHNwZWNpZmllZC5cbiAgICB0aGlzLl9pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9ucyA9XG4gICAgICB0cmFja1VwZGF0ZU9wZXJhdGlvbnMgPz8gYmFzZSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgZ2V0IGJhc2UoKTogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Jhc2U7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUsIG9yIFwiZm9ya1wiLCBmcm9tIGEgXCJiYXNlXCIgY2FjaGUuXG4gICAqXG4gICAqIFRoZSBmb3JrZWQgY2FjaGUgd2lsbCBoYXZlIHRoZSBzYW1lIGBzY2hlbWFgIGFuZCBga2V5TWFwYCBhcyBpdHMgYmFzZVxuICAgKiBzb3VyY2UuIFRoZSBmb3JrZWQgY2FjaGUgd2lsbCBzdGFydCB3aXRoIHRoZSBzYW1lIGltbXV0YWJsZSBkb2N1bWVudCBhcyB0aGVcbiAgICogYmFzZSBzb3VyY2UuIEl0cyBjb250ZW50cyBhbmQgbG9nIHdpbGwgZXZvbHZlIGluZGVwZW5kZW50bHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSBmb3JrZWQgY2FjaGVcbiAgICovXG4gIGZvcmsoXG4gICAgc2V0dGluZ3M6IFBhcnRpYWw8TWVtb3J5Q2FjaGVTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+PiA9IHt9XG4gICk6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4ge1xuICAgIC8vIHJlcXVpcmVkIHNldHRpbmdzXG4gICAgc2V0dGluZ3MuYmFzZSA9IHRoaXM7XG4gICAgc2V0dGluZ3Muc2NoZW1hID0gdGhpcy5zY2hlbWE7XG4gICAgc2V0dGluZ3Mua2V5TWFwID0gdGhpcy5fa2V5TWFwO1xuXG4gICAgLy8gY3VzdG9taXphYmxlIHNldHRpbmdzXG4gICAgc2V0dGluZ3MucXVlcnlCdWlsZGVyID8/PSB0aGlzLl9xdWVyeUJ1aWxkZXI7XG4gICAgc2V0dGluZ3MudHJhbnNmb3JtQnVpbGRlciA/Pz0gdGhpcy5fdHJhbnNmb3JtQnVpbGRlcjtcbiAgICBzZXR0aW5ncy5kZWZhdWx0UXVlcnlPcHRpb25zID8/PSB0aGlzLl9kZWZhdWx0UXVlcnlPcHRpb25zO1xuICAgIHNldHRpbmdzLmRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zID8/PSB0aGlzLl9kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucztcbiAgICBzZXR0aW5ncy52YWxpZGF0b3JGb3IgPz89IHRoaXMuX3ZhbGlkYXRvckZvcjtcbiAgICBpZiAoXG4gICAgICBzZXR0aW5ncy5hdXRvVmFsaWRhdGUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgc2V0dGluZ3MudmFsaWRhdG9yRm9yID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHNldHRpbmdzLmF1dG9WYWxpZGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTWVtb3J5Q2FjaGUoXG4gICAgICBzZXR0aW5ncyBhcyBNZW1vcnlDYWNoZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD5cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlcyB0aGUgb3BlcmF0aW9ucyBmcm9tIGEgZm9ya2VkIGNhY2hlIGJhY2sgdG8gdGhpcyBjYWNoZS5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGB1cGRhdGVgIHdpdGggdGhlIG9wZXJhdGlvbnNcbiAgICovXG4gIG1lcmdlPFJlcXVlc3REYXRhIGV4dGVuZHMgUmVjb3JkVHJhbnNmb3JtUmVzdWx0ID0gUmVjb3JkVHJhbnNmb3JtUmVzdWx0PihcbiAgICBmb3JrZWRDYWNoZTogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPixcbiAgICBvcHRpb25zPzogRGVmYXVsdFJlcXVlc3RPcHRpb25zPFRPPiAmIE1lbW9yeUNhY2hlTWVyZ2VPcHRpb25zXG4gICk6IFJlcXVlc3REYXRhO1xuICBtZXJnZTxSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdD4oXG4gICAgZm9ya2VkQ2FjaGU6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4sXG4gICAgb3B0aW9uczogRnVsbFJlcXVlc3RPcHRpb25zPFRPPiAmIE1lbW9yeUNhY2hlTWVyZ2VPcHRpb25zXG4gICk6IEZ1bGxSZXNwb25zZTxSZXF1ZXN0RGF0YSwgVFJELCBSZWNvcmRPcGVyYXRpb24+O1xuICBtZXJnZTxSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdD4oXG4gICAgZm9ya2VkQ2FjaGU6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4sXG4gICAgb3B0aW9ucz86IFRPICYgTWVtb3J5Q2FjaGVNZXJnZU9wdGlvbnNcbiAgKTogUmVxdWVzdERhdGEgfCBGdWxsUmVzcG9uc2U8UmVxdWVzdERhdGEsIFRSRCwgUmVjb3JkT3BlcmF0aW9uPiB7XG4gICAgbGV0IHsgY29hbGVzY2UsIC4uLnJlbWFpbmluZ09wdGlvbnMgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBhc3NlcnQoXG4gICAgICAnTWVtb3J5Q2FjaGUjbWVyZ2UgY2FuIG9ubHkgbWVyZ2UgYSBmb3JrZWQgY2FjaGUgdGhhdCBpcyBjb25maWd1cmVkIHdpdGggYHRyYWNrVXBkYXRlT3BlcmF0aW9uczogdHJ1ZWAuJyxcbiAgICAgIGZvcmtlZENhY2hlLmlzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zXG4gICAgKTtcblxuICAgIGxldCBvcHMgPSBmb3JrZWRDYWNoZS5nZXRBbGxVcGRhdGVPcGVyYXRpb25zKCk7XG5cbiAgICBpZiAoY29hbGVzY2UgIT09IGZhbHNlKSB7XG4gICAgICBvcHMgPSBjb2FsZXNjZVJlY29yZE9wZXJhdGlvbnMob3BzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uZnVsbFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGU8UmVxdWVzdERhdGE+KFxuICAgICAgICBvcHMsXG4gICAgICAgIHJlbWFpbmluZ09wdGlvbnMgYXMgRnVsbFJlcXVlc3RPcHRpb25zPFRPPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlPFJlcXVlc3REYXRhPihcbiAgICAgICAgb3BzLFxuICAgICAgICByZW1haW5pbmdPcHRpb25zIGFzIERlZmF1bHRSZXF1ZXN0T3B0aW9uczxUTz5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYmFzZSByZXNldHMgdGhpcyBjYWNoZSdzIHN0YXRlIHRvIHRoYXQgb2YgaXRzIGJhc2UgY2FjaGUsIHRoZW4gcmUtYXBwbGllc1xuICAgKiBhbnkgdHJhY2tlZCB1cGRhdGUgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogUmViYXNpbmcgcmVxdWlyZXMgYm90aCBhIGBiYXNlYCBjYWNoZSBhcyB3ZWxsIGFzIHRyYWNraW5nIG9mIHVwZGF0ZVxuICAgKiBvcGVyYXRpb25zICh3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBhIGBiYXNlYCBjYWNoZSBpcyBhc3NpZ25lZCkuXG4gICAqL1xuICByZWJhc2UoKTogdm9pZCB7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuX2Jhc2U7XG5cbiAgICBhc3NlcnQoXG4gICAgICAnQSBgYmFzZWAgY2FjaGUgbXVzdCBiZSBkZWZpbmVkIGZvciBgcmViYXNlYCB0byB3b3JrJyxcbiAgICAgIGJhc2UgIT09IHVuZGVmaW5lZFxuICAgICk7XG5cbiAgICBhc3NlcnQoXG4gICAgICAnTWVtb3J5Q2FjaGUjcmViYXNlIHJlcXVpcmVzIHRoYXQgdGhlIGNhY2hlIGlzIGNvbmZpZ3VyZWQgd2l0aCBgdHJhY2tVcGRhdGVPcGVyYXRpb25zOiB0cnVlYC4nLFxuICAgICAgdGhpcy5faXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnNcbiAgICApO1xuXG4gICAgLy8gZ2V0IHVwZGF0ZSBvcHMgcHJpb3IgdG8gcmVzZXR0aW5nIHN0YXRlXG4gICAgbGV0IG9wcyA9IHRoaXMuZ2V0QWxsVXBkYXRlT3BlcmF0aW9ucygpO1xuXG4gICAgLy8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBjYWNoZSB0byBtYXRjaCBpdHMgYmFzZSBjYWNoZVxuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIC8vIHJlYXBwbHkgdXBkYXRlIG9wc1xuICAgIHRoaXMudXBkYXRlKG9wcyk7XG4gIH1cblxuICBnZXRSZWNvcmRTeW5jKGlkZW50aXR5OiBSZWNvcmRJZGVudGl0eSk6IEluaXRpYWxpemVkUmVjb3JkIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcmVjb3Jkc1tpZGVudGl0eS50eXBlXS5nZXQoaWRlbnRpdHkuaWQpO1xuICB9XG5cbiAgZ2V0UmVjb3Jkc1N5bmMoXG4gICAgdHlwZU9ySWRlbnRpdGllcz86IHN0cmluZyB8IFJlY29yZElkZW50aXR5W11cbiAgKTogSW5pdGlhbGl6ZWRSZWNvcmRbXSB7XG4gICAgaWYgKHR5cGVPcklkZW50aXRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdHlwZXMgPSBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5tb2RlbHMpO1xuICAgICAgY29uc3QgcmVjb3JkczogSW5pdGlhbGl6ZWRSZWNvcmRbXSA9IFtdO1xuICAgICAgdHlwZXMuZm9yRWFjaCgodHlwZSkgPT5cbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoXG4gICAgICAgICAgcmVjb3JkcyxcbiAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuX3JlY29yZHNbdHlwZV0udmFsdWVzKCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVjb3JkcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlT3JJZGVudGl0aWVzID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdHlwZTogc3RyaW5nID0gdHlwZU9ySWRlbnRpdGllcztcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3JlY29yZHNbdHlwZV0udmFsdWVzKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZWNvcmRzOiBJbml0aWFsaXplZFJlY29yZFtdID0gW107XG4gICAgICBjb25zdCBpZGVudGl0aWVzOiBSZWNvcmRJZGVudGl0eVtdID0gdHlwZU9ySWRlbnRpdGllcztcbiAgICAgIGZvciAobGV0IGlkZW50aXR5IG9mIGlkZW50aXRpZXMpIHtcbiAgICAgICAgbGV0IHJlY29yZCA9IHRoaXMuZ2V0UmVjb3JkU3luYyhpZGVudGl0eSk7XG4gICAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlY29yZHM7XG4gICAgfVxuICB9XG5cbiAgc2V0UmVjb3JkU3luYyhyZWNvcmQ6IEluaXRpYWxpemVkUmVjb3JkKTogdm9pZCB7XG4gICAgdGhpcy5fcmVjb3Jkc1tyZWNvcmQudHlwZV0uc2V0KHJlY29yZC5pZCwgcmVjb3JkKTtcbiAgfVxuXG4gIHNldFJlY29yZHNTeW5jKHJlY29yZHM6IEluaXRpYWxpemVkUmVjb3JkW10pOiB2b2lkIHtcbiAgICBsZXQgdHlwZWRNYXA6IGFueSA9IHt9O1xuICAgIGZvciAobGV0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICB0eXBlZE1hcFtyZWNvcmQudHlwZV0gPSB0eXBlZE1hcFtyZWNvcmQudHlwZV0gfHwgW107XG4gICAgICB0eXBlZE1hcFtyZWNvcmQudHlwZV0ucHVzaChbcmVjb3JkLmlkLCByZWNvcmRdKTtcbiAgICB9XG4gICAgZm9yIChsZXQgdHlwZSBpbiB0eXBlZE1hcCkge1xuICAgICAgdGhpcy5fcmVjb3Jkc1t0eXBlXS5zZXRNYW55KHR5cGVkTWFwW3R5cGVdKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVSZWNvcmRTeW5jKFxuICAgIHJlY29yZElkZW50aXR5OiBSZWNvcmRJZGVudGl0eVxuICApOiBJbml0aWFsaXplZFJlY29yZCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkTWFwID0gdGhpcy5fcmVjb3Jkc1tyZWNvcmRJZGVudGl0eS50eXBlXTtcbiAgICBjb25zdCByZWNvcmQgPSByZWNvcmRNYXAuZ2V0KHJlY29yZElkZW50aXR5LmlkKTtcbiAgICBpZiAocmVjb3JkKSB7XG4gICAgICByZWNvcmRNYXAucmVtb3ZlKHJlY29yZElkZW50aXR5LmlkKTtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlUmVjb3Jkc1N5bmMocmVjb3JkSWRlbnRpdGllczogUmVjb3JkSWRlbnRpdHlbXSk6IEluaXRpYWxpemVkUmVjb3JkW10ge1xuICAgIGNvbnN0IHJlY29yZHMgPSBbXTtcbiAgICBjb25zdCB0eXBlZElkczogYW55ID0ge307XG4gICAgZm9yIChsZXQgcmVjb3JkSWRlbnRpdHkgb2YgcmVjb3JkSWRlbnRpdGllcykge1xuICAgICAgbGV0IHJlY29yZCA9IHRoaXMuZ2V0UmVjb3JkU3luYyhyZWNvcmRJZGVudGl0eSk7XG4gICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgIHJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgICB0eXBlZElkc1tyZWNvcmQudHlwZV0gPSB0eXBlZElkc1tyZWNvcmQudHlwZV0gfHwgW107XG4gICAgICAgIHR5cGVkSWRzW3JlY29yZC50eXBlXS5wdXNoKHJlY29yZElkZW50aXR5LmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgdHlwZSBpbiB0eXBlZElkcykge1xuICAgICAgdGhpcy5fcmVjb3Jkc1t0eXBlXS5yZW1vdmVNYW55KHR5cGVkSWRzW3R5cGVdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cblxuICBnZXRJbnZlcnNlUmVsYXRpb25zaGlwc1N5bmMoXG4gICAgcmVjb3JkSWRlbnRpdHlPcklkZW50aXRpZXM6IFJlY29yZElkZW50aXR5IHwgUmVjb3JkSWRlbnRpdHlbXVxuICApOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdIHtcbiAgICBjb25zdCByZXN1bHRzOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdID0gW107XG4gICAgY29uc3QgaWRlbnRpdGllczogUmVjb3JkSWRlbnRpdHlbXSA9IEFycmF5LmlzQXJyYXkoXG4gICAgICByZWNvcmRJZGVudGl0eU9ySWRlbnRpdGllc1xuICAgIClcbiAgICAgID8gcmVjb3JkSWRlbnRpdHlPcklkZW50aXRpZXNcbiAgICAgIDogW3JlY29yZElkZW50aXR5T3JJZGVudGl0aWVzXTtcblxuICAgIGZvciAobGV0IGlkZW50aXR5IG9mIGlkZW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2ludmVyc2VSZWxhdGlvbnNoaXBzW2lkZW50aXR5LnR5cGVdLmdldChpZGVudGl0eS5pZCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlc3VsdHMsIHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBhZGRJbnZlcnNlUmVsYXRpb25zaGlwc1N5bmMoXG4gICAgcmVsYXRpb25zaGlwczogUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXVxuICApOiB2b2lkIHtcbiAgICByZWxhdGlvbnNoaXBzLmZvckVhY2goKHIpID0+IHtcbiAgICAgIGxldCByZWxzID0gdGhpcy5faW52ZXJzZVJlbGF0aW9uc2hpcHNbci5yZWxhdGVkUmVjb3JkLnR5cGVdLmdldChcbiAgICAgICAgci5yZWxhdGVkUmVjb3JkLmlkXG4gICAgICApO1xuICAgICAgcmVscyA9IHJlbHMgPyBbLi4ucmVscywgY2xvbmUocildIDogW2Nsb25lKHIpXTtcbiAgICAgIHRoaXMuX2ludmVyc2VSZWxhdGlvbnNoaXBzW3IucmVsYXRlZFJlY29yZC50eXBlXS5zZXQoXG4gICAgICAgIHIucmVsYXRlZFJlY29yZC5pZCxcbiAgICAgICAgcmVsc1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUludmVyc2VSZWxhdGlvbnNoaXBzU3luYyhcbiAgICByZWxhdGlvbnNoaXBzOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdXG4gICk6IHZvaWQge1xuICAgIHJlbGF0aW9uc2hpcHMuZm9yRWFjaCgocikgPT4ge1xuICAgICAgbGV0IHJlbHMgPSB0aGlzLl9pbnZlcnNlUmVsYXRpb25zaGlwc1tyLnJlbGF0ZWRSZWNvcmQudHlwZV0uZ2V0KFxuICAgICAgICByLnJlbGF0ZWRSZWNvcmQuaWRcbiAgICAgICk7XG4gICAgICBpZiAocmVscykge1xuICAgICAgICBsZXQgbmV3UmVscyA9IHJlbHMuZmlsdGVyKFxuICAgICAgICAgIChyZWwpID0+XG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICBlcXVhbFJlY29yZElkZW50aXRpZXMocmVsLnJlY29yZCwgci5yZWNvcmQpICYmXG4gICAgICAgICAgICAgIHJlbC5yZWxhdGlvbnNoaXAgPT09IHIucmVsYXRpb25zaGlwXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ludmVyc2VSZWxhdGlvbnNoaXBzW3IucmVsYXRlZFJlY29yZC50eXBlXS5zZXQoXG4gICAgICAgICAgci5yZWxhdGVkUmVjb3JkLmlkLFxuICAgICAgICAgIG5ld1JlbHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGNhY2hlJ3MgdG8gaXRzIGluaXRpYWwgc3RhdGUsIHdoaWNoIHdpbGwgYmUgZWl0aGVyIGVtcHR5IG9yIGFcbiAgICogY2xvbmUgb2YgaXRzIGBiYXNlYCBjYWNoZSwgaWYgaXQgaGFzIG9uZS5cbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIGxldCBiYXNlID0gdGhpcy5fYmFzZTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgZGVwcmVjYXRlKFxuICAgICAgICAnQ2FsbGluZyBNZW1vcnlDYWNoZSNyZXNldCB3aXRoIGEgYGJhc2VgIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQgY29uZmlndXJlIHlvdXIgTWVtb3J5Q2FjaGUgd2l0aCBhIGBiYXNlYCBjYWNoZS4nXG4gICAgICApO1xuICAgICAgYmFzZSA/Pz0gYXJndW1lbnRzWzBdO1xuICAgIH1cblxuICAgIHRoaXMuX3JlY29yZHMgPSB7fTtcblxuICAgIGlmICh0aGlzLl9pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9ucykge1xuICAgICAgdGhpcy5fdXBkYXRlT3BlcmF0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKHRoaXMuX3NjaGVtYS5tb2RlbHMpLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgIGxldCBiYXNlUmVjb3JkcyA9IGJhc2U/Ll9yZWNvcmRzW3R5cGVdO1xuXG4gICAgICB0aGlzLl9yZWNvcmRzW3R5cGVdID0gbmV3IEltbXV0YWJsZU1hcDxzdHJpbmcsIEluaXRpYWxpemVkUmVjb3JkPihcbiAgICAgICAgYmFzZVJlY29yZHNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXNldEludmVyc2VSZWxhdGlvbnNoaXBzKGJhc2UpO1xuXG4gICAgdGhpcy5fcHJvY2Vzc29ycy5mb3JFYWNoKChwcm9jZXNzb3IpID0+IHByb2Nlc3Nvci5yZXNldChiYXNlKSk7XG5cbiAgICB0aGlzLmVtaXQoJ3Jlc2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogVXBncmFkZSB0aGUgY2FjaGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNjaGVtYS5cbiAgICovXG4gIHVwZ3JhZGUoKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXModGhpcy5fc2NoZW1hLm1vZGVscykuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9yZWNvcmRzW3R5cGVdKSB7XG4gICAgICAgIHRoaXMuX3JlY29yZHNbdHlwZV0gPSBuZXcgSW1tdXRhYmxlTWFwPHN0cmluZywgSW5pdGlhbGl6ZWRSZWNvcmQ+KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXNldEludmVyc2VSZWxhdGlvbnNoaXBzKCk7XG5cbiAgICBmb3IgKGxldCBwcm9jZXNzb3Igb2YgdGhpcy5fcHJvY2Vzc29ycykge1xuICAgICAgcHJvY2Vzc29yLnVwZ3JhZGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zO1xuICB9XG5cbiAgZ2V0QWxsVXBkYXRlT3BlcmF0aW9ucygpOiBSZWNvcmRPcGVyYXRpb25bXSB7XG4gICAgYXNzZXJ0KFxuICAgICAgJ01lbW9yeUNhY2hlI2dldEFsbFVwZGF0ZU9wZXJhdGlvbnMgcmVxdWlyZXMgdGhhdCBjYWNoZSBiZSBjb25maWd1cmVkIHdpdGggYHRyYWNrVXBkYXRlT3BlcmF0aW9uczogdHJ1ZWAuJyxcbiAgICAgIHRoaXMuX2lzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl91cGRhdGVPcGVyYXRpb25zIGFzIFJlY29yZE9wZXJhdGlvbltdO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUHJvdGVjdGVkIG1ldGhvZHNcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBwcm90ZWN0ZWQgX3VwZGF0ZTxcbiAgICBSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdFxuICA+KFxuICAgIHRyYW5zZm9ybTogUmVjb3JkVHJhbnNmb3JtLFxuICAgIG9wdGlvbnM/OiBUT1xuICApOiBGdWxsUmVzcG9uc2U8UmVxdWVzdERhdGEsIFRSRCwgUmVjb3JkT3BlcmF0aW9uPiB7XG4gICAgaWYgKHRoaXMuX2lzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zKSB7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShcbiAgICAgICAgdGhpcy5fdXBkYXRlT3BlcmF0aW9ucyxcbiAgICAgICAgdG9BcnJheSh0cmFuc2Zvcm0ub3BlcmF0aW9ucylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5fdXBkYXRlPFJlcXVlc3REYXRhPih0cmFuc2Zvcm0sIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGBfZ2V0VHJhbnNmb3JtQnVmZmVyYCBvbiBiYXNlIGBTeW5jUmVjb3JkQ2FjaGVgIHRvIHByb3ZpZGUgYVxuICAgKiBgdHJhbnNmb3JtQnVmZmVyYCBpZiBhIGN1c3RvbSBvbmUgaGFzbid0IGJlZW4gcHJvdmlkZWQgdmlhIHRoZSBjb25zdHJ1Y3RvclxuICAgKiBzZXR0aW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRUcmFuc2Zvcm1CdWZmZXIoKTogUmVjb3JkVHJhbnNmb3JtQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fdHJhbnNmb3JtQnVmZmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hLCBrZXlNYXAgfSA9IHRoaXM7XG4gICAgICB0aGlzLl90cmFuc2Zvcm1CdWZmZXIgPSBuZXcgU2ltcGxlUmVjb3JkVHJhbnNmb3JtQnVmZmVyKHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBrZXlNYXBcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtQnVmZmVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9yZXNldEludmVyc2VSZWxhdGlvbnNoaXBzKFxuICAgIGJhc2U/OiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGludmVyc2VSZWxhdGlvbnNoaXBzOiBEaWN0PFxuICAgICAgSW1tdXRhYmxlTWFwPHN0cmluZywgUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXT5cbiAgICA+ID0ge307XG4gICAgT2JqZWN0LmtleXModGhpcy5fc2NoZW1hLm1vZGVscykuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgbGV0IGJhc2VSZWxhdGlvbnNoaXBzID0gYmFzZSAmJiBiYXNlLl9pbnZlcnNlUmVsYXRpb25zaGlwc1t0eXBlXTtcbiAgICAgIGludmVyc2VSZWxhdGlvbnNoaXBzW3R5cGVdID0gbmV3IEltbXV0YWJsZU1hcChiYXNlUmVsYXRpb25zaGlwcyk7XG4gICAgfSk7XG4gICAgdGhpcy5faW52ZXJzZVJlbGF0aW9uc2hpcHMgPSBpbnZlcnNlUmVsYXRpb25zaGlwcztcbiAgfVxufVxuIl19

@@ -19,3 +19,3 @@ "use strict";

constructor(settings) {
var _a, _b, _c, _d, _e, _f, _g;
var _a, _b, _c, _d, _e, _f, _g, _h;
const { keyMap, schema, base } = settings;

@@ -36,3 +36,5 @@ settings.name = (_a = settings.name) !== null && _a !== void 0 ? _a : 'memory';

(_f = cacheSettings.defaultTransformOptions) !== null && _f !== void 0 ? _f : (cacheSettings.defaultTransformOptions = this.defaultTransformOptions);
if (cacheSettings.validatorFor === undefined &&
(_g = cacheSettings.autoValidate) !== null && _g !== void 0 ? _g : (cacheSettings.autoValidate = settings.autoValidate);
if (cacheSettings.autoValidate !== false &&
cacheSettings.validatorFor === undefined &&
cacheSettings.validators === undefined) {

@@ -46,3 +48,3 @@ cacheSettings.validatorFor = this._validatorFor;

}
const cacheClass = (_g = settings.cacheClass) !== null && _g !== void 0 ? _g : memory_cache_1.MemoryCache;
const cacheClass = (_h = settings.cacheClass) !== null && _h !== void 0 ? _h : memory_cache_1.MemoryCache;
this._cache = new cacheClass(cacheSettings);

@@ -144,5 +146,9 @@ }

(_b = settings.transformBuilder) !== null && _b !== void 0 ? _b : (settings.transformBuilder = this._transformBuilder);
(_c = settings.validatorFor) !== null && _c !== void 0 ? _c : (settings.validatorFor = this._validatorFor);
(_d = settings.defaultQueryOptions) !== null && _d !== void 0 ? _d : (settings.defaultQueryOptions = this._defaultQueryOptions);
(_e = settings.defaultTransformOptions) !== null && _e !== void 0 ? _e : (settings.defaultTransformOptions = this._defaultTransformOptions);
(_c = settings.defaultQueryOptions) !== null && _c !== void 0 ? _c : (settings.defaultQueryOptions = this._defaultQueryOptions);
(_d = settings.defaultTransformOptions) !== null && _d !== void 0 ? _d : (settings.defaultTransformOptions = this._defaultTransformOptions);
(_e = settings.validatorFor) !== null && _e !== void 0 ? _e : (settings.validatorFor = this._validatorFor);
if (settings.autoValidate === undefined &&
settings.validatorFor === undefined) {
settings.autoValidate = false;
}
return new MemorySource_1(settings);

@@ -333,2 +339,2 @@ }

exports.MemorySource = MemorySource;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZW1vcnktc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxzQ0FBK0M7QUFDL0Msc0NBVXFCO0FBRXJCLDRDQWlCd0I7QUFDeEIsd0NBQTZDO0FBQzdDLGlEQUl3QjtBQUV4QixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFlBQUssQ0FBQztBQTRDcEMsSUFBYSxZQUFZLG9CQUF6QixNQUFhLFlBUVgsU0FBUSxzQkFBNEI7SUFZcEMsWUFBWSxRQUF3RDs7UUFDbEUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBRTFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBQSxRQUFRLENBQUMsSUFBSSxtQ0FBSSxRQUFRLENBQUM7UUFFMUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakUsSUFBSSxhQUFhLEdBQ2YsTUFBQSxRQUFRLENBQUMsYUFBYSxtQ0FBSSxFQUFFLENBQUM7UUFDL0IsYUFBYSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDOUIsYUFBYSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDOUIsTUFBQSxhQUFhLENBQUMsWUFBWSxvQ0FBMUIsYUFBYSxDQUFDLFlBQVksR0FBSyxJQUFJLENBQUMsWUFBWSxFQUFDO1FBQ2pELE1BQUEsYUFBYSxDQUFDLGdCQUFnQixvQ0FBOUIsYUFBYSxDQUFDLGdCQUFnQixHQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBQztRQUN6RCxNQUFBLGFBQWEsQ0FBQyxtQkFBbUIsb0NBQWpDLGFBQWEsQ0FBQyxtQkFBbUIsR0FBSyxJQUFJLENBQUMsbUJBQW1CLEVBQUM7UUFDL0QsTUFBQSxhQUFhLENBQUMsdUJBQXVCLG9DQUFyQyxhQUFhLENBQUMsdUJBQXVCLEdBQUssSUFBSSxDQUFDLHVCQUF1QixFQUFDO1FBRXZFLElBQ0UsYUFBYSxDQUFDLFlBQVksS0FBSyxTQUFTO1lBQ3hDLGFBQWEsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUN0QztZQUNBLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUNqRDtRQUVELElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUN6QyxhQUFhLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDakM7UUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFBLFFBQVEsQ0FBQyxVQUFVLG1DQUFJLDBCQUFXLENBQUM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FDMUIsYUFBOEQsQ0FDL0QsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxvQ0FBb0M7SUFDcEMsNkVBQTZFO0lBRTdFLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBMEI7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLHFDQUFxQztJQUNyQyw2RUFBNkU7SUFFN0UsS0FBSyxDQUFDLE9BQU8sQ0FDWCxTQUEwQixFQUMxQixLQUFpRDtRQUVqRCxJQUFJLE9BQThCLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBSVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM3QyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxRQUFRLENBQUMsVUFBVSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkM7UUFFRCxJQUFJLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxJQUFJLEVBQUU7WUFDZixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN2QyxNQUFNLENBQ0osMEZBQTBGLEVBQzFGLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUMxQixDQUFDO2dCQUVGLFFBQVEsQ0FBQyxJQUFJLEdBQUksS0FBSyxDQUFDLElBQWdDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDaEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUNqQyxDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQzNDLEtBQUssQ0FBQyxJQUE2QixDQUNwQyxDQUFDO2FBQ0g7U0FDRjthQUFNLElBQUksT0FBTyxFQUFFO1lBQ2xCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxFQUFFO1lBQ2xCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNsQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UscUNBQXFDO0lBQ3JDLDZFQUE2RTtJQUU3RSxLQUFLLENBQUMsTUFBTSxDQUNWLEtBQWtCLEVBQ2xCLEtBQTZDO1FBRTdDLElBQUksUUFBK0QsQ0FBQztRQUVwRSxJQUFJLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxJQUFJLEVBQUU7WUFDZixRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDcEMsTUFBTSxDQUNKLHNGQUFzRixFQUN0RixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDMUIsQ0FBQztnQkFFRixRQUFRLENBQUMsSUFBSSxHQUFJLEtBQUssQ0FBQyxJQUFzQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3RFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsQ0FDdkMsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUNqRCxLQUFLLENBQUMsSUFBbUMsQ0FDMUMsQ0FBQzthQUNIO1NBQ0Y7YUFBTTtZQUNMLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xDLFlBQVksRUFBRSxJQUFJO2FBQ08sQ0FBQyxDQUFDO1NBQzlCO1FBRUQsSUFBSSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxFQUFFO1lBQ2xCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNsQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsaUJBQWlCO0lBQ2pCLDZFQUE2RTtJQUU3RTs7Ozs7Ozs7T0FRRztJQUNILElBQUksQ0FDRixXQUFvRSxFQUFFOztRQUV0RSxvQkFBb0I7UUFDcEIsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDckIsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzlCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUU5Qix3QkFBd0I7UUFDeEIsTUFBQSxRQUFRLENBQUMsWUFBWSxvQ0FBckIsUUFBUSxDQUFDLFlBQVksR0FBSyxJQUFJLENBQUMsYUFBYSxFQUFDO1FBQzdDLE1BQUEsUUFBUSxDQUFDLGdCQUFnQixvQ0FBekIsUUFBUSxDQUFDLGdCQUFnQixHQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBQztRQUNyRCxNQUFBLFFBQVEsQ0FBQyxZQUFZLG9DQUFyQixRQUFRLENBQUMsWUFBWSxHQUFLLElBQUksQ0FBQyxhQUFhLEVBQUM7UUFDN0MsTUFBQSxRQUFRLENBQUMsbUJBQW1CLG9DQUE1QixRQUFRLENBQUMsbUJBQW1CLEdBQUssSUFBSSxDQUFDLG9CQUFvQixFQUFDO1FBQzNELE1BQUEsUUFBUSxDQUFDLHVCQUF1QixvQ0FBaEMsUUFBUSxDQUFDLHVCQUF1QixHQUFLLElBQUksQ0FBQyx3QkFBd0IsRUFBQztRQUVuRSxPQUFPLElBQUksY0FBWSxDQUNyQixRQUEwRCxDQUMzRCxDQUFDO0lBQ0osQ0FBQztJQXdCRCxLQUFLLENBQUMsS0FBSyxDQUdULFlBQW9ELEVBQ3BELE9BQXVDO1FBSXZDLElBQUksRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxHQUN2RSxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxFQUFFLENBQUM7UUFFaEIsSUFBSSxjQUFrQixDQUFDO1FBQ3ZCLElBQUksZ0JBQWdCLEVBQUU7WUFDcEIsU0FBUyxDQUNQLGtKQUFrSixDQUNuSixDQUFDO1lBQ0YsY0FBYyxHQUFHLGdCQUFzQixDQUFDO1NBQ3pDO2FBQU07WUFDTCxjQUFjLEdBQUcsQ0FBQyxnQkFBZ0IsYUFBaEIsZ0JBQWdCLGNBQWhCLGdCQUFnQixHQUFJLEVBQUUsQ0FBTyxDQUFDO1NBQ2pEO1FBRUQsSUFBSSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztRQUVoQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUU7WUFDakQsR0FBRyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUNuRDthQUFNO1lBQ0wsSUFBSSxVQUE2QixDQUFDO1lBQ2xDLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3BCLFNBQVMsQ0FDUCw2SEFBNkgsQ0FDOUgsQ0FBQztnQkFDRixVQUFVLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDaEU7aUJBQU07Z0JBQ0wsVUFBVSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQzlDO1lBRUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN2QixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUEsZUFBTyxFQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDdEIsR0FBRyxHQUFHLElBQUEsa0NBQXdCLEVBQUMsR0FBRyxDQUFDLENBQUM7U0FDckM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxZQUFZLEVBQUU7WUFDL0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUNoQixHQUFHLEVBQ0gsY0FBd0MsQ0FDekMsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQ2hCLEdBQUcsRUFDSCxjQUEyQyxDQUM1QyxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNO1FBQ0osTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUV4QixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsTUFBTSxJQUFJLGdCQUFTLENBQ2pCLHNEQUFzRCxDQUN2RCxDQUFDO1NBQ0g7UUFFRCx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVuQixxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEUsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUFLO1FBQ1QsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbkIsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFeEUsMkVBQTJFO1FBQzNFLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsV0FBbUIsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsV0FBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsWUFBWTthQUNyQixLQUFLLENBQUMsV0FBVyxDQUFDO2FBQ2xCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxXQUFtQjtRQUNqQyxTQUFTLENBQ1AsZ0hBQWdILENBQ2pILENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxTQUFTLENBQ1Asa0dBQWtHLENBQ25HLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUFZLENBQUMsV0FBbUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxXQUFtQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxLQUFLLENBQUMsbUJBQW1CLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksbUJBQW1CLENBQUMsT0FBOEM7UUFDcEUsS0FBSyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSx1QkFBdUIsQ0FBQyxPQUE4QztRQUN4RSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUM7SUFDaEYsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxvQkFBb0I7SUFDcEIsNkVBQTZFO0lBRW5FLDhCQUE4QixDQUN0QyxNQUFtQztRQUVuQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzQzthQUFNLElBQUksTUFBTSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDMUM7YUFBTTtZQUNMLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRVMsd0JBQXdCLENBQ2hDLE1BQTZCO1FBRTdCLElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsT0FBTyxNQUFNLENBQUM7U0FDZjtJQUNILENBQUM7SUFFUyxlQUFlLENBQUMsU0FBMEI7O1FBQ2xELE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3JELFlBQVksRUFBRSxJQUFJO1NBQ08sQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUMzQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGlCQUFpQixtQ0FBSSxFQUFFLENBQUM7UUFDekUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRVMsMEJBQTBCLENBQUMsV0FBbUI7UUFDdEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUyxXQUFXO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVTLGFBQWEsQ0FDckIsV0FBbUIsRUFDbkIsZ0JBQXdCLEVBQ3hCLE9BQWlCO1FBRWpCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFUyxjQUFjLENBQ3RCLFdBQW1CLEVBQ25CLGdCQUF3QixFQUN4QixPQUFpQjtRQUVqQixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEQsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUN0QztZQUNELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFBO0FBbGRZLFlBQVk7SUFIeEIsZUFBUTtJQUNSLGdCQUFTO0lBQ1QsZ0JBQVM7R0FDRyxZQUFZLENBa2R4QjtBQWxkWSxvQ0FBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzc2VydGlvbiwgT3JiaXQgfSBmcm9tICdAb3JiaXQvY29yZSc7XG5pbXBvcnQge1xuICBEZWZhdWx0UmVxdWVzdE9wdGlvbnMsXG4gIEZ1bGxSZXF1ZXN0T3B0aW9ucyxcbiAgRnVsbFJlc3BvbnNlLFxuICBxdWVyeWFibGUsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBSZXNldHRhYmxlLFxuICBSZXNwb25zZUhpbnRzLFxuICBzeW5jYWJsZSxcbiAgdXBkYXRhYmxlXG59IGZyb20gJ0BvcmJpdC9kYXRhJztcbmltcG9ydCB7IFJlY29yZENhY2hlVXBkYXRlRGV0YWlscyB9IGZyb20gJ0BvcmJpdC9yZWNvcmQtY2FjaGUnO1xuaW1wb3J0IHtcbiAgY29hbGVzY2VSZWNvcmRPcGVyYXRpb25zLFxuICBSZWNvcmRPcGVyYXRpb24sXG4gIFJlY29yZE9wZXJhdGlvblJlc3VsdCxcbiAgUmVjb3JkUXVlcnksXG4gIFJlY29yZFF1ZXJ5YWJsZSxcbiAgUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBSZWNvcmRRdWVyeUV4cHJlc3Npb25SZXN1bHQsXG4gIFJlY29yZFF1ZXJ5UmVzdWx0LFxuICBSZWNvcmRTb3VyY2UsXG4gIFJlY29yZFNvdXJjZVF1ZXJ5T3B0aW9ucyxcbiAgUmVjb3JkU291cmNlU2V0dGluZ3MsXG4gIFJlY29yZFN5bmNhYmxlLFxuICBSZWNvcmRUcmFuc2Zvcm0sXG4gIFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIsXG4gIFJlY29yZFRyYW5zZm9ybVJlc3VsdCxcbiAgUmVjb3JkVXBkYXRhYmxlXG59IGZyb20gJ0BvcmJpdC9yZWNvcmRzJztcbmltcG9ydCB7IERpY3QsIHRvQXJyYXkgfSBmcm9tICdAb3JiaXQvdXRpbHMnO1xuaW1wb3J0IHtcbiAgTWVtb3J5Q2FjaGUsXG4gIE1lbW9yeUNhY2hlQ2xhc3MsXG4gIE1lbW9yeUNhY2hlU2V0dGluZ3Ncbn0gZnJvbSAnLi9tZW1vcnktY2FjaGUnO1xuXG5jb25zdCB7IGFzc2VydCwgZGVwcmVjYXRlIH0gPSBPcmJpdDtcblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlTb3VyY2VTZXR0aW5nczxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZFNvdXJjZVF1ZXJ5T3B0aW9ucyxcbiAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlcXVlc3RPcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBRUkQgPSB1bmtub3duLFxuICBUUkQgZXh0ZW5kcyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgPSBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHNcbj4gZXh0ZW5kcyBSZWNvcmRTb3VyY2VTZXR0aW5nczxRTywgVE8sIFFCLCBUQj4ge1xuICBiYXNlPzogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIGNhY2hlQ2xhc3M/OiBNZW1vcnlDYWNoZUNsYXNzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIGNhY2hlU2V0dGluZ3M/OiBQYXJ0aWFsPE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5U291cmNlTWVyZ2VPcHRpb25zIHtcbiAgY29hbGVzY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2MC4xN1xuICAgKi9cbiAgc2luY2VUcmFuc2Zvcm1JZD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgc2luY2UgdjAuMTcsIGluY2x1ZGUgdHJhbnNmb3JtIG9wdGlvbnMgYWxvbmdzaWRlIG1lcmdlIG9wdGlvbnMgaW5zdGVhZFxuICAgKi9cbiAgdHJhbnNmb3JtT3B0aW9ucz86IFJlcXVlc3RPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVNvdXJjZTxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZFNvdXJjZVF1ZXJ5T3B0aW9ucyxcbiAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlcXVlc3RPcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBRUkQgPSB1bmtub3duLFxuICBUUkQgZXh0ZW5kcyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgPSBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHNcbj4gZXh0ZW5kcyBSZWNvcmRTb3VyY2U8UU8sIFRPLCBRQiwgVEI+LFxuICAgIFJlY29yZFN5bmNhYmxlLFxuICAgIFJlY29yZFF1ZXJ5YWJsZTxRUkQsIFFCLCBRTz4sXG4gICAgUmVjb3JkVXBkYXRhYmxlPFRSRCwgVEIsIFRPPiB7fVxuXG5Ac3luY2FibGVcbkBxdWVyeWFibGVcbkB1cGRhdGFibGVcbmV4cG9ydCBjbGFzcyBNZW1vcnlTb3VyY2U8XG4gICAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZFNvdXJjZVF1ZXJ5T3B0aW9ucyxcbiAgICBUTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVxdWVzdE9wdGlvbnMsXG4gICAgUUIgPSBSZWNvcmRRdWVyeUJ1aWxkZXIsXG4gICAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICAgIFFSRCA9IHVua25vd24sXG4gICAgVFJEIGV4dGVuZHMgUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzID0gUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzXG4gID5cbiAgZXh0ZW5kcyBSZWNvcmRTb3VyY2U8UU8sIFRPLCBRQiwgVEI+XG4gIGltcGxlbWVudHNcbiAgICBSZWNvcmRTeW5jYWJsZSxcbiAgICBSZWNvcmRRdWVyeWFibGU8UVJELCBRQiwgUU8+LFxuICAgIFJlY29yZFVwZGF0YWJsZTxUUkQsIFRCLCBUTz4sXG4gICAgUmVzZXR0YWJsZSB7XG4gIHByb3RlY3RlZCBfY2FjaGU6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIHByb3RlY3RlZCBfYmFzZT86IE1lbW9yeVNvdXJjZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+O1xuICBwcm90ZWN0ZWQgX2ZvcmtQb2ludD86IHN0cmluZztcbiAgcHJvdGVjdGVkIF90cmFuc2Zvcm1zOiBEaWN0PFJlY29yZFRyYW5zZm9ybT47XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtSW52ZXJzZXM6IERpY3Q8UmVjb3JkT3BlcmF0aW9uW10+O1xuXG4gIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBNZW1vcnlTb3VyY2VTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+KSB7XG4gICAgY29uc3QgeyBrZXlNYXAsIHNjaGVtYSwgYmFzZSB9ID0gc2V0dGluZ3M7XG5cbiAgICBzZXR0aW5ncy5uYW1lID0gc2V0dGluZ3MubmFtZSA/PyAnbWVtb3J5JztcblxuICAgIHN1cGVyKHNldHRpbmdzKTtcblxuICAgIHRoaXMuX3RyYW5zZm9ybXMgPSB7fTtcbiAgICB0aGlzLl90cmFuc2Zvcm1JbnZlcnNlcyA9IHt9O1xuXG4gICAgdGhpcy50cmFuc2Zvcm1Mb2cub24oJ2NsZWFyJywgdGhpcy5fbG9nQ2xlYXJlZC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnRyYW5zZm9ybUxvZy5vbigndHJ1bmNhdGUnLCB0aGlzLl9sb2dUcnVuY2F0ZWQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy50cmFuc2Zvcm1Mb2cub24oJ3JvbGxiYWNrJywgdGhpcy5fbG9nUm9sbGVkYmFjay5iaW5kKHRoaXMpKTtcblxuICAgIGxldCBjYWNoZVNldHRpbmdzOiBQYXJ0aWFsPE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPj4gPVxuICAgICAgc2V0dGluZ3MuY2FjaGVTZXR0aW5ncyA/PyB7fTtcbiAgICBjYWNoZVNldHRpbmdzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICBjYWNoZVNldHRpbmdzLmtleU1hcCA9IGtleU1hcDtcbiAgICBjYWNoZVNldHRpbmdzLnF1ZXJ5QnVpbGRlciA/Pz0gdGhpcy5xdWVyeUJ1aWxkZXI7XG4gICAgY2FjaGVTZXR0aW5ncy50cmFuc2Zvcm1CdWlsZGVyID8/PSB0aGlzLnRyYW5zZm9ybUJ1aWxkZXI7XG4gICAgY2FjaGVTZXR0aW5ncy5kZWZhdWx0UXVlcnlPcHRpb25zID8/PSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnM7XG4gICAgY2FjaGVTZXR0aW5ncy5kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucyA/Pz0gdGhpcy5kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucztcblxuICAgIGlmIChcbiAgICAgIGNhY2hlU2V0dGluZ3MudmFsaWRhdG9yRm9yID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGNhY2hlU2V0dGluZ3MudmFsaWRhdG9ycyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjYWNoZVNldHRpbmdzLnZhbGlkYXRvckZvciA9IHRoaXMuX3ZhbGlkYXRvckZvcjtcbiAgICB9XG5cbiAgICBpZiAoYmFzZSkge1xuICAgICAgdGhpcy5fYmFzZSA9IGJhc2U7XG4gICAgICB0aGlzLl9mb3JrUG9pbnQgPSBiYXNlLnRyYW5zZm9ybUxvZy5oZWFkO1xuICAgICAgY2FjaGVTZXR0aW5ncy5iYXNlID0gYmFzZS5jYWNoZTtcbiAgICB9XG5cbiAgICBjb25zdCBjYWNoZUNsYXNzID0gc2V0dGluZ3MuY2FjaGVDbGFzcyA/PyBNZW1vcnlDYWNoZTtcbiAgICB0aGlzLl9jYWNoZSA9IG5ldyBjYWNoZUNsYXNzKFxuICAgICAgY2FjaGVTZXR0aW5ncyBhcyBNZW1vcnlDYWNoZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD5cbiAgICApO1xuICB9XG5cbiAgZ2V0IGNhY2hlKCk6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4ge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZTtcbiAgfVxuXG4gIGdldCBiYXNlKCk6IE1lbW9yeVNvdXJjZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYmFzZTtcbiAgfVxuXG4gIGdldCBmb3JrUG9pbnQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ya1BvaW50O1xuICB9XG5cbiAgYXN5bmMgdXBncmFkZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jYWNoZS51cGdyYWRlKCk7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBTeW5jYWJsZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBhc3luYyBfc3luYyh0cmFuc2Zvcm06IFJlY29yZFRyYW5zZm9ybSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy50cmFuc2Zvcm1Mb2cuY29udGFpbnModHJhbnNmb3JtLmlkKSkge1xuICAgICAgdGhpcy5fYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgIGF3YWl0IHRoaXMudHJhbnNmb3JtZWQoW3RyYW5zZm9ybV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFVwZGF0YWJsZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBhc3luYyBfdXBkYXRlKFxuICAgIHRyYW5zZm9ybTogUmVjb3JkVHJhbnNmb3JtLFxuICAgIGhpbnRzPzogUmVzcG9uc2VIaW50czxSZWNvcmRUcmFuc2Zvcm1SZXN1bHQsIFRSRD5cbiAgKTogUHJvbWlzZTxGdWxsUmVzcG9uc2U8UmVjb3JkVHJhbnNmb3JtUmVzdWx0LCBUUkQsIFJlY29yZE9wZXJhdGlvbj4+IHtcbiAgICBsZXQgcmVzdWx0czogUmVjb3JkVHJhbnNmb3JtUmVzdWx0O1xuICAgIGNvbnN0IHJlc3BvbnNlOiBGdWxsUmVzcG9uc2U8XG4gICAgICBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQsXG4gICAgICBUUkQsXG4gICAgICBSZWNvcmRPcGVyYXRpb25cbiAgICA+ID0ge307XG5cbiAgICBpZiAoIXRoaXMudHJhbnNmb3JtTG9nLmNvbnRhaW5zKHRyYW5zZm9ybS5pZCkpIHtcbiAgICAgIHJlc3VsdHMgPSB0aGlzLl9hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgcmVzcG9uc2UudHJhbnNmb3JtcyA9IFt0cmFuc2Zvcm1dO1xuICAgIH1cblxuICAgIGlmIChoaW50cz8uZGF0YSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHJhbnNmb3JtLm9wZXJhdGlvbnMpKSB7XG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICAnTWVtb3J5U291cmNlI3VwZGF0ZTogYGhpbnRzLmRhdGFgIG11c3QgYmUgYW4gYXJyYXkgaWYgYHRyYW5zZm9ybS5vcGVyYXRpb25zYCBpcyBhbiBhcnJheScsXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShoaW50cy5kYXRhKVxuICAgICAgICApO1xuXG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSAoaGludHMuZGF0YSBhcyBSZWNvcmRPcGVyYXRpb25SZXN1bHRbXSkubWFwKChoKSA9PlxuICAgICAgICAgIHRoaXMuX3JldHJpZXZlT3BlcmF0aW9uUmVzdWx0KGgpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZS5kYXRhID0gdGhpcy5fcmV0cmlldmVPcGVyYXRpb25SZXN1bHQoXG4gICAgICAgICAgaGludHMuZGF0YSBhcyBSZWNvcmRPcGVyYXRpb25SZXN1bHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlc3VsdHMpIHtcbiAgICAgIHJlc3BvbnNlLmRhdGEgPSByZXN1bHRzO1xuICAgIH1cblxuICAgIGlmIChoaW50cz8uZGV0YWlscykge1xuICAgICAgcmVzcG9uc2UuZGV0YWlscyA9IGhpbnRzLmRldGFpbHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUXVlcnlhYmxlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGFzeW5jIF9xdWVyeShcbiAgICBxdWVyeTogUmVjb3JkUXVlcnksXG4gICAgaGludHM/OiBSZXNwb25zZUhpbnRzPFJlY29yZFF1ZXJ5UmVzdWx0LCBRUkQ+XG4gICk6IFByb21pc2U8RnVsbFJlc3BvbnNlPFJlY29yZFF1ZXJ5UmVzdWx0LCBRUkQsIFJlY29yZE9wZXJhdGlvbj4+IHtcbiAgICBsZXQgcmVzcG9uc2U6IEZ1bGxSZXNwb25zZTxSZWNvcmRRdWVyeVJlc3VsdCwgUVJELCBSZWNvcmRPcGVyYXRpb24+O1xuXG4gICAgaWYgKGhpbnRzPy5kYXRhKSB7XG4gICAgICByZXNwb25zZSA9IHt9O1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnkuZXhwcmVzc2lvbnMpKSB7XG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICAnTWVtb3J5U291cmNlI3F1ZXJ5OiBgaGludHMuZGF0YWAgbXVzdCBiZSBhbiBhcnJheSBpZiBgcXVlcnkuZXhwcmVzc2lvbnNgIGlzIGFuIGFycmF5JyxcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGhpbnRzLmRhdGEpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IChoaW50cy5kYXRhIGFzIFJlY29yZFF1ZXJ5RXhwcmVzc2lvblJlc3VsdFtdKS5tYXAoKGgpID0+XG4gICAgICAgICAgdGhpcy5fcmV0cmlldmVRdWVyeUV4cHJlc3Npb25SZXN1bHQoaClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSB0aGlzLl9yZXRyaWV2ZVF1ZXJ5RXhwcmVzc2lvblJlc3VsdChcbiAgICAgICAgICBoaW50cy5kYXRhIGFzIFJlY29yZFF1ZXJ5RXhwcmVzc2lvblJlc3VsdFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZSA9IHRoaXMuX2NhY2hlLnF1ZXJ5KHF1ZXJ5LCB7XG4gICAgICAgIGZ1bGxSZXNwb25zZTogdHJ1ZVxuICAgICAgfSBhcyBGdWxsUmVxdWVzdE9wdGlvbnM8UU8+KTtcbiAgICB9XG5cbiAgICBpZiAoaGludHM/LmRldGFpbHMpIHtcbiAgICAgIHJlc3BvbnNlLmRldGFpbHMgPSBoaW50cy5kZXRhaWxzO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFB1YmxpYyBtZXRob2RzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lLCBvciBcImZvcmtcIiwgZnJvbSBhIFwiYmFzZVwiIHNvdXJjZS5cbiAgICpcbiAgICogVGhlIGZvcmtlZCBzb3VyY2Ugd2lsbCBoYXZlIHRoZSBzYW1lIGBzY2hlbWFgIGFuZCBga2V5TWFwYCBhcyBpdHMgYmFzZSBzb3VyY2UuXG4gICAqIFRoZSBmb3JrZWQgc291cmNlJ3MgY2FjaGUgd2lsbCBzdGFydCB3aXRoIHRoZSBzYW1lIGltbXV0YWJsZSBkb2N1bWVudCBhc1xuICAgKiB0aGUgYmFzZSBzb3VyY2UuIEl0cyBjb250ZW50cyBhbmQgbG9nIHdpbGwgZXZvbHZlIGluZGVwZW5kZW50bHkuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBmb3JrZWQgc291cmNlLlxuICAgKi9cbiAgZm9yayhcbiAgICBzZXR0aW5nczogUGFydGlhbDxNZW1vcnlTb3VyY2VTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+PiA9IHt9XG4gICk6IE1lbW9yeVNvdXJjZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+IHtcbiAgICAvLyByZXF1aXJlZCBzZXR0aW5nc1xuICAgIHNldHRpbmdzLmJhc2UgPSB0aGlzO1xuICAgIHNldHRpbmdzLnNjaGVtYSA9IHRoaXMuc2NoZW1hO1xuICAgIHNldHRpbmdzLmtleU1hcCA9IHRoaXMua2V5TWFwO1xuXG4gICAgLy8gY3VzdG9taXphYmxlIHNldHRpbmdzXG4gICAgc2V0dGluZ3MucXVlcnlCdWlsZGVyID8/PSB0aGlzLl9xdWVyeUJ1aWxkZXI7XG4gICAgc2V0dGluZ3MudHJhbnNmb3JtQnVpbGRlciA/Pz0gdGhpcy5fdHJhbnNmb3JtQnVpbGRlcjtcbiAgICBzZXR0aW5ncy52YWxpZGF0b3JGb3IgPz89IHRoaXMuX3ZhbGlkYXRvckZvcjtcbiAgICBzZXR0aW5ncy5kZWZhdWx0UXVlcnlPcHRpb25zID8/PSB0aGlzLl9kZWZhdWx0UXVlcnlPcHRpb25zO1xuICAgIHNldHRpbmdzLmRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zID8/PSB0aGlzLl9kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucztcblxuICAgIHJldHVybiBuZXcgTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4oXG4gICAgICBzZXR0aW5ncyBhcyBNZW1vcnlTb3VyY2VTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSB0cmFuc2Zvcm1zIGZyb20gYSBmb3JrZWQgc291cmNlIGJhY2sgaW50byBhIGJhc2Ugc291cmNlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgb2YgdGhlIG9wZXJhdGlvbnMgZnJvbSBhbGwgb2YgdGhlIHRyYW5zZm9ybXMgaW4gdGhlIGZvcmtlZFxuICAgKiBzb3VyY2UncyBoaXN0b3J5IHdpbGwgYmUgcmVkdWNlZCBpbnRvIGEgc2luZ2xlIHRyYW5zZm9ybS4gQSBzdWJzZXQgb2ZcbiAgICogb3BlcmF0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgYnkgc3BlY2lmeWluZyB0aGUgYHNpbmNlVHJhbnNmb3JtSWRgIG9wdGlvbi5cbiAgICpcbiAgICogVGhlIGBjb2FsZXNjZWAgb3B0aW9uIGNvbnRyb2xzIHdoZXRoZXIgb3BlcmF0aW9ucyBhcmUgY29hbGVzY2VkIGludG8gYVxuICAgKiBtaW5pbWFsIGVxdWl2YWxlbnQgc2V0IGJlZm9yZSBiZWluZyByZWR1Y2VkIGludG8gYSB0cmFuc2Zvcm0uXG4gICAqXG4gICAqIEBwYXJhbSBmb3JrZWRTb3VyY2UgLSBUaGUgc291cmNlIHRvIG1lcmdlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE1lcmdlIG9wdGlvbnNcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiBjYWxsaW5nIGB1cGRhdGUoKWAgd2l0aCB0aGUgZm9ya2VkIHRyYW5zZm9ybXMuXG4gICAqL1xuICBtZXJnZTxSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdD4oXG4gICAgZm9ya2VkU291cmNlOiBNZW1vcnlTb3VyY2U8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPixcbiAgICBvcHRpb25zPzogRGVmYXVsdFJlcXVlc3RPcHRpb25zPFRPPiAmIE1lbW9yeVNvdXJjZU1lcmdlT3B0aW9uc1xuICApOiBQcm9taXNlPFJlcXVlc3REYXRhPjtcbiAgbWVyZ2U8UmVxdWVzdERhdGEgZXh0ZW5kcyBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQgPSBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQ+KFxuICAgIGZvcmtlZFNvdXJjZTogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4sXG4gICAgb3B0aW9uczogRnVsbFJlcXVlc3RPcHRpb25zPFRPPiAmIE1lbW9yeVNvdXJjZU1lcmdlT3B0aW9uc1xuICApOiBQcm9taXNlPEZ1bGxSZXNwb25zZTxSZXF1ZXN0RGF0YSwgVFJELCBSZWNvcmRPcGVyYXRpb24+PjtcbiAgYXN5bmMgbWVyZ2U8XG4gICAgUmVxdWVzdERhdGEgZXh0ZW5kcyBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQgPSBSZWNvcmRUcmFuc2Zvcm1SZXN1bHRcbiAgPihcbiAgICBmb3JrZWRTb3VyY2U6IE1lbW9yeVNvdXJjZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+LFxuICAgIG9wdGlvbnM/OiBUTyAmIE1lbW9yeVNvdXJjZU1lcmdlT3B0aW9uc1xuICApOiBQcm9taXNlPFxuICAgIFJlY29yZFRyYW5zZm9ybVJlc3VsdCB8IEZ1bGxSZXNwb25zZTxSZXF1ZXN0RGF0YSwgVFJELCBSZWNvcmRPcGVyYXRpb24+XG4gID4ge1xuICAgIGxldCB7IGNvYWxlc2NlLCBzaW5jZVRyYW5zZm9ybUlkLCB0cmFuc2Zvcm1PcHRpb25zLCAuLi5yZW1haW5pbmdPcHRpb25zIH0gPVxuICAgICAgb3B0aW9ucyA/PyB7fTtcblxuICAgIGxldCByZXF1ZXN0T3B0aW9uczogVE87XG4gICAgaWYgKHRyYW5zZm9ybU9wdGlvbnMpIHtcbiAgICAgIGRlcHJlY2F0ZShcbiAgICAgICAgJ0luIE1lbW9yeVNvdXJjZSNtZXJnZSwgcGFzc2luZyBgdHJhbnNmb3JtT3B0aW9uc2AgbmVzdGVkIHdpdGhpbiBgb3B0aW9uc2AgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgaW5jbHVkZSB0aGVtIGRpcmVjdGx5IGFsb25nc2lkZSBvdGhlciBvcHRpb25zLidcbiAgICAgICk7XG4gICAgICByZXF1ZXN0T3B0aW9ucyA9IHRyYW5zZm9ybU9wdGlvbnMgYXMgVE87XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RPcHRpb25zID0gKHJlbWFpbmluZ09wdGlvbnMgPz8ge30pIGFzIFRPO1xuICAgIH1cblxuICAgIGxldCBvcHM6IFJlY29yZE9wZXJhdGlvbltdID0gW107XG5cbiAgICBpZiAoZm9ya2VkU291cmNlLmNhY2hlLmlzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zKSB7XG4gICAgICBvcHMgPSBmb3JrZWRTb3VyY2UuY2FjaGUuZ2V0QWxsVXBkYXRlT3BlcmF0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdHJhbnNmb3JtczogUmVjb3JkVHJhbnNmb3JtW107XG4gICAgICBpZiAoc2luY2VUcmFuc2Zvcm1JZCkge1xuICAgICAgICBkZXByZWNhdGUoXG4gICAgICAgICAgJ0luIE1lbW9yeVNvdXJjZSNtZXJnZSwgcGFzc2luZyBgc2luY2VUcmFuc2Zvcm1JZGAgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgY2FsbCBgdXBkYXRlYCB3aXRoIGEgY3VzdG9tIHRyYW5zZm9ybS9vcGVyYXRpb25zLidcbiAgICAgICAgKTtcbiAgICAgICAgdHJhbnNmb3JtcyA9IGZvcmtlZFNvdXJjZS5nZXRUcmFuc2Zvcm1zU2luY2Uoc2luY2VUcmFuc2Zvcm1JZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm1zID0gZm9ya2VkU291cmNlLmdldEFsbFRyYW5zZm9ybXMoKTtcbiAgICAgIH1cblxuICAgICAgdHJhbnNmb3Jtcy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG9wcywgdG9BcnJheSh0Lm9wZXJhdGlvbnMpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb2FsZXNjZSAhPT0gZmFsc2UpIHtcbiAgICAgIG9wcyA9IGNvYWxlc2NlUmVjb3JkT3BlcmF0aW9ucyhvcHMpO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5mdWxsUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZTxSZXF1ZXN0RGF0YT4oXG4gICAgICAgIG9wcyxcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMgYXMgRnVsbFJlcXVlc3RPcHRpb25zPFRPPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlPFJlcXVlc3REYXRhPihcbiAgICAgICAgb3BzLFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyBhcyBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8VE8+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWJhc2Ugd29ya3Mgc2ltaWxhcmx5IHRvIGEgZ2l0IHJlYmFzZTpcbiAgICpcbiAgICogQWZ0ZXIgYSBzb3VyY2UgaXMgZm9ya2VkLCB0aGVyZSBpcyBhIHBhcmVudC0gYW5kIGEgY2hpbGQtc291cmNlLiBCb3RoIG1heVxuICAgKiBiZSB1cGRhdGVkIHdpdGggdHJhbnNmb3Jtcy4gV2hlbiBgY2hpbGRTb3VyY2UucmViYXNlKClgIGlzIGNhbGxlZCwgdGhlXG4gICAqIGNoaWxkIHNvdXJjZSdzIHN0YXRlIHdpbGwgYmUgcmVzZXQgdG8gbWF0Y2ggdGhlIGN1cnJlbnQgc3RhdGUgb2YgaXRzXG4gICAqIHBhcmVudCwgYW5kIHRoZW4gYW55IGxvY2FsbHkgbWFkZSB0cmFuc2Zvcm1zIHdpbGwgYmUgcmVwbGF5ZWQgb24gdGhlIGNoaWxkXG4gICAqIHNvdXJjZS5cbiAgICovXG4gIHJlYmFzZSgpOiB2b2lkIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5fYmFzZTtcblxuICAgIGlmICghYmFzZSkge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbihcbiAgICAgICAgJ0EgYGJhc2VgIHNvdXJjZSBtdXN0IGJlIGRlZmluZWQgZm9yIGByZWJhc2VgIHRvIHdvcmsnXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgY2FjaGUgdG8gbWF0Y2ggdGhlIGJhc2UgY2FjaGVcbiAgICB0aGlzLmNhY2hlLnJlc2V0KCk7XG5cbiAgICAvLyByZXBsYXkgYWxsIGxvY2FsbHkgbWFkZSB0cmFuc2Zvcm1zXG4gICAgdGhpcy5nZXRBbGxUcmFuc2Zvcm1zKCkuZm9yRWFjaCgodCkgPT4gdGhpcy5fYXBwbHlUcmFuc2Zvcm0odCkpO1xuXG4gICAgLy8gcmVzZXQgdGhlIGZvcmsgcG9pbnRcbiAgICB0aGlzLl9mb3JrUG9pbnQgPSBiYXNlLnRyYW5zZm9ybUxvZy5oZWFkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBzb3VyY2UncyBjYWNoZSBhbmQgdHJhbnNmb3JtIGxvZyB0byBpdHMgaW5pdGlhbCBzdGF0ZSwgd2hpY2ggd2lsbFxuICAgKiBiZSBlaXRoZXIgZW1wdHkgb3IgYSBtYXRjaGluZyBpdHMgYGJhc2VgLCBpZiBpdCBoYXMgb25lLlxuICAgKi9cbiAgYXN5bmMgcmVzZXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBjYWNoZSAod2hpY2ggd2lsbCBtYXRjaCBhIGJhc2UgY2FjaGUsIGlmIHByZXNlbnQpXG4gICAgdGhpcy5jYWNoZS5yZXNldCgpO1xuXG4gICAgLy8gcmVzZXQgdGhlIGZvcmsgcG9pbnRcbiAgICB0aGlzLl9mb3JrUG9pbnQgPSB0aGlzLl9iYXNlID8gdGhpcy5fYmFzZS50cmFuc2Zvcm1Mb2cuaGVhZCA6IHVuZGVmaW5lZDtcblxuICAgIC8vIGNsZWFyIHRoZSB0cmFuc2Zvcm0gbG9nLCB3aGljaCBpbiB0dXJuIHdpbGwgY2xlYXIgYW55IHRyYWNrZWQgdHJhbnNmb3Jtc1xuICAgIGF3YWl0IHRoaXMudHJhbnNmb3JtTG9nLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbHMgYmFjayB0aGUgc291cmNlIHRvIGEgcGFydGljdWxhciBgdHJhbnNmb3JtSWRgLlxuICAgKlxuICAgKiBgcmVsYXRpdmVQb3NpdGlvbmAgY2FuIGJlIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW50ZWdlciB1c2VkIHRvIHNwZWNpZnkgYVxuICAgKiBwb3NpdGlvbiByZWxhdGl2ZSB0byBgdHJhbnNmb3JtSWRgLlxuICAgKi9cbiAgcm9sbGJhY2sodHJhbnNmb3JtSWQ6IHN0cmluZywgcmVsYXRpdmVQb3NpdGlvbiA9IDApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Mb2cucm9sbGJhY2sodHJhbnNmb3JtSWQsIHJlbGF0aXZlUG9zaXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGxvZ2dlZCB0cmFuc2Zvcm1zIHNpbmNlIGEgcGFydGljdWxhciBgdHJhbnNmb3JtSWRgLlxuICAgKi9cbiAgZ2V0VHJhbnNmb3Jtc1NpbmNlKHRyYW5zZm9ybUlkOiBzdHJpbmcpOiBSZWNvcmRUcmFuc2Zvcm1bXSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtTG9nXG4gICAgICAuYWZ0ZXIodHJhbnNmb3JtSWQpXG4gICAgICAubWFwKChpZCkgPT4gdGhpcy5fdHJhbnNmb3Jtc1tpZF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHNpbmNlIHYwLjE3LCBjYWxsIGBnZXRUcmFuc2Zvcm1zU2luY2VgIGluc3RlYWRcbiAgICovXG4gIHRyYW5zZm9ybXNTaW5jZSh0cmFuc2Zvcm1JZDogc3RyaW5nKTogUmVjb3JkVHJhbnNmb3JtW10ge1xuICAgIGRlcHJlY2F0ZShcbiAgICAgICdNZW1vcnlTb3VyY2UjdHJhbnNmb3Jtc1NpbmNlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFBsZWFzZSBjYWxsIGBzb3VyY2UuZ2V0VHJhbnNmb3Jtc1NpbmNlKHRyYW5mb3JtSWQpYCBpbnN0ZWFkLidcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmdldFRyYW5zZm9ybXNTaW5jZSh0cmFuc2Zvcm1JZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgbG9nZ2VkIHRyYW5zZm9ybXMuXG4gICAqL1xuICBnZXRBbGxUcmFuc2Zvcm1zKCk6IFJlY29yZFRyYW5zZm9ybVtdIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Mb2cuZW50cmllcy5tYXAoKGlkKSA9PiB0aGlzLl90cmFuc2Zvcm1zW2lkXSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgc2luY2UgdjAuMTcsIGNhbGwgYGdldEFsbFRyYW5zZm9ybXNgIGluc3RlYWRcbiAgICovXG4gIGFsbFRyYW5zZm9ybXMoKTogUmVjb3JkVHJhbnNmb3JtW10ge1xuICAgIGRlcHJlY2F0ZShcbiAgICAgICdNZW1vcnlTb3VyY2UjYWxsVHJhbnNmb3JtcyBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgY2FsbCBgc291cmNlLmdldEFsbFRyYW5zZm9ybXMoKWAgaW5zdGVhZC4nXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxUcmFuc2Zvcm1zKCk7XG4gIH1cblxuICBnZXRUcmFuc2Zvcm0odHJhbnNmb3JtSWQ6IHN0cmluZyk6IFJlY29yZFRyYW5zZm9ybSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybXNbdHJhbnNmb3JtSWRdO1xuICB9XG5cbiAgZ2V0SW52ZXJzZU9wZXJhdGlvbnModHJhbnNmb3JtSWQ6IHN0cmluZyk6IFJlY29yZE9wZXJhdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtSW52ZXJzZXNbdHJhbnNmb3JtSWRdO1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRRdWVyeU9wdGlvbnMoKTogRGVmYXVsdFJlcXVlc3RPcHRpb25zPFFPPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHN1cGVyLmRlZmF1bHRRdWVyeU9wdGlvbnM7XG4gIH1cblxuICBzZXQgZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zOiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8UU8+IHwgdW5kZWZpbmVkKSB7XG4gICAgc3VwZXIuZGVmYXVsdFF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2NhY2hlLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zKCk6IERlZmF1bHRSZXF1ZXN0T3B0aW9uczxUTz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBzdXBlci5kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucztcbiAgfVxuXG4gIHNldCBkZWZhdWx0VHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zOiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8VE8+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMgPSB0aGlzLl9jYWNoZS5kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBQcm90ZWN0ZWQgbWV0aG9kc1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIHByb3RlY3RlZCBfcmV0cmlldmVRdWVyeUV4cHJlc3Npb25SZXN1bHQoXG4gICAgcmVzdWx0OiBSZWNvcmRRdWVyeUV4cHJlc3Npb25SZXN1bHRcbiAgKTogUmVjb3JkUXVlcnlFeHByZXNzaW9uUmVzdWx0IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZ2V0UmVjb3Jkc1N5bmMocmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmdldFJlY29yZFN5bmMocmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3JldHJpZXZlT3BlcmF0aW9uUmVzdWx0KFxuICAgIHJlc3VsdDogUmVjb3JkT3BlcmF0aW9uUmVzdWx0XG4gICk6IFJlY29yZE9wZXJhdGlvblJlc3VsdCB7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmdldFJlY29yZFN5bmMocmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2FwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybTogUmVjb3JkVHJhbnNmb3JtKTogUmVjb3JkVHJhbnNmb3JtUmVzdWx0IHtcbiAgICBjb25zdCB7IGRhdGEsIGRldGFpbHMgfSA9IHRoaXMuY2FjaGUudXBkYXRlKHRyYW5zZm9ybSwge1xuICAgICAgZnVsbFJlc3BvbnNlOiB0cnVlXG4gICAgfSBhcyBGdWxsUmVxdWVzdE9wdGlvbnM8VE8+KTtcbiAgICB0aGlzLl90cmFuc2Zvcm1zW3RyYW5zZm9ybS5pZF0gPSB0cmFuc2Zvcm07XG4gICAgdGhpcy5fdHJhbnNmb3JtSW52ZXJzZXNbdHJhbnNmb3JtLmlkXSA9IGRldGFpbHM/LmludmVyc2VPcGVyYXRpb25zID8/IFtdO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jbGVhclRyYW5zZm9ybUZyb21IaXN0b3J5KHRyYW5zZm9ybUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBkZWxldGUgdGhpcy5fdHJhbnNmb3Jtc1t0cmFuc2Zvcm1JZF07XG4gICAgZGVsZXRlIHRoaXMuX3RyYW5zZm9ybUludmVyc2VzW3RyYW5zZm9ybUlkXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbG9nQ2xlYXJlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm1zID0ge307XG4gICAgdGhpcy5fdHJhbnNmb3JtSW52ZXJzZXMgPSB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbG9nVHJ1bmNhdGVkKFxuICAgIHRyYW5zZm9ybUlkOiBzdHJpbmcsXG4gICAgcmVsYXRpdmVQb3NpdGlvbjogbnVtYmVyLFxuICAgIHJlbW92ZWQ6IHN0cmluZ1tdXG4gICk6IHZvaWQge1xuICAgIHJlbW92ZWQuZm9yRWFjaCgoaWQpID0+IHRoaXMuX2NsZWFyVHJhbnNmb3JtRnJvbUhpc3RvcnkoaWQpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbG9nUm9sbGVkYmFjayhcbiAgICB0cmFuc2Zvcm1JZDogc3RyaW5nLFxuICAgIHJlbGF0aXZlUG9zaXRpb246IG51bWJlcixcbiAgICByZW1vdmVkOiBzdHJpbmdbXVxuICApOiB2b2lkIHtcbiAgICByZW1vdmVkLnJldmVyc2UoKS5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgY29uc3QgaW52ZXJzZU9wZXJhdGlvbnMgPSB0aGlzLl90cmFuc2Zvcm1JbnZlcnNlc1tpZF07XG4gICAgICBpZiAoaW52ZXJzZU9wZXJhdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jYWNoZS51cGRhdGUoaW52ZXJzZU9wZXJhdGlvbnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2xlYXJUcmFuc2Zvcm1Gcm9tSGlzdG9yeShpZCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZW1vcnktc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxzQ0FBK0M7QUFDL0Msc0NBVXFCO0FBRXJCLDRDQWlCd0I7QUFDeEIsd0NBQTZDO0FBQzdDLGlEQUl3QjtBQUV4QixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFlBQUssQ0FBQztBQTRDcEMsSUFBYSxZQUFZLG9CQUF6QixNQUFhLFlBUVgsU0FBUSxzQkFBNEI7SUFZcEMsWUFBWSxRQUF3RDs7UUFDbEUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBRTFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBQSxRQUFRLENBQUMsSUFBSSxtQ0FBSSxRQUFRLENBQUM7UUFFMUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakUsSUFBSSxhQUFhLEdBQ2YsTUFBQSxRQUFRLENBQUMsYUFBYSxtQ0FBSSxFQUFFLENBQUM7UUFDL0IsYUFBYSxDQUFDLE1B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O1lBQy9CLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELElBQUksaUJBQWlCLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDdEM7WUFDRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQTtBQTFkWSxZQUFZO0lBSHhCLGVBQVE7SUFDUixnQkFBUztJQUNULGdCQUFTO0dBQ0csWUFBWSxDQTBkeEI7QUExZFksb0NBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3NlcnRpb24sIE9yYml0IH0gZnJvbSAnQG9yYml0L2NvcmUnO1xuaW1wb3J0IHtcbiAgRGVmYXVsdFJlcXVlc3RPcHRpb25zLFxuICBGdWxsUmVxdWVzdE9wdGlvbnMsXG4gIEZ1bGxSZXNwb25zZSxcbiAgcXVlcnlhYmxlLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgUmVzZXR0YWJsZSxcbiAgUmVzcG9uc2VIaW50cyxcbiAgc3luY2FibGUsXG4gIHVwZGF0YWJsZVxufSBmcm9tICdAb3JiaXQvZGF0YSc7XG5pbXBvcnQgeyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgfSBmcm9tICdAb3JiaXQvcmVjb3JkLWNhY2hlJztcbmltcG9ydCB7XG4gIGNvYWxlc2NlUmVjb3JkT3BlcmF0aW9ucyxcbiAgUmVjb3JkT3BlcmF0aW9uLFxuICBSZWNvcmRPcGVyYXRpb25SZXN1bHQsXG4gIFJlY29yZFF1ZXJ5LFxuICBSZWNvcmRRdWVyeWFibGUsXG4gIFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgUmVjb3JkUXVlcnlFeHByZXNzaW9uUmVzdWx0LFxuICBSZWNvcmRRdWVyeVJlc3VsdCxcbiAgUmVjb3JkU291cmNlLFxuICBSZWNvcmRTb3VyY2VRdWVyeU9wdGlvbnMsXG4gIFJlY29yZFNvdXJjZVNldHRpbmdzLFxuICBSZWNvcmRTeW5jYWJsZSxcbiAgUmVjb3JkVHJhbnNmb3JtLFxuICBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQsXG4gIFJlY29yZFVwZGF0YWJsZVxufSBmcm9tICdAb3JiaXQvcmVjb3Jkcyc7XG5pbXBvcnQgeyBEaWN0LCB0b0FycmF5IH0gZnJvbSAnQG9yYml0L3V0aWxzJztcbmltcG9ydCB7XG4gIE1lbW9yeUNhY2hlLFxuICBNZW1vcnlDYWNoZUNsYXNzLFxuICBNZW1vcnlDYWNoZVNldHRpbmdzXG59IGZyb20gJy4vbWVtb3J5LWNhY2hlJztcblxuY29uc3QgeyBhc3NlcnQsIGRlcHJlY2F0ZSB9ID0gT3JiaXQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5U291cmNlU2V0dGluZ3M8XG4gIFFPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRTb3VyY2VRdWVyeU9wdGlvbnMsXG4gIFRPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucyxcbiAgUUIgPSBSZWNvcmRRdWVyeUJ1aWxkZXIsXG4gIFRCID0gUmVjb3JkVHJhbnNmb3JtQnVpbGRlcixcbiAgUVJEID0gdW5rbm93bixcbiAgVFJEIGV4dGVuZHMgUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzID0gUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzXG4+IGV4dGVuZHMgUmVjb3JkU291cmNlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEI+IHtcbiAgYmFzZT86IE1lbW9yeVNvdXJjZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+O1xuICBjYWNoZUNsYXNzPzogTWVtb3J5Q2FjaGVDbGFzczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+O1xuICBjYWNoZVNldHRpbmdzPzogUGFydGlhbDxNZW1vcnlDYWNoZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVNvdXJjZU1lcmdlT3B0aW9ucyB7XG4gIGNvYWxlc2NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgc2luY2UgdjAuMTdcbiAgICovXG4gIHNpbmNlVHJhbnNmb3JtSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHNpbmNlIHYwLjE3LCBpbmNsdWRlIHRyYW5zZm9ybSBvcHRpb25zIGFsb25nc2lkZSBtZXJnZSBvcHRpb25zIGluc3RlYWRcbiAgICovXG4gIHRyYW5zZm9ybU9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlTb3VyY2U8XG4gIFFPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRTb3VyY2VRdWVyeU9wdGlvbnMsXG4gIFRPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucyxcbiAgUUIgPSBSZWNvcmRRdWVyeUJ1aWxkZXIsXG4gIFRCID0gUmVjb3JkVHJhbnNmb3JtQnVpbGRlcixcbiAgUVJEID0gdW5rbm93bixcbiAgVFJEIGV4dGVuZHMgUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzID0gUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzXG4+IGV4dGVuZHMgUmVjb3JkU291cmNlPFFPLCBUTywgUUIsIFRCPixcbiAgICBSZWNvcmRTeW5jYWJsZSxcbiAgICBSZWNvcmRRdWVyeWFibGU8UVJELCBRQiwgUU8+LFxuICAgIFJlY29yZFVwZGF0YWJsZTxUUkQsIFRCLCBUTz4ge31cblxuQHN5bmNhYmxlXG5AcXVlcnlhYmxlXG5AdXBkYXRhYmxlXG5leHBvcnQgY2xhc3MgTWVtb3J5U291cmNlPFxuICAgIFFPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRTb3VyY2VRdWVyeU9wdGlvbnMsXG4gICAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlcXVlc3RPcHRpb25zLFxuICAgIFFCID0gUmVjb3JkUXVlcnlCdWlsZGVyLFxuICAgIFRCID0gUmVjb3JkVHJhbnNmb3JtQnVpbGRlcixcbiAgICBRUkQgPSB1bmtub3duLFxuICAgIFRSRCBleHRlbmRzIFJlY29yZENhY2hlVXBkYXRlRGV0YWlscyA9IFJlY29yZENhY2hlVXBkYXRlRGV0YWlsc1xuICA+XG4gIGV4dGVuZHMgUmVjb3JkU291cmNlPFFPLCBUTywgUUIsIFRCPlxuICBpbXBsZW1lbnRzXG4gICAgUmVjb3JkU3luY2FibGUsXG4gICAgUmVjb3JkUXVlcnlhYmxlPFFSRCwgUUIsIFFPPixcbiAgICBSZWNvcmRVcGRhdGFibGU8VFJELCBUQiwgVE8+LFxuICAgIFJlc2V0dGFibGUge1xuICBwcm90ZWN0ZWQgX2NhY2hlOiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+O1xuICBwcm90ZWN0ZWQgX2Jhc2U/OiBNZW1vcnlTb3VyY2U8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPjtcbiAgcHJvdGVjdGVkIF9mb3JrUG9pbnQ/OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtczogRGljdDxSZWNvcmRUcmFuc2Zvcm0+O1xuICBwcm90ZWN0ZWQgX3RyYW5zZm9ybUludmVyc2VzOiBEaWN0PFJlY29yZE9wZXJhdGlvbltdPjtcblxuICBjb25zdHJ1Y3RvcihzZXR0aW5nczogTWVtb3J5U291cmNlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPikge1xuICAgIGNvbnN0IHsga2V5TWFwLCBzY2hlbWEsIGJhc2UgfSA9IHNldHRpbmdzO1xuXG4gICAgc2V0dGluZ3MubmFtZSA9IHNldHRpbmdzLm5hbWUgPz8gJ21lbW9yeSc7XG5cbiAgICBzdXBlcihzZXR0aW5ncyk7XG5cbiAgICB0aGlzLl90cmFuc2Zvcm1zID0ge307XG4gICAgdGhpcy5fdHJhbnNmb3JtSW52ZXJzZXMgPSB7fTtcblxuICAgIHRoaXMudHJhbnNmb3JtTG9nLm9uKCdjbGVhcicsIHRoaXMuX2xvZ0NsZWFyZWQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy50cmFuc2Zvcm1Mb2cub24oJ3RydW5jYXRlJywgdGhpcy5fbG9nVHJ1bmNhdGVkLmJpbmQodGhpcykpO1xuICAgIHRoaXMudHJhbnNmb3JtTG9nLm9uKCdyb2xsYmFjaycsIHRoaXMuX2xvZ1JvbGxlZGJhY2suYmluZCh0aGlzKSk7XG5cbiAgICBsZXQgY2FjaGVTZXR0aW5nczogUGFydGlhbDxNZW1vcnlDYWNoZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4+ID1cbiAgICAgIHNldHRpbmdzLmNhY2hlU2V0dGluZ3MgPz8ge307XG4gICAgY2FjaGVTZXR0aW5ncy5zY2hlbWEgPSBzY2hlbWE7XG4gICAgY2FjaGVTZXR0aW5ncy5rZXlNYXAgPSBrZXlNYXA7XG4gICAgY2FjaGVTZXR0aW5ncy5xdWVyeUJ1aWxkZXIgPz89IHRoaXMucXVlcnlCdWlsZGVyO1xuICAgIGNhY2hlU2V0dGluZ3MudHJhbnNmb3JtQnVpbGRlciA/Pz0gdGhpcy50cmFuc2Zvcm1CdWlsZGVyO1xuICAgIGNhY2hlU2V0dGluZ3MuZGVmYXVsdFF1ZXJ5T3B0aW9ucyA/Pz0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zO1xuICAgIGNhY2hlU2V0dGluZ3MuZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMgPz89IHRoaXMuZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnM7XG4gICAgY2FjaGVTZXR0aW5ncy5hdXRvVmFsaWRhdGUgPz89IHNldHRpbmdzLmF1dG9WYWxpZGF0ZTtcblxuICAgIGlmIChcbiAgICAgIGNhY2hlU2V0dGluZ3MuYXV0b1ZhbGlkYXRlICE9PSBmYWxzZSAmJlxuICAgICAgY2FjaGVTZXR0aW5ncy52YWxpZGF0b3JGb3IgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgY2FjaGVTZXR0aW5ncy52YWxpZGF0b3JzID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNhY2hlU2V0dGluZ3MudmFsaWRhdG9yRm9yID0gdGhpcy5fdmFsaWRhdG9yRm9yO1xuICAgIH1cblxuICAgIGlmIChiYXNlKSB7XG4gICAgICB0aGlzLl9iYXNlID0gYmFzZTtcbiAgICAgIHRoaXMuX2ZvcmtQb2ludCA9IGJhc2UudHJhbnNmb3JtTG9nLmhlYWQ7XG4gICAgICBjYWNoZVNldHRpbmdzLmJhc2UgPSBiYXNlLmNhY2hlO1xuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlQ2xhc3MgPSBzZXR0aW5ncy5jYWNoZUNsYXNzID8/IE1lbW9yeUNhY2hlO1xuICAgIHRoaXMuX2NhY2hlID0gbmV3IGNhY2hlQ2xhc3MoXG4gICAgICBjYWNoZVNldHRpbmdzIGFzIE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPlxuICAgICk7XG4gIH1cblxuICBnZXQgY2FjaGUoKTogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICB9XG5cbiAgZ2V0IGJhc2UoKTogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9iYXNlO1xuICB9XG5cbiAgZ2V0IGZvcmtQb2ludCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JrUG9pbnQ7XG4gIH1cblxuICBhc3luYyB1cGdyYWRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2NhY2hlLnVwZ3JhZGUoKTtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFN5bmNhYmxlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGFzeW5jIF9zeW5jKHRyYW5zZm9ybTogUmVjb3JkVHJhbnNmb3JtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnRyYW5zZm9ybUxvZy5jb250YWlucyh0cmFuc2Zvcm0uaWQpKSB7XG4gICAgICB0aGlzLl9hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgYXdhaXQgdGhpcy50cmFuc2Zvcm1lZChbdHJhbnNmb3JtXSk7XG4gICAgfVxuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gVXBkYXRhYmxlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGFzeW5jIF91cGRhdGUoXG4gICAgdHJhbnNmb3JtOiBSZWNvcmRUcmFuc2Zvcm0sXG4gICAgaGludHM/OiBSZXNwb25zZUhpbnRzPFJlY29yZFRyYW5zZm9ybVJlc3VsdCwgVFJEPlxuICApOiBQcm9taXNlPEZ1bGxSZXNwb25zZTxSZWNvcmRUcmFuc2Zvcm1SZXN1bHQsIFRSRCwgUmVjb3JkT3BlcmF0aW9uPj4ge1xuICAgIGxldCByZXN1bHRzOiBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQ7XG4gICAgY29uc3QgcmVzcG9uc2U6IEZ1bGxSZXNwb25zZTxcbiAgICAgIFJlY29yZFRyYW5zZm9ybVJlc3VsdCxcbiAgICAgIFRSRCxcbiAgICAgIFJlY29yZE9wZXJhdGlvblxuICAgID4gPSB7fTtcblxuICAgIGlmICghdGhpcy50cmFuc2Zvcm1Mb2cuY29udGFpbnModHJhbnNmb3JtLmlkKSkge1xuICAgICAgcmVzdWx0cyA9IHRoaXMuX2FwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICByZXNwb25zZS50cmFuc2Zvcm1zID0gW3RyYW5zZm9ybV07XG4gICAgfVxuXG4gICAgaWYgKGhpbnRzPy5kYXRhKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm0ub3BlcmF0aW9ucykpIHtcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICdNZW1vcnlTb3VyY2UjdXBkYXRlOiBgaGludHMuZGF0YWAgbXVzdCBiZSBhbiBhcnJheSBpZiBgdHJhbnNmb3JtLm9wZXJhdGlvbnNgIGlzIGFuIGFycmF5JyxcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGhpbnRzLmRhdGEpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IChoaW50cy5kYXRhIGFzIFJlY29yZE9wZXJhdGlvblJlc3VsdFtdKS5tYXAoKGgpID0+XG4gICAgICAgICAgdGhpcy5fcmV0cmlldmVPcGVyYXRpb25SZXN1bHQoaClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSB0aGlzLl9yZXRyaWV2ZU9wZXJhdGlvblJlc3VsdChcbiAgICAgICAgICBoaW50cy5kYXRhIGFzIFJlY29yZE9wZXJhdGlvblJlc3VsdFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVzdWx0cykge1xuICAgICAgcmVzcG9uc2UuZGF0YSA9IHJlc3VsdHM7XG4gICAgfVxuXG4gICAgaWYgKGhpbnRzPy5kZXRhaWxzKSB7XG4gICAgICByZXNwb25zZS5kZXRhaWxzID0gaGludHMuZGV0YWlscztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBRdWVyeWFibGUgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgYXN5bmMgX3F1ZXJ5KFxuICAgIHF1ZXJ5OiBSZWNvcmRRdWVyeSxcbiAgICBoaW50cz86IFJlc3BvbnNlSGludHM8UmVjb3JkUXVlcnlSZXN1bHQsIFFSRD5cbiAgKTogUHJvbWlzZTxGdWxsUmVzcG9uc2U8UmVjb3JkUXVlcnlSZXN1bHQsIFFSRCwgUmVjb3JkT3BlcmF0aW9uPj4ge1xuICAgIGxldCByZXNwb25zZTogRnVsbFJlc3BvbnNlPFJlY29yZFF1ZXJ5UmVzdWx0LCBRUkQsIFJlY29yZE9wZXJhdGlvbj47XG5cbiAgICBpZiAoaGludHM/LmRhdGEpIHtcbiAgICAgIHJlc3BvbnNlID0ge307XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeS5leHByZXNzaW9ucykpIHtcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICdNZW1vcnlTb3VyY2UjcXVlcnk6IGBoaW50cy5kYXRhYCBtdXN0IGJlIGFuIGFycmF5IGlmIGBxdWVyeS5leHByZXNzaW9uc2AgaXMgYW4gYXJyYXknLFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoaGludHMuZGF0YSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXNwb25zZS5kYXRhID0gKGhpbnRzLmRhdGEgYXMgUmVjb3JkUXVlcnlFeHByZXNzaW9uUmVzdWx0W10pLm1hcCgoaCkgPT5cbiAgICAgICAgICB0aGlzLl9yZXRyaWV2ZVF1ZXJ5RXhwcmVzc2lvblJlc3VsdChoKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHRoaXMuX3JldHJpZXZlUXVlcnlFeHByZXNzaW9uUmVzdWx0KFxuICAgICAgICAgIGhpbnRzLmRhdGEgYXMgUmVjb3JkUXVlcnlFeHByZXNzaW9uUmVzdWx0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3BvbnNlID0gdGhpcy5fY2FjaGUucXVlcnkocXVlcnksIHtcbiAgICAgICAgZnVsbFJlc3BvbnNlOiB0cnVlXG4gICAgICB9IGFzIEZ1bGxSZXF1ZXN0T3B0aW9uczxRTz4pO1xuICAgIH1cblxuICAgIGlmIChoaW50cz8uZGV0YWlscykge1xuICAgICAgcmVzcG9uc2UuZGV0YWlscyA9IGhpbnRzLmRldGFpbHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUHVibGljIG1ldGhvZHNcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUsIG9yIFwiZm9ya1wiLCBmcm9tIGEgXCJiYXNlXCIgc291cmNlLlxuICAgKlxuICAgKiBUaGUgZm9ya2VkIHNvdXJjZSB3aWxsIGhhdmUgdGhlIHNhbWUgYHNjaGVtYWAgYW5kIGBrZXlNYXBgIGFzIGl0cyBiYXNlIHNvdXJjZS5cbiAgICogVGhlIGZvcmtlZCBzb3VyY2UncyBjYWNoZSB3aWxsIHN0YXJ0IHdpdGggdGhlIHNhbWUgaW1tdXRhYmxlIGRvY3VtZW50IGFzXG4gICAqIHRoZSBiYXNlIHNvdXJjZS4gSXRzIGNvbnRlbnRzIGFuZCBsb2cgd2lsbCBldm9sdmUgaW5kZXBlbmRlbnRseS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGZvcmtlZCBzb3VyY2UuXG4gICAqL1xuICBmb3JrKFxuICAgIHNldHRpbmdzOiBQYXJ0aWFsPE1lbW9yeVNvdXJjZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4+ID0ge31cbiAgKTogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4ge1xuICAgIC8vIHJlcXVpcmVkIHNldHRpbmdzXG4gICAgc2V0dGluZ3MuYmFzZSA9IHRoaXM7XG4gICAgc2V0dGluZ3Muc2NoZW1hID0gdGhpcy5zY2hlbWE7XG4gICAgc2V0dGluZ3Mua2V5TWFwID0gdGhpcy5rZXlNYXA7XG5cbiAgICAvLyBjdXN0b21pemFibGUgc2V0dGluZ3NcbiAgICBzZXR0aW5ncy5xdWVyeUJ1aWxkZXIgPz89IHRoaXMuX3F1ZXJ5QnVpbGRlcjtcbiAgICBzZXR0aW5ncy50cmFuc2Zvcm1CdWlsZGVyID8/PSB0aGlzLl90cmFuc2Zvcm1CdWlsZGVyO1xuICAgIHNldHRpbmdzLmRlZmF1bHRRdWVyeU9wdGlvbnMgPz89IHRoaXMuX2RlZmF1bHRRdWVyeU9wdGlvbnM7XG4gICAgc2V0dGluZ3MuZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMgPz89IHRoaXMuX2RlZmF1bHRUcmFuc2Zvcm1PcHRpb25zO1xuICAgIHNldHRpbmdzLnZhbGlkYXRvckZvciA/Pz0gdGhpcy5fdmFsaWRhdG9yRm9yO1xuICAgIGlmIChcbiAgICAgIHNldHRpbmdzLmF1dG9WYWxpZGF0ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBzZXR0aW5ncy52YWxpZGF0b3JGb3IgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgc2V0dGluZ3MuYXV0b1ZhbGlkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNZW1vcnlTb3VyY2U8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPihcbiAgICAgIHNldHRpbmdzIGFzIE1lbW9yeVNvdXJjZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD5cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHRyYW5zZm9ybXMgZnJvbSBhIGZvcmtlZCBzb3VyY2UgYmFjayBpbnRvIGEgYmFzZSBzb3VyY2UuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBvZiB0aGUgb3BlcmF0aW9ucyBmcm9tIGFsbCBvZiB0aGUgdHJhbnNmb3JtcyBpbiB0aGUgZm9ya2VkXG4gICAqIHNvdXJjZSdzIGhpc3Rvcnkgd2lsbCBiZSByZWR1Y2VkIGludG8gYSBzaW5nbGUgdHJhbnNmb3JtLiBBIHN1YnNldCBvZlxuICAgKiBvcGVyYXRpb25zIGNhbiBiZSBzZWxlY3RlZCBieSBzcGVjaWZ5aW5nIHRoZSBgc2luY2VUcmFuc2Zvcm1JZGAgb3B0aW9uLlxuICAgKlxuICAgKiBUaGUgYGNvYWxlc2NlYCBvcHRpb24gY29udHJvbHMgd2hldGhlciBvcGVyYXRpb25zIGFyZSBjb2FsZXNjZWQgaW50byBhXG4gICAqIG1pbmltYWwgZXF1aXZhbGVudCBzZXQgYmVmb3JlIGJlaW5nIHJlZHVjZWQgaW50byBhIHRyYW5zZm9ybS5cbiAgICpcbiAgICogQHBhcmFtIGZvcmtlZFNvdXJjZSAtIFRoZSBzb3VyY2UgdG8gbWVyZ2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gTWVyZ2Ugb3B0aW9uc1xuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGNhbGxpbmcgYHVwZGF0ZSgpYCB3aXRoIHRoZSBmb3JrZWQgdHJhbnNmb3Jtcy5cbiAgICovXG4gIG1lcmdlPFJlcXVlc3REYXRhIGV4dGVuZHMgUmVjb3JkVHJhbnNmb3JtUmVzdWx0ID0gUmVjb3JkVHJhbnNmb3JtUmVzdWx0PihcbiAgICBmb3JrZWRTb3VyY2U6IE1lbW9yeVNvdXJjZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+LFxuICAgIG9wdGlvbnM/OiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8VE8+ICYgTWVtb3J5U291cmNlTWVyZ2VPcHRpb25zXG4gICk6IFByb21pc2U8UmVxdWVzdERhdGE+O1xuICBtZXJnZTxSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdD4oXG4gICAgZm9ya2VkU291cmNlOiBNZW1vcnlTb3VyY2U8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPixcbiAgICBvcHRpb25zOiBGdWxsUmVxdWVzdE9wdGlvbnM8VE8+ICYgTWVtb3J5U291cmNlTWVyZ2VPcHRpb25zXG4gICk6IFByb21pc2U8RnVsbFJlc3BvbnNlPFJlcXVlc3REYXRhLCBUUkQsIFJlY29yZE9wZXJhdGlvbj4+O1xuICBhc3luYyBtZXJnZTxcbiAgICBSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdFxuICA+KFxuICAgIGZvcmtlZFNvdXJjZTogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4sXG4gICAgb3B0aW9ucz86IFRPICYgTWVtb3J5U291cmNlTWVyZ2VPcHRpb25zXG4gICk6IFByb21pc2U8XG4gICAgUmVjb3JkVHJhbnNmb3JtUmVzdWx0IHwgRnVsbFJlc3BvbnNlPFJlcXVlc3REYXRhLCBUUkQsIFJlY29yZE9wZXJhdGlvbj5cbiAgPiB7XG4gICAgbGV0IHsgY29hbGVzY2UsIHNpbmNlVHJhbnNmb3JtSWQsIHRyYW5zZm9ybU9wdGlvbnMsIC4uLnJlbWFpbmluZ09wdGlvbnMgfSA9XG4gICAgICBvcHRpb25zID8/IHt9O1xuXG4gICAgbGV0IHJlcXVlc3RPcHRpb25zOiBUTztcbiAgICBpZiAodHJhbnNmb3JtT3B0aW9ucykge1xuICAgICAgZGVwcmVjYXRlKFxuICAgICAgICAnSW4gTWVtb3J5U291cmNlI21lcmdlLCBwYXNzaW5nIGB0cmFuc2Zvcm1PcHRpb25zYCBuZXN0ZWQgd2l0aGluIGBvcHRpb25zYCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCBpbmNsdWRlIHRoZW0gZGlyZWN0bHkgYWxvbmdzaWRlIG90aGVyIG9wdGlvbnMuJ1xuICAgICAgKTtcbiAgICAgIHJlcXVlc3RPcHRpb25zID0gdHJhbnNmb3JtT3B0aW9ucyBhcyBUTztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdE9wdGlvbnMgPSAocmVtYWluaW5nT3B0aW9ucyA/PyB7fSkgYXMgVE87XG4gICAgfVxuXG4gICAgbGV0IG9wczogUmVjb3JkT3BlcmF0aW9uW10gPSBbXTtcblxuICAgIGlmIChmb3JrZWRTb3VyY2UuY2FjaGUuaXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnMpIHtcbiAgICAgIG9wcyA9IGZvcmtlZFNvdXJjZS5jYWNoZS5nZXRBbGxVcGRhdGVPcGVyYXRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0cmFuc2Zvcm1zOiBSZWNvcmRUcmFuc2Zvcm1bXTtcbiAgICAgIGlmIChzaW5jZVRyYW5zZm9ybUlkKSB7XG4gICAgICAgIGRlcHJlY2F0ZShcbiAgICAgICAgICAnSW4gTWVtb3J5U291cmNlI21lcmdlLCBwYXNzaW5nIGBzaW5jZVRyYW5zZm9ybUlkYCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCBjYWxsIGB1cGRhdGVgIHdpdGggYSBjdXN0b20gdHJhbnNmb3JtL29wZXJhdGlvbnMuJ1xuICAgICAgICApO1xuICAgICAgICB0cmFuc2Zvcm1zID0gZm9ya2VkU291cmNlLmdldFRyYW5zZm9ybXNTaW5jZShzaW5jZVRyYW5zZm9ybUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybXMgPSBmb3JrZWRTb3VyY2UuZ2V0QWxsVHJhbnNmb3JtcygpO1xuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1zLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkob3BzLCB0b0FycmF5KHQub3BlcmF0aW9ucykpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvYWxlc2NlICE9PSBmYWxzZSkge1xuICAgICAgb3BzID0gY29hbGVzY2VSZWNvcmRPcGVyYXRpb25zKG9wcyk7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zLmZ1bGxSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlPFJlcXVlc3REYXRhPihcbiAgICAgICAgb3BzLFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyBhcyBGdWxsUmVxdWVzdE9wdGlvbnM8VE8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGU8UmVxdWVzdERhdGE+KFxuICAgICAgICBvcHMsXG4gICAgICAgIHJlcXVlc3RPcHRpb25zIGFzIERlZmF1bHRSZXF1ZXN0T3B0aW9uczxUTz5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYmFzZSB3b3JrcyBzaW1pbGFybHkgdG8gYSBnaXQgcmViYXNlOlxuICAgKlxuICAgKiBBZnRlciBhIHNvdXJjZSBpcyBmb3JrZWQsIHRoZXJlIGlzIGEgcGFyZW50LSBhbmQgYSBjaGlsZC1zb3VyY2UuIEJvdGggbWF5XG4gICAqIGJlIHVwZGF0ZWQgd2l0aCB0cmFuc2Zvcm1zLiBXaGVuIGBjaGlsZFNvdXJjZS5yZWJhc2UoKWAgaXMgY2FsbGVkLCB0aGVcbiAgICogY2hpbGQgc291cmNlJ3Mgc3RhdGUgd2lsbCBiZSByZXNldCB0byBtYXRjaCB0aGUgY3VycmVudCBzdGF0ZSBvZiBpdHNcbiAgICogcGFyZW50LCBhbmQgdGhlbiBhbnkgbG9jYWxseSBtYWRlIHRyYW5zZm9ybXMgd2lsbCBiZSByZXBsYXllZCBvbiB0aGUgY2hpbGRcbiAgICogc291cmNlLlxuICAgKi9cbiAgcmViYXNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLl9iYXNlO1xuXG4gICAgaWYgKCFiYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uKFxuICAgICAgICAnQSBgYmFzZWAgc291cmNlIG11c3QgYmUgZGVmaW5lZCBmb3IgYHJlYmFzZWAgdG8gd29yaydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBjYWNoZSB0byBtYXRjaCB0aGUgYmFzZSBjYWNoZVxuICAgIHRoaXMuY2FjaGUucmVzZXQoKTtcblxuICAgIC8vIHJlcGxheSBhbGwgbG9jYWxseSBtYWRlIHRyYW5zZm9ybXNcbiAgICB0aGlzLmdldEFsbFRyYW5zZm9ybXMoKS5mb3JFYWNoKCh0KSA9PiB0aGlzLl9hcHBseVRyYW5zZm9ybSh0KSk7XG5cbiAgICAvLyByZXNldCB0aGUgZm9yayBwb2ludFxuICAgIHRoaXMuX2ZvcmtQb2ludCA9IGJhc2UudHJhbnNmb3JtTG9nLmhlYWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHNvdXJjZSdzIGNhY2hlIGFuZCB0cmFuc2Zvcm0gbG9nIHRvIGl0cyBpbml0aWFsIHN0YXRlLCB3aGljaCB3aWxsXG4gICAqIGJlIGVpdGhlciBlbXB0eSBvciBhIG1hdGNoaW5nIGl0cyBgYmFzZWAsIGlmIGl0IGhhcyBvbmUuXG4gICAqL1xuICBhc3luYyByZXNldCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyByZXNldCB0aGUgc3RhdGUgb2YgdGhlIGNhY2hlICh3aGljaCB3aWxsIG1hdGNoIGEgYmFzZSBjYWNoZSwgaWYgcHJlc2VudClcbiAgICB0aGlzLmNhY2hlLnJlc2V0KCk7XG5cbiAgICAvLyByZXNldCB0aGUgZm9yayBwb2ludFxuICAgIHRoaXMuX2ZvcmtQb2ludCA9IHRoaXMuX2Jhc2UgPyB0aGlzLl9iYXNlLnRyYW5zZm9ybUxvZy5oZWFkIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gY2xlYXIgdGhlIHRyYW5zZm9ybSBsb2csIHdoaWNoIGluIHR1cm4gd2lsbCBjbGVhciBhbnkgdHJhY2tlZCB0cmFuc2Zvcm1zXG4gICAgYXdhaXQgdGhpcy50cmFuc2Zvcm1Mb2cuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xscyBiYWNrIHRoZSBzb3VyY2UgdG8gYSBwYXJ0aWN1bGFyIGB0cmFuc2Zvcm1JZGAuXG4gICAqXG4gICAqIGByZWxhdGl2ZVBvc2l0aW9uYCBjYW4gYmUgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIHVzZWQgdG8gc3BlY2lmeSBhXG4gICAqIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGB0cmFuc2Zvcm1JZGAuXG4gICAqL1xuICByb2xsYmFjayh0cmFuc2Zvcm1JZDogc3RyaW5nLCByZWxhdGl2ZVBvc2l0aW9uID0gMCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUxvZy5yb2xsYmFjayh0cmFuc2Zvcm1JZCwgcmVsYXRpdmVQb3NpdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgbG9nZ2VkIHRyYW5zZm9ybXMgc2luY2UgYSBwYXJ0aWN1bGFyIGB0cmFuc2Zvcm1JZGAuXG4gICAqL1xuICBnZXRUcmFuc2Zvcm1zU2luY2UodHJhbnNmb3JtSWQ6IHN0cmluZyk6IFJlY29yZFRyYW5zZm9ybVtdIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Mb2dcbiAgICAgIC5hZnRlcih0cmFuc2Zvcm1JZClcbiAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLl90cmFuc2Zvcm1zW2lkXSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgc2luY2UgdjAuMTcsIGNhbGwgYGdldFRyYW5zZm9ybXNTaW5jZWAgaW5zdGVhZFxuICAgKi9cbiAgdHJhbnNmb3Jtc1NpbmNlKHRyYW5zZm9ybUlkOiBzdHJpbmcpOiBSZWNvcmRUcmFuc2Zvcm1bXSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgJ01lbW9yeVNvdXJjZSN0cmFuc2Zvcm1zU2luY2UgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIGNhbGwgYHNvdXJjZS5nZXRUcmFuc2Zvcm1zU2luY2UodHJhbmZvcm1JZClgIGluc3RlYWQuJ1xuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNmb3Jtc1NpbmNlKHRyYW5zZm9ybUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBsb2dnZWQgdHJhbnNmb3Jtcy5cbiAgICovXG4gIGdldEFsbFRyYW5zZm9ybXMoKTogUmVjb3JkVHJhbnNmb3JtW10ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUxvZy5lbnRyaWVzLm1hcCgoaWQpID0+IHRoaXMuX3RyYW5zZm9ybXNbaWRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2MC4xNywgY2FsbCBgZ2V0QWxsVHJhbnNmb3Jtc2AgaW5zdGVhZFxuICAgKi9cbiAgYWxsVHJhbnNmb3JtcygpOiBSZWNvcmRUcmFuc2Zvcm1bXSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgJ01lbW9yeVNvdXJjZSNhbGxUcmFuc2Zvcm1zIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFBsZWFzZSBjYWxsIGBzb3VyY2UuZ2V0QWxsVHJhbnNmb3JtcygpYCBpbnN0ZWFkLidcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmdldEFsbFRyYW5zZm9ybXMoKTtcbiAgfVxuXG4gIGdldFRyYW5zZm9ybSh0cmFuc2Zvcm1JZDogc3RyaW5nKTogUmVjb3JkVHJhbnNmb3JtIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3Jtc1t0cmFuc2Zvcm1JZF07XG4gIH1cblxuICBnZXRJbnZlcnNlT3BlcmF0aW9ucyh0cmFuc2Zvcm1JZDogc3RyaW5nKTogUmVjb3JkT3BlcmF0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1JbnZlcnNlc1t0cmFuc2Zvcm1JZF07XG4gIH1cblxuICBnZXQgZGVmYXVsdFF1ZXJ5T3B0aW9ucygpOiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8UU8+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc3VwZXIuZGVmYXVsdFF1ZXJ5T3B0aW9ucztcbiAgfVxuXG4gIHNldCBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnM6IERlZmF1bHRSZXF1ZXN0T3B0aW9uczxRTz4gfCB1bmRlZmluZWQpIHtcbiAgICBzdXBlci5kZWZhdWx0UXVlcnlPcHRpb25zID0gdGhpcy5fY2FjaGUuZGVmYXVsdFF1ZXJ5T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBnZXQgZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMoKTogRGVmYXVsdFJlcXVlc3RPcHRpb25zPFRPPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHN1cGVyLmRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zO1xuICB9XG5cbiAgc2V0IGRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zKG9wdGlvbnM6IERlZmF1bHRSZXF1ZXN0T3B0aW9uczxUTz4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucyA9IHRoaXMuX2NhY2hlLmRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFByb3RlY3RlZCBtZXRob2RzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgcHJvdGVjdGVkIF9yZXRyaWV2ZVF1ZXJ5RXhwcmVzc2lvblJlc3VsdChcbiAgICByZXN1bHQ6IFJlY29yZFF1ZXJ5RXhwcmVzc2lvblJlc3VsdFxuICApOiBSZWNvcmRRdWVyeUV4cHJlc3Npb25SZXN1bHQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5nZXRSZWNvcmRzU3luYyhyZXN1bHQpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZ2V0UmVjb3JkU3luYyhyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfcmV0cmlldmVPcGVyYXRpb25SZXN1bHQoXG4gICAgcmVzdWx0OiBSZWNvcmRPcGVyYXRpb25SZXN1bHRcbiAgKTogUmVjb3JkT3BlcmF0aW9uUmVzdWx0IHtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZ2V0UmVjb3JkU3luYyhyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtOiBSZWNvcmRUcmFuc2Zvcm0pOiBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQge1xuICAgIGNvbnN0IHsgZGF0YSwgZGV0YWlscyB9ID0gdGhpcy5jYWNoZS51cGRhdGUodHJhbnNmb3JtLCB7XG4gICAgICBmdWxsUmVzcG9uc2U6IHRydWVcbiAgICB9IGFzIEZ1bGxSZXF1ZXN0T3B0aW9uczxUTz4pO1xuICAgIHRoaXMuX3RyYW5zZm9ybXNbdHJhbnNmb3JtLmlkXSA9IHRyYW5zZm9ybTtcbiAgICB0aGlzLl90cmFuc2Zvcm1JbnZlcnNlc1t0cmFuc2Zvcm0uaWRdID0gZGV0YWlscz8uaW52ZXJzZU9wZXJhdGlvbnMgPz8gW107XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2NsZWFyVHJhbnNmb3JtRnJvbUhpc3RvcnkodHJhbnNmb3JtSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLl90cmFuc2Zvcm1zW3RyYW5zZm9ybUlkXTtcbiAgICBkZWxldGUgdGhpcy5fdHJhbnNmb3JtSW52ZXJzZXNbdHJhbnNmb3JtSWRdO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9sb2dDbGVhcmVkKCk6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zZm9ybXMgPSB7fTtcbiAgICB0aGlzLl90cmFuc2Zvcm1JbnZlcnNlcyA9IHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIF9sb2dUcnVuY2F0ZWQoXG4gICAgdHJhbnNmb3JtSWQ6IHN0cmluZyxcbiAgICByZWxhdGl2ZVBvc2l0aW9uOiBudW1iZXIsXG4gICAgcmVtb3ZlZDogc3RyaW5nW11cbiAgKTogdm9pZCB7XG4gICAgcmVtb3ZlZC5mb3JFYWNoKChpZCkgPT4gdGhpcy5fY2xlYXJUcmFuc2Zvcm1Gcm9tSGlzdG9yeShpZCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9sb2dSb2xsZWRiYWNrKFxuICAgIHRyYW5zZm9ybUlkOiBzdHJpbmcsXG4gICAgcmVsYXRpdmVQb3NpdGlvbjogbnVtYmVyLFxuICAgIHJlbW92ZWQ6IHN0cmluZ1tdXG4gICk6IHZvaWQge1xuICAgIHJlbW92ZWQucmV2ZXJzZSgpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICBjb25zdCBpbnZlcnNlT3BlcmF0aW9ucyA9IHRoaXMuX3RyYW5zZm9ybUludmVyc2VzW2lkXTtcbiAgICAgIGlmIChpbnZlcnNlT3BlcmF0aW9ucykge1xuICAgICAgICB0aGlzLmNhY2hlLnVwZGF0ZShpbnZlcnNlT3BlcmF0aW9ucyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jbGVhclRyYW5zZm9ybUZyb21IaXN0b3J5KGlkKTtcbiAgICB9KTtcbiAgfVxufVxuIl19

@@ -45,5 +45,9 @@ import { Orbit } from '@orbit/core';

(_b = settings.transformBuilder) !== null && _b !== void 0 ? _b : (settings.transformBuilder = this._transformBuilder);
(_c = settings.validatorFor) !== null && _c !== void 0 ? _c : (settings.validatorFor = this._validatorFor);
(_d = settings.defaultQueryOptions) !== null && _d !== void 0 ? _d : (settings.defaultQueryOptions = this._defaultQueryOptions);
(_e = settings.defaultTransformOptions) !== null && _e !== void 0 ? _e : (settings.defaultTransformOptions = this._defaultTransformOptions);
(_c = settings.defaultQueryOptions) !== null && _c !== void 0 ? _c : (settings.defaultQueryOptions = this._defaultQueryOptions);
(_d = settings.defaultTransformOptions) !== null && _d !== void 0 ? _d : (settings.defaultTransformOptions = this._defaultTransformOptions);
(_e = settings.validatorFor) !== null && _e !== void 0 ? _e : (settings.validatorFor = this._validatorFor);
if (settings.autoValidate === undefined &&
settings.validatorFor === undefined) {
settings.autoValidate = false;
}
return new MemoryCache(settings);

@@ -255,2 +259,2 @@ }

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbW9yeS1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBT3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBTUwsMkJBQTJCLEVBQzNCLGVBQWUsRUFFaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQVF0QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQVEsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBELE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBb0NwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxXQU9YLFNBQVEsZUFBeUM7SUFTakQsWUFBWSxRQUF1RDtRQUNqRSxNQUFNLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsUUFBUSxDQUFDO1FBRWpELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUVsQixzRUFBc0U7UUFDdEUsNEJBQTRCO1FBQzVCLElBQUksQ0FBQywyQkFBMkI7WUFDOUIscUJBQXFCLGFBQXJCLHFCQUFxQixjQUFyQixxQkFBcUIsR0FBSSxJQUFJLEtBQUssU0FBUyxDQUFDO1FBRTlDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsSUFBSSxDQUNGLFdBQW1FLEVBQUU7O1FBRXJFLG9CQUFvQjtRQUNwQixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUks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LElBQUksRUFBRSxFQUFFO1lBQ2hELElBQUksaUJBQWlCLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHFCQUFxQixHQUFHLG9CQUFvQixDQUFDO0lBQ3BELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yYml0IH0gZnJvbSAnQG9yYml0L2NvcmUnO1xuaW1wb3J0IHtcbiAgRGVmYXVsdFJlcXVlc3RPcHRpb25zLFxuICBGdWxsUmVxdWVzdE9wdGlvbnMsXG4gIEZ1bGxSZXNwb25zZSxcbiAgUmVxdWVzdE9wdGlvbnNcbn0gZnJvbSAnQG9yYml0L2RhdGEnO1xuaW1wb3J0IHsgSW1tdXRhYmxlTWFwIH0gZnJvbSAnQG9yYml0L2ltbXV0YWJsZSc7XG5pbXBvcnQge1xuICBSZWNvcmRDYWNoZVF1ZXJ5T3B0aW9ucyxcbiAgUmVjb3JkQ2FjaGVUcmFuc2Zvcm1PcHRpb25zLFxuICBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMsXG4gIFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5LFxuICBSZWNvcmRUcmFuc2Zvcm1CdWZmZXIsXG4gIFNpbXBsZVJlY29yZFRyYW5zZm9ybUJ1ZmZlcixcbiAgU3luY1JlY29yZENhY2hlLFxuICBTeW5jUmVjb3JkQ2FjaGVTZXR0aW5nc1xufSBmcm9tICdAb3JiaXQvcmVjb3JkLWNhY2hlJztcbmltcG9ydCB7XG4gIGNvYWxlc2NlUmVjb3JkT3BlcmF0aW9ucyxcbiAgZXF1YWxSZWNvcmRJZGVudGl0aWVzLFxuICBJbml0aWFsaXplZFJlY29yZCxcbiAgUmVjb3JkSWRlbnRpdHksXG4gIFJlY29yZE9wZXJhdGlvbixcbiAgUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBSZWNvcmRUcmFuc2Zvcm0sXG4gIFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIsXG4gIFJlY29yZFRyYW5zZm9ybVJlc3VsdFxufSBmcm9tICdAb3JiaXQvcmVjb3Jkcyc7XG5pbXBvcnQgeyBjbG9uZSwgRGljdCwgdG9BcnJheSB9IGZyb20gJ0BvcmJpdC91dGlscyc7XG5cbmNvbnN0IHsgYXNzZXJ0LCBkZXByZWNhdGUgfSA9IE9yYml0O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUNhY2hlTWVyZ2VPcHRpb25zIHtcbiAgY29hbGVzY2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUNhY2hlU2V0dGluZ3M8XG4gIFFPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRDYWNoZVF1ZXJ5T3B0aW9ucyxcbiAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlVHJhbnNmb3JtT3B0aW9ucyxcbiAgUUIgPSBSZWNvcmRRdWVyeUJ1aWxkZXIsXG4gIFRCID0gUmVjb3JkVHJhbnNmb3JtQnVpbGRlcixcbiAgUVJEID0gdW5rbm93bixcbiAgVFJEIGV4dGVuZHMgUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzID0gUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzXG4+IGV4dGVuZHMgU3luY1JlY29yZENhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEI+IHtcbiAgYmFzZT86IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIHRyYWNrVXBkYXRlT3BlcmF0aW9ucz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5Q2FjaGVDbGFzczxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlUXVlcnlPcHRpb25zLFxuICBUTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkQ2FjaGVUcmFuc2Zvcm1PcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBRUkQgPSB1bmtub3duLFxuICBUUkQgZXh0ZW5kcyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgPSBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHNcbj4ge1xuICBuZXcgKHNldHRpbmdzOiBNZW1vcnlDYWNoZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4pOiBNZW1vcnlDYWNoZTxcbiAgICBRTyxcbiAgICBUTyxcbiAgICBRQixcbiAgICBUQixcbiAgICBRUkQsXG4gICAgVFJEXG4gID47XG59XG5cbi8qKlxuICogQSBjYWNoZSB1c2VkIHRvIGFjY2VzcyByZWNvcmRzIGluIG1lbW9yeS5cbiAqXG4gKiBCZWNhdXNlIGRhdGEgaXMgc3RvcmVkIGluIGltbXV0YWJsZSBtYXBzLCB0aGlzIHR5cGUgb2YgY2FjaGUgY2FuIGJlIGZvcmtlZFxuICogZWZmaWNpZW50bHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlDYWNoZTxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlUXVlcnlPcHRpb25zLFxuICBUTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkQ2FjaGVUcmFuc2Zvcm1PcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBRUkQgPSB1bmtub3duLFxuICBUUkQgZXh0ZW5kcyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgPSBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHNcbj4gZXh0ZW5kcyBTeW5jUmVjb3JkQ2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPiB7XG4gIHByb3RlY3RlZCBfYmFzZT86IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIHByb3RlY3RlZCBfcmVjb3JkcyE6IERpY3Q8SW1tdXRhYmxlTWFwPHN0cmluZywgSW5pdGlhbGl6ZWRSZWNvcmQ+PjtcbiAgcHJvdGVjdGVkIF9pbnZlcnNlUmVsYXRpb25zaGlwcyE6IERpY3Q8XG4gICAgSW1tdXRhYmxlTWFwPHN0cmluZywgUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXT5cbiAgPjtcbiAgcHJvdGVjdGVkIF91cGRhdGVPcGVyYXRpb25zPzogUmVjb3JkT3BlcmF0aW9uW107XG4gIHByb3RlY3RlZCBfaXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnM6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2V0dGluZ3M6IE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPikge1xuICAgIGNvbnN0IHsgYmFzZSwgdHJhY2tVcGRhdGVPcGVyYXRpb25zIH0gPSBzZXR0aW5ncztcblxuICAgIHN1cGVyKHNldHRpbmdzKTtcblxuICAgIHRoaXMuX2Jhc2UgPSBiYXNlO1xuXG4gICAgLy8gVHJhY2sgdXBkYXRlIG9wZXJhdGlvbnMgaWYgZXhwbGljaXRseSB0b2xkIHRvIGRvIHNvLCBvciBpZiBhIGBiYXNlYFxuICAgIC8vIGNhY2hlIGhhcyBiZWVuIHNwZWNpZmllZC5cbiAgICB0aGlzLl9pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9ucyA9XG4gICAgICB0cmFja1VwZGF0ZU9wZXJhdGlvbnMgPz8gYmFzZSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgZ2V0IGJhc2UoKTogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Jhc2U7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUsIG9yIFwiZm9ya1wiLCBmcm9tIGEgXCJiYXNlXCIgY2FjaGUuXG4gICAqXG4gICAqIFRoZSBmb3JrZWQgY2FjaGUgd2lsbCBoYXZlIHRoZSBzYW1lIGBzY2hlbWFgIGFuZCBga2V5TWFwYCBhcyBpdHMgYmFzZVxuICAgKiBzb3VyY2UuIFRoZSBmb3JrZWQgY2FjaGUgd2lsbCBzdGFydCB3aXRoIHRoZSBzYW1lIGltbXV0YWJsZSBkb2N1bWVudCBhcyB0aGVcbiAgICogYmFzZSBzb3VyY2UuIEl0cyBjb250ZW50cyBhbmQgbG9nIHdpbGwgZXZvbHZlIGluZGVwZW5kZW50bHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSBmb3JrZWQgY2FjaGVcbiAgICovXG4gIGZvcmsoXG4gICAgc2V0dGluZ3M6IFBhcnRpYWw8TWVtb3J5Q2FjaGVTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+PiA9IHt9XG4gICk6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4ge1xuICAgIC8vIHJlcXVpcmVkIHNldHRpbmdzXG4gICAgc2V0dGluZ3MuYmFzZSA9IHRoaXM7XG4gICAgc2V0dGluZ3Muc2NoZW1hID0gdGhpcy5zY2hlbWE7XG4gICAgc2V0dGluZ3Mua2V5TWFwID0gdGhpcy5fa2V5TWFwO1xuXG4gICAgLy8gY3VzdG9taXphYmxlIHNldHRpbmdzXG4gICAgc2V0dGluZ3MucXVlcnlCdWlsZGVyID8/PSB0aGlzLl9xdWVyeUJ1aWxkZXI7XG4gICAgc2V0dGluZ3MudHJhbnNmb3JtQnVpbGRlciA/Pz0gdGhpcy5fdHJhbnNmb3JtQnVpbGRlcjtcbiAgICBzZXR0aW5ncy52YWxpZGF0b3JGb3IgPz89IHRoaXMuX3ZhbGlkYXRvckZvcjtcbiAgICBzZXR0aW5ncy5kZWZhdWx0UXVlcnlPcHRpb25zID8/PSB0aGlzLl9kZWZhdWx0UXVlcnlPcHRpb25zO1xuICAgIHNldHRpbmdzLmRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zID8/PSB0aGlzLl9kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucztcblxuICAgIHJldHVybiBuZXcgTWVtb3J5Q2FjaGUoXG4gICAgICBzZXR0aW5ncyBhcyBNZW1vcnlDYWNoZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD5cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlcyB0aGUgb3BlcmF0aW9ucyBmcm9tIGEgZm9ya2VkIGNhY2hlIGJhY2sgdG8gdGhpcyBjYWNoZS5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGB1cGRhdGVgIHdpdGggdGhlIG9wZXJhdGlvbnNcbiAgICovXG4gIG1lcmdlPFJlcXVlc3REYXRhIGV4dGVuZHMgUmVjb3JkVHJhbnNmb3JtUmVzdWx0ID0gUmVjb3JkVHJhbnNmb3JtUmVzdWx0PihcbiAgICBmb3JrZWRDYWNoZTogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPixcbiAgICBvcHRpb25zPzogRGVmYXVsdFJlcXVlc3RPcHRpb25zPFRPPiAmIE1lbW9yeUNhY2hlTWVyZ2VPcHRpb25zXG4gICk6IFJlcXVlc3REYXRhO1xuICBtZXJnZTxSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdD4oXG4gICAgZm9ya2VkQ2FjaGU6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4sXG4gICAgb3B0aW9uczogRnVsbFJlcXVlc3RPcHRpb25zPFRPPiAmIE1lbW9yeUNhY2hlTWVyZ2VPcHRpb25zXG4gICk6IEZ1bGxSZXNwb25zZTxSZXF1ZXN0RGF0YSwgVFJELCBSZWNvcmRPcGVyYXRpb24+O1xuICBtZXJnZTxSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdD4oXG4gICAgZm9ya2VkQ2FjaGU6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4sXG4gICAgb3B0aW9ucz86IFRPICYgTWVtb3J5Q2FjaGVNZXJnZU9wdGlvbnNcbiAgKTogUmVxdWVzdERhdGEgfCBGdWxsUmVzcG9uc2U8UmVxdWVzdERhdGEsIFRSRCwgUmVjb3JkT3BlcmF0aW9uPiB7XG4gICAgbGV0IHsgY29hbGVzY2UsIC4uLnJlbWFpbmluZ09wdGlvbnMgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBhc3NlcnQoXG4gICAgICAnTWVtb3J5Q2FjaGUjbWVyZ2UgY2FuIG9ubHkgbWVyZ2UgYSBmb3JrZWQgY2FjaGUgdGhhdCBpcyBjb25maWd1cmVkIHdpdGggYHRyYWNrVXBkYXRlT3BlcmF0aW9uczogdHJ1ZWAuJyxcbiAgICAgIGZvcmtlZENhY2hlLmlzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zXG4gICAgKTtcblxuICAgIGxldCBvcHMgPSBmb3JrZWRDYWNoZS5nZXRBbGxVcGRhdGVPcGVyYXRpb25zKCk7XG5cbiAgICBpZiAoY29hbGVzY2UgIT09IGZhbHNlKSB7XG4gICAgICBvcHMgPSBjb2FsZXNjZVJlY29yZE9wZXJhdGlvbnMob3BzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uZnVsbFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGU8UmVxdWVzdERhdGE+KFxuICAgICAgICBvcHMsXG4gICAgICAgIHJlbWFpbmluZ09wdGlvbnMgYXMgRnVsbFJlcXVlc3RPcHRpb25zPFRPPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlPFJlcXVlc3REYXRhPihcbiAgICAgICAgb3BzLFxuICAgICAgICByZW1haW5pbmdPcHRpb25zIGFzIERlZmF1bHRSZXF1ZXN0T3B0aW9uczxUTz5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYmFzZSByZXNldHMgdGhpcyBjYWNoZSdzIHN0YXRlIHRvIHRoYXQgb2YgaXRzIGJhc2UgY2FjaGUsIHRoZW4gcmUtYXBwbGllc1xuICAgKiBhbnkgdHJhY2tlZCB1cGRhdGUgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogUmViYXNpbmcgcmVxdWlyZXMgYm90aCBhIGBiYXNlYCBjYWNoZSBhcyB3ZWxsIGFzIHRyYWNraW5nIG9mIHVwZGF0ZVxuICAgKiBvcGVyYXRpb25zICh3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBhIGBiYXNlYCBjYWNoZSBpcyBhc3NpZ25lZCkuXG4gICAqL1xuICByZWJhc2UoKTogdm9pZCB7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuX2Jhc2U7XG5cbiAgICBhc3NlcnQoXG4gICAgICAnQSBgYmFzZWAgY2FjaGUgbXVzdCBiZSBkZWZpbmVkIGZvciBgcmViYXNlYCB0byB3b3JrJyxcbiAgICAgIGJhc2UgIT09IHVuZGVmaW5lZFxuICAgICk7XG5cbiAgICBhc3NlcnQoXG4gICAgICAnTWVtb3J5Q2FjaGUjcmViYXNlIHJlcXVpcmVzIHRoYXQgdGhlIGNhY2hlIGlzIGNvbmZpZ3VyZWQgd2l0aCBgdHJhY2tVcGRhdGVPcGVyYXRpb25zOiB0cnVlYC4nLFxuICAgICAgdGhpcy5faXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnNcbiAgICApO1xuXG4gICAgLy8gZ2V0IHVwZGF0ZSBvcHMgcHJpb3IgdG8gcmVzZXR0aW5nIHN0YXRlXG4gICAgbGV0IG9wcyA9IHRoaXMuZ2V0QWxsVXBkYXRlT3BlcmF0aW9ucygpO1xuXG4gICAgLy8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBjYWNoZSB0byBtYXRjaCBpdHMgYmFzZSBjYWNoZVxuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIC8vIHJlYXBwbHkgdXBkYXRlIG9wc1xuICAgIHRoaXMudXBkYXRlKG9wcyk7XG4gIH1cblxuICBnZXRSZWNvcmRTeW5jKGlkZW50aXR5OiBSZWNvcmRJZGVudGl0eSk6IEluaXRpYWxpemVkUmVjb3JkIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcmVjb3Jkc1tpZGVudGl0eS50eXBlXS5nZXQoaWRlbnRpdHkuaWQpO1xuICB9XG5cbiAgZ2V0UmVjb3Jkc1N5bmMoXG4gICAgdHlwZU9ySWRlbnRpdGllcz86IHN0cmluZyB8IFJlY29yZElkZW50aXR5W11cbiAgKTogSW5pdGlhbGl6ZWRSZWNvcmRbXSB7XG4gICAgaWYgKHR5cGVPcklkZW50aXRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdHlwZXMgPSBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5tb2RlbHMpO1xuICAgICAgY29uc3QgcmVjb3JkczogSW5pdGlhbGl6ZWRSZWNvcmRbXSA9IFtdO1xuICAgICAgdHlwZXMuZm9yRWFjaCgodHlwZSkgPT5cbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoXG4gICAgICAgICAgcmVjb3JkcyxcbiAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuX3JlY29yZHNbdHlwZV0udmFsdWVzKCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVjb3JkcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlT3JJZGVudGl0aWVzID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdHlwZTogc3RyaW5nID0gdHlwZU9ySWRlbnRpdGllcztcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3JlY29yZHNbdHlwZV0udmFsdWVzKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZWNvcmRzOiBJbml0aWFsaXplZFJlY29yZFtdID0gW107XG4gICAgICBjb25zdCBpZGVudGl0aWVzOiBSZWNvcmRJZGVudGl0eVtdID0gdHlwZU9ySWRlbnRpdGllcztcbiAgICAgIGZvciAobGV0IGlkZW50aXR5IG9mIGlkZW50aXRpZXMpIHtcbiAgICAgICAgbGV0IHJlY29yZCA9IHRoaXMuZ2V0UmVjb3JkU3luYyhpZGVudGl0eSk7XG4gICAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlY29yZHM7XG4gICAgfVxuICB9XG5cbiAgc2V0UmVjb3JkU3luYyhyZWNvcmQ6IEluaXRpYWxpemVkUmVjb3JkKTogdm9pZCB7XG4gICAgdGhpcy5fcmVjb3Jkc1tyZWNvcmQudHlwZV0uc2V0KHJlY29yZC5pZCwgcmVjb3JkKTtcbiAgfVxuXG4gIHNldFJlY29yZHNTeW5jKHJlY29yZHM6IEluaXRpYWxpemVkUmVjb3JkW10pOiB2b2lkIHtcbiAgICBsZXQgdHlwZWRNYXA6IGFueSA9IHt9O1xuICAgIGZvciAobGV0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICB0eXBlZE1hcFtyZWNvcmQudHlwZV0gPSB0eXBlZE1hcFtyZWNvcmQudHlwZV0gfHwgW107XG4gICAgICB0eXBlZE1hcFtyZWNvcmQudHlwZV0ucHVzaChbcmVjb3JkLmlkLCByZWNvcmRdKTtcbiAgICB9XG4gICAgZm9yIChsZXQgdHlwZSBpbiB0eXBlZE1hcCkge1xuICAgICAgdGhpcy5fcmVjb3Jkc1t0eXBlXS5zZXRNYW55KHR5cGVkTWFwW3R5cGVdKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVSZWNvcmRTeW5jKFxuICAgIHJlY29yZElkZW50aXR5OiBSZWNvcmRJZGVudGl0eVxuICApOiBJbml0aWFsaXplZFJlY29yZCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkTWFwID0gdGhpcy5fcmVjb3Jkc1tyZWNvcmRJZGVudGl0eS50eXBlXTtcbiAgICBjb25zdCByZWNvcmQgPSByZWNvcmRNYXAuZ2V0KHJlY29yZElkZW50aXR5LmlkKTtcbiAgICBpZiAocmVjb3JkKSB7XG4gICAgICByZWNvcmRNYXAucmVtb3ZlKHJlY29yZElkZW50aXR5LmlkKTtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlUmVjb3Jkc1N5bmMocmVjb3JkSWRlbnRpdGllczogUmVjb3JkSWRlbnRpdHlbXSk6IEluaXRpYWxpemVkUmVjb3JkW10ge1xuICAgIGNvbnN0IHJlY29yZHMgPSBbXTtcbiAgICBjb25zdCB0eXBlZElkczogYW55ID0ge307XG4gICAgZm9yIChsZXQgcmVjb3JkSWRlbnRpdHkgb2YgcmVjb3JkSWRlbnRpdGllcykge1xuICAgICAgbGV0IHJlY29yZCA9IHRoaXMuZ2V0UmVjb3JkU3luYyhyZWNvcmRJZGVudGl0eSk7XG4gICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgIHJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgICB0eXBlZElkc1tyZWNvcmQudHlwZV0gPSB0eXBlZElkc1tyZWNvcmQudHlwZV0gfHwgW107XG4gICAgICAgIHR5cGVkSWRzW3JlY29yZC50eXBlXS5wdXNoKHJlY29yZElkZW50aXR5LmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgdHlwZSBpbiB0eXBlZElkcykge1xuICAgICAgdGhpcy5fcmVjb3Jkc1t0eXBlXS5yZW1vdmVNYW55KHR5cGVkSWRzW3R5cGVdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cblxuICBnZXRJbnZlcnNlUmVsYXRpb25zaGlwc1N5bmMoXG4gICAgcmVjb3JkSWRlbnRpdHlPcklkZW50aXRpZXM6IFJlY29yZElkZW50aXR5IHwgUmVjb3JkSWRlbnRpdHlbXVxuICApOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdIHtcbiAgICBjb25zdCByZXN1bHRzOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdID0gW107XG4gICAgY29uc3QgaWRlbnRpdGllczogUmVjb3JkSWRlbnRpdHlbXSA9IEFycmF5LmlzQXJyYXkoXG4gICAgICByZWNvcmRJZGVudGl0eU9ySWRlbnRpdGllc1xuICAgIClcbiAgICAgID8gcmVjb3JkSWRlbnRpdHlPcklkZW50aXRpZXNcbiAgICAgIDogW3JlY29yZElkZW50aXR5T3JJZGVudGl0aWVzXTtcblxuICAgIGZvciAobGV0IGlkZW50aXR5IG9mIGlkZW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2ludmVyc2VSZWxhdGlvbnNoaXBzW2lkZW50aXR5LnR5cGVdLmdldChpZGVudGl0eS5pZCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlc3VsdHMsIHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBhZGRJbnZlcnNlUmVsYXRpb25zaGlwc1N5bmMoXG4gICAgcmVsYXRpb25zaGlwczogUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXVxuICApOiB2b2lkIHtcbiAgICByZWxhdGlvbnNoaXBzLmZvckVhY2goKHIpID0+IHtcbiAgICAgIGxldCByZWxzID0gdGhpcy5faW52ZXJzZVJlbGF0aW9uc2hpcHNbci5yZWxhdGVkUmVjb3JkLnR5cGVdLmdldChcbiAgICAgICAgci5yZWxhdGVkUmVjb3JkLmlkXG4gICAgICApO1xuICAgICAgcmVscyA9IHJlbHMgPyBbLi4ucmVscywgY2xvbmUocildIDogW2Nsb25lKHIpXTtcbiAgICAgIHRoaXMuX2ludmVyc2VSZWxhdGlvbnNoaXBzW3IucmVsYXRlZFJlY29yZC50eXBlXS5zZXQoXG4gICAgICAgIHIucmVsYXRlZFJlY29yZC5pZCxcbiAgICAgICAgcmVsc1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUludmVyc2VSZWxhdGlvbnNoaXBzU3luYyhcbiAgICByZWxhdGlvbnNoaXBzOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdXG4gICk6IHZvaWQge1xuICAgIHJlbGF0aW9uc2hpcHMuZm9yRWFjaCgocikgPT4ge1xuICAgICAgbGV0IHJlbHMgPSB0aGlzLl9pbnZlcnNlUmVsYXRpb25zaGlwc1tyLnJlbGF0ZWRSZWNvcmQudHlwZV0uZ2V0KFxuICAgICAgICByLnJlbGF0ZWRSZWNvcmQuaWRcbiAgICAgICk7XG4gICAgICBpZiAocmVscykge1xuICAgICAgICBsZXQgbmV3UmVscyA9IHJlbHMuZmlsdGVyKFxuICAgICAgICAgIChyZWwpID0+XG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICBlcXVhbFJlY29yZElkZW50aXRpZXMocmVsLnJlY29yZCwgci5yZWNvcmQpICYmXG4gICAgICAgICAgICAgIHJlbC5yZWxhdGlvbnNoaXAgPT09IHIucmVsYXRpb25zaGlwXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ludmVyc2VSZWxhdGlvbnNoaXBzW3IucmVsYXRlZFJlY29yZC50eXBlXS5zZXQoXG4gICAgICAgICAgci5yZWxhdGVkUmVjb3JkLmlkLFxuICAgICAgICAgIG5ld1JlbHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGNhY2hlJ3MgdG8gaXRzIGluaXRpYWwgc3RhdGUsIHdoaWNoIHdpbGwgYmUgZWl0aGVyIGVtcHR5IG9yIGFcbiAgICogY2xvbmUgb2YgaXRzIGBiYXNlYCBjYWNoZSwgaWYgaXQgaGFzIG9uZS5cbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIGxldCBiYXNlID0gdGhpcy5fYmFzZTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgZGVwcmVjYXRlKFxuICAgICAgICAnQ2FsbGluZyBNZW1vcnlDYWNoZSNyZXNldCB3aXRoIGEgYGJhc2VgIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQgY29uZmlndXJlIHlvdXIgTWVtb3J5Q2FjaGUgd2l0aCBhIGBiYXNlYCBjYWNoZS4nXG4gICAgICApO1xuICAgICAgYmFzZSA/Pz0gYXJndW1lbnRzWzBdO1xuICAgIH1cblxuICAgIHRoaXMuX3JlY29yZHMgPSB7fTtcblxuICAgIGlmICh0aGlzLl9pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9ucykge1xuICAgICAgdGhpcy5fdXBkYXRlT3BlcmF0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKHRoaXMuX3NjaGVtYS5tb2RlbHMpLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgIGxldCBiYXNlUmVjb3JkcyA9IGJhc2U/Ll9yZWNvcmRzW3R5cGVdO1xuXG4gICAgICB0aGlzLl9yZWNvcmRzW3R5cGVdID0gbmV3IEltbXV0YWJsZU1hcDxzdHJpbmcsIEluaXRpYWxpemVkUmVjb3JkPihcbiAgICAgICAgYmFzZVJlY29yZHNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXNldEludmVyc2VSZWxhdGlvbnNoaXBzKGJhc2UpO1xuXG4gICAgdGhpcy5fcHJvY2Vzc29ycy5mb3JFYWNoKChwcm9jZXNzb3IpID0+IHByb2Nlc3Nvci5yZXNldChiYXNlKSk7XG5cbiAgICB0aGlzLmVtaXQoJ3Jlc2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogVXBncmFkZSB0aGUgY2FjaGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNjaGVtYS5cbiAgICovXG4gIHVwZ3JhZGUoKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXModGhpcy5fc2NoZW1hLm1vZGVscykuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9yZWNvcmRzW3R5cGVdKSB7XG4gICAgICAgIHRoaXMuX3JlY29yZHNbdHlwZV0gPSBuZXcgSW1tdXRhYmxlTWFwPHN0cmluZywgSW5pdGlhbGl6ZWRSZWNvcmQ+KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXNldEludmVyc2VSZWxhdGlvbnNoaXBzKCk7XG5cbiAgICBmb3IgKGxldCBwcm9jZXNzb3Igb2YgdGhpcy5fcHJvY2Vzc29ycykge1xuICAgICAgcHJvY2Vzc29yLnVwZ3JhZGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zO1xuICB9XG5cbiAgZ2V0QWxsVXBkYXRlT3BlcmF0aW9ucygpOiBSZWNvcmRPcGVyYXRpb25bXSB7XG4gICAgYXNzZXJ0KFxuICAgICAgJ01lbW9yeUNhY2hlI2dldEFsbFVwZGF0ZU9wZXJhdGlvbnMgcmVxdWlyZXMgdGhhdCBjYWNoZSBiZSBjb25maWd1cmVkIHdpdGggYHRyYWNrVXBkYXRlT3BlcmF0aW9uczogdHJ1ZWAuJyxcbiAgICAgIHRoaXMuX2lzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl91cGRhdGVPcGVyYXRpb25zIGFzIFJlY29yZE9wZXJhdGlvbltdO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUHJvdGVjdGVkIG1ldGhvZHNcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBwcm90ZWN0ZWQgX3VwZGF0ZTxcbiAgICBSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdFxuICA+KFxuICAgIHRyYW5zZm9ybTogUmVjb3JkVHJhbnNmb3JtLFxuICAgIG9wdGlvbnM/OiBUT1xuICApOiBGdWxsUmVzcG9uc2U8UmVxdWVzdERhdGEsIFRSRCwgUmVjb3JkT3BlcmF0aW9uPiB7XG4gICAgaWYgKHRoaXMuX2lzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zKSB7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShcbiAgICAgICAgdGhpcy5fdXBkYXRlT3BlcmF0aW9ucyxcbiAgICAgICAgdG9BcnJheSh0cmFuc2Zvcm0ub3BlcmF0aW9ucylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5fdXBkYXRlPFJlcXVlc3REYXRhPih0cmFuc2Zvcm0sIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGBfZ2V0VHJhbnNmb3JtQnVmZmVyYCBvbiBiYXNlIGBTeW5jUmVjb3JkQ2FjaGVgIHRvIHByb3ZpZGUgYVxuICAgKiBgdHJhbnNmb3JtQnVmZmVyYCBpZiBhIGN1c3RvbSBvbmUgaGFzbid0IGJlZW4gcHJvdmlkZWQgdmlhIHRoZSBjb25zdHJ1Y3RvclxuICAgKiBzZXR0aW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRUcmFuc2Zvcm1CdWZmZXIoKTogUmVjb3JkVHJhbnNmb3JtQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fdHJhbnNmb3JtQnVmZmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hLCBrZXlNYXAgfSA9IHRoaXM7XG4gICAgICB0aGlzLl90cmFuc2Zvcm1CdWZmZXIgPSBuZXcgU2ltcGxlUmVjb3JkVHJhbnNmb3JtQnVmZmVyKHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBrZXlNYXBcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtQnVmZmVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9yZXNldEludmVyc2VSZWxhdGlvbnNoaXBzKFxuICAgIGJhc2U/OiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGludmVyc2VSZWxhdGlvbnNoaXBzOiBEaWN0PFxuICAgICAgSW1tdXRhYmxlTWFwPHN0cmluZywgUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHlbXT5cbiAgICA+ID0ge307XG4gICAgT2JqZWN0LmtleXModGhpcy5fc2NoZW1hLm1vZGVscykuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgbGV0IGJhc2VSZWxhdGlvbnNoaXBzID0gYmFzZSAmJiBiYXNlLl9pbnZlcnNlUmVsYXRpb25zaGlwc1t0eXBlXTtcbiAgICAgIGludmVyc2VSZWxhdGlvbnNoaXBzW3R5cGVdID0gbmV3IEltbXV0YWJsZU1hcChiYXNlUmVsYXRpb25zaGlwcyk7XG4gICAgfSk7XG4gICAgdGhpcy5faW52ZXJzZVJlbGF0aW9uc2hpcHMgPSBpbnZlcnNlUmVsYXRpb25zaGlwcztcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbW9yeS1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBT3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBTUwsMkJBQTJCLEVBQzNCLGVBQWUsRUFFaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQVF0QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQVEsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBELE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBb0NwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxXQU9YLFNBQVEsZUFBeUM7SUFTakQsWUFBWSxRQUF1RDtRQUNqRSxNQUFNLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsUUFBUSxDQUFDO1FBRWpELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUVsQixzRUFBc0U7UUFDdEUsNEJBQTRCO1FBQzVCLElBQUksQ0FBQywyQkFBMkI7WUFDOUIscUJBQXFCLGFBQXJCLHFCQUFxQixjQUFyQixxQkFBcUIsR0FBSSxJQUFJLEtBQUssU0FBUyxDQUFDO1FBRTlDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsSUFBSSxDQUNGLFdBQW1FLEVBQUU7O1FBRXJFLG9CQUFvQjtRQUNwQixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUks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QUE0QztRQUU1QyxNQUFNLG9CQUFvQixHQUV0QixFQUFFLENBQUM7UUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDaEQsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7SUFDcEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3JiaXQgfSBmcm9tICdAb3JiaXQvY29yZSc7XG5pbXBvcnQge1xuICBEZWZhdWx0UmVxdWVzdE9wdGlvbnMsXG4gIEZ1bGxSZXF1ZXN0T3B0aW9ucyxcbiAgRnVsbFJlc3BvbnNlLFxuICBSZXF1ZXN0T3B0aW9uc1xufSBmcm9tICdAb3JiaXQvZGF0YSc7XG5pbXBvcnQgeyBJbW11dGFibGVNYXAgfSBmcm9tICdAb3JiaXQvaW1tdXRhYmxlJztcbmltcG9ydCB7XG4gIFJlY29yZENhY2hlUXVlcnlPcHRpb25zLFxuICBSZWNvcmRDYWNoZVRyYW5zZm9ybU9wdGlvbnMsXG4gIFJlY29yZENhY2hlVXBkYXRlRGV0YWlscyxcbiAgUmVjb3JkUmVsYXRpb25zaGlwSWRlbnRpdHksXG4gIFJlY29yZFRyYW5zZm9ybUJ1ZmZlcixcbiAgU2ltcGxlUmVjb3JkVHJhbnNmb3JtQnVmZmVyLFxuICBTeW5jUmVjb3JkQ2FjaGUsXG4gIFN5bmNSZWNvcmRDYWNoZVNldHRpbmdzXG59IGZyb20gJ0BvcmJpdC9yZWNvcmQtY2FjaGUnO1xuaW1wb3J0IHtcbiAgY29hbGVzY2VSZWNvcmRPcGVyYXRpb25zLFxuICBlcXVhbFJlY29yZElkZW50aXRpZXMsXG4gIEluaXRpYWxpemVkUmVjb3JkLFxuICBSZWNvcmRJZGVudGl0eSxcbiAgUmVjb3JkT3BlcmF0aW9uLFxuICBSZWNvcmRRdWVyeUJ1aWxkZXIsXG4gIFJlY29yZFRyYW5zZm9ybSxcbiAgUmVjb3JkVHJhbnNmb3JtQnVpbGRlcixcbiAgUmVjb3JkVHJhbnNmb3JtUmVzdWx0XG59IGZyb20gJ0BvcmJpdC9yZWNvcmRzJztcbmltcG9ydCB7IGNsb25lLCBEaWN0LCB0b0FycmF5IH0gZnJvbSAnQG9yYml0L3V0aWxzJztcblxuY29uc3QgeyBhc3NlcnQsIGRlcHJlY2F0ZSB9ID0gT3JiaXQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5Q2FjaGVNZXJnZU9wdGlvbnMge1xuICBjb2FsZXNjZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5Q2FjaGVTZXR0aW5nczxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZENhY2hlUXVlcnlPcHRpb25zLFxuICBUTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkQ2FjaGVUcmFuc2Zvcm1PcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBRUkQgPSB1bmtub3duLFxuICBUUkQgZXh0ZW5kcyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgPSBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHNcbj4gZXh0ZW5kcyBTeW5jUmVjb3JkQ2FjaGVTZXR0aW5nczxRTywgVE8sIFFCLCBUQj4ge1xuICBiYXNlPzogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPjtcbiAgdHJhY2tVcGRhdGVPcGVyYXRpb25zPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlDYWNoZUNsYXNzPFxuICBRTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkQ2FjaGVRdWVyeU9wdGlvbnMsXG4gIFRPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRDYWNoZVRyYW5zZm9ybU9wdGlvbnMsXG4gIFFCID0gUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBUQiA9IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIsXG4gIFFSRCA9IHVua25vd24sXG4gIFRSRCBleHRlbmRzIFJlY29yZENhY2hlVXBkYXRlRGV0YWlscyA9IFJlY29yZENhY2hlVXBkYXRlRGV0YWlsc1xuPiB7XG4gIG5ldyAoc2V0dGluZ3M6IE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPik6IE1lbW9yeUNhY2hlPFxuICAgIFFPLFxuICAgIFRPLFxuICAgIFFCLFxuICAgIFRCLFxuICAgIFFSRCxcbiAgICBUUkRcbiAgPjtcbn1cblxuLyoqXG4gKiBBIGNhY2hlIHVzZWQgdG8gYWNjZXNzIHJlY29yZHMgaW4gbWVtb3J5LlxuICpcbiAqIEJlY2F1c2UgZGF0YSBpcyBzdG9yZWQgaW4gaW1tdXRhYmxlIG1hcHMsIHRoaXMgdHlwZSBvZiBjYWNoZSBjYW4gYmUgZm9ya2VkXG4gKiBlZmZpY2llbnRseS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1lbW9yeUNhY2hlPFxuICBRTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkQ2FjaGVRdWVyeU9wdGlvbnMsXG4gIFRPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZWNvcmRDYWNoZVRyYW5zZm9ybU9wdGlvbnMsXG4gIFFCID0gUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBUQiA9IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIsXG4gIFFSRCA9IHVua25vd24sXG4gIFRSRCBleHRlbmRzIFJlY29yZENhY2hlVXBkYXRlRGV0YWlscyA9IFJlY29yZENhY2hlVXBkYXRlRGV0YWlsc1xuPiBleHRlbmRzIFN5bmNSZWNvcmRDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+IHtcbiAgcHJvdGVjdGVkIF9iYXNlPzogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPjtcbiAgcHJvdGVjdGVkIF9yZWNvcmRzITogRGljdDxJbW11dGFibGVNYXA8c3RyaW5nLCBJbml0aWFsaXplZFJlY29yZD4+O1xuICBwcm90ZWN0ZWQgX2ludmVyc2VSZWxhdGlvbnNoaXBzITogRGljdDxcbiAgICBJbW11dGFibGVNYXA8c3RyaW5nLCBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdPlxuICA+O1xuICBwcm90ZWN0ZWQgX3VwZGF0ZU9wZXJhdGlvbnM/OiBSZWNvcmRPcGVyYXRpb25bXTtcbiAgcHJvdGVjdGVkIF9pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9uczogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzZXR0aW5nczogTWVtb3J5Q2FjaGVTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+KSB7XG4gICAgY29uc3QgeyBiYXNlLCB0cmFja1VwZGF0ZU9wZXJhdGlvbnMgfSA9IHNldHRpbmdzO1xuXG4gICAgc3VwZXIoc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5fYmFzZSA9IGJhc2U7XG5cbiAgICAvLyBUcmFjayB1cGRhdGUgb3BlcmF0aW9ucyBpZiBleHBsaWNpdGx5IHRvbGQgdG8gZG8gc28sIG9yIGlmIGEgYGJhc2VgXG4gICAgLy8gY2FjaGUgaGFzIGJlZW4gc3BlY2lmaWVkLlxuICAgIHRoaXMuX2lzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zID1cbiAgICAgIHRyYWNrVXBkYXRlT3BlcmF0aW9ucyA/PyBiYXNlICE9PSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cblxuICBnZXQgYmFzZSgpOiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSwgb3IgXCJmb3JrXCIsIGZyb20gYSBcImJhc2VcIiBjYWNoZS5cbiAgICpcbiAgICogVGhlIGZvcmtlZCBjYWNoZSB3aWxsIGhhdmUgdGhlIHNhbWUgYHNjaGVtYWAgYW5kIGBrZXlNYXBgIGFzIGl0cyBiYXNlXG4gICAqIHNvdXJjZS4gVGhlIGZvcmtlZCBjYWNoZSB3aWxsIHN0YXJ0IHdpdGggdGhlIHNhbWUgaW1tdXRhYmxlIGRvY3VtZW50IGFzIHRoZVxuICAgKiBiYXNlIHNvdXJjZS4gSXRzIGNvbnRlbnRzIGFuZCBsb2cgd2lsbCBldm9sdmUgaW5kZXBlbmRlbnRseS5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIGZvcmtlZCBjYWNoZVxuICAgKi9cbiAgZm9yayhcbiAgICBzZXR0aW5nczogUGFydGlhbDxNZW1vcnlDYWNoZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4+ID0ge31cbiAgKTogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPiB7XG4gICAgLy8gcmVxdWlyZWQgc2V0dGluZ3NcbiAgICBzZXR0aW5ncy5iYXNlID0gdGhpcztcbiAgICBzZXR0aW5ncy5zY2hlbWEgPSB0aGlzLnNjaGVtYTtcbiAgICBzZXR0aW5ncy5rZXlNYXAgPSB0aGlzLl9rZXlNYXA7XG5cbiAgICAvLyBjdXN0b21pemFibGUgc2V0dGluZ3NcbiAgICBzZXR0aW5ncy5xdWVyeUJ1aWxkZXIgPz89IHRoaXMuX3F1ZXJ5QnVpbGRlcjtcbiAgICBzZXR0aW5ncy50cmFuc2Zvcm1CdWlsZGVyID8/PSB0aGlzLl90cmFuc2Zvcm1CdWlsZGVyO1xuICAgIHNldHRpbmdzLmRlZmF1bHRRdWVyeU9wdGlvbnMgPz89IHRoaXMuX2RlZmF1bHRRdWVyeU9wdGlvbnM7XG4gICAgc2V0dGluZ3MuZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMgPz89IHRoaXMuX2RlZmF1bHRUcmFuc2Zvcm1PcHRpb25zO1xuICAgIHNldHRpbmdzLnZhbGlkYXRvckZvciA/Pz0gdGhpcy5fdmFsaWRhdG9yRm9yO1xuICAgIGlmIChcbiAgICAgIHNldHRpbmdzLmF1dG9WYWxpZGF0ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBzZXR0aW5ncy52YWxpZGF0b3JGb3IgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgc2V0dGluZ3MuYXV0b1ZhbGlkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNZW1vcnlDYWNoZShcbiAgICAgIHNldHRpbmdzIGFzIE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIHRoZSBvcGVyYXRpb25zIGZyb20gYSBmb3JrZWQgY2FjaGUgYmFjayB0byB0aGlzIGNhY2hlLlxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYHVwZGF0ZWAgd2l0aCB0aGUgb3BlcmF0aW9uc1xuICAgKi9cbiAgbWVyZ2U8UmVxdWVzdERhdGEgZXh0ZW5kcyBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQgPSBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQ+KFxuICAgIGZvcmtlZENhY2hlOiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+LFxuICAgIG9wdGlvbnM/OiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8VE8+ICYgTWVtb3J5Q2FjaGVNZXJnZU9wdGlvbnNcbiAgKTogUmVxdWVzdERhdGE7XG4gIG1lcmdlPFJlcXVlc3REYXRhIGV4dGVuZHMgUmVjb3JkVHJhbnNmb3JtUmVzdWx0ID0gUmVjb3JkVHJhbnNmb3JtUmVzdWx0PihcbiAgICBmb3JrZWRDYWNoZTogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPixcbiAgICBvcHRpb25zOiBGdWxsUmVxdWVzdE9wdGlvbnM8VE8+ICYgTWVtb3J5Q2FjaGVNZXJnZU9wdGlvbnNcbiAgKTogRnVsbFJlc3BvbnNlPFJlcXVlc3REYXRhLCBUUkQsIFJlY29yZE9wZXJhdGlvbj47XG4gIG1lcmdlPFJlcXVlc3REYXRhIGV4dGVuZHMgUmVjb3JkVHJhbnNmb3JtUmVzdWx0ID0gUmVjb3JkVHJhbnNmb3JtUmVzdWx0PihcbiAgICBmb3JrZWRDYWNoZTogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPixcbiAgICBvcHRpb25zPzogVE8gJiBNZW1vcnlDYWNoZU1lcmdlT3B0aW9uc1xuICApOiBSZXF1ZXN0RGF0YSB8IEZ1bGxSZXNwb25zZTxSZXF1ZXN0RGF0YSwgVFJELCBSZWNvcmRPcGVyYXRpb24+IHtcbiAgICBsZXQgeyBjb2FsZXNjZSwgLi4ucmVtYWluaW5nT3B0aW9ucyB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIGFzc2VydChcbiAgICAgICdNZW1vcnlDYWNoZSNtZXJnZSBjYW4gb25seSBtZXJnZSBhIGZvcmtlZCBjYWNoZSB0aGF0IGlzIGNvbmZpZ3VyZWQgd2l0aCBgdHJhY2tVcGRhdGVPcGVyYXRpb25zOiB0cnVlYC4nLFxuICAgICAgZm9ya2VkQ2FjaGUuaXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnNcbiAgICApO1xuXG4gICAgbGV0IG9wcyA9IGZvcmtlZENhY2hlLmdldEFsbFVwZGF0ZU9wZXJhdGlvbnMoKTtcblxuICAgIGlmIChjb2FsZXNjZSAhPT0gZmFsc2UpIHtcbiAgICAgIG9wcyA9IGNvYWxlc2NlUmVjb3JkT3BlcmF0aW9ucyhvcHMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5mdWxsUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZTxSZXF1ZXN0RGF0YT4oXG4gICAgICAgIG9wcyxcbiAgICAgICAgcmVtYWluaW5nT3B0aW9ucyBhcyBGdWxsUmVxdWVzdE9wdGlvbnM8VE8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGU8UmVxdWVzdERhdGE+KFxuICAgICAgICBvcHMsXG4gICAgICAgIHJlbWFpbmluZ09wdGlvbnMgYXMgRGVmYXVsdFJlcXVlc3RPcHRpb25zPFRPPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmViYXNlIHJlc2V0cyB0aGlzIGNhY2hlJ3Mgc3RhdGUgdG8gdGhhdCBvZiBpdHMgYmFzZSBjYWNoZSwgdGhlbiByZS1hcHBsaWVzXG4gICAqIGFueSB0cmFja2VkIHVwZGF0ZSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBSZWJhc2luZyByZXF1aXJlcyBib3RoIGEgYGJhc2VgIGNhY2hlIGFzIHdlbGwgYXMgdHJhY2tpbmcgb2YgdXBkYXRlXG4gICAqIG9wZXJhdGlvbnMgKHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGEgYGJhc2VgIGNhY2hlIGlzIGFzc2lnbmVkKS5cbiAgICovXG4gIHJlYmFzZSgpOiB2b2lkIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5fYmFzZTtcblxuICAgIGFzc2VydChcbiAgICAgICdBIGBiYXNlYCBjYWNoZSBtdXN0IGJlIGRlZmluZWQgZm9yIGByZWJhc2VgIHRvIHdvcmsnLFxuICAgICAgYmFzZSAhPT0gdW5kZWZpbmVkXG4gICAgKTtcblxuICAgIGFzc2VydChcbiAgICAgICdNZW1vcnlDYWNoZSNyZWJhc2UgcmVxdWlyZXMgdGhhdCB0aGUgY2FjaGUgaXMgY29uZmlndXJlZCB3aXRoIGB0cmFja1VwZGF0ZU9wZXJhdGlvbnM6IHRydWVgLicsXG4gICAgICB0aGlzLl9pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9uc1xuICAgICk7XG5cbiAgICAvLyBnZXQgdXBkYXRlIG9wcyBwcmlvciB0byByZXNldHRpbmcgc3RhdGVcbiAgICBsZXQgb3BzID0gdGhpcy5nZXRBbGxVcGRhdGVPcGVyYXRpb25zKCk7XG5cbiAgICAvLyByZXNldCB0aGUgc3RhdGUgb2YgdGhlIGNhY2hlIHRvIG1hdGNoIGl0cyBiYXNlIGNhY2hlXG4gICAgdGhpcy5yZXNldCgpO1xuXG4gICAgLy8gcmVhcHBseSB1cGRhdGUgb3BzXG4gICAgdGhpcy51cGRhdGUob3BzKTtcbiAgfVxuXG4gIGdldFJlY29yZFN5bmMoaWRlbnRpdHk6IFJlY29yZElkZW50aXR5KTogSW5pdGlhbGl6ZWRSZWNvcmQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9yZWNvcmRzW2lkZW50aXR5LnR5cGVdLmdldChpZGVudGl0eS5pZCk7XG4gIH1cblxuICBnZXRSZWNvcmRzU3luYyhcbiAgICB0eXBlT3JJZGVudGl0aWVzPzogc3RyaW5nIHwgUmVjb3JkSWRlbnRpdHlbXVxuICApOiBJbml0aWFsaXplZFJlY29yZFtdIHtcbiAgICBpZiAodHlwZU9ySWRlbnRpdGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLm1vZGVscyk7XG4gICAgICBjb25zdCByZWNvcmRzOiBJbml0aWFsaXplZFJlY29yZFtdID0gW107XG4gICAgICB0eXBlcy5mb3JFYWNoKCh0eXBlKSA9PlxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShcbiAgICAgICAgICByZWNvcmRzLFxuICAgICAgICAgIEFycmF5LmZyb20odGhpcy5fcmVjb3Jkc1t0eXBlXS52YWx1ZXMoKSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZWNvcmRzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGVPcklkZW50aXRpZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB0eXBlOiBzdHJpbmcgPSB0eXBlT3JJZGVudGl0aWVzO1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fcmVjb3Jkc1t0eXBlXS52YWx1ZXMoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlY29yZHM6IEluaXRpYWxpemVkUmVjb3JkW10gPSBbXTtcbiAgICAgIGNvbnN0IGlkZW50aXRpZXM6IFJlY29yZElkZW50aXR5W10gPSB0eXBlT3JJZGVudGl0aWVzO1xuICAgICAgZm9yIChsZXQgaWRlbnRpdHkgb2YgaWRlbnRpdGllcykge1xuICAgICAgICBsZXQgcmVjb3JkID0gdGhpcy5nZXRSZWNvcmRTeW5jKGlkZW50aXR5KTtcbiAgICAgICAgaWYgKHJlY29yZCkge1xuICAgICAgICAgIHJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVjb3JkcztcbiAgICB9XG4gIH1cblxuICBzZXRSZWNvcmRTeW5jKHJlY29yZDogSW5pdGlhbGl6ZWRSZWNvcmQpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWNvcmRzW3JlY29yZC50eXBlXS5zZXQocmVjb3JkLmlkLCByZWNvcmQpO1xuICB9XG5cbiAgc2V0UmVjb3Jkc1N5bmMocmVjb3JkczogSW5pdGlhbGl6ZWRSZWNvcmRbXSk6IHZvaWQge1xuICAgIGxldCB0eXBlZE1hcDogYW55ID0ge307XG4gICAgZm9yIChsZXQgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgIHR5cGVkTWFwW3JlY29yZC50eXBlXSA9IHR5cGVkTWFwW3JlY29yZC50eXBlXSB8fCBbXTtcbiAgICAgIHR5cGVkTWFwW3JlY29yZC50eXBlXS5wdXNoKFtyZWNvcmQuaWQsIHJlY29yZF0pO1xuICAgIH1cbiAgICBmb3IgKGxldCB0eXBlIGluIHR5cGVkTWFwKSB7XG4gICAgICB0aGlzLl9yZWNvcmRzW3R5cGVdLnNldE1hbnkodHlwZWRNYXBbdHlwZV0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVJlY29yZFN5bmMoXG4gICAgcmVjb3JkSWRlbnRpdHk6IFJlY29yZElkZW50aXR5XG4gICk6IEluaXRpYWxpemVkUmVjb3JkIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRNYXAgPSB0aGlzLl9yZWNvcmRzW3JlY29yZElkZW50aXR5LnR5cGVdO1xuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZE1hcC5nZXQocmVjb3JkSWRlbnRpdHkuaWQpO1xuICAgIGlmIChyZWNvcmQpIHtcbiAgICAgIHJlY29yZE1hcC5yZW1vdmUocmVjb3JkSWRlbnRpdHkuaWQpO1xuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICByZW1vdmVSZWNvcmRzU3luYyhyZWNvcmRJZGVudGl0aWVzOiBSZWNvcmRJZGVudGl0eVtdKTogSW5pdGlhbGl6ZWRSZWNvcmRbXSB7XG4gICAgY29uc3QgcmVjb3JkcyA9IFtdO1xuICAgIGNvbnN0IHR5cGVkSWRzOiBhbnkgPSB7fTtcbiAgICBmb3IgKGxldCByZWNvcmRJZGVudGl0eSBvZiByZWNvcmRJZGVudGl0aWVzKSB7XG4gICAgICBsZXQgcmVjb3JkID0gdGhpcy5nZXRSZWNvcmRTeW5jKHJlY29yZElkZW50aXR5KTtcbiAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgcmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgIHR5cGVkSWRzW3JlY29yZC50eXBlXSA9IHR5cGVkSWRzW3JlY29yZC50eXBlXSB8fCBbXTtcbiAgICAgICAgdHlwZWRJZHNbcmVjb3JkLnR5cGVdLnB1c2gocmVjb3JkSWRlbnRpdHkuaWQpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCB0eXBlIGluIHR5cGVkSWRzKSB7XG4gICAgICB0aGlzLl9yZWNvcmRzW3R5cGVdLnJlbW92ZU1hbnkodHlwZWRJZHNbdHlwZV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxuXG4gIGdldEludmVyc2VSZWxhdGlvbnNoaXBzU3luYyhcbiAgICByZWNvcmRJZGVudGl0eU9ySWRlbnRpdGllczogUmVjb3JkSWRlbnRpdHkgfCBSZWNvcmRJZGVudGl0eVtdXG4gICk6IFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5W10ge1xuICAgIGNvbnN0IHJlc3VsdHM6IFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5W10gPSBbXTtcbiAgICBjb25zdCBpZGVudGl0aWVzOiBSZWNvcmRJZGVudGl0eVtdID0gQXJyYXkuaXNBcnJheShcbiAgICAgIHJlY29yZElkZW50aXR5T3JJZGVudGl0aWVzXG4gICAgKVxuICAgICAgPyByZWNvcmRJZGVudGl0eU9ySWRlbnRpdGllc1xuICAgICAgOiBbcmVjb3JkSWRlbnRpdHlPcklkZW50aXRpZXNdO1xuXG4gICAgZm9yIChsZXQgaWRlbnRpdHkgb2YgaWRlbnRpdGllcykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5faW52ZXJzZVJlbGF0aW9uc2hpcHNbaWRlbnRpdHkudHlwZV0uZ2V0KGlkZW50aXR5LmlkKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIGFkZEludmVyc2VSZWxhdGlvbnNoaXBzU3luYyhcbiAgICByZWxhdGlvbnNoaXBzOiBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdXG4gICk6IHZvaWQge1xuICAgIHJlbGF0aW9uc2hpcHMuZm9yRWFjaCgocikgPT4ge1xuICAgICAgbGV0IHJlbHMgPSB0aGlzLl9pbnZlcnNlUmVsYXRpb25zaGlwc1tyLnJlbGF0ZWRSZWNvcmQudHlwZV0uZ2V0KFxuICAgICAgICByLnJlbGF0ZWRSZWNvcmQuaWRcbiAgICAgICk7XG4gICAgICByZWxzID0gcmVscyA/IFsuLi5yZWxzLCBjbG9uZShyKV0gOiBbY2xvbmUocildO1xuICAgICAgdGhpcy5faW52ZXJzZVJlbGF0aW9uc2hpcHNbci5yZWxhdGVkUmVjb3JkLnR5cGVdLnNldChcbiAgICAgICAgci5yZWxhdGVkUmVjb3JkLmlkLFxuICAgICAgICByZWxzXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlSW52ZXJzZVJlbGF0aW9uc2hpcHNTeW5jKFxuICAgIHJlbGF0aW9uc2hpcHM6IFJlY29yZFJlbGF0aW9uc2hpcElkZW50aXR5W11cbiAgKTogdm9pZCB7XG4gICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKChyKSA9PiB7XG4gICAgICBsZXQgcmVscyA9IHRoaXMuX2ludmVyc2VSZWxhdGlvbnNoaXBzW3IucmVsYXRlZFJlY29yZC50eXBlXS5nZXQoXG4gICAgICAgIHIucmVsYXRlZFJlY29yZC5pZFxuICAgICAgKTtcbiAgICAgIGlmIChyZWxzKSB7XG4gICAgICAgIGxldCBuZXdSZWxzID0gcmVscy5maWx0ZXIoXG4gICAgICAgICAgKHJlbCkgPT5cbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIGVxdWFsUmVjb3JkSWRlbnRpdGllcyhyZWwucmVjb3JkLCByLnJlY29yZCkgJiZcbiAgICAgICAgICAgICAgcmVsLnJlbGF0aW9uc2hpcCA9PT0gci5yZWxhdGlvbnNoaXBcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5faW52ZXJzZVJlbGF0aW9uc2hpcHNbci5yZWxhdGVkUmVjb3JkLnR5cGVdLnNldChcbiAgICAgICAgICByLnJlbGF0ZWRSZWNvcmQuaWQsXG4gICAgICAgICAgbmV3UmVsc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgY2FjaGUncyB0byBpdHMgaW5pdGlhbCBzdGF0ZSwgd2hpY2ggd2lsbCBiZSBlaXRoZXIgZW1wdHkgb3IgYVxuICAgKiBjbG9uZSBvZiBpdHMgYGJhc2VgIGNhY2hlLCBpZiBpdCBoYXMgb25lLlxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgbGV0IGJhc2UgPSB0aGlzLl9iYXNlO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBkZXByZWNhdGUoXG4gICAgICAgICdDYWxsaW5nIE1lbW9yeUNhY2hlI3Jlc2V0IHdpdGggYSBgYmFzZWAgYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCBjb25maWd1cmUgeW91ciBNZW1vcnlDYWNoZSB3aXRoIGEgYGJhc2VgIGNhY2hlLidcbiAgICAgICk7XG4gICAgICBiYXNlID8/PSBhcmd1bWVudHNbMF07XG4gICAgfVxuXG4gICAgdGhpcy5fcmVjb3JkcyA9IHt9O1xuXG4gICAgaWYgKHRoaXMuX2lzVHJhY2tpbmdVcGRhdGVPcGVyYXRpb25zKSB7XG4gICAgICB0aGlzLl91cGRhdGVPcGVyYXRpb25zID0gW107XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXModGhpcy5fc2NoZW1hLm1vZGVscykuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgbGV0IGJhc2VSZWNvcmRzID0gYmFzZT8uX3JlY29yZHNbdHlwZV07XG5cbiAgICAgIHRoaXMuX3JlY29yZHNbdHlwZV0gPSBuZXcgSW1tdXRhYmxlTWFwPHN0cmluZywgSW5pdGlhbGl6ZWRSZWNvcmQ+KFxuICAgICAgICBiYXNlUmVjb3Jkc1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3Jlc2V0SW52ZXJzZVJlbGF0aW9uc2hpcHMoYmFzZSk7XG5cbiAgICB0aGlzLl9wcm9jZXNzb3JzLmZvckVhY2goKHByb2Nlc3NvcikgPT4gcHJvY2Vzc29yLnJlc2V0KGJhc2UpKTtcblxuICAgIHRoaXMuZW1pdCgncmVzZXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGdyYWRlIHRoZSBjYWNoZSBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2NoZW1hLlxuICAgKi9cbiAgdXBncmFkZSgpOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyh0aGlzLl9zY2hlbWEubW9kZWxzKS5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3JlY29yZHNbdHlwZV0pIHtcbiAgICAgICAgdGhpcy5fcmVjb3Jkc1t0eXBlXSA9IG5ldyBJbW11dGFibGVNYXA8c3RyaW5nLCBJbml0aWFsaXplZFJlY29yZD4oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX3Jlc2V0SW52ZXJzZVJlbGF0aW9uc2hpcHMoKTtcblxuICAgIGZvciAobGV0IHByb2Nlc3NvciBvZiB0aGlzLl9wcm9jZXNzb3JzKSB7XG4gICAgICBwcm9jZXNzb3IudXBncmFkZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnM7XG4gIH1cblxuICBnZXRBbGxVcGRhdGVPcGVyYXRpb25zKCk6IFJlY29yZE9wZXJhdGlvbltdIHtcbiAgICBhc3NlcnQoXG4gICAgICAnTWVtb3J5Q2FjaGUjZ2V0QWxsVXBkYXRlT3BlcmF0aW9ucyByZXF1aXJlcyB0aGF0IGNhY2hlIGJlIGNvbmZpZ3VyZWQgd2l0aCBgdHJhY2tVcGRhdGVPcGVyYXRpb25zOiB0cnVlYC4nLFxuICAgICAgdGhpcy5faXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnNcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZU9wZXJhdGlvbnMgYXMgUmVjb3JkT3BlcmF0aW9uW107XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBQcm90ZWN0ZWQgbWV0aG9kc1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIHByb3RlY3RlZCBfdXBkYXRlPFxuICAgIFJlcXVlc3REYXRhIGV4dGVuZHMgUmVjb3JkVHJhbnNmb3JtUmVzdWx0ID0gUmVjb3JkVHJhbnNmb3JtUmVzdWx0XG4gID4oXG4gICAgdHJhbnNmb3JtOiBSZWNvcmRUcmFuc2Zvcm0sXG4gICAgb3B0aW9ucz86IFRPXG4gICk6IEZ1bGxSZXNwb25zZTxSZXF1ZXN0RGF0YSwgVFJELCBSZWNvcmRPcGVyYXRpb24+IHtcbiAgICBpZiAodGhpcy5faXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnMpIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KFxuICAgICAgICB0aGlzLl91cGRhdGVPcGVyYXRpb25zLFxuICAgICAgICB0b0FycmF5KHRyYW5zZm9ybS5vcGVyYXRpb25zKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLl91cGRhdGU8UmVxdWVzdERhdGE+KHRyYW5zZm9ybSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgYF9nZXRUcmFuc2Zvcm1CdWZmZXJgIG9uIGJhc2UgYFN5bmNSZWNvcmRDYWNoZWAgdG8gcHJvdmlkZSBhXG4gICAqIGB0cmFuc2Zvcm1CdWZmZXJgIGlmIGEgY3VzdG9tIG9uZSBoYXNuJ3QgYmVlbiBwcm92aWRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yXG4gICAqIHNldHRpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2dldFRyYW5zZm9ybUJ1ZmZlcigpOiBSZWNvcmRUcmFuc2Zvcm1CdWZmZXIge1xuICAgIGlmICh0aGlzLl90cmFuc2Zvcm1CdWZmZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEsIGtleU1hcCB9ID0gdGhpcztcbiAgICAgIHRoaXMuX3RyYW5zZm9ybUJ1ZmZlciA9IG5ldyBTaW1wbGVSZWNvcmRUcmFuc2Zvcm1CdWZmZXIoe1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGtleU1hcFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1CdWZmZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3Jlc2V0SW52ZXJzZVJlbGF0aW9uc2hpcHMoXG4gICAgYmFzZT86IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaW52ZXJzZVJlbGF0aW9uc2hpcHM6IERpY3Q8XG4gICAgICBJbW11dGFibGVNYXA8c3RyaW5nLCBSZWNvcmRSZWxhdGlvbnNoaXBJZGVudGl0eVtdPlxuICAgID4gPSB7fTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLl9zY2hlbWEubW9kZWxzKS5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgICBsZXQgYmFzZVJlbGF0aW9uc2hpcHMgPSBiYXNlICYmIGJhc2UuX2ludmVyc2VSZWxhdGlvbnNoaXBzW3R5cGVdO1xuICAgICAgaW52ZXJzZVJlbGF0aW9uc2hpcHNbdHlwZV0gPSBuZXcgSW1tdXRhYmxlTWFwKGJhc2VSZWxhdGlvbnNoaXBzKTtcbiAgICB9KTtcbiAgICB0aGlzLl9pbnZlcnNlUmVsYXRpb25zaGlwcyA9IGludmVyc2VSZWxhdGlvbnNoaXBzO1xuICB9XG59XG4iXX0=

@@ -16,3 +16,3 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {

constructor(settings) {
var _a, _b, _c, _d, _e, _f, _g;
var _a, _b, _c, _d, _e, _f, _g, _h;
const { keyMap, schema, base } = settings;

@@ -33,3 +33,5 @@ settings.name = (_a = settings.name) !== null && _a !== void 0 ? _a : 'memory';

(_f = cacheSettings.defaultTransformOptions) !== null && _f !== void 0 ? _f : (cacheSettings.defaultTransformOptions = this.defaultTransformOptions);
if (cacheSettings.validatorFor === undefined &&
(_g = cacheSettings.autoValidate) !== null && _g !== void 0 ? _g : (cacheSettings.autoValidate = settings.autoValidate);
if (cacheSettings.autoValidate !== false &&
cacheSettings.validatorFor === undefined &&
cacheSettings.validators === undefined) {

@@ -43,3 +45,3 @@ cacheSettings.validatorFor = this._validatorFor;

}
const cacheClass = (_g = settings.cacheClass) !== null && _g !== void 0 ? _g : MemoryCache;
const cacheClass = (_h = settings.cacheClass) !== null && _h !== void 0 ? _h : MemoryCache;
this._cache = new cacheClass(cacheSettings);

@@ -141,5 +143,9 @@ }

(_b = settings.transformBuilder) !== null && _b !== void 0 ? _b : (settings.transformBuilder = this._transformBuilder);
(_c = settings.validatorFor) !== null && _c !== void 0 ? _c : (settings.validatorFor = this._validatorFor);
(_d = settings.defaultQueryOptions) !== null && _d !== void 0 ? _d : (settings.defaultQueryOptions = this._defaultQueryOptions);
(_e = settings.defaultTransformOptions) !== null && _e !== void 0 ? _e : (settings.defaultTransformOptions = this._defaultTransformOptions);
(_c = settings.defaultQueryOptions) !== null && _c !== void 0 ? _c : (settings.defaultQueryOptions = this._defaultQueryOptions);
(_d = settings.defaultTransformOptions) !== null && _d !== void 0 ? _d : (settings.defaultTransformOptions = this._defaultTransformOptions);
(_e = settings.validatorFor) !== null && _e !== void 0 ? _e : (settings.validatorFor = this._validatorFor);
if (settings.autoValidate === undefined &&
settings.validatorFor === undefined) {
settings.autoValidate = false;
}
return new MemorySource_1(settings);

@@ -330,2 +336,2 @@ }

export { MemorySource };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZW1vcnktc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBSUwsU0FBUyxFQUlULFFBQVEsRUFDUixTQUFTLEVBQ1YsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUNMLHdCQUF3QixFQVF4QixZQUFZLEVBUWIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQVEsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxXQUFXLEVBR1osTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQztBQTRDcEMsSUFBYSxZQUFZLG9CQUF6QixNQUFhLFlBUVgsU0FBUSxZQUE0QjtJQVlwQyxZQUFZLFFBQXdEOztRQUNsRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFMUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFBLFFBQVEsQ0FBQyxJQUFJLG1DQUFJLFFBQVEsQ0FBQztRQUUxQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUU3QixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFD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QUFFLENBQUMsQ0FBQztZQUN0RCxJQUFJLGlCQUFpQixFQUFFO2dCQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGLENBQUE7QUFsZFksWUFBWTtJQUh4QixRQUFRO0lBQ1IsU0FBUztJQUNULFNBQVM7R0FDRyxZQUFZLENBa2R4QjtTQWxkWSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNzZXJ0aW9uLCBPcmJpdCB9IGZyb20gJ0BvcmJpdC9jb3JlJztcbmltcG9ydCB7XG4gIERlZmF1bHRSZXF1ZXN0T3B0aW9ucyxcbiAgRnVsbFJlcXVlc3RPcHRpb25zLFxuICBGdWxsUmVzcG9uc2UsXG4gIHF1ZXJ5YWJsZSxcbiAgUmVxdWVzdE9wdGlvbnMsXG4gIFJlc2V0dGFibGUsXG4gIFJlc3BvbnNlSGludHMsXG4gIHN5bmNhYmxlLFxuICB1cGRhdGFibGVcbn0gZnJvbSAnQG9yYml0L2RhdGEnO1xuaW1wb3J0IHsgUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzIH0gZnJvbSAnQG9yYml0L3JlY29yZC1jYWNoZSc7XG5pbXBvcnQge1xuICBjb2FsZXNjZVJlY29yZE9wZXJhdGlvbnMsXG4gIFJlY29yZE9wZXJhdGlvbixcbiAgUmVjb3JkT3BlcmF0aW9uUmVzdWx0LFxuICBSZWNvcmRRdWVyeSxcbiAgUmVjb3JkUXVlcnlhYmxlLFxuICBSZWNvcmRRdWVyeUJ1aWxkZXIsXG4gIFJlY29yZFF1ZXJ5RXhwcmVzc2lvblJlc3VsdCxcbiAgUmVjb3JkUXVlcnlSZXN1bHQsXG4gIFJlY29yZFNvdXJjZSxcbiAgUmVjb3JkU291cmNlUXVlcnlPcHRpb25zLFxuICBSZWNvcmRTb3VyY2VTZXR0aW5ncyxcbiAgUmVjb3JkU3luY2FibGUsXG4gIFJlY29yZFRyYW5zZm9ybSxcbiAgUmVjb3JkVHJhbnNmb3JtQnVpbGRlcixcbiAgUmVjb3JkVHJhbnNmb3JtUmVzdWx0LFxuICBSZWNvcmRVcGRhdGFibGVcbn0gZnJvbSAnQG9yYml0L3JlY29yZHMnO1xuaW1wb3J0IHsgRGljdCwgdG9BcnJheSB9IGZyb20gJ0BvcmJpdC91dGlscyc7XG5pbXBvcnQge1xuICBNZW1vcnlDYWNoZSxcbiAgTWVtb3J5Q2FjaGVDbGFzcyxcbiAgTWVtb3J5Q2FjaGVTZXR0aW5nc1xufSBmcm9tICcuL21lbW9yeS1jYWNoZSc7XG5cbmNvbnN0IHsgYXNzZXJ0LCBkZXByZWNhdGUgfSA9IE9yYml0O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVNvdXJjZVNldHRpbmdzPFxuICBRTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkU291cmNlUXVlcnlPcHRpb25zLFxuICBUTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVxdWVzdE9wdGlvbnMsXG4gIFFCID0gUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBUQiA9IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIsXG4gIFFSRCA9IHVua25vd24sXG4gIFRSRCBleHRlbmRzIFJlY29yZENhY2hlVXBkYXRlRGV0YWlscyA9IFJlY29yZENhY2hlVXBkYXRlRGV0YWlsc1xuPiBleHRlbmRzIFJlY29yZFNvdXJjZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCPiB7XG4gIGJhc2U/OiBNZW1vcnlTb3VyY2U8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPjtcbiAgY2FjaGVDbGFzcz86IE1lbW9yeUNhY2hlQ2xhc3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPjtcbiAgY2FjaGVTZXR0aW5ncz86IFBhcnRpYWw8TWVtb3J5Q2FjaGVTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlTb3VyY2VNZXJnZU9wdGlvbnMge1xuICBjb2FsZXNjZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHNpbmNlIHYwLjE3XG4gICAqL1xuICBzaW5jZVRyYW5zZm9ybUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2MC4xNywgaW5jbHVkZSB0cmFuc2Zvcm0gb3B0aW9ucyBhbG9uZ3NpZGUgbWVyZ2Ugb3B0aW9ucyBpbnN0ZWFkXG4gICAqL1xuICB0cmFuc2Zvcm1PcHRpb25zPzogUmVxdWVzdE9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5U291cmNlPFxuICBRTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkU291cmNlUXVlcnlPcHRpb25zLFxuICBUTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVxdWVzdE9wdGlvbnMsXG4gIFFCID0gUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBUQiA9IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIsXG4gIFFSRCA9IHVua25vd24sXG4gIFRSRCBleHRlbmRzIFJlY29yZENhY2hlVXBkYXRlRGV0YWlscyA9IFJlY29yZENhY2hlVXBkYXRlRGV0YWlsc1xuPiBleHRlbmRzIFJlY29yZFNvdXJjZTxRTywgVE8sIFFCLCBUQj4sXG4gICAgUmVjb3JkU3luY2FibGUsXG4gICAgUmVjb3JkUXVlcnlhYmxlPFFSRCwgUUIsIFFPPixcbiAgICBSZWNvcmRVcGRhdGFibGU8VFJELCBUQiwgVE8+IHt9XG5cbkBzeW5jYWJsZVxuQHF1ZXJ5YWJsZVxuQHVwZGF0YWJsZVxuZXhwb3J0IGNsYXNzIE1lbW9yeVNvdXJjZTxcbiAgICBRTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVjb3JkU291cmNlUXVlcnlPcHRpb25zLFxuICAgIFRPIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucyxcbiAgICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgICBUQiA9IFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIsXG4gICAgUVJEID0gdW5rbm93bixcbiAgICBUUkQgZXh0ZW5kcyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgPSBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHNcbiAgPlxuICBleHRlbmRzIFJlY29yZFNvdXJjZTxRTywgVE8sIFFCLCBUQj5cbiAgaW1wbGVtZW50c1xuICAgIFJlY29yZFN5bmNhYmxlLFxuICAgIFJlY29yZFF1ZXJ5YWJsZTxRUkQsIFFCLCBRTz4sXG4gICAgUmVjb3JkVXBkYXRhYmxlPFRSRCwgVEIsIFRPPixcbiAgICBSZXNldHRhYmxlIHtcbiAgcHJvdGVjdGVkIF9jYWNoZTogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPjtcbiAgcHJvdGVjdGVkIF9iYXNlPzogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIHByb3RlY3RlZCBfZm9ya1BvaW50Pzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3RyYW5zZm9ybXM6IERpY3Q8UmVjb3JkVHJhbnNmb3JtPjtcbiAgcHJvdGVjdGVkIF90cmFuc2Zvcm1JbnZlcnNlczogRGljdDxSZWNvcmRPcGVyYXRpb25bXT47XG5cbiAgY29uc3RydWN0b3Ioc2V0dGluZ3M6IE1lbW9yeVNvdXJjZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4pIHtcbiAgICBjb25zdCB7IGtleU1hcCwgc2NoZW1hLCBiYXNlIH0gPSBzZXR0aW5ncztcblxuICAgIHNldHRpbmdzLm5hbWUgPSBzZXR0aW5ncy5uYW1lID8/ICdtZW1vcnknO1xuXG4gICAgc3VwZXIoc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5fdHJhbnNmb3JtcyA9IHt9O1xuICAgIHRoaXMuX3RyYW5zZm9ybUludmVyc2VzID0ge307XG5cbiAgICB0aGlzLnRyYW5zZm9ybUxvZy5vbignY2xlYXInLCB0aGlzLl9sb2dDbGVhcmVkLmJpbmQodGhpcykpO1xuICAgIHRoaXMudHJhbnNmb3JtTG9nLm9uKCd0cnVuY2F0ZScsIHRoaXMuX2xvZ1RydW5jYXRlZC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnRyYW5zZm9ybUxvZy5vbigncm9sbGJhY2snLCB0aGlzLl9sb2dSb2xsZWRiYWNrLmJpbmQodGhpcykpO1xuXG4gICAgbGV0IGNhY2hlU2V0dGluZ3M6IFBhcnRpYWw8TWVtb3J5Q2FjaGVTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+PiA9XG4gICAgICBzZXR0aW5ncy5jYWNoZVNldHRpbmdzID8/IHt9O1xuICAgIGNhY2hlU2V0dGluZ3Muc2NoZW1hID0gc2NoZW1hO1xuICAgIGNhY2hlU2V0dGluZ3Mua2V5TWFwID0ga2V5TWFwO1xuICAgIGNhY2hlU2V0dGluZ3MucXVlcnlCdWlsZGVyID8/PSB0aGlzLnF1ZXJ5QnVpbGRlcjtcbiAgICBjYWNoZVNldHRpbmdzLnRyYW5zZm9ybUJ1aWxkZXIgPz89IHRoaXMudHJhbnNmb3JtQnVpbGRlcjtcbiAgICBjYWNoZVNldHRpbmdzLmRlZmF1bHRRdWVyeU9wdGlvbnMgPz89IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucztcbiAgICBjYWNoZVNldHRpbmdzLmRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zID8/PSB0aGlzLmRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zO1xuXG4gICAgaWYgKFxuICAgICAgY2FjaGVTZXR0aW5ncy52YWxpZGF0b3JGb3IgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgY2FjaGVTZXR0aW5ncy52YWxpZGF0b3JzID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNhY2hlU2V0dGluZ3MudmFsaWRhdG9yRm9yID0gdGhpcy5fdmFsaWRhdG9yRm9yO1xuICAgIH1cblxuICAgIGlmIChiYXNlKSB7XG4gICAgICB0aGlzLl9iYXNlID0gYmFzZTtcbiAgICAgIHRoaXMuX2ZvcmtQb2ludCA9IGJhc2UudHJhbnNmb3JtTG9nLmhlYWQ7XG4gICAgICBjYWNoZVNldHRpbmdzLmJhc2UgPSBiYXNlLmNhY2hlO1xuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlQ2xhc3MgPSBzZXR0aW5ncy5jYWNoZUNsYXNzID8/IE1lbW9yeUNhY2hlO1xuICAgIHRoaXMuX2NhY2hlID0gbmV3IGNhY2hlQ2xhc3MoXG4gICAgICBjYWNoZVNldHRpbmdzIGFzIE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPlxuICAgICk7XG4gIH1cblxuICBnZXQgY2FjaGUoKTogTWVtb3J5Q2FjaGU8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICB9XG5cbiAgZ2V0IGJhc2UoKTogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9iYXNlO1xuICB9XG5cbiAgZ2V0IGZvcmtQb2ludCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JrUG9pbnQ7XG4gIH1cblxuICBhc3luYyB1cGdyYWRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2NhY2hlLnVwZ3JhZGUoKTtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFN5bmNhYmxlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGFzeW5jIF9zeW5jKHRyYW5zZm9ybTogUmVjb3JkVHJhbnNmb3JtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnRyYW5zZm9ybUxvZy5jb250YWlucyh0cmFuc2Zvcm0uaWQpKSB7XG4gICAgICB0aGlzLl9hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgYXdhaXQgdGhpcy50cmFuc2Zvcm1lZChbdHJhbnNmb3JtXSk7XG4gICAgfVxuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gVXBkYXRhYmxlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGFzeW5jIF91cGRhdGUoXG4gICAgdHJhbnNmb3JtOiBSZWNvcmRUcmFuc2Zvcm0sXG4gICAgaGludHM/OiBSZXNwb25zZUhpbnRzPFJlY29yZFRyYW5zZm9ybVJlc3VsdCwgVFJEPlxuICApOiBQcm9taXNlPEZ1bGxSZXNwb25zZTxSZWNvcmRUcmFuc2Zvcm1SZXN1bHQsIFRSRCwgUmVjb3JkT3BlcmF0aW9uPj4ge1xuICAgIGxldCByZXN1bHRzOiBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQ7XG4gICAgY29uc3QgcmVzcG9uc2U6IEZ1bGxSZXNwb25zZTxcbiAgICAgIFJlY29yZFRyYW5zZm9ybVJlc3VsdCxcbiAgICAgIFRSRCxcbiAgICAgIFJlY29yZE9wZXJhdGlvblxuICAgID4gPSB7fTtcblxuICAgIGlmICghdGhpcy50cmFuc2Zvcm1Mb2cuY29udGFpbnModHJhbnNmb3JtLmlkKSkge1xuICAgICAgcmVzdWx0cyA9IHRoaXMuX2FwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICByZXNwb25zZS50cmFuc2Zvcm1zID0gW3RyYW5zZm9ybV07XG4gICAgfVxuXG4gICAgaWYgKGhpbnRzPy5kYXRhKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm0ub3BlcmF0aW9ucykpIHtcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICdNZW1vcnlTb3VyY2UjdXBkYXRlOiBgaGludHMuZGF0YWAgbXVzdCBiZSBhbiBhcnJheSBpZiBgdHJhbnNmb3JtLm9wZXJhdGlvbnNgIGlzIGFuIGFycmF5JyxcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGhpbnRzLmRhdGEpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IChoaW50cy5kYXRhIGFzIFJlY29yZE9wZXJhdGlvblJlc3VsdFtdKS5tYXAoKGgpID0+XG4gICAgICAgICAgdGhpcy5fcmV0cmlldmVPcGVyYXRpb25SZXN1bHQoaClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSB0aGlzLl9yZXRyaWV2ZU9wZXJhdGlvblJlc3VsdChcbiAgICAgICAgICBoaW50cy5kYXRhIGFzIFJlY29yZE9wZXJhdGlvblJlc3VsdFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVzdWx0cykge1xuICAgICAgcmVzcG9uc2UuZGF0YSA9IHJlc3VsdHM7XG4gICAgfVxuXG4gICAgaWYgKGhpbnRzPy5kZXRhaWxzKSB7XG4gICAgICByZXNwb25zZS5kZXRhaWxzID0gaGludHMuZGV0YWlscztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBRdWVyeWFibGUgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgYXN5bmMgX3F1ZXJ5KFxuICAgIHF1ZXJ5OiBSZWNvcmRRdWVyeSxcbiAgICBoaW50cz86IFJlc3BvbnNlSGludHM8UmVjb3JkUXVlcnlSZXN1bHQsIFFSRD5cbiAgKTogUHJvbWlzZTxGdWxsUmVzcG9uc2U8UmVjb3JkUXVlcnlSZXN1bHQsIFFSRCwgUmVjb3JkT3BlcmF0aW9uPj4ge1xuICAgIGxldCByZXNwb25zZTogRnVsbFJlc3BvbnNlPFJlY29yZFF1ZXJ5UmVzdWx0LCBRUkQsIFJlY29yZE9wZXJhdGlvbj47XG5cbiAgICBpZiAoaGludHM/LmRhdGEpIHtcbiAgICAgIHJlc3BvbnNlID0ge307XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeS5leHByZXNzaW9ucykpIHtcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICdNZW1vcnlTb3VyY2UjcXVlcnk6IGBoaW50cy5kYXRhYCBtdXN0IGJlIGFuIGFycmF5IGlmIGBxdWVyeS5leHByZXNzaW9uc2AgaXMgYW4gYXJyYXknLFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoaGludHMuZGF0YSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXNwb25zZS5kYXRhID0gKGhpbnRzLmRhdGEgYXMgUmVjb3JkUXVlcnlFeHByZXNzaW9uUmVzdWx0W10pLm1hcCgoaCkgPT5cbiAgICAgICAgICB0aGlzLl9yZXRyaWV2ZVF1ZXJ5RXhwcmVzc2lvblJlc3VsdChoKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHRoaXMuX3JldHJpZXZlUXVlcnlFeHByZXNzaW9uUmVzdWx0KFxuICAgICAgICAgIGhpbnRzLmRhdGEgYXMgUmVjb3JkUXVlcnlFeHByZXNzaW9uUmVzdWx0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3BvbnNlID0gdGhpcy5fY2FjaGUucXVlcnkocXVlcnksIHtcbiAgICAgICAgZnVsbFJlc3BvbnNlOiB0cnVlXG4gICAgICB9IGFzIEZ1bGxSZXF1ZXN0T3B0aW9uczxRTz4pO1xuICAgIH1cblxuICAgIGlmIChoaW50cz8uZGV0YWlscykge1xuICAgICAgcmVzcG9uc2UuZGV0YWlscyA9IGhpbnRzLmRldGFpbHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUHVibGljIG1ldGhvZHNcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUsIG9yIFwiZm9ya1wiLCBmcm9tIGEgXCJiYXNlXCIgc291cmNlLlxuICAgKlxuICAgKiBUaGUgZm9ya2VkIHNvdXJjZSB3aWxsIGhhdmUgdGhlIHNhbWUgYHNjaGVtYWAgYW5kIGBrZXlNYXBgIGFzIGl0cyBiYXNlIHNvdXJjZS5cbiAgICogVGhlIGZvcmtlZCBzb3VyY2UncyBjYWNoZSB3aWxsIHN0YXJ0IHdpdGggdGhlIHNhbWUgaW1tdXRhYmxlIGRvY3VtZW50IGFzXG4gICAqIHRoZSBiYXNlIHNvdXJjZS4gSXRzIGNvbnRlbnRzIGFuZCBsb2cgd2lsbCBldm9sdmUgaW5kZXBlbmRlbnRseS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGZvcmtlZCBzb3VyY2UuXG4gICAqL1xuICBmb3JrKFxuICAgIHNldHRpbmdzOiBQYXJ0aWFsPE1lbW9yeVNvdXJjZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4+ID0ge31cbiAgKTogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4ge1xuICAgIC8vIHJlcXVpcmVkIHNldHRpbmdzXG4gICAgc2V0dGluZ3MuYmFzZSA9IHRoaXM7XG4gICAgc2V0dGluZ3Muc2NoZW1hID0gdGhpcy5zY2hlbWE7XG4gICAgc2V0dGluZ3Mua2V5TWFwID0gdGhpcy5rZXlNYXA7XG5cbiAgICAvLyBjdXN0b21pemFibGUgc2V0dGluZ3NcbiAgICBzZXR0aW5ncy5xdWVyeUJ1aWxkZXIgPz89IHRoaXMuX3F1ZXJ5QnVpbGRlcjtcbiAgICBzZXR0aW5ncy50cmFuc2Zvcm1CdWlsZGVyID8/PSB0aGlzLl90cmFuc2Zvcm1CdWlsZGVyO1xuICAgIHNldHRpbmdzLnZhbGlkYXRvckZvciA/Pz0gdGhpcy5fdmFsaWRhdG9yRm9yO1xuICAgIHNldHRpbmdzLmRlZmF1bHRRdWVyeU9wdGlvbnMgPz89IHRoaXMuX2RlZmF1bHRRdWVyeU9wdGlvbnM7XG4gICAgc2V0dGluZ3MuZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMgPz89IHRoaXMuX2RlZmF1bHRUcmFuc2Zvcm1PcHRpb25zO1xuXG4gICAgcmV0dXJuIG5ldyBNZW1vcnlTb3VyY2U8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPihcbiAgICAgIHNldHRpbmdzIGFzIE1lbW9yeVNvdXJjZVNldHRpbmdzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD5cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHRyYW5zZm9ybXMgZnJvbSBhIGZvcmtlZCBzb3VyY2UgYmFjayBpbnRvIGEgYmFzZSBzb3VyY2UuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBvZiB0aGUgb3BlcmF0aW9ucyBmcm9tIGFsbCBvZiB0aGUgdHJhbnNmb3JtcyBpbiB0aGUgZm9ya2VkXG4gICAqIHNvdXJjZSdzIGhpc3Rvcnkgd2lsbCBiZSByZWR1Y2VkIGludG8gYSBzaW5nbGUgdHJhbnNmb3JtLiBBIHN1YnNldCBvZlxuICAgKiBvcGVyYXRpb25zIGNhbiBiZSBzZWxlY3RlZCBieSBzcGVjaWZ5aW5nIHRoZSBgc2luY2VUcmFuc2Zvcm1JZGAgb3B0aW9uLlxuICAgKlxuICAgKiBUaGUgYGNvYWxlc2NlYCBvcHRpb24gY29udHJvbHMgd2hldGhlciBvcGVyYXRpb25zIGFyZSBjb2FsZXNjZWQgaW50byBhXG4gICAqIG1pbmltYWwgZXF1aXZhbGVudCBzZXQgYmVmb3JlIGJlaW5nIHJlZHVjZWQgaW50byBhIHRyYW5zZm9ybS5cbiAgICpcbiAgICogQHBhcmFtIGZvcmtlZFNvdXJjZSAtIFRoZSBzb3VyY2UgdG8gbWVyZ2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gTWVyZ2Ugb3B0aW9uc1xuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGNhbGxpbmcgYHVwZGF0ZSgpYCB3aXRoIHRoZSBmb3JrZWQgdHJhbnNmb3Jtcy5cbiAgICovXG4gIG1lcmdlPFJlcXVlc3REYXRhIGV4dGVuZHMgUmVjb3JkVHJhbnNmb3JtUmVzdWx0ID0gUmVjb3JkVHJhbnNmb3JtUmVzdWx0PihcbiAgICBmb3JrZWRTb3VyY2U6IE1lbW9yeVNvdXJjZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+LFxuICAgIG9wdGlvbnM/OiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8VE8+ICYgTWVtb3J5U291cmNlTWVyZ2VPcHRpb25zXG4gICk6IFByb21pc2U8UmVxdWVzdERhdGE+O1xuICBtZXJnZTxSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdD4oXG4gICAgZm9ya2VkU291cmNlOiBNZW1vcnlTb3VyY2U8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPixcbiAgICBvcHRpb25zOiBGdWxsUmVxdWVzdE9wdGlvbnM8VE8+ICYgTWVtb3J5U291cmNlTWVyZ2VPcHRpb25zXG4gICk6IFByb21pc2U8RnVsbFJlc3BvbnNlPFJlcXVlc3REYXRhLCBUUkQsIFJlY29yZE9wZXJhdGlvbj4+O1xuICBhc3luYyBtZXJnZTxcbiAgICBSZXF1ZXN0RGF0YSBleHRlbmRzIFJlY29yZFRyYW5zZm9ybVJlc3VsdCA9IFJlY29yZFRyYW5zZm9ybVJlc3VsdFxuICA+KFxuICAgIGZvcmtlZFNvdXJjZTogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4sXG4gICAgb3B0aW9ucz86IFRPICYgTWVtb3J5U291cmNlTWVyZ2VPcHRpb25zXG4gICk6IFByb21pc2U8XG4gICAgUmVjb3JkVHJhbnNmb3JtUmVzdWx0IHwgRnVsbFJlc3BvbnNlPFJlcXVlc3REYXRhLCBUUkQsIFJlY29yZE9wZXJhdGlvbj5cbiAgPiB7XG4gICAgbGV0IHsgY29hbGVzY2UsIHNpbmNlVHJhbnNmb3JtSWQsIHRyYW5zZm9ybU9wdGlvbnMsIC4uLnJlbWFpbmluZ09wdGlvbnMgfSA9XG4gICAgICBvcHRpb25zID8/IHt9O1xuXG4gICAgbGV0IHJlcXVlc3RPcHRpb25zOiBUTztcbiAgICBpZiAodHJhbnNmb3JtT3B0aW9ucykge1xuICAgICAgZGVwcmVjYXRlKFxuICAgICAgICAnSW4gTWVtb3J5U291cmNlI21lcmdlLCBwYXNzaW5nIGB0cmFuc2Zvcm1PcHRpb25zYCBuZXN0ZWQgd2l0aGluIGBvcHRpb25zYCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCBpbmNsdWRlIHRoZW0gZGlyZWN0bHkgYWxvbmdzaWRlIG90aGVyIG9wdGlvbnMuJ1xuICAgICAgKTtcbiAgICAgIHJlcXVlc3RPcHRpb25zID0gdHJhbnNmb3JtT3B0aW9ucyBhcyBUTztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdE9wdGlvbnMgPSAocmVtYWluaW5nT3B0aW9ucyA/PyB7fSkgYXMgVE87XG4gICAgfVxuXG4gICAgbGV0IG9wczogUmVjb3JkT3BlcmF0aW9uW10gPSBbXTtcblxuICAgIGlmIChmb3JrZWRTb3VyY2UuY2FjaGUuaXNUcmFja2luZ1VwZGF0ZU9wZXJhdGlvbnMpIHtcbiAgICAgIG9wcyA9IGZvcmtlZFNvdXJjZS5jYWNoZS5nZXRBbGxVcGRhdGVPcGVyYXRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0cmFuc2Zvcm1zOiBSZWNvcmRUcmFuc2Zvcm1bXTtcbiAgICAgIGlmIChzaW5jZVRyYW5zZm9ybUlkKSB7XG4gICAgICAgIGRlcHJlY2F0ZShcbiAgICAgICAgICAnSW4gTWVtb3J5U291cmNlI21lcmdlLCBwYXNzaW5nIGBzaW5jZVRyYW5zZm9ybUlkYCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCBjYWxsIGB1cGRhdGVgIHdpdGggYSBjdXN0b20gdHJhbnNmb3JtL29wZXJhdGlvbnMuJ1xuICAgICAgICApO1xuICAgICAgICB0cmFuc2Zvcm1zID0gZm9ya2VkU291cmNlLmdldFRyYW5zZm9ybXNTaW5jZShzaW5jZVRyYW5zZm9ybUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybXMgPSBmb3JrZWRTb3VyY2UuZ2V0QWxsVHJhbnNmb3JtcygpO1xuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1zLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkob3BzLCB0b0FycmF5KHQub3BlcmF0aW9ucykpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvYWxlc2NlICE9PSBmYWxzZSkge1xuICAgICAgb3BzID0gY29hbGVzY2VSZWNvcmRPcGVyYXRpb25zKG9wcyk7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zLmZ1bGxSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlPFJlcXVlc3REYXRhPihcbiAgICAgICAgb3BzLFxuICAgICAgICByZXF1ZXN0T3B0aW9ucyBhcyBGdWxsUmVxdWVzdE9wdGlvbnM8VE8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGU8UmVxdWVzdERhdGE+KFxuICAgICAgICBvcHMsXG4gICAgICAgIHJlcXVlc3RPcHRpb25zIGFzIERlZmF1bHRSZXF1ZXN0T3B0aW9uczxUTz5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYmFzZSB3b3JrcyBzaW1pbGFybHkgdG8gYSBnaXQgcmViYXNlOlxuICAgKlxuICAgKiBBZnRlciBhIHNvdXJjZSBpcyBmb3JrZWQsIHRoZXJlIGlzIGEgcGFyZW50LSBhbmQgYSBjaGlsZC1zb3VyY2UuIEJvdGggbWF5XG4gICAqIGJlIHVwZGF0ZWQgd2l0aCB0cmFuc2Zvcm1zLiBXaGVuIGBjaGlsZFNvdXJjZS5yZWJhc2UoKWAgaXMgY2FsbGVkLCB0aGVcbiAgICogY2hpbGQgc291cmNlJ3Mgc3RhdGUgd2lsbCBiZSByZXNldCB0byBtYXRjaCB0aGUgY3VycmVudCBzdGF0ZSBvZiBpdHNcbiAgICogcGFyZW50LCBhbmQgdGhlbiBhbnkgbG9jYWxseSBtYWRlIHRyYW5zZm9ybXMgd2lsbCBiZSByZXBsYXllZCBvbiB0aGUgY2hpbGRcbiAgICogc291cmNlLlxuICAgKi9cbiAgcmViYXNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLl9iYXNlO1xuXG4gICAgaWYgKCFiYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uKFxuICAgICAgICAnQSBgYmFzZWAgc291cmNlIG11c3QgYmUgZGVmaW5lZCBmb3IgYHJlYmFzZWAgdG8gd29yaydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBjYWNoZSB0byBtYXRjaCB0aGUgYmFzZSBjYWNoZVxuICAgIHRoaXMuY2FjaGUucmVzZXQoKTtcblxuICAgIC8vIHJlcGxheSBhbGwgbG9jYWxseSBtYWRlIHRyYW5zZm9ybXNcbiAgICB0aGlzLmdldEFsbFRyYW5zZm9ybXMoKS5mb3JFYWNoKCh0KSA9PiB0aGlzLl9hcHBseVRyYW5zZm9ybSh0KSk7XG5cbiAgICAvLyByZXNldCB0aGUgZm9yayBwb2ludFxuICAgIHRoaXMuX2ZvcmtQb2ludCA9IGJhc2UudHJhbnNmb3JtTG9nLmhlYWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHNvdXJjZSdzIGNhY2hlIGFuZCB0cmFuc2Zvcm0gbG9nIHRvIGl0cyBpbml0aWFsIHN0YXRlLCB3aGljaCB3aWxsXG4gICAqIGJlIGVpdGhlciBlbXB0eSBvciBhIG1hdGNoaW5nIGl0cyBgYmFzZWAsIGlmIGl0IGhhcyBvbmUuXG4gICAqL1xuICBhc3luYyByZXNldCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyByZXNldCB0aGUgc3RhdGUgb2YgdGhlIGNhY2hlICh3aGljaCB3aWxsIG1hdGNoIGEgYmFzZSBjYWNoZSwgaWYgcHJlc2VudClcbiAgICB0aGlzLmNhY2hlLnJlc2V0KCk7XG5cbiAgICAvLyByZXNldCB0aGUgZm9yayBwb2ludFxuICAgIHRoaXMuX2ZvcmtQb2ludCA9IHRoaXMuX2Jhc2UgPyB0aGlzLl9iYXNlLnRyYW5zZm9ybUxvZy5oZWFkIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gY2xlYXIgdGhlIHRyYW5zZm9ybSBsb2csIHdoaWNoIGluIHR1cm4gd2lsbCBjbGVhciBhbnkgdHJhY2tlZCB0cmFuc2Zvcm1zXG4gICAgYXdhaXQgdGhpcy50cmFuc2Zvcm1Mb2cuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xscyBiYWNrIHRoZSBzb3VyY2UgdG8gYSBwYXJ0aWN1bGFyIGB0cmFuc2Zvcm1JZGAuXG4gICAqXG4gICAqIGByZWxhdGl2ZVBvc2l0aW9uYCBjYW4gYmUgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIHVzZWQgdG8gc3BlY2lmeSBhXG4gICAqIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGB0cmFuc2Zvcm1JZGAuXG4gICAqL1xuICByb2xsYmFjayh0cmFuc2Zvcm1JZDogc3RyaW5nLCByZWxhdGl2ZVBvc2l0aW9uID0gMCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUxvZy5yb2xsYmFjayh0cmFuc2Zvcm1JZCwgcmVsYXRpdmVQb3NpdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgbG9nZ2VkIHRyYW5zZm9ybXMgc2luY2UgYSBwYXJ0aWN1bGFyIGB0cmFuc2Zvcm1JZGAuXG4gICAqL1xuICBnZXRUcmFuc2Zvcm1zU2luY2UodHJhbnNmb3JtSWQ6IHN0cmluZyk6IFJlY29yZFRyYW5zZm9ybVtdIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Mb2dcbiAgICAgIC5hZnRlcih0cmFuc2Zvcm1JZClcbiAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLl90cmFuc2Zvcm1zW2lkXSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgc2luY2UgdjAuMTcsIGNhbGwgYGdldFRyYW5zZm9ybXNTaW5jZWAgaW5zdGVhZFxuICAgKi9cbiAgdHJhbnNmb3Jtc1NpbmNlKHRyYW5zZm9ybUlkOiBzdHJpbmcpOiBSZWNvcmRUcmFuc2Zvcm1bXSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgJ01lbW9yeVNvdXJjZSN0cmFuc2Zvcm1zU2luY2UgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIGNhbGwgYHNvdXJjZS5nZXRUcmFuc2Zvcm1zU2luY2UodHJhbmZvcm1JZClgIGluc3RlYWQuJ1xuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNmb3Jtc1NpbmNlKHRyYW5zZm9ybUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBsb2dnZWQgdHJhbnNmb3Jtcy5cbiAgICovXG4gIGdldEFsbFRyYW5zZm9ybXMoKTogUmVjb3JkVHJhbnNmb3JtW10ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUxvZy5lbnRyaWVzLm1hcCgoaWQpID0+IHRoaXMuX3RyYW5zZm9ybXNbaWRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2MC4xNywgY2FsbCBgZ2V0QWxsVHJhbnNmb3Jtc2AgaW5zdGVhZFxuICAgKi9cbiAgYWxsVHJhbnNmb3JtcygpOiBSZWNvcmRUcmFuc2Zvcm1bXSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgJ01lbW9yeVNvdXJjZSNhbGxUcmFuc2Zvcm1zIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFBsZWFzZSBjYWxsIGBzb3VyY2UuZ2V0QWxsVHJhbnNmb3JtcygpYCBpbnN0ZWFkLidcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmdldEFsbFRyYW5zZm9ybXMoKTtcbiAgfVxuXG4gIGdldFRyYW5zZm9ybSh0cmFuc2Zvcm1JZDogc3RyaW5nKTogUmVjb3JkVHJhbnNmb3JtIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3Jtc1t0cmFuc2Zvcm1JZF07XG4gIH1cblxuICBnZXRJbnZlcnNlT3BlcmF0aW9ucyh0cmFuc2Zvcm1JZDogc3RyaW5nKTogUmVjb3JkT3BlcmF0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1JbnZlcnNlc1t0cmFuc2Zvcm1JZF07XG4gIH1cblxuICBnZXQgZGVmYXVsdFF1ZXJ5T3B0aW9ucygpOiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8UU8+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc3VwZXIuZGVmYXVsdFF1ZXJ5T3B0aW9ucztcbiAgfVxuXG4gIHNldCBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnM6IERlZmF1bHRSZXF1ZXN0T3B0aW9uczxRTz4gfCB1bmRlZmluZWQpIHtcbiAgICBzdXBlci5kZWZhdWx0UXVlcnlPcHRpb25zID0gdGhpcy5fY2FjaGUuZGVmYXVsdFF1ZXJ5T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBnZXQgZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMoKTogRGVmYXVsdFJlcXVlc3RPcHRpb25zPFRPPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHN1cGVyLmRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zO1xuICB9XG5cbiAgc2V0IGRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zKG9wdGlvbnM6IERlZmF1bHRSZXF1ZXN0T3B0aW9uczxUTz4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucyA9IHRoaXMuX2NhY2hlLmRlZmF1bHRUcmFuc2Zvcm1PcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFByb3RlY3RlZCBtZXRob2RzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgcHJvdGVjdGVkIF9yZXRyaWV2ZVF1ZXJ5RXhwcmVzc2lvblJlc3VsdChcbiAgICByZXN1bHQ6IFJlY29yZFF1ZXJ5RXhwcmVzc2lvblJlc3VsdFxuICApOiBSZWNvcmRRdWVyeUV4cHJlc3Npb25SZXN1bHQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5nZXRSZWNvcmRzU3luYyhyZXN1bHQpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZ2V0UmVjb3JkU3luYyhyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfcmV0cmlldmVPcGVyYXRpb25SZXN1bHQoXG4gICAgcmVzdWx0OiBSZWNvcmRPcGVyYXRpb25SZXN1bHRcbiAgKTogUmVjb3JkT3BlcmF0aW9uUmVzdWx0IHtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZ2V0UmVjb3JkU3luYyhyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtOiBSZWNvcmRUcmFuc2Zvcm0pOiBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQge1xuICAgIGNvbnN0IHsgZGF0YSwgZGV0YWlscyB9ID0gdGhpcy5jYWNoZS51cGRhdGUodHJhbnNmb3JtLCB7XG4gICAgICBmdWxsUmVzcG9uc2U6IHRydWVcbiAgICB9IGFzIEZ1bGxSZXF1ZXN0T3B0aW9uczxUTz4pO1xuICAgIHRoaXMuX3RyYW5zZm9ybXNbdHJhbnNmb3JtLmlkXSA9IHRyYW5zZm9ybTtcbiAgICB0aGlzLl90cmFuc2Zvcm1JbnZlcnNlc1t0cmFuc2Zvcm0uaWRdID0gZGV0YWlscz8uaW52ZXJzZU9wZXJhdGlvbnMgPz8gW107XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2NsZWFyVHJhbnNmb3JtRnJvbUhpc3RvcnkodHJhbnNmb3JtSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLl90cmFuc2Zvcm1zW3RyYW5zZm9ybUlkXTtcbiAgICBkZWxldGUgdGhpcy5fdHJhbnNmb3JtSW52ZXJzZXNbdHJhbnNmb3JtSWRdO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9sb2dDbGVhcmVkKCk6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zZm9ybXMgPSB7fTtcbiAgICB0aGlzLl90cmFuc2Zvcm1JbnZlcnNlcyA9IHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIF9sb2dUcnVuY2F0ZWQoXG4gICAgdHJhbnNmb3JtSWQ6IHN0cmluZyxcbiAgICByZWxhdGl2ZVBvc2l0aW9uOiBudW1iZXIsXG4gICAgcmVtb3ZlZDogc3RyaW5nW11cbiAgKTogdm9pZCB7XG4gICAgcmVtb3ZlZC5mb3JFYWNoKChpZCkgPT4gdGhpcy5fY2xlYXJUcmFuc2Zvcm1Gcm9tSGlzdG9yeShpZCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9sb2dSb2xsZWRiYWNrKFxuICAgIHRyYW5zZm9ybUlkOiBzdHJpbmcsXG4gICAgcmVsYXRpdmVQb3NpdGlvbjogbnVtYmVyLFxuICAgIHJlbW92ZWQ6IHN0cmluZ1tdXG4gICk6IHZvaWQge1xuICAgIHJlbW92ZWQucmV2ZXJzZSgpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICBjb25zdCBpbnZlcnNlT3BlcmF0aW9ucyA9IHRoaXMuX3RyYW5zZm9ybUludmVyc2VzW2lkXTtcbiAgICAgIGlmIChpbnZlcnNlT3BlcmF0aW9ucykge1xuICAgICAgICB0aGlzLmNhY2hlLnVwZGF0ZShpbnZlcnNlT3BlcmF0aW9ucyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jbGVhclRyYW5zZm9ybUZyb21IaXN0b3J5KGlkKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZW1vcnktc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBSUwsU0FBUyxFQUlULFFBQVEsRUFDUixTQUFTLEVBQ1YsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUNMLHdCQUF3QixFQVF4QixZQUFZLEVBUWIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQVEsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxXQUFXLEVBR1osTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQztBQTRDcEMsSUFBYSxZQUFZLG9CQUF6QixNQUFhLFlBUVgsU0FBUSxZQUE0QjtJQVlwQyxZQUFZLFFBQXdEOztRQUNsRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFMUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFBLFFBQVEsQ0FBQyxJQUFJLG1DQUFJLFFBQVEsQ0FBQztRQUUxQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUU3QixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFD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RUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFUyxjQUFjLENBQ3RCLFdBQW1CLEVBQ25CLGdCQUF3QixFQUN4QixPQUFpQjtRQUVqQixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEQsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUN0QztZQUNELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFBO0FBMWRZLFlBQVk7SUFIeEIsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0dBQ0csWUFBWSxDQTBkeEI7U0ExZFksWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzc2VydGlvbiwgT3JiaXQgfSBmcm9tICdAb3JiaXQvY29yZSc7XG5pbXBvcnQge1xuICBEZWZhdWx0UmVxdWVzdE9wdGlvbnMsXG4gIEZ1bGxSZXF1ZXN0T3B0aW9ucyxcbiAgRnVsbFJlc3BvbnNlLFxuICBxdWVyeWFibGUsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBSZXNldHRhYmxlLFxuICBSZXNwb25zZUhpbnRzLFxuICBzeW5jYWJsZSxcbiAgdXBkYXRhYmxlXG59IGZyb20gJ0BvcmJpdC9kYXRhJztcbmltcG9ydCB7IFJlY29yZENhY2hlVXBkYXRlRGV0YWlscyB9IGZyb20gJ0BvcmJpdC9yZWNvcmQtY2FjaGUnO1xuaW1wb3J0IHtcbiAgY29hbGVzY2VSZWNvcmRPcGVyYXRpb25zLFxuICBSZWNvcmRPcGVyYXRpb24sXG4gIFJlY29yZE9wZXJhdGlvblJlc3VsdCxcbiAgUmVjb3JkUXVlcnksXG4gIFJlY29yZFF1ZXJ5YWJsZSxcbiAgUmVjb3JkUXVlcnlCdWlsZGVyLFxuICBSZWNvcmRRdWVyeUV4cHJlc3Npb25SZXN1bHQsXG4gIFJlY29yZFF1ZXJ5UmVzdWx0LFxuICBSZWNvcmRTb3VyY2UsXG4gIFJlY29yZFNvdXJjZVF1ZXJ5T3B0aW9ucyxcbiAgUmVjb3JkU291cmNlU2V0dGluZ3MsXG4gIFJlY29yZFN5bmNhYmxlLFxuICBSZWNvcmRUcmFuc2Zvcm0sXG4gIFJlY29yZFRyYW5zZm9ybUJ1aWxkZXIsXG4gIFJlY29yZFRyYW5zZm9ybVJlc3VsdCxcbiAgUmVjb3JkVXBkYXRhYmxlXG59IGZyb20gJ0BvcmJpdC9yZWNvcmRzJztcbmltcG9ydCB7IERpY3QsIHRvQXJyYXkgfSBmcm9tICdAb3JiaXQvdXRpbHMnO1xuaW1wb3J0IHtcbiAgTWVtb3J5Q2FjaGUsXG4gIE1lbW9yeUNhY2hlQ2xhc3MsXG4gIE1lbW9yeUNhY2hlU2V0dGluZ3Ncbn0gZnJvbSAnLi9tZW1vcnktY2FjaGUnO1xuXG5jb25zdCB7IGFzc2VydCwgZGVwcmVjYXRlIH0gPSBPcmJpdDtcblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlTb3VyY2VTZXR0aW5nczxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZFNvdXJjZVF1ZXJ5T3B0aW9ucyxcbiAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlcXVlc3RPcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBRUkQgPSB1bmtub3duLFxuICBUUkQgZXh0ZW5kcyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgPSBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHNcbj4gZXh0ZW5kcyBSZWNvcmRTb3VyY2VTZXR0aW5nczxRTywgVE8sIFFCLCBUQj4ge1xuICBiYXNlPzogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIGNhY2hlQ2xhc3M/OiBNZW1vcnlDYWNoZUNsYXNzPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIGNhY2hlU2V0dGluZ3M/OiBQYXJ0aWFsPE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5U291cmNlTWVyZ2VPcHRpb25zIHtcbiAgY29hbGVzY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2MC4xN1xuICAgKi9cbiAgc2luY2VUcmFuc2Zvcm1JZD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgc2luY2UgdjAuMTcsIGluY2x1ZGUgdHJhbnNmb3JtIG9wdGlvbnMgYWxvbmdzaWRlIG1lcmdlIG9wdGlvbnMgaW5zdGVhZFxuICAgKi9cbiAgdHJhbnNmb3JtT3B0aW9ucz86IFJlcXVlc3RPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVNvdXJjZTxcbiAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZFNvdXJjZVF1ZXJ5T3B0aW9ucyxcbiAgVE8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlcXVlc3RPcHRpb25zLFxuICBRQiA9IFJlY29yZFF1ZXJ5QnVpbGRlcixcbiAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICBRUkQgPSB1bmtub3duLFxuICBUUkQgZXh0ZW5kcyBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHMgPSBSZWNvcmRDYWNoZVVwZGF0ZURldGFpbHNcbj4gZXh0ZW5kcyBSZWNvcmRTb3VyY2U8UU8sIFRPLCBRQiwgVEI+LFxuICAgIFJlY29yZFN5bmNhYmxlLFxuICAgIFJlY29yZFF1ZXJ5YWJsZTxRUkQsIFFCLCBRTz4sXG4gICAgUmVjb3JkVXBkYXRhYmxlPFRSRCwgVEIsIFRPPiB7fVxuXG5Ac3luY2FibGVcbkBxdWVyeWFibGVcbkB1cGRhdGFibGVcbmV4cG9ydCBjbGFzcyBNZW1vcnlTb3VyY2U8XG4gICAgUU8gZXh0ZW5kcyBSZXF1ZXN0T3B0aW9ucyA9IFJlY29yZFNvdXJjZVF1ZXJ5T3B0aW9ucyxcbiAgICBUTyBleHRlbmRzIFJlcXVlc3RPcHRpb25zID0gUmVxdWVzdE9wdGlvbnMsXG4gICAgUUIgPSBSZWNvcmRRdWVyeUJ1aWxkZXIsXG4gICAgVEIgPSBSZWNvcmRUcmFuc2Zvcm1CdWlsZGVyLFxuICAgIFFSRCA9IHVua25vd24sXG4gICAgVFJEIGV4dGVuZHMgUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzID0gUmVjb3JkQ2FjaGVVcGRhdGVEZXRhaWxzXG4gID5cbiAgZXh0ZW5kcyBSZWNvcmRTb3VyY2U8UU8sIFRPLCBRQiwgVEI+XG4gIGltcGxlbWVudHNcbiAgICBSZWNvcmRTeW5jYWJsZSxcbiAgICBSZWNvcmRRdWVyeWFibGU8UVJELCBRQiwgUU8+LFxuICAgIFJlY29yZFVwZGF0YWJsZTxUUkQsIFRCLCBUTz4sXG4gICAgUmVzZXR0YWJsZSB7XG4gIHByb3RlY3RlZCBfY2FjaGU6IE1lbW9yeUNhY2hlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD47XG4gIHByb3RlY3RlZCBfYmFzZT86IE1lbW9yeVNvdXJjZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+O1xuICBwcm90ZWN0ZWQgX2ZvcmtQb2ludD86IHN0cmluZztcbiAgcHJvdGVjdGVkIF90cmFuc2Zvcm1zOiBEaWN0PFJlY29yZFRyYW5zZm9ybT47XG4gIHByb3RlY3RlZCBfdHJhbnNmb3JtSW52ZXJzZXM6IERpY3Q8UmVjb3JkT3BlcmF0aW9uW10+O1xuXG4gIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBNZW1vcnlTb3VyY2VTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+KSB7XG4gICAgY29uc3QgeyBrZXlNYXAsIHNjaGVtYSwgYmFzZSB9ID0gc2V0dGluZ3M7XG5cbiAgICBzZXR0aW5ncy5uYW1lID0gc2V0dGluZ3MubmFtZSA/PyAnbWVtb3J5JztcblxuICAgIHN1cGVyKHNldHRpbmdzKTtcblxuICAgIHRoaXMuX3RyYW5zZm9ybXMgPSB7fTtcbiAgICB0aGlzLl90cmFuc2Zvcm1JbnZlcnNlcyA9IHt9O1xuXG4gICAgdGhpcy50cmFuc2Zvcm1Mb2cub24oJ2NsZWFyJywgdGhpcy5fbG9nQ2xlYXJlZC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnRyYW5zZm9ybUxvZy5vbigndHJ1bmNhdGUnLCB0aGlzLl9sb2dUcnVuY2F0ZWQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy50cmFuc2Zvcm1Mb2cub24oJ3JvbGxiYWNrJywgdGhpcy5fbG9nUm9sbGVkYmFjay5iaW5kKHRoaXMpKTtcblxuICAgIGxldCBjYWNoZVNldHRpbmdzOiBQYXJ0aWFsPE1lbW9yeUNhY2hlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPj4gPVxuICAgICAgc2V0dGluZ3MuY2FjaGVTZXR0aW5ncyA/PyB7fTtcbiAgICBjYWNoZVNldHRpbmdzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICBjYWNoZVNldHRpbmdzLmtleU1hcCA9IGtleU1hcDtcbiAgICBjYWNoZVNldHRpbmdzLnF1ZXJ5QnVpbGRlciA/Pz0gdGhpcy5xdWVyeUJ1aWxkZXI7XG4gICAgY2FjaGVTZXR0aW5ncy50cmFuc2Zvcm1CdWlsZGVyID8/PSB0aGlzLnRyYW5zZm9ybUJ1aWxkZXI7XG4gICAgY2FjaGVTZXR0aW5ncy5kZWZhdWx0UXVlcnlPcHRpb25zID8/PSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnM7XG4gICAgY2FjaGVTZXR0aW5ncy5kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucyA/Pz0gdGhpcy5kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucztcbiAgICBjYWNoZVNldHRpbmdzLmF1dG9WYWxpZGF0ZSA/Pz0gc2V0dGluZ3MuYXV0b1ZhbGlkYXRlO1xuXG4gICAgaWYgKFxuICAgICAgY2FjaGVTZXR0aW5ncy5hdXRvVmFsaWRhdGUgIT09IGZhbHNlICYmXG4gICAgICBjYWNoZVNldHRpbmdzLnZhbGlkYXRvckZvciA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBjYWNoZVNldHRpbmdzLnZhbGlkYXRvcnMgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY2FjaGVTZXR0aW5ncy52YWxpZGF0b3JGb3IgPSB0aGlzLl92YWxpZGF0b3JGb3I7XG4gICAgfVxuXG4gICAgaWYgKGJhc2UpIHtcbiAgICAgIHRoaXMuX2Jhc2UgPSBiYXNlO1xuICAgICAgdGhpcy5fZm9ya1BvaW50ID0gYmFzZS50cmFuc2Zvcm1Mb2cuaGVhZDtcbiAgICAgIGNhY2hlU2V0dGluZ3MuYmFzZSA9IGJhc2UuY2FjaGU7XG4gICAgfVxuXG4gICAgY29uc3QgY2FjaGVDbGFzcyA9IHNldHRpbmdzLmNhY2hlQ2xhc3MgPz8gTWVtb3J5Q2FjaGU7XG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgY2FjaGVDbGFzcyhcbiAgICAgIGNhY2hlU2V0dGluZ3MgYXMgTWVtb3J5Q2FjaGVTZXR0aW5nczxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+XG4gICAgKTtcbiAgfVxuXG4gIGdldCBjYWNoZSgpOiBNZW1vcnlDYWNoZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGU7XG4gIH1cblxuICBnZXQgYmFzZSgpOiBNZW1vcnlTb3VyY2U8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Jhc2U7XG4gIH1cblxuICBnZXQgZm9ya1BvaW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmtQb2ludDtcbiAgfVxuXG4gIGFzeW5jIHVwZ3JhZGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2FjaGUudXBncmFkZSgpO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gU3luY2FibGUgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgYXN5bmMgX3N5bmModHJhbnNmb3JtOiBSZWNvcmRUcmFuc2Zvcm0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMudHJhbnNmb3JtTG9nLmNvbnRhaW5zKHRyYW5zZm9ybS5pZCkpIHtcbiAgICAgIHRoaXMuX2FwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICBhd2FpdCB0aGlzLnRyYW5zZm9ybWVkKFt0cmFuc2Zvcm1dKTtcbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBVcGRhdGFibGUgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgYXN5bmMgX3VwZGF0ZShcbiAgICB0cmFuc2Zvcm06IFJlY29yZFRyYW5zZm9ybSxcbiAgICBoaW50cz86IFJlc3BvbnNlSGludHM8UmVjb3JkVHJhbnNmb3JtUmVzdWx0LCBUUkQ+XG4gICk6IFByb21pc2U8RnVsbFJlc3BvbnNlPFJlY29yZFRyYW5zZm9ybVJlc3VsdCwgVFJELCBSZWNvcmRPcGVyYXRpb24+PiB7XG4gICAgbGV0IHJlc3VsdHM6IFJlY29yZFRyYW5zZm9ybVJlc3VsdDtcbiAgICBjb25zdCByZXNwb25zZTogRnVsbFJlc3BvbnNlPFxuICAgICAgUmVjb3JkVHJhbnNmb3JtUmVzdWx0LFxuICAgICAgVFJELFxuICAgICAgUmVjb3JkT3BlcmF0aW9uXG4gICAgPiA9IHt9O1xuXG4gICAgaWYgKCF0aGlzLnRyYW5zZm9ybUxvZy5jb250YWlucyh0cmFuc2Zvcm0uaWQpKSB7XG4gICAgICByZXN1bHRzID0gdGhpcy5fYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgIHJlc3BvbnNlLnRyYW5zZm9ybXMgPSBbdHJhbnNmb3JtXTtcbiAgICB9XG5cbiAgICBpZiAoaGludHM/LmRhdGEpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRyYW5zZm9ybS5vcGVyYXRpb25zKSkge1xuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgJ01lbW9yeVNvdXJjZSN1cGRhdGU6IGBoaW50cy5kYXRhYCBtdXN0IGJlIGFuIGFycmF5IGlmIGB0cmFuc2Zvcm0ub3BlcmF0aW9uc2AgaXMgYW4gYXJyYXknLFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoaGludHMuZGF0YSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXNwb25zZS5kYXRhID0gKGhpbnRzLmRhdGEgYXMgUmVjb3JkT3BlcmF0aW9uUmVzdWx0W10pLm1hcCgoaCkgPT5cbiAgICAgICAgICB0aGlzLl9yZXRyaWV2ZU9wZXJhdGlvblJlc3VsdChoKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHRoaXMuX3JldHJpZXZlT3BlcmF0aW9uUmVzdWx0KFxuICAgICAgICAgIGhpbnRzLmRhdGEgYXMgUmVjb3JkT3BlcmF0aW9uUmVzdWx0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXN1bHRzKSB7XG4gICAgICByZXNwb25zZS5kYXRhID0gcmVzdWx0cztcbiAgICB9XG5cbiAgICBpZiAoaGludHM/LmRldGFpbHMpIHtcbiAgICAgIHJlc3BvbnNlLmRldGFpbHMgPSBoaW50cy5kZXRhaWxzO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFF1ZXJ5YWJsZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBhc3luYyBfcXVlcnkoXG4gICAgcXVlcnk6IFJlY29yZFF1ZXJ5LFxuICAgIGhpbnRzPzogUmVzcG9uc2VIaW50czxSZWNvcmRRdWVyeVJlc3VsdCwgUVJEPlxuICApOiBQcm9taXNlPEZ1bGxSZXNwb25zZTxSZWNvcmRRdWVyeVJlc3VsdCwgUVJELCBSZWNvcmRPcGVyYXRpb24+PiB7XG4gICAgbGV0IHJlc3BvbnNlOiBGdWxsUmVzcG9uc2U8UmVjb3JkUXVlcnlSZXN1bHQsIFFSRCwgUmVjb3JkT3BlcmF0aW9uPjtcblxuICAgIGlmIChoaW50cz8uZGF0YSkge1xuICAgICAgcmVzcG9uc2UgPSB7fTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5LmV4cHJlc3Npb25zKSkge1xuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgJ01lbW9yeVNvdXJjZSNxdWVyeTogYGhpbnRzLmRhdGFgIG11c3QgYmUgYW4gYXJyYXkgaWYgYHF1ZXJ5LmV4cHJlc3Npb25zYCBpcyBhbiBhcnJheScsXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShoaW50cy5kYXRhKVxuICAgICAgICApO1xuXG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSAoaGludHMuZGF0YSBhcyBSZWNvcmRRdWVyeUV4cHJlc3Npb25SZXN1bHRbXSkubWFwKChoKSA9PlxuICAgICAgICAgIHRoaXMuX3JldHJpZXZlUXVlcnlFeHByZXNzaW9uUmVzdWx0KGgpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZS5kYXRhID0gdGhpcy5fcmV0cmlldmVRdWVyeUV4cHJlc3Npb25SZXN1bHQoXG4gICAgICAgICAgaGludHMuZGF0YSBhcyBSZWNvcmRRdWVyeUV4cHJlc3Npb25SZXN1bHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzcG9uc2UgPSB0aGlzLl9jYWNoZS5xdWVyeShxdWVyeSwge1xuICAgICAgICBmdWxsUmVzcG9uc2U6IHRydWVcbiAgICAgIH0gYXMgRnVsbFJlcXVlc3RPcHRpb25zPFFPPik7XG4gICAgfVxuXG4gICAgaWYgKGhpbnRzPy5kZXRhaWxzKSB7XG4gICAgICByZXNwb25zZS5kZXRhaWxzID0gaGludHMuZGV0YWlscztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBQdWJsaWMgbWV0aG9kc1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSwgb3IgXCJmb3JrXCIsIGZyb20gYSBcImJhc2VcIiBzb3VyY2UuXG4gICAqXG4gICAqIFRoZSBmb3JrZWQgc291cmNlIHdpbGwgaGF2ZSB0aGUgc2FtZSBgc2NoZW1hYCBhbmQgYGtleU1hcGAgYXMgaXRzIGJhc2Ugc291cmNlLlxuICAgKiBUaGUgZm9ya2VkIHNvdXJjZSdzIGNhY2hlIHdpbGwgc3RhcnQgd2l0aCB0aGUgc2FtZSBpbW11dGFibGUgZG9jdW1lbnQgYXNcbiAgICogdGhlIGJhc2Ugc291cmNlLiBJdHMgY29udGVudHMgYW5kIGxvZyB3aWxsIGV2b2x2ZSBpbmRlcGVuZGVudGx5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZm9ya2VkIHNvdXJjZS5cbiAgICovXG4gIGZvcmsoXG4gICAgc2V0dGluZ3M6IFBhcnRpYWw8TWVtb3J5U291cmNlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPj4gPSB7fVxuICApOiBNZW1vcnlTb3VyY2U8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPiB7XG4gICAgLy8gcmVxdWlyZWQgc2V0dGluZ3NcbiAgICBzZXR0aW5ncy5iYXNlID0gdGhpcztcbiAgICBzZXR0aW5ncy5zY2hlbWEgPSB0aGlzLnNjaGVtYTtcbiAgICBzZXR0aW5ncy5rZXlNYXAgPSB0aGlzLmtleU1hcDtcblxuICAgIC8vIGN1c3RvbWl6YWJsZSBzZXR0aW5nc1xuICAgIHNldHRpbmdzLnF1ZXJ5QnVpbGRlciA/Pz0gdGhpcy5fcXVlcnlCdWlsZGVyO1xuICAgIHNldHRpbmdzLnRyYW5zZm9ybUJ1aWxkZXIgPz89IHRoaXMuX3RyYW5zZm9ybUJ1aWxkZXI7XG4gICAgc2V0dGluZ3MuZGVmYXVsdFF1ZXJ5T3B0aW9ucyA/Pz0gdGhpcy5fZGVmYXVsdFF1ZXJ5T3B0aW9ucztcbiAgICBzZXR0aW5ncy5kZWZhdWx0VHJhbnNmb3JtT3B0aW9ucyA/Pz0gdGhpcy5fZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnM7XG4gICAgc2V0dGluZ3MudmFsaWRhdG9yRm9yID8/PSB0aGlzLl92YWxpZGF0b3JGb3I7XG4gICAgaWYgKFxuICAgICAgc2V0dGluZ3MuYXV0b1ZhbGlkYXRlID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHNldHRpbmdzLnZhbGlkYXRvckZvciA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBzZXR0aW5ncy5hdXRvVmFsaWRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1lbW9yeVNvdXJjZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+KFxuICAgICAgc2V0dGluZ3MgYXMgTWVtb3J5U291cmNlU2V0dGluZ3M8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgdHJhbnNmb3JtcyBmcm9tIGEgZm9ya2VkIHNvdXJjZSBiYWNrIGludG8gYSBiYXNlIHNvdXJjZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgYWxsIG9mIHRoZSBvcGVyYXRpb25zIGZyb20gYWxsIG9mIHRoZSB0cmFuc2Zvcm1zIGluIHRoZSBmb3JrZWRcbiAgICogc291cmNlJ3MgaGlzdG9yeSB3aWxsIGJlIHJlZHVjZWQgaW50byBhIHNpbmdsZSB0cmFuc2Zvcm0uIEEgc3Vic2V0IG9mXG4gICAqIG9wZXJhdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGBzaW5jZVRyYW5zZm9ybUlkYCBvcHRpb24uXG4gICAqXG4gICAqIFRoZSBgY29hbGVzY2VgIG9wdGlvbiBjb250cm9scyB3aGV0aGVyIG9wZXJhdGlvbnMgYXJlIGNvYWxlc2NlZCBpbnRvIGFcbiAgICogbWluaW1hbCBlcXVpdmFsZW50IHNldCBiZWZvcmUgYmVpbmcgcmVkdWNlZCBpbnRvIGEgdHJhbnNmb3JtLlxuICAgKlxuICAgKiBAcGFyYW0gZm9ya2VkU291cmNlIC0gVGhlIHNvdXJjZSB0byBtZXJnZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBNZXJnZSBvcHRpb25zXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgY2FsbGluZyBgdXBkYXRlKClgIHdpdGggdGhlIGZvcmtlZCB0cmFuc2Zvcm1zLlxuICAgKi9cbiAgbWVyZ2U8UmVxdWVzdERhdGEgZXh0ZW5kcyBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQgPSBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQ+KFxuICAgIGZvcmtlZFNvdXJjZTogTWVtb3J5U291cmNlPFFPLCBUTywgUUIsIFRCLCBRUkQsIFRSRD4sXG4gICAgb3B0aW9ucz86IERlZmF1bHRSZXF1ZXN0T3B0aW9uczxUTz4gJiBNZW1vcnlTb3VyY2VNZXJnZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxSZXF1ZXN0RGF0YT47XG4gIG1lcmdlPFJlcXVlc3REYXRhIGV4dGVuZHMgUmVjb3JkVHJhbnNmb3JtUmVzdWx0ID0gUmVjb3JkVHJhbnNmb3JtUmVzdWx0PihcbiAgICBmb3JrZWRTb3VyY2U6IE1lbW9yeVNvdXJjZTxRTywgVE8sIFFCLCBUQiwgUVJELCBUUkQ+LFxuICAgIG9wdGlvbnM6IEZ1bGxSZXF1ZXN0T3B0aW9uczxUTz4gJiBNZW1vcnlTb3VyY2VNZXJnZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxGdWxsUmVzcG9uc2U8UmVxdWVzdERhdGEsIFRSRCwgUmVjb3JkT3BlcmF0aW9uPj47XG4gIGFzeW5jIG1lcmdlPFxuICAgIFJlcXVlc3REYXRhIGV4dGVuZHMgUmVjb3JkVHJhbnNmb3JtUmVzdWx0ID0gUmVjb3JkVHJhbnNmb3JtUmVzdWx0XG4gID4oXG4gICAgZm9ya2VkU291cmNlOiBNZW1vcnlTb3VyY2U8UU8sIFRPLCBRQiwgVEIsIFFSRCwgVFJEPixcbiAgICBvcHRpb25zPzogVE8gJiBNZW1vcnlTb3VyY2VNZXJnZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxcbiAgICBSZWNvcmRUcmFuc2Zvcm1SZXN1bHQgfCBGdWxsUmVzcG9uc2U8UmVxdWVzdERhdGEsIFRSRCwgUmVjb3JkT3BlcmF0aW9uPlxuICA+IHtcbiAgICBsZXQgeyBjb2FsZXNjZSwgc2luY2VUcmFuc2Zvcm1JZCwgdHJhbnNmb3JtT3B0aW9ucywgLi4ucmVtYWluaW5nT3B0aW9ucyB9ID1cbiAgICAgIG9wdGlvbnMgPz8ge307XG5cbiAgICBsZXQgcmVxdWVzdE9wdGlvbnM6IFRPO1xuICAgIGlmICh0cmFuc2Zvcm1PcHRpb25zKSB7XG4gICAgICBkZXByZWNhdGUoXG4gICAgICAgICdJbiBNZW1vcnlTb3VyY2UjbWVyZ2UsIHBhc3NpbmcgYHRyYW5zZm9ybU9wdGlvbnNgIG5lc3RlZCB3aXRoaW4gYG9wdGlvbnNgIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIGluY2x1ZGUgdGhlbSBkaXJlY3RseSBhbG9uZ3NpZGUgb3RoZXIgb3B0aW9ucy4nXG4gICAgICApO1xuICAgICAgcmVxdWVzdE9wdGlvbnMgPSB0cmFuc2Zvcm1PcHRpb25zIGFzIFRPO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0T3B0aW9ucyA9IChyZW1haW5pbmdPcHRpb25zID8/IHt9KSBhcyBUTztcbiAgICB9XG5cbiAgICBsZXQgb3BzOiBSZWNvcmRPcGVyYXRpb25bXSA9IFtdO1xuXG4gICAgaWYgKGZvcmtlZFNvdXJjZS5jYWNoZS5pc1RyYWNraW5nVXBkYXRlT3BlcmF0aW9ucykge1xuICAgICAgb3BzID0gZm9ya2VkU291cmNlLmNhY2hlLmdldEFsbFVwZGF0ZU9wZXJhdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRyYW5zZm9ybXM6IFJlY29yZFRyYW5zZm9ybVtdO1xuICAgICAgaWYgKHNpbmNlVHJhbnNmb3JtSWQpIHtcbiAgICAgICAgZGVwcmVjYXRlKFxuICAgICAgICAgICdJbiBNZW1vcnlTb3VyY2UjbWVyZ2UsIHBhc3NpbmcgYHNpbmNlVHJhbnNmb3JtSWRgIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIGNhbGwgYHVwZGF0ZWAgd2l0aCBhIGN1c3RvbSB0cmFuc2Zvcm0vb3BlcmF0aW9ucy4nXG4gICAgICAgICk7XG4gICAgICAgIHRyYW5zZm9ybXMgPSBmb3JrZWRTb3VyY2UuZ2V0VHJhbnNmb3Jtc1NpbmNlKHNpbmNlVHJhbnNmb3JtSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtcyA9IGZvcmtlZFNvdXJjZS5nZXRBbGxUcmFuc2Zvcm1zKCk7XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybXMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShvcHMsIHRvQXJyYXkodC5vcGVyYXRpb25zKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29hbGVzY2UgIT09IGZhbHNlKSB7XG4gICAgICBvcHMgPSBjb2FsZXNjZVJlY29yZE9wZXJhdGlvbnMob3BzKTtcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdE9wdGlvbnMuZnVsbFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGU8UmVxdWVzdERhdGE+KFxuICAgICAgICBvcHMsXG4gICAgICAgIHJlcXVlc3RPcHRpb25zIGFzIEZ1bGxSZXF1ZXN0T3B0aW9uczxUTz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZTxSZXF1ZXN0RGF0YT4oXG4gICAgICAgIG9wcyxcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMgYXMgRGVmYXVsdFJlcXVlc3RPcHRpb25zPFRPPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmViYXNlIHdvcmtzIHNpbWlsYXJseSB0byBhIGdpdCByZWJhc2U6XG4gICAqXG4gICAqIEFmdGVyIGEgc291cmNlIGlzIGZvcmtlZCwgdGhlcmUgaXMgYSBwYXJlbnQtIGFuZCBhIGNoaWxkLXNvdXJjZS4gQm90aCBtYXlcbiAgICogYmUgdXBkYXRlZCB3aXRoIHRyYW5zZm9ybXMuIFdoZW4gYGNoaWxkU291cmNlLnJlYmFzZSgpYCBpcyBjYWxsZWQsIHRoZVxuICAgKiBjaGlsZCBzb3VyY2UncyBzdGF0ZSB3aWxsIGJlIHJlc2V0IHRvIG1hdGNoIHRoZSBjdXJyZW50IHN0YXRlIG9mIGl0c1xuICAgKiBwYXJlbnQsIGFuZCB0aGVuIGFueSBsb2NhbGx5IG1hZGUgdHJhbnNmb3JtcyB3aWxsIGJlIHJlcGxheWVkIG9uIHRoZSBjaGlsZFxuICAgKiBzb3VyY2UuXG4gICAqL1xuICByZWJhc2UoKTogdm9pZCB7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuX2Jhc2U7XG5cbiAgICBpZiAoIWJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb24oXG4gICAgICAgICdBIGBiYXNlYCBzb3VyY2UgbXVzdCBiZSBkZWZpbmVkIGZvciBgcmViYXNlYCB0byB3b3JrJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyByZXNldCB0aGUgc3RhdGUgb2YgdGhlIGNhY2hlIHRvIG1hdGNoIHRoZSBiYXNlIGNhY2hlXG4gICAgdGhpcy5jYWNoZS5yZXNldCgpO1xuXG4gICAgLy8gcmVwbGF5IGFsbCBsb2NhbGx5IG1hZGUgdHJhbnNmb3Jtc1xuICAgIHRoaXMuZ2V0QWxsVHJhbnNmb3JtcygpLmZvckVhY2goKHQpID0+IHRoaXMuX2FwcGx5VHJhbnNmb3JtKHQpKTtcblxuICAgIC8vIHJlc2V0IHRoZSBmb3JrIHBvaW50XG4gICAgdGhpcy5fZm9ya1BvaW50ID0gYmFzZS50cmFuc2Zvcm1Mb2cuaGVhZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc291cmNlJ3MgY2FjaGUgYW5kIHRyYW5zZm9ybSBsb2cgdG8gaXRzIGluaXRpYWwgc3RhdGUsIHdoaWNoIHdpbGxcbiAgICogYmUgZWl0aGVyIGVtcHR5IG9yIGEgbWF0Y2hpbmcgaXRzIGBiYXNlYCwgaWYgaXQgaGFzIG9uZS5cbiAgICovXG4gIGFzeW5jIHJlc2V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIHJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgY2FjaGUgKHdoaWNoIHdpbGwgbWF0Y2ggYSBiYXNlIGNhY2hlLCBpZiBwcmVzZW50KVxuICAgIHRoaXMuY2FjaGUucmVzZXQoKTtcblxuICAgIC8vIHJlc2V0IHRoZSBmb3JrIHBvaW50XG4gICAgdGhpcy5fZm9ya1BvaW50ID0gdGhpcy5fYmFzZSA/IHRoaXMuX2Jhc2UudHJhbnNmb3JtTG9nLmhlYWQgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBjbGVhciB0aGUgdHJhbnNmb3JtIGxvZywgd2hpY2ggaW4gdHVybiB3aWxsIGNsZWFyIGFueSB0cmFja2VkIHRyYW5zZm9ybXNcbiAgICBhd2FpdCB0aGlzLnRyYW5zZm9ybUxvZy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvbGxzIGJhY2sgdGhlIHNvdXJjZSB0byBhIHBhcnRpY3VsYXIgYHRyYW5zZm9ybUlkYC5cbiAgICpcbiAgICogYHJlbGF0aXZlUG9zaXRpb25gIGNhbiBiZSBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXIgdXNlZCB0byBzcGVjaWZ5IGFcbiAgICogcG9zaXRpb24gcmVsYXRpdmUgdG8gYHRyYW5zZm9ybUlkYC5cbiAgICovXG4gIHJvbGxiYWNrKHRyYW5zZm9ybUlkOiBzdHJpbmcsIHJlbGF0aXZlUG9zaXRpb24gPSAwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtTG9nLnJvbGxiYWNrKHRyYW5zZm9ybUlkLCByZWxhdGl2ZVBvc2l0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBsb2dnZWQgdHJhbnNmb3JtcyBzaW5jZSBhIHBhcnRpY3VsYXIgYHRyYW5zZm9ybUlkYC5cbiAgICovXG4gIGdldFRyYW5zZm9ybXNTaW5jZSh0cmFuc2Zvcm1JZDogc3RyaW5nKTogUmVjb3JkVHJhbnNmb3JtW10ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUxvZ1xuICAgICAgLmFmdGVyKHRyYW5zZm9ybUlkKVxuICAgICAgLm1hcCgoaWQpID0+IHRoaXMuX3RyYW5zZm9ybXNbaWRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2MC4xNywgY2FsbCBgZ2V0VHJhbnNmb3Jtc1NpbmNlYCBpbnN0ZWFkXG4gICAqL1xuICB0cmFuc2Zvcm1zU2luY2UodHJhbnNmb3JtSWQ6IHN0cmluZyk6IFJlY29yZFRyYW5zZm9ybVtdIHtcbiAgICBkZXByZWNhdGUoXG4gICAgICAnTWVtb3J5U291cmNlI3RyYW5zZm9ybXNTaW5jZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgY2FsbCBgc291cmNlLmdldFRyYW5zZm9ybXNTaW5jZSh0cmFuZm9ybUlkKWAgaW5zdGVhZC4nXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2Zvcm1zU2luY2UodHJhbnNmb3JtSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGxvZ2dlZCB0cmFuc2Zvcm1zLlxuICAgKi9cbiAgZ2V0QWxsVHJhbnNmb3JtcygpOiBSZWNvcmRUcmFuc2Zvcm1bXSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtTG9nLmVudHJpZXMubWFwKChpZCkgPT4gdGhpcy5fdHJhbnNmb3Jtc1tpZF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHNpbmNlIHYwLjE3LCBjYWxsIGBnZXRBbGxUcmFuc2Zvcm1zYCBpbnN0ZWFkXG4gICAqL1xuICBhbGxUcmFuc2Zvcm1zKCk6IFJlY29yZFRyYW5zZm9ybVtdIHtcbiAgICBkZXByZWNhdGUoXG4gICAgICAnTWVtb3J5U291cmNlI2FsbFRyYW5zZm9ybXMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIGNhbGwgYHNvdXJjZS5nZXRBbGxUcmFuc2Zvcm1zKClgIGluc3RlYWQuJ1xuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsVHJhbnNmb3JtcygpO1xuICB9XG5cbiAgZ2V0VHJhbnNmb3JtKHRyYW5zZm9ybUlkOiBzdHJpbmcpOiBSZWNvcmRUcmFuc2Zvcm0ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1zW3RyYW5zZm9ybUlkXTtcbiAgfVxuXG4gIGdldEludmVyc2VPcGVyYXRpb25zKHRyYW5zZm9ybUlkOiBzdHJpbmcpOiBSZWNvcmRPcGVyYXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybUludmVyc2VzW3RyYW5zZm9ybUlkXTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0UXVlcnlPcHRpb25zKCk6IERlZmF1bHRSZXF1ZXN0T3B0aW9uczxRTz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBzdXBlci5kZWZhdWx0UXVlcnlPcHRpb25zO1xuICB9XG5cbiAgc2V0IGRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9uczogRGVmYXVsdFJlcXVlc3RPcHRpb25zPFFPPiB8IHVuZGVmaW5lZCkge1xuICAgIHN1cGVyLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSB0aGlzLl9jYWNoZS5kZWZhdWx0UXVlcnlPcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIGdldCBkZWZhdWx0VHJhbnNmb3JtT3B0aW9ucygpOiBEZWZhdWx0UmVxdWVzdE9wdGlvbnM8VE8+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc3VwZXIuZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnM7XG4gIH1cblxuICBzZXQgZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMob3B0aW9uczogRGVmYXVsdFJlcXVlc3RPcHRpb25zPFRPPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RlZmF1bHRUcmFuc2Zvcm1PcHRpb25zID0gdGhpcy5fY2FjaGUuZGVmYXVsdFRyYW5zZm9ybU9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUHJvdGVjdGVkIG1ldGhvZHNcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBwcm90ZWN0ZWQgX3JldHJpZXZlUXVlcnlFeHByZXNzaW9uUmVzdWx0KFxuICAgIHJlc3VsdDogUmVjb3JkUXVlcnlFeHByZXNzaW9uUmVzdWx0XG4gICk6IFJlY29yZFF1ZXJ5RXhwcmVzc2lvblJlc3VsdCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmdldFJlY29yZHNTeW5jKHJlc3VsdCk7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5nZXRSZWNvcmRTeW5jKHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9yZXRyaWV2ZU9wZXJhdGlvblJlc3VsdChcbiAgICByZXN1bHQ6IFJlY29yZE9wZXJhdGlvblJlc3VsdFxuICApOiBSZWNvcmRPcGVyYXRpb25SZXN1bHQge1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5nZXRSZWNvcmRTeW5jKHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm06IFJlY29yZFRyYW5zZm9ybSk6IFJlY29yZFRyYW5zZm9ybVJlc3VsdCB7XG4gICAgY29uc3QgeyBkYXRhLCBkZXRhaWxzIH0gPSB0aGlzLmNhY2hlLnVwZGF0ZSh0cmFuc2Zvcm0sIHtcbiAgICAgIGZ1bGxSZXNwb25zZTogdHJ1ZVxuICAgIH0gYXMgRnVsbFJlcXVlc3RPcHRpb25zPFRPPik7XG4gICAgdGhpcy5fdHJhbnNmb3Jtc1t0cmFuc2Zvcm0uaWRdID0gdHJhbnNmb3JtO1xuICAgIHRoaXMuX3RyYW5zZm9ybUludmVyc2VzW3RyYW5zZm9ybS5pZF0gPSBkZXRhaWxzPy5pbnZlcnNlT3BlcmF0aW9ucyA/PyBbXTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfY2xlYXJUcmFuc2Zvcm1Gcm9tSGlzdG9yeSh0cmFuc2Zvcm1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZGVsZXRlIHRoaXMuX3RyYW5zZm9ybXNbdHJhbnNmb3JtSWRdO1xuICAgIGRlbGV0ZSB0aGlzLl90cmFuc2Zvcm1JbnZlcnNlc1t0cmFuc2Zvcm1JZF07XG4gIH1cblxuICBwcm90ZWN0ZWQgX2xvZ0NsZWFyZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNmb3JtcyA9IHt9O1xuICAgIHRoaXMuX3RyYW5zZm9ybUludmVyc2VzID0ge307XG4gIH1cblxuICBwcm90ZWN0ZWQgX2xvZ1RydW5jYXRlZChcbiAgICB0cmFuc2Zvcm1JZDogc3RyaW5nLFxuICAgIHJlbGF0aXZlUG9zaXRpb246IG51bWJlcixcbiAgICByZW1vdmVkOiBzdHJpbmdbXVxuICApOiB2b2lkIHtcbiAgICByZW1vdmVkLmZvckVhY2goKGlkKSA9PiB0aGlzLl9jbGVhclRyYW5zZm9ybUZyb21IaXN0b3J5KGlkKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2xvZ1JvbGxlZGJhY2soXG4gICAgdHJhbnNmb3JtSWQ6IHN0cmluZyxcbiAgICByZWxhdGl2ZVBvc2l0aW9uOiBudW1iZXIsXG4gICAgcmVtb3ZlZDogc3RyaW5nW11cbiAgKTogdm9pZCB7XG4gICAgcmVtb3ZlZC5yZXZlcnNlKCkuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgIGNvbnN0IGludmVyc2VPcGVyYXRpb25zID0gdGhpcy5fdHJhbnNmb3JtSW52ZXJzZXNbaWRdO1xuICAgICAgaWYgKGludmVyc2VPcGVyYXRpb25zKSB7XG4gICAgICAgIHRoaXMuY2FjaGUudXBkYXRlKGludmVyc2VPcGVyYXRpb25zKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NsZWFyVHJhbnNmb3JtRnJvbUhpc3RvcnkoaWQpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
{
"name": "@orbit/memory",
"version": "0.17.0-beta.26",
"version": "0.17.0-beta.27",
"description": "Orbit source for managing in-memory records.",

@@ -46,3 +46,3 @@ "contributors": [

"prettier": "@orbit/prettier-config",
"gitHead": "5b84938c545d0646692c33960244c5b242f53cea"
"gitHead": "448b4b19187f6216b124b406e2c7035570330e8b"
}

@@ -129,5 +129,11 @@ import { Orbit } from '@orbit/core';

settings.transformBuilder ??= this._transformBuilder;
settings.validatorFor ??= this._validatorFor;
settings.defaultQueryOptions ??= this._defaultQueryOptions;
settings.defaultTransformOptions ??= this._defaultTransformOptions;
settings.validatorFor ??= this._validatorFor;
if (
settings.autoValidate === undefined &&
settings.validatorFor === undefined
) {
settings.autoValidate = false;
}

@@ -134,0 +140,0 @@ return new MemoryCache(

@@ -125,4 +125,6 @@ import { Assertion, Orbit } from '@orbit/core';

cacheSettings.defaultTransformOptions ??= this.defaultTransformOptions;
cacheSettings.autoValidate ??= settings.autoValidate;
if (
cacheSettings.autoValidate !== false &&
cacheSettings.validatorFor === undefined &&

@@ -282,5 +284,11 @@ cacheSettings.validators === undefined

settings.transformBuilder ??= this._transformBuilder;
settings.validatorFor ??= this._validatorFor;
settings.defaultQueryOptions ??= this._defaultQueryOptions;
settings.defaultTransformOptions ??= this._defaultTransformOptions;
settings.validatorFor ??= this._validatorFor;
if (
settings.autoValidate === undefined &&
settings.validatorFor === undefined
) {
settings.autoValidate = false;
}

@@ -287,0 +295,0 @@ return new MemorySource<QO, TO, QB, TB, QRD, TRD>(

SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc