@fgv/ts-bcp47 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -239,7 +239,7 @@ class LanguageTagParser {
|
|
|
239
239
|
}
|
|
240
240
|
if (state.next !== undefined &&
|
|
241
241
|
!bcp47Subtags_1.Validate.extensionSingleton.isWellFormed(state.next) &&
|
|
242
|
-
!bcp47Subtags_1.Validate.
|
|
242
|
+
!bcp47Subtags_1.Validate.privateUsePrefix.isWellFormed(state.next)) {
|
|
243
243
|
return (0, ts_utils_1.fail)(`${state.next}: malformed extension subtag`);
|
|
244
244
|
}
|
|
245
245
|
else if (values.length < 1) {
|
|
@@ -307,4 +307,4 @@ class LanguageTagParser {
|
|
|
307
307
|
}
|
|
308
308
|
}
|
|
309
309
|
exports.LanguageTagParser = LanguageTagParser;
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2VUYWdQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmNwNDcvbGFuZ3VhZ2VUYWdQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw4Q0FBZ0M7QUFFaEMsNENBQTJFO0FBSTNFLGlEQUEwQztBQWExQzs7R0FFRztBQUNILE1BQWEsaUJBQWlCO0lBQzFCLHVCQUF1QjtJQUN2QixnRUFBZ0U7SUFDaEUsZ0JBQXVCLENBQUM7SUFFeEI7Ozs7Ozs7Ozs7T0FVRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBVyxFQUFFLElBQThCO1FBQzNELHVCQUF1QjtRQUN2QixJQUFJLEdBQUcsSUFBSSxhQUFKLElBQUksY0FBSixJQUFJLEdBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFnQjtZQUN4QixHQUFHO1lBQ0gsSUFBSTtZQUNKLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN2QixhQUFhLEVBQUUsRUFBRTtTQUNwQixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXJDLE9BQU8sSUFBQSxxQkFBVSxFQUNiO1lBQ0ksSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFB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Q3hDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFrQjtRQUM1QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQzFCLE9BQU8sSUFBQSxlQUFJLEVBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsT0FBTyxJQUFBLGtCQUFPLEVBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDSjtBQTVRRCw4Q0E0UUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0ICogYXMgSWFuYSBmcm9tICcuLi9pYW5hJztcblxuaW1wb3J0IHsgUmVzdWx0LCBTdWNjZXNzLCBhbGxTdWNjZWVkLCBmYWlsLCBzdWNjZWVkIH0gZnJvbSAnQGZndi90cy11dGlscyc7XG5cbmltcG9ydCB7IEV4dGVuc2lvblN1YnRhZyB9IGZyb20gJy4vYmNwNDdTdWJ0YWdzL21vZGVsJztcbmltcG9ydCB7IFN1YnRhZ3MgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBWYWxpZGF0ZSB9IGZyb20gJy4vYmNwNDdTdWJ0YWdzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIFBhcnNlclN0YXRlIHtcbiAgICByZWFkb25seSBpYW5hOiBJYW5hLkxhbmd1YWdlUmVnaXN0cmllcztcbiAgICByZWFkb25seSB0YWc6IHN0cmluZztcbiAgICByZWFkb25seSBzdWJ0YWdzOiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBwYXJzZWRTdWJ0YWdzOiBTdWJ0YWdzO1xuICAgIG5leHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VUYWdQYXJzZXIge1xuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgQkNQLTQ3ICh7QGxpbmsgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbCB8IFJGQyA1NjQ2fSlcbiAgICAgKiBsYW5ndWFnZSB0YWcsIHRvIHByb2R1Y2UgYSB7QGxpbmsgQmNwNDcuU3VidGFncyB8IFN1YnRhZ3N9IG9iamVjdCB3aGljaFxuICAgICAqIGJyZWFrcyBvdXQgZWFjaCBvZiB0aGUgc3VidGFncy5cbiAgICAgKiBAcGFyYW0gdGFnIC0gVGhlIGBzdHJpbmdgIGxhbmd1YWdlIHRhZyB0byBiZSBwYXJzZWQuXG4gICAgICogQHBhcmFtIGlhbmEgLSBPcHRpb25hbCB7QGxpbmsgSWFuYS5MYW5ndWFnZVJlZ2lzdHJpZXMgfCBJQU5BIGxhbmd1YWdlIHJlZ2lzdHJpZXN9XG4gICAgICogdG8gYmUgdXNlZC5cbiAgICAgKiBAcmV0dXJucyBgU3VjY2Vzc2Agd2l0aCB0aGUgcmVzdWx0aW5nIHtAbGluayBCY3A0Ny5TdWJ0YWdzIHwgc3VidGFnc31cbiAgICAgKiBvciBgRmFpbHVyZWAgd2l0aCBkZXRhaWxzIGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZSh0YWc6IHN0cmluZywgaWFuYT86IElhbmEuTGFuZ3VhZ2VSZWdpc3RyaWVzKTogUmVzdWx0PFN1YnRhZ3M+IHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWFuYSA9IGlhbmEgPz8gSWFuYS5EZWZhdWx0UmVnaXN0cmllcy5sYW5ndWFnZVJlZ2lzdHJpZXM7XG4gICAgICAgIGNvbnN0IHN0YXR1czogUGFyc2VyU3RhdGUgPSB7XG4gICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICBpYW5hLFxuICAgICAgICAgICAgc3VidGFnczogdGFnLnNwbGl0KCctJyksXG4gICAgICAgICAgICBwYXJzZWRTdWJ0YWdzOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdHVzLm5leHQgPSBzdGF0dXMuc3VidGFncy5zaGlmdCgpO1xuXG4gICAgICAgIHJldHVybiBhbGxTdWNjZWVkKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlR3JhbmRmYXRoZXJlZFRhZyhzdGF0dXMpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlUHJpbWFyeUxhbmd1YWdlKHN0YXR1cyksXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VFeHRsYW5nKHN0YXR1cyksXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VTY3JpcHQoc3RhdHVzKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVJlZ2lvbihzdGF0dXMpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlVmFyaWFudHMoc3RhdHVzKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZUV4dGVuc2lvbnMoc3RhdHVzKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVByaXZhdGVTdWJ0YWdzKHN0YXR1cyksXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VUYWdFbmQoc3RhdHVzKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgKS5vblN1Y2Nlc3MoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RhdHVzLnBhcnNlZFN1YnRhZ3MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBlbnRpcmUgdGFnIG1hdGNoZXMgYSByZWdpc3RlcmVkIGdyYW5kZmF0aGVyZWQgdGFnLlxuICAgICAqIEBwYXJhbSBzdGF0ZSAtIFRoZSB7QGxpbmsgQmNwNDcuUGFyc2VyU3RhdGUgfCBjdXJyZW50IHN0YXRlfSBvZiB0aGVcbiAgICAgKiBwYXJzZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgYFN1Y2Nlc3NgIHdpdGggdGhlIHVwZGF0ZWQge0BsaW5rIEJjcDQ3LlN1YnRhZ3MgfCBzdWJ0YWdzfVxuICAgICAqIGlmIGEgZ3JhbmRmYXRoZXJlZCB0YWcgaXMgZm91bmQsIG9yIGBTdWNjZXNzYCB3aXRoIHRoZSBzdXBwbGllZCBzdWJ0YWdzXG4gICAgICogaWYgbm8gbWF0Y2hpbmcgZ3JhbmRmYXRoZXJlZCB0YWcgaXMgZm91bmQuXG4gICAgICogQFxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX3BhcnNlR3JhbmRmYXRoZXJlZFRhZyhzdGF0ZTogUGFyc2VyU3RhdGUpOiBTdWNjZXNzPFN1YnRhZ3M+IHtcbiAgICAgICAgY29uc3QgZ3JhbmRmYXRoZXJlZCA9IHN0YXRlLmlhbmEuc3VidGFncy5ncmFuZGZhdGhlcmVkLnRyeUdldChzdGF0ZS50YWcpO1xuICAgICAgICBpZiAoZ3JhbmRmYXRoZXJlZCkge1xuICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy5ncmFuZGZhdGhlcmVkID0gc3RhdGUudGFnIGFzIElhbmEuTGFuZ3VhZ2VTdWJ0YWdzLkdyYW5kZmF0aGVyZWRUYWc7XG4gICAgICAgICAgICAvLyB3ZSBjb25zdW1lZCB0aGUgd2hvbGUgdGhpbmdcbiAgICAgICAgICAgIHN0YXRlLnN1YnRhZ3Muc3BsaWNlKDAsIHN0YXRlLnN1YnRhZ3MubGVuZ3RoKTtcbiAgICAgICAgICAgIHN0YXRlLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUucGFyc2VkU3VidGFncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIHRoZSBwcmltYXJ5IGxhbmd1YWdlIHN1YnRhZyBvZiBhIHN1cHBsaWVkIGxhbmd1YWdlIHRhZy5cbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUge0BsaW5rIEJjcDQ3LlBhcnNlclN0YXRlIHwgY3VycmVudCBzdGF0ZX0gb2YgdGhlXG4gICAgICogcGFyc2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIGBTdWNjZXNzYCB3aXRoIHN1cHBsaWVkIHtAbGluayBCY3A0Ny5TdWJ0YWdzIHwgc3VidGFnc31cbiAgICAgKiB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIHByaW1hcnkgbGFuZ3VhZ2Ugc3VidGFnLCBvciBgRmFpbHVyZWAgd2l0aCBkZXRhaWxzIGlmIGFuIGVycm9yXG4gICAgICogb2NjdXJzLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX3BhcnNlUHJpbWFyeUxhbmd1YWdlKHN0YXRlOiBQYXJzZXJTdGF0ZSk6IFJlc3VsdDxTdWJ0YWdzPiB7XG4gICAgICAgIC8vIHByaW1hcnkgbGFuZ3VhZ2Ugc3VidGFnIGlzIHJlcXVpcmVkIHVubGVzcyB0aGUgZW50aXJlIHRhZyBpcyBncmFuZGZhdGhlcmVkIG9yIGNvbnNpc3RzXG4gICAgICAgIC8vIG9mIG9ubHkgcHJpdmF0ZSB0YWdzXG4gICAgICAgIGlmIChzdGF0ZS5pYW5hLnN1YnRhZ3MubGFuZ3VhZ2VzLmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSkge1xuICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy5wcmltYXJ5TGFuZ3VhZ2UgPSBzdGF0ZS5uZXh0O1xuICAgICAgICAgICAgc3RhdGUubmV4dCA9IHN0YXRlLnN1YnRhZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIHJldHVybiBzdWNjZWVkKHN0YXRlLnBhcnNlZFN1YnRhZ3MpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnBhcnNlZFN1YnRhZ3MuZ3JhbmRmYXRoZXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VjY2VlZChzdGF0ZS5wYXJzZWRTdWJ0YWdzKTtcbiAgICAgICAgfSBlbHNlIGlmIChWYWxpZGF0ZS5wcml2YXRlVXNlUHJlZml4LmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSkge1xuICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gd2l0aCBubyBwcmltYXJ5IGxhbmd1YWdlIGFuZCB0aGUgcHJpdmF0ZSB0YWdcbiAgICAgICAgICAgIC8vIHBhcnNlciB3aWxsIGJlIGludm9rZWQgYnkgdGhlIHBhcmVudCBmbG93LlxuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUucGFyc2VkU3VidGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhaWwoYCR7c3RhdGUudGFnfTogbm8gcHJpbWFyeSBsYW5ndWFnZSBzdWJ0YWdgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdGhlIGV4dGxhbmcgc3VidGFnKHMpIG9mIGEgc3VwcGxpZWQgbGFuZ3VhZ2UgdGFnLlxuICAgICAqIEBwYXJhbSBzdGF0ZSAtIFRoZSB7QGxpbmsgQmNwNDcuUGFyc2VyU3RhdGUgfCBjdXJyZW50IHN0YXRlfSBvZiB0aGVcbiAgICAgKiBwYXJzZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgYFN1Y2Nlc3NgIHdpdGggc3VwcGxpZWQge0BsaW5rIEJjcDQ3LlN1YnRhZ3MgfCBzdWJ0YWdzfVxuICAgICAqIHVwZGF0ZWQgdG8gaW5jbHVkZSBleHRsYW5nIHN1YnRhZ3MgaWYgcHJlc2VudCwgb3IgYEZhaWx1cmVgIHdpdGggZGV0YWlscyBpZiBhbiBlcnJvclxuICAgICAqIG9jY3Vycy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9wYXJzZUV4dGxhbmcoc3RhdGU6IFBhcnNlclN0YXRlKTogUmVzdWx0PFN1YnRhZ3M+IHtcbiAgICAgICAgLy8gb3B0aW9uYWwgZXh0bGFuZ3Mgc3VidGFnc1xuICAgICAgICB3aGlsZSAoc3RhdGUuaWFuYS5zdWJ0YWdzLmV4dGxhbmdzLmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0bGFuZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0bGFuZ3MgPSBbc3RhdGUubmV4dF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0bGFuZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgICAgIHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0bGFuZ3MucHVzaChzdGF0ZS5uZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7c3RhdGUubmV4dH06IHRvbyBtYW55IGV4dGxhbmcgc3VidGFnc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUubmV4dCA9IHN0YXRlLnN1YnRhZ3Muc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VlZChzdGF0ZS5wYXJzZWRTdWJ0YWdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdGhlIHNjcmlwdCBzdWJ0YWcgb2YgYSBzdXBwbGllZCBsYW5ndWFnZSB0YWcuXG4gICAgICogQHBhcmFtIHN0YXRlIC0gVGhlIHtAbGluayBCY3A0Ny5QYXJzZXJTdGF0ZSB8IGN1cnJlbnQgc3RhdGV9IG9mIHRoZVxuICAgICAqIHBhcnNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBgU3VjY2Vzc2Agd2l0aCBzdXBwbGllZCB7QGxpbmsgQmNwNDcuU3VidGFncyB8IHN1YnRhZ3N9XG4gICAgICogdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBzY3JpcHQgc3VidGFnIGlmIHByZXNlbnQsIG9yIGBGYWlsdXJlYCB3aXRoIGRldGFpbHMgaWYgYW4gZXJyb3JcbiAgICAgKiBvY2N1cnMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBfcGFyc2VTY3JpcHQoc3RhdGU6IFBhcnNlclN0YXRlKTogUmVzdWx0PFN1YnRhZ3M+IHtcbiAgICAgICAgLy8gb3B0aW9uYWwgc2NyaXB0IHN1YnRhZ1xuICAgICAgICBpZiAoc3RhdGUuaWFuYS5zdWJ0YWdzLnNjcmlwdHMuaXNXZWxsRm9ybWVkKHN0YXRlLm5leHQpKSB7XG4gICAgICAgICAgICBzdGF0ZS5wYXJzZWRTdWJ0YWdzLnNjcmlwdCA9IHN0YXRlLm5leHQ7XG4gICAgICAgICAgICBzdGF0ZS5uZXh0ID0gc3RhdGUuc3VidGFncy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZWVkKHN0YXRlLnBhcnNlZFN1YnRhZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyB0aGUgcmVnaW9uIHN1YnRhZyBvZiBhIHN1cHBsaWVkIGxhbmd1YWdlIHRhZy5cbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUge0BsaW5rIEJjcDQ3LlBhcnNlclN0YXRlIHwgY3VycmVudCBzdGF0ZX0gb2YgdGhlXG4gICAgICogcGFyc2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIGBTdWNjZXNzYCB3aXRoIHN1cHBsaWVkIHtAbGluayBCY3A0Ny5TdWJ0YWdzIHwgc3VidGFnc31cbiAgICAgKiB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIHJlZ2lvbiBzdWJ0YWcgaWYgcHJlc2VudCwgb3IgYEZhaWx1cmVgIHdpdGggZGV0YWlscyBpZiBhbiBlcnJvclxuICAgICAqIG9jY3Vycy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9wYXJzZVJlZ2lvbihzdGF0ZTogUGFyc2VyU3RhdGUpOiBSZXN1bHQ8U3VidGFncz4ge1xuICAgICAgICAvLyBvcHRpb25hbCByZWdpb24gc3VidGFnXG4gICAgICAgIGlmIChzdGF0ZS5pYW5hLnN1YnRhZ3MucmVnaW9ucy5pc1dlbGxGb3JtZWQoc3RhdGUubmV4dCkpIHtcbiAgICAgICAgICAgIHN0YXRlLnBhcnNlZFN1YnRhZ3MucmVnaW9uID0gc3RhdGUubmV4dDtcbiAgICAgICAgICAgIHN0YXRlLm5leHQgPSBzdGF0ZS5zdWJ0YWdzLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUucGFyc2VkU3VidGFncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIHRoZSB2YXJpYW50IHN1YnRhZyhzKSBvZiBhIHN1cHBsaWVkIGxhbmd1YWdlIHRhZy5cbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUge0BsaW5rIEJjcDQ3LlBhcnNlclN0YXRlIHwgY3VycmVudCBzdGF0ZX0gb2YgdGhlXG4gICAgICogcGFyc2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIGBTdWNjZXNzYCB3aXRoIHN1cHBsaWVkIHtAbGluayBCY3A0Ny5TdWJ0YWdzIHwgc3VidGFnc31cbiAgICAgKiB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIHZhcmlhbnQgc3VidGFncyBpZiBwcmVzZW50LCBvciBgRmFpbHVyZWAgd2l0aCBkZXRhaWxzIGlmIGFuIGVycm9yXG4gICAgICogb2NjdXJzLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX3BhcnNlVmFyaWFudHMoc3RhdGU6IFBhcnNlclN0YXRlKTogUmVzdWx0PFN1YnRhZ3M+IHtcbiAgICAgICAgLy8gb3B0aW9uYWwgdmFyaWFudCBzdWJ0YWdzXG4gICAgICAgIHdoaWxlIChzdGF0ZS5pYW5hLnN1YnRhZ3MudmFyaWFudHMuaXNXZWxsRm9ybWVkKHN0YXRlLm5leHQpKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucGFyc2VkU3VidGFncy52YXJpYW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy52YXJpYW50cyA9IFtzdGF0ZS5uZXh0XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy52YXJpYW50cy5wdXNoKHN0YXRlLm5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUubmV4dCA9IHN0YXRlLnN1YnRhZ3Muc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VlZChzdGF0ZS5wYXJzZWRTdWJ0YWdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdGhlIGV4dGVuc2lvbiBzdWJ0YWcocykgb2YgYSBzdXBwbGllZCBsYW5ndWFnZSB0YWcuXG4gICAgICogQHBhcmFtIHN0YXRlIC0gVGhlIHtAbGluayBCY3A0Ny5QYXJzZXJTdGF0ZSB8IGN1cnJlbnQgc3RhdGV9IG9mIHRoZVxuICAgICAqIHBhcnNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBgU3VjY2Vzc2Agd2l0aCBzdXBwbGllZCB7QGxpbmsgQmNwNDcuU3VidGFncyB8IHN1YnRhZ3N9XG4gICAgICogdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBleHRlbnNpb24gc3VidGFncyBpZiBwcmVzZW50LCBvciBgRmFpbHVyZWAgd2l0aCBkZXRhaWxzIGlmIGFuIGVycm9yXG4gICAgICogb2NjdXJzLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX3BhcnNlRXh0ZW5zaW9ucyhzdGF0ZTogUGFyc2VyU3RhdGUpOiBSZXN1bHQ8U3VidGFncz4ge1xuICAgICAgICAvLyBvcHRpb25hbCBleHRlbnNpb24gc3VidGFnc1xuICAgICAgICB3aGlsZSAoc3RhdGUubmV4dCAhPT0gdW5kZWZpbmVkICYmIFZhbGlkYXRlLmV4dGVuc2lvblNpbmdsZXRvbi5pc1dlbGxGb3JtZWQoc3RhdGUubmV4dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZXRvbiA9IHN0YXRlLm5leHQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXM6IEV4dGVuc2lvblN1YnRhZ1tdID0gW107XG4gICAgICAgICAgICBzdGF0ZS5uZXh0ID0gc3RhdGUuc3VidGFncy5zaGlmdCgpO1xuXG4gICAgICAgICAgICB3aGlsZSAoVmFsaWRhdGUuZXh0ZW5zaW9uU3VidGFnLmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHN0YXRlLm5leHQpO1xuICAgICAgICAgICAgICAgIHN0YXRlLm5leHQgPSBzdGF0ZS5zdWJ0YWdzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RhdGUubmV4dCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIVZhbGlkYXRlLmV4dGVuc2lvblNpbmdsZXRvbi5pc1dlbGxGb3JtZWQoc3RhdGUubmV4dCkgJiZcbiAgICAgICAgICAgICAgICAhVmFsaWRhdGUuZXh0ZW5zaW9uU2luZ2xldG9uLmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7c3RhdGUubmV4dH06IG1hbGZvcm1lZCBleHRlbnNpb24gc3VidGFnYCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7c3RhdGUudGFnfTogZXh0ZW5zaW9uICcke3NpbmdsZXRvbn0nIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3VidGFnLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlcy5qb2luKCctJykgYXMgRXh0ZW5zaW9uU3VidGFnO1xuICAgICAgICAgICAgaWYgKHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0ZW5zaW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy5leHRlbnNpb25zID0gW3sgc2luZ2xldG9uLCB2YWx1ZSB9XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy5leHRlbnNpb25zLnB1c2goeyBzaW5nbGV0b24sIHZhbHVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZWVkKHN0YXRlLnBhcnNlZFN1YnRhZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyB0aGUgcHJpdmF0ZSB1c2Ugc3VidGFncyBvZiBhIHN1cHBsaWVkIGxhbmd1YWdlIHRhZy5cbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUge0BsaW5rIEJjcDQ3LlBhcnNlclN0YXRlIHwgY3VycmVudCBzdGF0ZX0gb2YgdGhlXG4gICAgICogcGFyc2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIGBTdWNjZXNzYCB3aXRoIHN1cHBsaWVkIHtAbGluayBCY3A0Ny5TdWJ0YWdzIHwgc3VidGFnc31cbiAgICAgKiB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIHByaXZhdGUtdXNlIHN1YnRhZ3MgaWYgcHJlc2VudCwgb3IgYEZhaWx1cmVgIHdpdGggZGV0YWlscyBpZiBhbiBlcnJvclxuICAgICAqIG9jY3Vycy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9wYXJzZVByaXZhdGVTdWJ0YWdzKHN0YXRlOiBQYXJzZXJTdGF0ZSk6IFJlc3VsdDxTdWJ0YWdzPiB7XG4gICAgICAgIC8vIG9wdGlvbmFsIHByaXZhdGUgdXNlIHN1YnRhZ3NcbiAgICAgICAgd2hpbGUgKHN0YXRlLm5leHQgIT0gdW5kZWZpbmVkICYmIFZhbGlkYXRlLnByaXZhdGVVc2VQcmVmaXguaXNXZWxsRm9ybWVkKHN0YXRlLm5leHQpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBzdGF0ZS5uZXh0ID0gc3RhdGUuc3VidGFncy5zaGlmdCgpO1xuXG4gICAgICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICAgICAgc3RhdGUubmV4dCAmJlxuICAgICAgICAgICAgICAgICFWYWxpZGF0ZS5wcml2YXRlVXNlUHJlZml4LmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSAmJlxuICAgICAgICAgICAgICAgIElhbmEuTGFuZ3VhZ2VTdWJ0YWdzLlZhbGlkYXRlLmV4dGVuZGVkTGFuZ3VhZ2VSYW5nZS5pc1dlbGxGb3JtZWQoc3RhdGUubmV4dClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHN0YXRlLm5leHQpO1xuICAgICAgICAgICAgICAgIHN0YXRlLm5leHQgPSBzdGF0ZS5zdWJ0YWdzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZS5uZXh0ICE9PSB1bmRlZmluZWQgJiYgIVZhbGlkYXRlLnByaXZhdGVVc2VQcmVmaXguaXNXZWxsRm9ybWVkKHN0YXRlLm5leHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7c3RhdGUubmV4dH06IG1hbGZvcm1lZCBwcml2YXRlLXVzZSBzdWJ0YWdgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChgJHtzdGF0ZS50YWd9OiBwcml2YXRlLXVzZSB0YWcgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzdWJ0YWcuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzLmpvaW4oJy0nKSBhcyBJYW5hLkxhbmd1YWdlU3VidGFncy5FeHRlbmRlZExhbmd1YWdlUmFuZ2U7XG4gICAgICAgICAgICBpZiAoc3RhdGUucGFyc2VkU3VidGFncy5wcml2YXRlVXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5wYXJzZWRTdWJ0YWdzLnByaXZhdGVVc2UgPSBbdmFsdWVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5wYXJzZWRTdWJ0YWdzLnByaXZhdGVVc2UucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUucGFyc2VkU3VidGFncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmVyaWZpZXMge0BsaW5rIEJjcDQ3LlBhcnNlclN0YXRlIHwgcGFyc2VyIHN0YXRlfSBhdCB0aGUgZW5kIG9mIGEgcGFyc2Ugb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBzdGF0ZSAtIFRoZSB7QGxpbmsgQmNwNDcuUGFyc2VyU3RhdGUgfCBjdXJyZW50IHN0YXRlfSBvZiB0aGVcbiAgICAgKiBwYXJzZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgYFN1Y2Nlc3NgIGlmIHRoZSB0YWcgd2FzIGZ1bGx5IGNvbnN1bWVkLCBvciBgRmFpbHVyZWAgd2l0aCBkZXRhaWxzXG4gICAgICogaWYgdW5leHBlY3RlZCBzdWJ0YWdzIHJlbWFpbiB0byBiZSBwYXJzZWQuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBfcGFyc2VUYWdFbmQoc3RhdGU6IFBhcnNlclN0YXRlKTogUmVzdWx0PFN1YnRhZ3M+IHtcbiAgICAgICAgaWYgKHN0YXRlLm5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7c3RhdGUubmV4dH06IHVuZXhwZWN0ZWQgc3VidGFnYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUucGFyc2VkU3VidGFncyk7XG4gICAgfVxufVxuIl19
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2VUYWdQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmNwNDcvbGFuZ3VhZ2VUYWdQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw4Q0FBZ0M7QUFFaEMsNENBQTJFO0FBSTNFLGlEQUEwQztBQWExQzs7R0FFRztBQUNILE1BQWEsaUJBQWlCO0lBQzFCLHVCQUF1QjtJQUN2QixnRUFBZ0U7SUFDaEUsZ0JBQXVCLENBQUM7SUFFeEI7Ozs7Ozs7Ozs7T0FVRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBVyxFQUFFLElBQThCO1FBQzNELHVCQUF1QjtRQUN2QixJQUFJLEdBQUcsSUFBSSxhQUFKLElBQUksY0FBSixJQUFJLEdBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFnQjtZQUN4QixHQUFHO1lBQ0gsSUFBSTtZQUNKLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN2QixhQUFhLEVBQUUsRUFBRTtTQUNwQixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXJDLE9BQU8sSUFBQSxxQkFBVSxFQUNiO1lBQ0ksSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFB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Q3hDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFrQjtRQUM1QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQzFCLE9BQU8sSUFBQSxlQUFJLEVBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsT0FBTyxJQUFBLGtCQUFPLEVBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDSjtBQTVRRCw4Q0E0UUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0ICogYXMgSWFuYSBmcm9tICcuLi9pYW5hJztcblxuaW1wb3J0IHsgUmVzdWx0LCBTdWNjZXNzLCBhbGxTdWNjZWVkLCBmYWlsLCBzdWNjZWVkIH0gZnJvbSAnQGZndi90cy11dGlscyc7XG5cbmltcG9ydCB7IEV4dGVuc2lvblN1YnRhZyB9IGZyb20gJy4vYmNwNDdTdWJ0YWdzL21vZGVsJztcbmltcG9ydCB7IFN1YnRhZ3MgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBWYWxpZGF0ZSB9IGZyb20gJy4vYmNwNDdTdWJ0YWdzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIFBhcnNlclN0YXRlIHtcbiAgICByZWFkb25seSBpYW5hOiBJYW5hLkxhbmd1YWdlUmVnaXN0cmllcztcbiAgICByZWFkb25seSB0YWc6IHN0cmluZztcbiAgICByZWFkb25seSBzdWJ0YWdzOiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBwYXJzZWRTdWJ0YWdzOiBTdWJ0YWdzO1xuICAgIG5leHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VUYWdQYXJzZXIge1xuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgQkNQLTQ3ICh7QGxpbmsgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbCB8IFJGQyA1NjQ2fSlcbiAgICAgKiBsYW5ndWFnZSB0YWcsIHRvIHByb2R1Y2UgYSB7QGxpbmsgQmNwNDcuU3VidGFncyB8IFN1YnRhZ3N9IG9iamVjdCB3aGljaFxuICAgICAqIGJyZWFrcyBvdXQgZWFjaCBvZiB0aGUgc3VidGFncy5cbiAgICAgKiBAcGFyYW0gdGFnIC0gVGhlIGBzdHJpbmdgIGxhbmd1YWdlIHRhZyB0byBiZSBwYXJzZWQuXG4gICAgICogQHBhcmFtIGlhbmEgLSBPcHRpb25hbCB7QGxpbmsgSWFuYS5MYW5ndWFnZVJlZ2lzdHJpZXMgfCBJQU5BIGxhbmd1YWdlIHJlZ2lzdHJpZXN9XG4gICAgICogdG8gYmUgdXNlZC5cbiAgICAgKiBAcmV0dXJucyBgU3VjY2Vzc2Agd2l0aCB0aGUgcmVzdWx0aW5nIHtAbGluayBCY3A0Ny5TdWJ0YWdzIHwgc3VidGFnc31cbiAgICAgKiBvciBgRmFpbHVyZWAgd2l0aCBkZXRhaWxzIGlmIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZSh0YWc6IHN0cmluZywgaWFuYT86IElhbmEuTGFuZ3VhZ2VSZWdpc3RyaWVzKTogUmVzdWx0PFN1YnRhZ3M+IHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgaWFuYSA9IGlhbmEgPz8gSWFuYS5EZWZhdWx0UmVnaXN0cmllcy5sYW5ndWFnZVJlZ2lzdHJpZXM7XG4gICAgICAgIGNvbnN0IHN0YXR1czogUGFyc2VyU3RhdGUgPSB7XG4gICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICBpYW5hLFxuICAgICAgICAgICAgc3VidGFnczogdGFnLnNwbGl0KCctJyksXG4gICAgICAgICAgICBwYXJzZWRTdWJ0YWdzOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdHVzLm5leHQgPSBzdGF0dXMuc3VidGFncy5zaGlmdCgpO1xuXG4gICAgICAgIHJldHVybiBhbGxTdWNjZWVkKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlR3JhbmRmYXRoZXJlZFRhZyhzdGF0dXMpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlUHJpbWFyeUxhbmd1YWdlKHN0YXR1cyksXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VFeHRsYW5nKHN0YXR1cyksXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VTY3JpcHQoc3RhdHVzKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVJlZ2lvbihzdGF0dXMpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlVmFyaWFudHMoc3RhdHVzKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZUV4dGVuc2lvbnMoc3RhdHVzKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVByaXZhdGVTdWJ0YWdzKHN0YXR1cyksXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VUYWdFbmQoc3RhdHVzKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgKS5vblN1Y2Nlc3MoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RhdHVzLnBhcnNlZFN1YnRhZ3MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBlbnRpcmUgdGFnIG1hdGNoZXMgYSByZWdpc3RlcmVkIGdyYW5kZmF0aGVyZWQgdGFnLlxuICAgICAqIEBwYXJhbSBzdGF0ZSAtIFRoZSB7QGxpbmsgQmNwNDcuUGFyc2VyU3RhdGUgfCBjdXJyZW50IHN0YXRlfSBvZiB0aGVcbiAgICAgKiBwYXJzZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgYFN1Y2Nlc3NgIHdpdGggdGhlIHVwZGF0ZWQge0BsaW5rIEJjcDQ3LlN1YnRhZ3MgfCBzdWJ0YWdzfVxuICAgICAqIGlmIGEgZ3JhbmRmYXRoZXJlZCB0YWcgaXMgZm91bmQsIG9yIGBTdWNjZXNzYCB3aXRoIHRoZSBzdXBwbGllZCBzdWJ0YWdzXG4gICAgICogaWYgbm8gbWF0Y2hpbmcgZ3JhbmRmYXRoZXJlZCB0YWcgaXMgZm91bmQuXG4gICAgICogQFxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX3BhcnNlR3JhbmRmYXRoZXJlZFRhZyhzdGF0ZTogUGFyc2VyU3RhdGUpOiBTdWNjZXNzPFN1YnRhZ3M+IHtcbiAgICAgICAgY29uc3QgZ3JhbmRmYXRoZXJlZCA9IHN0YXRlLmlhbmEuc3VidGFncy5ncmFuZGZhdGhlcmVkLnRyeUdldChzdGF0ZS50YWcpO1xuICAgICAgICBpZiAoZ3JhbmRmYXRoZXJlZCkge1xuICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy5ncmFuZGZhdGhlcmVkID0gc3RhdGUudGFnIGFzIElhbmEuTGFuZ3VhZ2VTdWJ0YWdzLkdyYW5kZmF0aGVyZWRUYWc7XG4gICAgICAgICAgICAvLyB3ZSBjb25zdW1lZCB0aGUgd2hvbGUgdGhpbmdcbiAgICAgICAgICAgIHN0YXRlLnN1YnRhZ3Muc3BsaWNlKDAsIHN0YXRlLnN1YnRhZ3MubGVuZ3RoKTtcbiAgICAgICAgICAgIHN0YXRlLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUucGFyc2VkU3VidGFncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIHRoZSBwcmltYXJ5IGxhbmd1YWdlIHN1YnRhZyBvZiBhIHN1cHBsaWVkIGxhbmd1YWdlIHRhZy5cbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUge0BsaW5rIEJjcDQ3LlBhcnNlclN0YXRlIHwgY3VycmVudCBzdGF0ZX0gb2YgdGhlXG4gICAgICogcGFyc2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIGBTdWNjZXNzYCB3aXRoIHN1cHBsaWVkIHtAbGluayBCY3A0Ny5TdWJ0YWdzIHwgc3VidGFnc31cbiAgICAgKiB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIHByaW1hcnkgbGFuZ3VhZ2Ugc3VidGFnLCBvciBgRmFpbHVyZWAgd2l0aCBkZXRhaWxzIGlmIGFuIGVycm9yXG4gICAgICogb2NjdXJzLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX3BhcnNlUHJpbWFyeUxhbmd1YWdlKHN0YXRlOiBQYXJzZXJTdGF0ZSk6IFJlc3VsdDxTdWJ0YWdzPiB7XG4gICAgICAgIC8vIHByaW1hcnkgbGFuZ3VhZ2Ugc3VidGFnIGlzIHJlcXVpcmVkIHVubGVzcyB0aGUgZW50aXJlIHRhZyBpcyBncmFuZGZhdGhlcmVkIG9yIGNvbnNpc3RzXG4gICAgICAgIC8vIG9mIG9ubHkgcHJpdmF0ZSB0YWdzXG4gICAgICAgIGlmIChzdGF0ZS5pYW5hLnN1YnRhZ3MubGFuZ3VhZ2VzLmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSkge1xuICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy5wcmltYXJ5TGFuZ3VhZ2UgPSBzdGF0ZS5uZXh0O1xuICAgICAgICAgICAgc3RhdGUubmV4dCA9IHN0YXRlLnN1YnRhZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIHJldHVybiBzdWNjZWVkKHN0YXRlLnBhcnNlZFN1YnRhZ3MpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnBhcnNlZFN1YnRhZ3MuZ3JhbmRmYXRoZXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VjY2VlZChzdGF0ZS5wYXJzZWRTdWJ0YWdzKTtcbiAgICAgICAgfSBlbHNlIGlmIChWYWxpZGF0ZS5wcml2YXRlVXNlUHJlZml4LmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSkge1xuICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gd2l0aCBubyBwcmltYXJ5IGxhbmd1YWdlIGFuZCB0aGUgcHJpdmF0ZSB0YWdcbiAgICAgICAgICAgIC8vIHBhcnNlciB3aWxsIGJlIGludm9rZWQgYnkgdGhlIHBhcmVudCBmbG93LlxuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUucGFyc2VkU3VidGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhaWwoYCR7c3RhdGUudGFnfTogbm8gcHJpbWFyeSBsYW5ndWFnZSBzdWJ0YWdgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdGhlIGV4dGxhbmcgc3VidGFnKHMpIG9mIGEgc3VwcGxpZWQgbGFuZ3VhZ2UgdGFnLlxuICAgICAqIEBwYXJhbSBzdGF0ZSAtIFRoZSB7QGxpbmsgQmNwNDcuUGFyc2VyU3RhdGUgfCBjdXJyZW50IHN0YXRlfSBvZiB0aGVcbiAgICAgKiBwYXJzZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgYFN1Y2Nlc3NgIHdpdGggc3VwcGxpZWQge0BsaW5rIEJjcDQ3LlN1YnRhZ3MgfCBzdWJ0YWdzfVxuICAgICAqIHVwZGF0ZWQgdG8gaW5jbHVkZSBleHRsYW5nIHN1YnRhZ3MgaWYgcHJlc2VudCwgb3IgYEZhaWx1cmVgIHdpdGggZGV0YWlscyBpZiBhbiBlcnJvclxuICAgICAqIG9jY3Vycy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9wYXJzZUV4dGxhbmcoc3RhdGU6IFBhcnNlclN0YXRlKTogUmVzdWx0PFN1YnRhZ3M+IHtcbiAgICAgICAgLy8gb3B0aW9uYWwgZXh0bGFuZ3Mgc3VidGFnc1xuICAgICAgICB3aGlsZSAoc3RhdGUuaWFuYS5zdWJ0YWdzLmV4dGxhbmdzLmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0bGFuZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0bGFuZ3MgPSBbc3RhdGUubmV4dF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0bGFuZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgICAgIHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0bGFuZ3MucHVzaChzdGF0ZS5uZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7c3RhdGUubmV4dH06IHRvbyBtYW55IGV4dGxhbmcgc3VidGFnc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUubmV4dCA9IHN0YXRlLnN1YnRhZ3Muc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VlZChzdGF0ZS5wYXJzZWRTdWJ0YWdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdGhlIHNjcmlwdCBzdWJ0YWcgb2YgYSBzdXBwbGllZCBsYW5ndWFnZSB0YWcuXG4gICAgICogQHBhcmFtIHN0YXRlIC0gVGhlIHtAbGluayBCY3A0Ny5QYXJzZXJTdGF0ZSB8IGN1cnJlbnQgc3RhdGV9IG9mIHRoZVxuICAgICAqIHBhcnNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBgU3VjY2Vzc2Agd2l0aCBzdXBwbGllZCB7QGxpbmsgQmNwNDcuU3VidGFncyB8IHN1YnRhZ3N9XG4gICAgICogdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBzY3JpcHQgc3VidGFnIGlmIHByZXNlbnQsIG9yIGBGYWlsdXJlYCB3aXRoIGRldGFpbHMgaWYgYW4gZXJyb3JcbiAgICAgKiBvY2N1cnMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBfcGFyc2VTY3JpcHQoc3RhdGU6IFBhcnNlclN0YXRlKTogUmVzdWx0PFN1YnRhZ3M+IHtcbiAgICAgICAgLy8gb3B0aW9uYWwgc2NyaXB0IHN1YnRhZ1xuICAgICAgICBpZiAoc3RhdGUuaWFuYS5zdWJ0YWdzLnNjcmlwdHMuaXNXZWxsRm9ybWVkKHN0YXRlLm5leHQpKSB7XG4gICAgICAgICAgICBzdGF0ZS5wYXJzZWRTdWJ0YWdzLnNjcmlwdCA9IHN0YXRlLm5leHQ7XG4gICAgICAgICAgICBzdGF0ZS5uZXh0ID0gc3RhdGUuc3VidGFncy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZWVkKHN0YXRlLnBhcnNlZFN1YnRhZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyB0aGUgcmVnaW9uIHN1YnRhZyBvZiBhIHN1cHBsaWVkIGxhbmd1YWdlIHRhZy5cbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUge0BsaW5rIEJjcDQ3LlBhcnNlclN0YXRlIHwgY3VycmVudCBzdGF0ZX0gb2YgdGhlXG4gICAgICogcGFyc2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIGBTdWNjZXNzYCB3aXRoIHN1cHBsaWVkIHtAbGluayBCY3A0Ny5TdWJ0YWdzIHwgc3VidGFnc31cbiAgICAgKiB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIHJlZ2lvbiBzdWJ0YWcgaWYgcHJlc2VudCwgb3IgYEZhaWx1cmVgIHdpdGggZGV0YWlscyBpZiBhbiBlcnJvclxuICAgICAqIG9jY3Vycy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9wYXJzZVJlZ2lvbihzdGF0ZTogUGFyc2VyU3RhdGUpOiBSZXN1bHQ8U3VidGFncz4ge1xuICAgICAgICAvLyBvcHRpb25hbCByZWdpb24gc3VidGFnXG4gICAgICAgIGlmIChzdGF0ZS5pYW5hLnN1YnRhZ3MucmVnaW9ucy5pc1dlbGxGb3JtZWQoc3RhdGUubmV4dCkpIHtcbiAgICAgICAgICAgIHN0YXRlLnBhcnNlZFN1YnRhZ3MucmVnaW9uID0gc3RhdGUubmV4dDtcbiAgICAgICAgICAgIHN0YXRlLm5leHQgPSBzdGF0ZS5zdWJ0YWdzLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUucGFyc2VkU3VidGFncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIHRoZSB2YXJpYW50IHN1YnRhZyhzKSBvZiBhIHN1cHBsaWVkIGxhbmd1YWdlIHRhZy5cbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUge0BsaW5rIEJjcDQ3LlBhcnNlclN0YXRlIHwgY3VycmVudCBzdGF0ZX0gb2YgdGhlXG4gICAgICogcGFyc2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIGBTdWNjZXNzYCB3aXRoIHN1cHBsaWVkIHtAbGluayBCY3A0Ny5TdWJ0YWdzIHwgc3VidGFnc31cbiAgICAgKiB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIHZhcmlhbnQgc3VidGFncyBpZiBwcmVzZW50LCBvciBgRmFpbHVyZWAgd2l0aCBkZXRhaWxzIGlmIGFuIGVycm9yXG4gICAgICogb2NjdXJzLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX3BhcnNlVmFyaWFudHMoc3RhdGU6IFBhcnNlclN0YXRlKTogUmVzdWx0PFN1YnRhZ3M+IHtcbiAgICAgICAgLy8gb3B0aW9uYWwgdmFyaWFudCBzdWJ0YWdzXG4gICAgICAgIHdoaWxlIChzdGF0ZS5pYW5hLnN1YnRhZ3MudmFyaWFudHMuaXNXZWxsRm9ybWVkKHN0YXRlLm5leHQpKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucGFyc2VkU3VidGFncy52YXJpYW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy52YXJpYW50cyA9IFtzdGF0ZS5uZXh0XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy52YXJpYW50cy5wdXNoKHN0YXRlLm5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUubmV4dCA9IHN0YXRlLnN1YnRhZ3Muc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VlZChzdGF0ZS5wYXJzZWRTdWJ0YWdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdGhlIGV4dGVuc2lvbiBzdWJ0YWcocykgb2YgYSBzdXBwbGllZCBsYW5ndWFnZSB0YWcuXG4gICAgICogQHBhcmFtIHN0YXRlIC0gVGhlIHtAbGluayBCY3A0Ny5QYXJzZXJTdGF0ZSB8IGN1cnJlbnQgc3RhdGV9IG9mIHRoZVxuICAgICAqIHBhcnNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBgU3VjY2Vzc2Agd2l0aCBzdXBwbGllZCB7QGxpbmsgQmNwNDcuU3VidGFncyB8IHN1YnRhZ3N9XG4gICAgICogdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBleHRlbnNpb24gc3VidGFncyBpZiBwcmVzZW50LCBvciBgRmFpbHVyZWAgd2l0aCBkZXRhaWxzIGlmIGFuIGVycm9yXG4gICAgICogb2NjdXJzLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX3BhcnNlRXh0ZW5zaW9ucyhzdGF0ZTogUGFyc2VyU3RhdGUpOiBSZXN1bHQ8U3VidGFncz4ge1xuICAgICAgICAvLyBvcHRpb25hbCBleHRlbnNpb24gc3VidGFnc1xuICAgICAgICB3aGlsZSAoc3RhdGUubmV4dCAhPT0gdW5kZWZpbmVkICYmIFZhbGlkYXRlLmV4dGVuc2lvblNpbmdsZXRvbi5pc1dlbGxGb3JtZWQoc3RhdGUubmV4dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZXRvbiA9IHN0YXRlLm5leHQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXM6IEV4dGVuc2lvblN1YnRhZ1tdID0gW107XG4gICAgICAgICAgICBzdGF0ZS5uZXh0ID0gc3RhdGUuc3VidGFncy5zaGlmdCgpO1xuXG4gICAgICAgICAgICB3aGlsZSAoVmFsaWRhdGUuZXh0ZW5zaW9uU3VidGFnLmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHN0YXRlLm5leHQpO1xuICAgICAgICAgICAgICAgIHN0YXRlLm5leHQgPSBzdGF0ZS5zdWJ0YWdzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RhdGUubmV4dCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIVZhbGlkYXRlLmV4dGVuc2lvblNpbmdsZXRvbi5pc1dlbGxGb3JtZWQoc3RhdGUubmV4dCkgJiZcbiAgICAgICAgICAgICAgICAhVmFsaWRhdGUucHJpdmF0ZVVzZVByZWZpeC5pc1dlbGxGb3JtZWQoc3RhdGUubmV4dClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKGAke3N0YXRlLm5leHR9OiBtYWxmb3JtZWQgZXh0ZW5zaW9uIHN1YnRhZ2ApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKGAke3N0YXRlLnRhZ306IGV4dGVuc2lvbiAnJHtzaW5nbGV0b259JyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN1YnRhZy5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXMuam9pbignLScpIGFzIEV4dGVuc2lvblN1YnRhZztcbiAgICAgICAgICAgIGlmIChzdGF0ZS5wYXJzZWRTdWJ0YWdzLmV4dGVuc2lvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0ZW5zaW9ucyA9IFt7IHNpbmdsZXRvbiwgdmFsdWUgfV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXRlLnBhcnNlZFN1YnRhZ3MuZXh0ZW5zaW9ucy5wdXNoKHsgc2luZ2xldG9uLCB2YWx1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VlZChzdGF0ZS5wYXJzZWRTdWJ0YWdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdGhlIHByaXZhdGUgdXNlIHN1YnRhZ3Mgb2YgYSBzdXBwbGllZCBsYW5ndWFnZSB0YWcuXG4gICAgICogQHBhcmFtIHN0YXRlIC0gVGhlIHtAbGluayBCY3A0Ny5QYXJzZXJTdGF0ZSB8IGN1cnJlbnQgc3RhdGV9IG9mIHRoZVxuICAgICAqIHBhcnNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBgU3VjY2Vzc2Agd2l0aCBzdXBwbGllZCB7QGxpbmsgQmNwNDcuU3VidGFncyB8IHN1YnRhZ3N9XG4gICAgICogdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBwcml2YXRlLXVzZSBzdWJ0YWdzIGlmIHByZXNlbnQsIG9yIGBGYWlsdXJlYCB3aXRoIGRldGFpbHMgaWYgYW4gZXJyb3JcbiAgICAgKiBvY2N1cnMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBfcGFyc2VQcml2YXRlU3VidGFncyhzdGF0ZTogUGFyc2VyU3RhdGUpOiBSZXN1bHQ8U3VidGFncz4ge1xuICAgICAgICAvLyBvcHRpb25hbCBwcml2YXRlIHVzZSBzdWJ0YWdzXG4gICAgICAgIHdoaWxlIChzdGF0ZS5uZXh0ICE9IHVuZGVmaW5lZCAmJiBWYWxpZGF0ZS5wcml2YXRlVXNlUHJlZml4LmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgc3RhdGUubmV4dCA9IHN0YXRlLnN1YnRhZ3Muc2hpZnQoKTtcblxuICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgIHN0YXRlLm5leHQgJiZcbiAgICAgICAgICAgICAgICAhVmFsaWRhdGUucHJpdmF0ZVVzZVByZWZpeC5pc1dlbGxGb3JtZWQoc3RhdGUubmV4dCkgJiZcbiAgICAgICAgICAgICAgICBJYW5hLkxhbmd1YWdlU3VidGFncy5WYWxpZGF0ZS5leHRlbmRlZExhbmd1YWdlUmFuZ2UuaXNXZWxsRm9ybWVkKHN0YXRlLm5leHQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChzdGF0ZS5uZXh0KTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5uZXh0ID0gc3RhdGUuc3VidGFncy5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RhdGUubmV4dCAhPT0gdW5kZWZpbmVkICYmICFWYWxpZGF0ZS5wcml2YXRlVXNlUHJlZml4LmlzV2VsbEZvcm1lZChzdGF0ZS5uZXh0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKGAke3N0YXRlLm5leHR9OiBtYWxmb3JtZWQgcHJpdmF0ZS11c2Ugc3VidGFnYCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7c3RhdGUudGFnfTogcHJpdmF0ZS11c2UgdGFnIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3VidGFnLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlcy5qb2luKCctJykgYXMgSWFuYS5MYW5ndWFnZVN1YnRhZ3MuRXh0ZW5kZWRMYW5ndWFnZVJhbmdlO1xuICAgICAgICAgICAgaWYgKHN0YXRlLnBhcnNlZFN1YnRhZ3MucHJpdmF0ZVVzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy5wcml2YXRlVXNlID0gW3ZhbHVlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFyc2VkU3VidGFncy5wcml2YXRlVXNlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZWVkKHN0YXRlLnBhcnNlZFN1YnRhZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZlcmlmaWVzIHtAbGluayBCY3A0Ny5QYXJzZXJTdGF0ZSB8IHBhcnNlciBzdGF0ZX0gYXQgdGhlIGVuZCBvZiBhIHBhcnNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUge0BsaW5rIEJjcDQ3LlBhcnNlclN0YXRlIHwgY3VycmVudCBzdGF0ZX0gb2YgdGhlXG4gICAgICogcGFyc2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIGBTdWNjZXNzYCBpZiB0aGUgdGFnIHdhcyBmdWxseSBjb25zdW1lZCwgb3IgYEZhaWx1cmVgIHdpdGggZGV0YWlsc1xuICAgICAqIGlmIHVuZXhwZWN0ZWQgc3VidGFncyByZW1haW4gdG8gYmUgcGFyc2VkLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX3BhcnNlVGFnRW5kKHN0YXRlOiBQYXJzZXJTdGF0ZSk6IFJlc3VsdDxTdWJ0YWdzPiB7XG4gICAgICAgIGlmIChzdGF0ZS5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWlsKGAke3N0YXRlLm5leHR9OiB1bmV4cGVjdGVkIHN1YnRhZ2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZWVkKHN0YXRlLnBhcnNlZFN1YnRhZ3MpO1xuICAgIH1cbn1cbiJdfQ==
|