ngx-currency-input
Advanced tools
Comparing version 1.0.1 to 1.0.2
@@ -242,3 +242,3 @@ (function (global, factory) { | ||
this.injector = injector; | ||
this.formatOnlyOnBlur = true; | ||
this.formatOnlyOnBlur = false; | ||
this.decimalPointSeparator = this.getLocaleDecimalPointSeparator(); | ||
@@ -245,0 +245,0 @@ this.thousandsSeparator = this.getLocaleThousandsSeparator(); |
@@ -15,3 +15,3 @@ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common"),require("@angular/forms")):"function"==typeof define&&define.amd?define("ngx-currency-input",["exports","@angular/core","@angular/common","@angular/forms"],e):e((t=t||self)["ngx-currency-input"]={},t.ng.core,t.ng.common,t.ng.forms)}(this,(function(t,e,r,o){"use strict"; | ||
PERFORMANCE OF THIS SOFTWARE. | ||
***************************************************************************** */function n(t,e,r,o){var n,i=arguments.length,a=i<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,o);else for(var s=t.length-1;s>=0;s--)(n=t[s])&&(a=(i<3?n(a):i>3?n(e,r,a):n(e,r))||a);return i>3&&a&&Object.defineProperty(e,r,a),a}var i={provide:o.NG_VALUE_ACCESSOR,useExisting:e.forwardRef((function(){return s})),multi:!0},a={provide:o.NG_VALIDATORS,useExisting:e.forwardRef((function(){return s})),multi:!0},s=function(){function t(t,e,r,o){this.decimalPipe=t,this.elementRef=e,this.renderer=r,this.injector=o,this.formatOnlyOnBlur=!0,this.decimalPointSeparator=this.getLocaleDecimalPointSeparator(),this.thousandsSeparator=this.getLocaleThousandsSeparator(),this.allowedKeys=["Backspace","Tab","End","Home","Delete","Del","Ctrl","ArrowLeft","ArrowRight","Left","Right"],this.allowedKeysUsedWithControl=["x","c","v","a","z"],this.numberWithUpTo2DecimalsRegex=new RegExp("^([0-9]+)?(\\"+this.decimalPointSeparator+"[0-9]?[0-9]?)?$"),this.previousRawInputValue="";var n=this.getLocaleDecimalPointSeparator();this.numbersAndDecimalPointSeparatorRegex=new RegExp("[0-9"+n+"]","g")}return t.prototype.ngOnInit=function(){this.ngControl=this.injector.get(o.NgControl)},t.prototype.handleBlur=function(){this.reformatInput(),this.onTouch()},t.prototype.handleInput=function(t,e,r){var o=r.data;if(o!==this.decimalPointSeparator||!this.hasOnlyOneDecimalSeparatorAtTheEnd(t))if(""!==t){var n=this.getCursorPosition(e);if(this.hasNoMoreThan2DecimalDigits(t)&&!this.isNumberTooLarge(t)){var i=this.formatOnlyOnBlur?t:this.formatPriceToUpTo2Decimal(t);this.previousRawInputValue=i,this.onChange(i),this.setNativeInputValue(i);var a=this.getDiffInSeparators(t,i);this.moveCursor(e,n,a)}else if(1!==(null==o?void 0:o.length)||o===this.decimalPointSeparator||n.start===(null==t?void 0:t.length)||n.end===(null==t?void 0:t.length)||this.isNumberTooLarge(t)){this.setNativeInputValue(this.previousRawInputValue);var s=o?-o.length:0;this.moveCursor(e,n,s)}else{i=this.replaceAt(this.previousRawInputValue,n.start-1,o);this.previousRawInputValue=i,this.onChange(i),this.setNativeInputValue(i),this.moveCursor(e,n)}}else this.onChange("")},t.prototype.keyDownEvent=function(t){this.isSpecialAllowedKey(t)||this.isNumberKey(t)||t.preventDefault()},t.prototype.isNumberTooLarge=function(t){return this.parseLocaleStringToNumber(t)>=1e13},t.prototype.replaceAt=function(t,e,r){return t.substr(0,e)+r+t.substr(e+r.length)},t.prototype.isNumberKey=function(t){return t.key&&1===t.key.length&&!!String(t.key).match(this.numbersAndDecimalPointSeparatorRegex)},t.prototype.isSpecialAllowedKey=function(t){return this.allowedKeys.includes(t.key)||this.isAllowedKeyWithControl(t)},t.prototype.isAllowedKeyWithControl=function(t){return!(!t.ctrlKey&&!t.metaKey)&&(this.allowedKeysUsedWithControl.includes(t.key)||this.allowedKeysUsedWithControl.map((function(t){return t.toUpperCase()})).includes(t.key))},t.prototype.getValueWithoutThousandsSeparator=function(t){return t.split(this.thousandsSeparator).join("")},t.prototype.hasNoMoreThan2DecimalDigits=function(t){var e=this.getValueWithoutThousandsSeparator(t);return this.numberWithUpTo2DecimalsRegex.test(e)},t.prototype.reformatInput=function(t){var e=void 0!==t?t:this.ngControl.value;if(e||0===e){var r=this.formatPriceTo2Decimal(e);this.setNativeInputValue(r)}else this.setNativeInputValue("")},t.prototype.formatPriceTo2Decimal=function(t){var e=("string"==typeof t?this.parseLocaleStringToNumber(t):t)||0;return this.decimalPipe.transform(e,"1.2-2")},t.prototype.formatPriceToUpTo2Decimal=function(t){var e,r,o="^[0-9]*\\"+this.decimalPointSeparator+"(0+)$",n="^[0-9]*\\"+this.decimalPointSeparator+"[1-9](0+)$",i=this.getValueWithoutThousandsSeparator(t),a=(null===(e=i.match(o))||void 0===e?void 0:e[1].length)||0,s=(null===(r=i.match(n))||void 0===r?void 0:r[1].length)||0,u=this.decimalPipe.transform(this.parseLocaleStringToNumber(i),"1.0-2");return a>0?u+this.decimalPointSeparator+"00".slice(0,a):s>0?u+"0":u},t.prototype.getNumberOfThousandsSeparators=function(t){return(t||"").split(this.thousandsSeparator).length-1},t.prototype.getDiffInSeparators=function(t,e){var r=this.getNumberOfThousandsSeparators(t);return this.getNumberOfThousandsSeparators(e)-r},t.prototype.hasOnlyOneDecimalSeparatorAtTheEnd=function(t){return 2===t.split(this.decimalPointSeparator).length&&t.slice(-1)===this.decimalPointSeparator},t.prototype.parseLocaleStringToNumber=function(t){var e=new RegExp("[^-+0-9"+this.decimalPointSeparator+"]","g"),r=String(t).replace(e,"").replace(this.decimalPointSeparator,".");return parseFloat(r)},t.prototype.setNativeInputValue=function(t){this.renderer.setProperty(this.elementRef.nativeElement,"value",t)},t.prototype.getNativeInputValue=function(){return this.elementRef.nativeElement.value},t.prototype.getCursorPosition=function(t){return{start:t.selectionStart,end:t.selectionEnd}},t.prototype.setCursorPosition=function(t,e){t.setSelectionRange(e.start>=0?e.start:0,e.end>=0?e.end:0)},t.prototype.moveCursor=function(t,e,r){void 0===r&&(r=0),this.setCursorPosition(t,{start:e.start+r,end:e.end+r})},t.prototype.numberOfDecimalPlaces=function(t){var e;return(null===(e=(t+"").split(".")[1])||void 0===e?void 0:e.length)||0},t.prototype.getLocaleDecimalPointSeparator=function(){return this.decimalPipe.transform(1.1,"1.1").charAt(1)},t.prototype.getLocaleThousandsSeparator=function(){var t=this.decimalPipe.transform(1e3,"1.0");return 5===t.length?t.charAt(1):""},t.prototype.registerOnChange=function(t){var e=this;this.onChange=function(r){var o=""===r?null:e.parseLocaleStringToNumber(r);console.log("Emitting value",o),t(o)}},t.prototype.registerOnTouched=function(t){this.onTouch=t},t.prototype.setDisabledState=function(t){this.renderer.setProperty(this.elementRef.nativeElement,"disabled",t)},t.prototype.writeValue=function(t){this.reformatInput(t),this.previousRawInputValue=this.getNativeInputValue()},t.prototype.validate=function(t){var e={};return t.value>this.max&&(e.max=!0),t.value<this.min&&(e.min=!0),0===Object.keys(e).length?null:e},t.ctorParameters=function(){return[{type:r.DecimalPipe},{type:e.ElementRef},{type:e.Renderer2},{type:e.Injector}]},n([e.Input()],t.prototype,"formatOnlyOnBlur",void 0),n([e.Input()],t.prototype,"min",void 0),n([e.Input()],t.prototype,"max",void 0),n([e.HostListener("blur")],t.prototype,"handleBlur",null),n([e.HostListener("input",["$event.target.value","$event.target","$event"])],t.prototype,"handleInput",null),n([e.HostListener("keydown",["$event"])],t.prototype,"keyDownEvent",null),t=n([e.Directive({selector:"input[formControlName][ngxCurrencyInput], input[formControl][ngxCurrencyInput], input[ngModel][ngxCurrencyInput]",providers:[r.DecimalPipe,i,a]})],t)}(),u=function(){function t(){}return t=n([e.NgModule({declarations:[s],imports:[],exports:[s]})],t)}();t.CurrencyInputDirective=s,t.NgxCurrencyInputModule=u,Object.defineProperty(t,"__esModule",{value:!0})})); | ||
***************************************************************************** */function n(t,e,r,o){var n,i=arguments.length,a=i<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,o);else for(var s=t.length-1;s>=0;s--)(n=t[s])&&(a=(i<3?n(a):i>3?n(e,r,a):n(e,r))||a);return i>3&&a&&Object.defineProperty(e,r,a),a}var i={provide:o.NG_VALUE_ACCESSOR,useExisting:e.forwardRef((function(){return s})),multi:!0},a={provide:o.NG_VALIDATORS,useExisting:e.forwardRef((function(){return s})),multi:!0},s=function(){function t(t,e,r,o){this.decimalPipe=t,this.elementRef=e,this.renderer=r,this.injector=o,this.formatOnlyOnBlur=!1,this.decimalPointSeparator=this.getLocaleDecimalPointSeparator(),this.thousandsSeparator=this.getLocaleThousandsSeparator(),this.allowedKeys=["Backspace","Tab","End","Home","Delete","Del","Ctrl","ArrowLeft","ArrowRight","Left","Right"],this.allowedKeysUsedWithControl=["x","c","v","a","z"],this.numberWithUpTo2DecimalsRegex=new RegExp("^([0-9]+)?(\\"+this.decimalPointSeparator+"[0-9]?[0-9]?)?$"),this.previousRawInputValue="";var n=this.getLocaleDecimalPointSeparator();this.numbersAndDecimalPointSeparatorRegex=new RegExp("[0-9"+n+"]","g")}return t.prototype.ngOnInit=function(){this.ngControl=this.injector.get(o.NgControl)},t.prototype.handleBlur=function(){this.reformatInput(),this.onTouch()},t.prototype.handleInput=function(t,e,r){var o=r.data;if(o!==this.decimalPointSeparator||!this.hasOnlyOneDecimalSeparatorAtTheEnd(t))if(""!==t){var n=this.getCursorPosition(e);if(this.hasNoMoreThan2DecimalDigits(t)&&!this.isNumberTooLarge(t)){var i=this.formatOnlyOnBlur?t:this.formatPriceToUpTo2Decimal(t);this.previousRawInputValue=i,this.onChange(i),this.setNativeInputValue(i);var a=this.getDiffInSeparators(t,i);this.moveCursor(e,n,a)}else if(1!==(null==o?void 0:o.length)||o===this.decimalPointSeparator||n.start===(null==t?void 0:t.length)||n.end===(null==t?void 0:t.length)||this.isNumberTooLarge(t)){this.setNativeInputValue(this.previousRawInputValue);var s=o?-o.length:0;this.moveCursor(e,n,s)}else{i=this.replaceAt(this.previousRawInputValue,n.start-1,o);this.previousRawInputValue=i,this.onChange(i),this.setNativeInputValue(i),this.moveCursor(e,n)}}else this.onChange("")},t.prototype.keyDownEvent=function(t){this.isSpecialAllowedKey(t)||this.isNumberKey(t)||t.preventDefault()},t.prototype.isNumberTooLarge=function(t){return this.parseLocaleStringToNumber(t)>=1e13},t.prototype.replaceAt=function(t,e,r){return t.substr(0,e)+r+t.substr(e+r.length)},t.prototype.isNumberKey=function(t){return t.key&&1===t.key.length&&!!String(t.key).match(this.numbersAndDecimalPointSeparatorRegex)},t.prototype.isSpecialAllowedKey=function(t){return this.allowedKeys.includes(t.key)||this.isAllowedKeyWithControl(t)},t.prototype.isAllowedKeyWithControl=function(t){return!(!t.ctrlKey&&!t.metaKey)&&(this.allowedKeysUsedWithControl.includes(t.key)||this.allowedKeysUsedWithControl.map((function(t){return t.toUpperCase()})).includes(t.key))},t.prototype.getValueWithoutThousandsSeparator=function(t){return t.split(this.thousandsSeparator).join("")},t.prototype.hasNoMoreThan2DecimalDigits=function(t){var e=this.getValueWithoutThousandsSeparator(t);return this.numberWithUpTo2DecimalsRegex.test(e)},t.prototype.reformatInput=function(t){var e=void 0!==t?t:this.ngControl.value;if(e||0===e){var r=this.formatPriceTo2Decimal(e);this.setNativeInputValue(r)}else this.setNativeInputValue("")},t.prototype.formatPriceTo2Decimal=function(t){var e=("string"==typeof t?this.parseLocaleStringToNumber(t):t)||0;return this.decimalPipe.transform(e,"1.2-2")},t.prototype.formatPriceToUpTo2Decimal=function(t){var e,r,o="^[0-9]*\\"+this.decimalPointSeparator+"(0+)$",n="^[0-9]*\\"+this.decimalPointSeparator+"[1-9](0+)$",i=this.getValueWithoutThousandsSeparator(t),a=(null===(e=i.match(o))||void 0===e?void 0:e[1].length)||0,s=(null===(r=i.match(n))||void 0===r?void 0:r[1].length)||0,u=this.decimalPipe.transform(this.parseLocaleStringToNumber(i),"1.0-2");return a>0?u+this.decimalPointSeparator+"00".slice(0,a):s>0?u+"0":u},t.prototype.getNumberOfThousandsSeparators=function(t){return(t||"").split(this.thousandsSeparator).length-1},t.prototype.getDiffInSeparators=function(t,e){var r=this.getNumberOfThousandsSeparators(t);return this.getNumberOfThousandsSeparators(e)-r},t.prototype.hasOnlyOneDecimalSeparatorAtTheEnd=function(t){return 2===t.split(this.decimalPointSeparator).length&&t.slice(-1)===this.decimalPointSeparator},t.prototype.parseLocaleStringToNumber=function(t){var e=new RegExp("[^-+0-9"+this.decimalPointSeparator+"]","g"),r=String(t).replace(e,"").replace(this.decimalPointSeparator,".");return parseFloat(r)},t.prototype.setNativeInputValue=function(t){this.renderer.setProperty(this.elementRef.nativeElement,"value",t)},t.prototype.getNativeInputValue=function(){return this.elementRef.nativeElement.value},t.prototype.getCursorPosition=function(t){return{start:t.selectionStart,end:t.selectionEnd}},t.prototype.setCursorPosition=function(t,e){t.setSelectionRange(e.start>=0?e.start:0,e.end>=0?e.end:0)},t.prototype.moveCursor=function(t,e,r){void 0===r&&(r=0),this.setCursorPosition(t,{start:e.start+r,end:e.end+r})},t.prototype.numberOfDecimalPlaces=function(t){var e;return(null===(e=(t+"").split(".")[1])||void 0===e?void 0:e.length)||0},t.prototype.getLocaleDecimalPointSeparator=function(){return this.decimalPipe.transform(1.1,"1.1").charAt(1)},t.prototype.getLocaleThousandsSeparator=function(){var t=this.decimalPipe.transform(1e3,"1.0");return 5===t.length?t.charAt(1):""},t.prototype.registerOnChange=function(t){var e=this;this.onChange=function(r){var o=""===r?null:e.parseLocaleStringToNumber(r);console.log("Emitting value",o),t(o)}},t.prototype.registerOnTouched=function(t){this.onTouch=t},t.prototype.setDisabledState=function(t){this.renderer.setProperty(this.elementRef.nativeElement,"disabled",t)},t.prototype.writeValue=function(t){this.reformatInput(t),this.previousRawInputValue=this.getNativeInputValue()},t.prototype.validate=function(t){var e={};return t.value>this.max&&(e.max=!0),t.value<this.min&&(e.min=!0),0===Object.keys(e).length?null:e},t.ctorParameters=function(){return[{type:r.DecimalPipe},{type:e.ElementRef},{type:e.Renderer2},{type:e.Injector}]},n([e.Input()],t.prototype,"formatOnlyOnBlur",void 0),n([e.Input()],t.prototype,"min",void 0),n([e.Input()],t.prototype,"max",void 0),n([e.HostListener("blur")],t.prototype,"handleBlur",null),n([e.HostListener("input",["$event.target.value","$event.target","$event"])],t.prototype,"handleInput",null),n([e.HostListener("keydown",["$event"])],t.prototype,"keyDownEvent",null),t=n([e.Directive({selector:"input[formControlName][ngxCurrencyInput], input[formControl][ngxCurrencyInput], input[ngModel][ngxCurrencyInput]",providers:[r.DecimalPipe,i,a]})],t)}(),u=function(){function t(){}return t=n([e.NgModule({declarations:[s],imports:[],exports:[s]})],t)}();t.CurrencyInputDirective=s,t.NgxCurrencyInputModule=u,Object.defineProperty(t,"__esModule",{value:!0})})); | ||
//# sourceMappingURL=ngx-currency-input.umd.min.js.map |
@@ -21,3 +21,3 @@ import { __decorate } from "tslib"; | ||
this.injector = injector; | ||
this.formatOnlyOnBlur = true; | ||
this.formatOnlyOnBlur = false; | ||
this.decimalPointSeparator = this.getLocaleDecimalPointSeparator(); | ||
@@ -276,2 +276,2 @@ this.thousandsSeparator = this.getLocaleThousandsSeparator(); | ||
export { CurrencyInputDirective }; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWN1cnJlbmN5LWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1jdXJyZW5jeS1pbnB1dC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtY3VycmVuY3ktaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsU0FBUyxFQUlWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsTUFBTSxnQ0FBZ0MsR0FBUTtJQUM1QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7SUFDckQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSwyQkFBMkIsR0FBUTtJQUN2QyxPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDO0lBQ3JELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVlGLElBQWEsc0JBQXNCLEdBQW5DLE1BQWEsc0JBQXNCO0lBOEJqQyxZQUNVLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLFFBQWtCO1FBSGxCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBakNuQixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFJekIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLDhCQUE4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QUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRCxDQUFDO0NBQ0YsQ0FBQTs7WUEvUHdCLFdBQVc7WUFDWixVQUFVO1lBQ1osU0FBUztZQUNULFFBQVE7O0FBakNuQjtJQUFSLEtBQUssRUFBRTtnRUFBeUI7QUFDeEI7SUFBUixLQUFLLEVBQUU7bURBQWE7QUFDWjtJQUFSLEtBQUssRUFBRTttREFBYTtBQTBDckI7SUFEQyxZQUFZLENBQUMsTUFBTSxDQUFDO3dEQUlwQjtBQUdEO0lBREMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQzt5REF1Q3pFO0FBR0Q7SUFEQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7MERBT25DO0FBbEdVLHNCQUFzQjtJQUxsQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQ04sa0hBQWtIO1FBQ3BILFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRSwyQkFBMkIsQ0FBQztLQUN4RixDQUFDO0dBQ1csc0JBQXNCLENBOFJsQztTQTlSWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgZm9yd2FyZFJlZiwgUmVuZGVyZXIyLCBJbnB1dCwgSW5qZWN0b3IsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBOR19WQUxJREFUT1JTLFxuICBOZ0NvbnRyb2wsXG4gIEFic3RyYWN0Q29udHJvbCxcbiAgVmFsaWRhdG9yLFxuICBWYWxpZGF0aW9uRXJyb3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuY29uc3QgQ1VSUkVOQ1lESVJFQ1RJVkVfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEN1cnJlbmN5SW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuY29uc3QgQ1VSUkVOQ1lESVJFQ1RJVkVfVkFMSURBVDBSOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEN1cnJlbmN5SW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuaW50ZXJmYWNlIElDdXJzb3JQb3NpdGlvbiB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6XG4gICAgJ2lucHV0W2Zvcm1Db250cm9sTmFtZV1bbmd4Q3VycmVuY3lJbnB1dF0sIGlucHV0W2Zvcm1Db250cm9sXVtuZ3hDdXJyZW5jeUlucHV0XSwgaW5wdXRbbmdNb2RlbF1bbmd4Q3VycmVuY3lJbnB1dF0nLFxuICBwcm92aWRlcnM6IFtEZWNpbWFsUGlwZSwgQ1VSUkVOQ1lESVJFQ1RJVkVfVkFMVUVfQUNDRVNTT1IsIENVUlJFTkNZRElSRUNUSVZFX1ZBTElEQVQwUl1cbn0pXG5leHBvcnQgY2xhc3MgQ3VycmVuY3lJbnB1dERpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZvcm1hdE9ubHlPbkJsdXIgPSB0cnVlO1xuICBASW5wdXQoKSBtaW46IG51bWJlcjtcbiAgQElucHV0KCkgbWF4OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBkZWNpbWFsUG9pbnRTZXBhcmF0b3IgPSB0aGlzLmdldExvY2FsZURlY2ltYWxQb2ludFNlcGFyYXRvcigpO1xuICBwcml2YXRlIHRob3VzYW5kc1NlcGFyYXRvciA9IHRoaXMuZ2V0TG9jYWxlVGhvdXNhbmRzU2VwYXJhdG9yKCk7XG5cbiAgcHJpdmF0ZSBuZ0NvbnRyb2w6IE5nQ29udHJvbDtcbiAgcHJpdmF0ZSBudW1iZXJzQW5kRGVjaW1hbFBvaW50U2VwYXJhdG9yUmVnZXg6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkS2V5czogc3RyaW5nW10gPSBbXG4gICAgJ0JhY2tzcGFjZScsXG4gICAgJ1RhYicsXG4gICAgJ0VuZCcsXG4gICAgJ0hvbWUnLFxuICAgICdEZWxldGUnLFxuICAgICdEZWwnLFxuICAgICdDdHJsJyxcbiAgICAnQXJyb3dMZWZ0JyxcbiAgICAnQXJyb3dSaWdodCcsXG4gICAgJ0xlZnQnLFxuICAgICdSaWdodCdcbiAgXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkS2V5c1VzZWRXaXRoQ29udHJvbDogc3RyaW5nW10gPSBbJ3gnLCAnYycsICd2JywgJ2EnLCAneiddO1xuICBwcml2YXRlIG51bWJlcldpdGhVcFRvMkRlY2ltYWxzUmVnZXggPSBuZXcgUmVnRXhwKGBeKFswLTldKyk/KFxcXFwke3RoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yfVswLTldP1swLTldPyk/JGApO1xuICBwcml2YXRlIHByZXZpb3VzUmF3SW5wdXRWYWx1ZSA9ICcnO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBwcml2YXRlIG9uVG91Y2g6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgICBjb25zdCBsb2NhbGVEZWNpbWFsUG9pbnRTZXBhcmF0b3IgPSB0aGlzLmdldExvY2FsZURlY2ltYWxQb2ludFNlcGFyYXRvcigpO1xuICAgIHRoaXMubnVtYmVyc0FuZERlY2ltYWxQb2ludFNlcGFyYXRvclJlZ2V4ID0gbmV3IFJlZ0V4cChgWzAtOSR7bG9jYWxlRGVjaW1hbFBvaW50U2VwYXJhdG9yfV1gLCAnZycpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5uZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIGhhbmRsZUJsdXIoKSB7XG4gICAgdGhpcy5yZWZvcm1hdElucHV0KCk7XG4gICAgdGhpcy5vblRvdWNoKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50LnRhcmdldC52YWx1ZScsICckZXZlbnQudGFyZ2V0JywgJyRldmVudCddKVxuICBoYW5kbGVJbnB1dChyYXdJbnB1dFZhbHVlOiBzdHJpbmcsIGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQsIGV2ZW50OiBJbnB1dEV2ZW50KSB7XG4gICAgY29uc3QgZW50ZXJlZERhdGEgPSBldmVudC5kYXRhO1xuICAgIGlmIChlbnRlcmVkRGF0YSA9PT0gdGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3IgJiYgdGhpcy5oYXNPbmx5T25lRGVjaW1hbFNlcGFyYXRvckF0VGhlRW5kKHJhd0lucHV0VmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyYXdJbnB1dFZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5vbkNoYW5nZSgnJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbEN1cnNvclBvc2l0aW9uID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihpbnB1dEVsKTtcblxuICAgIGlmICh0aGlzLmhhc05vTW9yZVRoYW4yRGVjaW1hbERpZ2l0cyhyYXdJbnB1dFZhbHVlKSAmJiAhdGhpcy5pc051bWJlclRvb0xhcmdlKHJhd0lucHV0VmFsdWUpKSB7XG4gICAgICBjb25zdCBuZXdSYXdJbnB1dFZhbHVlID0gdGhpcy5mb3JtYXRPbmx5T25CbHVyID8gcmF3SW5wdXRWYWx1ZSA6IHRoaXMuZm9ybWF0UHJpY2VUb1VwVG8yRGVjaW1hbChyYXdJbnB1dFZhbHVlKTtcbiAgICAgIHRoaXMucHJldmlvdXNSYXdJbnB1dFZhbHVlID0gbmV3UmF3SW5wdXRWYWx1ZTtcbiAgICAgIHRoaXMub25DaGFuZ2UobmV3UmF3SW5wdXRWYWx1ZSk7XG4gICAgICB0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUobmV3UmF3SW5wdXRWYWx1ZSk7XG5cbiAgICAgIGNvbnN0IGRpZmZJblNlcGFyYXRvcnMgPSB0aGlzLmdldERpZmZJblNlcGFyYXRvcnMocmF3SW5wdXRWYWx1ZSwgbmV3UmF3SW5wdXRWYWx1ZSk7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoaW5wdXRFbCwgaW5pdGlhbEN1cnNvclBvc2l0aW9uLCBkaWZmSW5TZXBhcmF0b3JzKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZW50ZXJlZERhdGE/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgZW50ZXJlZERhdGEgIT09IHRoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yICYmXG4gICAgICBpbml0aWFsQ3Vyc29yUG9zaXRpb24uc3RhcnQgIT09IHJhd0lucHV0VmFsdWU/Lmxlbmd0aCAmJlxuICAgICAgaW5pdGlhbEN1cnNvclBvc2l0aW9uLmVuZCAhPT0gcmF3SW5wdXRWYWx1ZT8ubGVuZ3RoICYmXG4gICAgICAhdGhpcy5pc051bWJlclRvb0xhcmdlKHJhd0lucHV0VmFsdWUpXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIHNlY3Rpb24gYWxsb3dzIHRvIG92ZXJyaWRlIG51bWJlcnMgYWZ0ZXIgZGVjaW1hbCBwb2ludFxuICAgICAgY29uc3QgbmV3UmF3SW5wdXRWYWx1ZSA9IHRoaXMucmVwbGFjZUF0KHRoaXMucHJldmlvdXNSYXdJbnB1dFZhbHVlLCBpbml0aWFsQ3Vyc29yUG9zaXRpb24uc3RhcnQgLSAxLCBlbnRlcmVkRGF0YSk7XG4gICAgICB0aGlzLnByZXZpb3VzUmF3SW5wdXRWYWx1ZSA9IG5ld1Jhd0lucHV0VmFsdWU7XG4gICAgICB0aGlzLm9uQ2hhbmdlKG5ld1Jhd0lucHV0VmFsdWUpO1xuICAgICAgdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKG5ld1Jhd0lucHV0VmFsdWUpO1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKGlucHV0RWwsIGluaXRpYWxDdXJzb3JQb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSh0aGlzLnByZXZpb3VzUmF3SW5wdXRWYWx1ZSk7XG4gICAgICBjb25zdCBjdXJzb3JEaWZmID0gZW50ZXJlZERhdGEgPyAtZW50ZXJlZERhdGEubGVuZ3RoIDogMDtcbiAgICAgIHRoaXMubW92ZUN1cnNvcihpbnB1dEVsLCBpbml0aWFsQ3Vyc29yUG9zaXRpb24sIGN1cnNvckRpZmYpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlEb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc1NwZWNpYWxBbGxvd2VkS2V5KGV2ZW50KSB8fCB0aGlzLmlzTnVtYmVyS2V5KGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIGlzTnVtYmVyVG9vTGFyZ2UocmF3SW5wdXRWYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnBhcnNlTG9jYWxlU3RyaW5nVG9OdW1iZXIocmF3SW5wdXRWYWx1ZSk7XG4gICAgcmV0dXJuIHZhbHVlID49IDEwMDAwMDAwMDAwMDAwO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXQob3JpZ2luYWxWYWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCByZXBsYWNlbWVudDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsVmFsdWUuc3Vic3RyKDAsIGluZGV4KSArIHJlcGxhY2VtZW50ICsgb3JpZ2luYWxWYWx1ZS5zdWJzdHIoaW5kZXggKyByZXBsYWNlbWVudC5sZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc051bWJlcktleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBldmVudC5rZXkgJiYgZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSAmJiAhIVN0cmluZyhldmVudC5rZXkpLm1hdGNoKHRoaXMubnVtYmVyc0FuZERlY2ltYWxQb2ludFNlcGFyYXRvclJlZ2V4KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTcGVjaWFsQWxsb3dlZEtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRLZXlzLmluY2x1ZGVzKGV2ZW50LmtleSkgfHwgdGhpcy5pc0FsbG93ZWRLZXlXaXRoQ29udHJvbChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGlzQWxsb3dlZEtleVdpdGhDb250cm9sKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5hbGxvd2VkS2V5c1VzZWRXaXRoQ29udHJvbC5pbmNsdWRlcyhldmVudC5rZXkpIHx8XG4gICAgICAgIHRoaXMuYWxsb3dlZEtleXNVc2VkV2l0aENvbnRyb2wubWFwKChrZXkpID0+IGtleS50b1VwcGVyQ2FzZSgpKS5pbmNsdWRlcyhldmVudC5rZXkpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZVdpdGhvdXRUaG91c2FuZHNTZXBhcmF0b3IodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KHRoaXMudGhvdXNhbmRzU2VwYXJhdG9yKS5qb2luKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzTm9Nb3JlVGhhbjJEZWNpbWFsRGlnaXRzKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZVdpdGhvdXRTZXBhcmF0b3JzID0gdGhpcy5nZXRWYWx1ZVdpdGhvdXRUaG91c2FuZHNTZXBhcmF0b3IodmFsdWUpO1xuXG4gICAgcmV0dXJuIHRoaXMubnVtYmVyV2l0aFVwVG8yRGVjaW1hbHNSZWdleC50ZXN0KHZhbHVlV2l0aG91dFNlcGFyYXRvcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZvcm1hdElucHV0KHZhbHVlPzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB0aGlzLm5nQ29udHJvbC52YWx1ZTtcblxuICAgIGlmIChuZXdWYWx1ZSB8fCBuZXdWYWx1ZSA9PT0gMCkge1xuICAgICAgY29uc3Qgd2l0aDJEZWNpbWFscyA9IHRoaXMuZm9ybWF0UHJpY2VUbzJEZWNpbWFsKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSh3aXRoMkRlY2ltYWxzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKCcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFByaWNlVG8yRGVjaW1hbCh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBudW1iZXJUb1RyYW5zZm9ybSA9ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdGhpcy5wYXJzZUxvY2FsZVN0cmluZ1RvTnVtYmVyKHZhbHVlKSA6IHZhbHVlKSB8fCAwO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKG51bWJlclRvVHJhbnNmb3JtLCAnMS4yLTInKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0UHJpY2VUb1VwVG8yRGVjaW1hbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBwb3RlbnRpYWwgZm9yIHJlZmFjdG9yOlxuICAgIGNvbnN0IG51bWJlck9mWmVyb3NBZnRlckRlY2ltYWxQb2ludFJlZ2V4ID0gYF5bMC05XSpcXFxcJHt0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvcn0oMCspJGA7XG4gICAgY29uc3QgbnVtYmVyT2ZaZXJvc0FmdGVyRmlyc3REZWNpbWFsRGlnaXRSZWdleCA9IGBeWzAtOV0qXFxcXCR7dGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3J9WzEtOV0oMCspJGA7XG5cbiAgICBjb25zdCB2YWx1ZVdpdGhvdXRTZXBhcmF0b3JzID0gdGhpcy5nZXRWYWx1ZVdpdGhvdXRUaG91c2FuZHNTZXBhcmF0b3IodmFsdWUpO1xuICAgIGNvbnN0IG51bWJlck9mWmVyb3NBZnRlckRlY2ltYWxQb2ludCA9XG4gICAgICB2YWx1ZVdpdGhvdXRTZXBhcmF0b3JzLm1hdGNoKG51bWJlck9mWmVyb3NBZnRlckRlY2ltYWxQb2ludFJlZ2V4KT8uWzFdLmxlbmd0aCB8fCAwO1xuICAgIGNvbnN0IG51bWJlck9mWmVyb3NBZnRlckZpcnN0RGVjaW1hbERpZ2l0ID1cbiAgICAgIHZhbHVlV2l0aG91dFNlcGFyYXRvcnMubWF0Y2gobnVtYmVyT2ZaZXJvc0FmdGVyRmlyc3REZWNpbWFsRGlnaXRSZWdleCk/LlsxXS5sZW5ndGggfHwgMDtcblxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKHRoaXMucGFyc2VMb2NhbGVTdHJpbmdUb051bWJlcih2YWx1ZVdpdGhvdXRTZXBhcmF0b3JzKSwgJzEuMC0yJyk7XG4gICAgaWYgKG51bWJlck9mWmVyb3NBZnRlckRlY2ltYWxQb2ludCA+IDApIHtcbiAgICAgIHJldHVybiBmb3JtYXR0ZWQgKyB0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvciArICcwMCcuc2xpY2UoMCwgbnVtYmVyT2ZaZXJvc0FmdGVyRGVjaW1hbFBvaW50KTtcbiAgICB9XG4gICAgaWYgKG51bWJlck9mWmVyb3NBZnRlckZpcnN0RGVjaW1hbERpZ2l0ID4gMCkge1xuICAgICAgcmV0dXJuIGZvcm1hdHRlZCArICcwJztcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROdW1iZXJPZlRob3VzYW5kc1NlcGFyYXRvcnModmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuICh2YWx1ZSB8fCAnJykuc3BsaXQodGhpcy50aG91c2FuZHNTZXBhcmF0b3IpLmxlbmd0aCAtIDE7XG4gIH1cblxuICBwcml2YXRlIGdldERpZmZJblNlcGFyYXRvcnMob2xkVmFsdWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgaW5pdGlhbE51bWJlck9mU2VwYXJhdG9ycyA9IHRoaXMuZ2V0TnVtYmVyT2ZUaG91c2FuZHNTZXBhcmF0b3JzKG9sZFZhbHVlKTtcbiAgICBjb25zdCBjdXJyZW50TnVtYmVyT2ZTZXBhcmF0b3JzID0gdGhpcy5nZXROdW1iZXJPZlRob3VzYW5kc1NlcGFyYXRvcnMobmV3VmFsdWUpO1xuXG4gICAgcmV0dXJuIGN1cnJlbnROdW1iZXJPZlNlcGFyYXRvcnMgLSBpbml0aWFsTnVtYmVyT2ZTZXBhcmF0b3JzO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNPbmx5T25lRGVjaW1hbFNlcGFyYXRvckF0VGhlRW5kKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQodGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3IpLmxlbmd0aCA9PT0gMiAmJiB2YWx1ZS5zbGljZSgtMSkgPT09IHRoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUxvY2FsZVN0cmluZ1RvTnVtYmVyKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGNsZWFuUGF0dGVybiA9IG5ldyBSZWdFeHAoYFteLSswLTkke3RoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yfV1gLCAnZycpO1xuXG4gICAgY29uc3QgY2xlYW5lZCA9IFN0cmluZyh2YWx1ZSkucmVwbGFjZShjbGVhblBhdHRlcm4sICcnKTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gY2xlYW5lZC5yZXBsYWNlKHRoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yLCAnLicpO1xuXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobm9ybWFsaXplZCk7XG4gIH1cblxuICBwcml2YXRlIHNldE5hdGl2ZUlucHV0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmF0aXZlSW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3Vyc29yUG9zaXRpb24oaW5wdXRFbDogSFRNTElucHV0RWxlbWVudCk6IElDdXJzb3JQb3NpdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBpbnB1dEVsLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBpbnB1dEVsLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnNvclBvc2l0aW9uKGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQsIHBvc2l0aW9uOiBJQ3Vyc29yUG9zaXRpb24pIHtcbiAgICBpbnB1dEVsLnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLnN0YXJ0ID49IDAgPyBwb3NpdGlvbi5zdGFydCA6IDAsIHBvc2l0aW9uLmVuZCA+PSAwID8gcG9zaXRpb24uZW5kIDogMCk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVDdXJzb3IoaW5wdXRFbDogSFRNTElucHV0RWxlbWVudCwgaW5pdGlhbFBvc2l0aW9uOiBJQ3Vyc29yUG9zaXRpb24sIGRpZmY6IG51bWJlciA9IDApOiB2b2lkIHtcbiAgICB0aGlzLnNldEN1cnNvclBvc2l0aW9uKGlucHV0RWwsIHtcbiAgICAgIHN0YXJ0OiBpbml0aWFsUG9zaXRpb24uc3RhcnQgKyBkaWZmLFxuICAgICAgZW5kOiBpbml0aWFsUG9zaXRpb24uZW5kICsgZGlmZlxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBudW1iZXJPZkRlY2ltYWxQbGFjZXModmFsdWU6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgbnVtU3RyaW5nID0gdmFsdWUgKyAnJztcbiAgICByZXR1cm4gbnVtU3RyaW5nLnNwbGl0KCcuJylbMV0/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbGVEZWNpbWFsUG9pbnRTZXBhcmF0b3IoKSB7XG4gICAgY29uc3QgZXhhbXBsZSA9IHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKDEuMSwgJzEuMScpO1xuICAgIHJldHVybiBleGFtcGxlLmNoYXJBdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxlVGhvdXNhbmRzU2VwYXJhdG9yKCkge1xuICAgIGNvbnN0IGV4YW1wbGUgPSB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSgxMDAwLCAnMS4wJyk7XG4gICAgaWYgKGV4YW1wbGUubGVuZ3RoID09PSA1KSB7XG4gICAgICByZXR1cm4gZXhhbXBsZS5jaGFyQXQoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvLyBWYWx1ZSBBY2Vjc3NvciBNZXRob2RzOlxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdmFsdWVUb0VtaXQgPSB2YWx1ZSA9PT0gJycgPyBudWxsIDogdGhpcy5wYXJzZUxvY2FsZVN0cmluZ1RvTnVtYmVyKHZhbHVlKTtcbiAgICAgIGNvbnNvbGUubG9nKCdFbWl0dGluZyB2YWx1ZScsIHZhbHVlVG9FbWl0KTtcbiAgICAgIGZuKHZhbHVlVG9FbWl0KTtcbiAgICB9O1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoY2FsbGJhY2tGdW5jdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaCA9IGNhbGxiYWNrRnVuY3Rpb247XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCBpc0Rpc2FibGVkKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIFVuY29tbWVudCB0aGF0IGlmIHdlIHdhbnQgdG8gZW1pdCBjb2VyY2VkIHZhbHVlIHRvIG1heCAyIGRlY2ltYWwgcG9pbnRzIG9uIHdyaXRlXG4gICAgLy8gZm9yIGV4OiBzZXR0aW5nIGEgdmFsdWUgaS5lOiAyNC4zNDMzNTQ1NiAod2hldGhlciBzaG91bGQgd2UgZW1pdCBpbW1lZGlhdGVseSAyMy4zNClcbiAgICAvLyBpZiAodGhpcy5udW1iZXJPZkRlY2ltYWxQbGFjZXMobm9ybWFsaXplZFZhbHVlKSA+IDIpIHtcbiAgICAvLyAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZm9ybWF0UHJpY2VUbzJEZWNpbWFsKG5vcm1hbGl6ZWRWYWx1ZSkpO1xuICAgIC8vICAgfSwgMSk7XG4gICAgLy8gfVxuICAgIHRoaXMucmVmb3JtYXRJbnB1dCh2YWx1ZSk7XG4gICAgdGhpcy5wcmV2aW91c1Jhd0lucHV0VmFsdWUgPSB0aGlzLmdldE5hdGl2ZUlucHV0VmFsdWUoKTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGNvbnN0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IHt9O1xuICAgIGlmIChjb250cm9sLnZhbHVlID4gdGhpcy5tYXgpIHtcbiAgICAgIGVycm9ycy5tYXggPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoY29udHJvbC52YWx1ZSA8IHRoaXMubWluKSB7XG4gICAgICBlcnJvcnMubWluID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPT09IDAgPyBudWxsIDogZXJyb3JzO1xuICB9XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWN1cnJlbmN5LWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1jdXJyZW5jeS1pbnB1dC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtY3VycmVuY3ktaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsU0FBUyxFQUlWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsTUFBTSxnQ0FBZ0MsR0FBUTtJQUM1QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7SUFDckQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSwyQkFBMkIsR0FBUTtJQUN2QyxPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDO0lBQ3JELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVlGLElBQWEsc0JBQXNCLEdBQW5DLE1BQWEsc0JBQXNCO0lBOEJqQyxZQUNVLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLFFBQWtCO1FBSGxCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBakNuQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFJMUIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLDhCQUE4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QUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRCxDQUFDO0NBQ0YsQ0FBQTs7WUEvUHdCLFdBQVc7WUFDWixVQUFVO1lBQ1osU0FBUztZQUNULFFBQVE7O0FBakNuQjtJQUFSLEtBQUssRUFBRTtnRUFBMEI7QUFDekI7SUFBUixLQUFLLEVBQUU7bURBQWE7QUFDWjtJQUFSLEtBQUssRUFBRTttREFBYTtBQTBDckI7SUFEQyxZQUFZLENBQUMsTUFBTSxDQUFDO3dEQUlwQjtBQUdEO0lBREMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQzt5REF1Q3pFO0FBR0Q7SUFEQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7MERBT25DO0FBbEdVLHNCQUFzQjtJQUxsQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQ04sa0hBQWtIO1FBQ3BILFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRSwyQkFBMkIsQ0FBQztLQUN4RixDQUFDO0dBQ1csc0JBQXNCLENBOFJsQztTQTlSWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgZm9yd2FyZFJlZiwgUmVuZGVyZXIyLCBJbnB1dCwgSW5qZWN0b3IsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBOR19WQUxJREFUT1JTLFxuICBOZ0NvbnRyb2wsXG4gIEFic3RyYWN0Q29udHJvbCxcbiAgVmFsaWRhdG9yLFxuICBWYWxpZGF0aW9uRXJyb3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuY29uc3QgQ1VSUkVOQ1lESVJFQ1RJVkVfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEN1cnJlbmN5SW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuY29uc3QgQ1VSUkVOQ1lESVJFQ1RJVkVfVkFMSURBVDBSOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEN1cnJlbmN5SW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuaW50ZXJmYWNlIElDdXJzb3JQb3NpdGlvbiB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6XG4gICAgJ2lucHV0W2Zvcm1Db250cm9sTmFtZV1bbmd4Q3VycmVuY3lJbnB1dF0sIGlucHV0W2Zvcm1Db250cm9sXVtuZ3hDdXJyZW5jeUlucHV0XSwgaW5wdXRbbmdNb2RlbF1bbmd4Q3VycmVuY3lJbnB1dF0nLFxuICBwcm92aWRlcnM6IFtEZWNpbWFsUGlwZSwgQ1VSUkVOQ1lESVJFQ1RJVkVfVkFMVUVfQUNDRVNTT1IsIENVUlJFTkNZRElSRUNUSVZFX1ZBTElEQVQwUl1cbn0pXG5leHBvcnQgY2xhc3MgQ3VycmVuY3lJbnB1dERpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZvcm1hdE9ubHlPbkJsdXIgPSBmYWxzZTtcbiAgQElucHV0KCkgbWluOiBudW1iZXI7XG4gIEBJbnB1dCgpIG1heDogbnVtYmVyO1xuXG4gIHByaXZhdGUgZGVjaW1hbFBvaW50U2VwYXJhdG9yID0gdGhpcy5nZXRMb2NhbGVEZWNpbWFsUG9pbnRTZXBhcmF0b3IoKTtcbiAgcHJpdmF0ZSB0aG91c2FuZHNTZXBhcmF0b3IgPSB0aGlzLmdldExvY2FsZVRob3VzYW5kc1NlcGFyYXRvcigpO1xuXG4gIHByaXZhdGUgbmdDb250cm9sOiBOZ0NvbnRyb2w7XG4gIHByaXZhdGUgbnVtYmVyc0FuZERlY2ltYWxQb2ludFNlcGFyYXRvclJlZ2V4OiBSZWdFeHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dlZEtleXM6IHN0cmluZ1tdID0gW1xuICAgICdCYWNrc3BhY2UnLFxuICAgICdUYWInLFxuICAgICdFbmQnLFxuICAgICdIb21lJyxcbiAgICAnRGVsZXRlJyxcbiAgICAnRGVsJyxcbiAgICAnQ3RybCcsXG4gICAgJ0Fycm93TGVmdCcsXG4gICAgJ0Fycm93UmlnaHQnLFxuICAgICdMZWZ0JyxcbiAgICAnUmlnaHQnXG4gIF07XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dlZEtleXNVc2VkV2l0aENvbnRyb2w6IHN0cmluZ1tdID0gWyd4JywgJ2MnLCAndicsICdhJywgJ3onXTtcbiAgcHJpdmF0ZSBudW1iZXJXaXRoVXBUbzJEZWNpbWFsc1JlZ2V4ID0gbmV3IFJlZ0V4cChgXihbMC05XSspPyhcXFxcJHt0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvcn1bMC05XT9bMC05XT8pPyRgKTtcbiAgcHJpdmF0ZSBwcmV2aW91c1Jhd0lucHV0VmFsdWUgPSAnJztcblxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcHJpdmF0ZSBvblRvdWNoOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgY29uc3QgbG9jYWxlRGVjaW1hbFBvaW50U2VwYXJhdG9yID0gdGhpcy5nZXRMb2NhbGVEZWNpbWFsUG9pbnRTZXBhcmF0b3IoKTtcbiAgICB0aGlzLm51bWJlcnNBbmREZWNpbWFsUG9pbnRTZXBhcmF0b3JSZWdleCA9IG5ldyBSZWdFeHAoYFswLTkke2xvY2FsZURlY2ltYWxQb2ludFNlcGFyYXRvcn1dYCwgJ2cnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBoYW5kbGVCbHVyKCkge1xuICAgIHRoaXMucmVmb3JtYXRJbnB1dCgpO1xuICAgIHRoaXMub25Ub3VjaCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudC50YXJnZXQudmFsdWUnLCAnJGV2ZW50LnRhcmdldCcsICckZXZlbnQnXSlcbiAgaGFuZGxlSW5wdXQocmF3SW5wdXRWYWx1ZTogc3RyaW5nLCBpbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50LCBldmVudDogSW5wdXRFdmVudCkge1xuICAgIGNvbnN0IGVudGVyZWREYXRhID0gZXZlbnQuZGF0YTtcbiAgICBpZiAoZW50ZXJlZERhdGEgPT09IHRoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yICYmIHRoaXMuaGFzT25seU9uZURlY2ltYWxTZXBhcmF0b3JBdFRoZUVuZChyYXdJbnB1dFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmF3SW5wdXRWYWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UoJycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxDdXJzb3JQb3NpdGlvbiA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oaW5wdXRFbCk7XG5cbiAgICBpZiAodGhpcy5oYXNOb01vcmVUaGFuMkRlY2ltYWxEaWdpdHMocmF3SW5wdXRWYWx1ZSkgJiYgIXRoaXMuaXNOdW1iZXJUb29MYXJnZShyYXdJbnB1dFZhbHVlKSkge1xuICAgICAgY29uc3QgbmV3UmF3SW5wdXRWYWx1ZSA9IHRoaXMuZm9ybWF0T25seU9uQmx1ciA/IHJhd0lucHV0VmFsdWUgOiB0aGlzLmZvcm1hdFByaWNlVG9VcFRvMkRlY2ltYWwocmF3SW5wdXRWYWx1ZSk7XG4gICAgICB0aGlzLnByZXZpb3VzUmF3SW5wdXRWYWx1ZSA9IG5ld1Jhd0lucHV0VmFsdWU7XG4gICAgICB0aGlzLm9uQ2hhbmdlKG5ld1Jhd0lucHV0VmFsdWUpO1xuICAgICAgdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKG5ld1Jhd0lucHV0VmFsdWUpO1xuXG4gICAgICBjb25zdCBkaWZmSW5TZXBhcmF0b3JzID0gdGhpcy5nZXREaWZmSW5TZXBhcmF0b3JzKHJhd0lucHV0VmFsdWUsIG5ld1Jhd0lucHV0VmFsdWUpO1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKGlucHV0RWwsIGluaXRpYWxDdXJzb3JQb3NpdGlvbiwgZGlmZkluU2VwYXJhdG9ycyk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGVudGVyZWREYXRhPy5sZW5ndGggPT09IDEgJiZcbiAgICAgIGVudGVyZWREYXRhICE9PSB0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvciAmJlxuICAgICAgaW5pdGlhbEN1cnNvclBvc2l0aW9uLnN0YXJ0ICE9PSByYXdJbnB1dFZhbHVlPy5sZW5ndGggJiZcbiAgICAgIGluaXRpYWxDdXJzb3JQb3NpdGlvbi5lbmQgIT09IHJhd0lucHV0VmFsdWU/Lmxlbmd0aCAmJlxuICAgICAgIXRoaXMuaXNOdW1iZXJUb29MYXJnZShyYXdJbnB1dFZhbHVlKVxuICAgICkge1xuICAgICAgLy8gVGhpcyBzZWN0aW9uIGFsbG93cyB0byBvdmVycmlkZSBudW1iZXJzIGFmdGVyIGRlY2ltYWwgcG9pbnRcbiAgICAgIGNvbnN0IG5ld1Jhd0lucHV0VmFsdWUgPSB0aGlzLnJlcGxhY2VBdCh0aGlzLnByZXZpb3VzUmF3SW5wdXRWYWx1ZSwgaW5pdGlhbEN1cnNvclBvc2l0aW9uLnN0YXJ0IC0gMSwgZW50ZXJlZERhdGEpO1xuICAgICAgdGhpcy5wcmV2aW91c1Jhd0lucHV0VmFsdWUgPSBuZXdSYXdJbnB1dFZhbHVlO1xuICAgICAgdGhpcy5vbkNoYW5nZShuZXdSYXdJbnB1dFZhbHVlKTtcbiAgICAgIHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZShuZXdSYXdJbnB1dFZhbHVlKTtcbiAgICAgIHRoaXMubW92ZUN1cnNvcihpbnB1dEVsLCBpbml0aWFsQ3Vyc29yUG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUodGhpcy5wcmV2aW91c1Jhd0lucHV0VmFsdWUpO1xuICAgICAgY29uc3QgY3Vyc29yRGlmZiA9IGVudGVyZWREYXRhID8gLWVudGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoaW5wdXRFbCwgaW5pdGlhbEN1cnNvclBvc2l0aW9uLCBjdXJzb3JEaWZmKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAga2V5RG93bkV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNTcGVjaWFsQWxsb3dlZEtleShldmVudCkgfHwgdGhpcy5pc051bWJlcktleShldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc051bWJlclRvb0xhcmdlKHJhd0lucHV0VmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZUxvY2FsZVN0cmluZ1RvTnVtYmVyKHJhd0lucHV0VmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZSA+PSAxMDAwMDAwMDAwMDAwMDtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUF0KG9yaWdpbmFsVmFsdWU6IHN0cmluZywgaW5kZXg6IG51bWJlciwgcmVwbGFjZW1lbnQ6IHN0cmluZykge1xuICAgIHJldHVybiBvcmlnaW5hbFZhbHVlLnN1YnN0cigwLCBpbmRleCkgKyByZXBsYWNlbWVudCArIG9yaWdpbmFsVmFsdWUuc3Vic3RyKGluZGV4ICsgcmVwbGFjZW1lbnQubGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNOdW1iZXJLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZXZlbnQua2V5ICYmIGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiYgISFTdHJpbmcoZXZlbnQua2V5KS5tYXRjaCh0aGlzLm51bWJlcnNBbmREZWNpbWFsUG9pbnRTZXBhcmF0b3JSZWdleCk7XG4gIH1cblxuICBwcml2YXRlIGlzU3BlY2lhbEFsbG93ZWRLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd2VkS2V5cy5pbmNsdWRlcyhldmVudC5rZXkpIHx8IHRoaXMuaXNBbGxvd2VkS2V5V2l0aENvbnRyb2woZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsbG93ZWRLZXlXaXRoQ29udHJvbChldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuYWxsb3dlZEtleXNVc2VkV2l0aENvbnRyb2wuaW5jbHVkZXMoZXZlbnQua2V5KSB8fFxuICAgICAgICB0aGlzLmFsbG93ZWRLZXlzVXNlZFdpdGhDb250cm9sLm1hcCgoa2V5KSA9PiBrZXkudG9VcHBlckNhc2UoKSkuaW5jbHVkZXMoZXZlbnQua2V5KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVXaXRob3V0VGhvdXNhbmRzU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCh0aGlzLnRob3VzYW5kc1NlcGFyYXRvcikuam9pbignJyk7XG4gIH1cblxuICBwcml2YXRlIGhhc05vTW9yZVRoYW4yRGVjaW1hbERpZ2l0cyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWVXaXRob3V0U2VwYXJhdG9ycyA9IHRoaXMuZ2V0VmFsdWVXaXRob3V0VGhvdXNhbmRzU2VwYXJhdG9yKHZhbHVlKTtcblxuICAgIHJldHVybiB0aGlzLm51bWJlcldpdGhVcFRvMkRlY2ltYWxzUmVnZXgudGVzdCh2YWx1ZVdpdGhvdXRTZXBhcmF0b3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmb3JtYXRJbnB1dCh2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogdGhpcy5uZ0NvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAobmV3VmFsdWUgfHwgbmV3VmFsdWUgPT09IDApIHtcbiAgICAgIGNvbnN0IHdpdGgyRGVjaW1hbHMgPSB0aGlzLmZvcm1hdFByaWNlVG8yRGVjaW1hbChuZXdWYWx1ZSk7XG4gICAgICB0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUod2l0aDJEZWNpbWFscyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSgnJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRQcmljZVRvMkRlY2ltYWwodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbnVtYmVyVG9UcmFuc2Zvcm0gPSAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHRoaXMucGFyc2VMb2NhbGVTdHJpbmdUb051bWJlcih2YWx1ZSkgOiB2YWx1ZSkgfHwgMDtcblxuICAgIHJldHVybiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybShudW1iZXJUb1RyYW5zZm9ybSwgJzEuMi0yJyk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFByaWNlVG9VcFRvMkRlY2ltYWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gVE9ETzogcG90ZW50aWFsIGZvciByZWZhY3RvcjpcbiAgICBjb25zdCBudW1iZXJPZlplcm9zQWZ0ZXJEZWNpbWFsUG9pbnRSZWdleCA9IGBeWzAtOV0qXFxcXCR7dGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3J9KDArKSRgO1xuICAgIGNvbnN0IG51bWJlck9mWmVyb3NBZnRlckZpcnN0RGVjaW1hbERpZ2l0UmVnZXggPSBgXlswLTldKlxcXFwke3RoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yfVsxLTldKDArKSRgO1xuXG4gICAgY29uc3QgdmFsdWVXaXRob3V0U2VwYXJhdG9ycyA9IHRoaXMuZ2V0VmFsdWVXaXRob3V0VGhvdXNhbmRzU2VwYXJhdG9yKHZhbHVlKTtcbiAgICBjb25zdCBudW1iZXJPZlplcm9zQWZ0ZXJEZWNpbWFsUG9pbnQgPVxuICAgICAgdmFsdWVXaXRob3V0U2VwYXJhdG9ycy5tYXRjaChudW1iZXJPZlplcm9zQWZ0ZXJEZWNpbWFsUG9pbnRSZWdleCk/LlsxXS5sZW5ndGggfHwgMDtcbiAgICBjb25zdCBudW1iZXJPZlplcm9zQWZ0ZXJGaXJzdERlY2ltYWxEaWdpdCA9XG4gICAgICB2YWx1ZVdpdGhvdXRTZXBhcmF0b3JzLm1hdGNoKG51bWJlck9mWmVyb3NBZnRlckZpcnN0RGVjaW1hbERpZ2l0UmVnZXgpPy5bMV0ubGVuZ3RoIHx8IDA7XG5cbiAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh0aGlzLnBhcnNlTG9jYWxlU3RyaW5nVG9OdW1iZXIodmFsdWVXaXRob3V0U2VwYXJhdG9ycyksICcxLjAtMicpO1xuICAgIGlmIChudW1iZXJPZlplcm9zQWZ0ZXJEZWNpbWFsUG9pbnQgPiAwKSB7XG4gICAgICByZXR1cm4gZm9ybWF0dGVkICsgdGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3IgKyAnMDAnLnNsaWNlKDAsIG51bWJlck9mWmVyb3NBZnRlckRlY2ltYWxQb2ludCk7XG4gICAgfVxuICAgIGlmIChudW1iZXJPZlplcm9zQWZ0ZXJGaXJzdERlY2ltYWxEaWdpdCA+IDApIHtcbiAgICAgIHJldHVybiBmb3JtYXR0ZWQgKyAnMCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TnVtYmVyT2ZUaG91c2FuZHNTZXBhcmF0b3JzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiAodmFsdWUgfHwgJycpLnNwbGl0KHRoaXMudGhvdXNhbmRzU2VwYXJhdG9yKS5sZW5ndGggLSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREaWZmSW5TZXBhcmF0b3JzKG9sZFZhbHVlOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGluaXRpYWxOdW1iZXJPZlNlcGFyYXRvcnMgPSB0aGlzLmdldE51bWJlck9mVGhvdXNhbmRzU2VwYXJhdG9ycyhvbGRWYWx1ZSk7XG4gICAgY29uc3QgY3VycmVudE51bWJlck9mU2VwYXJhdG9ycyA9IHRoaXMuZ2V0TnVtYmVyT2ZUaG91c2FuZHNTZXBhcmF0b3JzKG5ld1ZhbHVlKTtcblxuICAgIHJldHVybiBjdXJyZW50TnVtYmVyT2ZTZXBhcmF0b3JzIC0gaW5pdGlhbE51bWJlck9mU2VwYXJhdG9ycztcbiAgfVxuXG4gIHByaXZhdGUgaGFzT25seU9uZURlY2ltYWxTZXBhcmF0b3JBdFRoZUVuZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KHRoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yKS5sZW5ndGggPT09IDIgJiYgdmFsdWUuc2xpY2UoLTEpID09PSB0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMb2NhbGVTdHJpbmdUb051bWJlcih2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjbGVhblBhdHRlcm4gPSBuZXcgUmVnRXhwKGBbXi0rMC05JHt0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvcn1dYCwgJ2cnKTtcblxuICAgIGNvbnN0IGNsZWFuZWQgPSBTdHJpbmcodmFsdWUpLnJlcGxhY2UoY2xlYW5QYXR0ZXJuLCAnJyk7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGNsZWFuZWQucmVwbGFjZSh0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvciwgJy4nKTtcblxuICAgIHJldHVybiBwYXJzZUZsb2F0KG5vcm1hbGl6ZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXROYXRpdmVJbnB1dFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldE5hdGl2ZUlucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnNvclBvc2l0aW9uKGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQpOiBJQ3Vyc29yUG9zaXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogaW5wdXRFbC5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogaW5wdXRFbC5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDdXJzb3JQb3NpdGlvbihpbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50LCBwb3NpdGlvbjogSUN1cnNvclBvc2l0aW9uKSB7XG4gICAgaW5wdXRFbC5zZXRTZWxlY3Rpb25SYW5nZShwb3NpdGlvbi5zdGFydCA+PSAwID8gcG9zaXRpb24uc3RhcnQgOiAwLCBwb3NpdGlvbi5lbmQgPj0gMCA/IHBvc2l0aW9uLmVuZCA6IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlQ3Vyc29yKGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQsIGluaXRpYWxQb3NpdGlvbjogSUN1cnNvclBvc2l0aW9uLCBkaWZmOiBudW1iZXIgPSAwKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDdXJzb3JQb3NpdGlvbihpbnB1dEVsLCB7XG4gICAgICBzdGFydDogaW5pdGlhbFBvc2l0aW9uLnN0YXJ0ICsgZGlmZixcbiAgICAgIGVuZDogaW5pdGlhbFBvc2l0aW9uLmVuZCArIGRpZmZcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbnVtYmVyT2ZEZWNpbWFsUGxhY2VzKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IG51bVN0cmluZyA9IHZhbHVlICsgJyc7XG4gICAgcmV0dXJuIG51bVN0cmluZy5zcGxpdCgnLicpWzFdPy5sZW5ndGggfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxlRGVjaW1hbFBvaW50U2VwYXJhdG9yKCkge1xuICAgIGNvbnN0IGV4YW1wbGUgPSB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSgxLjEsICcxLjEnKTtcbiAgICByZXR1cm4gZXhhbXBsZS5jaGFyQXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsZVRob3VzYW5kc1NlcGFyYXRvcigpIHtcbiAgICBjb25zdCBleGFtcGxlID0gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0oMTAwMCwgJzEuMCcpO1xuICAgIGlmIChleGFtcGxlLmxlbmd0aCA9PT0gNSkge1xuICAgICAgcmV0dXJuIGV4YW1wbGUuY2hhckF0KDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsdWUgQWNlY3Nzb3IgTWV0aG9kczpcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlVG9FbWl0ID0gdmFsdWUgPT09ICcnID8gbnVsbCA6IHRoaXMucGFyc2VMb2NhbGVTdHJpbmdUb051bWJlcih2YWx1ZSk7XG4gICAgICBjb25zb2xlLmxvZygnRW1pdHRpbmcgdmFsdWUnLCB2YWx1ZVRvRW1pdCk7XG4gICAgICBmbih2YWx1ZVRvRW1pdCk7XG4gICAgfTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGNhbGxiYWNrRnVuY3Rpb246ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2ggPSBjYWxsYmFja0Z1bmN0aW9uO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBVbmNvbW1lbnQgdGhhdCBpZiB3ZSB3YW50IHRvIGVtaXQgY29lcmNlZCB2YWx1ZSB0byBtYXggMiBkZWNpbWFsIHBvaW50cyBvbiB3cml0ZVxuICAgIC8vIGZvciBleDogc2V0dGluZyBhIHZhbHVlIGkuZTogMjQuMzQzMzU0NTYgKHdoZXRoZXIgc2hvdWxkIHdlIGVtaXQgaW1tZWRpYXRlbHkgMjMuMzQpXG4gICAgLy8gaWYgKHRoaXMubnVtYmVyT2ZEZWNpbWFsUGxhY2VzKG5vcm1hbGl6ZWRWYWx1ZSkgPiAyKSB7XG4gICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmZvcm1hdFByaWNlVG8yRGVjaW1hbChub3JtYWxpemVkVmFsdWUpKTtcbiAgICAvLyAgIH0sIDEpO1xuICAgIC8vIH1cbiAgICB0aGlzLnJlZm9ybWF0SW5wdXQodmFsdWUpO1xuICAgIHRoaXMucHJldmlvdXNSYXdJbnB1dFZhbHVlID0gdGhpcy5nZXROYXRpdmVJbnB1dFZhbHVlKCk7XG4gIH1cblxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSB7fTtcbiAgICBpZiAoY29udHJvbC52YWx1ZSA+IHRoaXMubWF4KSB7XG4gICAgICBlcnJvcnMubWF4ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2wudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgZXJyb3JzLm1pbiA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID09PSAwID8gbnVsbCA6IGVycm9ycztcbiAgfVxufVxuIl19 |
@@ -21,3 +21,3 @@ import { __decorate } from "tslib"; | ||
this.injector = injector; | ||
this.formatOnlyOnBlur = true; | ||
this.formatOnlyOnBlur = false; | ||
this.decimalPointSeparator = this.getLocaleDecimalPointSeparator(); | ||
@@ -279,2 +279,2 @@ this.thousandsSeparator = this.getLocaleThousandsSeparator(); | ||
export { CurrencyInputDirective }; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWN1cnJlbmN5LWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1jdXJyZW5jeS1pbnB1dC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtY3VycmVuY3ktaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsU0FBUyxFQUlWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsSUFBTSxnQ0FBZ0MsR0FBUTtJQUM1QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLHNCQUFzQixFQUF0QixDQUFzQixDQUFDO0lBQ3JELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLElBQU0sMkJBQTJCLEdBQVE7SUFDdkMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsc0JBQXNCLEVBQXRCLENBQXNCLENBQUM7SUFDckQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBWUY7SUE4QkUsZ0NBQ1UsV0FBd0IsRUFDeEIsVUFBc0IsRUFDdEIsUUFBbUIsRUFDbkIsUUFBa0I7UUFIbEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQVU7UUFqQ25CLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUl6QiwwQkFBcUIsR0FBRyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUM5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QUFFO1lBQzVCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7U0FDbkI7UUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUQsQ0FBQzs7Z0JBOVBzQixXQUFXO2dCQUNaLFVBQVU7Z0JBQ1osU0FBUztnQkFDVCxRQUFROztJQWpDbkI7UUFBUixLQUFLLEVBQUU7b0VBQXlCO0lBQ3hCO1FBQVIsS0FBSyxFQUFFO3VEQUFhO0lBQ1o7UUFBUixLQUFLLEVBQUU7dURBQWE7SUEwQ3JCO1FBREMsWUFBWSxDQUFDLE1BQU0sQ0FBQzs0REFJcEI7SUFHRDtRQURDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7NkRBdUN6RTtJQUdEO1FBREMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzhEQU9uQztJQWxHVSxzQkFBc0I7UUFMbEMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUNOLGtIQUFrSDtZQUNwSCxTQUFTLEVBQUUsQ0FBQyxXQUFXLEVBQUUsZ0NBQWdDLEVBQUUsMkJBQTJCLENBQUM7U0FDeEYsQ0FBQztPQUNXLHNCQUFzQixDQThSbEM7SUFBRCw2QkFBQztDQUFBLEFBOVJELElBOFJDO1NBOVJZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBmb3J3YXJkUmVmLCBSZW5kZXJlcjIsIElucHV0LCBJbmplY3RvciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5nQ29udHJvbCxcbiAgQWJzdHJhY3RDb250cm9sLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRpb25FcnJvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5jb25zdCBDVVJSRU5DWURJUkVDVElWRV9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3VycmVuY3lJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5jb25zdCBDVVJSRU5DWURJUkVDVElWRV9WQUxJREFUMFI6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3VycmVuY3lJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5pbnRlcmZhY2UgSUN1cnNvclBvc2l0aW9uIHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjpcbiAgICAnaW5wdXRbZm9ybUNvbnRyb2xOYW1lXVtuZ3hDdXJyZW5jeUlucHV0XSwgaW5wdXRbZm9ybUNvbnRyb2xdW25neEN1cnJlbmN5SW5wdXRdLCBpbnB1dFtuZ01vZGVsXVtuZ3hDdXJyZW5jeUlucHV0XScsXG4gIHByb3ZpZGVyczogW0RlY2ltYWxQaXBlLCBDVVJSRU5DWURJUkVDVElWRV9WQUxVRV9BQ0NFU1NPUiwgQ1VSUkVOQ1lESVJFQ1RJVkVfVkFMSURBVDBSXVxufSlcbmV4cG9ydCBjbGFzcyBDdXJyZW5jeUlucHV0RGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0IHtcbiAgQElucHV0KCkgZm9ybWF0T25seU9uQmx1ciA9IHRydWU7XG4gIEBJbnB1dCgpIG1pbjogbnVtYmVyO1xuICBASW5wdXQoKSBtYXg6IG51bWJlcjtcblxuICBwcml2YXRlIGRlY2ltYWxQb2ludFNlcGFyYXRvciA9IHRoaXMuZ2V0TG9jYWxlRGVjaW1hbFBvaW50U2VwYXJhdG9yKCk7XG4gIHByaXZhdGUgdGhvdXNhbmRzU2VwYXJhdG9yID0gdGhpcy5nZXRMb2NhbGVUaG91c2FuZHNTZXBhcmF0b3IoKTtcblxuICBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sO1xuICBwcml2YXRlIG51bWJlcnNBbmREZWNpbWFsUG9pbnRTZXBhcmF0b3JSZWdleDogUmVnRXhwO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWRLZXlzOiBzdHJpbmdbXSA9IFtcbiAgICAnQmFja3NwYWNlJyxcbiAgICAnVGFiJyxcbiAgICAnRW5kJyxcbiAgICAnSG9tZScsXG4gICAgJ0RlbGV0ZScsXG4gICAgJ0RlbCcsXG4gICAgJ0N0cmwnLFxuICAgICdBcnJvd0xlZnQnLFxuICAgICdBcnJvd1JpZ2h0JyxcbiAgICAnTGVmdCcsXG4gICAgJ1JpZ2h0J1xuICBdO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWRLZXlzVXNlZFdpdGhDb250cm9sOiBzdHJpbmdbXSA9IFsneCcsICdjJywgJ3YnLCAnYScsICd6J107XG4gIHByaXZhdGUgbnVtYmVyV2l0aFVwVG8yRGVjaW1hbHNSZWdleCA9IG5ldyBSZWdFeHAoYF4oWzAtOV0rKT8oXFxcXCR7dGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3J9WzAtOV0/WzAtOV0/KT8kYCk7XG4gIHByaXZhdGUgcHJldmlvdXNSYXdJbnB1dFZhbHVlID0gJyc7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgb25Ub3VjaDogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIGNvbnN0IGxvY2FsZURlY2ltYWxQb2ludFNlcGFyYXRvciA9IHRoaXMuZ2V0TG9jYWxlRGVjaW1hbFBvaW50U2VwYXJhdG9yKCk7XG4gICAgdGhpcy5udW1iZXJzQW5kRGVjaW1hbFBvaW50U2VwYXJhdG9yUmVnZXggPSBuZXcgUmVnRXhwKGBbMC05JHtsb2NhbGVEZWNpbWFsUG9pbnRTZXBhcmF0b3J9XWAsICdnJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgaGFuZGxlQmx1cigpIHtcbiAgICB0aGlzLnJlZm9ybWF0SW5wdXQoKTtcbiAgICB0aGlzLm9uVG91Y2goKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQudGFyZ2V0LnZhbHVlJywgJyRldmVudC50YXJnZXQnLCAnJGV2ZW50J10pXG4gIGhhbmRsZUlucHV0KHJhd0lucHV0VmFsdWU6IHN0cmluZywgaW5wdXRFbDogSFRNTElucHV0RWxlbWVudCwgZXZlbnQ6IElucHV0RXZlbnQpIHtcbiAgICBjb25zdCBlbnRlcmVkRGF0YSA9IGV2ZW50LmRhdGE7XG4gICAgaWYgKGVudGVyZWREYXRhID09PSB0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvciAmJiB0aGlzLmhhc09ubHlPbmVEZWNpbWFsU2VwYXJhdG9yQXRUaGVFbmQocmF3SW5wdXRWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJhd0lucHV0VmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKCcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWFsQ3Vyc29yUG9zaXRpb24gPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGlucHV0RWwpO1xuXG4gICAgaWYgKHRoaXMuaGFzTm9Nb3JlVGhhbjJEZWNpbWFsRGlnaXRzKHJhd0lucHV0VmFsdWUpICYmICF0aGlzLmlzTnVtYmVyVG9vTGFyZ2UocmF3SW5wdXRWYWx1ZSkpIHtcbiAgICAgIGNvbnN0IG5ld1Jhd0lucHV0VmFsdWUgPSB0aGlzLmZvcm1hdE9ubHlPbkJsdXIgPyByYXdJbnB1dFZhbHVlIDogdGhpcy5mb3JtYXRQcmljZVRvVXBUbzJEZWNpbWFsKHJhd0lucHV0VmFsdWUpO1xuICAgICAgdGhpcy5wcmV2aW91c1Jhd0lucHV0VmFsdWUgPSBuZXdSYXdJbnB1dFZhbHVlO1xuICAgICAgdGhpcy5vbkNoYW5nZShuZXdSYXdJbnB1dFZhbHVlKTtcbiAgICAgIHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZShuZXdSYXdJbnB1dFZhbHVlKTtcblxuICAgICAgY29uc3QgZGlmZkluU2VwYXJhdG9ycyA9IHRoaXMuZ2V0RGlmZkluU2VwYXJhdG9ycyhyYXdJbnB1dFZhbHVlLCBuZXdSYXdJbnB1dFZhbHVlKTtcbiAgICAgIHRoaXMubW92ZUN1cnNvcihpbnB1dEVsLCBpbml0aWFsQ3Vyc29yUG9zaXRpb24sIGRpZmZJblNlcGFyYXRvcnMpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBlbnRlcmVkRGF0YT8ubGVuZ3RoID09PSAxICYmXG4gICAgICBlbnRlcmVkRGF0YSAhPT0gdGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3IgJiZcbiAgICAgIGluaXRpYWxDdXJzb3JQb3NpdGlvbi5zdGFydCAhPT0gcmF3SW5wdXRWYWx1ZT8ubGVuZ3RoICYmXG4gICAgICBpbml0aWFsQ3Vyc29yUG9zaXRpb24uZW5kICE9PSByYXdJbnB1dFZhbHVlPy5sZW5ndGggJiZcbiAgICAgICF0aGlzLmlzTnVtYmVyVG9vTGFyZ2UocmF3SW5wdXRWYWx1ZSlcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgc2VjdGlvbiBhbGxvd3MgdG8gb3ZlcnJpZGUgbnVtYmVycyBhZnRlciBkZWNpbWFsIHBvaW50XG4gICAgICBjb25zdCBuZXdSYXdJbnB1dFZhbHVlID0gdGhpcy5yZXBsYWNlQXQodGhpcy5wcmV2aW91c1Jhd0lucHV0VmFsdWUsIGluaXRpYWxDdXJzb3JQb3NpdGlvbi5zdGFydCAtIDEsIGVudGVyZWREYXRhKTtcbiAgICAgIHRoaXMucHJldmlvdXNSYXdJbnB1dFZhbHVlID0gbmV3UmF3SW5wdXRWYWx1ZTtcbiAgICAgIHRoaXMub25DaGFuZ2UobmV3UmF3SW5wdXRWYWx1ZSk7XG4gICAgICB0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUobmV3UmF3SW5wdXRWYWx1ZSk7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoaW5wdXRFbCwgaW5pdGlhbEN1cnNvclBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKHRoaXMucHJldmlvdXNSYXdJbnB1dFZhbHVlKTtcbiAgICAgIGNvbnN0IGN1cnNvckRpZmYgPSBlbnRlcmVkRGF0YSA/IC1lbnRlcmVkRGF0YS5sZW5ndGggOiAwO1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKGlucHV0RWwsIGluaXRpYWxDdXJzb3JQb3NpdGlvbiwgY3Vyc29yRGlmZik7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIGtleURvd25FdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmlzU3BlY2lhbEFsbG93ZWRLZXkoZXZlbnQpIHx8IHRoaXMuaXNOdW1iZXJLZXkoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNOdW1iZXJUb29MYXJnZShyYXdJbnB1dFZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VMb2NhbGVTdHJpbmdUb051bWJlcihyYXdJbnB1dFZhbHVlKTtcbiAgICByZXR1cm4gdmFsdWUgPj0gMTAwMDAwMDAwMDAwMDA7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBdChvcmlnaW5hbFZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIHJlcGxhY2VtZW50OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gb3JpZ2luYWxWYWx1ZS5zdWJzdHIoMCwgaW5kZXgpICsgcmVwbGFjZW1lbnQgKyBvcmlnaW5hbFZhbHVlLnN1YnN0cihpbmRleCArIHJlcGxhY2VtZW50Lmxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGlzTnVtYmVyS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50LmtleSAmJiBldmVudC5rZXkubGVuZ3RoID09PSAxICYmICEhU3RyaW5nKGV2ZW50LmtleSkubWF0Y2godGhpcy5udW1iZXJzQW5kRGVjaW1hbFBvaW50U2VwYXJhdG9yUmVnZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NwZWNpYWxBbGxvd2VkS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dlZEtleXMuaW5jbHVkZXMoZXZlbnQua2V5KSB8fCB0aGlzLmlzQWxsb3dlZEtleVdpdGhDb250cm9sKGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBbGxvd2VkS2V5V2l0aENvbnRyb2woZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmFsbG93ZWRLZXlzVXNlZFdpdGhDb250cm9sLmluY2x1ZGVzKGV2ZW50LmtleSkgfHxcbiAgICAgICAgdGhpcy5hbGxvd2VkS2V5c1VzZWRXaXRoQ29udHJvbC5tYXAoKGtleSkgPT4ga2V5LnRvVXBwZXJDYXNlKCkpLmluY2x1ZGVzKGV2ZW50LmtleSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlV2l0aG91dFRob3VzYW5kc1NlcGFyYXRvcih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQodGhpcy50aG91c2FuZHNTZXBhcmF0b3IpLmpvaW4oJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNOb01vcmVUaGFuMkRlY2ltYWxEaWdpdHModmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlV2l0aG91dFNlcGFyYXRvcnMgPSB0aGlzLmdldFZhbHVlV2l0aG91dFRob3VzYW5kc1NlcGFyYXRvcih2YWx1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5udW1iZXJXaXRoVXBUbzJEZWNpbWFsc1JlZ2V4LnRlc3QodmFsdWVXaXRob3V0U2VwYXJhdG9ycyk7XG4gIH1cblxuICBwcml2YXRlIHJlZm9ybWF0SW5wdXQodmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHRoaXMubmdDb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKG5ld1ZhbHVlIHx8IG5ld1ZhbHVlID09PSAwKSB7XG4gICAgICBjb25zdCB3aXRoMkRlY2ltYWxzID0gdGhpcy5mb3JtYXRQcmljZVRvMkRlY2ltYWwobmV3VmFsdWUpO1xuICAgICAgdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKHdpdGgyRGVjaW1hbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUoJycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0UHJpY2VUbzJEZWNpbWFsKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG51bWJlclRvVHJhbnNmb3JtID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB0aGlzLnBhcnNlTG9jYWxlU3RyaW5nVG9OdW1iZXIodmFsdWUpIDogdmFsdWUpIHx8IDA7XG5cbiAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0obnVtYmVyVG9UcmFuc2Zvcm0sICcxLjItMicpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRQcmljZVRvVXBUbzJEZWNpbWFsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFRPRE86IHBvdGVudGlhbCBmb3IgcmVmYWN0b3I6XG4gICAgY29uc3QgbnVtYmVyT2ZaZXJvc0FmdGVyRGVjaW1hbFBvaW50UmVnZXggPSBgXlswLTldKlxcXFwke3RoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yfSgwKykkYDtcbiAgICBjb25zdCBudW1iZXJPZlplcm9zQWZ0ZXJGaXJzdERlY2ltYWxEaWdpdFJlZ2V4ID0gYF5bMC05XSpcXFxcJHt0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvcn1bMS05XSgwKykkYDtcblxuICAgIGNvbnN0IHZhbHVlV2l0aG91dFNlcGFyYXRvcnMgPSB0aGlzLmdldFZhbHVlV2l0aG91dFRob3VzYW5kc1NlcGFyYXRvcih2YWx1ZSk7XG4gICAgY29uc3QgbnVtYmVyT2ZaZXJvc0FmdGVyRGVjaW1hbFBvaW50ID1cbiAgICAgIHZhbHVlV2l0aG91dFNlcGFyYXRvcnMubWF0Y2gobnVtYmVyT2ZaZXJvc0FmdGVyRGVjaW1hbFBvaW50UmVnZXgpPy5bMV0ubGVuZ3RoIHx8IDA7XG4gICAgY29uc3QgbnVtYmVyT2ZaZXJvc0FmdGVyRmlyc3REZWNpbWFsRGlnaXQgPVxuICAgICAgdmFsdWVXaXRob3V0U2VwYXJhdG9ycy5tYXRjaChudW1iZXJPZlplcm9zQWZ0ZXJGaXJzdERlY2ltYWxEaWdpdFJlZ2V4KT8uWzFdLmxlbmd0aCB8fCAwO1xuXG4gICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odGhpcy5wYXJzZUxvY2FsZVN0cmluZ1RvTnVtYmVyKHZhbHVlV2l0aG91dFNlcGFyYXRvcnMpLCAnMS4wLTInKTtcbiAgICBpZiAobnVtYmVyT2ZaZXJvc0FmdGVyRGVjaW1hbFBvaW50ID4gMCkge1xuICAgICAgcmV0dXJuIGZvcm1hdHRlZCArIHRoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yICsgJzAwJy5zbGljZSgwLCBudW1iZXJPZlplcm9zQWZ0ZXJEZWNpbWFsUG9pbnQpO1xuICAgIH1cbiAgICBpZiAobnVtYmVyT2ZaZXJvc0FmdGVyRmlyc3REZWNpbWFsRGlnaXQgPiAwKSB7XG4gICAgICByZXR1cm4gZm9ybWF0dGVkICsgJzAnO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXR0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldE51bWJlck9mVGhvdXNhbmRzU2VwYXJhdG9ycyh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHZhbHVlIHx8ICcnKS5zcGxpdCh0aGlzLnRob3VzYW5kc1NlcGFyYXRvcikubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlmZkluU2VwYXJhdG9ycyhvbGRWYWx1ZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBpbml0aWFsTnVtYmVyT2ZTZXBhcmF0b3JzID0gdGhpcy5nZXROdW1iZXJPZlRob3VzYW5kc1NlcGFyYXRvcnMob2xkVmFsdWUpO1xuICAgIGNvbnN0IGN1cnJlbnROdW1iZXJPZlNlcGFyYXRvcnMgPSB0aGlzLmdldE51bWJlck9mVGhvdXNhbmRzU2VwYXJhdG9ycyhuZXdWYWx1ZSk7XG5cbiAgICByZXR1cm4gY3VycmVudE51bWJlck9mU2VwYXJhdG9ycyAtIGluaXRpYWxOdW1iZXJPZlNlcGFyYXRvcnM7XG4gIH1cblxuICBwcml2YXRlIGhhc09ubHlPbmVEZWNpbWFsU2VwYXJhdG9yQXRUaGVFbmQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCh0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvcikubGVuZ3RoID09PSAyICYmIHZhbHVlLnNsaWNlKC0xKSA9PT0gdGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3I7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTG9jYWxlU3RyaW5nVG9OdW1iZXIodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY2xlYW5QYXR0ZXJuID0gbmV3IFJlZ0V4cChgW14tKzAtOSR7dGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3J9XWAsICdnJyk7XG5cbiAgICBjb25zdCBjbGVhbmVkID0gU3RyaW5nKHZhbHVlKS5yZXBsYWNlKGNsZWFuUGF0dGVybiwgJycpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjbGVhbmVkLnJlcGxhY2UodGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3IsICcuJyk7XG5cbiAgICByZXR1cm4gcGFyc2VGbG9hdChub3JtYWxpemVkKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TmF0aXZlSW5wdXRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROYXRpdmVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJzb3JQb3NpdGlvbihpbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50KTogSUN1cnNvclBvc2l0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IGlucHV0RWwuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IGlucHV0RWwuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3Vyc29yUG9zaXRpb24oaW5wdXRFbDogSFRNTElucHV0RWxlbWVudCwgcG9zaXRpb246IElDdXJzb3JQb3NpdGlvbikge1xuICAgIGlucHV0RWwuc2V0U2VsZWN0aW9uUmFuZ2UocG9zaXRpb24uc3RhcnQgPj0gMCA/IHBvc2l0aW9uLnN0YXJ0IDogMCwgcG9zaXRpb24uZW5kID49IDAgPyBwb3NpdGlvbi5lbmQgOiAwKTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUN1cnNvcihpbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50LCBpbml0aWFsUG9zaXRpb246IElDdXJzb3JQb3NpdGlvbiwgZGlmZjogbnVtYmVyID0gMCk6IHZvaWQge1xuICAgIHRoaXMuc2V0Q3Vyc29yUG9zaXRpb24oaW5wdXRFbCwge1xuICAgICAgc3RhcnQ6IGluaXRpYWxQb3NpdGlvbi5zdGFydCArIGRpZmYsXG4gICAgICBlbmQ6IGluaXRpYWxQb3NpdGlvbi5lbmQgKyBkaWZmXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG51bWJlck9mRGVjaW1hbFBsYWNlcyh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBudW1TdHJpbmcgPSB2YWx1ZSArICcnO1xuICAgIHJldHVybiBudW1TdHJpbmcuc3BsaXQoJy4nKVsxXT8ubGVuZ3RoIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsZURlY2ltYWxQb2ludFNlcGFyYXRvcigpIHtcbiAgICBjb25zdCBleGFtcGxlID0gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0oMS4xLCAnMS4xJyk7XG4gICAgcmV0dXJuIGV4YW1wbGUuY2hhckF0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbGVUaG91c2FuZHNTZXBhcmF0b3IoKSB7XG4gICAgY29uc3QgZXhhbXBsZSA9IHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKDEwMDAsICcxLjAnKTtcbiAgICBpZiAoZXhhbXBsZS5sZW5ndGggPT09IDUpIHtcbiAgICAgIHJldHVybiBleGFtcGxlLmNoYXJBdCgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbHVlIEFjZWNzc29yIE1ldGhvZHM6XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZVRvRW1pdCA9IHZhbHVlID09PSAnJyA/IG51bGwgOiB0aGlzLnBhcnNlTG9jYWxlU3RyaW5nVG9OdW1iZXIodmFsdWUpO1xuICAgICAgY29uc29sZS5sb2coJ0VtaXR0aW5nIHZhbHVlJywgdmFsdWVUb0VtaXQpO1xuICAgICAgZm4odmFsdWVUb0VtaXQpO1xuICAgIH07XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChjYWxsYmFja0Z1bmN0aW9uOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoID0gY2FsbGJhY2tGdW5jdGlvbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsIGlzRGlzYWJsZWQpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gVW5jb21tZW50IHRoYXQgaWYgd2Ugd2FudCB0byBlbWl0IGNvZXJjZWQgdmFsdWUgdG8gbWF4IDIgZGVjaW1hbCBwb2ludHMgb24gd3JpdGVcbiAgICAvLyBmb3IgZXg6IHNldHRpbmcgYSB2YWx1ZSBpLmU6IDI0LjM0MzM1NDU2ICh3aGV0aGVyIHNob3VsZCB3ZSBlbWl0IGltbWVkaWF0ZWx5IDIzLjM0KVxuICAgIC8vIGlmICh0aGlzLm51bWJlck9mRGVjaW1hbFBsYWNlcyhub3JtYWxpemVkVmFsdWUpID4gMikge1xuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgIHRoaXMub25DaGFuZ2UodGhpcy5mb3JtYXRQcmljZVRvMkRlY2ltYWwobm9ybWFsaXplZFZhbHVlKSk7XG4gICAgLy8gICB9LCAxKTtcbiAgICAvLyB9XG4gICAgdGhpcy5yZWZvcm1hdElucHV0KHZhbHVlKTtcbiAgICB0aGlzLnByZXZpb3VzUmF3SW5wdXRWYWx1ZSA9IHRoaXMuZ2V0TmF0aXZlSW5wdXRWYWx1ZSgpO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0ge307XG4gICAgaWYgKGNvbnRyb2wudmFsdWUgPiB0aGlzLm1heCkge1xuICAgICAgZXJyb3JzLm1heCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjb250cm9sLnZhbHVlIDwgdGhpcy5taW4pIHtcbiAgICAgIGVycm9ycy5taW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBlcnJvcnM7XG4gIH1cbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWN1cnJlbmN5LWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1jdXJyZW5jeS1pbnB1dC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtY3VycmVuY3ktaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsU0FBUyxFQUlWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsSUFBTSxnQ0FBZ0MsR0FBUTtJQUM1QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLHNCQUFzQixFQUF0QixDQUFzQixDQUFDO0lBQ3JELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLElBQU0sMkJBQTJCLEdBQVE7SUFDdkMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsc0JBQXNCLEVBQXRCLENBQXNCLENBQUM7SUFDckQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBWUY7SUE4QkUsZ0NBQ1UsV0FBd0IsRUFDeEIsVUFBc0IsRUFDdEIsUUFBbUIsRUFDbkIsUUFBa0I7UUFIbEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQVU7UUFqQ25CLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUkxQiwwQkFBcUIsR0FBRyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUM5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QUFFO1lBQzVCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7U0FDbkI7UUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUQsQ0FBQzs7Z0JBOVBzQixXQUFXO2dCQUNaLFVBQVU7Z0JBQ1osU0FBUztnQkFDVCxRQUFROztJQWpDbkI7UUFBUixLQUFLLEVBQUU7b0VBQTBCO0lBQ3pCO1FBQVIsS0FBSyxFQUFFO3VEQUFhO0lBQ1o7UUFBUixLQUFLLEVBQUU7dURBQWE7SUEwQ3JCO1FBREMsWUFBWSxDQUFDLE1BQU0sQ0FBQzs0REFJcEI7SUFHRDtRQURDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7NkRBdUN6RTtJQUdEO1FBREMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzhEQU9uQztJQWxHVSxzQkFBc0I7UUFMbEMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUNOLGtIQUFrSDtZQUNwSCxTQUFTLEVBQUUsQ0FBQyxXQUFXLEVBQUUsZ0NBQWdDLEVBQUUsMkJBQTJCLENBQUM7U0FDeEYsQ0FBQztPQUNXLHNCQUFzQixDQThSbEM7SUFBRCw2QkFBQztDQUFBLEFBOVJELElBOFJDO1NBOVJZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBmb3J3YXJkUmVmLCBSZW5kZXJlcjIsIElucHV0LCBJbmplY3RvciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5nQ29udHJvbCxcbiAgQWJzdHJhY3RDb250cm9sLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRpb25FcnJvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5jb25zdCBDVVJSRU5DWURJUkVDVElWRV9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3VycmVuY3lJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5jb25zdCBDVVJSRU5DWURJUkVDVElWRV9WQUxJREFUMFI6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3VycmVuY3lJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5pbnRlcmZhY2UgSUN1cnNvclBvc2l0aW9uIHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjpcbiAgICAnaW5wdXRbZm9ybUNvbnRyb2xOYW1lXVtuZ3hDdXJyZW5jeUlucHV0XSwgaW5wdXRbZm9ybUNvbnRyb2xdW25neEN1cnJlbmN5SW5wdXRdLCBpbnB1dFtuZ01vZGVsXVtuZ3hDdXJyZW5jeUlucHV0XScsXG4gIHByb3ZpZGVyczogW0RlY2ltYWxQaXBlLCBDVVJSRU5DWURJUkVDVElWRV9WQUxVRV9BQ0NFU1NPUiwgQ1VSUkVOQ1lESVJFQ1RJVkVfVkFMSURBVDBSXVxufSlcbmV4cG9ydCBjbGFzcyBDdXJyZW5jeUlucHV0RGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0IHtcbiAgQElucHV0KCkgZm9ybWF0T25seU9uQmx1ciA9IGZhbHNlO1xuICBASW5wdXQoKSBtaW46IG51bWJlcjtcbiAgQElucHV0KCkgbWF4OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBkZWNpbWFsUG9pbnRTZXBhcmF0b3IgPSB0aGlzLmdldExvY2FsZURlY2ltYWxQb2ludFNlcGFyYXRvcigpO1xuICBwcml2YXRlIHRob3VzYW5kc1NlcGFyYXRvciA9IHRoaXMuZ2V0TG9jYWxlVGhvdXNhbmRzU2VwYXJhdG9yKCk7XG5cbiAgcHJpdmF0ZSBuZ0NvbnRyb2w6IE5nQ29udHJvbDtcbiAgcHJpdmF0ZSBudW1iZXJzQW5kRGVjaW1hbFBvaW50U2VwYXJhdG9yUmVnZXg6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkS2V5czogc3RyaW5nW10gPSBbXG4gICAgJ0JhY2tzcGFjZScsXG4gICAgJ1RhYicsXG4gICAgJ0VuZCcsXG4gICAgJ0hvbWUnLFxuICAgICdEZWxldGUnLFxuICAgICdEZWwnLFxuICAgICdDdHJsJyxcbiAgICAnQXJyb3dMZWZ0JyxcbiAgICAnQXJyb3dSaWdodCcsXG4gICAgJ0xlZnQnLFxuICAgICdSaWdodCdcbiAgXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkS2V5c1VzZWRXaXRoQ29udHJvbDogc3RyaW5nW10gPSBbJ3gnLCAnYycsICd2JywgJ2EnLCAneiddO1xuICBwcml2YXRlIG51bWJlcldpdGhVcFRvMkRlY2ltYWxzUmVnZXggPSBuZXcgUmVnRXhwKGBeKFswLTldKyk/KFxcXFwke3RoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yfVswLTldP1swLTldPyk/JGApO1xuICBwcml2YXRlIHByZXZpb3VzUmF3SW5wdXRWYWx1ZSA9ICcnO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBwcml2YXRlIG9uVG91Y2g6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgICBjb25zdCBsb2NhbGVEZWNpbWFsUG9pbnRTZXBhcmF0b3IgPSB0aGlzLmdldExvY2FsZURlY2ltYWxQb2ludFNlcGFyYXRvcigpO1xuICAgIHRoaXMubnVtYmVyc0FuZERlY2ltYWxQb2ludFNlcGFyYXRvclJlZ2V4ID0gbmV3IFJlZ0V4cChgWzAtOSR7bG9jYWxlRGVjaW1hbFBvaW50U2VwYXJhdG9yfV1gLCAnZycpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5uZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIGhhbmRsZUJsdXIoKSB7XG4gICAgdGhpcy5yZWZvcm1hdElucHV0KCk7XG4gICAgdGhpcy5vblRvdWNoKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50LnRhcmdldC52YWx1ZScsICckZXZlbnQudGFyZ2V0JywgJyRldmVudCddKVxuICBoYW5kbGVJbnB1dChyYXdJbnB1dFZhbHVlOiBzdHJpbmcsIGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQsIGV2ZW50OiBJbnB1dEV2ZW50KSB7XG4gICAgY29uc3QgZW50ZXJlZERhdGEgPSBldmVudC5kYXRhO1xuICAgIGlmIChlbnRlcmVkRGF0YSA9PT0gdGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3IgJiYgdGhpcy5oYXNPbmx5T25lRGVjaW1hbFNlcGFyYXRvckF0VGhlRW5kKHJhd0lucHV0VmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyYXdJbnB1dFZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5vbkNoYW5nZSgnJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbEN1cnNvclBvc2l0aW9uID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihpbnB1dEVsKTtcblxuICAgIGlmICh0aGlzLmhhc05vTW9yZVRoYW4yRGVjaW1hbERpZ2l0cyhyYXdJbnB1dFZhbHVlKSAmJiAhdGhpcy5pc051bWJlclRvb0xhcmdlKHJhd0lucHV0VmFsdWUpKSB7XG4gICAgICBjb25zdCBuZXdSYXdJbnB1dFZhbHVlID0gdGhpcy5mb3JtYXRPbmx5T25CbHVyID8gcmF3SW5wdXRWYWx1ZSA6IHRoaXMuZm9ybWF0UHJpY2VUb1VwVG8yRGVjaW1hbChyYXdJbnB1dFZhbHVlKTtcbiAgICAgIHRoaXMucHJldmlvdXNSYXdJbnB1dFZhbHVlID0gbmV3UmF3SW5wdXRWYWx1ZTtcbiAgICAgIHRoaXMub25DaGFuZ2UobmV3UmF3SW5wdXRWYWx1ZSk7XG4gICAgICB0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUobmV3UmF3SW5wdXRWYWx1ZSk7XG5cbiAgICAgIGNvbnN0IGRpZmZJblNlcGFyYXRvcnMgPSB0aGlzLmdldERpZmZJblNlcGFyYXRvcnMocmF3SW5wdXRWYWx1ZSwgbmV3UmF3SW5wdXRWYWx1ZSk7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoaW5wdXRFbCwgaW5pdGlhbEN1cnNvclBvc2l0aW9uLCBkaWZmSW5TZXBhcmF0b3JzKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZW50ZXJlZERhdGE/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgZW50ZXJlZERhdGEgIT09IHRoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yICYmXG4gICAgICBpbml0aWFsQ3Vyc29yUG9zaXRpb24uc3RhcnQgIT09IHJhd0lucHV0VmFsdWU/Lmxlbmd0aCAmJlxuICAgICAgaW5pdGlhbEN1cnNvclBvc2l0aW9uLmVuZCAhPT0gcmF3SW5wdXRWYWx1ZT8ubGVuZ3RoICYmXG4gICAgICAhdGhpcy5pc051bWJlclRvb0xhcmdlKHJhd0lucHV0VmFsdWUpXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIHNlY3Rpb24gYWxsb3dzIHRvIG92ZXJyaWRlIG51bWJlcnMgYWZ0ZXIgZGVjaW1hbCBwb2ludFxuICAgICAgY29uc3QgbmV3UmF3SW5wdXRWYWx1ZSA9IHRoaXMucmVwbGFjZUF0KHRoaXMucHJldmlvdXNSYXdJbnB1dFZhbHVlLCBpbml0aWFsQ3Vyc29yUG9zaXRpb24uc3RhcnQgLSAxLCBlbnRlcmVkRGF0YSk7XG4gICAgICB0aGlzLnByZXZpb3VzUmF3SW5wdXRWYWx1ZSA9IG5ld1Jhd0lucHV0VmFsdWU7XG4gICAgICB0aGlzLm9uQ2hhbmdlKG5ld1Jhd0lucHV0VmFsdWUpO1xuICAgICAgdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKG5ld1Jhd0lucHV0VmFsdWUpO1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKGlucHV0RWwsIGluaXRpYWxDdXJzb3JQb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSh0aGlzLnByZXZpb3VzUmF3SW5wdXRWYWx1ZSk7XG4gICAgICBjb25zdCBjdXJzb3JEaWZmID0gZW50ZXJlZERhdGEgPyAtZW50ZXJlZERhdGEubGVuZ3RoIDogMDtcbiAgICAgIHRoaXMubW92ZUN1cnNvcihpbnB1dEVsLCBpbml0aWFsQ3Vyc29yUG9zaXRpb24sIGN1cnNvckRpZmYpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlEb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc1NwZWNpYWxBbGxvd2VkS2V5KGV2ZW50KSB8fCB0aGlzLmlzTnVtYmVyS2V5KGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIGlzTnVtYmVyVG9vTGFyZ2UocmF3SW5wdXRWYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnBhcnNlTG9jYWxlU3RyaW5nVG9OdW1iZXIocmF3SW5wdXRWYWx1ZSk7XG4gICAgcmV0dXJuIHZhbHVlID49IDEwMDAwMDAwMDAwMDAwO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXQob3JpZ2luYWxWYWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCByZXBsYWNlbWVudDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsVmFsdWUuc3Vic3RyKDAsIGluZGV4KSArIHJlcGxhY2VtZW50ICsgb3JpZ2luYWxWYWx1ZS5zdWJzdHIoaW5kZXggKyByZXBsYWNlbWVudC5sZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc051bWJlcktleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBldmVudC5rZXkgJiYgZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSAmJiAhIVN0cmluZyhldmVudC5rZXkpLm1hdGNoKHRoaXMubnVtYmVyc0FuZERlY2ltYWxQb2ludFNlcGFyYXRvclJlZ2V4KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTcGVjaWFsQWxsb3dlZEtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRLZXlzLmluY2x1ZGVzKGV2ZW50LmtleSkgfHwgdGhpcy5pc0FsbG93ZWRLZXlXaXRoQ29udHJvbChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGlzQWxsb3dlZEtleVdpdGhDb250cm9sKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5hbGxvd2VkS2V5c1VzZWRXaXRoQ29udHJvbC5pbmNsdWRlcyhldmVudC5rZXkpIHx8XG4gICAgICAgIHRoaXMuYWxsb3dlZEtleXNVc2VkV2l0aENvbnRyb2wubWFwKChrZXkpID0+IGtleS50b1VwcGVyQ2FzZSgpKS5pbmNsdWRlcyhldmVudC5rZXkpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZVdpdGhvdXRUaG91c2FuZHNTZXBhcmF0b3IodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KHRoaXMudGhvdXNhbmRzU2VwYXJhdG9yKS5qb2luKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzTm9Nb3JlVGhhbjJEZWNpbWFsRGlnaXRzKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZVdpdGhvdXRTZXBhcmF0b3JzID0gdGhpcy5nZXRWYWx1ZVdpdGhvdXRUaG91c2FuZHNTZXBhcmF0b3IodmFsdWUpO1xuXG4gICAgcmV0dXJuIHRoaXMubnVtYmVyV2l0aFVwVG8yRGVjaW1hbHNSZWdleC50ZXN0KHZhbHVlV2l0aG91dFNlcGFyYXRvcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZvcm1hdElucHV0KHZhbHVlPzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB0aGlzLm5nQ29udHJvbC52YWx1ZTtcblxuICAgIGlmIChuZXdWYWx1ZSB8fCBuZXdWYWx1ZSA9PT0gMCkge1xuICAgICAgY29uc3Qgd2l0aDJEZWNpbWFscyA9IHRoaXMuZm9ybWF0UHJpY2VUbzJEZWNpbWFsKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSh3aXRoMkRlY2ltYWxzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKCcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFByaWNlVG8yRGVjaW1hbCh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBudW1iZXJUb1RyYW5zZm9ybSA9ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdGhpcy5wYXJzZUxvY2FsZVN0cmluZ1RvTnVtYmVyKHZhbHVlKSA6IHZhbHVlKSB8fCAwO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKG51bWJlclRvVHJhbnNmb3JtLCAnMS4yLTInKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0UHJpY2VUb1VwVG8yRGVjaW1hbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBwb3RlbnRpYWwgZm9yIHJlZmFjdG9yOlxuICAgIGNvbnN0IG51bWJlck9mWmVyb3NBZnRlckRlY2ltYWxQb2ludFJlZ2V4ID0gYF5bMC05XSpcXFxcJHt0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvcn0oMCspJGA7XG4gICAgY29uc3QgbnVtYmVyT2ZaZXJvc0FmdGVyRmlyc3REZWNpbWFsRGlnaXRSZWdleCA9IGBeWzAtOV0qXFxcXCR7dGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3J9WzEtOV0oMCspJGA7XG5cbiAgICBjb25zdCB2YWx1ZVdpdGhvdXRTZXBhcmF0b3JzID0gdGhpcy5nZXRWYWx1ZVdpdGhvdXRUaG91c2FuZHNTZXBhcmF0b3IodmFsdWUpO1xuICAgIGNvbnN0IG51bWJlck9mWmVyb3NBZnRlckRlY2ltYWxQb2ludCA9XG4gICAgICB2YWx1ZVdpdGhvdXRTZXBhcmF0b3JzLm1hdGNoKG51bWJlck9mWmVyb3NBZnRlckRlY2ltYWxQb2ludFJlZ2V4KT8uWzFdLmxlbmd0aCB8fCAwO1xuICAgIGNvbnN0IG51bWJlck9mWmVyb3NBZnRlckZpcnN0RGVjaW1hbERpZ2l0ID1cbiAgICAgIHZhbHVlV2l0aG91dFNlcGFyYXRvcnMubWF0Y2gobnVtYmVyT2ZaZXJvc0FmdGVyRmlyc3REZWNpbWFsRGlnaXRSZWdleCk/LlsxXS5sZW5ndGggfHwgMDtcblxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKHRoaXMucGFyc2VMb2NhbGVTdHJpbmdUb051bWJlcih2YWx1ZVdpdGhvdXRTZXBhcmF0b3JzKSwgJzEuMC0yJyk7XG4gICAgaWYgKG51bWJlck9mWmVyb3NBZnRlckRlY2ltYWxQb2ludCA+IDApIHtcbiAgICAgIHJldHVybiBmb3JtYXR0ZWQgKyB0aGlzLmRlY2ltYWxQb2ludFNlcGFyYXRvciArICcwMCcuc2xpY2UoMCwgbnVtYmVyT2ZaZXJvc0FmdGVyRGVjaW1hbFBvaW50KTtcbiAgICB9XG4gICAgaWYgKG51bWJlck9mWmVyb3NBZnRlckZpcnN0RGVjaW1hbERpZ2l0ID4gMCkge1xuICAgICAgcmV0dXJuIGZvcm1hdHRlZCArICcwJztcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROdW1iZXJPZlRob3VzYW5kc1NlcGFyYXRvcnModmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuICh2YWx1ZSB8fCAnJykuc3BsaXQodGhpcy50aG91c2FuZHNTZXBhcmF0b3IpLmxlbmd0aCAtIDE7XG4gIH1cblxuICBwcml2YXRlIGdldERpZmZJblNlcGFyYXRvcnMob2xkVmFsdWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgaW5pdGlhbE51bWJlck9mU2VwYXJhdG9ycyA9IHRoaXMuZ2V0TnVtYmVyT2ZUaG91c2FuZHNTZXBhcmF0b3JzKG9sZFZhbHVlKTtcbiAgICBjb25zdCBjdXJyZW50TnVtYmVyT2ZTZXBhcmF0b3JzID0gdGhpcy5nZXROdW1iZXJPZlRob3VzYW5kc1NlcGFyYXRvcnMobmV3VmFsdWUpO1xuXG4gICAgcmV0dXJuIGN1cnJlbnROdW1iZXJPZlNlcGFyYXRvcnMgLSBpbml0aWFsTnVtYmVyT2ZTZXBhcmF0b3JzO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNPbmx5T25lRGVjaW1hbFNlcGFyYXRvckF0VGhlRW5kKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQodGhpcy5kZWNpbWFsUG9pbnRTZXBhcmF0b3IpLmxlbmd0aCA9PT0gMiAmJiB2YWx1ZS5zbGljZSgtMSkgPT09IHRoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUxvY2FsZVN0cmluZ1RvTnVtYmVyKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGNsZWFuUGF0dGVybiA9IG5ldyBSZWdFeHAoYFteLSswLTkke3RoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yfV1gLCAnZycpO1xuXG4gICAgY29uc3QgY2xlYW5lZCA9IFN0cmluZyh2YWx1ZSkucmVwbGFjZShjbGVhblBhdHRlcm4sICcnKTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gY2xlYW5lZC5yZXBsYWNlKHRoaXMuZGVjaW1hbFBvaW50U2VwYXJhdG9yLCAnLicpO1xuXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobm9ybWFsaXplZCk7XG4gIH1cblxuICBwcml2YXRlIHNldE5hdGl2ZUlucHV0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmF0aXZlSW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3Vyc29yUG9zaXRpb24oaW5wdXRFbDogSFRNTElucHV0RWxlbWVudCk6IElDdXJzb3JQb3NpdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBpbnB1dEVsLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBpbnB1dEVsLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnNvclBvc2l0aW9uKGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQsIHBvc2l0aW9uOiBJQ3Vyc29yUG9zaXRpb24pIHtcbiAgICBpbnB1dEVsLnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLnN0YXJ0ID49IDAgPyBwb3NpdGlvbi5zdGFydCA6IDAsIHBvc2l0aW9uLmVuZCA+PSAwID8gcG9zaXRpb24uZW5kIDogMCk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVDdXJzb3IoaW5wdXRFbDogSFRNTElucHV0RWxlbWVudCwgaW5pdGlhbFBvc2l0aW9uOiBJQ3Vyc29yUG9zaXRpb24sIGRpZmY6IG51bWJlciA9IDApOiB2b2lkIHtcbiAgICB0aGlzLnNldEN1cnNvclBvc2l0aW9uKGlucHV0RWwsIHtcbiAgICAgIHN0YXJ0OiBpbml0aWFsUG9zaXRpb24uc3RhcnQgKyBkaWZmLFxuICAgICAgZW5kOiBpbml0aWFsUG9zaXRpb24uZW5kICsgZGlmZlxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBudW1iZXJPZkRlY2ltYWxQbGFjZXModmFsdWU6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgbnVtU3RyaW5nID0gdmFsdWUgKyAnJztcbiAgICByZXR1cm4gbnVtU3RyaW5nLnNwbGl0KCcuJylbMV0/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbGVEZWNpbWFsUG9pbnRTZXBhcmF0b3IoKSB7XG4gICAgY29uc3QgZXhhbXBsZSA9IHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKDEuMSwgJzEuMScpO1xuICAgIHJldHVybiBleGFtcGxlLmNoYXJBdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxlVGhvdXNhbmRzU2VwYXJhdG9yKCkge1xuICAgIGNvbnN0IGV4YW1wbGUgPSB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSgxMDAwLCAnMS4wJyk7XG4gICAgaWYgKGV4YW1wbGUubGVuZ3RoID09PSA1KSB7XG4gICAgICByZXR1cm4gZXhhbXBsZS5jaGFyQXQoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvLyBWYWx1ZSBBY2Vjc3NvciBNZXRob2RzOlxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdmFsdWVUb0VtaXQgPSB2YWx1ZSA9PT0gJycgPyBudWxsIDogdGhpcy5wYXJzZUxvY2FsZVN0cmluZ1RvTnVtYmVyKHZhbHVlKTtcbiAgICAgIGNvbnNvbGUubG9nKCdFbWl0dGluZyB2YWx1ZScsIHZhbHVlVG9FbWl0KTtcbiAgICAgIGZuKHZhbHVlVG9FbWl0KTtcbiAgICB9O1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoY2FsbGJhY2tGdW5jdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaCA9IGNhbGxiYWNrRnVuY3Rpb247XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCBpc0Rpc2FibGVkKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIFVuY29tbWVudCB0aGF0IGlmIHdlIHdhbnQgdG8gZW1pdCBjb2VyY2VkIHZhbHVlIHRvIG1heCAyIGRlY2ltYWwgcG9pbnRzIG9uIHdyaXRlXG4gICAgLy8gZm9yIGV4OiBzZXR0aW5nIGEgdmFsdWUgaS5lOiAyNC4zNDMzNTQ1NiAod2hldGhlciBzaG91bGQgd2UgZW1pdCBpbW1lZGlhdGVseSAyMy4zNClcbiAgICAvLyBpZiAodGhpcy5udW1iZXJPZkRlY2ltYWxQbGFjZXMobm9ybWFsaXplZFZhbHVlKSA+IDIpIHtcbiAgICAvLyAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZm9ybWF0UHJpY2VUbzJEZWNpbWFsKG5vcm1hbGl6ZWRWYWx1ZSkpO1xuICAgIC8vICAgfSwgMSk7XG4gICAgLy8gfVxuICAgIHRoaXMucmVmb3JtYXRJbnB1dCh2YWx1ZSk7XG4gICAgdGhpcy5wcmV2aW91c1Jhd0lucHV0VmFsdWUgPSB0aGlzLmdldE5hdGl2ZUlucHV0VmFsdWUoKTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGNvbnN0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IHt9O1xuICAgIGlmIChjb250cm9sLnZhbHVlID4gdGhpcy5tYXgpIHtcbiAgICAgIGVycm9ycy5tYXggPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoY29udHJvbC52YWx1ZSA8IHRoaXMubWluKSB7XG4gICAgICBlcnJvcnMubWluID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPT09IDAgPyBudWxsIDogZXJyb3JzO1xuICB9XG59XG4iXX0= |
@@ -22,3 +22,3 @@ import { __decorate } from 'tslib'; | ||
this.injector = injector; | ||
this.formatOnlyOnBlur = true; | ||
this.formatOnlyOnBlur = false; | ||
this.decimalPointSeparator = this.getLocaleDecimalPointSeparator(); | ||
@@ -25,0 +25,0 @@ this.thousandsSeparator = this.getLocaleThousandsSeparator(); |
@@ -22,3 +22,3 @@ import { __decorate } from 'tslib'; | ||
this.injector = injector; | ||
this.formatOnlyOnBlur = true; | ||
this.formatOnlyOnBlur = false; | ||
this.decimalPointSeparator = this.getLocaleDecimalPointSeparator(); | ||
@@ -25,0 +25,0 @@ this.thousandsSeparator = this.getLocaleThousandsSeparator(); |
{ | ||
"name": "ngx-currency-input", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"peerDependencies": { | ||
@@ -11,2 +11,19 @@ "@angular/common": "^9.1.11", | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/filipows/ngx-currency-input.git" | ||
}, | ||
"keywords": [ | ||
"angular", | ||
"currency", | ||
"decimal", | ||
"input", | ||
"directive" | ||
], | ||
"author": "Chris Filipowski", | ||
"bugs": { | ||
"url": "https://github.com/filipows/ngx-currency-input/issues" | ||
}, | ||
"homepage": "https://github.com/filipows/ngx-currency-input#readme", | ||
"license": "MIT", | ||
"main": "bundles/ngx-currency-input.umd.js", | ||
@@ -13,0 +30,0 @@ "module": "fesm5/ngx-currency-input.js", |
@@ -15,3 +15,3 @@ # Angular Currency Input Directive | ||
[Demo](https://filipows.github.io/ngx-currency-input/) | | ||
[StackBlitz Template (TODO)](https://filipows.github.io/ngx-currency-input/) | ||
[StackBlitz Template](https://stackblitz.com/edit/ngx-currency-input?file=src/app/app.component.html) | ||
@@ -26,2 +26,17 @@ ## Getting Started | ||
### Import NgxCurrencyInput Module | ||
```ts | ||
import { NgxCurrencyInputModule } from 'ngx-currency-input'; | ||
@NgModule({ | ||
declarations: [...], | ||
imports: [ | ||
... | ||
NgxCurrencyInputModule | ||
] | ||
}) | ||
export class AppModule {} | ||
``` | ||
### Usage | ||
@@ -33,2 +48,16 @@ | ||
### Available Options | ||
| Name | Description | | ||
| ------------------------------------ | ---------------------------------------------------------------------------------- | | ||
| @Input() `formatOnlyOnBlur`: boolean | When `true`, the input won't be formatted while entering a value. Default: `false` | | ||
| @Input() `min`: number | Validation min value | | ||
| @Input() `max`: number | Validation max value | | ||
Example: | ||
```html | ||
<input ngxCurrencyInput [formatOnlyOnBlur]="true" [min]="10" [max]="1000" [(ngModel)]="value" /> | ||
``` | ||
## Authors | ||
@@ -35,0 +64,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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No contributors or author data
MaintenancePackage does not specify a list of contributors or an author in package.json.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No License Found
License(Experimental) License information could not be found.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
279445
0
0
1
67
0