@vendasta/store
Version:
Components and data for Store
228 lines • 20.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input } from '@angular/core';
import { formatDisplayPrice, formatBillingFrequency } from '@vendasta/core/shared';
var VaPricingComponent = /** @class */ (function () {
function VaPricingComponent() {
this.pricing = null;
this.wrapFrequency = false;
this.isAddon = false;
this.hasVerifiedContract = false;
this.highlightPrice = true;
this.loaded = true;
}
Object.defineProperty(VaPricingComponent.prototype, "isFree", {
get: /**
* @return {?}
*/
function () {
/** @type {?} */
var isFreeHelper = function (prices) {
return prices
? prices.some(function (p) { return p.price === 0 || p.price === undefined; })
: false;
};
if (this.hasVerifiedContract && this.billedProduct) {
return this.billedProduct.pricingTiers.length === 1 ? isFreeHelper(this.billedProduct.pricingTiers) : false;
}
return this.pricing && isFreeHelper(this.pricing.prices) ? true : false;
},
enumerable: true,
configurable: true
});
Object.defineProperty(VaPricingComponent.prototype, "shouldContactSales", {
get: /**
* @return {?}
*/
function () {
/** @type {?} */
var nestedPricesIsContactSales = function (prices) {
return prices && prices.length > 0
? prices.some(function (p) { return p.price === null || p.price < 0; })
: true;
};
if (this.hasVerifiedContract && this.billedProduct) {
return nestedPricesIsContactSales(this.billedProduct.pricingTiers) ? true : false;
}
if (!this.pricing) {
return true;
}
return nestedPricesIsContactSales(this.pricing.prices);
},
enumerable: true,
configurable: true
});
/**
* @param {?} billedProduct
* @return {?}
*/
VaPricingComponent.prototype.isFlatPrice = /**
* @param {?} billedProduct
* @return {?}
*/
function (billedProduct) {
return billedProduct.pricingTiers.length === 1;
};
/**
* @param {?} tier
* @return {?}
*/
VaPricingComponent.prototype.buildPricingTierString = /**
* @param {?} tier
* @return {?}
*/
function (tier) {
/** @type {?} */
var max = String(tier.rangeMax);
if (tier.rangeMax === -1) {
max = '∞';
if (tier.rangeMin === 0 || tier.rangeMin === 1) {
return '';
}
}
return String(tier.rangeMin) + ' to ' + max;
};
/**
* @param {?} tier
* @param {?=} frequency
* @return {?}
*/
VaPricingComponent.prototype.buildPricingTierForProduct = /**
* @param {?} tier
* @param {?=} frequency
* @return {?}
*/
function (tier, frequency) {
/** @type {?} */
var pricingTier = this.buildPricingTierString(tier);
/** @type {?} */
var formattedFrequency = formatBillingFrequency(frequency);
return pricingTier ? pricingTier + ' accounts ' + formattedFrequency : formattedFrequency;
};
/**
* @param {?} tier
* @return {?}
*/
VaPricingComponent.prototype.buildPricingTierForAddon = /**
* @param {?} tier
* @return {?}
*/
function (tier) {
/** @type {?} */
var pricingRange = this.buildPricingTierString(tier);
return pricingRange ? pricingRange : '';
};
/**
* @param {?} price
* @param {?} currency
* @param {?=} excludeFrequency
* @return {?}
*/
VaPricingComponent.prototype.buildPriceStringForPricing = /**
* @param {?} price
* @param {?} currency
* @param {?=} excludeFrequency
* @return {?}
*/
function (price, currency, excludeFrequency) {
return formatDisplayPrice(price.price, currency, (/** @type {?} */ ((excludeFrequency ? '' : price.frequency))), true, true, true, price.isStartingPrice);
};
/**
* @param {?} tier
* @param {?=} frequency
* @param {?=} isStartingPrice
* @return {?}
*/
VaPricingComponent.prototype.buildPriceStringForTier = /**
* @param {?} tier
* @param {?=} frequency
* @param {?=} isStartingPrice
* @return {?}
*/
function (tier, frequency, isStartingPrice) {
return formatDisplayPrice(tier.price, this.billedProduct.currency, (/** @type {?} */ (frequency)), undefined, undefined, undefined, isStartingPrice);
};
/**
* @param {?=} frequency
* @return {?}
*/
VaPricingComponent.prototype.buildFrequencyString = /**
* @param {?=} frequency
* @return {?}
*/
function (frequency) {
return formatBillingFrequency(frequency);
};
/**
* @return {?}
*/
VaPricingComponent.prototype.buildCommitmentMessage = /**
* @return {?}
*/
function () {
/** @type {?} */
var frequency = this.billedProduct ? this.billedProduct.billingFrequency.toString().toLowerCase() :
this.pricing && this.pricing.prices.length > 0 ? this.pricing.prices[0].frequency.toLowerCase() : '';
/** @type {?} */
var frequencyString = '';
if (frequency === 'yearly') {
frequencyString = 'year';
}
else if (frequency === 'monthly') {
frequencyString = 'month';
}
if (!frequencyString || this.isFree || this.shouldContactSales) {
return '';
}
if (this.billedProduct && this.billedProduct.commitment) {
/** @type {?} */
var initial = this.billedProduct.commitment.initial;
/** @type {?} */
var recurring = this.billedProduct.commitment.recurring;
if (this.highlightPrice) {
return "*" + initial + " " + frequencyString + " minimum, renews for " + recurring + " " + frequencyString + " periods";
}
else {
return initial + " " + frequencyString + " commitment";
}
}
return '';
};
VaPricingComponent.decorators = [
{ type: Component, args: [{
selector: 'va-pricing',
template: "<ng-container *ngIf=\"highlightPrice\">\n <highlight-pricing [pricing]=\"pricing\"\n [billedProduct]=\"billedProduct\"\n [highlightPrice]=\"highlightPrice\"\n [isAddon]=\"isAddon\"\n [hasVerifiedContract]=\"hasVerifiedContract\"\n [wrapFrequency]=\"wrapFrequency\"\n [loaded]=\"loaded\">\n </highlight-pricing>\n</ng-container>\n<ng-container *ngIf=\"!highlightPrice\">\n <table-pricing [pricing]=\"pricing\"\n [highlightPrice]=\"highlightPrice\"\n [billedProduct]=\"billedProduct\"\n [hasVerifiedContract]=\"hasVerifiedContract\"\n [loaded]=\"loaded\">\n </table-pricing>\n</ng-container>\n",
styles: [""]
}] }
];
VaPricingComponent.propDecorators = {
pricing: [{ type: Input }],
billedProduct: [{ type: Input }],
wrapFrequency: [{ type: Input }],
isAddon: [{ type: Input }],
hasVerifiedContract: [{ type: Input }],
highlightPrice: [{ type: Input }],
loaded: [{ type: Input }]
};
return VaPricingComponent;
}());
export { VaPricingComponent };
if (false) {
/** @type {?} */
VaPricingComponent.prototype.pricing;
/** @type {?} */
VaPricingComponent.prototype.billedProduct;
/** @type {?} */
VaPricingComponent.prototype.wrapFrequency;
/** @type {?} */
VaPricingComponent.prototype.isAddon;
/** @type {?} */
VaPricingComponent.prototype.hasVerifiedContract;
/** @type {?} */
VaPricingComponent.prototype.highlightPrice;
/** @type {?} */
VaPricingComponent.prototype.loaded;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2luZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdmVuZGFzdGEvc3RvcmUvIiwic291cmNlcyI6WyJsaWIvcHJpY2luZy9wcmljaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUErQixrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR2hIO0lBQUE7UUFNYSxZQUFPLEdBQVksSUFBSSxDQUFDO1FBRXhCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFdBQU0sR0FBRyxJQUFJLENBQUM7SUEyRzNCLENBQUM7SUF6R0csc0JBQUksc0NBQU07Ozs7UUFBVjs7Z0JBQ1UsWUFBWSxHQUFHLFVBQUMsTUFBMkI7Z0JBQzdDLE9BQU8sTUFBTTtvQkFDVCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUF0QyxDQUFzQyxDQUFDO29CQUMxRCxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2hCLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNoRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDL0c7WUFDRCxPQUFPLElBQUksQ0FBQyxPQUFP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YUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPOztnQkFDL0MsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVM7WUFDekQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QixPQUFPLE1BQUksT0FBTyxTQUFJLGVBQWUsNkJBQXdCLFNBQVMsU0FBSSxlQUFlLGFBQVUsQ0FBQTthQUNwRztpQkFBTTtnQkFDTCxPQUFVLE9BQU8sU0FBSSxlQUFlLGdCQUFhLENBQUM7YUFDbkQ7U0FDRjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7Z0JBdEhKLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsdXhCQUF1Qzs7aUJBRTFDOzs7MEJBRUksS0FBSztnQ0FDTCxLQUFLO2dDQUNMLEtBQUs7MEJBQ0wsS0FBSztzQ0FDTCxLQUFLO2lDQUNMLEtBQUs7eUJBQ0wsS0FBSzs7SUEyR1YseUJBQUM7Q0FBQSxBQXZIRCxJQXVIQztTQWxIWSxrQkFBa0I7OztJQUMzQixxQ0FBaUM7O0lBQ2pDLDJDQUFzQzs7SUFDdEMsMkNBQStCOztJQUMvQixxQ0FBeUI7O0lBQ3pCLGlEQUFxQzs7SUFDckMsNENBQStCOztJQUMvQixvQ0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCaWxsZWRQcm9kdWN0LCBQcmljaW5nVGllciB9IGZyb20gJ0B2ZW5kYXN0YS9jb3JlL2JpbGxpbmcnO1xuaW1wb3J0IHsgTWFya2V0cGxhY2VCaWxsaW5nRnJlcXVlbmN5LCBmb3JtYXREaXNwbGF5UHJpY2UsIGZvcm1hdEJpbGxpbmdGcmVxdWVuY3kgfSBmcm9tICdAdmVuZGFzdGEvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHsgUHJpY2luZywgUHJpY2UgfSBmcm9tICcuL3ByaWNpbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3ZhLXByaWNpbmcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcmljaW5nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wcmljaW5nLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVmFQcmljaW5nQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBwcmljaW5nOiBQcmljaW5nID0gbnVsbDtcbiAgICBASW5wdXQoKSBiaWxsZWRQcm9kdWN0OiBCaWxsZWRQcm9kdWN0O1xuICAgIEBJbnB1dCgpIHdyYXBGcmVxdWVuY3kgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpc0FkZG9uID0gZmFsc2U7XG4gICAgQElucHV0KCkgaGFzVmVyaWZpZWRDb250cmFjdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZ2hsaWdodFByaWNlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBsb2FkZWQgPSB0cnVlO1xuXG4gICAgZ2V0IGlzRnJlZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXNGcmVlSGVscGVyID0gKHByaWNlczogeyBwcmljZTogbnVtYmVyIH1bXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHByaWNlc1xuICAgICAgICAgICAgICAgID8gcHJpY2VzLnNvbWUocCA9PiBwLnByaWNlID09PSAwIHx8IHAucHJpY2UgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmhhc1ZlcmlmaWVkQ29udHJhY3QgJiYgdGhpcy5iaWxsZWRQcm9kdWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iaWxsZWRQcm9kdWN0LnByaWNpbmdUaWVycy5sZW5ndGggPT09IDEgPyBpc0ZyZWVIZWxwZXIodGhpcy5iaWxsZWRQcm9kdWN0LnByaWNpbmdUaWVycykgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcmljaW5nICYmIGlzRnJlZUhlbHBlcih0aGlzLnByaWNpbmcucHJpY2VzKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgc2hvdWxkQ29udGFjdFNhbGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBuZXN0ZWRQcmljZXNJc0NvbnRhY3RTYWxlcyA9IChwcmljZXM6IHsgcHJpY2U6IG51bWJlciB9W10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcmljZXMgJiYgcHJpY2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IHByaWNlcy5zb21lKHAgPT4gcC5wcmljZSA9PT0gbnVsbCB8fCBwLnByaWNlIDwgMClcbiAgICAgICAgICAgICAgICA6IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzVmVyaWZpZWRDb250cmFjdCAmJiB0aGlzLmJpbGxlZFByb2R1Y3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXN0ZWRQcmljZXNJc0NvbnRhY3RTYWxlcyh0aGlzLmJpbGxlZFByb2R1Y3QucHJpY2luZ1RpZXJzKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucHJpY2luZykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5lc3RlZFByaWNlc0lzQ29udGFjdFNhbGVzKHRoaXMucHJpY2luZy5wcmljZXMpO1xuICAgIH1cblxuICAgIGlzRmxhdFByaWNlKGJpbGxlZFByb2R1Y3Q6IEJpbGxlZFByb2R1Y3QpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGJpbGxlZFByb2R1Y3QucHJpY2luZ1RpZXJzLmxlbmd0aCA9PT0gMTtcbiAgICB9XG5cbiAgICBidWlsZFByaWNpbmdUaWVyU3RyaW5nKHRpZXI6IFByaWNpbmdUaWVyKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG1heCA9IFN0cmluZyh0aWVyLnJhbmdlTWF4KTtcbiAgICAgICAgaWYgKHRpZXIucmFuZ2VNYXggPT09IC0xKSB7XG4gICAgICAgICAgICBtYXggPSAn4oieJztcbiAgICAgICAgICAgIGlmICh0aWVyLnJhbmdlTWluID09PSAwIHx8IHRpZXIucmFuZ2VNaW4gPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aWVyLnJhbmdlTWluKSArICcgdG8gJyArIG1heDtcbiAgICB9XG5cbiAgICBidWlsZFByaWNpbmdUaWVyRm9yUHJvZHVjdCh0aWVyOiBQcmljaW5nVGllciwgZnJlcXVlbmN5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHByaWNpbmdUaWVyID0gdGhpcy5idWlsZFByaWNpbmdUaWVyU3RyaW5nKHRpZXIpO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRGcmVxdWVuY3kgPSBmb3JtYXRCaWxsaW5nRnJlcXVlbmN5KGZyZXF1ZW5jeSk7XG4gICAgICAgIHJldHVybiBwcmljaW5nVGllciA/IHByaWNpbmdUaWVyICsgJyBhY2NvdW50cyAnICsgZm9ybWF0dGVkRnJlcXVlbmN5IDogZm9ybWF0dGVkRnJlcXVlbmN5O1xuICAgIH1cblxuICAgIGJ1aWxkUHJpY2luZ1RpZXJGb3JBZGRvbih0aWVyOiBQcmljaW5nVGllcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHByaWNpbmdSYW5nZSA9IHRoaXMuYnVpbGRQcmljaW5nVGllclN0cmluZyh0aWVyKTtcbiAgICAgICAgcmV0dXJuIHByaWNpbmdSYW5nZSA/IHByaWNpbmdSYW5nZSA6ICcnO1xuICAgIH1cblxuICAgIGJ1aWxkUHJpY2VTdHJpbmdGb3JQcmljaW5nKHByaWNlOiBQcmljZSwgY3VycmVuY3k6IHN0cmluZywgZXhjbHVkZUZyZXF1ZW5jeT86IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZm9ybWF0RGlzcGxheVByaWNlKFxuICAgICAgICAgIHByaWNlLnByaWNlLFxuICAgICAgICAgIGN1cnJlbmN5LFxuICAgICAgICAgIChleGNsdWRlRnJlcXVlbmN5ID8gJycgOiBwcmljZS5mcmVxdWVuY3kpIGFzIGFueSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICBwcmljZS5pc1N0YXJ0aW5nUHJpY2UsXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBidWlsZFByaWNlU3RyaW5nRm9yVGllcih0aWVyOiBQcmljaW5nVGllciwgZnJlcXVlbmN5PzogTWFya2V0cGxhY2VCaWxsaW5nRnJlcXVlbmN5LCBpc1N0YXJ0aW5nUHJpY2U/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXREaXNwbGF5UHJpY2UoXG4gICAgICAgICAgdGllci5wcmljZSxcbiAgICAgICAgICB0aGlzLmJpbGxlZFByb2R1Y3QuY3VycmVuY3ksXG4gICAgICAgICAgZnJlcXVlbmN5IGFzIGFueSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBpc1N0YXJ0aW5nUHJpY2UpO1xuICAgIH1cblxuICAgIGJ1aWxkRnJlcXVlbmN5U3RyaW5nKGZyZXF1ZW5jeT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBmb3JtYXRCaWxsaW5nRnJlcXVlbmN5KGZyZXF1ZW5jeSk7XG4gICAgfVxuXG4gICAgYnVpbGRDb21taXRtZW50TWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgY29uc3QgZnJlcXVlbmN5ID0gdGhpcy5iaWxsZWRQcm9kdWN0ID8gdGhpcy5iaWxsZWRQcm9kdWN0LmJpbGxpbmdGcmVxdWVuY3kudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIDpcbiAgICAgICAgdGhpcy5wcmljaW5nICYmIHRoaXMucHJpY2luZy5wcmljZXMubGVuZ3RoID4gMCA/IHRoaXMucHJpY2luZy5wcmljZXNbMF0uZnJlcXVlbmN5LnRvTG93ZXJDYXNlKCkgOiAnJztcbiAgICAgIGxldCBmcmVxdWVuY3lTdHJpbmcgPSAnJztcbiAgICAgIGlmIChmcmVxdWVuY3kgPT09ICd5ZWFybHknKSB7XG4gICAgICAgIGZyZXF1ZW5jeVN0cmluZyA9ICd5ZWFyJztcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnbW9udGhseScpIHtcbiAgICAgICAgZnJlcXVlbmN5U3RyaW5nID0gJ21vbnRoJztcbiAgICAgIH1cbiAgICAgIGlmICghZnJlcXVlbmN5U3RyaW5nIHx8IHRoaXMuaXNGcmVlIHx8IHRoaXMuc2hvdWxkQ29udGFjdFNhbGVzKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmJpbGxlZFByb2R1Y3QgJiYgdGhpcy5iaWxsZWRQcm9kdWN0LmNvbW1pdG1lbnQpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbCA9IHRoaXMuYmlsbGVkUHJvZHVjdC5jb21taXRtZW50LmluaXRpYWw7XG4gICAgICAgIGNvbnN0IHJlY3VycmluZyA9IHRoaXMuYmlsbGVkUHJvZHVjdC5jb21taXRtZW50LnJlY3VycmluZztcbiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0UHJpY2UpIHtcbiAgICAgICAgICByZXR1cm4gYCoke2luaXRpYWx9ICR7ZnJlcXVlbmN5U3RyaW5nfSBtaW5pbXVtLCByZW5ld3MgZm9yICR7cmVjdXJyaW5nfSAke2ZyZXF1ZW5jeVN0cmluZ30gcGVyaW9kc2BcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYCR7aW5pdGlhbH0gJHtmcmVxdWVuY3lTdHJpbmd9IGNvbW1pdG1lbnRgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuIl19