Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

ngx-printer

Package Overview
Dependencies
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ngx-printer - npm Package Compare versions

Comparing version 0.1.8 to 0.2.0

735

bundles/ngx-printer.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs'), require('@angular/core')) :
typeof define === 'function' && define.amd ? define('ngx-printer', ['exports', 'rxjs', '@angular/core'], factory) :
(factory((global['ngx-printer'] = {}),global.rxjs,global.ng.core));
}(this, (function (exports,rxjs,i0) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs')) :
typeof define === 'function' && define.amd ? define('ngx-printer', ['exports', '@angular/core', 'rxjs'], factory) :
(global = global || self, factory(global['ngx-printer'] = {}, global.ng.core, global.rxjs));
}(this, function (exports, core, rxjs) { 'use strict';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -23,3 +23,3 @@ /**

this._imgSrc = 'default';
this.completed = new i0.EventEmitter();
this.completed = new core.EventEmitter();
}

@@ -29,3 +29,4 @@ Object.defineProperty(NgxPrinterComponent.prototype, "renderClass", {

* @return {?}
*/ function () {
*/
function () {
return this._renderClass;

@@ -36,3 +37,4 @@ },

* @return {?}
*/ function (value) {
*/
function (value) {
this._renderClass = value;

@@ -47,3 +49,4 @@ this.setCustomClass();

* @return {?}
*/ function () {
*/
function () {
return this._imgSrc;

@@ -54,3 +57,4 @@ },

* @return {?}
*/ function (value) {
*/
function (value) {
this._imgSrc = value;

@@ -68,3 +72,3 @@ this.addImage(this._imgSrc);

*/
function () { };
function () { };
/**

@@ -83,8 +87,8 @@ * Attach custom class to element

*/
function () {
/** @type {?} */
var natElement = this.elementRef.nativeElement;
this.renderer.removeClass(natElement, 'default');
this.renderer.addClass(natElement, this._renderClass);
};
function () {
/** @type {?} */
var natElement = this.elementRef.nativeElement;
this.renderer.removeClass(natElement, 'default');
this.renderer.addClass(natElement, this._renderClass);
};
/**

@@ -106,20 +110,21 @@ * Add custom image

*/
function (source) {
var _this = this;
/** @type {?} */
var natElement = this.elementRef.nativeElement;
/** @type {?} */
var newImgElement = this.renderer.createElement('img');
this.renderer.setAttribute(newImgElement, 'src', source);
this.renderer.listen(newImgElement, 'load', ( /**
* @param {?} evt
* @return {?}
*/function (evt) {
console.log('loading completed', evt);
_this.completed.emit(true);
}));
this.renderer.appendChild(natElement, newImgElement);
};
function (source) {
var _this = this;
/** @type {?} */
var natElement = this.elementRef.nativeElement;
/** @type {?} */
var newImgElement = this.renderer.createElement('img');
this.renderer.setAttribute(newImgElement, 'src', source);
this.renderer.listen(newImgElement, 'load', (/**
* @param {?} evt
* @return {?}
*/
function (evt) {
console.log('loading completed', evt);
_this.completed.emit(true);
}));
this.renderer.appendChild(natElement, newImgElement);
};
NgxPrinterComponent.decorators = [
{ type: i0.Component, args: [{
{ type: core.Component, args: [{
selector: 'ngx-printer',

@@ -131,17 +136,40 @@ template: "\n <ng-content></ng-content>\n ",

/** @nocollapse */
NgxPrinterComponent.ctorParameters = function () {
return [
{ type: i0.ElementRef },
{ type: i0.Renderer2 }
];
};
NgxPrinterComponent.ctorParameters = function () { return [
{ type: core.ElementRef },
{ type: core.Renderer2 }
]; };
NgxPrinterComponent.propDecorators = {
completed: [{ type: i0.Output }]
completed: [{ type: core.Output }]
};
return NgxPrinterComponent;
}());
if (false) {
/**
* @type {?}
* @private
*/
NgxPrinterComponent.prototype._renderClass;
/**
* Display single image
* @type {?}
* @private
*/
NgxPrinterComponent.prototype._imgSrc;
/** @type {?} */
NgxPrinterComponent.prototype.completed;
/**
* @type {?}
* @private
*/
NgxPrinterComponent.prototype.elementRef;
/**
* @type {?}
* @private
*/
NgxPrinterComponent.prototype.renderer;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -151,5 +179,6 @@ /**

*/
var /**
var /**
* Config for service - used in forRoot
*/ PrintServiceConfig = /** @class */ (function () {
*/
PrintServiceConfig = /** @class */ (function () {
function PrintServiceConfig() {

@@ -167,6 +196,23 @@ /**

}());
if (false) {
/**
* Print in a new window or not
* @type {?}
*/
PrintServiceConfig.prototype.printOpenWindow;
/**
* Wait time before opening print dialog
* @type {?}
*/
PrintServiceConfig.prototype.timeToWaitRender;
/**
* Class name to be used when printing in current window
* @type {?}
*/
PrintServiceConfig.prototype.renderClass;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -181,2 +227,5 @@ /**

this.printWindowOpen = new rxjs.BehaviorSubject(false);
/**
* \@internal
*/
this._printItems = new rxjs.BehaviorSubject([]);

@@ -217,17 +266,19 @@ this.$printItems = this._printItems.asObservable();

*/
function (config) {
if (config) {
if (config.printOpenWindow) {
this.printOpenWindow = config.printOpenWindow;
}
if (config.timeToWaitRender) {
this.timeToWaitRender = config.timeToWaitRender;
}
if (config.renderClass) {
this.renderClass = config.renderClass;
}
function (config) {
if (config) {
if (config.printOpenWindow) {
this.printOpenWindow = config.printOpenWindow;
}
};
if (config.timeToWaitRender) {
this.timeToWaitRender = config.timeToWaitRender;
}
if (config.renderClass) {
this.renderClass = config.renderClass;
}
}
};
/***
* Print a div identified by its id
* @example
* this.printerService.printDiv('printDiv');
*/

@@ -237,2 +288,4 @@ /**

* Print a div identified by its id
* \@example
* this.printerService.printDiv('printDiv');
* @param {?} divID

@@ -244,17 +297,19 @@ * @return {?}

* Print a div identified by its id
* \@example
* this.printerService.printDiv('printDiv');
* @param {?} divID
* @return {?}
*/
function (divID) {
/** @type {?} */
var divToPrint = document.getElementById(divID);
if (divToPrint) {
this.print(divToPrint, this.printOpenWindow);
}
else {
console.log('div with id ${divID} not found..');
}
};
function (divID) {
/** @type {?} */
var divToPrint = document.getElementById(divID);
if (divToPrint) {
this.print(divToPrint, this.printOpenWindow);
}
else {
console.log('div with id ${divID} not found..');
}
};
/***
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -264,3 +319,3 @@ */

*
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -272,3 +327,3 @@ * @param {?} className

*
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -278,18 +333,22 @@ * @param {?} className

*/
function (className) {
/** @type {?} */
var elementToPrint = document.getElementsByClassName(className);
if (elementToPrint && elementToPrint.length > 0) {
this.print(( /** @type {?} */(elementToPrint[0])), this.printOpenWindow);
}
else {
console.log('element with id ${className} not found..');
}
};
function (className) {
/** @type {?} */
var elementToPrint = document.getElementsByClassName(className);
if (elementToPrint && elementToPrint.length > 0) {
this.print((/** @type {?} */ (elementToPrint[0])), this.printOpenWindow);
}
else {
console.log('element with id ${className} not found..');
}
};
/**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* @param contentToPrint
* @example
* this.printerService.printAngular(this.PrintTemplateTpl);
*/
/**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* \@example
* this.printerService.printAngular(this.PrintTemplateTpl);
* @param {?} contentToPrint

@@ -299,16 +358,22 @@ * @return {?}

NgxPrinterService.prototype.printAngular = /**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* \@example
* this.printerService.printAngular(this.PrintTemplateTpl);
* @param {?} contentToPrint
* @return {?}
*/
function (contentToPrint) {
/** @type {?} */
var nativeEl = this.createComponent(contentToPrint);
this.print(nativeEl.nativeElement, this.printOpenWindow);
};
function (contentToPrint) {
/** @type {?} */
var nativeEl = this.createComponent(contentToPrint);
this.print(nativeEl.nativeElement, this.printOpenWindow);
};
/**
* Print single img
* @example
* this.printerService.printImg('assets/bratwurst.jpg');
*/
/**
* Print single img
* \@example
* this.printerService.printImg('assets/bratwurst.jpg');
* @param {?} imgSrc

@@ -319,26 +384,33 @@ * @return {?}

* Print single img
* \@example
* this.printerService.printImg('assets/bratwurst.jpg');
* @param {?} imgSrc
* @return {?}
*/
function (imgSrc) {
var _this = this;
/** @type {?} */
var compRef = this.createComponent(null, imgSrc);
/** @type {?} */
var openNewWindow = this.printOpenWindow;
compRef.instance.completed.subscribe(( /**
* @param {?} val
* @return {?}
*/function (val) {
compRef.hostView.detectChanges();
console.log('completed:', val);
_this.print(compRef.location.nativeElement, openNewWindow);
}));
};
function (imgSrc) {
var _this = this;
/** @type {?} */
var compRef = this.createComponent(null, imgSrc);
/** @type {?} */
var openNewWindow = this.printOpenWindow;
compRef.instance.completed.subscribe((/**
* @param {?} val
* @return {?}
*/
function (val) {
compRef.hostView.detectChanges();
console.log('completed:', val);
_this.print(compRef.location.nativeElement, openNewWindow);
}));
};
/**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* @param nativeElement
* @example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
*/
/**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* \@example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
* @param {?} nativeElement

@@ -348,9 +420,11 @@ * @return {?}

NgxPrinterService.prototype.printHTMLElement = /**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* \@example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
* @param {?} nativeElement
* @return {?}
*/
function (nativeElement) {
this.print(nativeElement, this.printOpenWindow);
};
function (nativeElement) {
this.print(nativeElement, this.printOpenWindow);
};
/**

@@ -374,24 +448,24 @@ * Create and render component

*/
function (contentToRender, imgSrc) {
// this.viewContainerRef.clear();
function (contentToRender, imgSrc) {
// this.viewContainerRef.clear();
/** @type {?} */
var factory = this.resolver.resolveComponentFactory(NgxPrinterComponent);
/** @type {?} */
var componentRef;
if (contentToRender) {
/** @type {?} */
var factory = this.resolver.resolveComponentFactory(NgxPrinterComponent);
/** @type {?} */
var componentRef;
if (contentToRender) {
/** @type {?} */
var ngContent = this.resolveNgContent(contentToRender);
componentRef = factory.create(this.injector, ngContent); // this.viewContainerRef.createComponent(factory);
}
else {
componentRef = factory.create(this.injector);
}
componentRef.instance.renderClass = this.renderClass;
if (imgSrc) {
componentRef.instance.imgSrc = imgSrc;
return componentRef;
}
componentRef.hostView.detectChanges();
return componentRef.location; // location is native element
};
var ngContent = this.resolveNgContent(contentToRender);
componentRef = factory.create(this.injector, ngContent); // this.viewContainerRef.createComponent(factory);
}
else {
componentRef = factory.create(this.injector);
}
componentRef.instance.renderClass = this.renderClass;
if (imgSrc) {
componentRef.instance.imgSrc = imgSrc;
return componentRef;
}
componentRef.hostView.detectChanges();
return componentRef.location; // location is native element
};
/**

@@ -415,18 +489,18 @@ * Main print function

*/
function (printContent, printOpenWindow) {
if (printOpenWindow) {
/** @type {?} */
var printContentClone = printContent.cloneNode(true);
this.printInNewWindow(printContentClone);
}
else {
/** @type {?} */
var printContentClone = printContent.cloneNode(true);
/** @type {?} */
var nativeEl = this.createComponent(printContentClone).nativeElement;
this.openNgxPrinter = nativeEl;
document.body.appendChild(this.openNgxPrinter);
this.printCurrentWindow();
}
};
function (printContent, printOpenWindow) {
if (printOpenWindow) {
/** @type {?} */
var printContentClone = printContent.cloneNode(true);
this.printInNewWindow(printContentClone);
}
else {
/** @type {?} */
var printContentClone = printContent.cloneNode(true);
/** @type {?} */
var nativeEl = this.createComponent(printContentClone).nativeElement;
this.openNgxPrinter = nativeEl;
document.body.appendChild(this.openNgxPrinter);
this.printCurrentWindow();
}
};
/**

@@ -448,20 +522,21 @@ * Print using a new window / tab

*/
function (divToPrint) {
var _this = this;
/** @type {?} */
var printWindow = window.open('', 'PRINT');
/** @type {?} */
var title = document.title;
printWindow.document.write('<HTML><HEAD><TITLE>' + title + '</TITLE></HEAD><BODY></BODY></HTML>');
// printWindow.document.write(document.documentElement.innerHTML);
/** @type {?} */
var printWindowDoc = printWindow.document;
printWindowDoc.body.style.margin = '0 0';
printWindowDoc.body.appendChild(divToPrint);
printWindow.document.close();
// printWindowDoc.body.innerHTML = divToPrint.outerHTML;
setTimeout(( /**
* @return {?}
*/function () { return _this.printWindow(printWindow, printWindowDoc); }), this.timeToWaitRender);
};
function (divToPrint) {
var _this = this;
/** @type {?} */
var printWindow = window.open('', 'PRINT');
/** @type {?} */
var title = document.title;
printWindow.document.write('<HTML><HEAD><TITLE>' + title + '</TITLE></HEAD><BODY></BODY></HTML>');
// printWindow.document.write(document.documentElement.innerHTML);
/** @type {?} */
var printWindowDoc = printWindow.document;
printWindowDoc.body.style.margin = '0 0';
printWindowDoc.body.appendChild(divToPrint);
printWindow.document.close();
// printWindowDoc.body.innerHTML = divToPrint.outerHTML;
setTimeout((/**
* @return {?}
*/
function () { return _this.printWindow(printWindow, printWindowDoc); }), this.timeToWaitRender);
};
/**

@@ -484,16 +559,17 @@ * Print window in new tab

*/
function (printWindow, printWindowDoc) {
var _this = this;
this.printWindowOpen.next(true);
printWindowDoc.close(); // necessary for IE >= 10
printWindow.focus(); // necessary for IE >= 10*/
if (printWindow.document.execCommand('print') === false) {
printWindow.print();
}
console.log('close print window');
printWindow.close();
setTimeout(( /**
* @return {?}
*/function () { printWindow.close(); _this.printWindowOpen.next(false); }), 20);
};
function (printWindow, printWindowDoc) {
var _this = this;
this.printWindowOpen.next(true);
printWindowDoc.close(); // necessary for IE >= 10
printWindow.focus(); // necessary for IE >= 10*/
if (printWindow.document.execCommand('print') === false) {
printWindow.print();
}
console.log('close print window');
printWindow.close();
setTimeout((/**
* @return {?}
*/
function () { printWindow.close(); _this.printWindowOpen.next(false); }), 20);
};
/**

@@ -510,15 +586,16 @@ * Print the whole current window

*/
function () {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
var _this = this;
setTimeout(( /**
* @return {?}
*/function () {
_this.printWindowOpen.next(true);
if (document.execCommand('print') === false) {
window.print();
}
document.body.removeChild(_this.openNgxPrinter);
_this.printWindowOpen.next(false);
}), this.timeToWaitRender);
};
_this.printWindowOpen.next(true);
if (document.execCommand('print') === false) {
window.print();
}
document.body.removeChild(_this.openNgxPrinter);
_this.printWindowOpen.next(false);
}), this.timeToWaitRender);
};
/**

@@ -536,28 +613,30 @@ * @private

*/
function (content) {
if (typeof content === 'string') {
/** @type {?} */
var element = document.createTextNode(content);
return [[element]];
}
if (content instanceof i0.TemplateRef) {
/** @type {?} */
var viewRef = content.createEmbeddedView(null);
return [viewRef.rootNodes];
}
if (content instanceof HTMLElement) {
return [[content]];
}
/**
* Otherwise it's a component
* @type {?}
*/
var factory = this.resolver.resolveComponentFactory(content);
function (content) {
if (typeof content === 'string') {
/** @type {?} */
var componentRef = factory.create(this.injector);
componentRef.changeDetectorRef.detectChanges();
return [[componentRef.location.nativeElement]];
};
var element = document.createTextNode(content);
return [[element]];
}
if (content instanceof core.TemplateRef) {
/** @type {?} */
var viewRef = content.createEmbeddedView(null);
return [viewRef.rootNodes];
}
if (content instanceof HTMLElement) {
return [[content]];
}
/**
* Otherwise it's a component
* @type {?}
*/
var factory = this.resolver.resolveComponentFactory(content);
/** @type {?} */
var componentRef = factory.create(this.injector);
componentRef.changeDetectorRef.detectChanges();
return [[componentRef.location.nativeElement]];
};
/**
* Add a new item to print
* Used by directive
* @internal
* @param newPrintItem HTML id

@@ -567,2 +646,4 @@ */

* Add a new item to print
* Used by directive
* \@internal
* @param {?} newPrintItem HTML id

@@ -573,13 +654,17 @@ * @return {?}

* Add a new item to print
* Used by directive
* \@internal
* @param {?} newPrintItem HTML id
* @return {?}
*/
function (newPrintItem) {
/** @type {?} */
var tmpItems = this._printItems.getValue();
tmpItems.push(newPrintItem);
this._printItems.next(tmpItems);
};
function (newPrintItem) {
/** @type {?} */
var tmpItems = this._printItems.getValue();
tmpItems.push(newPrintItem);
this._printItems.next(tmpItems);
};
/**
* Delete a print item from service
* Used by directive
* @internal
* @param idOfItemToRemove

@@ -589,2 +674,4 @@ */

* Delete a print item from service
* Used by directive
* \@internal
* @param {?} idOfItemToRemove

@@ -595,15 +682,18 @@ * @return {?}

* Delete a print item from service
* Used by directive
* \@internal
* @param {?} idOfItemToRemove
* @return {?}
*/
function (idOfItemToRemove) {
/** @type {?} */
var tmpItems = this._printItems.getValue();
/** @type {?} */
var newIitems = tmpItems.filter(( /**
* @param {?} item
* @return {?}
*/function (item) { return item.id !== idOfItemToRemove; }));
this._printItems.next(newIitems);
};
function (idOfItemToRemove) {
/** @type {?} */
var tmpItems = this._printItems.getValue();
/** @type {?} */
var newIitems = tmpItems.filter((/**
* @param {?} item
* @return {?}
*/
function (item) { return item.id !== idOfItemToRemove; }));
this._printItems.next(newIitems);
};
/**

@@ -623,7 +713,7 @@ * Print a print Item

*/
function (printItemToPrint) {
this.printHTMLElement(printItemToPrint.nativeElement);
};
function (printItemToPrint) {
this.printHTMLElement(printItemToPrint.nativeElement);
};
NgxPrinterService.decorators = [
{ type: i0.Injectable, args: [{
{ type: core.Injectable, args: [{
providedIn: 'root'

@@ -633,16 +723,63 @@ },] }

/** @nocollapse */
NgxPrinterService.ctorParameters = function () {
return [
{ type: PrintServiceConfig, decorators: [{ type: i0.Optional }] },
{ type: i0.ComponentFactoryResolver },
{ type: i0.Injector }
];
};
/** @nocollapse */ NgxPrinterService.ngInjectableDef = i0.defineInjectable({ factory: function NgxPrinterService_Factory() { return new NgxPrinterService(i0.inject(PrintServiceConfig, 8), i0.inject(i0.ComponentFactoryResolver), i0.inject(i0.INJECTOR)); }, token: NgxPrinterService, providedIn: "root" });
NgxPrinterService.ctorParameters = function () { return [
{ type: PrintServiceConfig, decorators: [{ type: core.Optional }] },
{ type: core.ComponentFactoryResolver },
{ type: core.Injector }
]; };
/** @nocollapse */ NgxPrinterService.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgxPrinterService_Factory() { return new NgxPrinterService(core.ɵɵinject(PrintServiceConfig, 8), core.ɵɵinject(core.ComponentFactoryResolver), core.ɵɵinject(core.INJECTOR)); }, token: NgxPrinterService, providedIn: "root" });
return NgxPrinterService;
}());
if (false) {
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.printWindowOpen;
/**
* \@internal
* @type {?}
* @private
*/
NgxPrinterService.prototype._printItems;
/** @type {?} */
NgxPrinterService.prototype.$printItems;
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.openNgxPrinter;
/**
* Wait time to render before open print dialog in ms
* Default is 200
* @type {?}
*/
NgxPrinterService.prototype.timeToWaitRender;
/**
* Class used in component when printing to current window
* @type {?}
*/
NgxPrinterService.prototype.renderClass;
/**
* Open new window to print or not
* Default is true
* @type {?}
*/
NgxPrinterService.prototype.printOpenWindow;
/** @type {?} */
NgxPrinterService.prototype.$printWindowOpen;
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.resolver;
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.injector;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -652,5 +789,6 @@ /**

*/
var /**
var /**
* A class to stroe an item which can be printed
*/ PrintItem = /** @class */ (function () {
*/
PrintItem = /** @class */ (function () {
function PrintItem() {

@@ -660,6 +798,23 @@ }

}());
if (false) {
/**
* HTML id of anchor
* @type {?}
*/
PrintItem.prototype.id;
/**
* Optional name
* @type {?}
*/
PrintItem.prototype.printDisplayName;
/**
* HTML Element
* @type {?}
*/
PrintItem.prototype.nativeElement;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -682,11 +837,11 @@ /**

*/
function () {
if (this.el.nativeElement.id) {
/** @type {?} */
var tmpPrintItem = new PrintItem();
tmpPrintItem.id = this.el.nativeElement.id;
tmpPrintItem.nativeElement = this.el.nativeElement;
this.printerService.addPrintItem(tmpPrintItem);
}
};
function () {
if (this.el.nativeElement.id) {
/** @type {?} */
var tmpPrintItem = new PrintItem();
tmpPrintItem.id = this.el.nativeElement.id;
tmpPrintItem.nativeElement = this.el.nativeElement;
this.printerService.addPrintItem(tmpPrintItem);
}
};
/**

@@ -698,9 +853,9 @@ * @return {?}

*/
function () {
if (this.el.nativeElement.id) {
this.printerService.removePrintItem(this.el.nativeElement.id);
}
};
function () {
if (this.el.nativeElement.id) {
this.printerService.removePrintItem(this.el.nativeElement.id);
}
};
PrintItemDirective.decorators = [
{ type: i0.Directive, args: [{
{ type: core.Directive, args: [{
selector: '[ngxPrintItem]'

@@ -710,17 +865,32 @@ },] }

/** @nocollapse */
PrintItemDirective.ctorParameters = function () {
return [
{ type: i0.ElementRef },
{ type: NgxPrinterService }
];
};
PrintItemDirective.ctorParameters = function () { return [
{ type: core.ElementRef },
{ type: NgxPrinterService }
]; };
PrintItemDirective.propDecorators = {
printName: [{ type: i0.Input }]
printName: [{ type: core.Input }]
};
return PrintItemDirective;
}());
if (false) {
/**
* Optional name to be shown in an component
* @type {?}
*/
PrintItemDirective.prototype.printName;
/**
* @type {?}
* @private
*/
PrintItemDirective.prototype.el;
/**
* @type {?}
* @private
*/
PrintItemDirective.prototype.printerService;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -738,10 +908,10 @@ var NgxPrinterModule = /** @class */ (function () {

*/
function (config) {
return {
ngModule: NgxPrinterModule,
providers: [{ provide: PrintServiceConfig, useValue: config }]
};
function (config) {
return {
ngModule: NgxPrinterModule,
providers: [{ provide: PrintServiceConfig, useValue: config }]
};
};
NgxPrinterModule.decorators = [
{ type: i0.NgModule, args: [{
{ type: core.NgModule, args: [{
declarations: [NgxPrinterComponent, PrintItemDirective],

@@ -756,15 +926,5 @@ imports: [],

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
exports.NgxPrinterService = NgxPrinterService;
exports.NgxPrinterComponent = NgxPrinterComponent;
exports.NgxPrinterModule = NgxPrinterModule;
exports.NgxPrinterService = NgxPrinterService;
exports.PrintItem = PrintItem;

@@ -776,4 +936,3 @@ exports.PrintItemDirective = PrintItemDirective;

})));
//# sourceMappingURL=ngx-printer.umd.js.map
}));
//# sourceMappingURL=ngx-printer.umd.js.map

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("rxjs"),require("@angular/core")):"function"==typeof define&&define.amd?define("ngx-printer",["exports","rxjs","@angular/core"],t):t(e["ngx-printer"]={},e.rxjs,e.ng.core)}(this,function(e,i,n){"use strict";var o=(Object.defineProperty(t.prototype,"renderClass",{get:function(){return this._renderClass},set:function(e){this._renderClass=e,this.setCustomClass()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"imgSrc",{get:function(){return this._imgSrc},set:function(e){this._imgSrc=e,this.addImage(this._imgSrc)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){},t.prototype.setCustomClass=function(){var e=this.elementRef.nativeElement;this.renderer.removeClass(e,"default"),this.renderer.addClass(e,this._renderClass)},t.prototype.addImage=function(e){var t=this,n=this.elementRef.nativeElement,i=this.renderer.createElement("img");this.renderer.setAttribute(i,"src",e),this.renderer.listen(i,"load",function(e){console.log("loading completed",e),t.completed.emit(!0)}),this.renderer.appendChild(n,i)},t.decorators=[{type:n.Component,args:[{selector:"ngx-printer",template:"\n <ng-content></ng-content>\n ",styles:[":host.default{background-color:#fff;height:100%;width:100%;position:fixed;top:0;left:0;margin:0;z-index:1000000}"]}]}],t.ctorParameters=function(){return[{type:n.ElementRef},{type:n.Renderer2}]},t.propDecorators={completed:[{type:n.Output}]},t);function t(e,t){this.elementRef=e,this.renderer=t,this._renderClass="default",this._imgSrc="default",this.completed=new n.EventEmitter}function r(){this.printOpenWindow=!0,this.timeToWaitRender=200}var s=(p.prototype.setRootConfigOptions=function(e){e&&(e.printOpenWindow&&(this.printOpenWindow=e.printOpenWindow),e.timeToWaitRender&&(this.timeToWaitRender=e.timeToWaitRender),e.renderClass&&(this.renderClass=e.renderClass))},p.prototype.printDiv=function(e){var t=document.getElementById(e);t?this.print(t,this.printOpenWindow):console.log("div with id ${divID} not found..")},p.prototype.printByClassName=function(e){var t=document.getElementsByClassName(e);t&&0<t.length?this.print(t[0],this.printOpenWindow):console.log("element with id ${className} not found..")},p.prototype.printAngular=function(e){var t=this.createComponent(e);this.print(t.nativeElement,this.printOpenWindow)},p.prototype.printImg=function(e){var t=this,n=this.createComponent(null,e),i=this.printOpenWindow;n.instance.completed.subscribe(function(e){n.hostView.detectChanges(),console.log("completed:",e),t.print(n.location.nativeElement,i)})},p.prototype.printHTMLElement=function(e){this.print(e,this.printOpenWindow)},p.prototype.createComponent=function(e,t){var n,i=this.resolver.resolveComponentFactory(o);if(e){var r=this.resolveNgContent(e);n=i.create(this.injector,r)}else n=i.create(this.injector);return n.instance.renderClass=this.renderClass,t?(n.instance.imgSrc=t,n):(n.hostView.detectChanges(),n.location)},p.prototype.print=function(e,t){if(t){var n=e.cloneNode(!0);this.printInNewWindow(n)}else{n=e.cloneNode(!0);var i=this.createComponent(n).nativeElement;this.openNgxPrinter=i,document.body.appendChild(this.openNgxPrinter),this.printCurrentWindow()}},p.prototype.printInNewWindow=function(e){var t=this,n=window.open("","PRINT"),i=document.title;n.document.write("<HTML><HEAD><TITLE>"+i+"</TITLE></HEAD><BODY></BODY></HTML>");var r=n.document;r.body.style.margin="0 0",r.body.appendChild(e),n.document.close(),setTimeout(function(){return t.printWindow(n,r)},this.timeToWaitRender)},p.prototype.printWindow=function(e,t){var n=this;this.printWindowOpen.next(!0),t.close(),e.focus(),!1===e.document.execCommand("print")&&e.print(),console.log("close print window"),e.close(),setTimeout(function(){e.close(),n.printWindowOpen.next(!1)},20)},p.prototype.printCurrentWindow=function(){var e=this;setTimeout(function(){e.printWindowOpen.next(!0),!1===document.execCommand("print")&&window.print(),document.body.removeChild(e.openNgxPrinter),e.printWindowOpen.next(!1)},this.timeToWaitRender)},p.prototype.resolveNgContent=function(e){if("string"==typeof e)return[[document.createTextNode(e)]];if(e instanceof n.TemplateRef)return[e.createEmbeddedView(null).rootNodes];if(e instanceof HTMLElement)return[[e]];var t=this.resolver.resolveComponentFactory(e).create(this.injector);return t.changeDetectorRef.detectChanges(),[[t.location.nativeElement]]},p.prototype.addPrintItem=function(e){var t=this._printItems.getValue();t.push(e),this._printItems.next(t)},p.prototype.removePrintItem=function(t){var e=this._printItems.getValue().filter(function(e){return e.id!==t});this._printItems.next(e)},p.prototype.printPrintItem=function(e){this.printHTMLElement(e.nativeElement)},p.decorators=[{type:n.Injectable,args:[{providedIn:"root"}]}],p.ctorParameters=function(){return[{type:r,decorators:[{type:n.Optional}]},{type:n.ComponentFactoryResolver},{type:n.Injector}]},p.ngInjectableDef=n.defineInjectable({factory:function(){return new p(n.inject(r,8),n.inject(n.ComponentFactoryResolver),n.inject(n.INJECTOR))},token:p,providedIn:"root"}),p);function p(e,t,n){this.resolver=t,this.injector=n,this.printWindowOpen=new i.BehaviorSubject(!1),this._printItems=new i.BehaviorSubject([]),this.$printItems=this._printItems.asObservable(),this.timeToWaitRender=200,this.renderClass="default",this.printOpenWindow=!0,this.$printWindowOpen=this.printWindowOpen.asObservable(),this.setRootConfigOptions(e)}var c=function u(){},a=(d.prototype.ngOnInit=function(){if(this.el.nativeElement.id){var e=new c;e.id=this.el.nativeElement.id,e.nativeElement=this.el.nativeElement,this.printerService.addPrintItem(e)}},d.prototype.ngOnDestroy=function(){this.el.nativeElement.id&&this.printerService.removePrintItem(this.el.nativeElement.id)},d.decorators=[{type:n.Directive,args:[{selector:"[ngxPrintItem]"}]}],d.ctorParameters=function(){return[{type:n.ElementRef},{type:s}]},d.propDecorators={printName:[{type:n.Input}]},d);function d(e,t){this.el=e,this.printerService=t}var l=(m.forRoot=function(e){return{ngModule:m,providers:[{provide:r,useValue:e}]}},m.decorators=[{type:n.NgModule,args:[{declarations:[o,a],imports:[],exports:[o,a],entryComponents:[o]}]}],m);function m(){}e.NgxPrinterService=s,e.NgxPrinterComponent=o,e.NgxPrinterModule=l,e.PrintItem=c,e.PrintItemDirective=a,e.PrintServiceConfig=r,Object.defineProperty(e,"__esModule",{value:!0})});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs")):"function"==typeof define&&define.amd?define("ngx-printer",["exports","@angular/core","rxjs"],t):t((e=e||self)["ngx-printer"]={},e.ng.core,e.rxjs)}(this,function(e,t,n){"use strict";var i=function(){function e(e,n){this.elementRef=e,this.renderer=n,this._renderClass="default",this._imgSrc="default",this.completed=new t.EventEmitter}return Object.defineProperty(e.prototype,"renderClass",{get:function(){return this._renderClass},set:function(e){this._renderClass=e,this.setCustomClass()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"imgSrc",{get:function(){return this._imgSrc},set:function(e){this._imgSrc=e,this.addImage(this._imgSrc)},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){},e.prototype.setCustomClass=function(){var e=this.elementRef.nativeElement;this.renderer.removeClass(e,"default"),this.renderer.addClass(e,this._renderClass)},e.prototype.addImage=function(e){var t=this,n=this.elementRef.nativeElement,i=this.renderer.createElement("img");this.renderer.setAttribute(i,"src",e),this.renderer.listen(i,"load",function(e){console.log("loading completed",e),t.completed.emit(!0)}),this.renderer.appendChild(n,i)},e.decorators=[{type:t.Component,args:[{selector:"ngx-printer",template:"\n <ng-content></ng-content>\n ",styles:[":host.default{background-color:#fff;height:100%;width:100%;position:fixed;top:0;left:0;margin:0;z-index:1000000}"]}]}],e.ctorParameters=function(){return[{type:t.ElementRef},{type:t.Renderer2}]},e.propDecorators={completed:[{type:t.Output}]},e}();var r=function(){this.printOpenWindow=!0,this.timeToWaitRender=200};var o=function(){function e(e,t,i){this.resolver=t,this.injector=i,this.printWindowOpen=new n.BehaviorSubject(!1),this._printItems=new n.BehaviorSubject([]),this.$printItems=this._printItems.asObservable(),this.timeToWaitRender=200,this.renderClass="default",this.printOpenWindow=!0,this.$printWindowOpen=this.printWindowOpen.asObservable(),this.setRootConfigOptions(e)}return e.prototype.setRootConfigOptions=function(e){e&&(e.printOpenWindow&&(this.printOpenWindow=e.printOpenWindow),e.timeToWaitRender&&(this.timeToWaitRender=e.timeToWaitRender),e.renderClass&&(this.renderClass=e.renderClass))},e.prototype.printDiv=function(e){var t=document.getElementById(e);t?this.print(t,this.printOpenWindow):console.log("div with id ${divID} not found..")},e.prototype.printByClassName=function(e){var t=document.getElementsByClassName(e);t&&t.length>0?this.print(t[0],this.printOpenWindow):console.log("element with id ${className} not found..")},e.prototype.printAngular=function(e){var t=this.createComponent(e);this.print(t.nativeElement,this.printOpenWindow)},e.prototype.printImg=function(e){var t=this,n=this.createComponent(null,e),i=this.printOpenWindow;n.instance.completed.subscribe(function(e){n.hostView.detectChanges(),console.log("completed:",e),t.print(n.location.nativeElement,i)})},e.prototype.printHTMLElement=function(e){this.print(e,this.printOpenWindow)},e.prototype.createComponent=function(e,t){var n,r=this.resolver.resolveComponentFactory(i);if(e){var o=this.resolveNgContent(e);n=r.create(this.injector,o)}else n=r.create(this.injector);return n.instance.renderClass=this.renderClass,t?(n.instance.imgSrc=t,n):(n.hostView.detectChanges(),n.location)},e.prototype.print=function(e,t){if(t){var n=e.cloneNode(!0);this.printInNewWindow(n)}else{n=e.cloneNode(!0);var i=this.createComponent(n).nativeElement;this.openNgxPrinter=i,document.body.appendChild(this.openNgxPrinter),this.printCurrentWindow()}},e.prototype.printInNewWindow=function(e){var t=this,n=window.open("","PRINT"),i=document.title;n.document.write("<HTML><HEAD><TITLE>"+i+"</TITLE></HEAD><BODY></BODY></HTML>");var r=n.document;r.body.style.margin="0 0",r.body.appendChild(e),n.document.close(),setTimeout(function(){return t.printWindow(n,r)},this.timeToWaitRender)},e.prototype.printWindow=function(e,t){var n=this;this.printWindowOpen.next(!0),t.close(),e.focus(),!1===e.document.execCommand("print")&&e.print(),console.log("close print window"),e.close(),setTimeout(function(){e.close(),n.printWindowOpen.next(!1)},20)},e.prototype.printCurrentWindow=function(){var e=this;setTimeout(function(){e.printWindowOpen.next(!0),!1===document.execCommand("print")&&window.print(),document.body.removeChild(e.openNgxPrinter),e.printWindowOpen.next(!1)},this.timeToWaitRender)},e.prototype.resolveNgContent=function(e){if("string"==typeof e)return[[document.createTextNode(e)]];if(e instanceof t.TemplateRef)return[e.createEmbeddedView(null).rootNodes];if(e instanceof HTMLElement)return[[e]];var n=this.resolver.resolveComponentFactory(e).create(this.injector);return n.changeDetectorRef.detectChanges(),[[n.location.nativeElement]]},e.prototype.addPrintItem=function(e){var t=this._printItems.getValue();t.push(e),this._printItems.next(t)},e.prototype.removePrintItem=function(e){var t=this._printItems.getValue().filter(function(t){return t.id!==e});this._printItems.next(t)},e.prototype.printPrintItem=function(e){this.printHTMLElement(e.nativeElement)},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:r,decorators:[{type:t.Optional}]},{type:t.ComponentFactoryResolver},{type:t.Injector}]},e.ngInjectableDef=t.ɵɵdefineInjectable({factory:function(){return new e(t.ɵɵinject(r,8),t.ɵɵinject(t.ComponentFactoryResolver),t.ɵɵinject(t.INJECTOR))},token:e,providedIn:"root"}),e}();var s=function(){};var p=function(){function e(e,t){this.el=e,this.printerService=t}return e.prototype.ngOnInit=function(){if(this.el.nativeElement.id){var e=new s;e.id=this.el.nativeElement.id,e.nativeElement=this.el.nativeElement,this.printerService.addPrintItem(e)}},e.prototype.ngOnDestroy=function(){this.el.nativeElement.id&&this.printerService.removePrintItem(this.el.nativeElement.id)},e.decorators=[{type:t.Directive,args:[{selector:"[ngxPrintItem]"}]}],e.ctorParameters=function(){return[{type:t.ElementRef},{type:o}]},e.propDecorators={printName:[{type:t.Input}]},e}();var c=function(){function e(){}return e.forRoot=function(t){return{ngModule:e,providers:[{provide:r,useValue:t}]}},e.decorators=[{type:t.NgModule,args:[{declarations:[i,p],imports:[],exports:[i,p],entryComponents:[i]}]}],e}();e.NgxPrinterComponent=i,e.NgxPrinterModule=c,e.NgxPrinterService=o,e.PrintItem=s,e.PrintItemDirective=p,e.PrintServiceConfig=r,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=ngx-printer.umd.min.js.map
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ import { Component, Renderer2, ElementRef, Output, EventEmitter } from '@angular/core';

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ import { NgModule } from '@angular/core';

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -24,2 +24,5 @@ import { Injectable, TemplateRef, ComponentFactoryResolver, Injector, Optional } from '@angular/core';

this.printWindowOpen = new BehaviorSubject(false);
/**
* \@internal
*/
this._printItems = new BehaviorSubject([]);

@@ -66,2 +69,4 @@ this.$printItems = this._printItems.asObservable();

* Print a div identified by its id
* \@example
* this.printerService.printDiv('printDiv');
* @param {?} divID

@@ -82,3 +87,3 @@ * @return {?}

*
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -99,3 +104,5 @@ * @param {?} className

/**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* \@example
* this.printerService.printAngular(this.PrintTemplateTpl);
* @param {?} contentToPrint

@@ -111,2 +118,4 @@ * @return {?}

* Print single img
* \@example
* this.printerService.printImg('assets/bratwurst.jpg');
* @param {?} imgSrc

@@ -131,3 +140,5 @@ * @return {?}

/**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* \@example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
* @param {?} nativeElement

@@ -285,2 +296,4 @@ * @return {?}

* Add a new item to print
* Used by directive
* \@internal
* @param {?} newPrintItem HTML id

@@ -297,2 +310,4 @@ * @return {?}

* Delete a print item from service
* Used by directive
* \@internal
* @param {?} idOfItemToRemove

@@ -332,3 +347,3 @@ * @return {?}

];
/** @nocollapse */ NgxPrinterService.ngInjectableDef = i0.defineInjectable({ factory: function NgxPrinterService_Factory() { return new NgxPrinterService(i0.inject(i1.PrintServiceConfig, 8), i0.inject(i0.ComponentFactoryResolver), i0.inject(i0.INJECTOR)); }, token: NgxPrinterService, providedIn: "root" });
/** @nocollapse */ NgxPrinterService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgxPrinterService_Factory() { return new NgxPrinterService(i0.ɵɵinject(i1.PrintServiceConfig, 8), i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.INJECTOR)); }, token: NgxPrinterService, providedIn: "root" });
if (false) {

@@ -341,2 +356,3 @@ /**

/**
* \@internal
* @type {?}

@@ -383,2 +399,2 @@ * @private

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXByaW50ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1wcmludGVyLyIsInNvdXJjZXMiOlsibGliL25neC1wcmludGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsV0FBVyxFQUNYLHdCQUF3QixFQUN4QixRQUFRLEVBQ1IsUUFBUSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQVU1RCxNQUFNLE9BQU8saUJBQWlCOzs7Ozs7SUEyQjVCLFlBQ2MsTUFBMEIsRUFDOUIsUUFBa0MsRUFDbEMsUUFBa0I7UUFEbEIsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTdCcEIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUV0RCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzNELGdCQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7Ozs7UUFROUMscUJBQWdCLEdBQUcsR0FBRyxDQUFDOzs7O1FBS3ZCLGdCQUFXLEdBQUcsU0FBUyxDQUFDOzs7OztRQU14QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUV2QixxQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBT3JELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDOzs7Ozs7O0lBTU8sb0JBQW9CLENBQUMsTUFBMEI7UUFDckQsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLE1BQU0s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LENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7Ozs7O0lBTU0sZUFBZSxDQUFDLGdCQUF3Qjs7Y0FDdkMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFOztjQUN0QyxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU07Ozs7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssZ0JBQWdCLEVBQUM7UUFDdkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7Ozs7O0lBTU0sY0FBYyxDQUFDLGdCQUEyQjtRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7O1lBOVBGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQVRRLGtCQUFrQix1QkFzQ3RCLFFBQVE7WUE5Q1gsd0JBQXdCO1lBQ3hCLFFBQVE7Ozs7Ozs7O0lBa0JSLDRDQUE4RDs7Ozs7SUFFOUQsd0NBQTJEOztJQUMzRCx3Q0FBOEM7Ozs7O0lBRTlDLDJDQUFvQzs7Ozs7O0lBTXBDLDZDQUF1Qjs7Ozs7SUFLdkIsd0NBQXdCOzs7Ozs7SUFNeEIsNENBQXVCOztJQUV2Qiw2Q0FBdUQ7Ozs7O0lBSXJELHFDQUEwQzs7Ozs7SUFDMUMscUNBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJpbnRJdGVtIH0gZnJvbSAnLi9wcmludC1pdGVtJztcclxuaW1wb3J0IHtcclxuICBJbmplY3RhYmxlLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBJbmplY3RvcixcclxuICBPcHRpb25hbCxcclxuICBUeXBlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvc3JjL3JlbmRlcjMnO1xyXG5pbXBvcnQgeyBOZ3hQcmludGVyQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3gtcHJpbnRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUHJpbnRTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi9wcmludC1zZXJ2aWNlLWNvbmZpZyc7XHJcblxyXG5leHBvcnQgdHlwZSBDb250ZW50PFQ+ID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQgIHwgVGVtcGxhdGVSZWY8VD4gfCBUeXBlPFQ+O1xyXG5cclxuLyoqXHJcbiAqIE1haW4gcHJpbnQgc2VydmljZVxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4UHJpbnRlclNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcHJpbnRXaW5kb3dPcGVuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgX3ByaW50SXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByaW50SXRlbVtdPihbXSk7XHJcbiAgJHByaW50SXRlbXMgPSB0aGlzLl9wcmludEl0ZW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIG9wZW5OZ3hQcmludGVyOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgLyoqXHJcbiAgICogV2FpdCB0aW1lIHRvIHJlbmRlciBiZWZvcmUgb3BlbiBwcmludCBkaWFsb2cgaW4gbXNcclxuICAgKiBEZWZhdWx0IGlzIDIwMFxyXG4gICAqL1xyXG4gIHRpbWVUb1dhaXRSZW5kZXIgPSAyMDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIENsYXNzIHVzZWQgaW4gY29tcG9uZW50IHdoZW4gcHJpbnRpbmcgdG8gY3VycmVudCB3aW5kb3dcclxuICAgKi9cclxuICByZW5kZXJDbGFzcyA9ICdkZWZhdWx0JztcclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBuZXcgd2luZG93IHRvIHByaW50IG9yIG5vdFxyXG4gICAqIERlZmF1bHQgaXMgdHJ1ZVxyXG4gICAqL1xyXG4gIHByaW50T3BlbldpbmRvdyA9IHRydWU7XHJcblxyXG4gICRwcmludFdpbmRvd09wZW4gPSB0aGlzLnByaW50V2luZG93T3Blbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBjb25maWc6IFByaW50U2VydmljZUNvbmZpZyxcclxuICAgIHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNldFJvb3RDb25maWdPcHRpb25zKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgY29uZmlnIGZyb20gZm9yUm9vdFxyXG4gICAqIEBwYXJhbSBjb25maWcgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRSb290Q29uZmlnT3B0aW9ucyhjb25maWc6IFByaW50U2VydmljZUNvbmZpZykge1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBpZiAoY29uZmlnLnByaW50T3BlbldpbmRvdykge1xyXG4gICAgICAgIHRoaXMucHJpbnRPcGVuV2luZG93ID0gY29uZmlnLnByaW50T3BlbldpbmRvdztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnRpbWVUb1dhaXRSZW5kZXIpIHtcclxuICAgICAgICB0aGlzLnRpbWVUb1dhaXRSZW5kZXIgPSBjb25maWcudGltZVRvV2FpdFJlbmRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnJlbmRlckNsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJDbGFzcyA9IGNvbmZpZy5yZW5kZXJDbGFzcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqKlxyXG4gICAqIFByaW50IGEgZGl2IGlkZW50aWZpZWQgYnkgaXRzIGlkXHJcbiAgICovXHJcbiAgcHVibGljIHByaW50RGl2KGRpdklEOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRpdlRvUHJpbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJRCk7XHJcblxyXG4gICAgaWYgKGRpdlRvUHJpbnQpIHtcclxuICAgICAgdGhpcy5wcmludChkaXZUb1ByaW50LCB0aGlzLnByaW50T3BlbldpbmRvdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnZGl2IHdpdGggaWQgJHtkaXZJRH0gbm90IGZvdW5kLi4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKipcclxuICAgKiBQcmludCBhbiBFbGVtZW50IGlkZW50aWZpZWQgYnkgaXRzIGNsYXNzTmFtZVxyXG4gICAqIFByaW50cyB0aGUgZmlyc3QgZm91bmRcclxuICAgKi9cclxuICBwdWJsaWMgcHJpbnRCeUNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZWxlbWVudFRvUHJpbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XHJcblxyXG4gICAgaWYgKGVsZW1lbnRUb1ByaW50ICYmIGVsZW1lbnRUb1ByaW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcmludCg8SFRNTFNjcmlwdEVsZW1lbnQ+ZWxlbWVudFRvUHJpbnRbMF0sIHRoaXMucHJpbnRPcGVuV2luZG93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdlbGVtZW50IHdpdGggaWQgJHtjbGFzc05hbWV9IG5vdCBmb3VuZC4uJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCBBbmd1bGFyIFRlbXBsYXRlUmVmIG9yIENvbXBvbmVudCBvciBTdHJpbmdcclxuICAgKiBAcGFyYW0gY29udGVudFRvUHJpbnRcclxuICAgKi9cclxuICBwdWJsaWMgcHJpbnRBbmd1bGFyKGNvbnRlbnRUb1ByaW50OiBhbnkpIHtcclxuICAgIGNvbnN0IG5hdGl2ZUVsID0gdGhpcy5jcmVhdGVDb21wb25lbnQoY29udGVudFRvUHJpbnQpO1xyXG5cclxuICAgIHRoaXMucHJpbnQobmF0aXZlRWwubmF0aXZlRWxlbWVudCwgdGhpcy5wcmludE9wZW5XaW5kb3cpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJpbnQgc2luZ2xlIGltZ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBwcmludEltZyhpbWdTcmM6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuY3JlYXRlQ29tcG9uZW50KG51bGwsIGltZ1NyYyk7XHJcbiAgICBjb25zdCBvcGVuTmV3V2luZG93ID0gdGhpcy5wcmludE9wZW5XaW5kb3c7XHJcblxyXG4gICAgY29tcFJlZi5pbnN0YW5jZS5jb21wbGV0ZWQuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgY29tcFJlZi5ob3N0Vmlldy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjb21wbGV0ZWQ6JywgdmFsKTtcclxuICAgICAgdGhpcy5wcmludChjb21wUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsIG9wZW5OZXdXaW5kb3cpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCBuYXRpdmUgRWxlbWVudCAoSFRNTCBFbGVtZW50KVxyXG4gICAqIEBwYXJhbSBuYXRpdmVFbGVtZW50XHJcbiAgICovXHJcbiAgcHVibGljIHByaW50SFRNTEVsZW1lbnQobmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuICAgIHRoaXMucHJpbnQobmF0aXZlRWxlbWVudCwgdGhpcy5wcmludE9wZW5XaW5kb3cpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuZCByZW5kZXIgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIGNvbnRlbnRUb1JlbmRlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQ29tcG9uZW50KGNvbnRlbnRUb1JlbmRlcjogYW55LCBpbWdTcmM/OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgLy8gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShOZ3hQcmludGVyQ29tcG9uZW50KTtcclxuICAgIGxldCBjb21wb25lbnRSZWY6IGFueTtcclxuXHJcbiAgICBpZiAoY29udGVudFRvUmVuZGVyKSB7XHJcbiAgICAgIGNvbnN0IG5nQ29udGVudCA9IHRoaXMucmVzb2x2ZU5nQ29udGVudChjb250ZW50VG9SZW5kZXIpO1xyXG4gICAgICBjb21wb25lbnRSZWYgPSBmYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yLCBuZ0NvbnRlbnQpOyAvLyB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29tcG9uZW50UmVmID0gZmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucmVuZGVyQ2xhc3MgPSB0aGlzLnJlbmRlckNsYXNzO1xyXG4gICAgaWYgKGltZ1NyYykge1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuaW1nU3JjID0gaW1nU3JjO1xyXG4gICAgICByZXR1cm4gY29tcG9uZW50UmVmO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFJlZi5ob3N0Vmlldy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICByZXR1cm4gY29tcG9uZW50UmVmLmxvY2F0aW9uOyAvLyBsb2NhdGlvbiBpcyBuYXRpdmUgZWxlbWVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFpbiBwcmludCBmdW5jdGlvblxyXG4gICAqIEBwYXJhbSBwcmludENvbnRlbnQgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcmludChwcmludENvbnRlbnQ6IGFueSwgcHJpbnRPcGVuV2luZG93OiBib29sZWFuKSB7XHJcbiAgICBpZiAocHJpbnRPcGVuV2luZG93KSB7XHJcbiAgICAgIGNvbnN0IHByaW50Q29udGVudENsb25lID0gcHJpbnRDb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgdGhpcy5wcmludEluTmV3V2luZG93KHByaW50Q29udGVudENsb25lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHByaW50Q29udGVudENsb25lID0gcHJpbnRDb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgY29uc3QgbmF0aXZlRWwgPSB0aGlzLmNyZWF0ZUNvbXBvbmVudChwcmludENvbnRlbnRDbG9uZSkubmF0aXZlRWxlbWVudDtcclxuICAgICAgdGhpcy5vcGVuTmd4UHJpbnRlciA9IG5hdGl2ZUVsO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMub3Blbk5neFByaW50ZXIpO1xyXG4gICAgICB0aGlzLnByaW50Q3VycmVudFdpbmRvdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJpbnQgdXNpbmcgYSBuZXcgd2luZG93IC8gdGFiXHJcbiAgICogQHBhcmFtIGRpdlRvUHJpbnRcclxuICAgKi9cclxuICBwcml2YXRlIHByaW50SW5OZXdXaW5kb3coZGl2VG9QcmludDogSFRNTEVsZW1lbnQpIHtcclxuICAgIGNvbnN0IHByaW50V2luZG93ID0gd2luZG93Lm9wZW4oJycsICdQUklOVCcpO1xyXG4gICAgbGV0IHRpdGxlID0gZG9jdW1lbnQudGl0bGU7XHJcblxyXG4gICAgcHJpbnRXaW5kb3cuZG9jdW1lbnQud3JpdGUoJzxIVE1MPjxIRUFEPjxUSVRMRT4nICsgdGl0bGUgKyAnPC9USVRMRT48L0hFQUQ+PEJPRFk+PC9CT0RZPjwvSFRNTD4nKTtcclxuICAgIC8vIHByaW50V2luZG93LmRvY3VtZW50LndyaXRlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUwpO1xyXG5cclxuICAgIGNvbnN0IHByaW50V2luZG93RG9jID0gcHJpbnRXaW5kb3cuZG9jdW1lbnQ7XHJcbiAgICBwcmludFdpbmRvd0RvYy5ib2R5LnN0eWxlLm1hcmdpbiA9ICcwIDAnO1xyXG4gICAgcHJpbnRXaW5kb3dEb2MuYm9keS5hcHBlbmRDaGlsZChkaXZUb1ByaW50KTtcclxuICAgIHByaW50V2luZG93LmRvY3VtZW50LmNsb3NlKCk7XHJcbiAgICAvLyBwcmludFdpbmRvd0RvYy5ib2R5LmlubmVySFRNTCA9IGRpdlRvUHJpbnQub3V0ZXJIVE1MO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnByaW50V2luZG93KHByaW50V2luZG93LCBwcmludFdpbmRvd0RvYyksIHRoaXMudGltZVRvV2FpdFJlbmRlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCB3aW5kb3cgaW4gbmV3IHRhYlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJpbnRXaW5kb3cocHJpbnRXaW5kb3c6IFdpbmRvdywgcHJpbnRXaW5kb3dEb2M6IERvY3VtZW50KSB7XHJcbiAgICB0aGlzLnByaW50V2luZG93T3Blbi5uZXh0KHRydWUpO1xyXG4gICAgcHJpbnRXaW5kb3dEb2MuY2xvc2UoKTsgLy8gbmVjZXNzYXJ5IGZvciBJRSA+PSAxMFxyXG4gICAgcHJpbnRXaW5kb3cuZm9jdXMoKTsgLy8gbmVjZXNzYXJ5IGZvciBJRSA+PSAxMCovXHJcbiAgICBpZiAocHJpbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3ByaW50JykgPT09IGZhbHNlKSB7XHJcbiAgICAgIHByaW50V2luZG93LnByaW50KCk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnY2xvc2UgcHJpbnQgd2luZG93Jyk7XHJcbiAgICBwcmludFdpbmRvdy5jbG9zZSgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiAgeyBwcmludFdpbmRvdy5jbG9zZSgpOyB0aGlzLnByaW50V2luZG93T3Blbi5uZXh0KGZhbHNlKTsgfSwgMjApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJpbnQgdGhlIHdob2xlIGN1cnJlbnQgd2luZG93XHJcbiAgICovXHJcbiAgcHJpbnRDdXJyZW50V2luZG93KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucHJpbnRXaW5kb3dPcGVuLm5leHQodHJ1ZSk7XHJcbiAgICAgIGlmIChkb2N1bWVudC5leGVjQ29tbWFuZCgncHJpbnQnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICB3aW5kb3cucHJpbnQoKTtcclxuICAgICAgfVxyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMub3Blbk5neFByaW50ZXIpO1xyXG4gICAgICB0aGlzLnByaW50V2luZG93T3Blbi5uZXh0KGZhbHNlKTtcclxuICAgIH0sIHRoaXMudGltZVRvV2FpdFJlbmRlcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVOZ0NvbnRlbnQ8VD4oY29udGVudDogQ29udGVudDxUPikge1xyXG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCk7XHJcbiAgICAgIHJldHVybiBbW2VsZW1lbnRdXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XHJcbiAgICAgIGNvbnN0IHZpZXdSZWYgPSBjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKTtcclxuICAgICAgcmV0dXJuIFt2aWV3UmVmLnJvb3ROb2Rlc107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gW1tjb250ZW50XV07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIE90aGVyd2lzZSBpdCdzIGEgY29tcG9uZW50ICovXHJcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb250ZW50KTtcclxuXHJcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBmYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICByZXR1cm4gW1tjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudF1dO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgbmV3IGl0ZW0gdG8gcHJpbnRcclxuICAgKiBAcGFyYW0gbmV3UHJpbnRJdGVtICBIVE1MIGlkXHJcbiAgICovXHJcbiAgcHVibGljIGFkZFByaW50SXRlbShuZXdQcmludEl0ZW06IFByaW50SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3QgdG1wSXRlbXMgPSB0aGlzLl9wcmludEl0ZW1zLmdldFZhbHVlKCk7XHJcbiAgICB0bXBJdGVtcy5wdXNoKG5ld1ByaW50SXRlbSk7XHJcbiAgICB0aGlzLl9wcmludEl0ZW1zLm5leHQodG1wSXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGEgcHJpbnQgaXRlbSBmcm9tIHNlcnZpY2VcclxuICAgKiBAcGFyYW0gaWRPZkl0ZW1Ub1JlbW92ZSBcclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlUHJpbnRJdGVtKGlkT2ZJdGVtVG9SZW1vdmU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgdG1wSXRlbXMgPSB0aGlzLl9wcmludEl0ZW1zLmdldFZhbHVlKCk7XHJcbiAgICBjb25zdCBuZXdJaXRlbXMgPSB0bXBJdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBpZE9mSXRlbVRvUmVtb3ZlKTtcclxuICAgIHRoaXMuX3ByaW50SXRlbXMubmV4dChuZXdJaXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJpbnQgYSBwcmludCBJdGVtXHJcbiAgICogQHBhcmFtIHByaW50SXRlbVRvUHJpbnQgXHJcbiAgICovXHJcbiAgcHVibGljIHByaW50UHJpbnRJdGVtKHByaW50SXRlbVRvUHJpbnQ6IFByaW50SXRlbSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcmludEhUTUxFbGVtZW50KHByaW50SXRlbVRvUHJpbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXByaW50ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1wcmludGVyLyIsInNvdXJjZXMiOlsibGliL25neC1wcmludGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsV0FBVyxFQUNYLHdCQUF3QixFQUN4QixRQUFRLEVBQ1IsUUFBUSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQVU1RCxNQUFNLE9BQU8saUJBQWlCOzs7Ozs7SUE4QjVCLFlBQ2MsTUFBMEIsRUFDOUIsUUFBa0MsRUFDbEMsUUFBa0I7UUFEbEIsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWhDcEIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQzs7OztRQUt0RCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzNELGdCQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7Ozs7UUFROUMscUJBQWdCLEdBQUcsR0FBRyxDQUFDOzs7O1FBS3ZCLGdCQUFXLEdBQUcsU0FBUyxDQUFDOzs7OztRQU14QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUV2QixxQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBT3JELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDOzs7Ozs7O0lBTU8sb0JBQW9CLENBQUMsTUFBMEI7UUFDckQsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLE1B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QUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Ozs7Ozs7O0lBUU0sZUFBZSxDQUFDLGdCQUF3Qjs7Y0FDdkMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFOztjQUN0QyxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU07Ozs7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssZ0JBQWdCLEVBQUM7UUFDdkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7Ozs7O0lBTU0sY0FBYyxDQUFDLGdCQUEyQjtRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7O1lBN1FGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQVRRLGtCQUFrQix1QkF5Q3RCLFFBQVE7WUFoRFgsd0JBQXdCO1lBQ3hCLFFBQVE7Ozs7Ozs7O0lBaUJSLDRDQUE4RDs7Ozs7O0lBSzlELHdDQUEyRDs7SUFDM0Qsd0NBQThDOzs7OztJQUU5QywyQ0FBb0M7Ozs7OztJQU1wQyw2Q0FBdUI7Ozs7O0lBS3ZCLHdDQUF3Qjs7Ozs7O0lBTXhCLDRDQUF1Qjs7SUFFdkIsNkNBQXVEOzs7OztJQUlyRCxxQ0FBMEM7Ozs7O0lBQzFDLHFDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByaW50SXRlbSB9IGZyb20gJy4vcHJpbnQtaXRlbSc7XHJcbmltcG9ydCB7XHJcbiAgSW5qZWN0YWJsZSxcclxuICBUZW1wbGF0ZVJlZixcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgSW5qZWN0b3IsXHJcbiAgT3B0aW9uYWwsXHJcbiAgVHlwZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ3hQcmludGVyQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3gtcHJpbnRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUHJpbnRTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi9wcmludC1zZXJ2aWNlLWNvbmZpZyc7XHJcblxyXG5leHBvcnQgdHlwZSBDb250ZW50PFQ+ID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQgIHwgVGVtcGxhdGVSZWY8VD4gfCBUeXBlPFQ+O1xyXG5cclxuLyoqXHJcbiAqIE1haW4gcHJpbnQgc2VydmljZVxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4UHJpbnRlclNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcHJpbnRXaW5kb3dPcGVuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3ByaW50SXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByaW50SXRlbVtdPihbXSk7XHJcbiAgJHByaW50SXRlbXMgPSB0aGlzLl9wcmludEl0ZW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIG9wZW5OZ3hQcmludGVyOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgLyoqXHJcbiAgICogV2FpdCB0aW1lIHRvIHJlbmRlciBiZWZvcmUgb3BlbiBwcmludCBkaWFsb2cgaW4gbXNcclxuICAgKiBEZWZhdWx0IGlzIDIwMFxyXG4gICAqL1xyXG4gIHRpbWVUb1dhaXRSZW5kZXIgPSAyMDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIENsYXNzIHVzZWQgaW4gY29tcG9uZW50IHdoZW4gcHJpbnRpbmcgdG8gY3VycmVudCB3aW5kb3dcclxuICAgKi9cclxuICByZW5kZXJDbGFzcyA9ICdkZWZhdWx0JztcclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBuZXcgd2luZG93IHRvIHByaW50IG9yIG5vdFxyXG4gICAqIERlZmF1bHQgaXMgdHJ1ZVxyXG4gICAqL1xyXG4gIHByaW50T3BlbldpbmRvdyA9IHRydWU7XHJcblxyXG4gICRwcmludFdpbmRvd09wZW4gPSB0aGlzLnByaW50V2luZG93T3Blbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBjb25maWc6IFByaW50U2VydmljZUNvbmZpZyxcclxuICAgIHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNldFJvb3RDb25maWdPcHRpb25zKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgY29uZmlnIGZyb20gZm9yUm9vdFxyXG4gICAqIEBwYXJhbSBjb25maWcgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRSb290Q29uZmlnT3B0aW9ucyhjb25maWc6IFByaW50U2VydmljZUNvbmZpZykge1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBpZiAoY29uZmlnLnByaW50T3BlbldpbmRvdykge1xyXG4gICAgICAgIHRoaXMucHJpbnRPcGVuV2luZG93ID0gY29uZmlnLnByaW50T3BlbldpbmRvdztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnRpbWVUb1dhaXRSZW5kZXIpIHtcclxuICAgICAgICB0aGlzLnRpbWVUb1dhaXRSZW5kZXIgPSBjb25maWcudGltZVRvV2FpdFJlbmRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnJlbmRlckNsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJDbGFzcyA9IGNvbmZpZy5yZW5kZXJDbGFzcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqKlxyXG4gICAqIFByaW50IGEgZGl2IGlkZW50aWZpZWQgYnkgaXRzIGlkXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiB0aGlzLnByaW50ZXJTZXJ2aWNlLnByaW50RGl2KCdwcmludERpdicpO1xyXG4gICAqL1xyXG4gIHB1YmxpYyBwcmludERpdihkaXZJRDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkaXZUb1ByaW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2SUQpO1xyXG5cclxuICAgIGlmIChkaXZUb1ByaW50KSB7XHJcbiAgICAgIHRoaXMucHJpbnQoZGl2VG9QcmludCwgdGhpcy5wcmludE9wZW5XaW5kb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ2RpdiB3aXRoIGlkICR7ZGl2SUR9IG5vdCBmb3VuZC4uJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKioqXHJcbiAgICogUHJpbnQgYW4gRWxlbWVudCBpZGVudGlmaWVkIGJ5IGl0cyBjbGFzc05hbWUgdXNpbmcgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxyXG4gICAqIFByaW50cyB0aGUgZmlyc3QgZm91bmRcclxuICAgKi9cclxuICBwdWJsaWMgcHJpbnRCeUNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZWxlbWVudFRvUHJpbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XHJcblxyXG4gICAgaWYgKGVsZW1lbnRUb1ByaW50ICYmIGVsZW1lbnRUb1ByaW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcmludCg8SFRNTFNjcmlwdEVsZW1lbnQ+ZWxlbWVudFRvUHJpbnRbMF0sIHRoaXMucHJpbnRPcGVuV2luZG93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdlbGVtZW50IHdpdGggaWQgJHtjbGFzc05hbWV9IG5vdCBmb3VuZC4uJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCBBbmd1bGFyIFRlbXBsYXRlUmVmIG9yIGEgQ29tcG9uZW50IG9yIFN0cmluZ1xyXG4gICAqIEBwYXJhbSBjb250ZW50VG9QcmludFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogdGhpcy5wcmludGVyU2VydmljZS5wcmludEFuZ3VsYXIodGhpcy5QcmludFRlbXBsYXRlVHBsKTtcclxuICAgKi9cclxuICBwdWJsaWMgcHJpbnRBbmd1bGFyKGNvbnRlbnRUb1ByaW50OiBhbnkpIHtcclxuICAgIGNvbnN0IG5hdGl2ZUVsID0gdGhpcy5jcmVhdGVDb21wb25lbnQoY29udGVudFRvUHJpbnQpO1xyXG5cclxuICAgIHRoaXMucHJpbnQobmF0aXZlRWwubmF0aXZlRWxlbWVudCwgdGhpcy5wcmludE9wZW5XaW5kb3cpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJpbnQgc2luZ2xlIGltZ1xyXG4gICAqIEBleGFtcGxlXHJcbiAgICogdGhpcy5wcmludGVyU2VydmljZS5wcmludEltZygnYXNzZXRzL2JyYXR3dXJzdC5qcGcnKTtcclxuICAgKi9cclxuICBwdWJsaWMgcHJpbnRJbWcoaW1nU3JjOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLmNyZWF0ZUNvbXBvbmVudChudWxsLCBpbWdTcmMpO1xyXG4gICAgY29uc3Qgb3Blbk5ld1dpbmRvdyA9IHRoaXMucHJpbnRPcGVuV2luZG93O1xyXG5cclxuICAgIGNvbXBSZWYuaW5zdGFuY2UuY29tcGxldGVkLnN1YnNjcmliZSgodmFsKSA9PiB7XHJcbiAgICAgIGNvbXBSZWYuaG9zdFZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICBjb25zb2xlLmxvZygnY29tcGxldGVkOicsIHZhbCk7XHJcbiAgICAgIHRoaXMucHJpbnQoY29tcFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCBvcGVuTmV3V2luZG93KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJpbnQgYW4gbmF0aXZlIEVsZW1lbnQgKEhUTUwgRWxlbWVudClcclxuICAgKiBAcGFyYW0gbmF0aXZlRWxlbWVudCBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIHRoaXMucHJpbnRlclNlcnZpY2UucHJpbnRIVE1MRWxlbWVudCh0aGlzLlByaW50Q29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAqL1xyXG4gIHB1YmxpYyBwcmludEhUTUxFbGVtZW50KG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLnByaW50KG5hdGl2ZUVsZW1lbnQsIHRoaXMucHJpbnRPcGVuV2luZG93KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbmQgcmVuZGVyIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBjb250ZW50VG9SZW5kZXJcclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUNvbXBvbmVudChjb250ZW50VG9SZW5kZXI6IGFueSwgaW1nU3JjPzogc3RyaW5nKTogYW55IHtcclxuICAgIC8vIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTmd4UHJpbnRlckNvbXBvbmVudCk7XHJcbiAgICBsZXQgY29tcG9uZW50UmVmOiBhbnk7XHJcblxyXG4gICAgaWYgKGNvbnRlbnRUb1JlbmRlcikge1xyXG4gICAgICBjb25zdCBuZ0NvbnRlbnQgPSB0aGlzLnJlc29sdmVOZ0NvbnRlbnQoY29udGVudFRvUmVuZGVyKTtcclxuICAgICAgY29tcG9uZW50UmVmID0gZmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3RvciwgbmdDb250ZW50KTsgLy8gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbXBvbmVudFJlZiA9IGZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnJlbmRlckNsYXNzID0gdGhpcy5yZW5kZXJDbGFzcztcclxuICAgIGlmIChpbWdTcmMpIHtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmltZ1NyYyA9IGltZ1NyYztcclxuICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRSZWYuaG9zdFZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZi5sb2NhdGlvbjsgLy8gbG9jYXRpb24gaXMgbmF0aXZlIGVsZW1lbnRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1haW4gcHJpbnQgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcHJpbnRDb250ZW50IFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJpbnQocHJpbnRDb250ZW50OiBhbnksIHByaW50T3BlbldpbmRvdzogYm9vbGVhbikge1xyXG4gICAgaWYgKHByaW50T3BlbldpbmRvdykge1xyXG4gICAgICBjb25zdCBwcmludENvbnRlbnRDbG9uZSA9IHByaW50Q29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgIHRoaXMucHJpbnRJbk5ld1dpbmRvdyhwcmludENvbnRlbnRDbG9uZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwcmludENvbnRlbnRDbG9uZSA9IHByaW50Q29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IG5hdGl2ZUVsID0gdGhpcy5jcmVhdGVDb21wb25lbnQocHJpbnRDb250ZW50Q2xvbmUpLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMub3Blbk5neFByaW50ZXIgPSBuYXRpdmVFbDtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLm9wZW5OZ3hQcmludGVyKTtcclxuICAgICAgdGhpcy5wcmludEN1cnJlbnRXaW5kb3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByaW50IHVzaW5nIGEgbmV3IHdpbmRvdyAvIHRhYlxyXG4gICAqIEBwYXJhbSBkaXZUb1ByaW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcmludEluTmV3V2luZG93KGRpdlRvUHJpbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICBjb25zdCBwcmludFdpbmRvdyA9IHdpbmRvdy5vcGVuKCcnLCAnUFJJTlQnKTtcclxuICAgIGxldCB0aXRsZSA9IGRvY3VtZW50LnRpdGxlO1xyXG5cclxuICAgIHByaW50V2luZG93LmRvY3VtZW50LndyaXRlKCc8SFRNTD48SEVBRD48VElUTEU+JyArIHRpdGxlICsgJzwvVElUTEU+PC9IRUFEPjxCT0RZPjwvQk9EWT48L0hUTUw+Jyk7XHJcbiAgICAvLyBwcmludFdpbmRvdy5kb2N1bWVudC53cml0ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MKTtcclxuXHJcbiAgICBjb25zdCBwcmludFdpbmRvd0RvYyA9IHByaW50V2luZG93LmRvY3VtZW50O1xyXG4gICAgcHJpbnRXaW5kb3dEb2MuYm9keS5zdHlsZS5tYXJnaW4gPSAnMCAwJztcclxuICAgIHByaW50V2luZG93RG9jLmJvZHkuYXBwZW5kQ2hpbGQoZGl2VG9QcmludCk7XHJcbiAgICBwcmludFdpbmRvdy5kb2N1bWVudC5jbG9zZSgpO1xyXG4gICAgLy8gcHJpbnRXaW5kb3dEb2MuYm9keS5pbm5lckhUTUwgPSBkaXZUb1ByaW50Lm91dGVySFRNTDtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5wcmludFdpbmRvdyhwcmludFdpbmRvdywgcHJpbnRXaW5kb3dEb2MpLCB0aGlzLnRpbWVUb1dhaXRSZW5kZXIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJpbnQgd2luZG93IGluIG5ldyB0YWJcclxuICAgKi9cclxuICBwcml2YXRlIHByaW50V2luZG93KHByaW50V2luZG93OiBXaW5kb3csIHByaW50V2luZG93RG9jOiBEb2N1bWVudCkge1xyXG4gICAgdGhpcy5wcmludFdpbmRvd09wZW4ubmV4dCh0cnVlKTtcclxuICAgIHByaW50V2luZG93RG9jLmNsb3NlKCk7IC8vIG5lY2Vzc2FyeSBmb3IgSUUgPj0gMTBcclxuICAgIHByaW50V2luZG93LmZvY3VzKCk7IC8vIG5lY2Vzc2FyeSBmb3IgSUUgPj0gMTAqL1xyXG4gICAgaWYgKHByaW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKCdwcmludCcpID09PSBmYWxzZSkge1xyXG4gICAgICBwcmludFdpbmRvdy5wcmludCgpO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ2Nsb3NlIHByaW50IHdpbmRvdycpO1xyXG4gICAgcHJpbnRXaW5kb3cuY2xvc2UoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gIHsgcHJpbnRXaW5kb3cuY2xvc2UoKTsgdGhpcy5wcmludFdpbmRvd09wZW4ubmV4dChmYWxzZSk7IH0sIDIwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByaW50IHRoZSB3aG9sZSBjdXJyZW50IHdpbmRvd1xyXG4gICAqL1xyXG4gIHByaW50Q3VycmVudFdpbmRvdygpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnByaW50V2luZG93T3Blbi5uZXh0KHRydWUpO1xyXG4gICAgICBpZiAoZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3ByaW50JykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgd2luZG93LnByaW50KCk7XHJcbiAgICAgIH1cclxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLm9wZW5OZ3hQcmludGVyKTtcclxuICAgICAgdGhpcy5wcmludFdpbmRvd09wZW4ubmV4dChmYWxzZSk7XHJcbiAgICB9LCB0aGlzLnRpbWVUb1dhaXRSZW5kZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlTmdDb250ZW50PFQ+KGNvbnRlbnQ6IENvbnRlbnQ8VD4pIHtcclxuICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpO1xyXG4gICAgICByZXR1cm4gW1tlbGVtZW50XV07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xyXG4gICAgICBjb25zdCB2aWV3UmVmID0gY29udGVudC5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCk7XHJcbiAgICAgIHJldHVybiBbdmlld1JlZi5yb290Tm9kZXNdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIFtbY29udGVudF1dO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBPdGhlcndpc2UgaXQncyBhIGNvbXBvbmVudCAqL1xyXG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29udGVudCk7XHJcblxyXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gZmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XHJcbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIFtbY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnRdXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBpdGVtIHRvIHByaW50XHJcbiAgICogVXNlZCBieSBkaXJlY3RpdmVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKiBAcGFyYW0gbmV3UHJpbnRJdGVtICBIVE1MIGlkXHJcbiAgICovXHJcbiAgcHVibGljIGFkZFByaW50SXRlbShuZXdQcmludEl0ZW06IFByaW50SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3QgdG1wSXRlbXMgPSB0aGlzLl9wcmludEl0ZW1zLmdldFZhbHVlKCk7XHJcbiAgICB0bXBJdGVtcy5wdXNoKG5ld1ByaW50SXRlbSk7XHJcbiAgICB0aGlzLl9wcmludEl0ZW1zLm5leHQodG1wSXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGEgcHJpbnQgaXRlbSBmcm9tIHNlcnZpY2VcclxuICAgKiBVc2VkIGJ5IGRpcmVjdGl2ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqIEBwYXJhbSBpZE9mSXRlbVRvUmVtb3ZlIFxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW1vdmVQcmludEl0ZW0oaWRPZkl0ZW1Ub1JlbW92ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCB0bXBJdGVtcyA9IHRoaXMuX3ByaW50SXRlbXMuZ2V0VmFsdWUoKTtcclxuICAgIGNvbnN0IG5ld0lpdGVtcyA9IHRtcEl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGlkT2ZJdGVtVG9SZW1vdmUpO1xyXG4gICAgdGhpcy5fcHJpbnRJdGVtcy5uZXh0KG5ld0lpdGVtcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCBhIHByaW50IEl0ZW1cclxuICAgKiBAcGFyYW0gcHJpbnRJdGVtVG9QcmludCBcclxuICAgKi9cclxuICBwdWJsaWMgcHJpbnRQcmludEl0ZW0ocHJpbnRJdGVtVG9QcmludDogUHJpbnRJdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaW50SFRNTEVsZW1lbnQocHJpbnRJdGVtVG9QcmludC5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ import { Directive, ElementRef, Input } from '@angular/core';

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ /**

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ /**

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ /**

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ /*

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ import { Component, Renderer2, ElementRef, Output, EventEmitter } from '@angular/core';

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ import { NgModule } from '@angular/core';

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -19,2 +19,5 @@ import { Injectable, TemplateRef, ComponentFactoryResolver, Injector, Optional } from '@angular/core';

this.printWindowOpen = new BehaviorSubject(false);
/**
* \@internal
*/
this._printItems = new BehaviorSubject([]);

@@ -70,2 +73,4 @@ this.$printItems = this._printItems.asObservable();

* Print a div identified by its id
* @example
* this.printerService.printDiv('printDiv');
*/

@@ -75,2 +80,4 @@ /**

* Print a div identified by its id
* \@example
* this.printerService.printDiv('printDiv');
* @param {?} divID

@@ -82,2 +89,4 @@ * @return {?}

* Print a div identified by its id
* \@example
* this.printerService.printDiv('printDiv');
* @param {?} divID

@@ -97,3 +106,3 @@ * @return {?}

/***
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -103,3 +112,3 @@ */

*
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -111,3 +120,3 @@ * @param {?} className

*
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -128,7 +137,11 @@ * @param {?} className

/**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* @param contentToPrint
* @example
* this.printerService.printAngular(this.PrintTemplateTpl);
*/
/**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* \@example
* this.printerService.printAngular(this.PrintTemplateTpl);
* @param {?} contentToPrint

@@ -138,3 +151,5 @@ * @return {?}

NgxPrinterService.prototype.printAngular = /**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* \@example
* this.printerService.printAngular(this.PrintTemplateTpl);
* @param {?} contentToPrint

@@ -150,5 +165,9 @@ * @return {?}

* Print single img
* @example
* this.printerService.printImg('assets/bratwurst.jpg');
*/
/**
* Print single img
* \@example
* this.printerService.printImg('assets/bratwurst.jpg');
* @param {?} imgSrc

@@ -159,2 +178,4 @@ * @return {?}

* Print single img
* \@example
* this.printerService.printImg('assets/bratwurst.jpg');
* @param {?} imgSrc

@@ -180,7 +201,11 @@ * @return {?}

/**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* @param nativeElement
* @example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
*/
/**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* \@example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
* @param {?} nativeElement

@@ -190,3 +215,5 @@ * @return {?}

NgxPrinterService.prototype.printHTMLElement = /**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* \@example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
* @param {?} nativeElement

@@ -402,2 +429,4 @@ * @return {?}

* Add a new item to print
* Used by directive
* @internal
* @param newPrintItem HTML id

@@ -407,2 +436,4 @@ */

* Add a new item to print
* Used by directive
* \@internal
* @param {?} newPrintItem HTML id

@@ -413,2 +444,4 @@ * @return {?}

* Add a new item to print
* Used by directive
* \@internal
* @param {?} newPrintItem HTML id

@@ -425,2 +458,4 @@ * @return {?}

* Delete a print item from service
* Used by directive
* @internal
* @param idOfItemToRemove

@@ -430,2 +465,4 @@ */

* Delete a print item from service
* Used by directive
* \@internal
* @param {?} idOfItemToRemove

@@ -436,2 +473,4 @@ * @return {?}

* Delete a print item from service
* Used by directive
* \@internal
* @param {?} idOfItemToRemove

@@ -479,3 +518,3 @@ * @return {?}

]; };
/** @nocollapse */ NgxPrinterService.ngInjectableDef = i0.defineInjectable({ factory: function NgxPrinterService_Factory() { return new NgxPrinterService(i0.inject(i1.PrintServiceConfig, 8), i0.inject(i0.ComponentFactoryResolver), i0.inject(i0.INJECTOR)); }, token: NgxPrinterService, providedIn: "root" });
/** @nocollapse */ NgxPrinterService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgxPrinterService_Factory() { return new NgxPrinterService(i0.ɵɵinject(i1.PrintServiceConfig, 8), i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.INJECTOR)); }, token: NgxPrinterService, providedIn: "root" });
return NgxPrinterService;

@@ -491,2 +530,3 @@ }());

/**
* \@internal
* @type {?}

@@ -533,2 +573,2 @@ * @private

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXByaW50ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1wcmludGVyLyIsInNvdXJjZXMiOlsibGliL25neC1wcmludGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsV0FBVyxFQUNYLHdCQUF3QixFQUN4QixRQUFRLEVBQ1IsUUFBUSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQU81RDtJQThCRSwyQkFDYyxNQUEwQixFQUM5QixRQUFrQyxFQUNsQyxRQUFrQjtRQURsQixhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBN0JwQixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRXRELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDM0QsZ0JBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDOzs7OztRQVE5QyxxQkFBZ0IsR0FBRyxHQUFHLENBQUM7Ozs7UUFLdkIsZ0JBQVcsR0FBRyxTQUFTLENBQUM7Ozs7O1FBTXhCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRXZCLHFCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFPckQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7Ozs7Ozs7SUFDSyxnREFBb0I7Ozs7OztJQUE1QixVQUE2QixNQUEwQjtRQUNyRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksTUFB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SUFFOUMsMkNBQW9DOzs7Ozs7SUFNcEMsNkNBQXVCOzs7OztJQUt2Qix3Q0FBd0I7Ozs7OztJQU14Qiw0Q0FBdUI7O0lBRXZCLDZDQUF1RDs7Ozs7SUFJckQscUNBQTBDOzs7OztJQUMxQyxxQ0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcmludEl0ZW0gfSBmcm9tICcuL3ByaW50LWl0ZW0nO1xyXG5pbXBvcnQge1xyXG4gIEluamVjdGFibGUsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIEluamVjdG9yLFxyXG4gIE9wdGlvbmFsLFxyXG4gIFR5cGVcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9zcmMvcmVuZGVyMyc7XHJcbmltcG9ydCB7IE5neFByaW50ZXJDb21wb25lbnQgfSBmcm9tICcuL25neC1wcmludGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQcmludFNlcnZpY2VDb25maWcgfSBmcm9tICcuL3ByaW50LXNlcnZpY2UtY29uZmlnJztcclxuXHJcbmV4cG9ydCB0eXBlIENvbnRlbnQ8VD4gPSBzdHJpbmcgfCBIVE1MRWxlbWVudCAgfCBUZW1wbGF0ZVJlZjxUPiB8IFR5cGU8VD47XHJcblxyXG4vKipcclxuICogTWFpbiBwcmludCBzZXJ2aWNlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hQcmludGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBwcmludFdpbmRvd09wZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfcHJpbnRJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJpbnRJdGVtW10+KFtdKTtcclxuICAkcHJpbnRJdGVtcyA9IHRoaXMuX3ByaW50SXRlbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgb3Blbk5neFByaW50ZXI6IEhUTUxFbGVtZW50O1xyXG5cclxuICAvKipcclxuICAgKiBXYWl0IHRpbWUgdG8gcmVuZGVyIGJlZm9yZSBvcGVuIHByaW50IGRpYWxvZyBpbiBtc1xyXG4gICAqIERlZmF1bHQgaXMgMjAwXHJcbiAgICovXHJcbiAgdGltZVRvV2FpdFJlbmRlciA9IDIwMDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2xhc3MgdXNlZCBpbiBjb21wb25lbnQgd2hlbiBwcmludGluZyB0byBjdXJyZW50IHdpbmRvd1xyXG4gICAqL1xyXG4gIHJlbmRlckNsYXNzID0gJ2RlZmF1bHQnO1xyXG5cclxuICAvKipcclxuICAgKiBPcGVuIG5ldyB3aW5kb3cgdG8gcHJpbnQgb3Igbm90XHJcbiAgICogRGVmYXVsdCBpcyB0cnVlXHJcbiAgICovXHJcbiAgcHJpbnRPcGVuV2luZG93ID0gdHJ1ZTtcclxuXHJcbiAgJHByaW50V2luZG93T3BlbiA9IHRoaXMucHJpbnRXaW5kb3dPcGVuLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIGNvbmZpZzogUHJpbnRTZXJ2aWNlQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcclxuICApIHtcclxuICAgIHRoaXMuc2V0Um9vdENvbmZpZ09wdGlvbnMoY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBjb25maWcgZnJvbSBmb3JSb290XHJcbiAgICogQHBhcmFtIGNvbmZpZyBcclxuICAgKi9cclxuICBwcml2YXRlIHNldFJvb3RDb25maWdPcHRpb25zKGNvbmZpZzogUHJpbnRTZXJ2aWNlQ29uZmlnKSB7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGlmIChjb25maWcucHJpbnRPcGVuV2luZG93KSB7XHJcbiAgICAgICAgdGhpcy5wcmludE9wZW5XaW5kb3cgPSBjb25maWcucHJpbnRPcGVuV2luZG93O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcudGltZVRvV2FpdFJlbmRlcikge1xyXG4gICAgICAgIHRoaXMudGltZVRvV2FpdFJlbmRlciA9IGNvbmZpZy50aW1lVG9XYWl0UmVuZGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucmVuZGVyQ2xhc3MpIHtcclxuICAgICAgICB0aGlzLnJlbmRlckNsYXNzID0gY29uZmlnLnJlbmRlckNsYXNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKioqXHJcbiAgICogUHJpbnQgYSBkaXYgaWRlbnRpZmllZCBieSBpdHMgaWRcclxuICAgKi9cclxuICBwdWJsaWMgcHJpbnREaXYoZGl2SUQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGl2VG9QcmludCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdklEKTtcclxuXHJcbiAgICBpZiAoZGl2VG9QcmludCkge1xyXG4gICAgICB0aGlzLnByaW50KGRpdlRvUHJpbnQsIHRoaXMucHJpbnRPcGVuV2luZG93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdkaXYgd2l0aCBpZCAke2RpdklEfSBub3QgZm91bmQuLicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqKlxyXG4gICAqIFByaW50IGFuIEVsZW1lbnQgaWRlbnRpZmllZCBieSBpdHMgY2xhc3NOYW1lXHJcbiAgICogUHJpbnRzIHRoZSBmaXJzdCBmb3VuZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBwcmludEJ5Q2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBlbGVtZW50VG9QcmludCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcclxuXHJcbiAgICBpZiAoZWxlbWVudFRvUHJpbnQgJiYgZWxlbWVudFRvUHJpbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnByaW50KDxIVE1MU2NyaXB0RWxlbWVudD5lbGVtZW50VG9QcmludFswXSwgdGhpcy5wcmludE9wZW5XaW5kb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ2VsZW1lbnQgd2l0aCBpZCAke2NsYXNzTmFtZX0gbm90IGZvdW5kLi4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByaW50IEFuZ3VsYXIgVGVtcGxhdGVSZWYgb3IgQ29tcG9uZW50IG9yIFN0cmluZ1xyXG4gICAqIEBwYXJhbSBjb250ZW50VG9QcmludFxyXG4gICAqL1xyXG4gIHB1YmxpYyBwcmludEFuZ3VsYXIoY29udGVudFRvUHJpbnQ6IGFueSkge1xyXG4gICAgY29uc3QgbmF0aXZlRWwgPSB0aGlzLmNyZWF0ZUNvbXBvbmVudChjb250ZW50VG9QcmludCk7XHJcblxyXG4gICAgdGhpcy5wcmludChuYXRpdmVFbC5uYXRpdmVFbGVtZW50LCB0aGlzLnByaW50T3BlbldpbmRvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCBzaW5nbGUgaW1nXHJcbiAgICovXHJcbiAgcHVibGljIHByaW50SW1nKGltZ1NyYzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5jcmVhdGVDb21wb25lbnQobnVsbCwgaW1nU3JjKTtcclxuICAgIGNvbnN0IG9wZW5OZXdXaW5kb3cgPSB0aGlzLnByaW50T3BlbldpbmRvdztcclxuXHJcbiAgICBjb21wUmVmLmluc3RhbmNlLmNvbXBsZXRlZC5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICBjb21wUmVmLmhvc3RWaWV3LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgY29uc29sZS5sb2coJ2NvbXBsZXRlZDonLCB2YWwpO1xyXG4gICAgICB0aGlzLnByaW50KGNvbXBSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCwgb3Blbk5ld1dpbmRvdyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByaW50IG5hdGl2ZSBFbGVtZW50IChIVE1MIEVsZW1lbnQpXHJcbiAgICogQHBhcmFtIG5hdGl2ZUVsZW1lbnRcclxuICAgKi9cclxuICBwdWJsaWMgcHJpbnRIVE1MRWxlbWVudChuYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudCkge1xyXG4gICAgdGhpcy5wcmludChuYXRpdmVFbGVtZW50LCB0aGlzLnByaW50T3BlbldpbmRvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW5kIHJlbmRlciBjb21wb25lbnRcclxuICAgKiBAcGFyYW0gY29udGVudFRvUmVuZGVyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb21wb25lbnQoY29udGVudFRvUmVuZGVyOiBhbnksIGltZ1NyYz86IHN0cmluZyk6IGFueSB7XHJcbiAgICAvLyB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE5neFByaW50ZXJDb21wb25lbnQpO1xyXG4gICAgbGV0IGNvbXBvbmVudFJlZjogYW55O1xyXG5cclxuICAgIGlmIChjb250ZW50VG9SZW5kZXIpIHtcclxuICAgICAgY29uc3QgbmdDb250ZW50ID0gdGhpcy5yZXNvbHZlTmdDb250ZW50KGNvbnRlbnRUb1JlbmRlcik7XHJcbiAgICAgIGNvbXBvbmVudFJlZiA9IGZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IsIG5nQ29udGVudCk7IC8vIHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb21wb25lbnRSZWYgPSBmYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5yZW5kZXJDbGFzcyA9IHRoaXMucmVuZGVyQ2xhc3M7XHJcbiAgICBpZiAoaW1nU3JjKSB7XHJcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5pbWdTcmMgPSBpbWdTcmM7XHJcbiAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50UmVmLmhvc3RWaWV3LmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiBjb21wb25lbnRSZWYubG9jYXRpb247IC8vIGxvY2F0aW9uIGlzIG5hdGl2ZSBlbGVtZW50XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYWluIHByaW50IGZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIHByaW50Q29udGVudCBcclxuICAgKi9cclxuICBwcml2YXRlIHByaW50KHByaW50Q29udGVudDogYW55LCBwcmludE9wZW5XaW5kb3c6IGJvb2xlYW4pIHtcclxuICAgIGlmIChwcmludE9wZW5XaW5kb3cpIHtcclxuICAgICAgY29uc3QgcHJpbnRDb250ZW50Q2xvbmUgPSBwcmludENvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICB0aGlzLnByaW50SW5OZXdXaW5kb3cocHJpbnRDb250ZW50Q2xvbmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcHJpbnRDb250ZW50Q2xvbmUgPSBwcmludENvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICBjb25zdCBuYXRpdmVFbCA9IHRoaXMuY3JlYXRlQ29tcG9uZW50KHByaW50Q29udGVudENsb25lKS5uYXRpdmVFbGVtZW50O1xyXG4gICAgICB0aGlzLm9wZW5OZ3hQcmludGVyID0gbmF0aXZlRWw7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5vcGVuTmd4UHJpbnRlcik7XHJcbiAgICAgIHRoaXMucHJpbnRDdXJyZW50V2luZG93KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCB1c2luZyBhIG5ldyB3aW5kb3cgLyB0YWJcclxuICAgKiBAcGFyYW0gZGl2VG9QcmludFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJpbnRJbk5ld1dpbmRvdyhkaXZUb1ByaW50OiBIVE1MRWxlbWVudCkge1xyXG4gICAgY29uc3QgcHJpbnRXaW5kb3cgPSB3aW5kb3cub3BlbignJywgJ1BSSU5UJyk7XHJcbiAgICBsZXQgdGl0bGUgPSBkb2N1bWVudC50aXRsZTtcclxuXHJcbiAgICBwcmludFdpbmRvdy5kb2N1bWVudC53cml0ZSgnPEhUTUw+PEhFQUQ+PFRJVExFPicgKyB0aXRsZSArICc8L1RJVExFPjwvSEVBRD48Qk9EWT48L0JPRFk+PC9IVE1MPicpO1xyXG4gICAgLy8gcHJpbnRXaW5kb3cuZG9jdW1lbnQud3JpdGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTCk7XHJcblxyXG4gICAgY29uc3QgcHJpbnRXaW5kb3dEb2MgPSBwcmludFdpbmRvdy5kb2N1bWVudDtcclxuICAgIHByaW50V2luZG93RG9jLmJvZHkuc3R5bGUubWFyZ2luID0gJzAgMCc7XHJcbiAgICBwcmludFdpbmRvd0RvYy5ib2R5LmFwcGVuZENoaWxkKGRpdlRvUHJpbnQpO1xyXG4gICAgcHJpbnRXaW5kb3cuZG9jdW1lbnQuY2xvc2UoKTtcclxuICAgIC8vIHByaW50V2luZG93RG9jLmJvZHkuaW5uZXJIVE1MID0gZGl2VG9QcmludC5vdXRlckhUTUw7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucHJpbnRXaW5kb3cocHJpbnRXaW5kb3csIHByaW50V2luZG93RG9jKSwgdGhpcy50aW1lVG9XYWl0UmVuZGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByaW50IHdpbmRvdyBpbiBuZXcgdGFiXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcmludFdpbmRvdyhwcmludFdpbmRvdzogV2luZG93LCBwcmludFdpbmRvd0RvYzogRG9jdW1lbnQpIHtcclxuICAgIHRoaXMucHJpbnRXaW5kb3dPcGVuLm5leHQodHJ1ZSk7XHJcbiAgICBwcmludFdpbmRvd0RvYy5jbG9zZSgpOyAvLyBuZWNlc3NhcnkgZm9yIElFID49IDEwXHJcbiAgICBwcmludFdpbmRvdy5mb2N1cygpOyAvLyBuZWNlc3NhcnkgZm9yIElFID49IDEwKi9cclxuICAgIGlmIChwcmludFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgncHJpbnQnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgcHJpbnRXaW5kb3cucHJpbnQoKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCdjbG9zZSBwcmludCB3aW5kb3cnKTtcclxuICAgIHByaW50V2luZG93LmNsb3NlKCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+ICB7IHByaW50V2luZG93LmNsb3NlKCk7IHRoaXMucHJpbnRXaW5kb3dPcGVuLm5leHQoZmFsc2UpOyB9LCAyMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCB0aGUgd2hvbGUgY3VycmVudCB3aW5kb3dcclxuICAgKi9cclxuICBwcmludEN1cnJlbnRXaW5kb3coKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wcmludFdpbmRvd09wZW4ubmV4dCh0cnVlKTtcclxuICAgICAgaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKCdwcmludCcpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHdpbmRvdy5wcmludCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5vcGVuTmd4UHJpbnRlcik7XHJcbiAgICAgIHRoaXMucHJpbnRXaW5kb3dPcGVuLm5leHQoZmFsc2UpO1xyXG4gICAgfSwgdGhpcy50aW1lVG9XYWl0UmVuZGVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZU5nQ29udGVudDxUPihjb250ZW50OiBDb250ZW50PFQ+KSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KTtcclxuICAgICAgcmV0dXJuIFtbZWxlbWVudF1dO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcclxuICAgICAgY29uc3Qgdmlld1JlZiA9IGNvbnRlbnQuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpO1xyXG4gICAgICByZXR1cm4gW3ZpZXdSZWYucm9vdE5vZGVzXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBbW2NvbnRlbnRdXTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogT3RoZXJ3aXNlIGl0J3MgYSBjb21wb25lbnQgKi9cclxuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbnRlbnQpO1xyXG5cclxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xyXG4gICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiBbW2NvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBuZXcgaXRlbSB0byBwcmludFxyXG4gICAqIEBwYXJhbSBuZXdQcmludEl0ZW0gIEhUTUwgaWRcclxuICAgKi9cclxuICBwdWJsaWMgYWRkUHJpbnRJdGVtKG5ld1ByaW50SXRlbTogUHJpbnRJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCB0bXBJdGVtcyA9IHRoaXMuX3ByaW50SXRlbXMuZ2V0VmFsdWUoKTtcclxuICAgIHRtcEl0ZW1zLnB1c2gobmV3UHJpbnRJdGVtKTtcclxuICAgIHRoaXMuX3ByaW50SXRlbXMubmV4dCh0bXBJdGVtcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgYSBwcmludCBpdGVtIGZyb20gc2VydmljZVxyXG4gICAqIEBwYXJhbSBpZE9mSXRlbVRvUmVtb3ZlIFxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW1vdmVQcmludEl0ZW0oaWRPZkl0ZW1Ub1JlbW92ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCB0bXBJdGVtcyA9IHRoaXMuX3ByaW50SXRlbXMuZ2V0VmFsdWUoKTtcclxuICAgIGNvbnN0IG5ld0lpdGVtcyA9IHRtcEl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGlkT2ZJdGVtVG9SZW1vdmUpO1xyXG4gICAgdGhpcy5fcHJpbnRJdGVtcy5uZXh0KG5ld0lpdGVtcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCBhIHByaW50IEl0ZW1cclxuICAgKiBAcGFyYW0gcHJpbnRJdGVtVG9QcmludCBcclxuICAgKi9cclxuICBwdWJsaWMgcHJpbnRQcmludEl0ZW0ocHJpbnRJdGVtVG9QcmludDogUHJpbnRJdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaW50SFRNTEVsZW1lbnQocHJpbnRJdGVtVG9QcmludC5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXByaW50ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1wcmludGVyLyIsInNvdXJjZXMiOlsibGliL25neC1wcmludGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsV0FBVyxFQUNYLHdCQUF3QixFQUN4QixRQUFRLEVBQ1IsUUFBUSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQU81RDtJQWlDRSwyQkFDYyxNQUEwQixFQUM5QixRQUFrQyxFQUNsQyxRQUFrQjtRQURsQixhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBaENwQixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDOzs7O1FBS3RELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDM0QsZ0JBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDOzs7OztRQVE5QyxxQkFBZ0IsR0FBRyxHQUFHLENBQUM7Ozs7UUFLdkIsZ0JBQVcsR0FBRyxTQUFTLENBQUM7Ozs7O1FBTXhCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRXZCLHFCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFPckQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7Ozs7Ozs7SUFDSyxnREFBb0I7Ozs7OztJQUE1QixVQUE2QixNQUEwQjtRQUNyRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUks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QThEOzs7Ozs7SUFLOUQsd0NBQTJEOztJQUMzRCx3Q0FBOEM7Ozs7O0lBRTlDLDJDQUFvQzs7Ozs7O0lBTXBDLDZDQUF1Qjs7Ozs7SUFLdkIsd0NBQXdCOzs7Ozs7SUFNeEIsNENBQXVCOztJQUV2Qiw2Q0FBdUQ7Ozs7O0lBSXJELHFDQUEwQzs7Ozs7SUFDMUMscUNBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJpbnRJdGVtIH0gZnJvbSAnLi9wcmludC1pdGVtJztcclxuaW1wb3J0IHtcclxuICBJbmplY3RhYmxlLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBJbmplY3RvcixcclxuICBPcHRpb25hbCxcclxuICBUeXBlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5neFByaW50ZXJDb21wb25lbnQgfSBmcm9tICcuL25neC1wcmludGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQcmludFNlcnZpY2VDb25maWcgfSBmcm9tICcuL3ByaW50LXNlcnZpY2UtY29uZmlnJztcclxuXHJcbmV4cG9ydCB0eXBlIENvbnRlbnQ8VD4gPSBzdHJpbmcgfCBIVE1MRWxlbWVudCAgfCBUZW1wbGF0ZVJlZjxUPiB8IFR5cGU8VD47XHJcblxyXG4vKipcclxuICogTWFpbiBwcmludCBzZXJ2aWNlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hQcmludGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBwcmludFdpbmRvd09wZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcHJpbnRJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJpbnRJdGVtW10+KFtdKTtcclxuICAkcHJpbnRJdGVtcyA9IHRoaXMuX3ByaW50SXRlbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgb3Blbk5neFByaW50ZXI6IEhUTUxFbGVtZW50O1xyXG5cclxuICAvKipcclxuICAgKiBXYWl0IHRpbWUgdG8gcmVuZGVyIGJlZm9yZSBvcGVuIHByaW50IGRpYWxvZyBpbiBtc1xyXG4gICAqIERlZmF1bHQgaXMgMjAwXHJcbiAgICovXHJcbiAgdGltZVRvV2FpdFJlbmRlciA9IDIwMDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2xhc3MgdXNlZCBpbiBjb21wb25lbnQgd2hlbiBwcmludGluZyB0byBjdXJyZW50IHdpbmRvd1xyXG4gICAqL1xyXG4gIHJlbmRlckNsYXNzID0gJ2RlZmF1bHQnO1xyXG5cclxuICAvKipcclxuICAgKiBPcGVuIG5ldyB3aW5kb3cgdG8gcHJpbnQgb3Igbm90XHJcbiAgICogRGVmYXVsdCBpcyB0cnVlXHJcbiAgICovXHJcbiAgcHJpbnRPcGVuV2luZG93ID0gdHJ1ZTtcclxuXHJcbiAgJHByaW50V2luZG93T3BlbiA9IHRoaXMucHJpbnRXaW5kb3dPcGVuLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIGNvbmZpZzogUHJpbnRTZXJ2aWNlQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcclxuICApIHtcclxuICAgIHRoaXMuc2V0Um9vdENvbmZpZ09wdGlvbnMoY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBjb25maWcgZnJvbSBmb3JSb290XHJcbiAgICogQHBhcmFtIGNvbmZpZyBcclxuICAgKi9cclxuICBwcml2YXRlIHNldFJvb3RDb25maWdPcHRpb25zKGNvbmZpZzogUHJpbnRTZXJ2aWNlQ29uZmlnKSB7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGlmIChjb25maWcucHJpbnRPcGVuV2luZG93KSB7XHJcbiAgICAgICAgdGhpcy5wcmludE9wZW5XaW5kb3cgPSBjb25maWcucHJpbnRPcGVuV2luZG93O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcudGltZVRvV2FpdFJlbmRlcikge1xyXG4gICAgICAgIHRoaXMudGltZVRvV2FpdFJlbmRlciA9IGNvbmZpZy50aW1lVG9XYWl0UmVuZGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucmVuZGVyQ2xhc3MpIHtcclxuICAgICAgICB0aGlzLnJlbmRlckNsYXNzID0gY29uZmlnLnJlbmRlckNsYXNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKioqXHJcbiAgICogUHJpbnQgYSBkaXYgaWRlbnRpZmllZCBieSBpdHMgaWRcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIHRoaXMucHJpbnRlclNlcnZpY2UucHJpbnREaXYoJ3ByaW50RGl2Jyk7XHJcbiAgICovXHJcbiAgcHVibGljIHByaW50RGl2KGRpdklEOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRpdlRvUHJpbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJRCk7XHJcblxyXG4gICAgaWYgKGRpdlRvUHJpbnQpIHtcclxuICAgICAgdGhpcy5wcmludChkaXZUb1ByaW50LCB0aGlzLnByaW50T3BlbldpbmRvdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnZGl2IHdpdGggaWQgJHtkaXZJRH0gbm90IGZvdW5kLi4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKipcclxuICAgKiBQcmludCBhbiBFbGVtZW50IGlkZW50aWZpZWQgYnkgaXRzIGNsYXNzTmFtZSB1c2luZyBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lXHJcbiAgICogUHJpbnRzIHRoZSBmaXJzdCBmb3VuZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBwcmludEJ5Q2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBlbGVtZW50VG9QcmludCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcclxuXHJcbiAgICBpZiAoZWxlbWVudFRvUHJpbnQgJiYgZWxlbWVudFRvUHJpbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnByaW50KDxIVE1MU2NyaXB0RWxlbWVudD5lbGVtZW50VG9QcmludFswXSwgdGhpcy5wcmludE9wZW5XaW5kb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ2VsZW1lbnQgd2l0aCBpZCAke2NsYXNzTmFtZX0gbm90IGZvdW5kLi4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByaW50IEFuZ3VsYXIgVGVtcGxhdGVSZWYgb3IgYSBDb21wb25lbnQgb3IgU3RyaW5nXHJcbiAgICogQHBhcmFtIGNvbnRlbnRUb1ByaW50XHJcbiAgICogQGV4YW1wbGVcclxuICAgKiB0aGlzLnByaW50ZXJTZXJ2aWNlLnByaW50QW5ndWxhcih0aGlzLlByaW50VGVtcGxhdGVUcGwpO1xyXG4gICAqL1xyXG4gIHB1YmxpYyBwcmludEFuZ3VsYXIoY29udGVudFRvUHJpbnQ6IGFueSkge1xyXG4gICAgY29uc3QgbmF0aXZlRWwgPSB0aGlzLmNyZWF0ZUNvbXBvbmVudChjb250ZW50VG9QcmludCk7XHJcblxyXG4gICAgdGhpcy5wcmludChuYXRpdmVFbC5uYXRpdmVFbGVtZW50LCB0aGlzLnByaW50T3BlbldpbmRvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCBzaW5nbGUgaW1nXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiB0aGlzLnByaW50ZXJTZXJ2aWNlLnByaW50SW1nKCdhc3NldHMvYnJhdHd1cnN0LmpwZycpO1xyXG4gICAqL1xyXG4gIHB1YmxpYyBwcmludEltZyhpbWdTcmM6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29tcFJlZiA9IHRoaXMuY3JlYXRlQ29tcG9uZW50KG51bGwsIGltZ1NyYyk7XHJcbiAgICBjb25zdCBvcGVuTmV3V2luZG93ID0gdGhpcy5wcmludE9wZW5XaW5kb3c7XHJcblxyXG4gICAgY29tcFJlZi5pbnN0YW5jZS5jb21wbGV0ZWQuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgY29tcFJlZi5ob3N0Vmlldy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjb21wbGV0ZWQ6JywgdmFsKTtcclxuICAgICAgdGhpcy5wcmludChjb21wUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsIG9wZW5OZXdXaW5kb3cpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCBhbiBuYXRpdmUgRWxlbWVudCAoSFRNTCBFbGVtZW50KVxyXG4gICAqIEBwYXJhbSBuYXRpdmVFbGVtZW50IFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogdGhpcy5wcmludGVyU2VydmljZS5wcmludEhUTUxFbGVtZW50KHRoaXMuUHJpbnRDb21wb25lbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICovXHJcbiAgcHVibGljIHByaW50SFRNTEVsZW1lbnQobmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuICAgIHRoaXMucHJpbnQobmF0aXZlRWxlbWVudCwgdGhpcy5wcmludE9wZW5XaW5kb3cpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuZCByZW5kZXIgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIGNvbnRlbnRUb1JlbmRlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQ29tcG9uZW50KGNvbnRlbnRUb1JlbmRlcjogYW55LCBpbWdTcmM/OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgLy8gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShOZ3hQcmludGVyQ29tcG9uZW50KTtcclxuICAgIGxldCBjb21wb25lbnRSZWY6IGFueTtcclxuXHJcbiAgICBpZiAoY29udGVudFRvUmVuZGVyKSB7XHJcbiAgICAgIGNvbnN0IG5nQ29udGVudCA9IHRoaXMucmVzb2x2ZU5nQ29udGVudChjb250ZW50VG9SZW5kZXIpO1xyXG4gICAgICBjb21wb25lbnRSZWYgPSBmYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yLCBuZ0NvbnRlbnQpOyAvLyB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29tcG9uZW50UmVmID0gZmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucmVuZGVyQ2xhc3MgPSB0aGlzLnJlbmRlckNsYXNzO1xyXG4gICAgaWYgKGltZ1NyYykge1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuaW1nU3JjID0gaW1nU3JjO1xyXG4gICAgICByZXR1cm4gY29tcG9uZW50UmVmO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFJlZi5ob3N0Vmlldy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICByZXR1cm4gY29tcG9uZW50UmVmLmxvY2F0aW9uOyAvLyBsb2NhdGlvbiBpcyBuYXRpdmUgZWxlbWVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFpbiBwcmludCBmdW5jdGlvblxyXG4gICAqIEBwYXJhbSBwcmludENvbnRlbnQgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcmludChwcmludENvbnRlbnQ6IGFueSwgcHJpbnRPcGVuV2luZG93OiBib29sZWFuKSB7XHJcbiAgICBpZiAocHJpbnRPcGVuV2luZG93KSB7XHJcbiAgICAgIGNvbnN0IHByaW50Q29udGVudENsb25lID0gcHJpbnRDb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgdGhpcy5wcmludEluTmV3V2luZG93KHByaW50Q29udGVudENsb25lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHByaW50Q29udGVudENsb25lID0gcHJpbnRDb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgY29uc3QgbmF0aXZlRWwgPSB0aGlzLmNyZWF0ZUNvbXBvbmVudChwcmludENvbnRlbnRDbG9uZSkubmF0aXZlRWxlbWVudDtcclxuICAgICAgdGhpcy5vcGVuTmd4UHJpbnRlciA9IG5hdGl2ZUVsO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMub3Blbk5neFByaW50ZXIpO1xyXG4gICAgICB0aGlzLnByaW50Q3VycmVudFdpbmRvdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJpbnQgdXNpbmcgYSBuZXcgd2luZG93IC8gdGFiXHJcbiAgICogQHBhcmFtIGRpdlRvUHJpbnRcclxuICAgKi9cclxuICBwcml2YXRlIHByaW50SW5OZXdXaW5kb3coZGl2VG9QcmludDogSFRNTEVsZW1lbnQpIHtcclxuICAgIGNvbnN0IHByaW50V2luZG93ID0gd2luZG93Lm9wZW4oJycsICdQUklOVCcpO1xyXG4gICAgbGV0IHRpdGxlID0gZG9jdW1lbnQudGl0bGU7XHJcblxyXG4gICAgcHJpbnRXaW5kb3cuZG9jdW1lbnQud3JpdGUoJzxIVE1MPjxIRUFEPjxUSVRMRT4nICsgdGl0bGUgKyAnPC9USVRMRT48L0hFQUQ+PEJPRFk+PC9CT0RZPjwvSFRNTD4nKTtcclxuICAgIC8vIHByaW50V2luZG93LmRvY3VtZW50LndyaXRlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUwpO1xyXG5cclxuICAgIGNvbnN0IHByaW50V2luZG93RG9jID0gcHJpbnRXaW5kb3cuZG9jdW1lbnQ7XHJcbiAgICBwcmludFdpbmRvd0RvYy5ib2R5LnN0eWxlLm1hcmdpbiA9ICcwIDAnO1xyXG4gICAgcHJpbnRXaW5kb3dEb2MuYm9keS5hcHBlbmRDaGlsZChkaXZUb1ByaW50KTtcclxuICAgIHByaW50V2luZG93LmRvY3VtZW50LmNsb3NlKCk7XHJcbiAgICAvLyBwcmludFdpbmRvd0RvYy5ib2R5LmlubmVySFRNTCA9IGRpdlRvUHJpbnQub3V0ZXJIVE1MO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnByaW50V2luZG93KHByaW50V2luZG93LCBwcmludFdpbmRvd0RvYyksIHRoaXMudGltZVRvV2FpdFJlbmRlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmludCB3aW5kb3cgaW4gbmV3IHRhYlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJpbnRXaW5kb3cocHJpbnRXaW5kb3c6IFdpbmRvdywgcHJpbnRXaW5kb3dEb2M6IERvY3VtZW50KSB7XHJcbiAgICB0aGlzLnByaW50V2luZG93T3Blbi5uZXh0KHRydWUpO1xyXG4gICAgcHJpbnRXaW5kb3dEb2MuY2xvc2UoKTsgLy8gbmVjZXNzYXJ5IGZvciBJRSA+PSAxMFxyXG4gICAgcHJpbnRXaW5kb3cuZm9jdXMoKTsgLy8gbmVjZXNzYXJ5IGZvciBJRSA+PSAxMCovXHJcbiAgICBpZiAocHJpbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3ByaW50JykgPT09IGZhbHNlKSB7XHJcbiAgICAgIHByaW50V2luZG93LnByaW50KCk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnY2xvc2UgcHJpbnQgd2luZG93Jyk7XHJcbiAgICBwcmludFdpbmRvdy5jbG9zZSgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiAgeyBwcmludFdpbmRvdy5jbG9zZSgpOyB0aGlzLnByaW50V2luZG93T3Blbi5uZXh0KGZhbHNlKTsgfSwgMjApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJpbnQgdGhlIHdob2xlIGN1cnJlbnQgd2luZG93XHJcbiAgICovXHJcbiAgcHJpbnRDdXJyZW50V2luZG93KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucHJpbnRXaW5kb3dPcGVuLm5leHQodHJ1ZSk7XHJcbiAgICAgIGlmIChkb2N1bWVudC5leGVjQ29tbWFuZCgncHJpbnQnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICB3aW5kb3cucHJpbnQoKTtcclxuICAgICAgfVxyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMub3Blbk5neFByaW50ZXIpO1xyXG4gICAgICB0aGlzLnByaW50V2luZG93T3Blbi5uZXh0KGZhbHNlKTtcclxuICAgIH0sIHRoaXMudGltZVRvV2FpdFJlbmRlcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVOZ0NvbnRlbnQ8VD4oY29udGVudDogQ29udGVudDxUPikge1xyXG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCk7XHJcbiAgICAgIHJldHVybiBbW2VsZW1lbnRdXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XHJcbiAgICAgIGNvbnN0IHZpZXdSZWYgPSBjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKTtcclxuICAgICAgcmV0dXJuIFt2aWV3UmVmLnJvb3ROb2Rlc107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gW1tjb250ZW50XV07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIE90aGVyd2lzZSBpdCdzIGEgY29tcG9uZW50ICovXHJcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb250ZW50KTtcclxuXHJcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBmYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICByZXR1cm4gW1tjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudF1dO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgbmV3IGl0ZW0gdG8gcHJpbnRcclxuICAgKiBVc2VkIGJ5IGRpcmVjdGl2ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqIEBwYXJhbSBuZXdQcmludEl0ZW0gIEhUTUwgaWRcclxuICAgKi9cclxuICBwdWJsaWMgYWRkUHJpbnRJdGVtKG5ld1ByaW50SXRlbTogUHJpbnRJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCB0bXBJdGVtcyA9IHRoaXMuX3ByaW50SXRlbXMuZ2V0VmFsdWUoKTtcclxuICAgIHRtcEl0ZW1zLnB1c2gobmV3UHJpbnRJdGVtKTtcclxuICAgIHRoaXMuX3ByaW50SXRlbXMubmV4dCh0bXBJdGVtcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgYSBwcmludCBpdGVtIGZyb20gc2VydmljZVxyXG4gICAqIFVzZWQgYnkgZGlyZWN0aXZlXHJcbiAgICogQGludGVybmFsXHJcbiAgICogQHBhcmFtIGlkT2ZJdGVtVG9SZW1vdmUgXHJcbiAgICovXHJcbiAgcHVibGljIHJlbW92ZVByaW50SXRlbShpZE9mSXRlbVRvUmVtb3ZlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRtcEl0ZW1zID0gdGhpcy5fcHJpbnRJdGVtcy5nZXRWYWx1ZSgpO1xyXG4gICAgY29uc3QgbmV3SWl0ZW1zID0gdG1wSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWRPZkl0ZW1Ub1JlbW92ZSk7XHJcbiAgICB0aGlzLl9wcmludEl0ZW1zLm5leHQobmV3SWl0ZW1zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByaW50IGEgcHJpbnQgSXRlbVxyXG4gICAqIEBwYXJhbSBwcmludEl0ZW1Ub1ByaW50IFxyXG4gICAqL1xyXG4gIHB1YmxpYyBwcmludFByaW50SXRlbShwcmludEl0ZW1Ub1ByaW50OiBQcmludEl0ZW0pOiB2b2lkIHtcclxuICAgIHRoaXMucHJpbnRIVE1MRWxlbWVudChwcmludEl0ZW1Ub1ByaW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ import { Directive, ElementRef, Input } from '@angular/core';

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ /**

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ /**

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ /**

/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -5,0 +5,0 @@ /*

@@ -0,7 +1,7 @@

import { EventEmitter, Component, ElementRef, Renderer2, Output, TemplateRef, Injectable, Optional, ComponentFactoryResolver, Injector, ɵɵdefineInjectable, ɵɵinject, INJECTOR, Directive, Input, NgModule } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { Component, Renderer2, ElementRef, Output, EventEmitter, Injectable, TemplateRef, ComponentFactoryResolver, Injector, Optional, NgModule, Directive, Input, defineInjectable, inject, INJECTOR } from '@angular/core';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -109,6 +109,31 @@ /**

};
if (false) {
/**
* @type {?}
* @private
*/
NgxPrinterComponent.prototype._renderClass;
/**
* Display single image
* @type {?}
* @private
*/
NgxPrinterComponent.prototype._imgSrc;
/** @type {?} */
NgxPrinterComponent.prototype.completed;
/**
* @type {?}
* @private
*/
NgxPrinterComponent.prototype.elementRef;
/**
* @type {?}
* @private
*/
NgxPrinterComponent.prototype.renderer;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -130,6 +155,23 @@ /**

}
if (false) {
/**
* Print in a new window or not
* @type {?}
*/
PrintServiceConfig.prototype.printOpenWindow;
/**
* Wait time before opening print dialog
* @type {?}
*/
PrintServiceConfig.prototype.timeToWaitRender;
/**
* Class name to be used when printing in current window
* @type {?}
*/
PrintServiceConfig.prototype.renderClass;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -149,2 +191,5 @@ /**

this.printWindowOpen = new BehaviorSubject(false);
/**
* \@internal
*/
this._printItems = new BehaviorSubject([]);

@@ -191,2 +236,4 @@ this.$printItems = this._printItems.asObservable();

* Print a div identified by its id
* \@example
* this.printerService.printDiv('printDiv');
* @param {?} divID

@@ -207,3 +254,3 @@ * @return {?}

*
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -224,3 +271,5 @@ * @param {?} className

/**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* \@example
* this.printerService.printAngular(this.PrintTemplateTpl);
* @param {?} contentToPrint

@@ -236,2 +285,4 @@ * @return {?}

* Print single img
* \@example
* this.printerService.printImg('assets/bratwurst.jpg');
* @param {?} imgSrc

@@ -256,3 +307,5 @@ * @return {?}

/**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* \@example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
* @param {?} nativeElement

@@ -410,2 +463,4 @@ * @return {?}

* Add a new item to print
* Used by directive
* \@internal
* @param {?} newPrintItem HTML id

@@ -422,2 +477,4 @@ * @return {?}

* Delete a print item from service
* Used by directive
* \@internal
* @param {?} idOfItemToRemove

@@ -457,7 +514,56 @@ * @return {?}

];
/** @nocollapse */ NgxPrinterService.ngInjectableDef = defineInjectable({ factory: function NgxPrinterService_Factory() { return new NgxPrinterService(inject(PrintServiceConfig, 8), inject(ComponentFactoryResolver), inject(INJECTOR)); }, token: NgxPrinterService, providedIn: "root" });
/** @nocollapse */ NgxPrinterService.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgxPrinterService_Factory() { return new NgxPrinterService(ɵɵinject(PrintServiceConfig, 8), ɵɵinject(ComponentFactoryResolver), ɵɵinject(INJECTOR)); }, token: NgxPrinterService, providedIn: "root" });
if (false) {
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.printWindowOpen;
/**
* \@internal
* @type {?}
* @private
*/
NgxPrinterService.prototype._printItems;
/** @type {?} */
NgxPrinterService.prototype.$printItems;
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.openNgxPrinter;
/**
* Wait time to render before open print dialog in ms
* Default is 200
* @type {?}
*/
NgxPrinterService.prototype.timeToWaitRender;
/**
* Class used in component when printing to current window
* @type {?}
*/
NgxPrinterService.prototype.renderClass;
/**
* Open new window to print or not
* Default is true
* @type {?}
*/
NgxPrinterService.prototype.printOpenWindow;
/** @type {?} */
NgxPrinterService.prototype.$printWindowOpen;
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.resolver;
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.injector;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -470,6 +576,23 @@ /**

}
if (false) {
/**
* HTML id of anchor
* @type {?}
*/
PrintItem.prototype.id;
/**
* Optional name
* @type {?}
*/
PrintItem.prototype.printDisplayName;
/**
* HTML Element
* @type {?}
*/
PrintItem.prototype.nativeElement;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -524,6 +647,23 @@ /**

};
if (false) {
/**
* Optional name to be shown in an component
* @type {?}
*/
PrintItemDirective.prototype.printName;
/**
* @type {?}
* @private
*/
PrintItemDirective.prototype.el;
/**
* @type {?}
* @private
*/
PrintItemDirective.prototype.printerService;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -553,3 +693,3 @@ class NgxPrinterModule {

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -559,7 +699,6 @@

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { NgxPrinterService, NgxPrinterComponent, NgxPrinterModule, PrintItem, PrintItemDirective, PrintServiceConfig };
//# sourceMappingURL=ngx-printer.js.map
export { NgxPrinterComponent, NgxPrinterModule, NgxPrinterService, PrintItem, PrintItemDirective, PrintServiceConfig };
//# sourceMappingURL=ngx-printer.js.map

@@ -0,7 +1,7 @@

import { EventEmitter, Component, ElementRef, Renderer2, Output, TemplateRef, Injectable, Optional, ComponentFactoryResolver, Injector, ɵɵdefineInjectable, ɵɵinject, INJECTOR, Directive, Input, NgModule } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { Component, Renderer2, ElementRef, Output, EventEmitter, Injectable, TemplateRef, ComponentFactoryResolver, Injector, Optional, NgModule, Directive, Input, defineInjectable, inject, INJECTOR } from '@angular/core';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -134,6 +134,31 @@ /**

}());
if (false) {
/**
* @type {?}
* @private
*/
NgxPrinterComponent.prototype._renderClass;
/**
* Display single image
* @type {?}
* @private
*/
NgxPrinterComponent.prototype._imgSrc;
/** @type {?} */
NgxPrinterComponent.prototype.completed;
/**
* @type {?}
* @private
*/
NgxPrinterComponent.prototype.elementRef;
/**
* @type {?}
* @private
*/
NgxPrinterComponent.prototype.renderer;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -159,6 +184,23 @@ /**

}());
if (false) {
/**
* Print in a new window or not
* @type {?}
*/
PrintServiceConfig.prototype.printOpenWindow;
/**
* Wait time before opening print dialog
* @type {?}
*/
PrintServiceConfig.prototype.timeToWaitRender;
/**
* Class name to be used when printing in current window
* @type {?}
*/
PrintServiceConfig.prototype.renderClass;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -173,2 +215,5 @@ /**

this.printWindowOpen = new BehaviorSubject(false);
/**
* \@internal
*/
this._printItems = new BehaviorSubject([]);

@@ -224,2 +269,4 @@ this.$printItems = this._printItems.asObservable();

* Print a div identified by its id
* @example
* this.printerService.printDiv('printDiv');
*/

@@ -229,2 +276,4 @@ /**

* Print a div identified by its id
* \@example
* this.printerService.printDiv('printDiv');
* @param {?} divID

@@ -236,2 +285,4 @@ * @return {?}

* Print a div identified by its id
* \@example
* this.printerService.printDiv('printDiv');
* @param {?} divID

@@ -251,3 +302,3 @@ * @return {?}

/***
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -257,3 +308,3 @@ */

*
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -265,3 +316,3 @@ * @param {?} className

*
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -282,7 +333,11 @@ * @param {?} className

/**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* @param contentToPrint
* @example
* this.printerService.printAngular(this.PrintTemplateTpl);
*/
/**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* \@example
* this.printerService.printAngular(this.PrintTemplateTpl);
* @param {?} contentToPrint

@@ -292,3 +347,5 @@ * @return {?}

NgxPrinterService.prototype.printAngular = /**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* \@example
* this.printerService.printAngular(this.PrintTemplateTpl);
* @param {?} contentToPrint

@@ -304,5 +361,9 @@ * @return {?}

* Print single img
* @example
* this.printerService.printImg('assets/bratwurst.jpg');
*/
/**
* Print single img
* \@example
* this.printerService.printImg('assets/bratwurst.jpg');
* @param {?} imgSrc

@@ -313,2 +374,4 @@ * @return {?}

* Print single img
* \@example
* this.printerService.printImg('assets/bratwurst.jpg');
* @param {?} imgSrc

@@ -334,7 +397,11 @@ * @return {?}

/**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* @param nativeElement
* @example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
*/
/**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* \@example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
* @param {?} nativeElement

@@ -344,3 +411,5 @@ * @return {?}

NgxPrinterService.prototype.printHTMLElement = /**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* \@example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
* @param {?} nativeElement

@@ -556,2 +625,4 @@ * @return {?}

* Add a new item to print
* Used by directive
* @internal
* @param newPrintItem HTML id

@@ -561,2 +632,4 @@ */

* Add a new item to print
* Used by directive
* \@internal
* @param {?} newPrintItem HTML id

@@ -567,2 +640,4 @@ * @return {?}

* Add a new item to print
* Used by directive
* \@internal
* @param {?} newPrintItem HTML id

@@ -579,2 +654,4 @@ * @return {?}

* Delete a print item from service
* Used by directive
* @internal
* @param idOfItemToRemove

@@ -584,2 +661,4 @@ */

* Delete a print item from service
* Used by directive
* \@internal
* @param {?} idOfItemToRemove

@@ -590,2 +669,4 @@ * @return {?}

* Delete a print item from service
* Used by directive
* \@internal
* @param {?} idOfItemToRemove

@@ -633,9 +714,58 @@ * @return {?}

]; };
/** @nocollapse */ NgxPrinterService.ngInjectableDef = defineInjectable({ factory: function NgxPrinterService_Factory() { return new NgxPrinterService(inject(PrintServiceConfig, 8), inject(ComponentFactoryResolver), inject(INJECTOR)); }, token: NgxPrinterService, providedIn: "root" });
/** @nocollapse */ NgxPrinterService.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgxPrinterService_Factory() { return new NgxPrinterService(ɵɵinject(PrintServiceConfig, 8), ɵɵinject(ComponentFactoryResolver), ɵɵinject(INJECTOR)); }, token: NgxPrinterService, providedIn: "root" });
return NgxPrinterService;
}());
if (false) {
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.printWindowOpen;
/**
* \@internal
* @type {?}
* @private
*/
NgxPrinterService.prototype._printItems;
/** @type {?} */
NgxPrinterService.prototype.$printItems;
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.openNgxPrinter;
/**
* Wait time to render before open print dialog in ms
* Default is 200
* @type {?}
*/
NgxPrinterService.prototype.timeToWaitRender;
/**
* Class used in component when printing to current window
* @type {?}
*/
NgxPrinterService.prototype.renderClass;
/**
* Open new window to print or not
* Default is true
* @type {?}
*/
NgxPrinterService.prototype.printOpenWindow;
/** @type {?} */
NgxPrinterService.prototype.$printWindowOpen;
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.resolver;
/**
* @type {?}
* @private
*/
NgxPrinterService.prototype.injector;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -653,6 +783,23 @@ /**

}());
if (false) {
/**
* HTML id of anchor
* @type {?}
*/
PrintItem.prototype.id;
/**
* Optional name
* @type {?}
*/
PrintItem.prototype.printDisplayName;
/**
* HTML Element
* @type {?}
*/
PrintItem.prototype.nativeElement;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -710,6 +857,23 @@ /**

}());
if (false) {
/**
* Optional name to be shown in an component
* @type {?}
*/
PrintItemDirective.prototype.printName;
/**
* @type {?}
* @private
*/
PrintItemDirective.prototype.el;
/**
* @type {?}
* @private
*/
PrintItemDirective.prototype.printerService;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -746,3 +910,3 @@ var NgxPrinterModule = /** @class */ (function () {

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -752,7 +916,6 @@

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { NgxPrinterService, NgxPrinterComponent, NgxPrinterModule, PrintItem, PrintItemDirective, PrintServiceConfig };
//# sourceMappingURL=ngx-printer.js.map
export { NgxPrinterComponent, NgxPrinterModule, NgxPrinterService, PrintItem, PrintItemDirective, PrintServiceConfig };
//# sourceMappingURL=ngx-printer.js.map

@@ -13,2 +13,5 @@ import { PrintItem } from './print-item';

private printWindowOpen;
/**
* @internal
*/
private _printItems;

@@ -40,6 +43,8 @@ $printItems: Observable<PrintItem[]>;

* Print a div identified by its id
* @example
* this.printerService.printDiv('printDiv');
*/
printDiv(divID: string): void;
/***
* Print an Element identified by its className
* Print an Element identified by its className using getElementsByClassName
* Prints the first found

@@ -49,4 +54,6 @@ */

/**
* Print Angular TemplateRef or Component or String
* Print Angular TemplateRef or a Component or String
* @param contentToPrint
* @example
* this.printerService.printAngular(this.PrintTemplateTpl);
*/

@@ -56,7 +63,11 @@ printAngular(contentToPrint: any): void;

* Print single img
* @example
* this.printerService.printImg('assets/bratwurst.jpg');
*/
printImg(imgSrc: string): void;
/**
* Print native Element (HTML Element)
* Print an native Element (HTML Element)
* @param nativeElement
* @example
* this.printerService.printHTMLElement(this.PrintComponent.nativeElement);
*/

@@ -90,2 +101,4 @@ printHTMLElement(nativeElement: HTMLElement): void;

* Add a new item to print
* Used by directive
* @internal
* @param newPrintItem HTML id

@@ -96,2 +109,4 @@ */

* Delete a print item from service
* Used by directive
* @internal
* @param idOfItemToRemove

@@ -98,0 +113,0 @@ */

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":4,"metadata":{"Content":{"__symbolic":"interface"},"NgxPrinterService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":19,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":50,"character":5}}],null,null],"parameters":[{"__symbolic":"reference","name":"PrintServiceConfig"},{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":51,"character":22},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":52,"character":22}]}],"setRootConfigOptions":[{"__symbolic":"method"}],"printDiv":[{"__symbolic":"method"}],"printByClassName":[{"__symbolic":"method"}],"printAngular":[{"__symbolic":"method"}],"printImg":[{"__symbolic":"method"}],"printHTMLElement":[{"__symbolic":"method"}],"createComponent":[{"__symbolic":"method"}],"print":[{"__symbolic":"method"}],"printInNewWindow":[{"__symbolic":"method"}],"printWindow":[{"__symbolic":"method"}],"printCurrentWindow":[{"__symbolic":"method"}],"resolveNgContent":[{"__symbolic":"method"}],"addPrintItem":[{"__symbolic":"method"}],"removePrintItem":[{"__symbolic":"method"}],"printPrintItem":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgxPrinterComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":12,"character":1},"arguments":[{"selector":"ngx-printer","template":"\n <ng-content></ng-content>\n ","styles":[":host.default{background-color:#fff;height:100%;width:100%;position:fixed;top:0;left:0;margin:0;z-index:1000000}"]}]}],"members":{"completed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":42,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":44,"character":34},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":44,"character":64}]}],"ngOnInit":[{"__symbolic":"method"}],"setCustomClass":[{"__symbolic":"method"}],"addImage":[{"__symbolic":"method"}]}},"NgxPrinterModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgxPrinterComponent"},{"__symbolic":"reference","name":"PrintItemDirective"}],"imports":[],"exports":[{"__symbolic":"reference","name":"NgxPrinterComponent"},{"__symbolic":"reference","name":"PrintItemDirective"}],"entryComponents":[{"__symbolic":"reference","name":"NgxPrinterComponent"}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"NgxPrinterModule"},"providers":[{"provide":{"__symbolic":"reference","name":"PrintServiceConfig"},"useValue":{"__symbolic":"reference","name":"config"}}]}}}},"PrintItem":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor"}]}},"PrintItemDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":9,"character":1},"arguments":[{"selector":"[ngxPrintItem]"}]}],"members":{"printName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":20,"character":26},{"__symbolic":"reference","name":"NgxPrinterService"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"PrintServiceConfig":{"__symbolic":"class","members":{}}},"origins":{"Content":"./lib/ngx-printer.service","NgxPrinterService":"./lib/ngx-printer.service","NgxPrinterComponent":"./lib/ngx-printer.component","NgxPrinterModule":"./lib/ngx-printer.module","PrintItem":"./lib/print-item","PrintItemDirective":"./lib/print-item.directive","PrintServiceConfig":"./lib/print-service-config"},"importAs":"ngx-printer"}
{"__symbolic":"module","version":4,"metadata":{"Content":{"__symbolic":"interface"},"NgxPrinterService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":18,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":52,"character":5}}],null,null],"parameters":[{"__symbolic":"reference","name":"PrintServiceConfig"},{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":53,"character":22},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":54,"character":22}]}],"setRootConfigOptions":[{"__symbolic":"method"}],"printDiv":[{"__symbolic":"method"}],"printByClassName":[{"__symbolic":"method"}],"printAngular":[{"__symbolic":"method"}],"printImg":[{"__symbolic":"method"}],"printHTMLElement":[{"__symbolic":"method"}],"createComponent":[{"__symbolic":"method"}],"print":[{"__symbolic":"method"}],"printInNewWindow":[{"__symbolic":"method"}],"printWindow":[{"__symbolic":"method"}],"printCurrentWindow":[{"__symbolic":"method"}],"resolveNgContent":[{"__symbolic":"method"}],"addPrintItem":[{"__symbolic":"method"}],"removePrintItem":[{"__symbolic":"method"}],"printPrintItem":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgxPrinterComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":12,"character":1},"arguments":[{"selector":"ngx-printer","template":"\n <ng-content></ng-content>\n ","styles":[":host.default{background-color:#fff;height:100%;width:100%;position:fixed;top:0;left:0;margin:0;z-index:1000000}"]}]}],"members":{"completed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":42,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":44,"character":34},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":44,"character":64}]}],"ngOnInit":[{"__symbolic":"method"}],"setCustomClass":[{"__symbolic":"method"}],"addImage":[{"__symbolic":"method"}]}},"NgxPrinterModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgxPrinterComponent"},{"__symbolic":"reference","name":"PrintItemDirective"}],"imports":[],"exports":[{"__symbolic":"reference","name":"NgxPrinterComponent"},{"__symbolic":"reference","name":"PrintItemDirective"}],"entryComponents":[{"__symbolic":"reference","name":"NgxPrinterComponent"}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"NgxPrinterModule"},"providers":[{"provide":{"__symbolic":"reference","name":"PrintServiceConfig"},"useValue":{"__symbolic":"reference","name":"config"}}]}}}},"PrintItem":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor"}]}},"PrintItemDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":9,"character":1},"arguments":[{"selector":"[ngxPrintItem]"}]}],"members":{"printName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":20,"character":26},{"__symbolic":"reference","name":"NgxPrinterService"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"PrintServiceConfig":{"__symbolic":"class","members":{}}},"origins":{"Content":"./lib/ngx-printer.service","NgxPrinterService":"./lib/ngx-printer.service","NgxPrinterComponent":"./lib/ngx-printer.component","NgxPrinterModule":"./lib/ngx-printer.module","PrintItem":"./lib/print-item","PrintItemDirective":"./lib/print-item.directive","PrintServiceConfig":"./lib/print-service-config"},"importAs":"ngx-printer"}
{
"name": "ngx-printer",
"version": "0.1.8",
"version": "0.2.0",
"peerDependencies": {

@@ -5,0 +5,0 @@ "@angular/common": "^7.1.0",

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