ng-snotify
Version:
Angular 2+ notifications center
270 lines • 35 kB
JavaScript
import { __decorate, __param } from "tslib";
import { Inject, Injectable } from '@angular/core';
import { Subject, from } from 'rxjs';
import { TransformArgument } from '../decorators/transform-argument.decorator';
import { mergeDeep, uuid } from '../utils';
import { SetToastType } from '../decorators/set-toast-type.decorator';
import { SnotifyToast } from '../models/snotify-toast.model';
import { SnotifyStyle } from '../enums/snotify-style.enum';
/**
* SnotifyService - create, remove, config toasts
*/
let SnotifyService =
// tslint:disable:unified-signatures
class SnotifyService {
constructor(config) {
this.config = config;
this.emitter = new Subject();
this.toastChanged = new Subject();
this.toastDeleted = new Subject();
this.notifications = [];
}
/**
* emit changes in notifications array
*/
emit() {
this.emitter.next(this.notifications.slice());
}
/**
* returns SnotifyToast object
* @param id Number
* @return SnotifyToast|undefined
*/
get(id) {
return this.notifications.find(toast => toast.id === id);
}
/**
* add SnotifyToast to notifications array
* @param toast SnotifyToast
*/
add(toast) {
if (this.config.global.filterDuplicates && this.containsToast(toast)) {
return;
}
if (this.config.global.newOnTop) {
this.notifications.unshift(toast);
}
else {
this.notifications.push(toast);
}
this.emit();
}
/**
* checks if the toast is in the collection.
* @param inToast SnotifyToast
* @returns boolean
*/
containsToast(inToast) {
return this.notifications.some(toast => toast.equals(inToast));
}
/**
* If ID passed, emits toast animation remove, if ID & REMOVE passed, removes toast from notifications array
* @param id number
* @param remove boolean
*/
remove(id, remove) {
if (!id) {
return this.clear();
}
else if (remove) {
this.notifications = this.notifications.filter(toast => toast.id !== id);
return this.emit();
}
this.toastDeleted.next(id);
}
/**
* Clear notifications array
*/
clear() {
this.notifications = [];
this.emit();
}
/**
* Creates toast and add it to array, returns toast id
* @param snotify Snotify
* @return number
*/
create(snotify) {
const config = mergeDeep(this.config.toast, this.config.type[snotify.config.type], snotify.config);
const toast = new SnotifyToast(uuid(), snotify.title, snotify.body, config);
this.add(toast);
return toast;
}
setDefaults(defaults) {
return (this.config = mergeDeep(this.config, defaults));
}
/**
* Transform toast arguments into Snotify object
*/
simple(args) {
return this.create(args);
}
/**
* Transform toast arguments into Snotify object
*/
success(args) {
return this.create(args);
}
/**
* Transform toast arguments into Snotify object
*/
error(args) {
return this.create(args);
}
/**
* Transform toast arguments into Snotify object
*/
info(args) {
return this.create(args);
}
/**
* Transform toast arguments into Snotify object
*/
warning(args) {
return this.create(args);
}
/**
* Transform toast arguments into Snotify object
*/
confirm(args) {
return this.create(args);
}
/**
* Transform toast arguments into Snotify object
*/
prompt(args) {
return this.create(args);
}
/**
* Transform toast arguments into Snotify object
*/
async(args) {
let async;
if (args.action instanceof Promise) {
async = from(args.action);
}
else {
async = args.action;
}
const toast = this.create(args);
toast.on('mounted', () => {
const subscription = async.subscribe((next) => {
this.mergeToast(toast, next);
}, (error) => {
this.mergeToast(toast, error, SnotifyStyle.error);
subscription.unsubscribe();
}, () => {
this.mergeToast(toast, {}, SnotifyStyle.success);
subscription.unsubscribe();
});
});
return toast;
}
mergeToast(toast, next, type) {
if (next.body) {
toast.body = next.body;
}
if (next.title) {
toast.title = next.title;
}
if (type) {
toast.config = mergeDeep(toast.config, this.config.global, this.config.toast[type], { type }, next.config);
}
else {
toast.config = mergeDeep(toast.config, next.config);
}
if (next.html) {
toast.config.html = next.html;
}
this.emit();
this.toastChanged.next(toast);
}
/**
* Creates empty toast with html string inside
* @param html string | SafeHtml
* @param config SnotifyToastConfig
* @returns number
*/
html(html, config) {
return this.create({
title: null,
body: null,
config: Object.assign(Object.assign({}, config), { html })
});
}
};
SnotifyService.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: ['SnotifyToastConfig',] }] }
];
__decorate([
TransformArgument
/**
* Determines current toast type and collects default configuration
*/
,
SetToastType
], SnotifyService.prototype, "simple", null);
__decorate([
TransformArgument
/**
* Determines current toast type and collects default configuration
*/
,
SetToastType
], SnotifyService.prototype, "success", null);
__decorate([
TransformArgument
/**
* Determines current toast type and collects default configuration
*/
,
SetToastType
], SnotifyService.prototype, "error", null);
__decorate([
TransformArgument
/**
* Determines current toast type and collects default configuration
*/
,
SetToastType
], SnotifyService.prototype, "info", null);
__decorate([
TransformArgument
/**
* Determines current toast type and collects default configuration
*/
,
SetToastType
], SnotifyService.prototype, "warning", null);
__decorate([
TransformArgument
/**
* Determines current toast type and collects default configuration
*/
,
SetToastType
], SnotifyService.prototype, "confirm", null);
__decorate([
TransformArgument
/**
* Determines current toast type and collects default configuration
*/
,
SetToastType
], SnotifyService.prototype, "prompt", null);
__decorate([
TransformArgument
/**
* Determines current toast type and collects default configuration
*/
,
SetToastType
], SnotifyService.prototype, "async", null);
SnotifyService = __decorate([
Injectable()
// tslint:disable:unified-signatures
,
__param(0, Inject('SnotifyToastConfig'))
], SnotifyService);
export { SnotifyService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25vdGlmeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctc25vdGlmeS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9zbm90aWZ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxPQUFPLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUsvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRDs7R0FFRztBQUdILElBQWEsY0FBYztBQUQzQixvQ0FBb0M7QUFDcEMsTUFBYSxjQUFjO0lBTXpCLFlBQWlELE1BQXVCO1FBQXZCLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBTC9ELFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBa0IsQ0FBQztRQUN4QyxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO1FBQzNDLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUN0QyxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFFZ0MsQ0FBQztJQUM1RTs7T0FFRztJQUNLLElBQUk7UUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxHQUFHLENBQUMsRUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENB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QU0sQ0FBQztZQUNqQixLQUFLLEVBQUUsSUFBSTtZQUNYLElBQUksRUFBRSxJQUFJO1lBQ1YsTUFBTSxrQ0FDRCxNQUFNLEdBQ04sRUFBRSxJQUFJLEVBQUUsQ0FDWjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFBOzs0Q0F0ZGMsTUFBTSxTQUFDLG9CQUFvQjs7QUFxSHhDO0lBTEMsaUJBQWlCO0lBQ2xCOztPQUVHOztJQUNGLFlBQVk7NENBR1o7QUFzQ0Q7SUFMQyxpQkFBaUI7SUFDbEI7O09BRUc7O0lBQ0YsWUFBWTs2Q0FHWjtBQXNDRDtJQUxDLGlCQUFpQjtJQUNsQjs7T0FFRzs7SUFDRixZQUFZOzJDQUdaO0FBc0NEO0lBTEMsaUJBQWlCO0lBQ2xCOztPQUVHOztJQUNGLFlBQVk7MENBR1o7QUFzQ0Q7SUFMQyxpQkFBaUI7SUFDbEI7O09BRUc7O0lBQ0YsWUFBWTs2Q0FHWjtBQXNDRDtJQUxDLGlCQUFpQjtJQUNsQjs7T0FFRzs7SUFDRixZQUFZOzZDQUdaO0FBc0NEO0lBTEMsaUJBQWlCO0lBQ2xCOztPQUVHOztJQUNGLFlBQVk7NENBR1o7QUErQ0Q7SUFMQyxpQkFBaUI7SUFDbEI7O09BRUc7O0lBQ0YsWUFBWTsyQ0E0Qlo7QUF2YlUsY0FBYztJQUYxQixVQUFVLEVBQUU7SUFDYixvQ0FBb0M7O0lBT3JCLFdBQUEsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUE7R0FOOUIsY0FBYyxDQTRkMUI7U0E1ZFksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU25vdGlmeVRvYXN0Q29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zbm90aWZ5LXRvYXN0LWNvbmZpZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTbm90aWZ5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zbm90aWZ5LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNub3RpZnlUeXBlIH0gZnJvbSAnLi4vdHlwZXMvc25vdGlmeS50eXBlJztcclxuaW1wb3J0IHsgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgVHJhbnNmb3JtQXJndW1lbnQgfSBmcm9tICcuLi9kZWNvcmF0b3JzL3RyYW5zZm9ybS1hcmd1bWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBtZXJnZURlZXAsIHV1aWQgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IFNldFRvYXN0VHlwZSB9IGZyb20gJy4uL2RlY29yYXRvcnMvc2V0LXRvYXN0LXR5cGUuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgU25vdGlmeURlZmF1bHRzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zbm90aWZ5LWRlZmF1bHRzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNub3RpZnlUb2FzdCB9IGZyb20gJy4uL21vZGVscy9zbm90aWZ5LXRvYXN0Lm1vZGVsJztcclxuaW1wb3J0IHsgU25vdGlmeVN0eWxlIH0gZnJvbSAnLi4vZW51bXMvc25vdGlmeS1zdHlsZS5lbnVtJztcclxuXHJcbi8qKlxyXG4gKiBTbm90aWZ5U2VydmljZSAtIGNyZWF0ZSwgcmVtb3ZlLCBjb25maWcgdG9hc3RzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbi8vIHRzbGludDpkaXNhYmxlOnVuaWZpZWQtc2lnbmF0dXJlc1xyXG5leHBvcnQgY2xhc3MgU25vdGlmeVNlcnZpY2Uge1xyXG4gIHJlYWRvbmx5IGVtaXR0ZXIgPSBuZXcgU3ViamVjdDxTbm90aWZ5VG9hc3RbXT4oKTtcclxuICByZWFkb25seSB0b2FzdENoYW5nZWQgPSBuZXcgU3ViamVjdDxTbm90aWZ5VG9hc3Q+KCk7XHJcbiAgcmVhZG9ubHkgdG9hc3REZWxldGVkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG4gIHByaXZhdGUgbm90aWZpY2F0aW9uczogU25vdGlmeVRvYXN0W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdCgnU25vdGlmeVRvYXN0Q29uZmlnJykgcHVibGljIGNvbmZpZzogU25vdGlmeURlZmF1bHRzKSB7fVxyXG4gIC8qKlxyXG4gICAqIGVtaXQgY2hhbmdlcyBpbiBub3RpZmljYXRpb25zIGFycmF5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbWl0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbWl0dGVyLm5leHQodGhpcy5ub3RpZmljYXRpb25zLnNsaWNlKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0dXJucyBTbm90aWZ5VG9hc3Qgb2JqZWN0XHJcbiAgICogQHBhcmFtIGlkIE51bWJlclxyXG4gICAqIEByZXR1cm4gU25vdGlmeVRvYXN0fHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIGdldChpZDogbnVtYmVyKTogU25vdGlmeVRvYXN0IHtcclxuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbnMuZmluZCh0b2FzdCA9PiB0b2FzdC5pZCA9PT0gaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYWRkIFNub3RpZnlUb2FzdCB0byBub3RpZmljYXRpb25zIGFycmF5XHJcbiAgICogQHBhcmFtIHRvYXN0IFNub3RpZnlUb2FzdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWRkKHRvYXN0OiBTbm90aWZ5VG9hc3QpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5nbG9iYWwuZmlsdGVyRHVwbGljYXRlcyAmJiB0aGlzLmNvbnRhaW5zVG9hc3QodG9hc3QpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNvbmZpZy5nbG9iYWwubmV3T25Ub3ApIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnVuc2hpZnQodG9hc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnB1c2godG9hc3QpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjaGVja3MgaWYgdGhlIHRvYXN0IGlzIGluIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAqIEBwYXJhbSBpblRvYXN0IFNub3RpZnlUb2FzdFxyXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cclxuICAgKi9cclxuICBwcml2YXRlIGNvbnRhaW5zVG9hc3QoaW5Ub2FzdDogU25vdGlmeVRvYXN0KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25zLnNvbWUodG9hc3QgPT4gdG9hc3QuZXF1YWxzKGluVG9hc3QpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIElEIHBhc3NlZCwgZW1pdHMgdG9hc3QgYW5pbWF0aW9uIHJlbW92ZSwgaWYgSUQgJiBSRU1PVkUgcGFzc2VkLCByZW1vdmVzIHRvYXN0IGZyb20gbm90aWZpY2F0aW9ucyBhcnJheVxyXG4gICAqIEBwYXJhbSBpZCBudW1iZXJcclxuICAgKiBAcGFyYW0gcmVtb3ZlIGJvb2xlYW5cclxuICAgKi9cclxuICByZW1vdmUoaWQ/OiBudW1iZXIsIHJlbW92ZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICghaWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2xlYXIoKTtcclxuICAgIH0gZWxzZSBpZiAocmVtb3ZlKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IHRoaXMubm90aWZpY2F0aW9ucy5maWx0ZXIodG9hc3QgPT4gdG9hc3QuaWQgIT09IGlkKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZW1pdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b2FzdERlbGV0ZWQubmV4dChpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBub3RpZmljYXRpb25zIGFycmF5XHJcbiAgICovXHJcbiAgY2xlYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyB0b2FzdCBhbmQgYWRkIGl0IHRvIGFycmF5LCByZXR1cm5zIHRvYXN0IGlkXHJcbiAgICogQHBhcmFtIHNub3RpZnkgU25vdGlmeVxyXG4gICAqIEByZXR1cm4gbnVtYmVyXHJcbiAgICovXHJcbiAgY3JlYXRlKHNub3RpZnk6IFNub3RpZnkpOiBTbm90aWZ5VG9hc3Qge1xyXG4gICAgY29uc3QgY29uZmlnID0gbWVyZ2VEZWVwKHRoaXMuY29uZmlnLnRvYXN0LCB0aGlzLmNvbmZpZy50eXBlW3Nub3RpZnkuY29uZmlnLnR5cGVdLCBzbm90aWZ5LmNvbmZpZyk7XHJcbiAgICBjb25zdCB0b2FzdCA9IG5ldyBTbm90aWZ5VG9hc3QodXVpZCgpLCBzbm90aWZ5LnRpdGxlLCBzbm90aWZ5LmJvZHksIGNvbmZpZyk7XHJcbiAgICB0aGlzLmFkZCh0b2FzdCk7XHJcbiAgICByZXR1cm4gdG9hc3Q7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0cyhkZWZhdWx0czogU25vdGlmeURlZmF1bHRzKTogU25vdGlmeURlZmF1bHRzIHtcclxuICAgIHJldHVybiAodGhpcy5jb25maWcgPSBtZXJnZURlZXAodGhpcy5jb25maWcsIGRlZmF1bHRzKSBhcyBTbm90aWZ5RGVmYXVsdHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggc2ltcGxlIHN0eWxlIHJldHVybnMgdG9hc3QgaWQ7XHJcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgc2ltcGxlKGJvZHk6IHN0cmluZyk6IFNub3RpZnlUb2FzdDtcclxuICAvKipcclxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBzaW1wbGUgc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gdGl0bGUgc3RyaW5nXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgc2ltcGxlKGJvZHk6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IFNub3RpZnlUb2FzdDtcclxuICAvKipcclxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBzaW1wbGUgc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gY29uZmlnIFNub3RpZnlUb2FzdENvbmZpZ1xyXG4gICAqIEByZXR1cm5zIG51bWJlclxyXG4gICAqL1xyXG4gIHNpbXBsZShib2R5OiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIHNpbXBsZSBzdHlsZSAgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gW2JvZHldIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBbdGl0bGVdIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBbY29uZmlnXSBTbm90aWZ5VG9hc3RDb25maWdcclxuICAgKiBAcmV0dXJucyBudW1iZXJcclxuICAgKi9cclxuICBzaW1wbGUoYm9keTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBjb25maWc6IFNub3RpZnlUb2FzdENvbmZpZyk6IFNub3RpZnlUb2FzdDtcclxuICAvKipcclxuICAgKiBUcmFuc2Zvcm0gdG9hc3QgYXJndW1lbnRzIGludG8gU25vdGlmeSBvYmplY3RcclxuICAgKi9cclxuICBAVHJhbnNmb3JtQXJndW1lbnRcclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIGN1cnJlbnQgdG9hc3QgdHlwZSBhbmQgY29sbGVjdHMgZGVmYXVsdCBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgQFNldFRvYXN0VHlwZVxyXG4gIHNpbXBsZShhcmdzOiBhbnkpOiBTbm90aWZ5VG9hc3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggc3VjY2VzcyBzdHlsZSByZXR1cm5zIHRvYXN0IGlkO1xyXG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIG51bWJlclxyXG4gICAqL1xyXG4gIHN1Y2Nlc3MoYm9keTogc3RyaW5nKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIHN1Y2Nlc3Mgc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gdGl0bGUgc3RyaW5nXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgc3VjY2Vzcyhib2R5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBTbm90aWZ5VG9hc3Q7XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggc3VjY2VzcyBzdHlsZSByZXR1cm5zIHRvYXN0IGlkO1xyXG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xyXG4gICAqIEBwYXJhbSBjb25maWcgU25vdGlmeVRvYXN0Q29uZmlnXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgc3VjY2Vzcyhib2R5OiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIHN1Y2Nlc3Mgc3R5bGUgIHJldHVybnMgdG9hc3QgaWQ7XHJcbiAgICogQHBhcmFtIFtib2R5XSBzdHJpbmdcclxuICAgKiBAcGFyYW0gW3RpdGxlXSBzdHJpbmdcclxuICAgKiBAcGFyYW0gW2NvbmZpZ10gU25vdGlmeVRvYXN0Q29uZmlnXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgc3VjY2Vzcyhib2R5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybSB0b2FzdCBhcmd1bWVudHMgaW50byBTbm90aWZ5IG9iamVjdFxyXG4gICAqL1xyXG4gIEBUcmFuc2Zvcm1Bcmd1bWVudFxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgY3VycmVudCB0b2FzdCB0eXBlIGFuZCBjb2xsZWN0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBAU2V0VG9hc3RUeXBlXHJcbiAgc3VjY2VzcyhhcmdzOiBhbnkpOiBTbm90aWZ5VG9hc3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggZXJyb3Igc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcmV0dXJucyBudW1iZXJcclxuICAgKi9cclxuICBlcnJvcihib2R5OiBzdHJpbmcpOiBTbm90aWZ5VG9hc3Q7XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggZXJyb3Igc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gdGl0bGUgc3RyaW5nXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgZXJyb3IoYm9keTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIGVycm9yIHN0eWxlIHJldHVybnMgdG9hc3QgaWQ7XHJcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXHJcbiAgICogQHBhcmFtIGNvbmZpZyBTbm90aWZ5VG9hc3RDb25maWdcclxuICAgKiBAcmV0dXJucyBudW1iZXJcclxuICAgKi9cclxuICBlcnJvcihib2R5OiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIGVycm9yIHN0eWxlICByZXR1cm5zIHRvYXN0IGlkO1xyXG4gICAqIEBwYXJhbSBbYm9keV0gc3RyaW5nXHJcbiAgICogQHBhcmFtIFt0aXRsZV0gc3RyaW5nXHJcbiAgICogQHBhcmFtIFtjb25maWddIFNub3RpZnlUb2FzdENvbmZpZ1xyXG4gICAqIEByZXR1cm5zIG51bWJlclxyXG4gICAqL1xyXG4gIGVycm9yKGJvZHk6IHN0cmluZywgdGl0bGU6IHN0cmluZywgY29uZmlnOiBTbm90aWZ5VG9hc3RDb25maWcpOiBTbm90aWZ5VG9hc3Q7XHJcbiAgLyoqXHJcbiAgICogVHJhbnNmb3JtIHRvYXN0IGFyZ3VtZW50cyBpbnRvIFNub3RpZnkgb2JqZWN0XHJcbiAgICovXHJcbiAgQFRyYW5zZm9ybUFyZ3VtZW50XHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyBjdXJyZW50IHRvYXN0IHR5cGUgYW5kIGNvbGxlY3RzIGRlZmF1bHQgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIEBTZXRUb2FzdFR5cGVcclxuICBlcnJvcihhcmdzOiBhbnkpOiBTbm90aWZ5VG9hc3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggaW5mbyBzdHlsZSByZXR1cm5zIHRvYXN0IGlkO1xyXG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIG51bWJlclxyXG4gICAqL1xyXG4gIGluZm8oYm9keTogc3RyaW5nKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIGluZm8gc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gdGl0bGUgc3RyaW5nXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgaW5mbyhib2R5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBTbm90aWZ5VG9hc3Q7XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggaW5mbyBzdHlsZSByZXR1cm5zIHRvYXN0IGlkO1xyXG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xyXG4gICAqIEBwYXJhbSBjb25maWcgU25vdGlmeVRvYXN0Q29uZmlnXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgaW5mbyhib2R5OiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIGluZm8gc3R5bGUgIHJldHVybnMgdG9hc3QgaWQ7XHJcbiAgICogQHBhcmFtIFtib2R5XSBzdHJpbmdcclxuICAgKiBAcGFyYW0gW3RpdGxlXSBzdHJpbmdcclxuICAgKiBAcGFyYW0gW2NvbmZpZ10gU25vdGlmeVRvYXN0Q29uZmlnXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgaW5mbyhib2R5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybSB0b2FzdCBhcmd1bWVudHMgaW50byBTbm90aWZ5IG9iamVjdFxyXG4gICAqL1xyXG4gIEBUcmFuc2Zvcm1Bcmd1bWVudFxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgY3VycmVudCB0b2FzdCB0eXBlIGFuZCBjb2xsZWN0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBAU2V0VG9hc3RUeXBlXHJcbiAgaW5mbyhhcmdzOiBhbnkpOiBTbm90aWZ5VG9hc3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggd2FybmluZyBzdHlsZSByZXR1cm5zIHRvYXN0IGlkO1xyXG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIG51bWJlclxyXG4gICAqL1xyXG4gIHdhcm5pbmcoYm9keTogc3RyaW5nKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIHdhcm5pbmcgc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gdGl0bGUgc3RyaW5nXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgd2FybmluZyhib2R5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBTbm90aWZ5VG9hc3Q7XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggd2FybmluZyBzdHlsZSByZXR1cm5zIHRvYXN0IGlkO1xyXG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xyXG4gICAqIEBwYXJhbSBjb25maWcgU25vdGlmeVRvYXN0Q29uZmlnXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgd2FybmluZyhib2R5OiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIHdhcm5pbmcgc3R5bGUgIHJldHVybnMgdG9hc3QgaWQ7XHJcbiAgICogQHBhcmFtIFtib2R5XSBzdHJpbmdcclxuICAgKiBAcGFyYW0gW3RpdGxlXSBzdHJpbmdcclxuICAgKiBAcGFyYW0gW2NvbmZpZ10gU25vdGlmeVRvYXN0Q29uZmlnXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgd2FybmluZyhib2R5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybSB0b2FzdCBhcmd1bWVudHMgaW50byBTbm90aWZ5IG9iamVjdFxyXG4gICAqL1xyXG4gIEBUcmFuc2Zvcm1Bcmd1bWVudFxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgY3VycmVudCB0b2FzdCB0eXBlIGFuZCBjb2xsZWN0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBAU2V0VG9hc3RUeXBlXHJcbiAgd2FybmluZyhhcmdzOiBhbnkpOiBTbm90aWZ5VG9hc3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggY29uZmlybSBzdHlsZSByZXR1cm5zIHRvYXN0IGlkO1xyXG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIG51bWJlclxyXG4gICAqL1xyXG4gIGNvbmZpcm0oYm9keTogc3RyaW5nKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIGNvbmZpcm0gc3R5bGUgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gdGl0bGUgc3RyaW5nXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgY29uZmlybShib2R5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBTbm90aWZ5VG9hc3Q7XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggY29uZmlybSBzdHlsZSByZXR1cm5zIHRvYXN0IGlkO1xyXG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xyXG4gICAqIEBwYXJhbSBjb25maWcgU25vdGlmeVRvYXN0Q29uZmlnXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgY29uZmlybShib2R5OiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIGNvbmZpcm0gc3R5bGUgIHJldHVybnMgdG9hc3QgaWQ7XHJcbiAgICogQHBhcmFtIFtib2R5XSBzdHJpbmdcclxuICAgKiBAcGFyYW0gW3RpdGxlXSBzdHJpbmdcclxuICAgKiBAcGFyYW0gW2NvbmZpZ10gU25vdGlmeVRvYXN0Q29uZmlnXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgY29uZmlybShib2R5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybSB0b2FzdCBhcmd1bWVudHMgaW50byBTbm90aWZ5IG9iamVjdFxyXG4gICAqL1xyXG4gIEBUcmFuc2Zvcm1Bcmd1bWVudFxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgY3VycmVudCB0b2FzdCB0eXBlIGFuZCBjb2xsZWN0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBAU2V0VG9hc3RUeXBlXHJcbiAgY29uZmlybShhcmdzOiBhbnkpOiBTbm90aWZ5VG9hc3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRvYXN0IHdpdGggUHJvbXB0IHN0eWxlIHdpdGggdHdvIGJ1dHRvbnMsIHJldHVybnMgdG9hc3QgaWQ7XHJcbiAgICogQHBhcmFtIGJvZHkgc3RyaW5nXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgcHJvbXB0KGJvZHk6IHN0cmluZyk6IFNub3RpZnlUb2FzdDtcclxuICAvKipcclxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBQcm9tcHQgc3R5bGUgd2l0aCB0d28gYnV0dG9ucywgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gdGl0bGUgc3RyaW5nXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgcHJvbXB0KGJvZHk6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IFNub3RpZnlUb2FzdDtcclxuICAvKipcclxuICAgKiBDcmVhdGUgdG9hc3Qgd2l0aCBQcm9tcHQgc3R5bGUgd2l0aCB0d28gYnV0dG9ucywgcmV0dXJucyB0b2FzdCBpZDtcclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gY29uZmlnIFNub3RpZnlUb2FzdENvbmZpZ1xyXG4gICAqIEByZXR1cm5zIG51bWJlclxyXG4gICAqL1xyXG4gIHByb21wdChib2R5OiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0b2FzdCB3aXRoIFByb21wdCBzdHlsZSB3aXRoIHR3byBidXR0b25zLCByZXR1cm5zIHRvYXN0IGlkO1xyXG4gICAqIEBwYXJhbSBbYm9keV0gc3RyaW5nXHJcbiAgICogQHBhcmFtIFt0aXRsZV0gc3RyaW5nXHJcbiAgICogQHBhcmFtIFtjb25maWddIFNub3RpZnlUb2FzdENvbmZpZ1xyXG4gICAqIEByZXR1cm5zIG51bWJlclxyXG4gICAqL1xyXG4gIHByb21wdChib2R5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGNvbmZpZzogU25vdGlmeVRvYXN0Q29uZmlnKTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybSB0b2FzdCBhcmd1bWVudHMgaW50byBTbm90aWZ5IG9iamVjdFxyXG4gICAqL1xyXG4gIEBUcmFuc2Zvcm1Bcmd1bWVudFxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgY3VycmVudCB0b2FzdCB0eXBlIGFuZCBjb2xsZWN0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBAU2V0VG9hc3RUeXBlXHJcbiAgcHJvbXB0KGFyZ3M6IGFueSk6IFNub3RpZnlUb2FzdCB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGUoYXJncyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFzeW5jIHRvYXN0IHdpdGggSW5mbyBzdHlsZS4gUGFzcyBhY3Rpb24sIGFuZCByZXNvbHZlIG9yIHJlamVjdCBpdC5cclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gYWN0aW9uIFByb21pc2U8U25vdGlmeT4gfCBPYnNlcnZhYmxlPFNub3RpZnk+XHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgYXN5bmMoYm9keTogc3RyaW5nLCBhY3Rpb246IFByb21pc2U8U25vdGlmeT4gfCBPYnNlcnZhYmxlPFNub3RpZnk+KTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYXN5bmMgdG9hc3Qgd2l0aCBJbmZvIHN0eWxlLiBQYXNzIGFjdGlvbiwgYW5kIHJlc29sdmUgb3IgcmVqZWN0IGl0LlxyXG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xyXG4gICAqIEBwYXJhbSB0aXRsZSBzdHJpbmdcclxuICAgKiBAcGFyYW0gYWN0aW9uIFByb21pc2U8U25vdGlmeT4gfCBPYnNlcnZhYmxlPFNub3RpZnk+XHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgYXN5bmMoYm9keTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBhY3Rpb246IFByb21pc2U8U25vdGlmeT4gfCBPYnNlcnZhYmxlPFNub3RpZnk+KTogU25vdGlmeVRvYXN0O1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYXN5bmMgdG9hc3Qgd2l0aCBJbmZvIHN0eWxlLiBQYXNzIGFjdGlvbiwgYW5kIHJlc29sdmUgb3IgcmVqZWN0IGl0LlxyXG4gICAqIEBwYXJhbSBib2R5IHN0cmluZ1xyXG4gICAqIEBwYXJhbSBhY3Rpb24gUHJvbWlzZTxTbm90aWZ5PiB8IE9ic2VydmFibGU8U25vdGlmeT5cclxuICAgKiBAcGFyYW0gW2NvbmZpZ10gU25vdGlmeVRvYXN0Q29uZmlnXHJcbiAgICogQHJldHVybnMgbnVtYmVyXHJcbiAgICovXHJcbiAgYXN5bmMoYm9keTogc3RyaW5nLCBhY3Rpb246IFByb21pc2U8U25vdGlmeT4gfCBPYnNlcnZhYmxlPFNub3RpZnk+LCBjb25maWc6IFNub3RpZnlUb2FzdENvbmZpZyk6IFNub3RpZnlUb2FzdDtcclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFzeW5jIHRvYXN0IHdpdGggSW5mbyBzdHlsZS4gUGFzcyBhY3Rpb24sIGFuZCByZXNvbHZlIG9yIHJlamVjdCBpdC5cclxuICAgKiBAcGFyYW0gYm9keSBzdHJpbmdcclxuICAgKiBAcGFyYW0gdGl0bGUgc3RyaW5nXHJcbiAgICogQHBhcmFtIGFjdGlvbiBQcm9taXNlPFNub3RpZnk+IHwgT2JzZXJ2YWJsZTxTbm90aWZ5PlxyXG4gICAqIEBwYXJhbSBbY29uZmlnXSBTbm90aWZ5VG9hc3RDb25maWdcclxuICAgKiBAcmV0dXJucyBudW1iZXJcclxuICAgKi9cclxuICBhc3luYyhcclxuICAgIGJvZHk6IHN0cmluZyxcclxuICAgIHRpdGxlOiBzdHJpbmcsXHJcbiAgICBhY3Rpb246IFByb21pc2U8U25vdGlmeT4gfCBPYnNlcnZhYmxlPFNub3RpZnk+LFxyXG4gICAgY29uZmlnOiBTbm90aWZ5VG9hc3RDb25maWdcclxuICApOiBTbm90aWZ5VG9hc3Q7XHJcbiAgLyoqXHJcbiAgICogVHJhbnNmb3JtIHRvYXN0IGFyZ3VtZW50cyBpbnRvIFNub3RpZnkgb2JqZWN0XHJcbiAgICovXHJcbiAgQFRyYW5zZm9ybUFyZ3VtZW50XHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyBjdXJyZW50IHRvYXN0IHR5cGUgYW5kIGNvbGxlY3RzIGRlZmF1bHQgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIEBTZXRUb2FzdFR5cGVcclxuICBhc3luYyhhcmdzOiBhbnkpOiBTbm90aWZ5VG9hc3Qge1xyXG4gICAgbGV0IGFzeW5jOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBpZiAoYXJncy5hY3Rpb24gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgIGFzeW5jID0gZnJvbShhcmdzLmFjdGlvbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhc3luYyA9IGFyZ3MuYWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRvYXN0ID0gdGhpcy5jcmVhdGUoYXJncyk7XHJcblxyXG4gICAgdG9hc3Qub24oJ21vdW50ZWQnLCAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gYXN5bmMuc3Vic2NyaWJlKFxyXG4gICAgICAgIChuZXh0PzogU25vdGlmeSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tZXJnZVRvYXN0KHRvYXN0LCBuZXh0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcj86IFNub3RpZnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubWVyZ2VUb2FzdCh0b2FzdCwgZXJyb3IsIFNub3RpZnlTdHlsZS5lcnJvcik7XHJcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubWVyZ2VUb2FzdCh0b2FzdCwge30sIFNub3RpZnlTdHlsZS5zdWNjZXNzKTtcclxuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0b2FzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVyZ2VUb2FzdCh0b2FzdCwgbmV4dCwgdHlwZT86IFNub3RpZnlUeXBlKSB7XHJcbiAgICBpZiAobmV4dC5ib2R5KSB7XHJcbiAgICAgIHRvYXN0LmJvZHkgPSBuZXh0LmJvZHk7XHJcbiAgICB9XHJcbiAgICBpZiAobmV4dC50aXRsZSkge1xyXG4gICAgICB0b2FzdC50aXRsZSA9IG5leHQudGl0bGU7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSkge1xyXG4gICAgICB0b2FzdC5jb25maWcgPSBtZXJnZURlZXAodG9hc3QuY29uZmlnLCB0aGlzLmNvbmZpZy5nbG9iYWwsIHRoaXMuY29uZmlnLnRvYXN0W3R5cGVdLCB7IHR5cGUgfSwgbmV4dC5jb25maWcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdG9hc3QuY29uZmlnID0gbWVyZ2VEZWVwKHRvYXN0LmNvbmZpZywgbmV4dC5jb25maWcpO1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHQuaHRtbCkge1xyXG4gICAgICB0b2FzdC5jb25maWcuaHRtbCA9IG5leHQuaHRtbDtcclxuICAgIH1cclxuICAgIHRoaXMuZW1pdCgpO1xyXG4gICAgdGhpcy50b2FzdENoYW5nZWQubmV4dCh0b2FzdCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGVtcHR5IHRvYXN0IHdpdGggaHRtbCBzdHJpbmcgaW5zaWRlXHJcbiAgICogQHBhcmFtIGh0bWwgc3RyaW5nIHwgU2FmZUh0bWxcclxuICAgKiBAcGFyYW0gY29uZmlnIFNub3RpZnlUb2FzdENvbmZpZ1xyXG4gICAqIEByZXR1cm5zIG51bWJlclxyXG4gICAqL1xyXG4gIGh0bWwoaHRtbDogc3RyaW5nIHwgU2FmZUh0bWwsIGNvbmZpZz86IFNub3RpZnlUb2FzdENvbmZpZyk6IFNub3RpZnlUb2FzdCB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGUoe1xyXG4gICAgICB0aXRsZTogbnVsbCxcclxuICAgICAgYm9keTogbnVsbCxcclxuICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgLi4uY29uZmlnLFxyXG4gICAgICAgIC4uLnsgaHRtbCB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=