ng-easycommerce 0.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/assets/ec-i18n/ct.json +2 -0
- package/assets/ec-i18n/en.json +2 -0
- package/assets/ec-i18n/es.json +2 -0
- package/assets/ec-i18n/fr.json +2 -0
- package/assets/ec-i18n/gl.json +2 -0
- package/assets/ec-i18n/pr.json +2 -0
- package/bundles/ng-easycommerce.umd.js +84 -20
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +6 -2
- package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
- package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +24 -9
- package/esm2015/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
- package/esm2015/lib/interfaces/checkout-data.js +1 -1
- package/esm2015/lib/services/cart.service.js +9 -1
- package/esm2015/lib/services/checkout/checkout.service.js +3 -1
- package/esm2015/lib/utils/order-util.service.js +22 -2
- package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +6 -2
- package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
- package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +29 -14
- package/esm5/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
- package/esm5/lib/interfaces/checkout-data.js +1 -1
- package/esm5/lib/services/cart.service.js +13 -1
- package/esm5/lib/services/checkout/checkout.service.js +3 -2
- package/esm5/lib/utils/order-util.service.js +22 -2
- package/fesm2015/ng-easycommerce.js +75 -14
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +84 -20
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +1 -1
- package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +1 -1
- package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +3 -0
- package/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.d.ts +3 -0
- package/lib/interfaces/checkout-data.d.ts +6 -1
- package/lib/services/cart.service.d.ts +3 -0
- package/lib/utils/order-util.service.d.ts +1 -0
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -207,9 +207,9 @@ __decorate([
|
|
|
207
207
|
OrderEcComponent = __decorate([
|
|
208
208
|
Component({
|
|
209
209
|
selector: 'app-order-ec',
|
|
210
|
-
template: "<main class=\"py-5\" id=\"orderEcComponent\">\n <div class=\"container\">\n <div class=\"wrap\" *ngIf=\"!loading; else loadingView\">\n <div *ngIf=\"order; else noOrder\">\n\n <div class=\"row justify-content-between \">\n <div class=\"col-sm-auto col-12 font-brandon\">\n <h4 class=\"tit1 fw-bold\">{{ ('order' | translate) + ': ' + order.number }}</h4>\n </div>\n <ng-container *ngIf=\"order?.invoice\">\n <div class=\"col-sm col-12 font-brandon\" *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <a target=\"_blank\" [href]=\"consts.getUrlBase().slice(0, -1) + order.invoice\"\n class=\"btn btn-link btn-invoice\">\n <i class=\"fas fa-file-download me-1\"></i>\n {{ 'download' | translate }} {{ 'invoices' | translate | titlecase }}\n </a>\n </div>\n </ng-container>\n <a (click)=\"volver()\" class=\"col-auto text-end\">\n <button class=\"btn btvolver bg-gray text-white\">{{ 'back-to-orders' | translate }}</button>\n </a>\n </div>\n\n <section id=\"orders\">\n <div class=\"row pt-2\">\n <div class=\"col-md-2 col-12\">\n <p class=\"st\">{{ 'payment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'payment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0]?.method?.name | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].method.name }}\n </p>\n <!-- ACA DEBERIA IR EL LINK DE SEGUIMIENTO -->\n <a *ngIf=\"order.tracking\" [href]=\"order.tracking\"\n class=\"btn btn-outline-dark btnLogout px-3 py-1 font-size-10 w-auto btn-sm\">Ver\n seguimiento</a>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'date' | translate }}:</p>\n <p class=\"\">\n {{ toDate(order.checkoutCompletedAt, 'DD/MM/YYYY') | translate }}<br>\n {{ toDate(order.checkoutCompletedAt, 'h:mm:ss a') | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"st\">{{ 'total' | translate }}:</p>\n <h5 class=\"fw-bold\">\n {{ (order.totals.total) | ecCurrencySymbol:'alwaysShowDecimals'}}\n\n </h5>\n </div>\n </div>\n </section>\n\n <div class=\"text-end mt-3\" *ngIf=\"!hidePrices && allowRepeatOrders\">\n <button class=\"btn btn-primary mb-2\" (click)=\"repeatOrder()\">\n {{ 'repeat-order' | translate }}\n </button>\n </div>\n\n <div class=\"container py-3 border-top border-bottom\">\n <div *ngIf=\"order.items.length; else noProducts\" class=\"row\">\n <div class=\"col-2 font-sm font-brandon d-none d-md-block\">\n {{ 'product' | translate | uppercase }}\n </div>\n <div class=\"col-3 font-sm font-brandon d-none d-md-block\">\n {{ 'description' | translate | uppercase }}\n </div>\n <div id=\"colLots\" *ngIf=\"ordersService.channelConfig.applyOrderLot\"\n class=\"col-1 font-sm font-brandon d-none d-md-block\">\n <!-- {{ 'description' | translate | uppercase }} -->\n {{ 'lots' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'unit-price' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-center font-sm font-brandon d-none d-md-block\">\n {{ 'quantity' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'discount' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'subtotal' | translate | uppercase }}\n </div>\n </div>\n <ng-container *ngFor=\"let item of order.items; let i = index\">\n <div class=\"row cart-items\">\n <div class=\"col-5 col-md-2 py-2\">\n <ng-container *ngIf=\"item.product.variants[0]?.images?.length ; else defaultpicture\">\n <img class=\"smc maxwidth img-fluid rounded-custom \"\n [src]=\"consts.mediaUrl() + item.product.variants[0].images[0]\" alt=\"\">\n </ng-container>\n <ng-template #defaultpicture>\n <img *ngIf=\"item.product.picturesdefault\"\n class=\"smc maxwidth img-fluid rounded-custom\"\n [src]=\"consts.mediaUrl() + item.product.picturesdefault[0]\" alt=\"\">\n </ng-template>\n </div> \n <div\n class=\"col-md-3 col-7 d-flex flex-column justify-content-center\">\n <p class=\"font-brandon d-flex w-100 mb-0\">\n {{ item.product.name }} (Cod:{{ item.product.variants[0].code }})\n </p>\n <p *ngIf=\"enableFieldNotesInArticleFile && item.comments\" class=\"comment-truncated fst-italic small text-muted mt-1\">\n \"{{ item.comments }}\"\n </p>\n </div>\n <div class=\"col-md-1 col-1 flex-column flex-md-row justify-content-start d-flex align-items-center\"\n *ngIf=\"ordersService.channelConfig.applyOrderLot\">\n <input type=\"button\" class=\"btn btn-primary btnSeguir m-0 text-center\" type=\"button\"\n [attr.data-bs-toggle]=\"'collapse'\" [attr.data-bs-target]=\"'#collapseExample'+i\"\n aria-expanded=\"false\" [attr.aria-controls]=\"'collapseExample'+i\"\n value=\"{{ 'see' | translate | uppercase }}\">\n </div>\n <div class=\"container d-md-none\">\n <div class=\"row\">\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'unit-price' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'unit'); else noMobileUnit\">\n {{ getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileUnit>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'quantity' | translate }}</small>\n <p class=\"text-center w-100 m-0\">{{ item.quantity }}</p>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'discount' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"getOrderLineValue(item, 'discount') !== 0; else noMobileDiscount\">\n {{ getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileDiscount>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'subtotal' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'subtotal'); else noMobileSubtotal\">\n {{ getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileSubtotal>-</ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'unit') ? (getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\">\n <p class=\"text-center w-100 m-0\"> {{ item.quantity }}</p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\" [class.text-muted]=\"getOrderLineValue(item, 'discount') === 0\">\n {{ getOrderLineValue(item, 'discount') !== 0 ? (getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'subtotal') ? (getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"collapse\" [attr.id]=\"'collapseExample'+i\">\n <div class=\"card card-body\">\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Estado</th>\n <th scope=\"col\">Cantidad</th>\n <th scope=\"col\">Fecha Solicitada</th>\n <th scope=\"col\">Fecha Estimada</th>\n <th scope=\"col\">Sede</th>\n <th scope=\"col\">Nota</th>\n <th scope=\"col\">Total Lote</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let lot of item.orderItemLot\">\n <tr>\n <th scope=\"row\">{{lot.id}}</th>\n <td>{{lot.lot_status}}</td>\n <td>{{lot.quantity}}</td>\n <td>{{ toDate(lot.date_request, 'DD/MM/YYYY') | translate }}</td>\n <td *ngIf=\"lot.date_deliver; else sinFechaEstimada\">{{\n toDate(lot.date_deliver, 'DD/MM/YYYY') | translate }}</td>\n <ng-template #sinFechaEstimada>\n <td>Pendiente</td>\n </ng-template>\n <td>{{lot.shipping_address_name}}</td>\n <td>{{lot.notes}}</td>\n <td>{{lot.total_lot | ecCurrencySymbol:'alwaysShowDecimals'}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n </ng-container>\n </div>\n\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\"></div>\n <div class=\"col-12 col-md-6\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <div class=\"order-summary py-4\">\n <div class=\"order-summary-row\">\n <span>{{ 'subtotal' | translate }}</span>\n <strong>\n {{ getHistoricalProductsSubtotal() !== null\n ? (getHistoricalProductsSubtotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalOrderDiscount() !== null && getHistoricalOrderDiscount() !== 0\">\n <span>{{ 'discount' | translate }}</span>\n <strong>{{ getHistoricalOrderDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalCouponDiscount() !== null && getHistoricalCouponDiscount() !== 0\">\n <span>{{ 'coupon' | translate }}</span>\n <strong>{{ getHistoricalCouponDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--tax\"\n *ngIf=\"!showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row\"\n *ngIf=\"getHistoricalShipping() !== null\">\n <span>{{ 'shipment' | translate }}</span>\n <strong>{{ getHistoricalShipping() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--total\">\n <span>{{ 'total' | translate | uppercase }}</span>\n <strong>\n {{ getHistoricalTotal() !== null\n ? (getHistoricalTotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-tax-info\"\n *ngIf=\"showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes-included-in-total' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n</main>\n\n<ng-template #noOrder>\n <div class=\"w-100 h-50\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <h5>{{ 'no-orders' | translate }}</h5>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingView>\n <div class=\"w-100 h-50 py-5\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n</ng-template>\n",
|
|
210
|
+
template: "<main class=\"py-5\" id=\"orderEcComponent\">\n <div class=\"container\">\n <div class=\"wrap\" *ngIf=\"!loading; else loadingView\">\n <div *ngIf=\"order; else noOrder\">\n\n <div class=\"row justify-content-between \">\n <div class=\"col-sm-auto col-12 font-brandon\">\n <h4 class=\"tit1 fw-bold\">{{ ('order' | translate) + ': ' + order.number }}</h4>\n </div>\n <ng-container *ngIf=\"order?.invoice\">\n <div class=\"col-sm col-12 font-brandon\" *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <a target=\"_blank\" [href]=\"consts.getUrlBase().slice(0, -1) + order.invoice\"\n class=\"btn btn-link btn-invoice\">\n <i class=\"fas fa-file-download me-1\"></i>\n {{ 'download' | translate }} {{ 'invoices' | translate | titlecase }}\n </a>\n </div>\n </ng-container>\n <a (click)=\"volver()\" class=\"col-auto text-end\">\n <button class=\"btn btvolver bg-gray text-white\">{{ 'back-to-orders' | translate }}</button>\n </a>\n </div>\n\n <section id=\"orders\">\n <div class=\"row pt-2\">\n <div class=\"col-md-2 col-12\">\n <p class=\"st\">{{ 'payment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-state' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].state | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'payment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.payments[0]?.method?.name | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'shipment-method' | translate }}:</p>\n <p class=\"\">\n {{ order.shipments[0].method.name }}\n </p>\n <!-- ACA DEBERIA IR EL LINK DE SEGUIMIENTO -->\n <a *ngIf=\"order.tracking\" [href]=\"order.tracking\"\n class=\"btn btn-outline-dark btnLogout px-3 py-1 font-size-10 w-auto btn-sm\">Ver\n seguimiento</a>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\">\n <p class=\"st\">{{ 'date' | translate }}:</p>\n <p class=\"\">\n {{ toDate(order.checkoutCompletedAt, 'DD/MM/YYYY') | translate }}<br>\n {{ toDate(order.checkoutCompletedAt, 'h:mm:ss a') | translate }}\n </p>\n </div>\n <div class=\"col-md-2 col-12 font-brandon\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"st\">{{ 'total' | translate }}:</p>\n <h5 class=\"fw-bold\">\n {{ (order.totals.total) | ecCurrencySymbol:'alwaysShowDecimals'}}\n\n </h5>\n </div>\n </div>\n </section>\n\n <div class=\"text-end mt-3\" *ngIf=\"!hidePrices && allowRepeatOrders\">\n <button class=\"btn btn-primary mb-2\" (click)=\"repeatOrder()\">\n {{ 'repeat-order' | translate }}\n </button>\n </div>\n\n <div class=\"container py-3 border-top border-bottom\">\n <div *ngIf=\"order.items.length; else noProducts\" class=\"row\">\n <div class=\"col-2 font-sm font-brandon d-none d-md-block\">\n {{ 'product' | translate | uppercase }}\n </div>\n <div class=\"col-3 font-sm font-brandon d-none d-md-block\">\n {{ 'description' | translate | uppercase }}\n </div>\n <div id=\"colLots\" *ngIf=\"ordersService.channelConfig.applyOrderLot\"\n class=\"col-1 font-sm font-brandon d-none d-md-block\">\n <!-- {{ 'description' | translate | uppercase }} -->\n {{ 'lots' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'unit-price' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-center font-sm font-brandon d-none d-md-block\">\n {{ 'quantity' | translate | uppercase }}\n </div>\n <div class=\"col-1 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'discount' | translate | uppercase }}\n </div>\n <div class=\"col-2 text-end font-sm font-brandon d-none d-md-block\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n {{ 'subtotal' | translate | uppercase }}\n </div>\n </div>\n <ng-container *ngFor=\"let item of order.items; let i = index\">\n <div class=\"row cart-items\">\n <div class=\"col-5 col-md-2 py-2\">\n <ng-container *ngIf=\"item.product.variants[0]?.images?.length ; else defaultpicture\">\n <img class=\"smc maxwidth img-fluid rounded-custom \"\n [src]=\"consts.mediaUrl() + item.product.variants[0].images[0]\" alt=\"\">\n </ng-container>\n <ng-template #defaultpicture>\n <img *ngIf=\"item.product.picturesdefault\"\n class=\"smc maxwidth img-fluid rounded-custom\"\n [src]=\"consts.mediaUrl() + item.product.picturesdefault[0]\" alt=\"\">\n </ng-template>\n </div> \n <div\n class=\"col-md-3 col-7 d-flex flex-column justify-content-center\">\n <p class=\"font-brandon d-flex w-100 mb-0\">\n {{ item.product.name }} (Cod:{{ item.product.variants[0].code }})\n </p>\n <p *ngIf=\"enableFieldNotesInArticleFile && item.comments\" class=\"comment-truncated fst-italic small text-muted mt-1\">\n \"{{ item.comments }}\"\n </p>\n </div>\n <div class=\"col-md-1 col-1 flex-column flex-md-row justify-content-start d-flex align-items-center\"\n *ngIf=\"ordersService.channelConfig.applyOrderLot\">\n <input type=\"button\" class=\"btn btn-primary btnSeguir m-0 text-center\" type=\"button\"\n [attr.data-bs-toggle]=\"'collapse'\" [attr.data-bs-target]=\"'#collapseExample'+i\"\n aria-expanded=\"false\" [attr.aria-controls]=\"'collapseExample'+i\"\n value=\"{{ 'see' | translate | uppercase }}\">\n </div>\n <div class=\"container d-md-none\">\n <div class=\"row\">\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'unit-price' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'unit'); else noMobileUnit\">\n {{ getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileUnit>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'quantity' | translate }}</small>\n <p class=\"text-center w-100 m-0\">{{ item.quantity }}</p>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'discount' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"getOrderLineValue(item, 'discount') !== 0; else noMobileDiscount\">\n {{ getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileDiscount>-</ng-template>\n </div>\n <div class=\"col-3\">\n <small class=\"order-line-label\">{{ 'subtotal' | translate }}</small>\n <p class=\"text-center w-100 m-0\" *ngIf=\"hasOrderLineValue(item, 'subtotal'); else noMobileSubtotal\">\n {{ getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals' }}\n </p>\n <ng-template #noMobileSubtotal>-</ng-template>\n </div>\n </div>\n </div>\n\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'unit') ? (getOrderLineValue(item, 'unit') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\">\n <p class=\"text-center w-100 m-0\"> {{ item.quantity }}</p>\n </div>\n <div class=\"col-1 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\" [class.text-muted]=\"getOrderLineValue(item, 'discount') === 0\">\n {{ getOrderLineValue(item, 'discount') !== 0 ? (getOrderLineValue(item, 'discount') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"col-2 d-none d-md-flex align-items-center\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <p class=\"text-end w-100 m-0\">\n {{ hasOrderLineValue(item, 'subtotal') ? (getOrderLineValue(item, 'subtotal') | ecCurrencySymbol:'alwaysShowDecimals') : '-' }}\n </p>\n </div>\n <div class=\"collapse\" [attr.id]=\"'collapseExample'+i\">\n <div class=\"card card-body\">\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Estado</th>\n <th scope=\"col\">Cantidad</th>\n <th scope=\"col\">Fecha Solicitada</th>\n <th scope=\"col\">Fecha Estimada</th>\n <th scope=\"col\">Sede</th>\n <th scope=\"col\">Nota</th>\n <th scope=\"col\">Total Lote</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let lot of item.orderItemLot\">\n <tr>\n <th scope=\"row\">{{lot.id}}</th>\n <td>{{lot.lot_status}}</td>\n <td>{{lot.quantity}}</td>\n <td>{{ toDate(lot.date_request, 'DD/MM/YYYY') | translate }}</td>\n <td *ngIf=\"lot.date_deliver; else sinFechaEstimada\">{{\n toDate(lot.date_deliver, 'DD/MM/YYYY') | translate }}</td>\n <ng-template #sinFechaEstimada>\n <td>Pendiente</td>\n </ng-template>\n <td>{{lot.shipping_address_name}}</td>\n <td>{{lot.notes}}</td>\n <td>{{lot.total_lot | ecCurrencySymbol:'alwaysShowDecimals'}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n </ng-container>\n </div>\n\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\"></div>\n <div class=\"col-12 col-md-6\"\n *ngIf=\"(creditAccountShowPrices !== null ? creditAccountShowPrices : true)\">\n <div class=\"order-summary py-4\">\n <div class=\"order-summary-row\">\n <span>{{ 'subtotal' | translate }}</span>\n <strong>\n {{ getHistoricalProductsSubtotal() !== null\n ? (getHistoricalProductsSubtotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalOrderDiscount() !== null && getHistoricalOrderDiscount() !== 0\">\n <span>{{ 'discount' | translate }}</span>\n <strong>{{ getHistoricalOrderDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"!hideDiscounts && getHistoricalCouponDiscount() !== null && getHistoricalCouponDiscount() !== 0\">\n <span>{{ 'coupon' | translate }}</span>\n <strong>{{ getHistoricalCouponDiscount() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--discount\"\n *ngIf=\"order?.totals?.paymentMethodAdjustment !== null && order?.totals?.paymentMethodAdjustment !== undefined && order?.totals?.paymentMethodAdjustment !== 0\">\n <span>\n {{ (order.totals.paymentMethodAdjustment < 0 ? 'payment-method-discount' : 'payment-method-surcharge') | translate }}\n <ng-container *ngIf=\"order.totals.paymentMethodAdjustmentLabel\">\n \u00B7 {{ order.totals.paymentMethodAdjustmentLabel }}\n </ng-container>\n </span>\n <strong>{{ order.totals.paymentMethodAdjustment | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--tax\"\n *ngIf=\"!showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row\"\n *ngIf=\"getHistoricalShipping() !== null\">\n <span>{{ 'shipment' | translate }}</span>\n <strong>{{ getHistoricalShipping() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n\n <div class=\"order-summary-row order-summary-row--total\">\n <span>{{ 'total' | translate | uppercase }}</span>\n <strong>\n {{ getHistoricalTotal() !== null\n ? (getHistoricalTotal() | ecCurrencySymbol:'alwaysShowDecimals')\n : '-' }}\n </strong>\n </div>\n\n <div class=\"order-summary-tax-info\"\n *ngIf=\"showPriceWithTaxesWhileBrowsing && !hideTaxes && hasHistoricalTaxes()\">\n <span>{{ 'taxes-included-in-total' | translate }}</span>\n <strong>{{ getHistoricalTaxes() | ecCurrencySymbol:'alwaysShowDecimals' }}</strong>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n</main>\n\n<ng-template #noOrder>\n <div class=\"w-100 h-50\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <h5>{{ 'no-orders' | translate }}</h5>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingView>\n <div class=\"w-100 h-50 py-5\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n</ng-template>\n",
|
|
211
211
|
styles: [".maxwidth{max-width:100px}.comment-truncated{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;white-space:normal;max-height:3em}.order-line-label{display:block;color:#6b7280;font-size:.72rem;line-height:1.2;text-transform:uppercase}.order-summary{display:flex;flex-direction:column;gap:.65rem;color:#4b5563}.order-summary-row{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;min-width:0;font-size:.95rem}.order-summary-row span{min-width:0}.order-summary-row strong{flex:0 0 auto;white-space:nowrap;color:#111827;font-weight:600;text-align:right}.order-summary-row--discount strong{color:#15803d}.order-summary-row--tax{color:#4b5563}.order-summary-row--total{margin-top:.35rem;padding-top:.8rem;border-top:1px solid #d1d5db;color:#111827;font-size:1.15rem;font-weight:700}.order-summary-row--total strong{font-size:1.2rem;font-weight:700}.order-summary-tax-info{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-top:-.15rem;color:#6b7280;font-size:.82rem;font-weight:400}.order-summary-tax-info strong{flex:0 0 auto;white-space:nowrap;font-weight:400}@media (max-width:767.98px){.order-summary{padding-top:1rem;padding-bottom:1rem}.order-summary-row,.order-summary-tax-info{gap:.75rem}.order-summary-row--total{font-size:1.05rem}.order-summary-row--total strong{font-size:1.1rem}}"]
|
|
212
212
|
})
|
|
213
213
|
], OrderEcComponent);
|
|
214
214
|
export { OrderEcComponent };
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9hY2NvdW50LWVjL29yZGVyLWVjL29yZGVyLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBT2hGLElBQWEsZ0JBQWdCLEdBQTdCLE1BQWEsZ0JBQWlCLFNBQVEsZUFBZTtJQWlCakQsWUFDVyxhQUE0QixFQUN6QixZQUE0QixFQUMvQixNQUFjLEVBQ2QsTUFBaUIsRUFDaEIsV0FBd0IsRUFDeEIsb0JBQTBDO1FBRWxELEtBQUssRUFBRSxDQUFDO1FBUEQsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQWdCO1FBQy9CLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFy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LFNBQVMsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQTZIRCxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0Q7SUFDTCxDQUFDO0NBRUosQ0FBQTs7WUFyTDZCLGFBQWE7WUFDWCxjQUFjO1lBQ3ZCLE1BQU07WUFDTixTQUFTO1lBQ0gsV0FBVztZQUNGLG9CQUFvQjs7QUFmN0M7SUFBUixLQUFLLEVBQUU7cURBQW1CO0FBUmxCLGdCQUFnQjtJQUw1QixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsY0FBYztRQUN4Qiw2dG5CQUFzQzs7S0FFekMsQ0FBQztHQUNXLGdCQUFnQixDQXVNNUI7U0F2TVksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBPcmRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWNjb3VudC9vcmRlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtb3JkZXItZWMnLFxuICAgIHRlbXBsYXRlVXJsOiAnb3JkZXItZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydvcmRlci1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9yZGVyRWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHJvdGVjdGVkIG9yZGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XG5cbiAgICBwdWJsaWMgb3JkZXIkID0gdGhpcy5vcmRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG9yZGVyID0gbnVsbFxuICAgIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcbiAgICBwdWJsaWMgZXJyb3I7XG4gICAgQElucHV0KCkgbnVtYmVyT3JkZXIgPSBudWxsXG4gICAgcHVibGljIGFsbG93UmVwZWF0T3JkZXJzID0gZmFsc2U7XG4gICAgcHVibGljIGNyZWRpdEFjY291bnRTaG93UHJpY2VzOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaWRlVGF4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc2hvd1ByaWNlV2l0aFRheGVzV2hpbGVCcm93c2luZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBvcmRlcnNTZXJ2aWNlOiBPcmRlcnNTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgYWN0aXZlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwdWJsaWMgY29uc3RzOiBDb25zdGFudHMsXG4gICAgICAgIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLm9yZGVyc1NlcnZpY2Uuc2VsZWN0ZWRPcmRlciQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXI7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtYmVyT3JkZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlck9yZGVyID0gdGhpcy5hY3RpdmVkUm91dGUuc25hcHNob3QucGFyYW1zLm51bWJlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzKSBvcmRlciA9IHJlcztcbiAgICAgICAgICAgICAgICBlbHNlIG9yZGVyID0gYXdhaXQgdGhpcy5vcmRlcnNTZXJ2aWNlLmZpbmRPcmRlcih0aGlzLm51bWJlck9yZGVyKTtcbiAgICAgICAgICAgICAgICBvcmRlciAmJiB0aGlzLm9yZGVyU3ViamVjdC5uZXh0KG9yZGVyKTtcbiAgICAgICAgICAgICAgICAhb3JkZXIgJiYgdGhpcy5jYWxsRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gb3JkZXJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyc1NlcnZpY2UuZXJyb3IkLnRvUHJvbWlzZSgpLnRoZW4ocmVzID0+IHRoaXMuZXJyb3IgPSByZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbEVycm9yKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWxsb3dSZXBlYXRPcmRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93UmVwZWF0T3JkZXJzID0gY29uZmlnLmFsbG93UmVwZWF0T3JkZXJzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dSZXBlYXRPcmRlcnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gY29uZmlnPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZURpc2NvdW50cyA9IGNvbmZpZz8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVUYXhlcyA9IGNvbmZpZz8uaGlkZVRheGVzID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByaWNlV2l0aFRheGVzV2hpbGVCcm93c2luZyA9IGNvbmZpZz8uc2hvd1ByaWNlV2l0aFRheGVzV2hpbGVCcm93c2luZyA9PT0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID0gY29uZmlnPy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA/PyBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxuICAgIH1cblxuICAgIHRvRGF0ZSA9IChkYXRlLCBmb3JtYXQpID0+IG1vbWVudChkYXRlKS5mb3JtYXQoIWZvcm1hdCAmJiAnREQvTU0vWVlZWSwgaDptbTpzcyBhJyB8fCBmb3JtYXQpXG5cbiAgICBwcml2YXRlIGdldExpbmVQcmljaW5nID0gKGl0ZW06IGFueSk6IGFueSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBwcmljaW5nID0gaXRlbT8ubGluZVByaWNpbmcgfHwgaXRlbT8ubGluZV9wcmljaW5nO1xuICAgICAgICBpZiAoIXByaWNpbmcgfHwgIXByaWNpbmcudW5pdCB8fCAhcHJpY2luZy5kaXNjb3VudCB8fCAhcHJpY2luZy5zdWJ0b3RhbCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbJ3VuaXQnLCAnZGlzY291bnQnLCAnc3VidG90YWwnXTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBzZWN0aW9ucy5ldmVyeShzZWN0aW9uID0+XG4gICAgICAgICAgICBbJ25ldCcsICd0YXgnLCAnZ3Jvc3MnXS5ldmVyeShrZXkgPT4gTnVtYmVyLmlzRmluaXRlKE51bWJlcihwcmljaW5nW3NlY3Rpb25dW2tleV0pKSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdmFsaWQgPyBwcmljaW5nIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhpc3RvcmljYWxQcmljaW5nS2V5ID0gKCk6ICduZXQnIHwgJ2dyb3NzJyA9PlxuICAgICAgICB0aGlzLnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPyAnZ3Jvc3MnIDogJ25ldCc7XG5cbiAgICBnZXRPcmRlckxpbmVWYWx1ZSA9IChpdGVtOiBhbnksIHNlY3Rpb246ICd1bml0JyB8ICdkaXNjb3VudCcgfCAnc3VidG90YWwnKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmVQcmljaW5nID0gdGhpcy5nZXRMaW5lUHJpY2luZyhpdGVtKTtcbiAgICAgICAgaWYgKGxpbmVQcmljaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKGxpbmVQcmljaW5nW3NlY3Rpb25dW3RoaXMuZ2V0SGlzdG9yaWNhbFByaWNpbmdLZXkoKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlY3Rpb24gPT09ICd1bml0Jykge1xuICAgICAgICAgICAgY29uc3QgdW5pdFByaWNlID0gaXRlbT8udW5pdFByaWNlID8/IGl0ZW0/LnVuaXRfcHJpY2U7XG4gICAgICAgICAgICBpZiAodW5pdFByaWNlICE9PSBudWxsICYmIHVuaXRQcmljZSAhPT0gdW5kZWZpbmVkICYmIHVuaXRQcmljZSAhPT0gJycpIHJldHVybiBOdW1iZXIodW5pdFByaWNlKTtcblxuICAgICAgICAgICAgY29uc3QgaGlzdG9yaWNhbFN1YnRvdGFsID0gaXRlbT8uc3VidG90YWwgPz8gaXRlbT8udG90YWw7XG4gICAgICAgICAgICBjb25zdCBxdWFudGl0eSA9IE51bWJlcihpdGVtPy5xdWFudGl0eSB8fCAwKTtcbiAgICAgICAgICAgIGlmIChoaXN0b3JpY2FsU3VidG90YWwgIT09IG51bGwgJiYgaGlzdG9yaWNhbFN1YnRvdGFsICE9PSB1bmRlZmluZWQgJiYgcXVhbnRpdHkgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihoaXN0b3JpY2FsU3VidG90YWwpIC8gcXVhbnRpdHk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENvbXBhdGliaWxpZGFkIGV4dHJlbWEgY29uIHJlc3B1ZXN0YXMgYW50aWd1YXMgcXVlIG5vIGNvbnRpZW5lblxuICAgICAgICAgICAgLy8gbmluZ8O6biBpbXBvcnRlIGRlbCBPcmRlckl0ZW0uIE51bmNhIHRpZW5lIHByaW9yaWRhZCBzb2JyZSBkYXRvc1xuICAgICAgICAgICAgLy8gaGlzdMOzcmljb3MgcGVyc2lzdGlkb3MuXG4gICAgICAgICAgICBjb25zdCB2YXJpYW50ID0gaXRlbT8ucHJvZHVjdD8udmFyaWFudHM/LlswXTtcbiAgICAgICAgICAgIGNvbnN0IGNhdGFsb2dQcmljZSA9IHZhcmlhbnQ/LnNhbGVwcmljZSA/PyB2YXJpYW50Py5wcmljZTtcbiAgICAgICAgICAgIHJldHVybiBjYXRhbG9nUHJpY2UgPT09IG51bGwgfHwgY2F0YWxvZ1ByaWNlID09PSB1bmRlZmluZWQgfHwgY2F0YWxvZ1ByaWNlID09PSAnJ1xuICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIDogTnVtYmVyKGNhdGFsb2dQcmljZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VjdGlvbiA9PT0gJ2Rpc2NvdW50Jykge1xuICAgICAgICAgICAgY29uc3QgZGlzY291bnQgPSBpdGVtPy5kaXNjb3VudDtcbiAgICAgICAgICAgIHJldHVybiBkaXNjb3VudCA9PT0gbnVsbCB8fCBkaXNjb3VudCA9PT0gdW5kZWZpbmVkIHx8IGRpc2NvdW50ID09PSAnJyA/IDAgOiBOdW1iZXIoZGlzY291bnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VidG90YWwgPSBpdGVtPy5zdWJ0b3RhbCA/PyBpdGVtPy50b3RhbDtcbiAgICAgICAgaWYgKHN1YnRvdGFsICE9PSBudWxsICYmIHN1YnRvdGFsICE9PSB1bmRlZmluZWQgJiYgc3VidG90YWwgIT09ICcnKSByZXR1cm4gTnVtYmVyKHN1YnRvdGFsKTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBoYXNPcmRlckxpbmVWYWx1ZSA9IChpdGVtOiBhbnksIHNlY3Rpb246ICd1bml0JyB8ICdkaXNjb3VudCcgfCAnc3VidG90YWwnKTogYm9vbGVhbiA9PlxuICAgICAgICB0aGlzLmdldE9yZGVyTGluZVZhbHVlKGl0ZW0sIHNlY3Rpb24pICE9PSBudWxsO1xuXG4gICAgcHJpdmF0ZSBnZXRUb3RhbHNQcmljaW5nID0gKHRvdGFsczogYW55LCBjYW1lbEtleTogc3RyaW5nLCBzbmFrZUtleTogc3RyaW5nKTogYW55IHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHByaWNpbmcgPSB0b3RhbHM/LltjYW1lbEtleV0gfHwgdG90YWxzPy5bc25ha2VLZXldO1xuICAgICAgICBpZiAoIXByaWNpbmcgfHwgIVsnbmV0JywgJ3RheCcsICdncm9zcyddLmV2ZXJ5KGtleSA9PiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHByaWNpbmdba2V5XSkpKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBwcmljaW5nO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nID0gKHRvdGFsczogYW55LCBjYW1lbEtleTogc3RyaW5nLCBzbmFrZUtleTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHByaWNpbmcgPSB0aGlzLmdldFRvdGFsc1ByaWNpbmcodG90YWxzLCBjYW1lbEtleSwgc25ha2VLZXkpO1xuICAgICAgICByZXR1cm4gcHJpY2luZyA/IE51bWJlcihwcmljaW5nW3RoaXMuZ2V0SGlzdG9yaWNhbFByaWNpbmdLZXkoKV0pIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0hpc3RvcmljYWxMaW5lUHJpY2luZyA9ICgpOiBib29sZWFuID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5vcmRlcj8uaXRlbXMpXG4gICAgICAgICYmIHRoaXMub3JkZXIuaXRlbXMubGVuZ3RoID4gMFxuICAgICAgICAmJiB0aGlzLm9yZGVyLml0ZW1zLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5nZXRMaW5lUHJpY2luZyhpdGVtKSk7XG5cbiAgICBnZXRIaXN0b3JpY2FsUHJvZHVjdHNTdWJ0b3RhbCA9ICgpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzSGlzdG9yaWNhbExpbmVQcmljaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9yZGVyLml0ZW1zLnJlZHVjZSgodG90YWwsIGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgdG90YWwgKyBOdW1iZXIodGhpcy5nZXRMaW5lUHJpY2luZyhpdGVtKS5zdWJ0b3RhbFt0aGlzLmdldEhpc3RvcmljYWxQcmljaW5nS2V5KCldKSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJ0b3RhbCA9IHRoaXMub3JkZXI/LnRvdGFscz8uY2FydFN1YnRvdGFsXG4gICAgICAgICAgICA/PyB0aGlzLm9yZGVyPy50b3RhbHM/LmNhcnRfc3VidG90YWxcbiAgICAgICAgICAgID8/IHRoaXMub3JkZXI/LnRvdGFscz8uc3VidG90YWw7XG4gICAgICAgIHJldHVybiBzdWJ0b3RhbCA9PT0gbnVsbCB8fCBzdWJ0b3RhbCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IE51bWJlcihzdWJ0b3RhbCk7XG4gICAgfVxuXG4gICAgZ2V0SGlzdG9yaWNhbE9yZGVyRGlzY291bnQgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGxpY2l0ID0gdGhpcy5nZXRTZWxlY3RlZFRvdGFsc1ByaWNpbmcodGhpcy5vcmRlcj8udG90YWxzLCAnb3JkZXJEaXNjb3VudFByaWNpbmcnLCAnb3JkZXJfZGlzY291bnRfcHJpY2luZycpO1xuICAgICAgICBpZiAoZXhwbGljaXQgIT09IG51bGwpIHJldHVybiBleHBsaWNpdDtcblxuICAgICAgICBjb25zdCB0b3RhbHMgPSB0aGlzLm9yZGVyPy50b3RhbHMgfHwge307XG4gICAgICAgIHJldHVybiB0b3RhbHMucHJvbW90aW9uID09PSBudWxsIHx8IHRvdGFscy5wcm9tb3Rpb24gPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIodG90YWxzLnByb21vdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0SGlzdG9yaWNhbENvdXBvbkRpc2NvdW50ID0gKCk6IG51bWJlciB8IG51bGwgPT5cbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZFRvdGFsc1ByaWNpbmcodGhpcy5vcmRlcj8udG90YWxzLCAnY291cG9uRGlzY291bnRQcmljaW5nJywgJ2NvdXBvbl9kaXNjb3VudF9wcmljaW5nJyk7XG5cbiAgICBnZXRIaXN0b3JpY2FsU2hpcHBpbmcgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGxpY2l0ID0gdGhpcy5nZXRTZWxlY3RlZFRvdGFsc1ByaWNpbmcodGhpcy5vcmRlcj8udG90YWxzLCAnc2hpcHBpbmdQcmljaW5nJywgJ3NoaXBwaW5nX3ByaWNpbmcnKTtcbiAgICAgICAgaWYgKGV4cGxpY2l0ICE9PSBudWxsKSByZXR1cm4gZXhwbGljaXQ7XG5cbiAgICAgICAgY29uc3Qgc2hpcHBpbmcgPSB0aGlzLm9yZGVyPy50b3RhbHM/LnNoaXBwaW5nO1xuICAgICAgICByZXR1cm4gc2hpcHBpbmcgPT09IG51bGwgfHwgc2hpcHBpbmcgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIoc2hpcHBpbmcpO1xuICAgIH1cblxuICAgIGdldEhpc3RvcmljYWxUYXhlcyA9ICgpOiBudW1iZXIgPT4gTnVtYmVyKHRoaXMub3JkZXI/LnRvdGFscz8udGF4ZXNcbiAgICAgICAgPz8gdGhpcy5vcmRlcj8udG90YWxzPy5jYXJ0VGF4ZXNcbiAgICAgICAgPz8gdGhpcy5vcmRlcj8udG90YWxzPy5jYXJ0X3RheGVzXG4gICAgICAgID8/IDApO1xuXG4gICAgaGFzSGlzdG9yaWNhbFRheGVzID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5nZXRIaXN0b3JpY2FsVGF4ZXMoKSAhPT0gMDtcblxuICAgIGdldEhpc3RvcmljYWxUb3RhbCA9ICgpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLm9yZGVyPy50b3RhbHM/LnRvdGFsO1xuICAgICAgICByZXR1cm4gdG90YWwgPT09IG51bGwgfHwgdG90YWwgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIodG90YWwpO1xuICAgIH1cblxuICAgIGNhbGxFcnJvciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvciA9ICc/JztcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnYWNjb3VudC9vcmRlcnMnKTtcbiAgICB9XG5cbiAgICB2b2x2ZXIgPSAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdhY2NvdW50L29yZGVycycpO1xuXG4gICAgcmVwZWF0T3JkZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93UmVwZWF0T3JkZXJzICYmIHRoaXMub3JkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkUmVwZWF0T3JkZXJUb0NhcnQodGhpcy5vcmRlci5pdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9hY2NvdW50LWVjL29yZGVyLWVjL29yZGVyLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBT2hGLElBQWEsZ0JBQWdCLEdBQTdCLE1BQWEsZ0JBQWlCLFNBQVEsZUFBZTtJQWlCakQsWUFDVyxhQUE0QixFQUN6QixZQUE0QixFQUMvQixNQUFjLEVBQ2QsTUFBaUIsRUFDaEIsV0FBd0IsRUFDeEIsb0JBQTBDO1FBRWxELEtBQUssRUFBRSxDQUFDO1FBUEQsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQWdCO1FBQy9CLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFy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LFNBQVMsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQTZIRCxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0Q7SUFDTCxDQUFDO0NBRUosQ0FBQTs7WUFyTDZCLGFBQWE7WUFDWCxjQUFjO1lBQ3ZCLE1BQU07WUFDTixTQUFTO1lBQ0gsV0FBVztZQUNGLG9CQUFvQjs7QUFmN0M7SUFBUixLQUFLLEVBQUU7cURBQW1CO0FBUmxCLGdCQUFnQjtJQUw1QixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsY0FBYztRQUN4Qix1cnBCQUFzQzs7S0FFekMsQ0FBQztHQUNXLGdCQUFnQixDQXVNNUI7U0F2TVksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBPcmRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWNjb3VudC9vcmRlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtb3JkZXItZWMnLFxuICAgIHRlbXBsYXRlVXJsOiAnb3JkZXItZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydvcmRlci1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9yZGVyRWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHJvdGVjdGVkIG9yZGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XG5cbiAgICBwdWJsaWMgb3JkZXIkID0gdGhpcy5vcmRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG9yZGVyID0gbnVsbFxuICAgIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcbiAgICBwdWJsaWMgZXJyb3I7XG4gICAgQElucHV0KCkgbnVtYmVyT3JkZXIgPSBudWxsXG4gICAgcHVibGljIGFsbG93UmVwZWF0T3JkZXJzID0gZmFsc2U7XG4gICAgcHVibGljIGNyZWRpdEFjY291bnRTaG93UHJpY2VzOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaWRlVGF4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgc2hvd1ByaWNlV2l0aFRheGVzV2hpbGVCcm93c2luZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBvcmRlcnNTZXJ2aWNlOiBPcmRlcnNTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgYWN0aXZlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwdWJsaWMgY29uc3RzOiBDb25zdGFudHMsXG4gICAgICAgIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLm9yZGVyc1NlcnZpY2Uuc2VsZWN0ZWRPcmRlciQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXI7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtYmVyT3JkZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlck9yZGVyID0gdGhpcy5hY3RpdmVkUm91dGUuc25hcHNob3QucGFyYW1zLm51bWJlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzKSBvcmRlciA9IHJlcztcbiAgICAgICAgICAgICAgICBlbHNlIG9yZGVyID0gYXdhaXQgdGhpcy5vcmRlcnNTZXJ2aWNlLmZpbmRPcmRlcih0aGlzLm51bWJlck9yZGVyKTtcbiAgICAgICAgICAgICAgICBvcmRlciAmJiB0aGlzLm9yZGVyU3ViamVjdC5uZXh0KG9yZGVyKTtcbiAgICAgICAgICAgICAgICAhb3JkZXIgJiYgdGhpcy5jYWxsRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gb3JkZXJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyc1NlcnZpY2UuZXJyb3IkLnRvUHJvbWlzZSgpLnRoZW4ocmVzID0+IHRoaXMuZXJyb3IgPSByZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbEVycm9yKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWxsb3dSZXBlYXRPcmRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbG93UmVwZWF0T3JkZXJzID0gY29uZmlnLmFsbG93UmVwZWF0T3JkZXJzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dSZXBlYXRPcmRlcnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gY29uZmlnPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZURpc2NvdW50cyA9IGNvbmZpZz8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVUYXhlcyA9IGNvbmZpZz8uaGlkZVRheGVzID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByaWNlV2l0aFRheGVzV2hpbGVCcm93c2luZyA9IGNvbmZpZz8uc2hvd1ByaWNlV2l0aFRheGVzV2hpbGVCcm93c2luZyA9PT0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID0gY29uZmlnPy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA/PyBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxuICAgIH1cblxuICAgIHRvRGF0ZSA9IChkYXRlLCBmb3JtYXQpID0+IG1vbWVudChkYXRlKS5mb3JtYXQoIWZvcm1hdCAmJiAnREQvTU0vWVlZWSwgaDptbTpzcyBhJyB8fCBmb3JtYXQpXG5cbiAgICBwcml2YXRlIGdldExpbmVQcmljaW5nID0gKGl0ZW06IGFueSk6IGFueSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBwcmljaW5nID0gaXRlbT8ubGluZVByaWNpbmcgfHwgaXRlbT8ubGluZV9wcmljaW5nO1xuICAgICAgICBpZiAoIXByaWNpbmcgfHwgIXByaWNpbmcudW5pdCB8fCAhcHJpY2luZy5kaXNjb3VudCB8fCAhcHJpY2luZy5zdWJ0b3RhbCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbJ3VuaXQnLCAnZGlzY291bnQnLCAnc3VidG90YWwnXTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBzZWN0aW9ucy5ldmVyeShzZWN0aW9uID0+XG4gICAgICAgICAgICBbJ25ldCcsICd0YXgnLCAnZ3Jvc3MnXS5ldmVyeShrZXkgPT4gTnVtYmVyLmlzRmluaXRlKE51bWJlcihwcmljaW5nW3NlY3Rpb25dW2tleV0pKSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdmFsaWQgPyBwcmljaW5nIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhpc3RvcmljYWxQcmljaW5nS2V5ID0gKCk6ICduZXQnIHwgJ2dyb3NzJyA9PlxuICAgICAgICB0aGlzLnNob3dQcmljZVdpdGhUYXhlc1doaWxlQnJvd3NpbmcgPyAnZ3Jvc3MnIDogJ25ldCc7XG5cbiAgICBnZXRPcmRlckxpbmVWYWx1ZSA9IChpdGVtOiBhbnksIHNlY3Rpb246ICd1bml0JyB8ICdkaXNjb3VudCcgfCAnc3VidG90YWwnKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmVQcmljaW5nID0gdGhpcy5nZXRMaW5lUHJpY2luZyhpdGVtKTtcbiAgICAgICAgaWYgKGxpbmVQcmljaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKGxpbmVQcmljaW5nW3NlY3Rpb25dW3RoaXMuZ2V0SGlzdG9yaWNhbFByaWNpbmdLZXkoKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlY3Rpb24gPT09ICd1bml0Jykge1xuICAgICAgICAgICAgY29uc3QgdW5pdFByaWNlID0gaXRlbT8udW5pdFByaWNlID8/IGl0ZW0/LnVuaXRfcHJpY2U7XG4gICAgICAgICAgICBpZiAodW5pdFByaWNlICE9PSBudWxsICYmIHVuaXRQcmljZSAhPT0gdW5kZWZpbmVkICYmIHVuaXRQcmljZSAhPT0gJycpIHJldHVybiBOdW1iZXIodW5pdFByaWNlKTtcblxuICAgICAgICAgICAgY29uc3QgaGlzdG9yaWNhbFN1YnRvdGFsID0gaXRlbT8uc3VidG90YWwgPz8gaXRlbT8udG90YWw7XG4gICAgICAgICAgICBjb25zdCBxdWFudGl0eSA9IE51bWJlcihpdGVtPy5xdWFudGl0eSB8fCAwKTtcbiAgICAgICAgICAgIGlmIChoaXN0b3JpY2FsU3VidG90YWwgIT09IG51bGwgJiYgaGlzdG9yaWNhbFN1YnRvdGFsICE9PSB1bmRlZmluZWQgJiYgcXVhbnRpdHkgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihoaXN0b3JpY2FsU3VidG90YWwpIC8gcXVhbnRpdHk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENvbXBhdGliaWxpZGFkIGV4dHJlbWEgY29uIHJlc3B1ZXN0YXMgYW50aWd1YXMgcXVlIG5vIGNvbnRpZW5lblxuICAgICAgICAgICAgLy8gbmluZ8O6biBpbXBvcnRlIGRlbCBPcmRlckl0ZW0uIE51bmNhIHRpZW5lIHByaW9yaWRhZCBzb2JyZSBkYXRvc1xuICAgICAgICAgICAgLy8gaGlzdMOzcmljb3MgcGVyc2lzdGlkb3MuXG4gICAgICAgICAgICBjb25zdCB2YXJpYW50ID0gaXRlbT8ucHJvZHVjdD8udmFyaWFudHM/LlswXTtcbiAgICAgICAgICAgIGNvbnN0IGNhdGFsb2dQcmljZSA9IHZhcmlhbnQ/LnNhbGVwcmljZSA/PyB2YXJpYW50Py5wcmljZTtcbiAgICAgICAgICAgIHJldHVybiBjYXRhbG9nUHJpY2UgPT09IG51bGwgfHwgY2F0YWxvZ1ByaWNlID09PSB1bmRlZmluZWQgfHwgY2F0YWxvZ1ByaWNlID09PSAnJ1xuICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIDogTnVtYmVyKGNhdGFsb2dQcmljZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VjdGlvbiA9PT0gJ2Rpc2NvdW50Jykge1xuICAgICAgICAgICAgY29uc3QgZGlzY291bnQgPSBpdGVtPy5kaXNjb3VudDtcbiAgICAgICAgICAgIHJldHVybiBkaXNjb3VudCA9PT0gbnVsbCB8fCBkaXNjb3VudCA9PT0gdW5kZWZpbmVkIHx8IGRpc2NvdW50ID09PSAnJyA/IDAgOiBOdW1iZXIoZGlzY291bnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VidG90YWwgPSBpdGVtPy5zdWJ0b3RhbCA/PyBpdGVtPy50b3RhbDtcbiAgICAgICAgaWYgKHN1YnRvdGFsICE9PSBudWxsICYmIHN1YnRvdGFsICE9PSB1bmRlZmluZWQgJiYgc3VidG90YWwgIT09ICcnKSByZXR1cm4gTnVtYmVyKHN1YnRvdGFsKTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBoYXNPcmRlckxpbmVWYWx1ZSA9IChpdGVtOiBhbnksIHNlY3Rpb246ICd1bml0JyB8ICdkaXNjb3VudCcgfCAnc3VidG90YWwnKTogYm9vbGVhbiA9PlxuICAgICAgICB0aGlzLmdldE9yZGVyTGluZVZhbHVlKGl0ZW0sIHNlY3Rpb24pICE9PSBudWxsO1xuXG4gICAgcHJpdmF0ZSBnZXRUb3RhbHNQcmljaW5nID0gKHRvdGFsczogYW55LCBjYW1lbEtleTogc3RyaW5nLCBzbmFrZUtleTogc3RyaW5nKTogYW55IHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHByaWNpbmcgPSB0b3RhbHM/LltjYW1lbEtleV0gfHwgdG90YWxzPy5bc25ha2VLZXldO1xuICAgICAgICBpZiAoIXByaWNpbmcgfHwgIVsnbmV0JywgJ3RheCcsICdncm9zcyddLmV2ZXJ5KGtleSA9PiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHByaWNpbmdba2V5XSkpKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBwcmljaW5nO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRUb3RhbHNQcmljaW5nID0gKHRvdGFsczogYW55LCBjYW1lbEtleTogc3RyaW5nLCBzbmFrZUtleTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHByaWNpbmcgPSB0aGlzLmdldFRvdGFsc1ByaWNpbmcodG90YWxzLCBjYW1lbEtleSwgc25ha2VLZXkpO1xuICAgICAgICByZXR1cm4gcHJpY2luZyA/IE51bWJlcihwcmljaW5nW3RoaXMuZ2V0SGlzdG9yaWNhbFByaWNpbmdLZXkoKV0pIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0hpc3RvcmljYWxMaW5lUHJpY2luZyA9ICgpOiBib29sZWFuID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5vcmRlcj8uaXRlbXMpXG4gICAgICAgICYmIHRoaXMub3JkZXIuaXRlbXMubGVuZ3RoID4gMFxuICAgICAgICAmJiB0aGlzLm9yZGVyLml0ZW1zLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5nZXRMaW5lUHJpY2luZyhpdGVtKSk7XG5cbiAgICBnZXRIaXN0b3JpY2FsUHJvZHVjdHNTdWJ0b3RhbCA9ICgpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzSGlzdG9yaWNhbExpbmVQcmljaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9yZGVyLml0ZW1zLnJlZHVjZSgodG90YWwsIGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgdG90YWwgKyBOdW1iZXIodGhpcy5nZXRMaW5lUHJpY2luZyhpdGVtKS5zdWJ0b3RhbFt0aGlzLmdldEhpc3RvcmljYWxQcmljaW5nS2V5KCldKSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJ0b3RhbCA9IHRoaXMub3JkZXI/LnRvdGFscz8uY2FydFN1YnRvdGFsXG4gICAgICAgICAgICA/PyB0aGlzLm9yZGVyPy50b3RhbHM/LmNhcnRfc3VidG90YWxcbiAgICAgICAgICAgID8/IHRoaXMub3JkZXI/LnRvdGFscz8uc3VidG90YWw7XG4gICAgICAgIHJldHVybiBzdWJ0b3RhbCA9PT0gbnVsbCB8fCBzdWJ0b3RhbCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IE51bWJlcihzdWJ0b3RhbCk7XG4gICAgfVxuXG4gICAgZ2V0SGlzdG9yaWNhbE9yZGVyRGlzY291bnQgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGxpY2l0ID0gdGhpcy5nZXRTZWxlY3RlZFRvdGFsc1ByaWNpbmcodGhpcy5vcmRlcj8udG90YWxzLCAnb3JkZXJEaXNjb3VudFByaWNpbmcnLCAnb3JkZXJfZGlzY291bnRfcHJpY2luZycpO1xuICAgICAgICBpZiAoZXhwbGljaXQgIT09IG51bGwpIHJldHVybiBleHBsaWNpdDtcblxuICAgICAgICBjb25zdCB0b3RhbHMgPSB0aGlzLm9yZGVyPy50b3RhbHMgfHwge307XG4gICAgICAgIHJldHVybiB0b3RhbHMucHJvbW90aW9uID09PSBudWxsIHx8IHRvdGFscy5wcm9tb3Rpb24gPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIodG90YWxzLnByb21vdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0SGlzdG9yaWNhbENvdXBvbkRpc2NvdW50ID0gKCk6IG51bWJlciB8IG51bGwgPT5cbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZFRvdGFsc1ByaWNpbmcodGhpcy5vcmRlcj8udG90YWxzLCAnY291cG9uRGlzY291bnRQcmljaW5nJywgJ2NvdXBvbl9kaXNjb3VudF9wcmljaW5nJyk7XG5cbiAgICBnZXRIaXN0b3JpY2FsU2hpcHBpbmcgPSAoKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGxpY2l0ID0gdGhpcy5nZXRTZWxlY3RlZFRvdGFsc1ByaWNpbmcodGhpcy5vcmRlcj8udG90YWxzLCAnc2hpcHBpbmdQcmljaW5nJywgJ3NoaXBwaW5nX3ByaWNpbmcnKTtcbiAgICAgICAgaWYgKGV4cGxpY2l0ICE9PSBudWxsKSByZXR1cm4gZXhwbGljaXQ7XG5cbiAgICAgICAgY29uc3Qgc2hpcHBpbmcgPSB0aGlzLm9yZGVyPy50b3RhbHM/LnNoaXBwaW5nO1xuICAgICAgICByZXR1cm4gc2hpcHBpbmcgPT09IG51bGwgfHwgc2hpcHBpbmcgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIoc2hpcHBpbmcpO1xuICAgIH1cblxuICAgIGdldEhpc3RvcmljYWxUYXhlcyA9ICgpOiBudW1iZXIgPT4gTnVtYmVyKHRoaXMub3JkZXI/LnRvdGFscz8udGF4ZXNcbiAgICAgICAgPz8gdGhpcy5vcmRlcj8udG90YWxzPy5jYXJ0VGF4ZXNcbiAgICAgICAgPz8gdGhpcy5vcmRlcj8udG90YWxzPy5jYXJ0X3RheGVzXG4gICAgICAgID8/IDApO1xuXG4gICAgaGFzSGlzdG9yaWNhbFRheGVzID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5nZXRIaXN0b3JpY2FsVGF4ZXMoKSAhPT0gMDtcblxuICAgIGdldEhpc3RvcmljYWxUb3RhbCA9ICgpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLm9yZGVyPy50b3RhbHM/LnRvdGFsO1xuICAgICAgICByZXR1cm4gdG90YWwgPT09IG51bGwgfHwgdG90YWwgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIodG90YWwpO1xuICAgIH1cblxuICAgIGNhbGxFcnJvciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvciA9ICc/JztcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnYWNjb3VudC9vcmRlcnMnKTtcbiAgICB9XG5cbiAgICB2b2x2ZXIgPSAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdhY2NvdW50L29yZGVycycpO1xuXG4gICAgcmVwZWF0T3JkZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93UmVwZWF0T3JkZXJzICYmIHRoaXMub3JkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkUmVwZWF0T3JkZXJUb0NhcnQodGhpcy5vcmRlci5pdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
|