Socket
Socket
Sign inDemoInstall

@blueprintjs/datetime

Package Overview
Dependencies
Maintainers
1
Versions
253
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@blueprintjs/datetime - npm Package Compare versions

Comparing version 1.2.0 to 1.3.0

2

dist/common/utils.d.ts

@@ -5,3 +5,3 @@ /**

*/
export declare function measureTextWidth(text: string, className?: string): string;
export declare function measureTextWidth(text: string, className?: string, containerElement?: HTMLElement): string;
export declare function padWithZeroes(str: string, minLength: number): string;

@@ -12,8 +12,9 @@ /*

*/
function measureTextWidth(text, className) {
function measureTextWidth(text, className, containerElement) {
if (className === void 0) { className = ""; }
if (containerElement === void 0) { containerElement = document.body; }
var span = document.createElement("span");
span.classList.add(className);
span.innerHTML = text;
document.body.appendChild(span);
containerElement.appendChild(span);
var spanWidth = span.offsetWidth;

@@ -37,2 +38,2 @@ span.remove();

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tb24vdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7O0FBRUg7OztHQUdHO0FBQ0gsMEJBQWlDLElBQVksRUFBRSxTQUFjO0lBQWQseUJBQWMsR0FBZCxjQUFjO0lBQ3pELElBQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFFdEIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFZCxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUM1QixDQUFDO0FBVmUsd0JBQWdCLG1CQVUvQixDQUFBO0FBRUQsdUJBQThCLEdBQVcsRUFBRSxTQUFpQjtJQUN4RCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEtBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUssQ0FBQztJQUNoRSxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFOZSxxQkFBYSxnQkFNNUIsQ0FBQTtBQUVELHNCQUFzQixHQUFXLEVBQUUsUUFBZ0I7SUFDL0MsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsImZpbGUiOiJjb21tb24vdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUgUGFsYW50aXIgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNELTMgTGljZW5zZSBhcyBtb2RpZmllZCAodGhlIOKAnExpY2Vuc2XigJ0pOyB5b3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBsaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvUEFURU5UU1xuICovXG5cbi8qKlxuICogTWVhc3VyZSB3aWR0aCBvZiBhIHN0cmluZyBkaXNwbGF5ZWQgd2l0aCBzdHlsZXMgcHJvdmlkZWQgYnkgYGNsYXNzTmFtZWAuXG4gKiBTaG91bGQgb25seSBiZSB1c2VkIGlmIG1lYXN1cmluZyBjYW4ndCBiZSBkb25lIHdpdGggZXhpc3RpbmcgRE9NIGVsZW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZVRleHRXaWR0aCh0ZXh0OiBzdHJpbmcsIGNsYXNzTmFtZSA9IFwiXCIpIHtcbiAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgc3Bhbi5pbm5lckhUTUwgPSB0ZXh0O1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICBjb25zdCBzcGFuV2lkdGggPSBzcGFuLm9mZnNldFdpZHRoO1xuICAgIHNwYW4ucmVtb3ZlKCk7XG5cbiAgICByZXR1cm4gc3BhbldpZHRoICsgXCJweFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFkV2l0aFplcm9lcyhzdHI6IHN0cmluZywgbWluTGVuZ3RoOiBudW1iZXIpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgICByZXR1cm4gYCR7c3RyaW5nUmVwZWF0KFwiMFwiLCBtaW5MZW5ndGggLSBzdHIubGVuZ3RoKX0ke3N0cn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdSZXBlYXQoc3RyOiBzdHJpbmcsIG51bVRpbWVzOiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KG51bVRpbWVzICsgMSkuam9pbihzdHIpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tb24vdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7O0FBRUg7OztHQUdHO0FBQ0gsMEJBQWlDLElBQVksRUFBRSxTQUFjLEVBQUUsZ0JBQWdDO0lBQWhELHlCQUFjLEdBQWQsY0FBYztJQUFFLGdDQUFnQyxHQUFoQyxtQkFBbUIsUUFBUSxDQUFDLElBQUk7SUFDM0YsSUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUV0QixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFZCxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUM1QixDQUFDO0FBVmUsd0JBQWdCLG1CQVUvQixDQUFBO0FBRUQsdUJBQThCLEdBQVcsRUFBRSxTQUFpQjtJQUN4RCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEtBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUssQ0FBQztJQUNoRSxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFOZSxxQkFBYSxnQkFNNUIsQ0FBQTtBQUVELHNCQUFzQixHQUFXLEVBQUUsUUFBZ0I7SUFDL0MsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsImZpbGUiOiJjb21tb24vdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUgUGFsYW50aXIgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNELTMgTGljZW5zZSBhcyBtb2RpZmllZCAodGhlIOKAnExpY2Vuc2XigJ0pOyB5b3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBsaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvUEFURU5UU1xuICovXG5cbi8qKlxuICogTWVhc3VyZSB3aWR0aCBvZiBhIHN0cmluZyBkaXNwbGF5ZWQgd2l0aCBzdHlsZXMgcHJvdmlkZWQgYnkgYGNsYXNzTmFtZWAuXG4gKiBTaG91bGQgb25seSBiZSB1c2VkIGlmIG1lYXN1cmluZyBjYW4ndCBiZSBkb25lIHdpdGggZXhpc3RpbmcgRE9NIGVsZW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZVRleHRXaWR0aCh0ZXh0OiBzdHJpbmcsIGNsYXNzTmFtZSA9IFwiXCIsIGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5ib2R5KSB7XG4gICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIHNwYW4uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgIHNwYW4uaW5uZXJIVE1MID0gdGV4dDtcblxuICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgY29uc3Qgc3BhbldpZHRoID0gc3Bhbi5vZmZzZXRXaWR0aDtcbiAgICBzcGFuLnJlbW92ZSgpO1xuXG4gICAgcmV0dXJuIHNwYW5XaWR0aCArIFwicHhcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZFdpdGhaZXJvZXMoc3RyOiBzdHJpbmcsIG1pbkxlbmd0aDogbnVtYmVyKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPCBtaW5MZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGAke3N0cmluZ1JlcGVhdChcIjBcIiwgbWluTGVuZ3RoIC0gc3RyLmxlbmd0aCl9JHtzdHJ9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5nUmVwZWF0KHN0cjogc3RyaW5nLCBudW1UaW1lczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheShudW1UaW1lcyArIDEpLmpvaW4oc3RyKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==

@@ -140,3 +140,8 @@ /*

this.fromMomentToDate = function (momentDate) {
return new Date(momentDate.year(), momentDate.month(), momentDate.date(), momentDate.hours(), momentDate.minutes(), momentDate.seconds(), momentDate.milliseconds());
if (momentDate == null) {
return undefined;
}
else {
return new Date(momentDate.year(), momentDate.month(), momentDate.date(), momentDate.hours(), momentDate.minutes(), momentDate.seconds(), momentDate.milliseconds());
}
};

@@ -148,11 +153,16 @@ /**

this.fromDateToMoment = function (date) {
return moment([
date.getFullYear(),
date.getMonth(),
date.getDate(),
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds(),
]);
if (date == null || typeof date === "string") {
return moment(date);
}
else {
return moment([
date.getFullYear(),
date.getMonth(),
date.getDate(),
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds(),
]);
}
};

@@ -209,2 +219,2 @@ var defaultValue = this.props.defaultValue ? this.fromDateToMoment(this.props.defaultValue) : moment(null);

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRlSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHOzs7Ozs7Ozs7Ozs7Ozs7QUFFSCxJQUFZLFVBQVUsV0FBTSxZQUFZLENBQUMsQ0FBQTtBQUN6QyxJQUFZLE1BQU0sV0FBTSxRQUFRLENBQUMsQ0FBQTtBQUNqQyxJQUFZLEtBQUssV0FBTSxPQUFPLENBQUMsQ0FBQTtBQUUvQixxQkFVTyxtQkFBbUIsQ0FBQyxDQUFBO0FBRTNCLDJCQUEyQixjQUFjLENBQUMsQ0FBQTtBQUMxQywrQkFJTyxrQkFBa0IsQ0FBQyxDQUFBO0FBc0YxQjtJQUErQiw2QkFBbUQ7SUFpQjlFLG1CQUFtQixLQUF1QixFQUFFLE9BQWE7UUFqQjdELGlCQWlQQztRQS9OTyxrQkFBTSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFMbkIsZ0JBQVcsR0FBRyxxQkFBcUIsQ0FBQztRQUVuQyxhQUFRLEdBQWdCLElBQUksQ0FBQztRQStFN0Isa0JBQWEsR0FBRyxVQUFDLEtBQW9CO1lBQ3pDLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNKLE1BQU0sQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO2dCQUN4QyxDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQ3pDLENBQUMsQ0FBQTtRQWNPLHVCQUFrQixHQUFHO1lBQ3pCLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUE7UUFFTyxxQkFBZ0IsR0FBRyxVQUFDLElBQVUsRUFBRSwyQkFBb0M7WUFDeEUsSUFBTSxVQUFVLEdBQUcsS0FBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQU0sZUFBZSxHQUFHLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUNqRyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEQsSUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLElBQUksMkJBQTJCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNqRyxFQUFFLENBQUMsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxLQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGNBQU0sRUFBRSxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUNELFlBQUssQ0FBQyxVQUFVLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFBO1FBRU8sb0JBQWUsR0FBRyxVQUFDLENBQW9DO1lBQzNELEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDcEIsRUFBRSxDQUFDLENBQUMsS0FBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUN4QixLQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QixDQUFDO1lBQ0wsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixFQUFFLENBQUMsQ0FBQyxLQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLEtBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFCLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFBO1FBRU8scUJBQWdCLEdBQUc7WUFDdkIsSUFBTSxXQUFXLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVwRyxFQUFFLENBQUMsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsd0JBQVcsRUFBRSxDQUFDLENBQUM7WUFDdkUsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLHdCQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELENBQUM7UUFDTCxDQUFDLENBQUE7UUFFTyxxQkFBZ0IsR0FBRyxVQUFDLENBQXlDO1lBQ2pFLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLENBQUM7UUFDTCxDQUFDLENBQUE7UUFFTyxzQkFBaUIsR0FBRyxVQUFDLENBQXlDO1lBQ2xFLElBQU0sV0FBVyxHQUFJLENBQUMsQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztZQUN6RCxJQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFckQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEtBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxFQUFFLENBQUMsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxLQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBSyxFQUFFLHdCQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNKLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSx3QkFBVyxFQUFFLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxZQUFLLENBQUMsVUFBVSxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixLQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsd0JBQVcsRUFBRSxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQUVPLG9CQUFlLEdBQUc7WUFDdEIsSUFBTSxXQUFXLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDM0MsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxLQUFJLENBQUMsYUFBYSxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRTNHLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pDLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFlBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkUsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDSixLQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQzdDLENBQUM7Z0JBRUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNuQixZQUFLLENBQUMsVUFBVSxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELENBQUM7Z0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLFlBQUssQ0FBQyxVQUFVLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLENBQUM7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ0osWUFBSyxDQUFDLFVBQVUsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDeEUsQ0FBQztZQUNMLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixLQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQUVPLGdCQUFXLEdBQUcsVUFBQyxFQUFlO1lBQ2xDLEtBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQTtRQUVEOzs7V0FHRztRQUNLLHFCQUFnQixHQUFHLFVBQUMsVUFBeUI7WUFDakQsTUFBTSxDQUFDLElBQUksSUFBSSxDQUNYLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFDakIsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUNsQixVQUFVLENBQUMsSUFBSSxFQUFFLEVBQ2pCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFDbEIsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUNwQixVQUFVLENBQUMsT0FBTyxFQUFFLEVBQ3BCLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FDNUIsQ0FBQztRQUNOLENBQUMsQ0FBQTtRQUVEOzs7V0FHRztRQUNLLHFCQUFnQixHQUFHLFVBQUMsSUFBVTtZQUNsQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNWLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxlQUFlLEVBQUU7YUFDekIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFBO1FBNU5HLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3RyxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1QsY0FBYyxFQUFFLEtBQUs7WUFDckIsTUFBTSxFQUFFLEtBQUs7WUFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVk7WUFDOUYsV0FBVyxFQUFFLElBQUk7U0FDcEIsQ0FBQztJQUNOLENBQUM7SUFFTSwwQkFBTSxHQUFiO1FBQ0ksSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdHLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRTlHLElBQU0sY0FBYyxHQUFHLENBQ25CLG9CQUFDLHVCQUFVLGVBQ0gsSUFBSSxDQUFDLEtBQUssR0FDZCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFrQixFQUNoRCxZQUFZLEVBQUUsSUFBSyxFQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFpQixFQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUssR0FDakcsQ0FDTCxDQUFDO1FBRUYsSUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDO1lBQzVCLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxLQUFLLEVBQUUsQ0FBQztTQUM5RixDQUFDLENBQUM7UUFFSCxJQUFNLFlBQVksR0FBRyxDQUNqQixvQkFBQyxhQUFNLEdBQ0gsU0FBUyxFQUFFLGNBQU8sQ0FBQyxPQUFRLEVBQzNCLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVMsRUFDOUIsUUFBUSxFQUFDLFVBQVUsRUFDbkIsTUFBTSxFQUFFLGFBQU0sQ0FBQyxPQUFRLEVBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZ0IsRUFDaEMsQ0FDTCxDQUFDO1FBRUYsTUFBTSxDQUFDLENBQ0gsb0JBQUMsY0FBTyxHQUNKLFNBQVMsRUFBRSxLQUFNLEVBQ2pCLE9BQU8sRUFBRSxjQUFlLEVBQ3hCLFlBQVksRUFBRSxLQUFNLEVBQ3BCLE1BQU0sRUFBRSxJQUFLLEVBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTyxFQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFtQixFQUNqQyxnQkFBZ0IsRUFBQyxzQkFBc0IsRUFDdkMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZ0I7WUFFckMsb0JBQUMsaUJBQVUsR0FDUCxTQUFTLEVBQUUsWUFBYSxFQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFTLEVBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBWSxFQUMzQixJQUFJLEVBQUMsTUFBTSxFQUNYLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZ0IsRUFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBa0IsRUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBaUIsRUFDL0IsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBaUIsRUFDL0IsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTyxFQUMvQixZQUFZLEVBQUUsWUFBYSxFQUMzQixLQUFLLEVBQUUsVUFBVyxFQUNwQjtTQUNJLENBQ2IsQ0FBQztJQUNOLENBQUM7SUFFTSw2Q0FBeUIsR0FBaEMsVUFBaUMsU0FBMEI7UUFDdkQsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsZ0JBQUssQ0FBQyx5QkFBeUIsWUFBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBZ0JPLG1DQUFlLEdBQXZCLFVBQXdCLEtBQW9CO1FBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sMEJBQU0sR0FBZCxVQUFlLEtBQW9CO1FBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDO0lBQzFDLENBQUM7SUFFTyxpQ0FBYSxHQUFyQixVQUFzQixLQUFvQjtRQUN0QyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQXJIYSxzQkFBWSxHQUFvQjtRQUMxQyxnQkFBZ0IsRUFBRSxJQUFJO1FBQ3RCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsTUFBTSxFQUFFLFlBQVk7UUFDcEIsa0JBQWtCLEVBQUUsY0FBYztRQUNsQyxPQUFPLEVBQUUsa0NBQWlCLEVBQUU7UUFDNUIsT0FBTyxFQUFFLGtDQUFpQixFQUFFO1FBQzVCLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLGlCQUFpQixFQUFFLGNBQWM7UUFDakMsZUFBZSxFQUFFLGVBQVEsQ0FBQyxNQUFNO0tBQ25DLENBQUM7SUFzT04sZ0JBQUM7QUFBRCxDQWpQQSxBQWlQQyxDQWpQOEIsd0JBQWlCLEdBaVAvQztBQWpQWSxpQkFBUyxZQWlQckIsQ0FBQSIsImZpbGUiOiJkYXRlSW5wdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTYgUGFsYW50aXIgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNELTMgTGljZW5zZSBhcyBtb2RpZmllZCAodGhlIOKAnExpY2Vuc2XigJ0pOyB5b3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBsaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvUEFURU5UU1xuICovXG5cbmltcG9ydCAqIGFzIGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbXBvbmVudCxcbiAgICBCdXR0b24sXG4gICAgQ2xhc3NlcyxcbiAgICBJbnB1dEdyb3VwLFxuICAgIEludGVudCxcbiAgICBJUHJvcHMsXG4gICAgUG9wb3ZlcixcbiAgICBQb3NpdGlvbixcbiAgICBVdGlscyxcbn0gZnJvbSBcIkBibHVlcHJpbnRqcy9jb3JlXCI7XG5cbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tIFwiLi9kYXRlUGlja2VyXCI7XG5pbXBvcnQge1xuICAgIGdldERlZmF1bHRNYXhEYXRlLFxuICAgIGdldERlZmF1bHRNaW5EYXRlLFxuICAgIElEYXRlUGlja2VyQmFzZVByb3BzLFxufSBmcm9tIFwiLi9kYXRlUGlja2VyQ29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRlSW5wdXRQcm9wcyBleHRlbmRzIElEYXRlUGlja2VyQmFzZVByb3BzLCBJUHJvcHMge1xuICAgIC8qKlxuICAgICAqIEFsbG93cyB0aGUgdXNlciB0byBjbGVhciB0aGUgc2VsZWN0aW9uIGJ5IGNsaWNraW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF5LlxuICAgICAqIFBhc3NlZCB0byBgRGF0ZVBpY2tlcmAgY29tcG9uZW50XG4gICAgICovXG4gICAgY2FuQ2xlYXJTZWxlY3Rpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY2FsZW5kYXIgcG9wb3ZlciBzaG91bGQgY2xvc2Ugd2hlbiBhIGRhdGUgaXMgc2VsZWN0ZWQuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGNsb3NlT25TZWxlY3Rpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgZGF0ZSB0byBiZSB1c2VkIGluIHRoZSBjb21wb25lbnQgd2hlbiB1bmNvbnRyb2xsZWQuXG4gICAgICovXG4gICAgZGVmYXVsdFZhbHVlPzogRGF0ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGUuIFNlZSBvcHRpb25zXG4gICAgICogaGVyZTogaHR0cDovL21vbWVudGpzLmNvbS9kb2NzLyMvZGlzcGxheWluZy9mb3JtYXQvXG4gICAgICogQGRlZmF1bHQgXCJZWVlZLU1NLUREXCJcbiAgICAgKi9cbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIGRhdGUgc2VsZWN0ZWQgaW52YWxpZC5cbiAgICAgKiBAZGVmYXVsdCBcIkludmFsaWQgZGF0ZVwiXG4gICAgICovXG4gICAgaW52YWxpZERhdGVNZXNzYWdlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyB2YWxpZCBkYXRlIHRocm91Z2ggdGhlIGBEYXRlUGlja2VyYCBvciBieSB0eXBpbmdcbiAgICAgKiBpbiB0aGUgaW5wdXQuXG4gICAgICovXG4gICAgb25DaGFuZ2U/OiAoc2VsZWN0ZWREYXRlOiBEYXRlKSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgZmluaXNoZXMgdHlwaW5nIGluIGEgbmV3IGRhdGUgYW5kIHRoZSBkYXRlIGNhdXNlcyBhbiBlcnJvciBzdGF0ZS5cbiAgICAgKiBJZiB0aGUgZGF0ZSBpcyBpbnZhbGlkLCBgbmV3IERhdGUodW5kZWZpbmVkKWAgd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhlIGRhdGUgaXMgb3V0IG9mIHJhbmdlLFxuICAgICAqIHRoZSBvdXQgb2YgcmFuZ2UgZGF0ZSB3aWxsIGJlIHJldHVybmVkIChgb25DaGFuZ2VgIGlzIG5vdCBjYWxsZWQgaW4gdGhpcyBjYXNlKS5cbiAgICAgKi9cbiAgICBvbkVycm9yPzogKGVycm9yRGF0ZTogRGF0ZSkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUsIHRoZSBQb3BvdmVyIHdpbGwgb3BlbiB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgaW5wdXQuIElmIGZhbHNlLCB0aGUgUG9wb3ZlciB3aWxsIG9ubHlcbiAgICAgKiBvcGVuIHdoZW4gdGhlIGNhbGVuZGFyIGljb24gaXMgY2xpY2tlZC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgb3Blbk9uRm9jdXM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHRoZSBkYXRlIHNlbGVjdGVkIGlzIG91dCBvZiByYW5nZS5cbiAgICAgKiBAZGVmYXVsdCBcIk91dCBvZiByYW5nZVwiXG4gICAgICovXG4gICAgb3V0T2ZSYW5nZU1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gdGhlIGRhdGUgcG9wb3ZlciBzaG91bGQgYXBwZWFyIGluIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCBib3guXG4gICAgICogQGRlZmF1bHQgUG9zaXRpb24uQk9UVE9NXG4gICAgICovXG4gICAgcG9wb3ZlclBvc2l0aW9uPzogUG9zaXRpb247XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRheS4gSWYgdGhpcyBwcm9wIGlzIHByZXNlbnQsIHRoZSBjb21wb25lbnQgYWN0cyBpbiBhIGNvbnRyb2xsZWQgbWFubmVyLlxuICAgICAqIFRvIGRpc3BsYXkgbm8gZGF0ZSBpbiB0aGUgaW5wdXQgZmllbGQsIHBhc3MgYG51bGxgIHRvIHRoZSB2YWx1ZSBwcm9wLiBUbyBkaXNwbGF5IGFuIGludmFsaWQgZGF0ZSBlcnJvclxuICAgICAqIGluIHRoZSBpbnB1dCBmaWVsZCwgcGFzcyBgbmV3IERhdGUodW5kZWZpbmVkKWAgdG8gdGhlIHZhbHVlIHByb3AuXG4gICAgICovXG4gICAgdmFsdWU/OiBEYXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRlSW5wdXRTdGF0ZSB7XG4gICAgdmFsdWU/OiBtb21lbnQuTW9tZW50O1xuICAgIHZhbHVlU3RyaW5nPzogc3RyaW5nO1xuICAgIGlzSW5wdXRGb2N1c2VkPzogYm9vbGVhbjtcbiAgICBpc09wZW4/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0ZUlucHV0IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQ8SURhdGVJbnB1dFByb3BzLCBJRGF0ZUlucHV0U3RhdGU+IHtcbiAgICBwdWJsaWMgc3RhdGljIGRlZmF1bHRQcm9wczogSURhdGVJbnB1dFByb3BzID0ge1xuICAgICAgICBjbG9zZU9uU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgIGZvcm1hdDogXCJZWVlZLU1NLUREXCIsXG4gICAgICAgIGludmFsaWREYXRlTWVzc2FnZTogXCJJbnZhbGlkIGRhdGVcIixcbiAgICAgICAgbWF4RGF0ZTogZ2V0RGVmYXVsdE1heERhdGUoKSxcbiAgICAgICAgbWluRGF0ZTogZ2V0RGVmYXVsdE1pbkRhdGUoKSxcbiAgICAgICAgb3Blbk9uRm9jdXM6IHRydWUsXG4gICAgICAgIG91dE9mUmFuZ2VNZXNzYWdlOiBcIk91dCBvZiByYW5nZVwiLFxuICAgICAgICBwb3BvdmVyUG9zaXRpb246IFBvc2l0aW9uLkJPVFRPTSxcbiAgICB9O1xuXG4gICAgcHVibGljIGRpc3BsYXlOYW1lID0gXCJCbHVlcHJpbnQuRGF0ZUlucHV0XCI7XG5cbiAgICBwcml2YXRlIGlucHV0UmVmOiBIVE1MRWxlbWVudCA9IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM/OiBJRGF0ZUlucHV0UHJvcHMsIGNvbnRleHQ/OiBhbnkpIHtcbiAgICAgICAgc3VwZXIocHJvcHMsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID8gdGhpcy5mcm9tRGF0ZVRvTW9tZW50KHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSA6IG1vbWVudChudWxsKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaXNJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLmZyb21EYXRlVG9Nb21lbnQodGhpcy5wcm9wcy52YWx1ZSkgOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVN0cmluZzogbnVsbCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gdGhpcy5zdGF0ZS5pc0lucHV0Rm9jdXNlZCA/IHRoaXMuc3RhdGUudmFsdWVTdHJpbmcgOiB0aGlzLmdldERhdGVTdHJpbmcodGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLnN0YXRlLmlzSW5wdXRGb2N1c2VkID8gbW9tZW50KHRoaXMuc3RhdGUudmFsdWVTdHJpbmcsIHRoaXMucHJvcHMuZm9ybWF0KSA6IHRoaXMuc3RhdGUudmFsdWU7XG5cbiAgICAgICAgY29uc3QgcG9wb3ZlckNvbnRlbnQgPSAoXG4gICAgICAgICAgICA8RGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgICAgIGNhbkNsZWFyU2VsZWN0aW9uPXt0aGlzLnByb3BzLmNhbkNsZWFyU2VsZWN0aW9ufVxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17bnVsbH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVEYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnZhbGlkQW5kSW5SYW5nZSh0aGlzLnN0YXRlLnZhbHVlKSA/IHRoaXMuZnJvbU1vbWVudFRvRGF0ZSh0aGlzLnN0YXRlLnZhbHVlKSA6IG51bGx9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGlucHV0Q2xhc3NlcyA9IGNsYXNzTmFtZXMoe1xuICAgICAgICAgICAgXCJwdC1pbnRlbnQtZGFuZ2VyXCI6ICEodGhpcy52YWxpZEFuZEluUmFuZ2UoZGF0ZSkgfHwgdGhpcy5pc051bGwoZGF0ZSkgfHwgZGF0ZVN0cmluZyA9PT0gXCJcIiksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGNhbGVuZGFySWNvbiA9IChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e0NsYXNzZXMuTUlOSU1BTH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBpY29uTmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICAgICAgICBpbnRlbnQ9e0ludGVudC5QUklNQVJZfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlSWNvbkNsaWNrfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9e3BvcG92ZXJDb250ZW50fVxuICAgICAgICAgICAgICAgIGVuZm9yY2VGb2N1cz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgaW5saW5lPXt0cnVlfVxuICAgICAgICAgICAgICAgIGlzT3Blbj17dGhpcy5zdGF0ZS5pc09wZW59XG4gICAgICAgICAgICAgICAgb25DbG9zZT17dGhpcy5oYW5kbGVDbG9zZVBvcG92ZXJ9XG4gICAgICAgICAgICAgICAgcG9wb3ZlckNsYXNzTmFtZT1cInB0LWRhdGVpbnB1dC1wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbj17dGhpcy5wcm9wcy5wb3BvdmVyUG9zaXRpb259XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPElucHV0R3JvdXBcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtpbnB1dENsYXNzZXN9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnByb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBpbnB1dFJlZj17dGhpcy5zZXRJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlSW5wdXRCbHVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVJbnB1dENsaWNrfVxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUlucHV0Rm9jdXN9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLmZvcm1hdH1cbiAgICAgICAgICAgICAgICAgICAgcmlnaHRFbGVtZW50PXtjYWxlbmRhckljb259XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtkYXRlU3RyaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBJRGF0ZUlucHV0UHJvcHMpIHtcbiAgICAgICAgaWYgKG5leHRQcm9wcy52YWx1ZSAhPT0gdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLmZyb21EYXRlVG9Nb21lbnQobmV4dFByb3BzLnZhbHVlKSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGVTdHJpbmcgPSAodmFsdWU6IG1vbWVudC5Nb21lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNOdWxsKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZUlzSW5SYW5nZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuZm9ybWF0KHRoaXMucHJvcHMuZm9ybWF0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMub3V0T2ZSYW5nZU1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaW52YWxpZERhdGVNZXNzYWdlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRBbmRJblJhbmdlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgJiYgdGhpcy5kYXRlSXNJblJhbmdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTnVsbCh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgICAgICByZXR1cm4gdmFsdWUucGFyc2luZ0ZsYWdzKCkubnVsbElucHV0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGF0ZUlzSW5SYW5nZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgICAgICByZXR1cm4gdmFsdWUuaXNCZXR3ZWVuKHRoaXMucHJvcHMubWluRGF0ZSwgdGhpcy5wcm9wcy5tYXhEYXRlLCBcImRheVwiLCBcIltdXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xvc2VQb3BvdmVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNPcGVuOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSwgaGFzVXNlck1hbnVhbGx5U2VsZWN0ZWREYXRlOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vbWVudERhdGUgPSB0aGlzLmZyb21EYXRlVG9Nb21lbnQoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGhhc01vbnRoQ2hhbmdlZCA9IGRhdGUgIT09IG51bGwgJiYgIXRoaXMuaXNOdWxsKHRoaXMuc3RhdGUudmFsdWUpICYmIHRoaXMuc3RhdGUudmFsdWUuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICBtb21lbnREYXRlLm1vbnRoKCkgIT09IHRoaXMuc3RhdGUudmFsdWUubW9udGgoKTtcbiAgICAgICAgY29uc3QgaXNPcGVuID0gISh0aGlzLnByb3BzLmNsb3NlT25TZWxlY3Rpb24gJiYgaGFzVXNlck1hbnVhbGx5U2VsZWN0ZWREYXRlICYmICFoYXNNb250aENoYW5nZWQpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNJbnB1dEZvY3VzZWQ6IGZhbHNlLCBpc09wZW4sIHZhbHVlOiBtb21lbnREYXRlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzSW5wdXRGb2N1c2VkOiBmYWxzZSwgaXNPcGVuIH0pO1xuICAgICAgICB9XG4gICAgICAgIFV0aWxzLnNhZmVJbnZva2UodGhpcy5wcm9wcy5vbkNoYW5nZSwgdGhpcy5mcm9tTW9tZW50VG9EYXRlKG1vbWVudERhdGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUljb25DbGljayA9IChlOiBSZWFjdC5TeW50aGV0aWNFdmVudDxIVE1MRWxlbWVudD4pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuaXNPcGVuKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dFJlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5ibHVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNPcGVuOiB0cnVlIH0pO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0UmVmICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0UmVmLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUlucHV0Rm9jdXMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdGhpcy5pc051bGwodGhpcy5zdGF0ZS52YWx1ZSkgPyBcIlwiIDogdGhpcy5zdGF0ZS52YWx1ZS5mb3JtYXQodGhpcy5wcm9wcy5mb3JtYXQpO1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9wZW5PbkZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNJbnB1dEZvY3VzZWQ6IHRydWUsIGlzT3BlbjogdHJ1ZSwgdmFsdWVTdHJpbmcgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNJbnB1dEZvY3VzZWQ6IHRydWUsIHZhbHVlU3RyaW5nIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVJbnB1dENsaWNrID0gKGU6IFJlYWN0LlN5bnRoZXRpY0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9wZW5PbkZvY3VzKSB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVJbnB1dENoYW5nZSA9IChlOiBSZWFjdC5TeW50aGV0aWNFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBtb21lbnQodmFsdWVTdHJpbmcsIHRoaXMucHJvcHMuZm9ybWF0KTtcblxuICAgICAgICBpZiAodmFsdWUuaXNWYWxpZCgpICYmIHRoaXMuZGF0ZUlzSW5SYW5nZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWUsIHZhbHVlU3RyaW5nIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWVTdHJpbmcgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBVdGlscy5zYWZlSW52b2tlKHRoaXMucHJvcHMub25DaGFuZ2UsIHRoaXMuZnJvbU1vbWVudFRvRGF0ZSh2YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlU3RyaW5nIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVJbnB1dEJsdXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdGhpcy5zdGF0ZS52YWx1ZVN0cmluZztcbiAgICAgICAgbGV0IHZhbHVlID0gbW9tZW50KHZhbHVlU3RyaW5nLCB0aGlzLnByb3BzLmZvcm1hdCk7XG4gICAgICAgIGlmICh2YWx1ZVN0cmluZyAhPT0gdGhpcy5nZXREYXRlU3RyaW5nKHRoaXMuc3RhdGUudmFsdWUpICYmICghdmFsdWUuaXNWYWxpZCgpIHx8ICF0aGlzLmRhdGVJc0luUmFuZ2UodmFsdWUpKSkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzSW5wdXRGb2N1c2VkOiBmYWxzZSwgdmFsdWUsIHZhbHVlU3RyaW5nOiBudWxsIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNJbnB1dEZvY3VzZWQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIFV0aWxzLnNhZmVJbnZva2UodGhpcy5wcm9wcy5vbkVycm9yLCBuZXcgRGF0ZSh1bmRlZmluZWQpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGF0ZUlzSW5SYW5nZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBVdGlscy5zYWZlSW52b2tlKHRoaXMucHJvcHMub25FcnJvciwgdGhpcy5mcm9tTW9tZW50VG9EYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFV0aWxzLnNhZmVJbnZva2UodGhpcy5wcm9wcy5vbkNoYW5nZSwgdGhpcy5mcm9tTW9tZW50VG9EYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNJbnB1dEZvY3VzZWQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbnB1dFJlZiA9IChlbDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dFJlZiA9IGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zbGF0ZSBhIG1vbWVudCBpbnRvIGEgRGF0ZSBvYmplY3QsIGFkanVzdGluZyB0aGUgbW9tZW50IHRpbWV6b25lIGludG8gdGhlIGxvY2FsIG9uZS5cbiAgICAgKiBUaGlzIGlzIGEgbm8tb3AgdW5sZXNzIG1vbWVudC10aW1lem9uZSdzIHNldERlZmF1bHQgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgZnJvbU1vbWVudFRvRGF0ZSA9IChtb21lbnREYXRlOiBtb21lbnQuTW9tZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgICAgIG1vbWVudERhdGUueWVhcigpLFxuICAgICAgICAgICAgbW9tZW50RGF0ZS5tb250aCgpLFxuICAgICAgICAgICAgbW9tZW50RGF0ZS5kYXRlKCksXG4gICAgICAgICAgICBtb21lbnREYXRlLmhvdXJzKCksXG4gICAgICAgICAgICBtb21lbnREYXRlLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIG1vbWVudERhdGUuc2Vjb25kcygpLFxuICAgICAgICAgICAgbW9tZW50RGF0ZS5taWxsaXNlY29uZHMoKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2xhdGUgYSBEYXRlIG9iamVjdCBpbnRvIGEgbW9tZW50LCBhZGp1c3RpbmcgdGhlIGxvY2FsIHRpbWV6b25lIGludG8gdGhlIG1vbWVudCBvbmUuXG4gICAgICogVGhpcyBpcyBhIG5vLW9wIHVubGVzcyBtb21lbnQtdGltZXpvbmUncyBzZXREZWZhdWx0IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGZyb21EYXRlVG9Nb21lbnQgPSAoZGF0ZTogRGF0ZSkgPT4ge1xuICAgICAgICByZXR1cm4gbW9tZW50KFtcbiAgICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICAgICAgZGF0ZS5nZXRIb3VycygpLFxuICAgICAgICAgICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICAgICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgICAgIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCksXG4gICAgICAgIF0pO1xuICAgIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRlSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHOzs7Ozs7Ozs7Ozs7Ozs7QUFFSCxJQUFZLFVBQVUsV0FBTSxZQUFZLENBQUMsQ0FBQTtBQUN6QyxJQUFZLE1BQU0sV0FBTSxRQUFRLENBQUMsQ0FBQTtBQUNqQyxJQUFZLEtBQUssV0FBTSxPQUFPLENBQUMsQ0FBQTtBQUUvQixxQkFVTyxtQkFBbUIsQ0FBQyxDQUFBO0FBRTNCLDJCQUEyQixjQUFjLENBQUMsQ0FBQTtBQUMxQywrQkFJTyxrQkFBa0IsQ0FBQyxDQUFBO0FBc0YxQjtJQUErQiw2QkFBbUQ7SUFpQjlFLG1CQUFtQixLQUF1QixFQUFFLE9BQWE7UUFqQjdELGlCQXlQQztRQXZPTyxrQkFBTSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFMbkIsZ0JBQVcsR0FBRyxxQkFBcUIsQ0FBQztRQUVuQyxhQUFRLEdBQWdCLElBQUksQ0FBQztRQStFN0Isa0JBQWEsR0FBRyxVQUFDLEtBQW9CO1lBQ3pDLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNKLE1BQU0sQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO2dCQUN4QyxDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sQ0FBQyxLQUFJLENB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QU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDO0lBQzFDLENBQUM7SUFFTyxpQ0FBYSxHQUFyQixVQUFzQixLQUFvQjtRQUN0QyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQXJIYSxzQkFBWSxHQUFvQjtRQUMxQyxnQkFBZ0IsRUFBRSxJQUFJO1FBQ3RCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsTUFBTSxFQUFFLFlBQVk7UUFDcEIsa0JBQWtCLEVBQUUsY0FBYztRQUNsQyxPQUFPLEVBQUUsa0NBQWlCLEVBQUU7UUFDNUIsT0FBTyxFQUFFLGtDQUFpQixFQUFFO1FBQzVCLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLGlCQUFpQixFQUFFLGNBQWM7UUFDakMsZUFBZSxFQUFFLGVBQVEsQ0FBQyxNQUFNO0tBQ25DLENBQUM7SUE4T04sZ0JBQUM7QUFBRCxDQXpQQSxBQXlQQyxDQXpQOEIsd0JBQWlCLEdBeVAvQztBQXpQWSxpQkFBUyxZQXlQckIsQ0FBQSIsImZpbGUiOiJkYXRlSW5wdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTYgUGFsYW50aXIgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNELTMgTGljZW5zZSBhcyBtb2RpZmllZCAodGhlIOKAnExpY2Vuc2XigJ0pOyB5b3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBsaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvUEFURU5UU1xuICovXG5cbmltcG9ydCAqIGFzIGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbXBvbmVudCxcbiAgICBCdXR0b24sXG4gICAgQ2xhc3NlcyxcbiAgICBJbnB1dEdyb3VwLFxuICAgIEludGVudCxcbiAgICBJUHJvcHMsXG4gICAgUG9wb3ZlcixcbiAgICBQb3NpdGlvbixcbiAgICBVdGlscyxcbn0gZnJvbSBcIkBibHVlcHJpbnRqcy9jb3JlXCI7XG5cbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tIFwiLi9kYXRlUGlja2VyXCI7XG5pbXBvcnQge1xuICAgIGdldERlZmF1bHRNYXhEYXRlLFxuICAgIGdldERlZmF1bHRNaW5EYXRlLFxuICAgIElEYXRlUGlja2VyQmFzZVByb3BzLFxufSBmcm9tIFwiLi9kYXRlUGlja2VyQ29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRlSW5wdXRQcm9wcyBleHRlbmRzIElEYXRlUGlja2VyQmFzZVByb3BzLCBJUHJvcHMge1xuICAgIC8qKlxuICAgICAqIEFsbG93cyB0aGUgdXNlciB0byBjbGVhciB0aGUgc2VsZWN0aW9uIGJ5IGNsaWNraW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF5LlxuICAgICAqIFBhc3NlZCB0byBgRGF0ZVBpY2tlcmAgY29tcG9uZW50XG4gICAgICovXG4gICAgY2FuQ2xlYXJTZWxlY3Rpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY2FsZW5kYXIgcG9wb3ZlciBzaG91bGQgY2xvc2Ugd2hlbiBhIGRhdGUgaXMgc2VsZWN0ZWQuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGNsb3NlT25TZWxlY3Rpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgZGF0ZSB0byBiZSB1c2VkIGluIHRoZSBjb21wb25lbnQgd2hlbiB1bmNvbnRyb2xsZWQuXG4gICAgICovXG4gICAgZGVmYXVsdFZhbHVlPzogRGF0ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGUuIFNlZSBvcHRpb25zXG4gICAgICogaGVyZTogaHR0cDovL21vbWVudGpzLmNvbS9kb2NzLyMvZGlzcGxheWluZy9mb3JtYXQvXG4gICAgICogQGRlZmF1bHQgXCJZWVlZLU1NLUREXCJcbiAgICAgKi9cbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIGRhdGUgc2VsZWN0ZWQgaW52YWxpZC5cbiAgICAgKiBAZGVmYXVsdCBcIkludmFsaWQgZGF0ZVwiXG4gICAgICovXG4gICAgaW52YWxpZERhdGVNZXNzYWdlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyB2YWxpZCBkYXRlIHRocm91Z2ggdGhlIGBEYXRlUGlja2VyYCBvciBieSB0eXBpbmdcbiAgICAgKiBpbiB0aGUgaW5wdXQuXG4gICAgICovXG4gICAgb25DaGFuZ2U/OiAoc2VsZWN0ZWREYXRlOiBEYXRlKSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgZmluaXNoZXMgdHlwaW5nIGluIGEgbmV3IGRhdGUgYW5kIHRoZSBkYXRlIGNhdXNlcyBhbiBlcnJvciBzdGF0ZS5cbiAgICAgKiBJZiB0aGUgZGF0ZSBpcyBpbnZhbGlkLCBgbmV3IERhdGUodW5kZWZpbmVkKWAgd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhlIGRhdGUgaXMgb3V0IG9mIHJhbmdlLFxuICAgICAqIHRoZSBvdXQgb2YgcmFuZ2UgZGF0ZSB3aWxsIGJlIHJldHVybmVkIChgb25DaGFuZ2VgIGlzIG5vdCBjYWxsZWQgaW4gdGhpcyBjYXNlKS5cbiAgICAgKi9cbiAgICBvbkVycm9yPzogKGVycm9yRGF0ZTogRGF0ZSkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUsIHRoZSBQb3BvdmVyIHdpbGwgb3BlbiB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgaW5wdXQuIElmIGZhbHNlLCB0aGUgUG9wb3ZlciB3aWxsIG9ubHlcbiAgICAgKiBvcGVuIHdoZW4gdGhlIGNhbGVuZGFyIGljb24gaXMgY2xpY2tlZC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgb3Blbk9uRm9jdXM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHRoZSBkYXRlIHNlbGVjdGVkIGlzIG91dCBvZiByYW5nZS5cbiAgICAgKiBAZGVmYXVsdCBcIk91dCBvZiByYW5nZVwiXG4gICAgICovXG4gICAgb3V0T2ZSYW5nZU1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gdGhlIGRhdGUgcG9wb3ZlciBzaG91bGQgYXBwZWFyIGluIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCBib3guXG4gICAgICogQGRlZmF1bHQgUG9zaXRpb24uQk9UVE9NXG4gICAgICovXG4gICAgcG9wb3ZlclBvc2l0aW9uPzogUG9zaXRpb247XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRheS4gSWYgdGhpcyBwcm9wIGlzIHByZXNlbnQsIHRoZSBjb21wb25lbnQgYWN0cyBpbiBhIGNvbnRyb2xsZWQgbWFubmVyLlxuICAgICAqIFRvIGRpc3BsYXkgbm8gZGF0ZSBpbiB0aGUgaW5wdXQgZmllbGQsIHBhc3MgYG51bGxgIHRvIHRoZSB2YWx1ZSBwcm9wLiBUbyBkaXNwbGF5IGFuIGludmFsaWQgZGF0ZSBlcnJvclxuICAgICAqIGluIHRoZSBpbnB1dCBmaWVsZCwgcGFzcyBgbmV3IERhdGUodW5kZWZpbmVkKWAgdG8gdGhlIHZhbHVlIHByb3AuXG4gICAgICovXG4gICAgdmFsdWU/OiBEYXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRlSW5wdXRTdGF0ZSB7XG4gICAgdmFsdWU/OiBtb21lbnQuTW9tZW50O1xuICAgIHZhbHVlU3RyaW5nPzogc3RyaW5nO1xuICAgIGlzSW5wdXRGb2N1c2VkPzogYm9vbGVhbjtcbiAgICBpc09wZW4/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0ZUlucHV0IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQ8SURhdGVJbnB1dFByb3BzLCBJRGF0ZUlucHV0U3RhdGU+IHtcbiAgICBwdWJsaWMgc3RhdGljIGRlZmF1bHRQcm9wczogSURhdGVJbnB1dFByb3BzID0ge1xuICAgICAgICBjbG9zZU9uU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgIGZvcm1hdDogXCJZWVlZLU1NLUREXCIsXG4gICAgICAgIGludmFsaWREYXRlTWVzc2FnZTogXCJJbnZhbGlkIGRhdGVcIixcbiAgICAgICAgbWF4RGF0ZTogZ2V0RGVmYXVsdE1heERhdGUoKSxcbiAgICAgICAgbWluRGF0ZTogZ2V0RGVmYXVsdE1pbkRhdGUoKSxcbiAgICAgICAgb3Blbk9uRm9jdXM6IHRydWUsXG4gICAgICAgIG91dE9mUmFuZ2VNZXNzYWdlOiBcIk91dCBvZiByYW5nZVwiLFxuICAgICAgICBwb3BvdmVyUG9zaXRpb246IFBvc2l0aW9uLkJPVFRPTSxcbiAgICB9O1xuXG4gICAgcHVibGljIGRpc3BsYXlOYW1lID0gXCJCbHVlcHJpbnQuRGF0ZUlucHV0XCI7XG5cbiAgICBwcml2YXRlIGlucHV0UmVmOiBIVE1MRWxlbWVudCA9IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM/OiBJRGF0ZUlucHV0UHJvcHMsIGNvbnRleHQ/OiBhbnkpIHtcbiAgICAgICAgc3VwZXIocHJvcHMsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID8gdGhpcy5mcm9tRGF0ZVRvTW9tZW50KHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSA6IG1vbWVudChudWxsKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaXNJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLmZyb21EYXRlVG9Nb21lbnQodGhpcy5wcm9wcy52YWx1ZSkgOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVN0cmluZzogbnVsbCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gdGhpcy5zdGF0ZS5pc0lucHV0Rm9jdXNlZCA/IHRoaXMuc3RhdGUudmFsdWVTdHJpbmcgOiB0aGlzLmdldERhdGVTdHJpbmcodGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLnN0YXRlLmlzSW5wdXRGb2N1c2VkID8gbW9tZW50KHRoaXMuc3RhdGUudmFsdWVTdHJpbmcsIHRoaXMucHJvcHMuZm9ybWF0KSA6IHRoaXMuc3RhdGUudmFsdWU7XG5cbiAgICAgICAgY29uc3QgcG9wb3ZlckNvbnRlbnQgPSAoXG4gICAgICAgICAgICA8RGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgICAgIGNhbkNsZWFyU2VsZWN0aW9uPXt0aGlzLnByb3BzLmNhbkNsZWFyU2VsZWN0aW9ufVxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17bnVsbH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVEYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnZhbGlkQW5kSW5SYW5nZSh0aGlzLnN0YXRlLnZhbHVlKSA/IHRoaXMuZnJvbU1vbWVudFRvRGF0ZSh0aGlzLnN0YXRlLnZhbHVlKSA6IG51bGx9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGlucHV0Q2xhc3NlcyA9IGNsYXNzTmFtZXMoe1xuICAgICAgICAgICAgXCJwdC1pbnRlbnQtZGFuZ2VyXCI6ICEodGhpcy52YWxpZEFuZEluUmFuZ2UoZGF0ZSkgfHwgdGhpcy5pc051bGwoZGF0ZSkgfHwgZGF0ZVN0cmluZyA9PT0gXCJcIiksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGNhbGVuZGFySWNvbiA9IChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e0NsYXNzZXMuTUlOSU1BTH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBpY29uTmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICAgICAgICBpbnRlbnQ9e0ludGVudC5QUklNQVJZfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlSWNvbkNsaWNrfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9e3BvcG92ZXJDb250ZW50fVxuICAgICAgICAgICAgICAgIGVuZm9yY2VGb2N1cz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgaW5saW5lPXt0cnVlfVxuICAgICAgICAgICAgICAgIGlzT3Blbj17dGhpcy5zdGF0ZS5pc09wZW59XG4gICAgICAgICAgICAgICAgb25DbG9zZT17dGhpcy5oYW5kbGVDbG9zZVBvcG92ZXJ9XG4gICAgICAgICAgICAgICAgcG9wb3ZlckNsYXNzTmFtZT1cInB0LWRhdGVpbnB1dC1wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbj17dGhpcy5wcm9wcy5wb3BvdmVyUG9zaXRpb259XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPElucHV0R3JvdXBcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtpbnB1dENsYXNzZXN9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnByb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBpbnB1dFJlZj17dGhpcy5zZXRJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlSW5wdXRCbHVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVJbnB1dENsaWNrfVxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUlucHV0Rm9jdXN9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLmZvcm1hdH1cbiAgICAgICAgICAgICAgICAgICAgcmlnaHRFbGVtZW50PXtjYWxlbmRhckljb259XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtkYXRlU3RyaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBJRGF0ZUlucHV0UHJvcHMpIHtcbiAgICAgICAgaWYgKG5leHRQcm9wcy52YWx1ZSAhPT0gdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLmZyb21EYXRlVG9Nb21lbnQobmV4dFByb3BzLnZhbHVlKSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGVTdHJpbmcgPSAodmFsdWU6IG1vbWVudC5Nb21lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNOdWxsKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZUlzSW5SYW5nZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuZm9ybWF0KHRoaXMucHJvcHMuZm9ybWF0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMub3V0T2ZSYW5nZU1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaW52YWxpZERhdGVNZXNzYWdlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRBbmRJblJhbmdlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgJiYgdGhpcy5kYXRlSXNJblJhbmdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTnVsbCh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgICAgICByZXR1cm4gdmFsdWUucGFyc2luZ0ZsYWdzKCkubnVsbElucHV0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGF0ZUlzSW5SYW5nZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgICAgICByZXR1cm4gdmFsdWUuaXNCZXR3ZWVuKHRoaXMucHJvcHMubWluRGF0ZSwgdGhpcy5wcm9wcy5tYXhEYXRlLCBcImRheVwiLCBcIltdXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xvc2VQb3BvdmVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNPcGVuOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSwgaGFzVXNlck1hbnVhbGx5U2VsZWN0ZWREYXRlOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vbWVudERhdGUgPSB0aGlzLmZyb21EYXRlVG9Nb21lbnQoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGhhc01vbnRoQ2hhbmdlZCA9IGRhdGUgIT09IG51bGwgJiYgIXRoaXMuaXNOdWxsKHRoaXMuc3RhdGUudmFsdWUpICYmIHRoaXMuc3RhdGUudmFsdWUuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICBtb21lbnREYXRlLm1vbnRoKCkgIT09IHRoaXMuc3RhdGUudmFsdWUubW9udGgoKTtcbiAgICAgICAgY29uc3QgaXNPcGVuID0gISh0aGlzLnByb3BzLmNsb3NlT25TZWxlY3Rpb24gJiYgaGFzVXNlck1hbnVhbGx5U2VsZWN0ZWREYXRlICYmICFoYXNNb250aENoYW5nZWQpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNJbnB1dEZvY3VzZWQ6IGZhbHNlLCBpc09wZW4sIHZhbHVlOiBtb21lbnREYXRlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzSW5wdXRGb2N1c2VkOiBmYWxzZSwgaXNPcGVuIH0pO1xuICAgICAgICB9XG4gICAgICAgIFV0aWxzLnNhZmVJbnZva2UodGhpcy5wcm9wcy5vbkNoYW5nZSwgdGhpcy5mcm9tTW9tZW50VG9EYXRlKG1vbWVudERhdGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUljb25DbGljayA9IChlOiBSZWFjdC5TeW50aGV0aWNFdmVudDxIVE1MRWxlbWVudD4pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuaXNPcGVuKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dFJlZiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5ibHVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNPcGVuOiB0cnVlIH0pO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0UmVmICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0UmVmLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUlucHV0Rm9jdXMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdGhpcy5pc051bGwodGhpcy5zdGF0ZS52YWx1ZSkgPyBcIlwiIDogdGhpcy5zdGF0ZS52YWx1ZS5mb3JtYXQodGhpcy5wcm9wcy5mb3JtYXQpO1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9wZW5PbkZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNJbnB1dEZvY3VzZWQ6IHRydWUsIGlzT3BlbjogdHJ1ZSwgdmFsdWVTdHJpbmcgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNJbnB1dEZvY3VzZWQ6IHRydWUsIHZhbHVlU3RyaW5nIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVJbnB1dENsaWNrID0gKGU6IFJlYWN0LlN5bnRoZXRpY0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9wZW5PbkZvY3VzKSB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVJbnB1dENoYW5nZSA9IChlOiBSZWFjdC5TeW50aGV0aWNFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBtb21lbnQodmFsdWVTdHJpbmcsIHRoaXMucHJvcHMuZm9ybWF0KTtcblxuICAgICAgICBpZiAodmFsdWUuaXNWYWxpZCgpICYmIHRoaXMuZGF0ZUlzSW5SYW5nZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWUsIHZhbHVlU3RyaW5nIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWVTdHJpbmcgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBVdGlscy5zYWZlSW52b2tlKHRoaXMucHJvcHMub25DaGFuZ2UsIHRoaXMuZnJvbU1vbWVudFRvRGF0ZSh2YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlU3RyaW5nIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVJbnB1dEJsdXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdGhpcy5zdGF0ZS52YWx1ZVN0cmluZztcbiAgICAgICAgbGV0IHZhbHVlID0gbW9tZW50KHZhbHVlU3RyaW5nLCB0aGlzLnByb3BzLmZvcm1hdCk7XG4gICAgICAgIGlmICh2YWx1ZVN0cmluZyAhPT0gdGhpcy5nZXREYXRlU3RyaW5nKHRoaXMuc3RhdGUudmFsdWUpICYmICghdmFsdWUuaXNWYWxpZCgpIHx8ICF0aGlzLmRhdGVJc0luUmFuZ2UodmFsdWUpKSkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzSW5wdXRGb2N1c2VkOiBmYWxzZSwgdmFsdWUsIHZhbHVlU3RyaW5nOiBudWxsIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNJbnB1dEZvY3VzZWQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIFV0aWxzLnNhZmVJbnZva2UodGhpcy5wcm9wcy5vbkVycm9yLCBuZXcgRGF0ZSh1bmRlZmluZWQpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGF0ZUlzSW5SYW5nZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBVdGlscy5zYWZlSW52b2tlKHRoaXMucHJvcHMub25FcnJvciwgdGhpcy5mcm9tTW9tZW50VG9EYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFV0aWxzLnNhZmVJbnZva2UodGhpcy5wcm9wcy5vbkNoYW5nZSwgdGhpcy5mcm9tTW9tZW50VG9EYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNJbnB1dEZvY3VzZWQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbnB1dFJlZiA9IChlbDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dFJlZiA9IGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zbGF0ZSBhIG1vbWVudCBpbnRvIGEgRGF0ZSBvYmplY3QsIGFkanVzdGluZyB0aGUgbW9tZW50IHRpbWV6b25lIGludG8gdGhlIGxvY2FsIG9uZS5cbiAgICAgKiBUaGlzIGlzIGEgbm8tb3AgdW5sZXNzIG1vbWVudC10aW1lem9uZSdzIHNldERlZmF1bHQgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgZnJvbU1vbWVudFRvRGF0ZSA9IChtb21lbnREYXRlOiBtb21lbnQuTW9tZW50KSA9PiB7XG4gICAgICAgIGlmIChtb21lbnREYXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgbW9tZW50RGF0ZS55ZWFyKCksXG4gICAgICAgICAgICAgICAgbW9tZW50RGF0ZS5tb250aCgpLFxuICAgICAgICAgICAgICAgIG1vbWVudERhdGUuZGF0ZSgpLFxuICAgICAgICAgICAgICAgIG1vbWVudERhdGUuaG91cnMoKSxcbiAgICAgICAgICAgICAgICBtb21lbnREYXRlLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICBtb21lbnREYXRlLnNlY29uZHMoKSxcbiAgICAgICAgICAgICAgICBtb21lbnREYXRlLm1pbGxpc2Vjb25kcygpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zbGF0ZSBhIERhdGUgb2JqZWN0IGludG8gYSBtb21lbnQsIGFkanVzdGluZyB0aGUgbG9jYWwgdGltZXpvbmUgaW50byB0aGUgbW9tZW50IG9uZS5cbiAgICAgKiBUaGlzIGlzIGEgbm8tb3AgdW5sZXNzIG1vbWVudC10aW1lem9uZSdzIHNldERlZmF1bHQgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgZnJvbURhdGVUb01vbWVudCA9IChkYXRlOiBEYXRlKSA9PiB7XG4gICAgICAgIGlmIChkYXRlID09IG51bGwgfHwgdHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KFtcbiAgICAgICAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgICBkYXRlLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgICAgICAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=

@@ -16,7 +16,9 @@ import * as React from "react";

private displayedYearText;
private monthArrow;
private yearArrow;
private containerElement;
private monthArrowElement;
private yearArrowElement;
render(): JSX.Element;
componentDidMount(): void;
componentDidUpdate(): void;
private containerRefHandler;
private monthArrowRefHandler;

@@ -23,0 +25,0 @@ private yearArrowRefHandler;

@@ -23,4 +23,5 @@ /*

_super.apply(this, arguments);
this.monthArrowRefHandler = function (r) { return _this.monthArrow = r; };
this.yearArrowRefHandler = function (r) { return _this.yearArrow = r; };
this.containerRefHandler = function (r) { return _this.containerElement = r; };
this.monthArrowRefHandler = function (r) { return _this.monthArrowElement = r; };
this.yearArrowRefHandler = function (r) { return _this.yearArrowElement = r; };
this.handleMonthSelectChange = function (e) {

@@ -58,3 +59,3 @@ var month = parseInt(e.target.value, 10);

var caretClasses = classNames("pt-icon-standard", "pt-icon-caret-down", Classes.DATEPICKER_CAPTION_CARET);
return (React.createElement("div", {className: Classes.DATEPICKER_CAPTION},
return (React.createElement("div", {className: Classes.DATEPICKER_CAPTION, ref: this.containerRefHandler},
React.createElement("div", {className: Classes.DATEPICKER_CAPTION_SELECT},

@@ -74,7 +75,9 @@ React.createElement("select", {className: Classes.DATEPICKER_MONTH_SELECT, onChange: this.handleMonthSelectChange, value: displayMonth.toString()}, monthOptionElements),

DatePickerCaption.prototype.positionArrows = function () {
// pass our container element to the measureTextWidth utility to ensure
// that we're measuring the width of text as sized within this component.
var textClass = "pt-datepicker-caption-measure";
var monthWidth = Utils.measureTextWidth(this.displayedMonthText, textClass);
this.monthArrow.setAttribute("style", "left:" + monthWidth);
var yearWidth = Utils.measureTextWidth(this.displayedYearText, textClass);
this.yearArrow.setAttribute("style", "left:" + yearWidth);
var monthWidth = Utils.measureTextWidth(this.displayedMonthText, textClass, this.containerElement);
this.monthArrowElement.setAttribute("style", "left:" + monthWidth);
var yearWidth = Utils.measureTextWidth(this.displayedYearText, textClass, this.containerElement);
this.yearArrowElement.setAttribute("style", "left:" + yearWidth);
};

@@ -85,2 +88,2 @@ return DatePickerCaption;

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRlUGlja2VyQ2FwdGlvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7Ozs7Ozs7QUFFSCxxQkFBd0MsbUJBQW1CLENBQUMsQ0FBQTtBQUM1RCxJQUFZLFVBQVUsV0FBTSxZQUFZLENBQUMsQ0FBQTtBQUN6QyxJQUFZLEtBQUssV0FBTSxPQUFPLENBQUMsQ0FBQTtBQUUvQixJQUFZLE9BQU8sV0FBTSxrQkFBa0IsQ0FBQyxDQUFBO0FBQzVDLElBQVksS0FBSyxXQUFNLGdCQUFnQixDQUFDLENBQUE7QUFpQnhDO0lBQXVDLHFDQUE0QztJQUFuRjtRQUFBLGlCQStGQztRQS9Gc0MsOEJBQTRDO1FBMEV2RSx5QkFBb0IsR0FBRyxVQUFDLENBQWMsSUFBSyxPQUFBLEtBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFuQixDQUFtQixDQUFDO1FBQy9ELHdCQUFtQixHQUFHLFVBQUMsQ0FBYyxJQUFLLE9BQUEsS0FBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQWxCLENBQWtCLENBQUM7UUFXN0QsNEJBQXVCLEdBQUcsVUFBQyxDQUFxQztZQUNwRSxJQUFNLEtBQUssR0FBRyxRQUFRLENBQUUsQ0FBQyxDQUFDLE1BQTRCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLFlBQWMsQ0FBQyxVQUFVLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFBO1FBRU8sMkJBQXNCLEdBQUcsVUFBQyxDQUFxQztZQUNuRSxJQUFNLElBQUksR0FBRyxRQUFRLENBQUUsQ0FBQyxDQUFDLE1BQTRCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLFlBQWMsQ0FBQyxVQUFVLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztJQXhGVSxrQ0FBTSxHQUFi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a0JBQW1CLENBQ2Y7Z0JBQ1QscUJBQUMsSUFBSSxJQUNELFNBQVMsRUFBRSxZQUFhLEVBQ3hCLEdBQUcsRUFBRSxJQUFJLENBQUMsbUJBQW9CLEVBQ2hDLENBQ0EsQ0FDSixDQUNULENBQUM7SUFDTixDQUFDO0lBRU0sNkNBQWlCLEdBQXhCO1FBQ0ksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSw4Q0FBa0IsR0FBekI7UUFDSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUtPLDBDQUFjLEdBQXRCO1FBQ0ksSUFBTSxTQUFTLEdBQUcsK0JBQStCLENBQUM7UUFDbEQsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBUSxVQUFZLENBQUMsQ0FBQztRQUU1RCxJQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFRLFNBQVcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFXTCx3QkFBQztBQUFELENBL0ZBLEFBK0ZDLENBL0ZzQyxLQUFLLENBQUMsU0FBUyxHQStGckQ7QUEvRlkseUJBQWlCLG9CQStGN0IsQ0FBQSIsImZpbGUiOiJkYXRlUGlja2VyQ2FwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNSBQYWxhbnRpciBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QtMyBMaWNlbnNlIGFzIG1vZGlmaWVkICh0aGUg4oCcTGljZW5zZeKAnSk7IHlvdSBtYXkgb2J0YWluIGEgY29weVxuICogb2YgdGhlIGxpY2Vuc2UgYXQgaHR0cHM6Ly9naXRodWIuY29tL3BhbGFudGlyL2JsdWVwcmludC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKiBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3BhbGFudGlyL2JsdWVwcmludC9ibG9iL21hc3Rlci9QQVRFTlRTXG4gKi9cblxuaW1wb3J0IHsgVXRpbHMgYXMgQmx1ZXByaW50VXRpbHMgfSBmcm9tIFwiQGJsdWVwcmludGpzL2NvcmVcIjtcbmltcG9ydCAqIGFzIGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgKiBhcyBDbGFzc2VzIGZyb20gXCIuL2NvbW1vbi9jbGFzc2VzXCI7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tIFwiLi9jb21tb24vdXRpbHNcIjtcbmltcG9ydCB7IElEYXRlUGlja2VyTG9jYWxlVXRpbHMgfSBmcm9tIFwiLi9kYXRlUGlja2VyQ29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRlUGlja2VyQ2FwdGlvblByb3BzIHtcbiAgICBtYXhEYXRlOiBEYXRlO1xuICAgIG1pbkRhdGU6IERhdGU7XG4gICAgb25Nb250aENoYW5nZT86IChtb250aDogbnVtYmVyKSA9PiB2b2lkO1xuICAgIG9uWWVhckNoYW5nZT86ICh5ZWFyOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgICAvLyBub3JtYWxseSB3ZSBjb3VsZCBleHRlbmQgUmVhY3REYXlQaWNrZXIuQ2FwdGlvbkVsZW1lbnRQcm9wcyxcbiAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0byBpbnRyb2R1Y2UgYSB0eXBpbmcgZGVwZW5kZW5jeSwgc28gbWFudWFsbHkgYWRkIHByb3BzIGhlcmVcbiAgICBkYXRlPzogRGF0ZTtcbiAgICBsb2NhbGVVdGlscz86IElEYXRlUGlja2VyTG9jYWxlVXRpbHM7XG4gICAgbG9jYWxlPzogc3RyaW5nO1xuICAgIG9uQ2xpY2s/OiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ2FwdGlvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJRGF0ZVBpY2tlckNhcHRpb25Qcm9wcywge30+IHtcbiAgICBwcml2YXRlIGRpc3BsYXllZE1vbnRoVGV4dDogc3RyaW5nO1xuICAgIHByaXZhdGUgZGlzcGxheWVkWWVhclRleHQ6IHN0cmluZztcblxuICAgIHByaXZhdGUgbW9udGhBcnJvdzogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSB5ZWFyQXJyb3c6IEhUTUxFbGVtZW50O1xuXG4gICAgcHVibGljIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBkYXRlLCBsb2NhbGUsIGxvY2FsZVV0aWxzLCBtaW5EYXRlLCBtYXhEYXRlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBtaW5ZZWFyID0gbWluRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBtYXhZZWFyID0gbWF4RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBkaXNwbGF5TW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgICAgIC8vIGJ1aWxkIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBtb250aHMsIGxpbWl0aW5nIGJhc2VkIG9uIG1pbkRhdGUgYW5kIG1heERhdGUgYXMgbmVjZXNzYXJ5XG4gICAgICAgIGNvbnN0IG1vbnRocyA9IGxvY2FsZVV0aWxzLmdldE1vbnRocyhsb2NhbGUpO1xuICAgICAgICBjb25zdCBzdGFydE1vbnRoID0gKGRpc3BsYXlZZWFyID09PSBtaW5ZZWFyKSA/IG1pbkRhdGUuZ2V0TW9udGgoKSA6IDA7XG4gICAgICAgIGNvbnN0IGVuZE1vbnRoID0gKGRpc3BsYXlZZWFyID09PSBtYXhZZWFyKSA/IG1heERhdGUuZ2V0TW9udGgoKSArIDEgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG1vbnRoT3B0aW9uRWxlbWVudHMgPSBtb250aHMubWFwKChuYW1lLCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPG9wdGlvbiBrZXk9e2l9IHZhbHVlPXtpLnRvU3RyaW5nKCl9PntuYW1lfTwvb3B0aW9uPjtcbiAgICAgICAgfSkuc2xpY2Uoc3RhcnRNb250aCwgZW5kTW9udGgpO1xuXG4gICAgICAgIGNvbnN0IHllYXJzID0gW21pblllYXJdO1xuICAgICAgICBmb3IgKGxldCB5ZWFyID0gbWluWWVhciArIDE7IHllYXIgPD0gbWF4WWVhcjsgKyt5ZWFyKSB7XG4gICAgICAgICAgICB5ZWFycy5wdXNoKHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXJPcHRpb25FbGVtZW50cyA9IHllYXJzLm1hcCgoeWVhciwgaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxvcHRpb24ga2V5PXtpfSB2YWx1ZT17eWVhci50b1N0cmluZygpfT57eWVhcn08L29wdGlvbj47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZGlzcGxheWVkTW9udGhUZXh0ID0gbW9udGhzW2Rpc3BsYXlNb250aF07XG4gICAgICAgIHRoaXMuZGlzcGxheWVkWWVhclRleHQgPSBkaXNwbGF5WWVhci50b1N0cmluZygpO1xuXG4gICAgICAgIGNvbnN0IGNhcmV0Q2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJwdC1pY29uLXN0YW5kYXJkXCIsIFwicHQtaWNvbi1jYXJldC1kb3duXCIsIENsYXNzZXMuREFURVBJQ0tFUl9DQVBUSU9OX0NBUkVUKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtDbGFzc2VzLkRBVEVQSUNLRVJfQ0FQVElPTn0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0NsYXNzZXMuREFURVBJQ0tFUl9DQVBUSU9OX1NFTEVDVH0+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Q2xhc3Nlcy5EQVRFUElDS0VSX01PTlRIX1NFTEVDVH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU1vbnRoU2VsZWN0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3BsYXlNb250aC50b1N0cmluZygpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bW9udGhPcHRpb25FbGVtZW50c31cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NhcmV0Q2xhc3Nlc31cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5tb250aEFycm93UmVmSGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Q2xhc3Nlcy5EQVRFUElDS0VSX0NBUFRJT05fU0VMRUNUfT5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtDbGFzc2VzLkRBVEVQSUNLRVJfWUVBUl9TRUxFQ1R9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVZZWFyU2VsZWN0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3BsYXlZZWFyLnRvU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt5ZWFyT3B0aW9uRWxlbWVudHN9XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjYXJldENsYXNzZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWY9e3RoaXMueWVhckFycm93UmVmSGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkFycm93cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb25BcnJvd3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vbnRoQXJyb3dSZWZIYW5kbGVyID0gKHI6IEhUTUxFbGVtZW50KSA9PiB0aGlzLm1vbnRoQXJyb3cgPSByO1xuICAgIHByaXZhdGUgeWVhckFycm93UmVmSGFuZGxlciA9IChyOiBIVE1MRWxlbWVudCkgPT4gdGhpcy55ZWFyQXJyb3cgPSByO1xuXG4gICAgcHJpdmF0ZSBwb3NpdGlvbkFycm93cygpIHtcbiAgICAgICAgY29uc3QgdGV4dENsYXNzID0gXCJwdC1kYXRlcGlja2VyLWNhcHRpb24tbWVhc3VyZVwiO1xuICAgICAgICBjb25zdCBtb250aFdpZHRoID0gVXRpbHMubWVhc3VyZVRleHRXaWR0aCh0aGlzLmRpc3BsYXllZE1vbnRoVGV4dCwgdGV4dENsYXNzKTtcbiAgICAgICAgdGhpcy5tb250aEFycm93LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIGBsZWZ0OiR7bW9udGhXaWR0aH1gKTtcblxuICAgICAgICBjb25zdCB5ZWFyV2lkdGggPSBVdGlscy5tZWFzdXJlVGV4dFdpZHRoKHRoaXMuZGlzcGxheWVkWWVhclRleHQsIHRleHRDbGFzcyk7XG4gICAgICAgIHRoaXMueWVhckFycm93LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIGBsZWZ0OiR7eWVhcldpZHRofWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTW9udGhTZWxlY3RDaGFuZ2UgPSAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxTZWxlY3RFbGVtZW50PikgPT4ge1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KChlLnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUsIDEwKTtcbiAgICAgICAgQmx1ZXByaW50VXRpbHMuc2FmZUludm9rZSh0aGlzLnByb3BzLm9uTW9udGhDaGFuZ2UsIG1vbnRoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVllYXJTZWxlY3RDaGFuZ2UgPSAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxTZWxlY3RFbGVtZW50PikgPT4ge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQoKGUudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZSwgMTApO1xuICAgICAgICBCbHVlcHJpbnRVdGlscy5zYWZlSW52b2tlKHRoaXMucHJvcHMub25ZZWFyQ2hhbmdlLCB5ZWFyKTtcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRlUGlja2VyQ2FwdGlvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7Ozs7Ozs7QUFFSCxxQkFBd0MsbUJBQW1CLENBQUMsQ0FBQTtBQUM1RCxJQUFZLFVBQVUsV0FBTSxZQUFZLENBQUMsQ0FBQTtBQUN6QyxJQUFZLEtBQUssV0FBTSxPQUFPLENBQUMsQ0FBQTtBQUUvQixJQUFZLE9BQU8sV0FBTSxrQkFBa0IsQ0FBQyxDQUFBO0FBQzVDLElBQVksS0FBSyxXQUFNLGdCQUFnQixDQUFDLENBQUE7QUFpQnhDO0lBQXVDLHFDQUE0QztJQUFuRjtRQUFBLGlCQXNHQztRQXRHc0MsOEJBQTRDO1FBOEV2RSx3QkFBbUIsR0FBRyxVQUFDLENBQWMsSUFBSyxPQUFBLEtBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQXpCLENBQXlCLENBQUM7UUFDcEUseUJBQW9CLEdBQUcsVUFBQyxDQUFjLElBQUssT0FBQSxLQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUExQixDQUEwQixDQUFDO1FBQ3RFLHdCQUFtQixHQUFHLFVBQUMsQ0FBYyxJQUFLLE9BQUEsS0FBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBekIsQ0FBeUIsQ0FBQztRQWFwRSw0QkFBdUIsR0FBRyxVQUFDLENBQXFDO1lBQ3BFLElBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBRSxDQUFDLENBQUMsTUFBNEIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEUsWUFBYyxDQUFDLFVBQVUsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUE7UUFFTywyQkFBc0IsR0FBRyxVQUFDLENBQXFDO1lBQ25FLElBQU0sSUFBSSxHQUFHLFFBQVEsQ0FBRSxDQUFDLENBQUMsTUFBNEIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakUsWUFBYyxDQUFDLFVBQVUsQ0FBQyxL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Y2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUgUGFsYW50aXIgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNELTMgTGljZW5zZSBhcyBtb2RpZmllZCAodGhlIOKAnExpY2Vuc2XigJ0pOyB5b3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBsaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvUEFURU5UU1xuICovXG5cbmltcG9ydCB7IFV0aWxzIGFzIEJsdWVwcmludFV0aWxzIH0gZnJvbSBcIkBibHVlcHJpbnRqcy9jb3JlXCI7XG5pbXBvcnQgKiBhcyBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0ICogYXMgQ2xhc3NlcyBmcm9tIFwiLi9jb21tb24vY2xhc3Nlc1wiO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4vY29tbW9uL3V0aWxzXCI7XG5pbXBvcnQgeyBJRGF0ZVBpY2tlckxvY2FsZVV0aWxzIH0gZnJvbSBcIi4vZGF0ZVBpY2tlckNvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJRGF0ZVBpY2tlckNhcHRpb25Qcm9wcyB7XG4gICAgbWF4RGF0ZTogRGF0ZTtcbiAgICBtaW5EYXRlOiBEYXRlO1xuICAgIG9uTW9udGhDaGFuZ2U/OiAobW9udGg6IG51bWJlcikgPT4gdm9pZDtcbiAgICBvblllYXJDaGFuZ2U/OiAoeWVhcjogbnVtYmVyKSA9PiB2b2lkO1xuXG4gICAgLy8gbm9ybWFsbHkgd2UgY291bGQgZXh0ZW5kIFJlYWN0RGF5UGlja2VyLkNhcHRpb25FbGVtZW50UHJvcHMsXG4gICAgLy8gYnV0IHdlIGRvbid0IHdhbnQgdG8gaW50cm9kdWNlIGEgdHlwaW5nIGRlcGVuZGVuY3ksIHNvIG1hbnVhbGx5IGFkZCBwcm9wcyBoZXJlXG4gICAgZGF0ZT86IERhdGU7XG4gICAgbG9jYWxlVXRpbHM/OiBJRGF0ZVBpY2tlckxvY2FsZVV0aWxzO1xuICAgIGxvY2FsZT86IHN0cmluZztcbiAgICBvbkNsaWNrPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xufVxuXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNhcHRpb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SURhdGVQaWNrZXJDYXB0aW9uUHJvcHMsIHt9PiB7XG4gICAgcHJpdmF0ZSBkaXNwbGF5ZWRNb250aFRleHQ6IHN0cmluZztcbiAgICBwcml2YXRlIGRpc3BsYXllZFllYXJUZXh0OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgbW9udGhBcnJvd0VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgeWVhckFycm93RWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgICBwdWJsaWMgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGRhdGUsIGxvY2FsZSwgbG9jYWxlVXRpbHMsIG1pbkRhdGUsIG1heERhdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IG1pblllYXIgPSBtaW5EYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGNvbnN0IG1heFllYXIgPSBtYXhEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlNb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgY29uc3QgZGlzcGxheVllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG1vbnRocywgbGltaXRpbmcgYmFzZWQgb24gbWluRGF0ZSBhbmQgbWF4RGF0ZSBhcyBuZWNlc3NhcnlcbiAgICAgICAgY29uc3QgbW9udGhzID0gbG9jYWxlVXRpbHMuZ2V0TW9udGhzKGxvY2FsZSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9udGggPSAoZGlzcGxheVllYXIgPT09IG1pblllYXIpID8gbWluRGF0ZS5nZXRNb250aCgpIDogMDtcbiAgICAgICAgY29uc3QgZW5kTW9udGggPSAoZGlzcGxheVllYXIgPT09IG1heFllYXIpID8gbWF4RGF0ZS5nZXRNb250aCgpICsgMSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbW9udGhPcHRpb25FbGVtZW50cyA9IG1vbnRocy5tYXAoKG5hbWUsIGkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8b3B0aW9uIGtleT17aX0gdmFsdWU9e2kudG9TdHJpbmcoKX0+e25hbWV9PC9vcHRpb24+O1xuICAgICAgICB9KS5zbGljZShzdGFydE1vbnRoLCBlbmRNb250aCk7XG5cbiAgICAgICAgY29uc3QgeWVhcnMgPSBbbWluWWVhcl07XG4gICAgICAgIGZvciAobGV0IHllYXIgPSBtaW5ZZWFyICsgMTsgeWVhciA8PSBtYXhZZWFyOyArK3llYXIpIHtcbiAgICAgICAgICAgIHllYXJzLnB1c2goeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeWVhck9wdGlvbkVsZW1lbnRzID0geWVhcnMubWFwKCh5ZWFyLCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPG9wdGlvbiBrZXk9e2l9IHZhbHVlPXt5ZWFyLnRvU3RyaW5nKCl9Pnt5ZWFyfTwvb3B0aW9uPjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRNb250aFRleHQgPSBtb250aHNbZGlzcGxheU1vbnRoXTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRZZWFyVGV4dCA9IGRpc3BsYXlZZWFyLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgY29uc3QgY2FyZXRDbGFzc2VzID0gY2xhc3NOYW1lcyhcInB0LWljb24tc3RhbmRhcmRcIiwgXCJwdC1pY29uLWNhcmV0LWRvd25cIiwgQ2xhc3Nlcy5EQVRFUElDS0VSX0NBUFRJT05fQ0FSRVQpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Q2xhc3Nlcy5EQVRFUElDS0VSX0NBUFRJT059XG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLmNvbnRhaW5lclJlZkhhbmRsZXJ9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0NsYXNzZXMuREFURVBJQ0tFUl9DQVBUSU9OX1NFTEVDVH0+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Q2xhc3Nlcy5EQVRFUElDS0VSX01PTlRIX1NFTEVDVH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU1vbnRoU2VsZWN0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3BsYXlNb250aC50b1N0cmluZygpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bW9udGhPcHRpb25FbGVtZW50c31cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NhcmV0Q2xhc3Nlc31cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5tb250aEFycm93UmVmSGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Q2xhc3Nlcy5EQVRFUElDS0VSX0NBUFRJT05fU0VMRUNUfT5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtDbGFzc2VzLkRBVEVQSUNLRVJfWUVBUl9TRUxFQ1R9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVZZWFyU2VsZWN0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3BsYXlZZWFyLnRvU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt5ZWFyT3B0aW9uRWxlbWVudHN9XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjYXJldENsYXNzZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWY9e3RoaXMueWVhckFycm93UmVmSGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkFycm93cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb25BcnJvd3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnRhaW5lclJlZkhhbmRsZXIgPSAocjogSFRNTEVsZW1lbnQpID0+IHRoaXMuY29udGFpbmVyRWxlbWVudCA9IHI7XG4gICAgcHJpdmF0ZSBtb250aEFycm93UmVmSGFuZGxlciA9IChyOiBIVE1MRWxlbWVudCkgPT4gdGhpcy5tb250aEFycm93RWxlbWVudCA9IHI7XG4gICAgcHJpdmF0ZSB5ZWFyQXJyb3dSZWZIYW5kbGVyID0gKHI6IEhUTUxFbGVtZW50KSA9PiB0aGlzLnllYXJBcnJvd0VsZW1lbnQgPSByO1xuXG4gICAgcHJpdmF0ZSBwb3NpdGlvbkFycm93cygpIHtcbiAgICAgICAgLy8gcGFzcyBvdXIgY29udGFpbmVyIGVsZW1lbnQgdG8gdGhlIG1lYXN1cmVUZXh0V2lkdGggdXRpbGl0eSB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB3ZSdyZSBtZWFzdXJpbmcgdGhlIHdpZHRoIG9mIHRleHQgYXMgc2l6ZWQgd2l0aGluIHRoaXMgY29tcG9uZW50LlxuICAgICAgICBjb25zdCB0ZXh0Q2xhc3MgPSBcInB0LWRhdGVwaWNrZXItY2FwdGlvbi1tZWFzdXJlXCI7XG4gICAgICAgIGNvbnN0IG1vbnRoV2lkdGggPSBVdGlscy5tZWFzdXJlVGV4dFdpZHRoKHRoaXMuZGlzcGxheWVkTW9udGhUZXh0LCB0ZXh0Q2xhc3MsIHRoaXMuY29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgIHRoaXMubW9udGhBcnJvd0VsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgYGxlZnQ6JHttb250aFdpZHRofWApO1xuXG4gICAgICAgIGNvbnN0IHllYXJXaWR0aCA9IFV0aWxzLm1lYXN1cmVUZXh0V2lkdGgodGhpcy5kaXNwbGF5ZWRZZWFyVGV4dCwgdGV4dENsYXNzLCB0aGlzLmNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICB0aGlzLnllYXJBcnJvd0VsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgYGxlZnQ6JHt5ZWFyV2lkdGh9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVNb250aFNlbGVjdENoYW5nZSA9IChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTFNlbGVjdEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQoKGUudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZSwgMTApO1xuICAgICAgICBCbHVlcHJpbnRVdGlscy5zYWZlSW52b2tlKHRoaXMucHJvcHMub25Nb250aENoYW5nZSwgbW9udGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlWWVhclNlbGVjdENoYW5nZSA9IChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTFNlbGVjdEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludCgoZS50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlLCAxMCk7XG4gICAgICAgIEJsdWVwcmludFV0aWxzLnNhZmVJbnZva2UodGhpcy5wcm9wcy5vblllYXJDaGFuZ2UsIHllYXIpO1xuICAgIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==

@@ -128,2 +128,11 @@ /*

}
// if the initial month is the last month of the picker's
// allowable range, the react-day-picker library will show
// the max month on the left and the *min* month on the right.
// subtracting one avoids that weird, wraparound state (#289).
var initialMonthEqualsMinMonth = initialMonth.getMonth() === props.minDate.getMonth();
var initalMonthEqualsMaxMonth = initialMonth.getMonth() === props.maxDate.getMonth();
if (!initialMonthEqualsMinMonth && initalMonthEqualsMaxMonth) {
initialMonth.setMonth(initialMonth.getMonth() - 1);
}
this.state = {

@@ -309,2 +318,2 @@ displayMonth: initialMonth.getMonth(),

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRlUmFuZ2VQaWNrZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHOzs7Ozs7O0FBRUgscUJBQTBFLG1CQUFtQixDQUFDLENBQUE7QUFDOUYsSUFBWSxVQUFVLFdBQU0sWUFBWSxDQUFDLENBQUE7QUFDekMsSUFBWSxLQUFLLFdBQU0sT0FBTyxDQUFDLENBQUE7QUFDL0IsSUFBWSxTQUFTLFdBQU0sa0JBQWtCLENBQUMsQ0FBQTtBQUU5QyxJQUFZLFdBQVcsV0FBTSxrQkFBa0IsQ0FBQyxDQUFBO0FBQ2hELElBQVksU0FBUyxXQUFNLG9CQUFvQixDQUFDLENBQUE7QUFFaEQsSUFBWSxNQUFNLFdBQU0saUJBQWlCLENBQUMsQ0FBQTtBQUUxQyxrQ0FBa0MscUJBQXFCLENBQUMsQ0FBQTtBQUN4RCwrQkFRTyxrQkFBa0IsQ0FBQyxDQUFBO0FBb0QxQjtJQUNZLG1DQUErRDtJQThCdkUseUJBQW1CLEtBQTZCLEVBQUUsT0FBYTtRQS9CbkUsaUJBd1BDO1FBeE5PLGtCQUFNLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQXRCbkIsZ0JBQVcsR0FBRywyQkFBMkIsQ0FBQztRQUVqRCw0Q0FBNEM7UUFDcEMsY0FBUyxHQUF5QjtZQUN0QyxHQUFDLHdDQUF1QixDQUFDLEdBQUUsVUFBQyxHQUFHO2dCQUNuQiw2QkFBSyxDQUFnQjtnQkFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUYsQ0FBQztZQUNELEdBQUksd0NBQXVCLFdBQVEsQ0FBQyxHQUFFLFVBQUMsR0FBRyxJQUFLLE9BQUEsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFH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Y0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3ZELENBQUM7QUFDTixDQUFDO0FBRVksOEJBQXNCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyIsImZpbGUiOiJkYXRlUmFuZ2VQaWNrZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTYgUGFsYW50aXIgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNELTMgTGljZW5zZSBhcyBtb2RpZmllZCAodGhlIOKAnExpY2Vuc2XigJ0pOyB5b3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBsaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvUEFURU5UU1xuICovXG5cbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50LCBDbGFzc2VzLCBJUHJvcHMsIE1lbnUsIE1lbnVJdGVtLCBVdGlscyB9IGZyb20gXCJAYmx1ZXByaW50anMvY29yZVwiO1xuaW1wb3J0ICogYXMgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgKiBhcyBEYXlQaWNrZXIgZnJvbSBcInJlYWN0LWRheS1waWNrZXJcIjtcblxuaW1wb3J0ICogYXMgRGF0ZUNsYXNzZXMgZnJvbSBcIi4vY29tbW9uL2NsYXNzZXNcIjtcbmltcG9ydCAqIGFzIERhdGVVdGlscyBmcm9tIFwiLi9jb21tb24vZGF0ZVV0aWxzXCI7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tIFwiLi9jb21tb24vZGF0ZVV0aWxzXCI7XG5pbXBvcnQgKiBhcyBFcnJvcnMgZnJvbSBcIi4vY29tbW9uL2Vycm9yc1wiO1xuXG5pbXBvcnQgeyBEYXRlUGlja2VyQ2FwdGlvbiB9IGZyb20gXCIuL2RhdGVQaWNrZXJDYXB0aW9uXCI7XG5pbXBvcnQge1xuICAgIGNvbWJpbmVNb2RpZmllcnMsXG4gICAgZ2V0RGVmYXVsdE1heERhdGUsXG4gICAgZ2V0RGVmYXVsdE1pbkRhdGUsXG4gICAgSURhdGVQaWNrZXJCYXNlUHJvcHMsXG4gICAgSURhdGVQaWNrZXJEYXlNb2RpZmllcnMsXG4gICAgSURhdGVQaWNrZXJNb2RpZmllcnMsXG4gICAgU0VMRUNURURfUkFOR0VfTU9ESUZJRVIsXG59IGZyb20gXCIuL2RhdGVQaWNrZXJDb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVSYW5nZVNob3J0Y3V0IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGRhdGVSYW5nZTogRGF0ZVJhbmdlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRlUmFuZ2VQaWNrZXJQcm9wcyBleHRlbmRzIElEYXRlUGlja2VyQmFzZVByb3BzLCBJUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgb2YgdGhlIHJhbmdlIGNhbiBiZSB0aGUgc2FtZSBkYXkuXG4gICAgICogSWYgYHRydWVgLCBjbGlja2luZyBhIHNlbGVjdGVkIGRhdGUgd2lsbCBjcmVhdGUgYSBvbmUtZGF5IHJhbmdlLlxuICAgICAqIElmIGBmYWxzZWAsIGNsaWNraW5nIGEgc2VsZWN0ZWQgZGF0ZSB3aWxsIGNsZWFyIHRoZSBzZWxlY3Rpb24uXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBhbGxvd1NpbmdsZURheVJhbmdlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgRGF0ZVJhbmdlIHRoZSBjYWxlbmRhciB3aWxsIGRpc3BsYXkgYXMgc2VsZWN0ZWQuXG4gICAgICogVGhpcyBzaG91bGQgbm90IGJlIHNldCBpZiBgdmFsdWVgIGlzIHNldC5cbiAgICAgKi9cbiAgICBkZWZhdWx0VmFsdWU/OiBEYXRlUmFuZ2U7XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBzZWxlY3RzIGEgZGF5LlxuICAgICAqIElmIG5vIGRheXMgYXJlIHNlbGVjdGVkLCBpdCB3aWxsIHBhc3MgYFtudWxsLCBudWxsXWAuXG4gICAgICogSWYgYSBzdGFydCBkYXRlIGlzIHNlbGVjdGVkIGJ1dCBub3QgYW4gZW5kIGRhdGUsIGl0IHdpbGwgcGFzcyBgW3NlbGVjdGVkRGF0ZSwgbnVsbF1gLlxuICAgICAqIElmIGJvdGggYSBzdGFydCBhbmQgZW5kIGRhdGUgYXJlIHNlbGVjdGVkLCBpdCB3aWxsIHBhc3MgYFtzdGFydERhdGUsIGVuZERhdGVdYC5cbiAgICAgKi9cbiAgICBvbkNoYW5nZT86IChzZWxlY3RlZERhdGVzOiBEYXRlUmFuZ2UpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHNob3J0Y3V0cyB0byBxdWlja2x5IHNlbGVjdCBhIHJhbmdlIG9mIGRhdGVzIGFyZSBkaXNwbGF5ZWQgb3Igbm90LlxuICAgICAqIElmIGB0cnVlYCwgcHJlc2V0IHNob3J0Y3V0cyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICAgKiBJZiBgZmFsc2VgLCBubyBzaG9ydGN1dHMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICogSWYgYW4gYXJyYXksIHRoZSBjdXN0b20gc2hvcnRjdXRzIHByb3ZpZGVkIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBzaG9ydGN1dHM/OiBib29sZWFuIHwgSURhdGVSYW5nZVNob3J0Y3V0W107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIERhdGVSYW5nZS5cbiAgICAgKiBJZiB0aGlzIHByb3AgaXMgcHJlc2VudCwgdGhlIGNvbXBvbmVudCBhY3RzIGluIGEgY29udHJvbGxlZCBtYW5uZXIuXG4gICAgICovXG4gICAgdmFsdWU/OiBEYXRlUmFuZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVSYW5nZVBpY2tlclN0YXRlIHtcbiAgICBkaXNwbGF5TW9udGg/OiBudW1iZXI7XG4gICAgZGlzcGxheVllYXI/OiBudW1iZXI7XG4gICAgdmFsdWU/OiBEYXRlUmFuZ2U7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2VQaWNrZXJcbiAgICBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50PElEYXRlUmFuZ2VQaWNrZXJQcm9wcywgSURhdGVSYW5nZVBpY2tlclN0YXRlPiB7XG5cbiAgICBwdWJsaWMgc3RhdGljIGRlZmF1bHRQcm9wczogSURhdGVSYW5nZVBpY2tlclByb3BzID0ge1xuICAgICAgICBhbGxvd1NpbmdsZURheVJhbmdlOiBmYWxzZSxcbiAgICAgICAgbWF4RGF0ZTogZ2V0RGVmYXVsdE1heERhdGUoKSxcbiAgICAgICAgbWluRGF0ZTogZ2V0RGVmYXVsdE1pbkRhdGUoKSxcbiAgICAgICAgc2hvcnRjdXRzOiB0cnVlLFxuICAgIH07XG5cbiAgICBwdWJsaWMgZGlzcGxheU5hbWUgPSBcIkJsdWVwcmludC5EYXRlUmFuZ2VQaWNrZXJcIjtcblxuICAgIC8vIHRoZXNlIHdpbGwgZ2V0IG1lcmdlZCB3aXRoIHRoZSB1c2VyJ3Mgb3duXG4gICAgcHJpdmF0ZSBtb2RpZmllcnM6IElEYXRlUGlja2VyTW9kaWZpZXJzID0ge1xuICAgICAgICBbU0VMRUNURURfUkFOR0VfTU9ESUZJRVJdOiAoZGF5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdICE9IG51bGwgJiYgdmFsdWVbMV0gIT0gbnVsbCAmJiBEYXRlVXRpbHMuaXNEYXlJblJhbmdlKGRheSwgdmFsdWUsIHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBbYCR7U0VMRUNURURfUkFOR0VfTU9ESUZJRVJ9LXN0YXJ0YF06IChkYXkpID0+IERhdGVVdGlscy5hcmVTYW1lRGF5KHRoaXMuc3RhdGUudmFsdWVbMF0sIGRheSksXG4gICAgICAgIFtgJHtTRUxFQ1RFRF9SQU5HRV9NT0RJRklFUn0tZW5kYF06IChkYXkpID0+IERhdGVVdGlscy5hcmVTYW1lRGF5KHRoaXMuc3RhdGUudmFsdWVbMV0sIGRheSksXG4gICAgfTtcblxuICAgIC8vIHRoZXNlIHdpbGwgZ2V0IHBhc3NlZCBkaXJlY3RseSB0byBEYXlQaWNrZXJcbiAgICBwcml2YXRlIHN0YXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWREYXlzOiAoZGF5OiBEYXRlKSA9PiAhRGF0ZVV0aWxzLmlzRGF5SW5SYW5nZShkYXksIFt0aGlzLnByb3BzLm1pbkRhdGUsIHRoaXMucHJvcHMubWF4RGF0ZV0pLFxuICAgICAgICBzZWxlY3RlZERheXM6IChkYXk6IERhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZVV0aWxzLmFyZVNhbWVEYXkoc3RhcnQsIGRheSkgfHwgRGF0ZVV0aWxzLmFyZVNhbWVEYXkoZW5kLCBkYXkpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM/OiBJRGF0ZVJhbmdlUGlja2VyUHJvcHMsIGNvbnRleHQ/OiBhbnkpIHtcbiAgICAgICAgc3VwZXIocHJvcHMsIGNvbnRleHQpO1xuXG4gICAgICAgIGxldCB2YWx1ZTogRGF0ZVJhbmdlID0gW251bGwsIG51bGxdO1xuICAgICAgICBpZiAocHJvcHMudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWUgPSBwcm9wcy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW5pdGlhbE1vbnRoOiBEYXRlO1xuICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGlmIChwcm9wcy5pbml0aWFsTW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5pdGlhbE1vbnRoID0gcHJvcHMuaW5pdGlhbE1vbnRoO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlWzBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluaXRpYWxNb250aCA9IHZhbHVlWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKERhdGVVdGlscy5pc0RheUluUmFuZ2UodG9kYXksIFtwcm9wcy5taW5EYXRlLCBwcm9wcy5tYXhEYXRlXSkpIHtcbiAgICAgICAgICAgIGluaXRpYWxNb250aCA9IHRvZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5pdGlhbE1vbnRoID0gRGF0ZVV0aWxzLmdldERhdGVCZXR3ZWVuKFtwcm9wcy5taW5EYXRlLCBwcm9wcy5tYXhEYXRlXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGlzcGxheU1vbnRoOiBpbml0aWFsTW9udGguZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIGRpc3BsYXlZZWFyOiBpbml0aWFsTW9udGguZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVycyA9IGNvbWJpbmVNb2RpZmllcnModGhpcy5tb2RpZmllcnMsIHRoaXMucHJvcHMubW9kaWZpZXJzKTtcbiAgICAgICAgY29uc3QgeyBjbGFzc05hbWUsIGxvY2FsZSwgbG9jYWxlVXRpbHMsIG1heERhdGUsIG1pbkRhdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHsgZGlzcGxheU1vbnRoLCBkaXNwbGF5WWVhciB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgaXNTaG93aW5nT25lTW9udGggPSBEYXRlVXRpbHMuYXJlU2FtZU1vbnRoKHRoaXMucHJvcHMubWluRGF0ZSwgdGhpcy5wcm9wcy5tYXhEYXRlKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoRGF0ZUNsYXNzZXMuREFURVBJQ0tFUiwgRGF0ZUNsYXNzZXMuREFURVJBTkdFUElDS0VSLCBjbGFzc05hbWUpfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5tYXliZVJlbmRlclNob3J0Y3V0cygpfVxuICAgICAgICAgICAgICAgIDxEYXlQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgY2FuQ2hhbmdlTW9udGg9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIGNhcHRpb25FbGVtZW50PXt0aGlzLnJlbmRlckNhcHRpb24oKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWREYXlzPXt0aGlzLnN0YXRlcy5kaXNhYmxlZERheXN9XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZU91dHNpZGVEYXlzPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICBmcm9tTW9udGg9e21pbkRhdGV9XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxNb250aD17bmV3IERhdGUoZGlzcGxheVllYXIsIGRpc3BsYXlNb250aCl9XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgICAgICAgICBsb2NhbGVVdGlscz17bG9jYWxlVXRpbHN9XG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycz17bW9kaWZpZXJzfVxuICAgICAgICAgICAgICAgICAgICBudW1iZXJPZk1vbnRocz17aXNTaG93aW5nT25lTW9udGggPyAxIDogMn1cbiAgICAgICAgICAgICAgICAgICAgb25EYXlDbGljaz17dGhpcy5oYW5kbGVEYXlDbGlja31cbiAgICAgICAgICAgICAgICAgICAgb25Nb250aENoYW5nZT17dGhpcy5oYW5kbGVNb250aENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXlzPXt0aGlzLnN0YXRlcy5zZWxlY3RlZERheXN9XG4gICAgICAgICAgICAgICAgICAgIHRvTW9udGg9e21heERhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogSURhdGVSYW5nZVBpY2tlclByb3BzKSB7XG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcblxuICAgICAgICBjb25zdCB7IGRpc3BsYXlNb250aCwgZGlzcGxheVllYXIgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IGdldFN0YXRlQ2hhbmdlKHRoaXMucHJvcHMudmFsdWUsIG5leHRQcm9wcy52YWx1ZSwgZGlzcGxheU1vbnRoLCBkaXNwbGF5WWVhcik7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGVQcm9wcyhwcm9wczogSURhdGVSYW5nZVBpY2tlclByb3BzKSB7XG4gICAgICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlLCBpbml0aWFsTW9udGgsIG1heERhdGUsIG1pbkRhdGUsIHZhbHVlIH0gPSBwcm9wcztcbiAgICAgICAgY29uc3QgZGF0ZVJhbmdlOiBEYXRlUmFuZ2UgPSBbbWluRGF0ZSwgbWF4RGF0ZV07XG5cbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsICYmICFEYXRlVXRpbHMuaXNEYXlSYW5nZUluUmFuZ2UoZGVmYXVsdFZhbHVlLCBkYXRlUmFuZ2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JzLkRBVEVSQU5HRVBJQ0tFUl9ERUZBVUxUX1ZBTFVFX0lOVkFMSUQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluaXRpYWxNb250aCAhPSBudWxsICYmICFEYXRlVXRpbHMuaXNNb250aEluUmFuZ2UoaW5pdGlhbE1vbnRoLCBkYXRlUmFuZ2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JzLkRBVEVSQU5HRVBJQ0tFUl9JTklUSUFMX01PTlRIX0lOVkFMSUQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsICYmIGRlZmF1bHRWYWx1ZVswXSA9PSBudWxsICYmIGRlZmF1bHRWYWx1ZVsxXSAhPSBudWxsXG4gICAgICAgICAgICB8fCB2YWx1ZSAhPSBudWxsICYmIHZhbHVlWzBdID09IG51bGwgJiYgdmFsdWVbMV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9ycy5EQVRFUkFOR0VQSUNLRVJfSU5WQUxJRF9EQVRFX1JBTkdFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXhEYXRlICE9IG51bGxcbiAgICAgICAgICAgICAgICAmJiBtaW5EYXRlICE9IG51bGxcbiAgICAgICAgICAgICAgICAmJiBtYXhEYXRlIDwgbWluRGF0ZVxuICAgICAgICAgICAgICAgICYmICFEYXRlVXRpbHMuYXJlU2FtZURheShtYXhEYXRlLCBtaW5EYXRlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9ycy5EQVRFUkFOR0VQSUNLRVJfTUFYX0RBVEVfSU5WQUxJRCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAhRGF0ZVV0aWxzLmlzRGF5UmFuZ2VJblJhbmdlKHZhbHVlLCBkYXRlUmFuZ2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JzLkRBVEVSQU5HRVBJQ0tFUl9WQUxVRV9JTlZBTElEKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWF5YmVSZW5kZXJTaG9ydGN1dHMoKSB7XG4gICAgICAgIGNvbnN0IHByb3BzU2hvcnRjdXRzID0gdGhpcy5wcm9wcy5zaG9ydGN1dHM7XG4gICAgICAgIGlmIChwcm9wc1Nob3J0Y3V0cyA9PSBudWxsIHx8IHByb3BzU2hvcnRjdXRzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNob3J0Y3V0cyA9IHR5cGVvZiBwcm9wc1Nob3J0Y3V0cyA9PT0gXCJib29sZWFuXCIgPyBjcmVhdGVEZWZhdWx0U2hvcnRjdXRzKCkgOiBwcm9wc1Nob3J0Y3V0cztcbiAgICAgICAgY29uc3Qgc2hvcnRjdXRFbGVtZW50cyA9IHNob3J0Y3V0cy5tYXAoKHMsIGkpID0+IChcbiAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Q2xhc3Nlcy5QT1BPVkVSX0RJU01JU1NfT1ZFUlJJREV9XG4gICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZ2V0U2hvcmN1dENsaWNrSGFuZGxlcihzLmRhdGVSYW5nZSl9XG4gICAgICAgICAgICAgICAgdGV4dD17cy5sYWJlbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICkpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVudSBjbGFzc05hbWU9e0RhdGVDbGFzc2VzLkRBVEVSQU5HRVBJQ0tFUl9TSE9SVENVVFN9PlxuICAgICAgICAgICAgICAgIHtzaG9ydGN1dEVsZW1lbnRzfVxuICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2FwdGlvbigpIHtcbiAgICAgICAgY29uc3QgeyBtYXhEYXRlLCBtaW5EYXRlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPERhdGVQaWNrZXJDYXB0aW9uXG4gICAgICAgICAgICAgICAgbWF4RGF0ZT17bWF4RGF0ZX1cbiAgICAgICAgICAgICAgICBtaW5EYXRlPXttaW5EYXRlfVxuICAgICAgICAgICAgICAgIG9uTW9udGhDaGFuZ2U9e3RoaXMuaGFuZGxlTW9udGhTZWxlY3RDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25ZZWFyQ2hhbmdlPXt0aGlzLmhhbmRsZVllYXJTZWxlY3RDaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRGF5Q2xpY2sgPSAoX2U6IFJlYWN0LlN5bnRoZXRpY0V2ZW50PEhUTUxFbGVtZW50PiwgZGF5OiBEYXRlLCBtb2RpZmllcnM6IElEYXRlUGlja2VyRGF5TW9kaWZpZXJzKSA9PiB7XG4gICAgICAgIGlmIChtb2RpZmllcnMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIC8vIHJlcmVuZGVyIGJhc2UgY29tcG9uZW50IHRvIGdldCBhcm91bmQgYnVnIHdoZXJlIHlvdSBjYW4gbmF2aWdhdGUgcGFzdCBib3VuZHMgYnkgY2xpY2tpbmcgZGF5c1xuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICAgICAgbGV0IG5leHRWYWx1ZTogRGF0ZVJhbmdlO1xuXG4gICAgICAgIGlmIChzdGFydCA9PSBudWxsICYmIGVuZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBuZXh0VmFsdWUgPSBbZGF5LCBudWxsXTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydCAhPSBudWxsICYmIGVuZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBuZXh0VmFsdWUgPSB0aGlzLmNyZWF0ZVJhbmdlKGRheSwgc3RhcnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IG51bGwgJiYgZW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgIG5leHRWYWx1ZSA9IHRoaXMuY3JlYXRlUmFuZ2UoZGF5LCBlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXNTdGFydCA9IERhdGVVdGlscy5hcmVTYW1lRGF5KHN0YXJ0LCBkYXkpO1xuICAgICAgICAgICAgY29uc3QgaXNFbmQgPSBEYXRlVXRpbHMuYXJlU2FtZURheShlbmQsIGRheSk7XG4gICAgICAgICAgICBpZiAoaXNTdGFydCAmJiBpc0VuZCkge1xuICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IFtudWxsLCBudWxsXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdGFydCkge1xuICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IFtudWxsLCBlbmRdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0VuZCkge1xuICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IFtzdGFydCwgbnVsbF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IFtkYXksIG51bGxdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVOZXh0U3RhdGUobmV4dFZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJhbmdlKGE6IERhdGUsIGI6IERhdGUpOiBEYXRlUmFuZ2Uge1xuICAgICAgICAvLyBjbGlja2luZyB0aGUgc2FtZSBkYXRlIGFnYWluIHdpbGwgY2xlYXIgaXRcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmFsbG93U2luZ2xlRGF5UmFuZ2UgJiYgRGF0ZVV0aWxzLmFyZVNhbWVEYXkoYSwgYikpIHtcbiAgICAgICAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEgPCBiID8gW2EsIGJdIDogW2IsIGFdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2hvcmN1dENsaWNrSGFuZGxlcihuZXh0VmFsdWU6IERhdGVSYW5nZSkge1xuICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5oYW5kbGVOZXh0U3RhdGUobmV4dFZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU5leHRTdGF0ZShuZXh0VmFsdWU6IERhdGVSYW5nZSkge1xuICAgICAgICBjb25zdCB7IGRpc3BsYXlNb250aCwgZGlzcGxheVllYXIsIHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCBuZXh0U3RhdGUgPSBnZXRTdGF0ZUNoYW5nZSh2YWx1ZSwgbmV4dFZhbHVlLCBkaXNwbGF5TW9udGgsIGRpc3BsYXlZZWFyKTtcblxuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBVdGlscy5zYWZlSW52b2tlKHRoaXMucHJvcHMub25DaGFuZ2UsIG5leHRWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVNb250aENoYW5nZSA9IChuZXdEYXRlOiBEYXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlNb250aCA9IG5ld0RhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgY29uc3QgZGlzcGxheVllYXIgPSBuZXdEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkaXNwbGF5TW9udGgsIGRpc3BsYXlZZWFyIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTW9udGhTZWxlY3RDaGFuZ2UgPSAoZGlzcGxheU1vbnRoOiBudW1iZXIpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGRpc3BsYXlNb250aCB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVllYXJTZWxlY3RDaGFuZ2UgPSAoZGlzcGxheVllYXI6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCB7IG1pbkRhdGUsIG1heERhdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIC8vIHdlIGRpc3BsYXkgdHdvIG1vbnRocywgc28gd2Ugd2FudCBvdXIgZGlzcGxheSBtYXggZGF0ZSB0byBiZSBvbmUgbW9udGggZWFybGllciB0aGFuIG91ciByZWFsIG1heCBkYXRlXG4gICAgICAgIGNvbnN0IGFkanVzdGVkTWF4RGF0ZSA9IERhdGVVdGlscy5jbG9uZShtYXhEYXRlKTtcbiAgICAgICAgYWRqdXN0ZWRNYXhEYXRlLnNldE1vbnRoKGFkanVzdGVkTWF4RGF0ZS5nZXRNb250aCgpIC0gMSk7XG5cbiAgICAgICAgY29uc3QgbWluWWVhciA9IG1pbkRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgY29uc3QgbWF4WWVhciA9IGFkanVzdGVkTWF4RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBtaW5Nb250aCA9IG1pbkRhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgY29uc3QgbWF4TW9udGggPSBhZGp1c3RlZE1heERhdGUuZ2V0TW9udGgoKTtcblxuICAgICAgICBsZXQgeyBkaXNwbGF5TW9udGggfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgaWYgKGRpc3BsYXlZZWFyID09PSBtaW5ZZWFyICYmIGRpc3BsYXlNb250aCA8IG1pbk1vbnRoKSB7XG4gICAgICAgICAgICBkaXNwbGF5TW9udGggPSBtaW5Nb250aDtcbiAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5WWVhciA9PT0gbWF4WWVhciAmJiBkaXNwbGF5TW9udGggPiBtYXhNb250aCkge1xuICAgICAgICAgICAgZGlzcGxheU1vbnRoID0gbWF4TW9udGg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGlzcGxheU1vbnRoLCBkaXNwbGF5WWVhciB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YXRlQ2hhbmdlKHZhbHVlOiBEYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0VmFsdWU6IERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJNb250aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyclllYXI6IG51bWJlcik6IElEYXRlUmFuZ2VQaWNrZXJTdGF0ZSB7XG4gICAgbGV0IHJldHVyblZhbDogSURhdGVSYW5nZVBpY2tlclN0YXRlO1xuXG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgbmV4dFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuVmFsID0geyB2YWx1ZTogW251bGwsIG51bGxdIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBudWxsICYmIG5leHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIGNhbGVuZGFyIGRpc3BsYXlzIGZpcnN0IG1vbnRoIG9mIHRoZSBuZXcgc3RhcnQgZGF0ZSBpZiBwcm92aWRlZFxuICAgICAgICBpZiAobmV4dFZhbHVlWzBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVyblZhbCA9IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TW9udGg6IG5leHRWYWx1ZVswXS5nZXRNb250aCgpLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlZZWFyOiBuZXh0VmFsdWVbMF0uZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmV4dFZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVyblZhbCA9IHsgdmFsdWU6IG5leHRWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsICYmIG5leHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IFt2YWx1ZVN0YXJ0LCB2YWx1ZUVuZF0gPSB2YWx1ZTtcbiAgICAgICAgY29uc3QgW25leHRWYWx1ZVN0YXJ0LCBuZXh0VmFsdWVFbmRdID0gbmV4dFZhbHVlO1xuXG4gICAgICAgIGlmIChuZXh0VmFsdWVTdGFydCA9PSBudWxsKSB7XG4gICAgICAgICAgIHJldHVyblZhbCA9IHsgdmFsdWU6IG5leHRWYWx1ZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaGFzRW5kRGF0ZUNoYW5nZWQgPSAhRGF0ZVV0aWxzLmFyZVNhbWVEYXkodmFsdWVFbmQsIG5leHRWYWx1ZUVuZCk7XG4gICAgICAgICAgICBjb25zdCBpc1N0YXJ0RGF0ZU5vd0VuZERhdGUgPSBEYXRlVXRpbHMuYXJlU2FtZURheSh2YWx1ZVN0YXJ0LCBuZXh0VmFsdWVFbmQpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gaGFzRW5kRGF0ZUNoYW5nZWQgJiYgIWlzU3RhcnREYXRlTm93RW5kRGF0ZSAmJiBuZXh0VmFsdWVFbmQgIT0gbnVsbCA/XG4gICAgICAgICAgICAgICAgbmV4dFZhbHVlRW5kIDpcbiAgICAgICAgICAgICAgICBuZXh0VmFsdWVTdGFydDtcbiAgICAgICAgICAgIHJldHVyblZhbCA9IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TW9udGg6IG5ld0RhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5WWVhcjogbmV3RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuVmFsID0ge307XG4gICAgfVxuXG4gICAgLy8gYWRqdXN0IGNhbGVuZGFyIGRpc3BsYXkgbW9udGggYXMgbGl0dGxlIGFzIHBvc3NpYmxlXG4gICAgY29uc3QgeyBkaXNwbGF5TW9udGgsIGRpc3BsYXlZZWFyIH0gPSByZXR1cm5WYWw7XG4gICAgaWYgKGRpc3BsYXlNb250aCAhPSBudWxsICYmIGRpc3BsYXlZZWFyICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gZ2V0TmV4dE1vbnRoKFtjdXJyTW9udGgsIGN1cnJZZWFyXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoVG9EaXNwbGF5OiBEaXNwbGF5TW9udGggPSBbZGlzcGxheU1vbnRoLCBkaXNwbGF5WWVhcl07XG4gICAgICAgIGlmIChhcmVTYW1lTW9udGgobmV4dE1vbnRoLCBtb250aFRvRGlzcGxheSkpIHtcbiAgICAgICAgICAgIHJldHVyblZhbC5kaXNwbGF5TW9udGggPSBjdXJyTW9udGg7XG4gICAgICAgICAgICByZXR1cm5WYWwuZGlzcGxheVllYXIgPSBjdXJyWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChhcmVTYW1lTW9udGgoZ2V0TmV4dE1vbnRoKG5leHRNb250aCksIG1vbnRoVG9EaXNwbGF5KSkge1xuICAgICAgICAgICByZXR1cm5WYWwuZGlzcGxheU1vbnRoID0gbmV4dE1vbnRoWzBdO1xuICAgICAgICAgICByZXR1cm5WYWwuZGlzcGxheVllYXIgPSBuZXh0TW9udGhbMV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsO1xufVxuXG50eXBlIERpc3BsYXlNb250aCA9IFtudW1iZXIsIG51bWJlcl07XG5cbmZ1bmN0aW9uIGdldE5leHRNb250aChbbW9udGgsIHllYXJdOiBEaXNwbGF5TW9udGgpOiBEaXNwbGF5TW9udGgge1xuICAgIHJldHVybiBtb250aCA9PT0gMTIgPyBbMCwgeWVhciArIDFdIDogW21vbnRoICsgMSwgeWVhcl07XG59XG5cbmZ1bmN0aW9uIGFyZVNhbWVNb250aChbbW9udGgsIHllYXJdOiBEaXNwbGF5TW9udGgsIFttb250aDIsIHllYXIyXTogRGlzcGxheU1vbnRoKSB7XG4gICAgcmV0dXJuIG1vbnRoID09PSBtb250aDIgJiYgeWVhciA9PT0geWVhcjI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNob3J0Y3V0KGxhYmVsOiBzdHJpbmcsIGRhdGVSYW5nZTogRGF0ZVJhbmdlKTogSURhdGVSYW5nZVNob3J0Y3V0IHtcbiAgICByZXR1cm4geyBkYXRlUmFuZ2UsIGxhYmVsIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRTaG9ydGN1dHMoKSB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1ha2VEYXRlID0gKGFjdGlvbjogKGQ6IERhdGUpID0+IHZvaWQpID0+IHtcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gRGF0ZVV0aWxzLmNsb25lKHRvZGF5KTtcbiAgICAgICAgYWN0aW9uKHJldHVyblZhbCk7XG4gICAgICAgIHJldHVyblZhbC5zZXREYXRlKHJldHVyblZhbC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25lV2Vla0FnbyA9IG1ha2VEYXRlKChkKSA9PiBkLnNldERhdGUoZC5nZXREYXRlKCkgLSA3KSk7XG4gICAgY29uc3Qgb25lTW9udGhBZ28gPSBtYWtlRGF0ZSgoZCkgPT4gZC5zZXRNb250aChkLmdldE1vbnRoKCkgLSAxKSk7XG4gICAgY29uc3QgdGhyZWVNb250aHNBZ28gPSBtYWtlRGF0ZSgoZCkgPT4gZC5zZXRNb250aChkLmdldE1vbnRoKCkgLSAzKSk7XG4gICAgY29uc3Qgc2l4TW9udGhzQWdvID0gbWFrZURhdGUoKGQpID0+IGQuc2V0TW9udGgoZC5nZXRNb250aCgpIC0gNikpO1xuICAgIGNvbnN0IG9uZVllYXJBZ28gPSBtYWtlRGF0ZSgoZCkgPT4gZC5zZXRGdWxsWWVhcihkLmdldEZ1bGxZZWFyKCkgLSAxKSk7XG4gICAgY29uc3QgdHdvWWVhcnNBZ28gPSBtYWtlRGF0ZSgoZCkgPT4gZC5zZXRGdWxsWWVhcihkLmdldEZ1bGxZZWFyKCkgLSAyKSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICBjcmVhdGVTaG9ydGN1dChcIlBhc3QgV2Vla1wiLCBbb25lV2Vla0FnbywgdG9kYXldKSxcbiAgICAgICAgY3JlYXRlU2hvcnRjdXQoXCJQYXN0IE1vbnRoXCIsIFtvbmVNb250aEFnbywgdG9kYXldKSxcbiAgICAgICAgY3JlYXRlU2hvcnRjdXQoXCJQYXN0IDMgTW9udGhzXCIsIFt0aHJlZU1vbnRoc0FnbywgdG9kYXldKSxcbiAgICAgICAgY3JlYXRlU2hvcnRjdXQoXCJQYXN0IDYgTW9udGhzXCIsIFtzaXhNb250aHNBZ28sIHRvZGF5XSksXG4gICAgICAgIGNyZWF0ZVNob3J0Y3V0KFwiUGFzdCBZZWFyXCIsIFtvbmVZZWFyQWdvLCB0b2RheV0pLFxuICAgICAgICBjcmVhdGVTaG9ydGN1dChcIlBhc3QgMiBZZWFyc1wiLCBbdHdvWWVhcnNBZ28sIHRvZGF5XSksXG4gICAgXTtcbn1cblxuZXhwb3J0IGNvbnN0IERhdGVSYW5nZVBpY2tlckZhY3RvcnkgPSBSZWFjdC5jcmVhdGVGYWN0b3J5KERhdGVSYW5nZVBpY2tlcik7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRlUmFuZ2VQaWNrZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHOzs7Ozs7O0FBRUgscUJBQTBFLG1CQUFtQixDQUFDLENBQUE7QUFDOUYsSUFBWSxVQUFVLFdBQU0sWUFBWSxDQUFDLENBQUE7QUFDekMsSUFBWSxLQUFLLFdBQU0sT0FBTyxDQUFDLENBQUE7QUFDL0IsSUFBWSxTQUFTLFdBQU0sa0JBQWtCLENBQUMsQ0FBQTtBQUU5QyxJQUFZLFdBQVcsV0FBTSxrQkFBa0IsQ0FBQyxDQUFBO0FBQ2hELElBQVksU0FBUyxXQUFNLG9CQUFvQixDQUFDLENBQUE7QUFFaEQsSUFBWSxNQUFNLFdBQU0saUJBQWlCLENBQUMsQ0FBQTtBQUUxQyxrQ0FBa0MscUJBQXFCLENBQUMsQ0FBQTtBQUN4RCwrQkFRTyxrQkFBa0IsQ0FBQyxDQUFBO0FBb0QxQjtJQUNZLG1DQUErRDtJQThCdkUseUJBQW1CLEtBQTZCLEVBQUUsT0FBYTtRQS9CbkUsaUJBbVFDO1FBbk9PLGtCQUFNLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQXRCbkIsZ0JBQVcsR0FBRywyQkFBMkIsQ0FBQztRQUVqRCw0Q0FBNEM7UUFDcEMsY0FBUyxHQUF5QjtZQUN0QyxHQUFDLHdDQUF1QixDQUFDLEdBQUUsVUFBQyxHQUFHO2dCQUNuQiw2QkFBSyxDQUFnQjtnQkFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUYsQ0FBQztZQUNELEdBQUksd0NBQXVCLFdBQVEsQ0FBQyxHQUFFLFVBQUMsR0FBRyxJQUFLLE9BQUEsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFH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RyxRQUFRLENBQUMsVUFBQyxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBbEMsQ0FBa0MsQ0FBQyxDQUFDO0lBRXhFLE1BQU0sQ0FBQztRQUNILGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELGNBQWMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEQsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3ZELENBQUM7QUFDTixDQUFDO0FBRVksOEJBQXNCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyIsImZpbGUiOiJkYXRlUmFuZ2VQaWNrZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTYgUGFsYW50aXIgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNELTMgTGljZW5zZSBhcyBtb2RpZmllZCAodGhlIOKAnExpY2Vuc2XigJ0pOyB5b3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBsaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvUEFURU5UU1xuICovXG5cbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50LCBDbGFzc2VzLCBJUHJvcHMsIE1lbnUsIE1lbnVJdGVtLCBVdGlscyB9IGZyb20gXCJAYmx1ZXByaW50anMvY29yZVwiO1xuaW1wb3J0ICogYXMgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgKiBhcyBEYXlQaWNrZXIgZnJvbSBcInJlYWN0LWRheS1waWNrZXJcIjtcblxuaW1wb3J0ICogYXMgRGF0ZUNsYXNzZXMgZnJvbSBcIi4vY29tbW9uL2NsYXNzZXNcIjtcbmltcG9ydCAqIGFzIERhdGVVdGlscyBmcm9tIFwiLi9jb21tb24vZGF0ZVV0aWxzXCI7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tIFwiLi9jb21tb24vZGF0ZVV0aWxzXCI7XG5pbXBvcnQgKiBhcyBFcnJvcnMgZnJvbSBcIi4vY29tbW9uL2Vycm9yc1wiO1xuXG5pbXBvcnQgeyBEYXRlUGlja2VyQ2FwdGlvbiB9IGZyb20gXCIuL2RhdGVQaWNrZXJDYXB0aW9uXCI7XG5pbXBvcnQge1xuICAgIGNvbWJpbmVNb2RpZmllcnMsXG4gICAgZ2V0RGVmYXVsdE1heERhdGUsXG4gICAgZ2V0RGVmYXVsdE1pbkRhdGUsXG4gICAgSURhdGVQaWNrZXJCYXNlUHJvcHMsXG4gICAgSURhdGVQaWNrZXJEYXlNb2RpZmllcnMsXG4gICAgSURhdGVQaWNrZXJNb2RpZmllcnMsXG4gICAgU0VMRUNURURfUkFOR0VfTU9ESUZJRVIsXG59IGZyb20gXCIuL2RhdGVQaWNrZXJDb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVSYW5nZVNob3J0Y3V0IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGRhdGVSYW5nZTogRGF0ZVJhbmdlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRlUmFuZ2VQaWNrZXJQcm9wcyBleHRlbmRzIElEYXRlUGlja2VyQmFzZVByb3BzLCBJUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgb2YgdGhlIHJhbmdlIGNhbiBiZSB0aGUgc2FtZSBkYXkuXG4gICAgICogSWYgYHRydWVgLCBjbGlja2luZyBhIHNlbGVjdGVkIGRhdGUgd2lsbCBjcmVhdGUgYSBvbmUtZGF5IHJhbmdlLlxuICAgICAqIElmIGBmYWxzZWAsIGNsaWNraW5nIGEgc2VsZWN0ZWQgZGF0ZSB3aWxsIGNsZWFyIHRoZSBzZWxlY3Rpb24uXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBhbGxvd1NpbmdsZURheVJhbmdlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgRGF0ZVJhbmdlIHRoZSBjYWxlbmRhciB3aWxsIGRpc3BsYXkgYXMgc2VsZWN0ZWQuXG4gICAgICogVGhpcyBzaG91bGQgbm90IGJlIHNldCBpZiBgdmFsdWVgIGlzIHNldC5cbiAgICAgKi9cbiAgICBkZWZhdWx0VmFsdWU/OiBEYXRlUmFuZ2U7XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBzZWxlY3RzIGEgZGF5LlxuICAgICAqIElmIG5vIGRheXMgYXJlIHNlbGVjdGVkLCBpdCB3aWxsIHBhc3MgYFtudWxsLCBudWxsXWAuXG4gICAgICogSWYgYSBzdGFydCBkYXRlIGlzIHNlbGVjdGVkIGJ1dCBub3QgYW4gZW5kIGRhdGUsIGl0IHdpbGwgcGFzcyBgW3NlbGVjdGVkRGF0ZSwgbnVsbF1gLlxuICAgICAqIElmIGJvdGggYSBzdGFydCBhbmQgZW5kIGRhdGUgYXJlIHNlbGVjdGVkLCBpdCB3aWxsIHBhc3MgYFtzdGFydERhdGUsIGVuZERhdGVdYC5cbiAgICAgKi9cbiAgICBvbkNoYW5nZT86IChzZWxlY3RlZERhdGVzOiBEYXRlUmFuZ2UpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHNob3J0Y3V0cyB0byBxdWlja2x5IHNlbGVjdCBhIHJhbmdlIG9mIGRhdGVzIGFyZSBkaXNwbGF5ZWQgb3Igbm90LlxuICAgICAqIElmIGB0cnVlYCwgcHJlc2V0IHNob3J0Y3V0cyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICAgKiBJZiBgZmFsc2VgLCBubyBzaG9ydGN1dHMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICogSWYgYW4gYXJyYXksIHRoZSBjdXN0b20gc2hvcnRjdXRzIHByb3ZpZGVkIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBzaG9ydGN1dHM/OiBib29sZWFuIHwgSURhdGVSYW5nZVNob3J0Y3V0W107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIERhdGVSYW5nZS5cbiAgICAgKiBJZiB0aGlzIHByb3AgaXMgcHJlc2VudCwgdGhlIGNvbXBvbmVudCBhY3RzIGluIGEgY29udHJvbGxlZCBtYW5uZXIuXG4gICAgICovXG4gICAgdmFsdWU/OiBEYXRlUmFuZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVSYW5nZVBpY2tlclN0YXRlIHtcbiAgICBkaXNwbGF5TW9udGg/OiBudW1iZXI7XG4gICAgZGlzcGxheVllYXI/OiBudW1iZXI7XG4gICAgdmFsdWU/OiBEYXRlUmFuZ2U7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2VQaWNrZXJcbiAgICBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50PElEYXRlUmFuZ2VQaWNrZXJQcm9wcywgSURhdGVSYW5nZVBpY2tlclN0YXRlPiB7XG5cbiAgICBwdWJsaWMgc3RhdGljIGRlZmF1bHRQcm9wczogSURhdGVSYW5nZVBpY2tlclByb3BzID0ge1xuICAgICAgICBhbGxvd1NpbmdsZURheVJhbmdlOiBmYWxzZSxcbiAgICAgICAgbWF4RGF0ZTogZ2V0RGVmYXVsdE1heERhdGUoKSxcbiAgICAgICAgbWluRGF0ZTogZ2V0RGVmYXVsdE1pbkRhdGUoKSxcbiAgICAgICAgc2hvcnRjdXRzOiB0cnVlLFxuICAgIH07XG5cbiAgICBwdWJsaWMgZGlzcGxheU5hbWUgPSBcIkJsdWVwcmludC5EYXRlUmFuZ2VQaWNrZXJcIjtcblxuICAgIC8vIHRoZXNlIHdpbGwgZ2V0IG1lcmdlZCB3aXRoIHRoZSB1c2VyJ3Mgb3duXG4gICAgcHJpdmF0ZSBtb2RpZmllcnM6IElEYXRlUGlja2VyTW9kaWZpZXJzID0ge1xuICAgICAgICBbU0VMRUNURURfUkFOR0VfTU9ESUZJRVJdOiAoZGF5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdICE9IG51bGwgJiYgdmFsdWVbMV0gIT0gbnVsbCAmJiBEYXRlVXRpbHMuaXNEYXlJblJhbmdlKGRheSwgdmFsdWUsIHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBbYCR7U0VMRUNURURfUkFOR0VfTU9ESUZJRVJ9LXN0YXJ0YF06IChkYXkpID0+IERhdGVVdGlscy5hcmVTYW1lRGF5KHRoaXMuc3RhdGUudmFsdWVbMF0sIGRheSksXG4gICAgICAgIFtgJHtTRUxFQ1RFRF9SQU5HRV9NT0RJRklFUn0tZW5kYF06IChkYXkpID0+IERhdGVVdGlscy5hcmVTYW1lRGF5KHRoaXMuc3RhdGUudmFsdWVbMV0sIGRheSksXG4gICAgfTtcblxuICAgIC8vIHRoZXNlIHdpbGwgZ2V0IHBhc3NlZCBkaXJlY3RseSB0byBEYXlQaWNrZXJcbiAgICBwcml2YXRlIHN0YXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWREYXlzOiAoZGF5OiBEYXRlKSA9PiAhRGF0ZVV0aWxzLmlzRGF5SW5SYW5nZShkYXksIFt0aGlzLnByb3BzLm1pbkRhdGUsIHRoaXMucHJvcHMubWF4RGF0ZV0pLFxuICAgICAgICBzZWxlY3RlZERheXM6IChkYXk6IERhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZVV0aWxzLmFyZVNhbWVEYXkoc3RhcnQsIGRheSkgfHwgRGF0ZVV0aWxzLmFyZVNhbWVEYXkoZW5kLCBkYXkpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM/OiBJRGF0ZVJhbmdlUGlja2VyUHJvcHMsIGNvbnRleHQ/OiBhbnkpIHtcbiAgICAgICAgc3VwZXIocHJvcHMsIGNvbnRleHQpO1xuXG4gICAgICAgIGxldCB2YWx1ZTogRGF0ZVJhbmdlID0gW251bGwsIG51bGxdO1xuICAgICAgICBpZiAocHJvcHMudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWUgPSBwcm9wcy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW5pdGlhbE1vbnRoOiBEYXRlO1xuICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgaWYgKHByb3BzLmluaXRpYWxNb250aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbml0aWFsTW9udGggPSBwcm9wcy5pbml0aWFsTW9udGg7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWVbMF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5pdGlhbE1vbnRoID0gdmFsdWVbMF07XG4gICAgICAgIH0gZWxzZSBpZiAoRGF0ZVV0aWxzLmlzRGF5SW5SYW5nZSh0b2RheSwgW3Byb3BzLm1pbkRhdGUsIHByb3BzLm1heERhdGVdKSkge1xuICAgICAgICAgICAgaW5pdGlhbE1vbnRoID0gdG9kYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbml0aWFsTW9udGggPSBEYXRlVXRpbHMuZ2V0RGF0ZUJldHdlZW4oW3Byb3BzLm1pbkRhdGUsIHByb3BzLm1heERhdGVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZSBpbml0aWFsIG1vbnRoIGlzIHRoZSBsYXN0IG1vbnRoIG9mIHRoZSBwaWNrZXInc1xuICAgICAgICAvLyBhbGxvd2FibGUgcmFuZ2UsIHRoZSByZWFjdC1kYXktcGlja2VyIGxpYnJhcnkgd2lsbCBzaG93XG4gICAgICAgIC8vIHRoZSBtYXggbW9udGggb24gdGhlIGxlZnQgYW5kIHRoZSAqbWluKiBtb250aCBvbiB0aGUgcmlnaHQuXG4gICAgICAgIC8vIHN1YnRyYWN0aW5nIG9uZSBhdm9pZHMgdGhhdCB3ZWlyZCwgd3JhcGFyb3VuZCBzdGF0ZSAoIzI4OSkuXG4gICAgICAgIGNvbnN0IGluaXRpYWxNb250aEVxdWFsc01pbk1vbnRoID0gaW5pdGlhbE1vbnRoLmdldE1vbnRoKCkgPT09IHByb3BzLm1pbkRhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgY29uc3QgaW5pdGFsTW9udGhFcXVhbHNNYXhNb250aCA9IGluaXRpYWxNb250aC5nZXRNb250aCgpID09PSBwcm9wcy5tYXhEYXRlLmdldE1vbnRoKCk7XG4gICAgICAgIGlmICghaW5pdGlhbE1vbnRoRXF1YWxzTWluTW9udGggJiYgaW5pdGFsTW9udGhFcXVhbHNNYXhNb250aCkge1xuICAgICAgICAgICAgaW5pdGlhbE1vbnRoLnNldE1vbnRoKGluaXRpYWxNb250aC5nZXRNb250aCgpIC0gMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGlzcGxheU1vbnRoOiBpbml0aWFsTW9udGguZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIGRpc3BsYXlZZWFyOiBpbml0aWFsTW9udGguZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVycyA9IGNvbWJpbmVNb2RpZmllcnModGhpcy5tb2RpZmllcnMsIHRoaXMucHJvcHMubW9kaWZpZXJzKTtcbiAgICAgICAgY29uc3QgeyBjbGFzc05hbWUsIGxvY2FsZSwgbG9jYWxlVXRpbHMsIG1heERhdGUsIG1pbkRhdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHsgZGlzcGxheU1vbnRoLCBkaXNwbGF5WWVhciB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgaXNTaG93aW5nT25lTW9udGggPSBEYXRlVXRpbHMuYXJlU2FtZU1vbnRoKHRoaXMucHJvcHMubWluRGF0ZSwgdGhpcy5wcm9wcy5tYXhEYXRlKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoRGF0ZUNsYXNzZXMuREFURVBJQ0tFUiwgRGF0ZUNsYXNzZXMuREFURVJBTkdFUElDS0VSLCBjbGFzc05hbWUpfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5tYXliZVJlbmRlclNob3J0Y3V0cygpfVxuICAgICAgICAgICAgICAgIDxEYXlQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgY2FuQ2hhbmdlTW9udGg9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIGNhcHRpb25FbGVtZW50PXt0aGlzLnJlbmRlckNhcHRpb24oKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWREYXlzPXt0aGlzLnN0YXRlcy5kaXNhYmxlZERheXN9XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZU91dHNpZGVEYXlzPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICBmcm9tTW9udGg9e21pbkRhdGV9XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxNb250aD17bmV3IERhdGUoZGlzcGxheVllYXIsIGRpc3BsYXlNb250aCl9XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgICAgICAgICBsb2NhbGVVdGlscz17bG9jYWxlVXRpbHN9XG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycz17bW9kaWZpZXJzfVxuICAgICAgICAgICAgICAgICAgICBudW1iZXJPZk1vbnRocz17aXNTaG93aW5nT25lTW9udGggPyAxIDogMn1cbiAgICAgICAgICAgICAgICAgICAgb25EYXlDbGljaz17dGhpcy5oYW5kbGVEYXlDbGlja31cbiAgICAgICAgICAgICAgICAgICAgb25Nb250aENoYW5nZT17dGhpcy5oYW5kbGVNb250aENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXlzPXt0aGlzLnN0YXRlcy5zZWxlY3RlZERheXN9XG4gICAgICAgICAgICAgICAgICAgIHRvTW9udGg9e21heERhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogSURhdGVSYW5nZVBpY2tlclByb3BzKSB7XG4gICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKTtcblxuICAgICAgICBjb25zdCB7IGRpc3BsYXlNb250aCwgZGlzcGxheVllYXIgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IGdldFN0YXRlQ2hhbmdlKHRoaXMucHJvcHMudmFsdWUsIG5leHRQcm9wcy52YWx1ZSwgZGlzcGxheU1vbnRoLCBkaXNwbGF5WWVhcik7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGVQcm9wcyhwcm9wczogSURhdGVSYW5nZVBpY2tlclByb3BzKSB7XG4gICAgICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlLCBpbml0aWFsTW9udGgsIG1heERhdGUsIG1pbkRhdGUsIHZhbHVlIH0gPSBwcm9wcztcbiAgICAgICAgY29uc3QgZGF0ZVJhbmdlOiBEYXRlUmFuZ2UgPSBbbWluRGF0ZSwgbWF4RGF0ZV07XG5cbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsICYmICFEYXRlVXRpbHMuaXNEYXlSYW5nZUluUmFuZ2UoZGVmYXVsdFZhbHVlLCBkYXRlUmFuZ2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JzLkRBVEVSQU5HRVBJQ0tFUl9ERUZBVUxUX1ZBTFVFX0lOVkFMSUQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluaXRpYWxNb250aCAhPSBudWxsICYmICFEYXRlVXRpbHMuaXNNb250aEluUmFuZ2UoaW5pdGlhbE1vbnRoLCBkYXRlUmFuZ2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JzLkRBVEVSQU5HRVBJQ0tFUl9JTklUSUFMX01PTlRIX0lOVkFMSUQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsICYmIGRlZmF1bHRWYWx1ZVswXSA9PSBudWxsICYmIGRlZmF1bHRWYWx1ZVsxXSAhPSBudWxsXG4gICAgICAgICAgICB8fCB2YWx1ZSAhPSBudWxsICYmIHZhbHVlWzBdID09IG51bGwgJiYgdmFsdWVbMV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9ycy5EQVRFUkFOR0VQSUNLRVJfSU5WQUxJRF9EQVRFX1JBTkdFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXhEYXRlICE9IG51bGxcbiAgICAgICAgICAgICAgICAmJiBtaW5EYXRlICE9IG51bGxcbiAgICAgICAgICAgICAgICAmJiBtYXhEYXRlIDwgbWluRGF0ZVxuICAgICAgICAgICAgICAgICYmICFEYXRlVXRpbHMuYXJlU2FtZURheShtYXhEYXRlLCBtaW5EYXRlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9ycy5EQVRFUkFOR0VQSUNLRVJfTUFYX0RBVEVfSU5WQUxJRCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAhRGF0ZVV0aWxzLmlzRGF5UmFuZ2VJblJhbmdlKHZhbHVlLCBkYXRlUmFuZ2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JzLkRBVEVSQU5HRVBJQ0tFUl9WQUxVRV9JTlZBTElEKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWF5YmVSZW5kZXJTaG9ydGN1dHMoKSB7XG4gICAgICAgIGNvbnN0IHByb3BzU2hvcnRjdXRzID0gdGhpcy5wcm9wcy5zaG9ydGN1dHM7XG4gICAgICAgIGlmIChwcm9wc1Nob3J0Y3V0cyA9PSBudWxsIHx8IHByb3BzU2hvcnRjdXRzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNob3J0Y3V0cyA9IHR5cGVvZiBwcm9wc1Nob3J0Y3V0cyA9PT0gXCJib29sZWFuXCIgPyBjcmVhdGVEZWZhdWx0U2hvcnRjdXRzKCkgOiBwcm9wc1Nob3J0Y3V0cztcbiAgICAgICAgY29uc3Qgc2hvcnRjdXRFbGVtZW50cyA9IHNob3J0Y3V0cy5tYXAoKHMsIGkpID0+IChcbiAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Q2xhc3Nlcy5QT1BPVkVSX0RJU01JU1NfT1ZFUlJJREV9XG4gICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZ2V0U2hvcmN1dENsaWNrSGFuZGxlcihzLmRhdGVSYW5nZSl9XG4gICAgICAgICAgICAgICAgdGV4dD17cy5sYWJlbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICkpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVudSBjbGFzc05hbWU9e0RhdGVDbGFzc2VzLkRBVEVSQU5HRVBJQ0tFUl9TSE9SVENVVFN9PlxuICAgICAgICAgICAgICAgIHtzaG9ydGN1dEVsZW1lbnRzfVxuICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2FwdGlvbigpIHtcbiAgICAgICAgY29uc3QgeyBtYXhEYXRlLCBtaW5EYXRlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPERhdGVQaWNrZXJDYXB0aW9uXG4gICAgICAgICAgICAgICAgbWF4RGF0ZT17bWF4RGF0ZX1cbiAgICAgICAgICAgICAgICBtaW5EYXRlPXttaW5EYXRlfVxuICAgICAgICAgICAgICAgIG9uTW9udGhDaGFuZ2U9e3RoaXMuaGFuZGxlTW9udGhTZWxlY3RDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25ZZWFyQ2hhbmdlPXt0aGlzLmhhbmRsZVllYXJTZWxlY3RDaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRGF5Q2xpY2sgPSAoX2U6IFJlYWN0LlN5bnRoZXRpY0V2ZW50PEhUTUxFbGVtZW50PiwgZGF5OiBEYXRlLCBtb2RpZmllcnM6IElEYXRlUGlja2VyRGF5TW9kaWZpZXJzKSA9PiB7XG4gICAgICAgIGlmIChtb2RpZmllcnMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIC8vIHJlcmVuZGVyIGJhc2UgY29tcG9uZW50IHRvIGdldCBhcm91bmQgYnVnIHdoZXJlIHlvdSBjYW4gbmF2aWdhdGUgcGFzdCBib3VuZHMgYnkgY2xpY2tpbmcgZGF5c1xuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICAgICAgbGV0IG5leHRWYWx1ZTogRGF0ZVJhbmdlO1xuXG4gICAgICAgIGlmIChzdGFydCA9PSBudWxsICYmIGVuZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBuZXh0VmFsdWUgPSBbZGF5LCBudWxsXTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydCAhPSBudWxsICYmIGVuZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBuZXh0VmFsdWUgPSB0aGlzLmNyZWF0ZVJhbmdlKGRheSwgc3RhcnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IG51bGwgJiYgZW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgIG5leHRWYWx1ZSA9IHRoaXMuY3JlYXRlUmFuZ2UoZGF5LCBlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXNTdGFydCA9IERhdGVVdGlscy5hcmVTYW1lRGF5KHN0YXJ0LCBkYXkpO1xuICAgICAgICAgICAgY29uc3QgaXNFbmQgPSBEYXRlVXRpbHMuYXJlU2FtZURheShlbmQsIGRheSk7XG4gICAgICAgICAgICBpZiAoaXNTdGFydCAmJiBpc0VuZCkge1xuICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IFtudWxsLCBudWxsXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdGFydCkge1xuICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IFtudWxsLCBlbmRdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0VuZCkge1xuICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IFtzdGFydCwgbnVsbF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IFtkYXksIG51bGxdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVOZXh0U3RhdGUobmV4dFZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJhbmdlKGE6IERhdGUsIGI6IERhdGUpOiBEYXRlUmFuZ2Uge1xuICAgICAgICAvLyBjbGlja2luZyB0aGUgc2FtZSBkYXRlIGFnYWluIHdpbGwgY2xlYXIgaXRcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmFsbG93U2luZ2xlRGF5UmFuZ2UgJiYgRGF0ZVV0aWxzLmFyZVNhbWVEYXkoYSwgYikpIHtcbiAgICAgICAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEgPCBiID8gW2EsIGJdIDogW2IsIGFdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2hvcmN1dENsaWNrSGFuZGxlcihuZXh0VmFsdWU6IERhdGVSYW5nZSkge1xuICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5oYW5kbGVOZXh0U3RhdGUobmV4dFZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU5leHRTdGF0ZShuZXh0VmFsdWU6IERhdGVSYW5nZSkge1xuICAgICAgICBjb25zdCB7IGRpc3BsYXlNb250aCwgZGlzcGxheVllYXIsIHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCBuZXh0U3RhdGUgPSBnZXRTdGF0ZUNoYW5nZSh2YWx1ZSwgbmV4dFZhbHVlLCBkaXNwbGF5TW9udGgsIGRpc3BsYXlZZWFyKTtcblxuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBVdGlscy5zYWZlSW52b2tlKHRoaXMucHJvcHMub25DaGFuZ2UsIG5leHRWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVNb250aENoYW5nZSA9IChuZXdEYXRlOiBEYXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlNb250aCA9IG5ld0RhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgY29uc3QgZGlzcGxheVllYXIgPSBuZXdEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkaXNwbGF5TW9udGgsIGRpc3BsYXlZZWFyIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTW9udGhTZWxlY3RDaGFuZ2UgPSAoZGlzcGxheU1vbnRoOiBudW1iZXIpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGRpc3BsYXlNb250aCB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVllYXJTZWxlY3RDaGFuZ2UgPSAoZGlzcGxheVllYXI6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCB7IG1pbkRhdGUsIG1heERhdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIC8vIHdlIGRpc3BsYXkgdHdvIG1vbnRocywgc28gd2Ugd2FudCBvdXIgZGlzcGxheSBtYXggZGF0ZSB0byBiZSBvbmUgbW9udGggZWFybGllciB0aGFuIG91ciByZWFsIG1heCBkYXRlXG4gICAgICAgIGNvbnN0IGFkanVzdGVkTWF4RGF0ZSA9IERhdGVVdGlscy5jbG9uZShtYXhEYXRlKTtcbiAgICAgICAgYWRqdXN0ZWRNYXhEYXRlLnNldE1vbnRoKGFkanVzdGVkTWF4RGF0ZS5nZXRNb250aCgpIC0gMSk7XG5cbiAgICAgICAgY29uc3QgbWluWWVhciA9IG1pbkRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgY29uc3QgbWF4WWVhciA9IGFkanVzdGVkTWF4RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBtaW5Nb250aCA9IG1pbkRhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgY29uc3QgbWF4TW9udGggPSBhZGp1c3RlZE1heERhdGUuZ2V0TW9udGgoKTtcblxuICAgICAgICBsZXQgeyBkaXNwbGF5TW9udGggfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgaWYgKGRpc3BsYXlZZWFyID09PSBtaW5ZZWFyICYmIGRpc3BsYXlNb250aCA8IG1pbk1vbnRoKSB7XG4gICAgICAgICAgICBkaXNwbGF5TW9udGggPSBtaW5Nb250aDtcbiAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5WWVhciA9PT0gbWF4WWVhciAmJiBkaXNwbGF5TW9udGggPiBtYXhNb250aCkge1xuICAgICAgICAgICAgZGlzcGxheU1vbnRoID0gbWF4TW9udGg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGlzcGxheU1vbnRoLCBkaXNwbGF5WWVhciB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YXRlQ2hhbmdlKHZhbHVlOiBEYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0VmFsdWU6IERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJNb250aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyclllYXI6IG51bWJlcik6IElEYXRlUmFuZ2VQaWNrZXJTdGF0ZSB7XG4gICAgbGV0IHJldHVyblZhbDogSURhdGVSYW5nZVBpY2tlclN0YXRlO1xuXG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgbmV4dFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuVmFsID0geyB2YWx1ZTogW251bGwsIG51bGxdIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBudWxsICYmIG5leHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIGNhbGVuZGFyIGRpc3BsYXlzIGZpcnN0IG1vbnRoIG9mIHRoZSBuZXcgc3RhcnQgZGF0ZSBpZiBwcm92aWRlZFxuICAgICAgICBpZiAobmV4dFZhbHVlWzBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVyblZhbCA9IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TW9udGg6IG5leHRWYWx1ZVswXS5nZXRNb250aCgpLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlZZWFyOiBuZXh0VmFsdWVbMF0uZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmV4dFZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVyblZhbCA9IHsgdmFsdWU6IG5leHRWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsICYmIG5leHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IFt2YWx1ZVN0YXJ0LCB2YWx1ZUVuZF0gPSB2YWx1ZTtcbiAgICAgICAgY29uc3QgW25leHRWYWx1ZVN0YXJ0LCBuZXh0VmFsdWVFbmRdID0gbmV4dFZhbHVlO1xuXG4gICAgICAgIGlmIChuZXh0VmFsdWVTdGFydCA9PSBudWxsKSB7XG4gICAgICAgICAgIHJldHVyblZhbCA9IHsgdmFsdWU6IG5leHRWYWx1ZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaGFzRW5kRGF0ZUNoYW5nZWQgPSAhRGF0ZVV0aWxzLmFyZVNhbWVEYXkodmFsdWVFbmQsIG5leHRWYWx1ZUVuZCk7XG4gICAgICAgICAgICBjb25zdCBpc1N0YXJ0RGF0ZU5vd0VuZERhdGUgPSBEYXRlVXRpbHMuYXJlU2FtZURheSh2YWx1ZVN0YXJ0LCBuZXh0VmFsdWVFbmQpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gaGFzRW5kRGF0ZUNoYW5nZWQgJiYgIWlzU3RhcnREYXRlTm93RW5kRGF0ZSAmJiBuZXh0VmFsdWVFbmQgIT0gbnVsbCA/XG4gICAgICAgICAgICAgICAgbmV4dFZhbHVlRW5kIDpcbiAgICAgICAgICAgICAgICBuZXh0VmFsdWVTdGFydDtcbiAgICAgICAgICAgIHJldHVyblZhbCA9IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TW9udGg6IG5ld0RhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5WWVhcjogbmV3RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuVmFsID0ge307XG4gICAgfVxuXG4gICAgLy8gYWRqdXN0IGNhbGVuZGFyIGRpc3BsYXkgbW9udGggYXMgbGl0dGxlIGFzIHBvc3NpYmxlXG4gICAgY29uc3QgeyBkaXNwbGF5TW9udGgsIGRpc3BsYXlZZWFyIH0gPSByZXR1cm5WYWw7XG4gICAgaWYgKGRpc3BsYXlNb250aCAhPSBudWxsICYmIGRpc3BsYXlZZWFyICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gZ2V0TmV4dE1vbnRoKFtjdXJyTW9udGgsIGN1cnJZZWFyXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoVG9EaXNwbGF5OiBEaXNwbGF5TW9udGggPSBbZGlzcGxheU1vbnRoLCBkaXNwbGF5WWVhcl07XG4gICAgICAgIGlmIChhcmVTYW1lTW9udGgobmV4dE1vbnRoLCBtb250aFRvRGlzcGxheSkpIHtcbiAgICAgICAgICAgIHJldHVyblZhbC5kaXNwbGF5TW9udGggPSBjdXJyTW9udGg7XG4gICAgICAgICAgICByZXR1cm5WYWwuZGlzcGxheVllYXIgPSBjdXJyWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChhcmVTYW1lTW9udGgoZ2V0TmV4dE1vbnRoKG5leHRNb250aCksIG1vbnRoVG9EaXNwbGF5KSkge1xuICAgICAgICAgICByZXR1cm5WYWwuZGlzcGxheU1vbnRoID0gbmV4dE1vbnRoWzBdO1xuICAgICAgICAgICByZXR1cm5WYWwuZGlzcGxheVllYXIgPSBuZXh0TW9udGhbMV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsO1xufVxuXG50eXBlIERpc3BsYXlNb250aCA9IFtudW1iZXIsIG51bWJlcl07XG5cbmZ1bmN0aW9uIGdldE5leHRNb250aChbbW9udGgsIHllYXJdOiBEaXNwbGF5TW9udGgpOiBEaXNwbGF5TW9udGgge1xuICAgIHJldHVybiBtb250aCA9PT0gMTIgPyBbMCwgeWVhciArIDFdIDogW21vbnRoICsgMSwgeWVhcl07XG59XG5cbmZ1bmN0aW9uIGFyZVNhbWVNb250aChbbW9udGgsIHllYXJdOiBEaXNwbGF5TW9udGgsIFttb250aDIsIHllYXIyXTogRGlzcGxheU1vbnRoKSB7XG4gICAgcmV0dXJuIG1vbnRoID09PSBtb250aDIgJiYgeWVhciA9PT0geWVhcjI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNob3J0Y3V0KGxhYmVsOiBzdHJpbmcsIGRhdGVSYW5nZTogRGF0ZVJhbmdlKTogSURhdGVSYW5nZVNob3J0Y3V0IHtcbiAgICByZXR1cm4geyBkYXRlUmFuZ2UsIGxhYmVsIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRTaG9ydGN1dHMoKSB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1ha2VEYXRlID0gKGFjdGlvbjogKGQ6IERhdGUpID0+IHZvaWQpID0+IHtcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gRGF0ZVV0aWxzLmNsb25lKHRvZGF5KTtcbiAgICAgICAgYWN0aW9uKHJldHVyblZhbCk7XG4gICAgICAgIHJldHVyblZhbC5zZXREYXRlKHJldHVyblZhbC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25lV2Vla0FnbyA9IG1ha2VEYXRlKChkKSA9PiBkLnNldERhdGUoZC5nZXREYXRlKCkgLSA3KSk7XG4gICAgY29uc3Qgb25lTW9udGhBZ28gPSBtYWtlRGF0ZSgoZCkgPT4gZC5zZXRNb250aChkLmdldE1vbnRoKCkgLSAxKSk7XG4gICAgY29uc3QgdGhyZWVNb250aHNBZ28gPSBtYWtlRGF0ZSgoZCkgPT4gZC5zZXRNb250aChkLmdldE1vbnRoKCkgLSAzKSk7XG4gICAgY29uc3Qgc2l4TW9udGhzQWdvID0gbWFrZURhdGUoKGQpID0+IGQuc2V0TW9udGgoZC5nZXRNb250aCgpIC0gNikpO1xuICAgIGNvbnN0IG9uZVllYXJBZ28gPSBtYWtlRGF0ZSgoZCkgPT4gZC5zZXRGdWxsWWVhcihkLmdldEZ1bGxZZWFyKCkgLSAxKSk7XG4gICAgY29uc3QgdHdvWWVhcnNBZ28gPSBtYWtlRGF0ZSgoZCkgPT4gZC5zZXRGdWxsWWVhcihkLmdldEZ1bGxZZWFyKCkgLSAyKSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICBjcmVhdGVTaG9ydGN1dChcIlBhc3QgV2Vla1wiLCBbb25lV2Vla0FnbywgdG9kYXldKSxcbiAgICAgICAgY3JlYXRlU2hvcnRjdXQoXCJQYXN0IE1vbnRoXCIsIFtvbmVNb250aEFnbywgdG9kYXldKSxcbiAgICAgICAgY3JlYXRlU2hvcnRjdXQoXCJQYXN0IDMgTW9udGhzXCIsIFt0aHJlZU1vbnRoc0FnbywgdG9kYXldKSxcbiAgICAgICAgY3JlYXRlU2hvcnRjdXQoXCJQYXN0IDYgTW9udGhzXCIsIFtzaXhNb250aHNBZ28sIHRvZGF5XSksXG4gICAgICAgIGNyZWF0ZVNob3J0Y3V0KFwiUGFzdCBZZWFyXCIsIFtvbmVZZWFyQWdvLCB0b2RheV0pLFxuICAgICAgICBjcmVhdGVTaG9ydGN1dChcIlBhc3QgMiBZZWFyc1wiLCBbdHdvWWVhcnNBZ28sIHRvZGF5XSksXG4gICAgXTtcbn1cblxuZXhwb3J0IGNvbnN0IERhdGVSYW5nZVBpY2tlckZhY3RvcnkgPSBSZWFjdC5jcmVhdGVGYWN0b3J5KERhdGVSYW5nZVBpY2tlcik7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=
{
"name": "@blueprintjs/datetime",
"version": "1.2.0",
"version": "1.3.0",
"description": "Components for interacting with dates and times",

@@ -9,3 +9,3 @@ "main": "dist/index.js",

"dependencies": {
"@blueprintjs/core": "^1.2.0",
"@blueprintjs/core": "^1.3.0",
"classnames": "^2.2",

@@ -12,0 +12,0 @@ "moment": "^2.14.1",

@@ -12,3 +12,3 @@ /*

*/
export function measureTextWidth(text: string, className = "") {
export function measureTextWidth(text: string, className = "", containerElement = document.body) {
const span = document.createElement("span");

@@ -18,3 +18,3 @@ span.classList.add(className);

document.body.appendChild(span);
containerElement.appendChild(span);
const spanWidth = span.offsetWidth;

@@ -21,0 +21,0 @@ span.remove();

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc