@hitsoft/kadooglu-keops 0.0.2 → 0.0.3
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/config/enums/route-names.d.ts +15 -1
- package/esm2020/config/enums/route-names.mjs +1 -1
- package/esm2020/config/providers/route.provider.mjs +132 -4
- package/esm2020/lib/features/bl-tracking/components/bl-tracking-form.component.mjs +82 -0
- package/esm2020/lib/features/bl-tracking/components/bl-tracking.component.mjs +65 -0
- package/esm2020/lib/features/bl-tracking/hit-bl-tracking-routing.module.mjs +29 -0
- package/esm2020/lib/features/bl-tracking/hit-bl-tracking.module.mjs +58 -0
- package/esm2020/lib/features/carriers/components/carrier-form.component.mjs +78 -0
- package/esm2020/lib/features/carriers/components/carriers.component.mjs +66 -0
- package/esm2020/lib/features/carriers/hit-carriers-routing.module.mjs +29 -0
- package/esm2020/lib/features/carriers/hit-carriers.module.mjs +58 -0
- package/esm2020/lib/features/container-loading-counts/components/container-loading-counts.component.mjs +2 -2
- package/esm2020/lib/features/container-pallet-capacities/components/container-pallet-capacities.component.mjs +6 -5
- package/esm2020/lib/features/cost-calculation/components/cost-calculation-inputs.component.mjs +8 -6
- package/esm2020/lib/features/cost-calculation/components/cost-calculation.component.mjs +14 -18
- package/esm2020/lib/features/cost-calculation/engine/stage-builder.mjs +4 -3
- package/esm2020/lib/features/cost-calculation/hit-cost-calculation.module.mjs +7 -3
- package/esm2020/lib/features/cost-parameter-categories/cost-parameter-category-l10n-helper.mjs +1 -4
- package/esm2020/lib/features/cost-parameters/components/cost-parameter-form.component.mjs +19 -35
- package/esm2020/lib/features/cost-parameters/components/cost-parameters.component.mjs +17 -10
- package/esm2020/lib/features/destination-ports/components/destination-port-form.component.mjs +86 -0
- package/esm2020/lib/features/destination-ports/components/destination-ports.component.mjs +74 -0
- package/esm2020/lib/features/destination-ports/hit-destination-ports-routing.module.mjs +29 -0
- package/esm2020/lib/features/destination-ports/hit-destination-ports.module.mjs +58 -0
- package/esm2020/lib/features/fob-inland-definitions/components/fob-inland-definition-form.component.mjs +80 -0
- package/esm2020/lib/features/fob-inland-definitions/components/fob-inland-definitions.component.mjs +65 -0
- package/esm2020/lib/features/fob-inland-definitions/hit-fob-inland-definitions-routing.module.mjs +29 -0
- package/esm2020/lib/features/fob-inland-definitions/hit-fob-inland-definitions.module.mjs +58 -0
- package/esm2020/lib/features/freight-offers/components/freight-offer-copy.component.mjs +67 -0
- package/esm2020/lib/features/freight-offers/components/freight-offer-form.component.mjs +181 -0
- package/esm2020/lib/features/freight-offers/components/freight-offers.component.mjs +159 -0
- package/esm2020/lib/features/freight-offers/hit-freight-offers-routing.module.mjs +29 -0
- package/esm2020/lib/features/freight-offers/hit-freight-offers.module.mjs +62 -0
- package/esm2020/lib/features/incoterms/components/incoterm-form.component.mjs +81 -0
- package/esm2020/lib/features/incoterms/components/incoterms.component.mjs +65 -0
- package/esm2020/lib/features/incoterms/hit-incoterms-routing.module.mjs +29 -0
- package/esm2020/lib/features/incoterms/hit-incoterms.module.mjs +58 -0
- package/esm2020/lib/features/index.mjs +29 -1
- package/esm2020/lib/features/item-package-groups/components/item-package-group-form.component.mjs +78 -0
- package/esm2020/lib/features/item-package-groups/components/item-package-groups.component.mjs +69 -0
- package/esm2020/lib/features/item-package-groups/hit-item-package-groups-routing.module.mjs +29 -0
- package/esm2020/lib/features/item-package-groups/hit-item-package-groups.module.mjs +58 -0
- package/esm2020/lib/features/item-package-types/components/item-package-type-form.component.mjs +78 -0
- package/esm2020/lib/features/item-package-types/components/item-package-types.component.mjs +69 -0
- package/esm2020/lib/features/item-package-types/hit-item-package-types-routing.module.mjs +29 -0
- package/esm2020/lib/features/item-package-types/hit-item-package-types.module.mjs +58 -0
- package/esm2020/lib/features/item-product-types/components/item-product-type-form.component.mjs +78 -0
- package/esm2020/lib/features/item-product-types/components/item-product-types.component.mjs +69 -0
- package/esm2020/lib/features/item-product-types/hit-item-product-types-routing.module.mjs +29 -0
- package/esm2020/lib/features/item-product-types/hit-item-product-types.module.mjs +58 -0
- package/esm2020/lib/features/lines/components/line-form.component.mjs +78 -0
- package/esm2020/lib/features/lines/components/lines.component.mjs +66 -0
- package/esm2020/lib/features/lines/hit-lines-routing.module.mjs +29 -0
- package/esm2020/lib/features/lines/hit-lines.module.mjs +58 -0
- package/esm2020/lib/features/packaging-prices/components/packaging-price-form.component.mjs +4 -9
- package/esm2020/lib/features/packaging-prices/packaging-price-calculator.mjs +1 -1
- package/esm2020/lib/features/pos/components/pos-form.component.mjs +77 -0
- package/esm2020/lib/features/pos/components/pos.component.mjs +65 -0
- package/esm2020/lib/features/pos/hit-pos-routing.module.mjs +29 -0
- package/esm2020/lib/features/pos/hit-pos.module.mjs +58 -0
- package/esm2020/lib/features/price-parameter-types/components/price-parameter-types.component.mjs +3 -3
- package/esm2020/lib/features/price-parameters/components/price-parameter-form-cost-items.component.mjs +32 -0
- package/esm2020/lib/features/price-parameters/components/price-parameter-form-discount-rates-modal.component.mjs +52 -0
- package/esm2020/lib/features/price-parameters/components/price-parameter-form-discount-rates.component.mjs +84 -0
- package/esm2020/lib/features/price-parameters/components/price-parameter-form-items.component.mjs +43 -0
- package/esm2020/lib/features/price-parameters/components/price-parameter-form-price-lists.component.mjs +42 -0
- package/esm2020/lib/features/price-parameters/components/price-parameter-form.component.mjs +252 -0
- package/esm2020/lib/features/price-parameters/components/price-parameters.component.mjs +78 -0
- package/esm2020/lib/features/price-parameters/hit-price-parameters-routing.module.mjs +46 -0
- package/esm2020/lib/features/price-parameters/hit-price-parameters.module.mjs +93 -0
- package/esm2020/lib/features/price-parameters/price-parameter-cost-match.service.mjs +21 -0
- package/esm2020/lib/features/price-parameters/price-parameter-form-data.service.mjs +50 -0
- package/esm2020/lib/features/price-parameters/price-parameter-l10n-helper.mjs +7 -0
- package/esm2020/lib/features/price-parameters/price-parameter-lookups.service.mjs +32 -0
- package/esm2020/lib/kadooglu-keops-routing.module.mjs +25 -1
- package/esm2020/lib/shared/amount-currency-input/amount-currency-input.component.mjs +66 -0
- package/esm2020/lib/shared/cost-item-classification.utils.mjs +12 -0
- package/esm2020/lib/shared/cost-item-rows.builder.mjs +40 -0
- package/esm2020/lib/shared/pipes/resolve-code-name.pipe.mjs +16 -0
- package/esm2020/lib/shared/shared-ui.module.mjs +20 -0
- package/esm2020/lib/utils/currency.utils.mjs +3 -1
- package/esm2020/lib/utils/exchange-rate.utils.mjs +12 -0
- package/esm2020/proxy/bl-tracking/dtos/index.mjs +2 -0
- package/esm2020/proxy/bl-tracking/dtos/models.mjs +2 -0
- package/esm2020/proxy/business-partners/dtos/index.mjs +2 -0
- package/esm2020/proxy/business-partners/dtos/models.mjs +2 -0
- package/esm2020/proxy/carriers/dtos/index.mjs +2 -0
- package/esm2020/proxy/carriers/dtos/models.mjs +2 -0
- package/esm2020/proxy/container-loading-counts/dtos/models.mjs +1 -1
- package/esm2020/proxy/controllers/bl-tracking.service.mjs +36 -0
- package/esm2020/proxy/controllers/business-partner.service.mjs +22 -0
- package/esm2020/proxy/controllers/carrier.service.mjs +36 -0
- package/esm2020/proxy/controllers/container-loading-count.service.mjs +5 -5
- package/esm2020/proxy/controllers/cost-parameter.service.mjs +1 -5
- package/esm2020/proxy/controllers/destination-port.service.mjs +44 -0
- package/esm2020/proxy/controllers/fob-inland-definition.service.mjs +36 -0
- package/esm2020/proxy/controllers/freight-offer.service.mjs +57 -0
- package/esm2020/proxy/controllers/incoterm.service.mjs +36 -0
- package/esm2020/proxy/controllers/index.mjs +15 -1
- package/esm2020/proxy/controllers/item-package-group.service.mjs +40 -0
- package/esm2020/proxy/controllers/item-package-type.service.mjs +40 -0
- package/esm2020/proxy/controllers/item-product-type.service.mjs +40 -0
- package/esm2020/proxy/controllers/line.service.mjs +36 -0
- package/esm2020/proxy/controllers/pos.service.mjs +36 -0
- package/esm2020/proxy/controllers/price-list.service.mjs +28 -0
- package/esm2020/proxy/controllers/price-parameter.service.mjs +40 -0
- package/esm2020/proxy/cost-parameter-categories/cost-parameter-category-parent-code.enum.mjs +1 -4
- package/esm2020/proxy/cost-parameters/dtos/models.mjs +1 -1
- package/esm2020/proxy/destination-ports/dtos/index.mjs +2 -0
- package/esm2020/proxy/destination-ports/dtos/models.mjs +2 -0
- package/esm2020/proxy/fob-inland-definitions/dtos/index.mjs +2 -0
- package/esm2020/proxy/fob-inland-definitions/dtos/models.mjs +2 -0
- package/esm2020/proxy/freight-offers/dtos/index.mjs +2 -0
- package/esm2020/proxy/freight-offers/dtos/models.mjs +2 -0
- package/esm2020/proxy/incoterms/dtos/index.mjs +2 -0
- package/esm2020/proxy/incoterms/dtos/models.mjs +2 -0
- package/esm2020/proxy/item-package-groups/dtos/index.mjs +2 -0
- package/esm2020/proxy/item-package-groups/dtos/models.mjs +2 -0
- package/esm2020/proxy/item-package-types/dtos/index.mjs +2 -0
- package/esm2020/proxy/item-package-types/dtos/models.mjs +2 -0
- package/esm2020/proxy/item-product-types/dtos/index.mjs +2 -0
- package/esm2020/proxy/item-product-types/dtos/models.mjs +2 -0
- package/esm2020/proxy/lines/dtos/index.mjs +2 -0
- package/esm2020/proxy/lines/dtos/models.mjs +2 -0
- package/esm2020/proxy/pos/dtos/index.mjs +2 -0
- package/esm2020/proxy/pos/dtos/models.mjs +2 -0
- package/esm2020/proxy/price-lists/dtos/index.mjs +2 -0
- package/esm2020/proxy/price-lists/dtos/models.mjs +2 -0
- package/esm2020/proxy/price-parameters/dtos/index.mjs +2 -0
- package/esm2020/proxy/price-parameters/dtos/models.mjs +2 -0
- package/esm2020/proxy/price-parameters/price-parameter-status.enum.mjs +9 -0
- package/esm2020/proxy/public-api.mjs +16 -1
- package/fesm2015/hitsoft-kadooglu-keops-config.mjs +131 -3
- package/fesm2015/hitsoft-kadooglu-keops-config.mjs.map +1 -1
- package/fesm2015/hitsoft-kadooglu-keops-proxy.mjs +498 -12
- package/fesm2015/hitsoft-kadooglu-keops-proxy.mjs.map +1 -1
- package/fesm2015/hitsoft-kadooglu-keops.mjs +3958 -719
- package/fesm2015/hitsoft-kadooglu-keops.mjs.map +1 -1
- package/fesm2020/hitsoft-kadooglu-keops-config.mjs +131 -3
- package/fesm2020/hitsoft-kadooglu-keops-config.mjs.map +1 -1
- package/fesm2020/hitsoft-kadooglu-keops-proxy.mjs +498 -12
- package/fesm2020/hitsoft-kadooglu-keops-proxy.mjs.map +1 -1
- package/fesm2020/hitsoft-kadooglu-keops.mjs +3934 -708
- package/fesm2020/hitsoft-kadooglu-keops.mjs.map +1 -1
- package/lib/features/bl-tracking/components/bl-tracking-form.component.d.ts +24 -0
- package/lib/features/bl-tracking/components/bl-tracking.component.d.ts +22 -0
- package/lib/features/bl-tracking/hit-bl-tracking-routing.module.d.ts +7 -0
- package/lib/features/bl-tracking/hit-bl-tracking.module.d.ts +18 -0
- package/lib/features/carriers/components/carrier-form.component.d.ts +24 -0
- package/lib/features/carriers/components/carriers.component.d.ts +22 -0
- package/lib/features/carriers/hit-carriers-routing.module.d.ts +7 -0
- package/lib/features/carriers/hit-carriers.module.d.ts +18 -0
- package/lib/features/container-loading-counts/components/container-loading-counts.component.d.ts +2 -2
- package/lib/features/container-pallet-capacities/components/container-pallet-capacities.component.d.ts +1 -1
- package/lib/features/cost-calculation/components/cost-calculation-inputs.component.d.ts +3 -2
- package/lib/features/cost-calculation/components/cost-calculation.component.d.ts +3 -3
- package/lib/features/cost-calculation/hit-cost-calculation.module.d.ts +2 -1
- package/lib/features/cost-parameters/components/cost-parameter-form.component.d.ts +9 -6
- package/lib/features/cost-parameters/components/cost-parameters.component.d.ts +6 -5
- package/lib/features/destination-ports/components/destination-port-form.component.d.ts +25 -0
- package/lib/features/destination-ports/components/destination-ports.component.d.ts +24 -0
- package/lib/features/destination-ports/hit-destination-ports-routing.module.d.ts +7 -0
- package/lib/features/destination-ports/hit-destination-ports.module.d.ts +18 -0
- package/lib/features/fob-inland-definitions/components/fob-inland-definition-form.component.d.ts +24 -0
- package/lib/features/fob-inland-definitions/components/fob-inland-definitions.component.d.ts +22 -0
- package/lib/features/fob-inland-definitions/hit-fob-inland-definitions-routing.module.d.ts +7 -0
- package/lib/features/fob-inland-definitions/hit-fob-inland-definitions.module.d.ts +18 -0
- package/lib/features/freight-offers/components/freight-offer-copy.component.d.ts +22 -0
- package/lib/features/freight-offers/components/freight-offer-form.component.d.ts +49 -0
- package/lib/features/freight-offers/components/freight-offers.component.d.ts +47 -0
- package/lib/features/freight-offers/hit-freight-offers-routing.module.d.ts +7 -0
- package/lib/features/freight-offers/hit-freight-offers.module.d.ts +19 -0
- package/lib/features/incoterms/components/incoterm-form.component.d.ts +24 -0
- package/lib/features/incoterms/components/incoterms.component.d.ts +22 -0
- package/lib/features/incoterms/hit-incoterms-routing.module.d.ts +7 -0
- package/lib/features/incoterms/hit-incoterms.module.d.ts +18 -0
- package/lib/features/index.d.ts +21 -0
- package/lib/features/item-package-groups/components/item-package-group-form.component.d.ts +24 -0
- package/lib/features/item-package-groups/components/item-package-groups.component.d.ts +22 -0
- package/lib/features/item-package-groups/hit-item-package-groups-routing.module.d.ts +7 -0
- package/lib/features/item-package-groups/hit-item-package-groups.module.d.ts +18 -0
- package/lib/features/item-package-types/components/item-package-type-form.component.d.ts +24 -0
- package/lib/features/item-package-types/components/item-package-types.component.d.ts +22 -0
- package/lib/features/item-package-types/hit-item-package-types-routing.module.d.ts +7 -0
- package/lib/features/item-package-types/hit-item-package-types.module.d.ts +18 -0
- package/lib/features/item-product-types/components/item-product-type-form.component.d.ts +24 -0
- package/lib/features/item-product-types/components/item-product-types.component.d.ts +22 -0
- package/lib/features/item-product-types/hit-item-product-types-routing.module.d.ts +7 -0
- package/lib/features/item-product-types/hit-item-product-types.module.d.ts +18 -0
- package/lib/features/lines/components/line-form.component.d.ts +24 -0
- package/lib/features/lines/components/lines.component.d.ts +22 -0
- package/lib/features/lines/hit-lines-routing.module.d.ts +7 -0
- package/lib/features/lines/hit-lines.module.d.ts +18 -0
- package/lib/features/pos/components/pos-form.component.d.ts +24 -0
- package/lib/features/pos/components/pos.component.d.ts +22 -0
- package/lib/features/pos/hit-pos-routing.module.d.ts +7 -0
- package/lib/features/pos/hit-pos.module.d.ts +18 -0
- package/lib/features/price-parameters/components/price-parameter-form-cost-items.component.d.ts +15 -0
- package/lib/features/price-parameters/components/price-parameter-form-discount-rates-modal.component.d.ts +24 -0
- package/lib/features/price-parameters/components/price-parameter-form-discount-rates.component.d.ts +22 -0
- package/lib/features/price-parameters/components/price-parameter-form-items.component.d.ts +15 -0
- package/lib/features/price-parameters/components/price-parameter-form-price-lists.component.d.ts +15 -0
- package/lib/features/price-parameters/components/price-parameter-form.component.d.ts +70 -0
- package/lib/features/price-parameters/components/price-parameters.component.d.ts +27 -0
- package/lib/features/price-parameters/hit-price-parameters-routing.module.d.ts +7 -0
- package/lib/features/price-parameters/hit-price-parameters.module.d.ts +24 -0
- package/lib/features/price-parameters/price-parameter-cost-match.service.d.ts +10 -0
- package/lib/features/price-parameters/price-parameter-form-data.service.d.ts +26 -0
- package/lib/features/price-parameters/price-parameter-l10n-helper.d.ts +2 -0
- package/lib/features/price-parameters/price-parameter-lookups.service.d.ts +16 -0
- package/lib/shared/amount-currency-input/amount-currency-input.component.d.ts +23 -0
- package/lib/shared/cost-item-classification.utils.d.ts +7 -0
- package/lib/shared/cost-item-rows.builder.d.ts +11 -0
- package/lib/shared/pipes/resolve-code-name.pipe.d.ts +11 -0
- package/lib/shared/shared-ui.module.d.ts +10 -0
- package/lib/utils/currency.utils.d.ts +1 -0
- package/lib/utils/exchange-rate.utils.d.ts +2 -0
- package/package.json +1 -1
- package/proxy/bl-tracking/dtos/index.d.ts +1 -0
- package/proxy/bl-tracking/dtos/models.d.ts +25 -0
- package/proxy/business-partners/dtos/index.d.ts +1 -0
- package/proxy/business-partners/dtos/models.d.ts +4 -0
- package/proxy/carriers/dtos/index.d.ts +1 -0
- package/proxy/carriers/dtos/models.d.ts +10 -0
- package/proxy/container-loading-counts/dtos/models.d.ts +1 -1
- package/proxy/controllers/bl-tracking.service.d.ts +14 -0
- package/proxy/controllers/business-partner.service.d.ts +11 -0
- package/proxy/controllers/carrier.service.d.ts +14 -0
- package/proxy/controllers/container-loading-count.service.d.ts +2 -2
- package/proxy/controllers/cost-parameter.service.d.ts +1 -2
- package/proxy/controllers/destination-port.service.d.ts +17 -0
- package/proxy/controllers/fob-inland-definition.service.d.ts +14 -0
- package/proxy/controllers/freight-offer.service.d.ts +19 -0
- package/proxy/controllers/incoterm.service.d.ts +14 -0
- package/proxy/controllers/index.d.ts +14 -0
- package/proxy/controllers/item-package-group.service.d.ts +15 -0
- package/proxy/controllers/item-package-type.service.d.ts +15 -0
- package/proxy/controllers/item-product-type.service.d.ts +15 -0
- package/proxy/controllers/line.service.d.ts +14 -0
- package/proxy/controllers/pos.service.d.ts +14 -0
- package/proxy/controllers/price-list.service.d.ts +12 -0
- package/proxy/controllers/price-parameter.service.d.ts +15 -0
- package/proxy/cost-parameter-categories/cost-parameter-category-parent-code.enum.d.ts +1 -4
- package/proxy/cost-parameters/dtos/models.d.ts +0 -8
- package/proxy/destination-ports/dtos/index.d.ts +1 -0
- package/proxy/destination-ports/dtos/models.d.ts +19 -0
- package/proxy/fob-inland-definitions/dtos/index.d.ts +1 -0
- package/proxy/fob-inland-definitions/dtos/models.d.ts +19 -0
- package/proxy/freight-offers/dtos/index.d.ts +1 -0
- package/proxy/freight-offers/dtos/models.d.ts +66 -0
- package/proxy/incoterms/dtos/index.d.ts +1 -0
- package/proxy/incoterms/dtos/models.d.ts +22 -0
- package/proxy/item-package-groups/dtos/index.d.ts +1 -0
- package/proxy/item-package-groups/dtos/models.d.ts +13 -0
- package/proxy/item-package-types/dtos/index.d.ts +1 -0
- package/proxy/item-package-types/dtos/models.d.ts +13 -0
- package/proxy/item-product-types/dtos/index.d.ts +1 -0
- package/proxy/item-product-types/dtos/models.d.ts +13 -0
- package/proxy/lines/dtos/index.d.ts +1 -0
- package/proxy/lines/dtos/models.d.ts +10 -0
- package/proxy/pos/dtos/index.d.ts +1 -0
- package/proxy/pos/dtos/models.d.ts +10 -0
- package/proxy/price-lists/dtos/index.d.ts +1 -0
- package/proxy/price-lists/dtos/models.d.ts +10 -0
- package/proxy/price-parameters/dtos/index.d.ts +1 -0
- package/proxy/price-parameters/dtos/models.d.ts +78 -0
- package/proxy/price-parameters/price-parameter-status.enum.d.ts +6 -0
- package/proxy/public-api.d.ts +15 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { finalize } from 'rxjs/operators';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/forms";
|
|
5
|
+
import * as i2 from "@hitsoft/kadooglu-keops/proxy";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
import * as i4 from "@abp/ng.core";
|
|
8
|
+
import * as i5 from "@abp/ng.theme.shared";
|
|
9
|
+
import * as i6 from "devextreme-angular";
|
|
10
|
+
export class FreightOfferCopyComponent {
|
|
11
|
+
constructor(fb, service) {
|
|
12
|
+
this.fb = fb;
|
|
13
|
+
this.service = service;
|
|
14
|
+
this.visible = false;
|
|
15
|
+
this.source = null;
|
|
16
|
+
this.visibleChange = new EventEmitter();
|
|
17
|
+
this.copied = new EventEmitter();
|
|
18
|
+
this.saving = false;
|
|
19
|
+
}
|
|
20
|
+
ngOnInit() {
|
|
21
|
+
this.buildForm();
|
|
22
|
+
}
|
|
23
|
+
ngOnChanges(changes) {
|
|
24
|
+
if (changes['source']) {
|
|
25
|
+
this.buildForm();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
buildForm() {
|
|
29
|
+
this.form = this.fb.group({
|
|
30
|
+
manualDates: [false],
|
|
31
|
+
validFrom: [null],
|
|
32
|
+
validTo: [null],
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
onVisibleChange(value) {
|
|
36
|
+
this.visible = value;
|
|
37
|
+
this.visibleChange.emit(value);
|
|
38
|
+
}
|
|
39
|
+
save() {
|
|
40
|
+
const value = this.form.value;
|
|
41
|
+
this.saving = true;
|
|
42
|
+
this.service.copy(this.source.code, value)
|
|
43
|
+
.pipe(finalize(() => (this.saving = false)))
|
|
44
|
+
.subscribe({
|
|
45
|
+
next: () => {
|
|
46
|
+
this.copied.emit();
|
|
47
|
+
this.visible = false;
|
|
48
|
+
this.visibleChange.emit(false);
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
FreightOfferCopyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FreightOfferCopyComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FreightOfferService }], target: i0.ɵɵFactoryTarget.Component });
|
|
54
|
+
FreightOfferCopyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FreightOfferCopyComponent, selector: "lib-freight-offer-copy", inputs: { visible: "visible", source: "source" }, outputs: { visibleChange: "visibleChange", copied: "copied" }, usesOnChanges: true, ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" (visibleChange)=\"onVisibleChange($event)\" [busy]=\"saving\" [options]=\"{ size: 'md' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'Keops::FreightOffers:CopyTitle' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <div class=\"mb-3 form-check\">\r\n <input id=\"manualDates\" type=\"checkbox\" class=\"form-check-input\" formControlName=\"manualDates\" />\r\n <label for=\"manualDates\" class=\"form-check-label\">{{ 'Keops::FreightOffers:ManualDates' | abpLocalization }}</label>\r\n </div>\r\n <ng-container *ngIf=\"form.get('manualDates')?.value\">\r\n <div class=\"mb-3\">\r\n <label for=\"validFrom\" class=\"form-label\">{{ 'Keops::FreightOffers:ValidFrom' | abpLocalization }}</label>\r\n <dx-date-box id=\"validFrom\" type=\"date\" dateSerializationFormat=\"yyyy-MM-dd\" formControlName=\"validFrom\"></dx-date-box>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label for=\"validTo\" class=\"form-label\">{{ 'Keops::FreightOffers:ValidTo' | abpLocalization }}</label>\r\n <dx-date-box id=\"validTo\" type=\"date\" dateSerializationFormat=\"yyyy-MM-dd\" formControlName=\"validTo\"></dx-date-box>\r\n </div>\r\n </ng-container>\r\n <p class=\"text-muted small\" *ngIf=\"!form.get('manualDates')?.value\">\r\n {{ 'Keops::FreightOffers:CopyAutoDateInfo' | abpLocalization }}\r\n </p>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">{{ 'AbpUi::Cancel' | abpLocalization }}</button>\r\n <abp-button iconClass=\"fa fa-copy\" buttonClass=\"btn btn-primary\" [loading]=\"saving\" (click)=\"save()\">\r\n {{ 'Keops::FreightOffers:Copy' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "component", type: i5.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i5.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i5.ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: i6.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] });
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FreightOfferCopyComponent, decorators: [{
|
|
56
|
+
type: Component,
|
|
57
|
+
args: [{ selector: 'lib-freight-offer-copy', template: "<abp-modal [(visible)]=\"visible\" (visibleChange)=\"onVisibleChange($event)\" [busy]=\"saving\" [options]=\"{ size: 'md' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'Keops::FreightOffers:CopyTitle' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <div class=\"mb-3 form-check\">\r\n <input id=\"manualDates\" type=\"checkbox\" class=\"form-check-input\" formControlName=\"manualDates\" />\r\n <label for=\"manualDates\" class=\"form-check-label\">{{ 'Keops::FreightOffers:ManualDates' | abpLocalization }}</label>\r\n </div>\r\n <ng-container *ngIf=\"form.get('manualDates')?.value\">\r\n <div class=\"mb-3\">\r\n <label for=\"validFrom\" class=\"form-label\">{{ 'Keops::FreightOffers:ValidFrom' | abpLocalization }}</label>\r\n <dx-date-box id=\"validFrom\" type=\"date\" dateSerializationFormat=\"yyyy-MM-dd\" formControlName=\"validFrom\"></dx-date-box>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label for=\"validTo\" class=\"form-label\">{{ 'Keops::FreightOffers:ValidTo' | abpLocalization }}</label>\r\n <dx-date-box id=\"validTo\" type=\"date\" dateSerializationFormat=\"yyyy-MM-dd\" formControlName=\"validTo\"></dx-date-box>\r\n </div>\r\n </ng-container>\r\n <p class=\"text-muted small\" *ngIf=\"!form.get('manualDates')?.value\">\r\n {{ 'Keops::FreightOffers:CopyAutoDateInfo' | abpLocalization }}\r\n </p>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">{{ 'AbpUi::Cancel' | abpLocalization }}</button>\r\n <abp-button iconClass=\"fa fa-copy\" buttonClass=\"btn btn-primary\" [loading]=\"saving\" (click)=\"save()\">\r\n {{ 'Keops::FreightOffers:Copy' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
58
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.FreightOfferService }]; }, propDecorators: { visible: [{
|
|
59
|
+
type: Input
|
|
60
|
+
}], source: [{
|
|
61
|
+
type: Input
|
|
62
|
+
}], visibleChange: [{
|
|
63
|
+
type: Output
|
|
64
|
+
}], copied: [{
|
|
65
|
+
type: Output
|
|
66
|
+
}] } });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlaWdodC1vZmZlci1jb3B5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2thZG9vZ2x1LWtlb3BzL3NyYy9saWIvZmVhdHVyZXMvZnJlaWdodC1vZmZlcnMvY29tcG9uZW50cy9mcmVpZ2h0LW9mZmVyLWNvcHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUta2VvcHMvc3JjL2xpYi9mZWF0dXJlcy9mcmVpZ2h0LW9mZmVycy9jb21wb25lbnRzL2ZyZWlnaHQtb2ZmZXItY29weS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQU8xQyxNQUFNLE9BQU8seUJBQXlCO0lBVXBDLFlBQ21CLEVBQWUsRUFDZixPQUE0QjtRQUQ1QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFYdEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixXQUFNLEdBQTJCLElBQUksQ0FBQztRQUVyQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDNUMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFHNUMsV0FBTSxHQUFHLEtBQUssQ0FBQztJQUtaLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3hCLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNwQixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDakIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYztRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSTtRQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBRW5CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFPLENBQUMsSUFBSyxFQUFFLEtBQUssQ0FBQzthQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzNDLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDOztzSEFuRFUseUJBQXlCOzBHQUF6Qix5QkFBeUIsb01DVHRDLGs2REFrQ0E7MkZEekJhLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7b0lBSXpCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEZyZWlnaHRPZmZlclNlcnZpY2UsIEZyZWlnaHRPZmZlckR0byB9IGZyb20gJ0BoaXRzb2Z0L2thZG9vZ2x1LWtlb3BzL3Byb3h5JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZyZWlnaHQtb2ZmZXItY29weScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZyZWlnaHQtb2ZmZXItY29weS5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGcmVpZ2h0T2ZmZXJDb3B5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHZpc2libGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzb3VyY2U6IEZyZWlnaHRPZmZlckR0byB8IG51bGwgPSBudWxsO1xyXG5cclxuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgY29waWVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBmb3JtITogRm9ybUdyb3VwO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlOiBGcmVpZ2h0T2ZmZXJTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3NvdXJjZSddKSB7XHJcbiAgICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBtYW51YWxEYXRlczogW2ZhbHNlXSxcclxuICAgICAgdmFsaWRGcm9tOiBbbnVsbF0sXHJcbiAgICAgIHZhbGlkVG86IFtudWxsXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25WaXNpYmxlQ2hhbmdlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpc2libGUgPSB2YWx1ZTtcclxuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHNhdmUoKTogdm9pZCB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybS52YWx1ZTtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnNlcnZpY2UuY29weSh0aGlzLnNvdXJjZSEuY29kZSEsIHZhbHVlKVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5zYXZpbmcgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvcGllZC5lbWl0KCk7XHJcbiAgICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGFicC1tb2RhbCBbKHZpc2libGUpXT1cInZpc2libGVcIiAodmlzaWJsZUNoYW5nZSk9XCJvblZpc2libGVDaGFuZ2UoJGV2ZW50KVwiIFtidXN5XT1cInNhdmluZ1wiIFtvcHRpb25zXT1cInsgc2l6ZTogJ21kJyB9XCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+e3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOkNvcHlUaXRsZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2gzPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJzYXZlKClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgZm9ybS1jaGVja1wiPlxyXG4gICAgICAgIDxpbnB1dCBpZD1cIm1hbnVhbERhdGVzXCIgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgZm9ybUNvbnRyb2xOYW1lPVwibWFudWFsRGF0ZXNcIiAvPlxyXG4gICAgICAgIDxsYWJlbCBmb3I9XCJtYW51YWxEYXRlc1wiIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpNYW51YWxEYXRlcycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm0uZ2V0KCdtYW51YWxEYXRlcycpPy52YWx1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwidmFsaWRGcm9tXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOlZhbGlkRnJvbScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LWRhdGUtYm94IGlkPVwidmFsaWRGcm9tXCIgdHlwZT1cImRhdGVcIiBkYXRlU2VyaWFsaXphdGlvbkZvcm1hdD1cInl5eXktTU0tZGRcIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWxpZEZyb21cIj48L2R4LWRhdGUtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwidmFsaWRUb1wiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpWYWxpZFRvJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtZGF0ZS1ib3ggaWQ9XCJ2YWxpZFRvXCIgdHlwZT1cImRhdGVcIiBkYXRlU2VyaWFsaXphdGlvbkZvcm1hdD1cInl5eXktTU0tZGRcIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWxpZFRvXCI+PC9keC1kYXRlLWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiICpuZ0lmPVwiIWZvcm0uZ2V0KCdtYW51YWxEYXRlcycpPy52YWx1ZVwiPlxyXG4gICAgICAgIHt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpDb3B5QXV0b0RhdGVJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L3A+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICA8YnV0dG9uIGFicENsb3NlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCI+e3sgJ0FicFVpOjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9idXR0b24+XHJcbiAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jb3B5XCIgYnV0dG9uQ2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBbbG9hZGluZ109XCJzYXZpbmdcIiAoY2xpY2spPVwic2F2ZSgpXCI+XHJcbiAgICAgIHt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpDb3B5JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9hYnAtYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYWJwLW1vZGFsPlxyXG4iXX0=
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
3
|
+
import { forkJoin, of } from 'rxjs';
|
|
4
|
+
import { finalize } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/forms";
|
|
7
|
+
import * as i2 from "@hitsoft/kadooglu-keops/proxy";
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
9
|
+
import * as i4 from "@abp/ng.core";
|
|
10
|
+
import * as i5 from "@abp/ng.theme.shared";
|
|
11
|
+
import * as i6 from "devextreme-angular";
|
|
12
|
+
/**
|
|
13
|
+
* Navlun teklifi oluştur/güncelle formu.
|
|
14
|
+
* Nakliye firması, hat ve POS alanları master tablolardan seçim dropdown'u olarak sunulur.
|
|
15
|
+
* Ülke seçimi değiştiğinde varış limanı listesi cascade olarak yeniden yüklenir.
|
|
16
|
+
*/
|
|
17
|
+
export class FreightOfferFormComponent {
|
|
18
|
+
constructor(fb, service, carrierService, lineService, loadingPortService, destinationPortService) {
|
|
19
|
+
this.fb = fb;
|
|
20
|
+
this.service = service;
|
|
21
|
+
this.carrierService = carrierService;
|
|
22
|
+
this.lineService = lineService;
|
|
23
|
+
this.loadingPortService = loadingPortService;
|
|
24
|
+
this.destinationPortService = destinationPortService;
|
|
25
|
+
this.visible = false;
|
|
26
|
+
this.mode = 'create';
|
|
27
|
+
this.current = null;
|
|
28
|
+
this.countries = [];
|
|
29
|
+
this.usdRate = 0;
|
|
30
|
+
this.visibleChange = new EventEmitter();
|
|
31
|
+
this.saved = new EventEmitter();
|
|
32
|
+
this.saving = false;
|
|
33
|
+
this.loading = true;
|
|
34
|
+
this.carriers = [];
|
|
35
|
+
this.lines = [];
|
|
36
|
+
this.loadingPorts = [];
|
|
37
|
+
this.containerDefinitions = [];
|
|
38
|
+
this.filteredPorts = [];
|
|
39
|
+
}
|
|
40
|
+
ngOnInit() {
|
|
41
|
+
const destPorts$ = this.current?.destCountryCode
|
|
42
|
+
? this.destinationPortService.getLookupByCountry(this.current.destCountryCode)
|
|
43
|
+
: of([]);
|
|
44
|
+
forkJoin({
|
|
45
|
+
carriers: this.carrierService.getList(),
|
|
46
|
+
lines: this.lineService.getList(),
|
|
47
|
+
loadingPorts: this.loadingPortService.getList(),
|
|
48
|
+
containerDefs: this.service.getContainerDefinitionsLookup(),
|
|
49
|
+
destPorts: destPorts$,
|
|
50
|
+
}).subscribe(result => {
|
|
51
|
+
this.carriers = result.carriers;
|
|
52
|
+
this.lines = result.lines;
|
|
53
|
+
this.loadingPorts = result.loadingPorts;
|
|
54
|
+
this.containerDefinitions = result.containerDefs.filter(d => d.isActive);
|
|
55
|
+
this.filteredPorts = result.destPorts;
|
|
56
|
+
this.buildForm();
|
|
57
|
+
this.loading = false;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
ngOnChanges(changes) {
|
|
61
|
+
// Yalnızca form açıkken kullanıcı ülke değiştirirse ilgili port listesini sıfırla
|
|
62
|
+
if (changes['current'] && !changes['current'].isFirstChange()) {
|
|
63
|
+
if (this.current?.destCountryCode) {
|
|
64
|
+
this.loadPortsByCountry(this.current.destCountryCode);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this.filteredPorts = [];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
onCountryChange(countryCode) {
|
|
72
|
+
this.form.get('destPortCode')?.setValue('');
|
|
73
|
+
this.filteredPorts = [];
|
|
74
|
+
if (countryCode) {
|
|
75
|
+
this.loadPortsByCountry(countryCode);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
loadPortsByCountry(countryCode) {
|
|
79
|
+
this.destinationPortService.getLookupByCountry(countryCode).subscribe(data => {
|
|
80
|
+
this.filteredPorts = data;
|
|
81
|
+
// *ngFor options DOM'a eklendikten sonra (bir tick sonra) değeri yeniden ata
|
|
82
|
+
const saved = this.form?.get('destPortCode')?.value;
|
|
83
|
+
if (saved) {
|
|
84
|
+
setTimeout(() => this.form?.get('destPortCode')?.setValue(saved, { emitEvent: false }));
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
get linesArray() {
|
|
89
|
+
return this.form.get('lines');
|
|
90
|
+
}
|
|
91
|
+
buildLineGroup(line) {
|
|
92
|
+
return this.fb.group({
|
|
93
|
+
containerTypeCode: [line?.containerTypeCode ?? '', Validators.required],
|
|
94
|
+
freightUsd: [line?.freightUsd ?? null, [Validators.required, Validators.min(0)]],
|
|
95
|
+
portLocalUsd: [line?.portLocalUsd ?? null, [Validators.required, Validators.min(0)]],
|
|
96
|
+
inlandTry: [line?.inlandTry ?? null, [Validators.required, Validators.min(0)]],
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
buildForm() {
|
|
100
|
+
const existingLines = this.current?.lines ?? [];
|
|
101
|
+
const lineGroups = existingLines.length > 0
|
|
102
|
+
? existingLines.map(l => this.buildLineGroup(l))
|
|
103
|
+
: this.containerDefinitions.map(cd => this.buildLineGroup({ containerTypeCode: cd.code }));
|
|
104
|
+
this.form = this.fb.group({
|
|
105
|
+
offerDate: [this.current?.offerDate ?? new Date().toISOString().split('T')[0], Validators.required],
|
|
106
|
+
validFrom: [this.current?.validFrom ?? '', Validators.required],
|
|
107
|
+
validTo: [this.current?.validTo ?? '', Validators.required],
|
|
108
|
+
carrierBpCode: [this.current?.carrierBpCode ?? '', Validators.required],
|
|
109
|
+
lineName: [this.current?.lineName ?? '', Validators.required],
|
|
110
|
+
posCode: [this.current?.posCode ?? '', Validators.required],
|
|
111
|
+
destCountryCode: [this.current?.destCountryCode ?? '', Validators.required],
|
|
112
|
+
destPortCode: [this.current?.destPortCode ?? '', Validators.required],
|
|
113
|
+
transitDays: [this.current?.transitDays ?? 0, [Validators.required, Validators.min(0)]],
|
|
114
|
+
freeTime: [this.current?.freeTime ?? null],
|
|
115
|
+
lines: this.fb.array(lineGroups),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
getInlandUsd(index) {
|
|
119
|
+
if (!this.usdRate)
|
|
120
|
+
return 0;
|
|
121
|
+
return (this.linesArray.at(index).value.inlandTry || 0) / this.usdRate;
|
|
122
|
+
}
|
|
123
|
+
getLineTotalUsd(index) {
|
|
124
|
+
const v = this.linesArray.at(index).value;
|
|
125
|
+
return (v.freightUsd || 0) + (v.portLocalUsd || 0) + this.getInlandUsd(index);
|
|
126
|
+
}
|
|
127
|
+
addLine() {
|
|
128
|
+
this.linesArray.push(this.buildLineGroup());
|
|
129
|
+
}
|
|
130
|
+
removeLine(index) {
|
|
131
|
+
this.linesArray.removeAt(index);
|
|
132
|
+
}
|
|
133
|
+
get title() {
|
|
134
|
+
return this.mode === 'create' ? 'Keops::FreightOffers:CreateTitle' : 'Keops::FreightOffers:EditTitle';
|
|
135
|
+
}
|
|
136
|
+
onVisibleChange(value) {
|
|
137
|
+
this.visible = value;
|
|
138
|
+
this.visibleChange.emit(value);
|
|
139
|
+
}
|
|
140
|
+
save() {
|
|
141
|
+
if (this.saving)
|
|
142
|
+
return;
|
|
143
|
+
if (this.form.invalid) {
|
|
144
|
+
this.form.markAllAsTouched();
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const value = this.form.value;
|
|
148
|
+
this.saving = true;
|
|
149
|
+
const request$ = this.mode === 'create'
|
|
150
|
+
? this.service.create(value)
|
|
151
|
+
: this.service.update(this.current.code, value);
|
|
152
|
+
request$.pipe(finalize(() => (this.saving = false))).subscribe({
|
|
153
|
+
next: () => {
|
|
154
|
+
this.saved.emit();
|
|
155
|
+
this.visible = false;
|
|
156
|
+
this.visibleChange.emit(false);
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
FreightOfferFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FreightOfferFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FreightOfferService }, { token: i2.CarrierService }, { token: i2.LineService }, { token: i2.PosService }, { token: i2.DestinationPortService }], target: i0.ɵɵFactoryTarget.Component });
|
|
162
|
+
FreightOfferFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FreightOfferFormComponent, selector: "lib-freight-offer-form", inputs: { visible: "visible", mode: "mode", current: "current", countries: "countries", usdRate: "usdRate" }, outputs: { visibleChange: "visibleChange", saved: "saved" }, usesOnChanges: true, ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" (visibleChange)=\"onVisibleChange($event)\" [busy]=\"saving\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ title | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <div *ngIf=\"loading\" class=\"text-center py-5\">\r\n <div class=\"spinner-border text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">Y\u00FCkleniyor...</span>\r\n </div>\r\n </div>\r\n <form *ngIf=\"!loading\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <div class=\"d-flex justify-content-end mb-2\" *ngIf=\"usdRate > 0\">\r\n <span class=\"badge bg-secondary fs-6\">\r\n <i class=\"fa fa-dollar-sign me-1\"></i>1 USD = {{ usdRate | number:'1.4-4' }} TRY\r\n </span>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"offerDate\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:OfferDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"offerDate\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"offerDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"validFrom\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:ValidFrom' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"validFrom\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"validFrom\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"validTo\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:ValidTo' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"validTo\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"validTo\"\r\n [min]=\"form.get('validFrom')?.value || null\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"carrierBpCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:CarrierBpCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"carrierBpCode\" class=\"form-select\" formControlName=\"carrierBpCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of carriers\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"lineName\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:LineName' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"lineName\" class=\"form-select\" formControlName=\"lineName\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let l of lines\" [value]=\"l.code\">{{ l.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"posCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:PosCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"posCode\" class=\"form-select\" formControlName=\"posCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let p of loadingPorts\" [value]=\"p.code\">{{ p.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"destCountryCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:DestCountryCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"destCountryCode\" class=\"form-select\" formControlName=\"destCountryCode\"\r\n (change)=\"onCountryChange($any($event.target).value)\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of countries\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"destPortCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:DestPortCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"destPortCode\" class=\"form-select\" formControlName=\"destPortCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let p of filteredPorts\" [value]=\"p.code\">{{ p.portName }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"transitDays\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:TransitDays' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <input\r\n id=\"transitDays\"\r\n type=\"number\"\r\n min=\"0\"\r\n class=\"form-control\"\r\n formControlName=\"transitDays\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"freeTime\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:FreeTime' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"freeTime\"\r\n type=\"number\"\r\n min=\"0\"\r\n class=\"form-control\"\r\n formControlName=\"freeTime\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-4\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <div class=\"border-start border-4 border-primary ps-3\">\r\n <span class=\"fw-bold text-dark\" style=\"font-size: 1rem;\">{{ 'Keops::FreightOffers:ContainerInfo' | abpLocalization }}</span>\r\n <div class=\"text-muted\" style=\"font-size: 0.75rem;\">{{ linesArray.length }} sat\u0131r</div>\r\n </div>\r\n <!-- <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"addLine()\">\r\n <i class=\"fa fa-plus me-1\"></i>{{ 'Keops::FreightOffers:AddLine' | abpLocalization }}\r\n </button> -->\r\n </div>\r\n <div class=\"border rounded overflow-hidden\">\r\n <table class=\"table table-bordered table-sm align-middle mb-0\" formArrayName=\"lines\">\r\n <thead class=\"table-light\">\r\n <tr>\r\n <th>{{ 'Keops::FreightOffers:ContainerTypeCode' | abpLocalization }} <span class=\"text-danger\">*</span></th>\r\n <th>{{ 'Keops::FreightOffers:FreightUsd' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:PortLocalUsd' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:InlandTry' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:TotalUsd' | abpLocalization }}</th>\r\n <th class=\"text-center\" style=\"width: 50px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let lineCtrl of linesArray.controls; let i = index\" [formGroupName]=\"i\">\r\n <td>\r\n <select class=\"form-select form-select-sm\" formControlName=\"containerTypeCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of containerDefinitions\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </td>\r\n <td><input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"freightUsd\" /></td>\r\n <td><input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"portLocalUsd\" /></td>\r\n <td>\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"inlandTry\" />\r\n <span class=\"input-group-text text-muted\" [style.visibility]=\"usdRate > 0 ? 'visible' : 'hidden'\">\r\n \u2248 {{ getInlandUsd(i) | number:'1.2-2' }} $\r\n </span>\r\n </div>\r\n </td>\r\n <td><input type=\"text\" class=\"form-control form-control-sm bg-light\" readonly [value]=\"getLineTotalUsd(i) | number:'1.2-2'\" /></td>\r\n <td class=\"text-center\">\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger\" (click)=\"removeLine(i)\">\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"linesArray.length === 0\">\r\n <td colspan=\"6\" class=\"text-center text-muted py-3\">\r\n <small><i class=\"fa fa-info-circle me-1\"></i>{{ 'Keops::FreightOffers:AddLine' | abpLocalization }}</small>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">{{ 'AbpUi::Cancel' | abpLocalization }}</button>\r\n <abp-button iconClass=\"fa fa-check\" buttonClass=\"btn btn-primary\" [loading]=\"saving\" [disabled]=\"loading || saving || form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i4.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "component", type: i5.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i5.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i5.ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: i6.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] });
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FreightOfferFormComponent, decorators: [{
|
|
164
|
+
type: Component,
|
|
165
|
+
args: [{ selector: 'lib-freight-offer-form', template: "<abp-modal [(visible)]=\"visible\" (visibleChange)=\"onVisibleChange($event)\" [busy]=\"saving\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ title | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <div *ngIf=\"loading\" class=\"text-center py-5\">\r\n <div class=\"spinner-border text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">Y\u00FCkleniyor...</span>\r\n </div>\r\n </div>\r\n <form *ngIf=\"!loading\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n <div class=\"d-flex justify-content-end mb-2\" *ngIf=\"usdRate > 0\">\r\n <span class=\"badge bg-secondary fs-6\">\r\n <i class=\"fa fa-dollar-sign me-1\"></i>1 USD = {{ usdRate | number:'1.4-4' }} TRY\r\n </span>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"offerDate\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:OfferDate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"offerDate\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"offerDate\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"validFrom\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:ValidFrom' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"validFrom\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"validFrom\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"validTo\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:ValidTo' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-date-box\r\n id=\"validTo\"\r\n type=\"date\"\r\n dateSerializationFormat=\"yyyy-MM-dd\"\r\n formControlName=\"validTo\"\r\n [min]=\"form.get('validFrom')?.value || null\"\r\n ></dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"carrierBpCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:CarrierBpCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"carrierBpCode\" class=\"form-select\" formControlName=\"carrierBpCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of carriers\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"lineName\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:LineName' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"lineName\" class=\"form-select\" formControlName=\"lineName\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let l of lines\" [value]=\"l.code\">{{ l.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"posCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:PosCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"posCode\" class=\"form-select\" formControlName=\"posCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let p of loadingPorts\" [value]=\"p.code\">{{ p.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"destCountryCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:DestCountryCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"destCountryCode\" class=\"form-select\" formControlName=\"destCountryCode\"\r\n (change)=\"onCountryChange($any($event.target).value)\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of countries\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"destPortCode\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:DestPortCode' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <select id=\"destPortCode\" class=\"form-select\" formControlName=\"destPortCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let p of filteredPorts\" [value]=\"p.code\">{{ p.portName }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"transitDays\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:TransitDays' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <input\r\n id=\"transitDays\"\r\n type=\"number\"\r\n min=\"0\"\r\n class=\"form-control\"\r\n formControlName=\"transitDays\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"mb-3\">\r\n <label for=\"freeTime\" class=\"form-label\">\r\n {{ 'Keops::FreightOffers:FreeTime' | abpLocalization }}\r\n </label>\r\n <input\r\n id=\"freeTime\"\r\n type=\"number\"\r\n min=\"0\"\r\n class=\"form-control\"\r\n formControlName=\"freeTime\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-4\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <div class=\"border-start border-4 border-primary ps-3\">\r\n <span class=\"fw-bold text-dark\" style=\"font-size: 1rem;\">{{ 'Keops::FreightOffers:ContainerInfo' | abpLocalization }}</span>\r\n <div class=\"text-muted\" style=\"font-size: 0.75rem;\">{{ linesArray.length }} sat\u0131r</div>\r\n </div>\r\n <!-- <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"addLine()\">\r\n <i class=\"fa fa-plus me-1\"></i>{{ 'Keops::FreightOffers:AddLine' | abpLocalization }}\r\n </button> -->\r\n </div>\r\n <div class=\"border rounded overflow-hidden\">\r\n <table class=\"table table-bordered table-sm align-middle mb-0\" formArrayName=\"lines\">\r\n <thead class=\"table-light\">\r\n <tr>\r\n <th>{{ 'Keops::FreightOffers:ContainerTypeCode' | abpLocalization }} <span class=\"text-danger\">*</span></th>\r\n <th>{{ 'Keops::FreightOffers:FreightUsd' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:PortLocalUsd' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:InlandTry' | abpLocalization }}</th>\r\n <th>{{ 'Keops::FreightOffers:TotalUsd' | abpLocalization }}</th>\r\n <th class=\"text-center\" style=\"width: 50px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let lineCtrl of linesArray.controls; let i = index\" [formGroupName]=\"i\">\r\n <td>\r\n <select class=\"form-select form-select-sm\" formControlName=\"containerTypeCode\">\r\n <option value=\"\" disabled hidden></option>\r\n <option *ngFor=\"let c of containerDefinitions\" [value]=\"c.code\">{{ c.name }}</option>\r\n </select>\r\n </td>\r\n <td><input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"freightUsd\" /></td>\r\n <td><input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"portLocalUsd\" /></td>\r\n <td>\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"number\" step=\"0.01\" min=\"0\" class=\"form-control form-control-sm\" formControlName=\"inlandTry\" />\r\n <span class=\"input-group-text text-muted\" [style.visibility]=\"usdRate > 0 ? 'visible' : 'hidden'\">\r\n \u2248 {{ getInlandUsd(i) | number:'1.2-2' }} $\r\n </span>\r\n </div>\r\n </td>\r\n <td><input type=\"text\" class=\"form-control form-control-sm bg-light\" readonly [value]=\"getLineTotalUsd(i) | number:'1.2-2'\" /></td>\r\n <td class=\"text-center\">\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger\" (click)=\"removeLine(i)\">\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"linesArray.length === 0\">\r\n <td colspan=\"6\" class=\"text-center text-muted py-3\">\r\n <small><i class=\"fa fa-info-circle me-1\"></i>{{ 'Keops::FreightOffers:AddLine' | abpLocalization }}</small>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">{{ 'AbpUi::Cancel' | abpLocalization }}</button>\r\n <abp-button iconClass=\"fa fa-check\" buttonClass=\"btn btn-primary\" [loading]=\"saving\" [disabled]=\"loading || saving || form?.invalid\" (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
166
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.FreightOfferService }, { type: i2.CarrierService }, { type: i2.LineService }, { type: i2.PosService }, { type: i2.DestinationPortService }]; }, propDecorators: { visible: [{
|
|
167
|
+
type: Input
|
|
168
|
+
}], mode: [{
|
|
169
|
+
type: Input
|
|
170
|
+
}], current: [{
|
|
171
|
+
type: Input
|
|
172
|
+
}], countries: [{
|
|
173
|
+
type: Input
|
|
174
|
+
}], usdRate: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], visibleChange: [{
|
|
177
|
+
type: Output
|
|
178
|
+
}], saved: [{
|
|
179
|
+
type: Output
|
|
180
|
+
}] } });
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlaWdodC1vZmZlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2thZG9vZ2x1LWtlb3BzL3NyYy9saWIvZmVhdHVyZXMvZnJlaWdodC1vZmZlcnMvY29tcG9uZW50cy9mcmVpZ2h0LW9mZmVyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUta2VvcHMvc3JjL2xpYi9mZWF0dXJlcy9mcmVpZ2h0LW9mZmVycy9jb21wb25lbnRzL2ZyZWlnaHQtb2ZmZXItZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFxQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBWTFDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8seUJBQXlCO0lBb0JwQyxZQUNtQixFQUFlLEVBQ2YsT0FBNEIsRUFDNUIsY0FBOEIsRUFDOUIsV0FBd0IsRUFDeEIsa0JBQThCLEVBQzlCLHNCQUE4QztRQUw5QyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBWTtRQUM5QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBekJ4RCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFNBQUksR0FBc0IsUUFB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QUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3RCxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7c0hBbktVLHlCQUF5QjswR0FBekIseUJBQXlCLDhQQ3BCdEMsaXNWQStOQTsyRkQzTWEseUJBQXlCO2tCQVRyQyxTQUFTOytCQUNFLHdCQUF3Qjt5UEFTekIsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENhcnJpZXJTZXJ2aWNlLCBEZXN0aW5hdGlvblBvcnRTZXJ2aWNlLCBGcmVpZ2h0T2ZmZXJTZXJ2aWNlLCBMaW5lU2VydmljZSwgUG9zU2VydmljZSB9IGZyb20gJ0BoaXRzb2Z0L2thZG9vZ2x1LWtlb3BzL3Byb3h5JztcclxuaW1wb3J0IHR5cGUgeyBDb250YWluZXJEZWZpbml0aW9uTG9va3VwRHRvLCBDb3VudHJ5TG9va3VwRHRvLCBGcmVpZ2h0T2ZmZXJEdG8gfSBmcm9tICdAaGl0c29mdC9rYWRvb2dsdS1rZW9wcy9wcm94eSc7XHJcbmltcG9ydCB0eXBlIHsgQ2FycmllckR0byB9IGZyb20gJ0BoaXRzb2Z0L2thZG9vZ2x1LWtlb3BzL3Byb3h5JztcclxuaW1wb3J0IHR5cGUgeyBMaW5lRHRvIH0gZnJvbSAnQGhpdHNvZnQva2Fkb29nbHUta2VvcHMvcHJveHknO1xyXG5pbXBvcnQgdHlwZSB7IFBvc0R0byB9IGZyb20gJ0BoaXRzb2Z0L2thZG9vZ2x1LWtlb3BzL3Byb3h5JztcclxuaW1wb3J0IHR5cGUgeyBEZXN0aW5hdGlvblBvcnRMb29rdXBEdG8gfSBmcm9tICdAaGl0c29mdC9rYWRvb2dsdS1rZW9wcy9wcm94eSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1mcmVpZ2h0LW9mZmVyLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mcmVpZ2h0LW9mZmVyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG4vKipcclxuICogTmF2bHVuIHRla2xpZmkgb2x1xZ90dXIvZ8O8bmNlbGxlIGZvcm11LlxyXG4gKiBOYWtsaXllIGZpcm1hc8SxLCBoYXQgdmUgUE9TIGFsYW5sYXLEsSBtYXN0ZXIgdGFibG9sYXJkYW4gc2XDp2ltIGRyb3Bkb3duJ3Ugb2xhcmFrIHN1bnVsdXIuXHJcbiAqIMOcbGtlIHNlw6dpbWkgZGXEn2nFn3RpxJ9pbmRlIHZhcsSxxZ8gbGltYW7EsSBsaXN0ZXNpIGNhc2NhZGUgb2xhcmFrIHllbmlkZW4gecO8a2xlbmlyLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZyZWlnaHRPZmZlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgdmlzaWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1vZGU6ICdjcmVhdGUnIHwgJ2VkaXQnID0gJ2NyZWF0ZSc7XHJcbiAgQElucHV0KCkgY3VycmVudDogRnJlaWdodE9mZmVyRHRvIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgY291bnRyaWVzOiBDb3VudHJ5TG9va3VwRHRvW10gPSBbXTtcclxuICBASW5wdXQoKSB1c2RSYXRlID0gMDtcclxuXHJcbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBmb3JtITogRm9ybUdyb3VwO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICBjYXJyaWVyczogQ2FycmllckR0b1tdID0gW107XHJcbiAgbGluZXM6IExpbmVEdG9bXSA9IFtdO1xyXG4gIGxvYWRpbmdQb3J0czogUG9zRHRvW10gPSBbXTtcclxuICBjb250YWluZXJEZWZpbml0aW9uczogQ29udGFpbmVyRGVmaW5pdGlvbkxvb2t1cER0b1tdID0gW107XHJcbiAgZmlsdGVyZWRQb3J0czogRGVzdGluYXRpb25Qb3J0TG9va3VwRHRvW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZTogRnJlaWdodE9mZmVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FycmllclNlcnZpY2U6IENhcnJpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaW5lU2VydmljZTogTGluZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmdQb3J0U2VydmljZTogUG9zU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdGluYXRpb25Qb3J0U2VydmljZTogRGVzdGluYXRpb25Qb3J0U2VydmljZSxcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVzdFBvcnRzJCA9IHRoaXMuY3VycmVudD8uZGVzdENvdW50cnlDb2RlXHJcbiAgICAgID8gdGhpcy5kZXN0aW5hdGlvblBvcnRTZXJ2aWNlLmdldExvb2t1cEJ5Q291bnRyeSh0aGlzLmN1cnJlbnQuZGVzdENvdW50cnlDb2RlKVxyXG4gICAgICA6IG9mKFtdIGFzIERlc3RpbmF0aW9uUG9ydExvb2t1cER0b1tdKTtcclxuXHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIGNhcnJpZXJzOiB0aGlzLmNhcnJpZXJTZXJ2aWNlLmdldExpc3QoKSxcclxuICAgICAgbGluZXM6IHRoaXMubGluZVNlcnZpY2UuZ2V0TGlzdCgpLFxyXG4gICAgICBsb2FkaW5nUG9ydHM6IHRoaXMubG9hZGluZ1BvcnRTZXJ2aWNlLmdldExpc3QoKSxcclxuICAgICAgY29udGFpbmVyRGVmczogdGhpcy5zZXJ2aWNlLmdldENvbnRhaW5lckRlZmluaXRpb25zTG9va3VwKCksXHJcbiAgICAgIGRlc3RQb3J0czogZGVzdFBvcnRzJCxcclxuICAgIH0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLmNhcnJpZXJzID0gcmVzdWx0LmNhcnJpZXJzO1xyXG4gICAgICB0aGlzLmxpbmVzID0gcmVzdWx0LmxpbmVzO1xyXG4gICAgICB0aGlzLmxvYWRpbmdQb3J0cyA9IHJlc3VsdC5sb2FkaW5nUG9ydHM7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyRGVmaW5pdGlvbnMgPSByZXN1bHQuY29udGFpbmVyRGVmcy5maWx0ZXIoZCA9PiBkLmlzQWN0aXZlKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZFBvcnRzID0gcmVzdWx0LmRlc3RQb3J0cztcclxuICAgICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIFlhbG7EsXpjYSBmb3JtIGHDp8Sxa2tlbiBrdWxsYW7EsWPEsSDDvGxrZSBkZcSfacWfdGlyaXJzZSBpbGdpbGkgcG9ydCBsaXN0ZXNpbmkgc8SxZsSxcmxhXHJcbiAgICBpZiAoY2hhbmdlc1snY3VycmVudCddICYmICFjaGFuZ2VzWydjdXJyZW50J10uaXNGaXJzdENoYW5nZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnQ/LmRlc3RDb3VudHJ5Q29kZSkge1xyXG4gICAgICAgIHRoaXMubG9hZFBvcnRzQnlDb3VudHJ5KHRoaXMuY3VycmVudC5kZXN0Q291bnRyeUNvZGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRQb3J0cyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNvdW50cnlDaGFuZ2UoY291bnRyeUNvZGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtLmdldCgnZGVzdFBvcnRDb2RlJyk/LnNldFZhbHVlKCcnKTtcclxuICAgIHRoaXMuZmlsdGVyZWRQb3J0cyA9IFtdO1xyXG4gICAgaWYgKGNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHRoaXMubG9hZFBvcnRzQnlDb3VudHJ5KGNvdW50cnlDb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFBvcnRzQnlDb3VudHJ5KGNvdW50cnlDb2RlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdGluYXRpb25Qb3J0U2VydmljZS5nZXRMb29rdXBCeUNvdW50cnkoY291bnRyeUNvZGUpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJlZFBvcnRzID0gZGF0YTtcclxuICAgICAgLy8gKm5nRm9yIG9wdGlvbnMgRE9NJ2EgZWtsZW5kaWt0ZW4gc29ucmEgKGJpciB0aWNrIHNvbnJhKSBkZcSfZXJpIHllbmlkZW4gYXRhXHJcbiAgICAgIGNvbnN0IHNhdmVkID0gdGhpcy5mb3JtPy5nZXQoJ2Rlc3RQb3J0Q29kZScpPy52YWx1ZTtcclxuICAgICAgaWYgKHNhdmVkKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvcm0/LmdldCgnZGVzdFBvcnRDb2RlJyk/LnNldFZhbHVlKHNhdmVkLCB7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBsaW5lc0FycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnbGluZXMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkTGluZUdyb3VwKGxpbmU/OiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBjb250YWluZXJUeXBlQ29kZTogW2xpbmU/LmNvbnRhaW5lclR5cGVDb2RlID8/ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgZnJlaWdodFVzZDogW2xpbmU/LmZyZWlnaHRVc2QgPz8gbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDApXV0sXHJcbiAgICAgIHBvcnRMb2NhbFVzZDogW2xpbmU/LnBvcnRMb2NhbFVzZCA/PyBudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMCldXSxcclxuICAgICAgaW5sYW5kVHJ5OiBbbGluZT8uaW5sYW5kVHJ5ID8/IG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKV1dLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGV4aXN0aW5nTGluZXMgPSB0aGlzLmN1cnJlbnQ/LmxpbmVzID8/IFtdO1xyXG4gICAgY29uc3QgbGluZUdyb3VwcyA9IGV4aXN0aW5nTGluZXMubGVuZ3RoID4gMFxyXG4gICAgICA/IGV4aXN0aW5nTGluZXMubWFwKGwgPT4gdGhpcy5idWlsZExpbmVHcm91cChsKSlcclxuICAgICAgOiB0aGlzLmNvbnRhaW5lckRlZmluaXRpb25zLm1hcChjZCA9PiB0aGlzLmJ1aWxkTGluZUdyb3VwKHsgY29udGFpbmVyVHlwZUNvZGU6IGNkLmNvZGUgfSkpO1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIG9mZmVyRGF0ZTogW3RoaXMuY3VycmVudD8ub2ZmZXJEYXRlID8/IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgdmFsaWRGcm9tOiBbdGhpcy5jdXJyZW50Py52YWxpZEZyb20gPz8gJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICB2YWxpZFRvOiBbdGhpcy5jdXJyZW50Py52YWxpZFRvID8/ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgY2FycmllckJwQ29kZTogW3RoaXMuY3VycmVudD8uY2FycmllckJwQ29kZSA/PyAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGxpbmVOYW1lOiBbdGhpcy5jdXJyZW50Py5saW5lTmFtZSA/PyAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHBvc0NvZGU6IFt0aGlzLmN1cnJlbnQ/LnBvc0NvZGUgPz8gJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBkZXN0Q291bnRyeUNvZGU6IFt0aGlzLmN1cnJlbnQ/LmRlc3RDb3VudHJ5Q29kZSA/PyAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGRlc3RQb3J0Q29kZTogW3RoaXMuY3VycmVudD8uZGVzdFBvcnRDb2RlID8/ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgdHJhbnNpdERheXM6IFt0aGlzLmN1cnJlbnQ/LnRyYW5zaXREYXlzID8/IDAsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwKV1dLFxyXG4gICAgICBmcmVlVGltZTogW3RoaXMuY3VycmVudD8uZnJlZVRpbWUgPz8gbnVsbF0sXHJcbiAgICAgIGxpbmVzOiB0aGlzLmZiLmFycmF5KGxpbmVHcm91cHMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRJbmxhbmRVc2QoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoIXRoaXMudXNkUmF0ZSkgcmV0dXJuIDA7XHJcbiAgICByZXR1cm4gKHRoaXMubGluZXNBcnJheS5hdChpbmRleCkudmFsdWUuaW5sYW5kVHJ5IHx8IDApIC8gdGhpcy51c2RSYXRlO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGluZVRvdGFsVXNkKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgdiA9IHRoaXMubGluZXNBcnJheS5hdChpbmRleCkudmFsdWU7XHJcbiAgICByZXR1cm4gKHYuZnJlaWdodFVzZCB8fCAwKSArICh2LnBvcnRMb2NhbFVzZCB8fCAwKSArIHRoaXMuZ2V0SW5sYW5kVXNkKGluZGV4KTtcclxuICB9XHJcblxyXG4gIGFkZExpbmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpbmVzQXJyYXkucHVzaCh0aGlzLmJ1aWxkTGluZUdyb3VwKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTGluZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpbmVzQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnY3JlYXRlJyA/ICdLZW9wczo6RnJlaWdodE9mZmVyczpDcmVhdGVUaXRsZScgOiAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6RWRpdFRpdGxlJztcclxuICB9XHJcblxyXG4gIG9uVmlzaWJsZUNoYW5nZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy52aXNpYmxlID0gdmFsdWU7XHJcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2F2aW5nKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3QkID1cclxuICAgICAgdGhpcy5tb2RlID09PSAnY3JlYXRlJ1xyXG4gICAgICAgID8gdGhpcy5zZXJ2aWNlLmNyZWF0ZSh2YWx1ZSlcclxuICAgICAgICA6IHRoaXMuc2VydmljZS51cGRhdGUodGhpcy5jdXJyZW50IS5jb2RlISwgdmFsdWUpO1xyXG5cclxuICAgIHJlcXVlc3QkLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuc2F2aW5nID0gZmFsc2UpKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2ZWQuZW1pdCgpO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8YWJwLW1vZGFsIFsodmlzaWJsZSldPVwidmlzaWJsZVwiICh2aXNpYmxlQ2hhbmdlKT1cIm9uVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCIgW2J1c3ldPVwic2F2aW5nXCIgW29wdGlvbnNdPVwieyBzaXplOiAneGwnIH1cIj5cclxuICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgIDxoMz57eyB0aXRsZSB8IGFicExvY2FsaXphdGlvbiB9fTwvaDM+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPlnDvGtsZW5peW9yLi4uPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGZvcm0gKm5nSWY9XCIhbG9hZGluZ1wiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJzYXZlKClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIiAqbmdJZj1cInVzZFJhdGUgPiAwXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnkgZnMtNlwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb2xsYXItc2lnbiBtZS0xXCI+PC9pPjEgVVNEID0ge3sgdXNkUmF0ZSB8IG51bWJlcjonMS40LTQnIH19IFRSWVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJvZmZlckRhdGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6T2ZmZXJEYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgICBpZD1cIm9mZmVyRGF0ZVwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgIGRhdGVTZXJpYWxpemF0aW9uRm9ybWF0PVwieXl5eS1NTS1kZFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib2ZmZXJEYXRlXCJcclxuICAgICAgICAgICAgPjwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2YWxpZEZyb21cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6VmFsaWRGcm9tJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgICBpZD1cInZhbGlkRnJvbVwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgIGRhdGVTZXJpYWxpemF0aW9uRm9ybWF0PVwieXl5eS1NTS1kZFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsaWRGcm9tXCJcclxuICAgICAgICAgICAgPjwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2YWxpZFRvXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAge3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOlZhbGlkVG8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkeC1kYXRlLWJveFxyXG4gICAgICAgICAgICAgIGlkPVwidmFsaWRUb1wiXHJcbiAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgIGRhdGVTZXJpYWxpemF0aW9uRm9ybWF0PVwieXl5eS1NTS1kZFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsaWRUb1wiXHJcbiAgICAgICAgICAgICAgW21pbl09XCJmb3JtLmdldCgndmFsaWRGcm9tJyk/LnZhbHVlIHx8IG51bGxcIlxyXG4gICAgICAgICAgICA+PC9keC1kYXRlLWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNhcnJpZXJCcENvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6Q2FycmllckJwQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cImNhcnJpZXJCcENvZGVcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY2FycmllckJwQ29kZVwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZCBoaWRkZW4+PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYyBvZiBjYXJyaWVyc1wiIFt2YWx1ZV09XCJjLmNvZGVcIj57eyBjLm5hbWUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJsaW5lTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpMaW5lTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cImxpbmVOYW1lXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cImxpbmVOYW1lXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkIGhpZGRlbj48L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsIG9mIGxpbmVzXCIgW3ZhbHVlXT1cImwuY29kZVwiPnt7IGwubmFtZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBvc0NvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6UG9zQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cInBvc0NvZGVcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicG9zQ29kZVwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZCBoaWRkZW4+PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcCBvZiBsb2FkaW5nUG9ydHNcIiBbdmFsdWVdPVwicC5jb2RlXCI+e3sgcC5uYW1lIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVzdENvdW50cnlDb2RlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAge3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOkRlc3RDb3VudHJ5Q29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cImRlc3RDb3VudHJ5Q29kZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXN0Q291bnRyeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Db3VudHJ5Q2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkIGhpZGRlbj48L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvdW50cmllc1wiIFt2YWx1ZV09XCJjLmNvZGVcIj57eyBjLm5hbWUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXN0UG9ydENvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6RGVzdFBvcnRDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8c2VsZWN0IGlkPVwiZGVzdFBvcnRDb2RlXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cImRlc3RQb3J0Q29kZVwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZCBoaWRkZW4+PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcCBvZiBmaWx0ZXJlZFBvcnRzXCIgW3ZhbHVlXT1cInAuY29kZVwiPnt7IHAucG9ydE5hbWUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0cmFuc2l0RGF5c1wiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpUcmFuc2l0RGF5cycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgaWQ9XCJ0cmFuc2l0RGF5c1wiXHJcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRyYW5zaXREYXlzXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZyZWVUaW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAge3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOkZyZWVUaW1lJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBpZD1cImZyZWVUaW1lXCJcclxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZnJlZVRpbWVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXN0YXJ0IGJvcmRlci00IGJvcmRlci1wcmltYXJ5IHBzLTNcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIHRleHQtZGFya1wiIHN0eWxlPVwiZm9udC1zaXplOiAxcmVtO1wiPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpDb250YWluZXJJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC43NXJlbTtcIj57eyBsaW5lc0FycmF5Lmxlbmd0aCB9fSBzYXTEsXI8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiYWRkTGluZSgpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cyBtZS0xXCI+PC9pPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpBZGRMaW5lJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLXNtIGFsaWduLW1pZGRsZSBtYi0wXCIgZm9ybUFycmF5TmFtZT1cImxpbmVzXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cInRhYmxlLWxpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRoPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpDb250YWluZXJUeXBlQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX0gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD57eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6RnJlaWdodFVzZCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpQb3J0TG9jYWxVc2QnIHwgYWJwTG9jYWxpemF0aW9uIH19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD57eyAnS2VvcHM6OkZyZWlnaHRPZmZlcnM6SW5sYW5kVHJ5JyB8IGFicExvY2FsaXphdGlvbiB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGg+e3sgJ0tlb3BzOjpGcmVpZ2h0T2ZmZXJzOlRvdGFsVXNkJyB8IGFicExvY2FsaXphdGlvbiB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIHN0eWxlPVwid2lkdGg6IDUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGxpbmVDdHJsIG9mIGxpbmVzQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGZvcm1Db250cm9sTmFtZT1cImNvbnRhaW5lclR5cGVDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkIGhpZGRlbj48L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbnRhaW5lckRlZmluaXRpb25zXCIgW3ZhbHVlXT1cImMuY29kZVwiPnt7IGMubmFtZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9XCJudW1iZXJcIiBzdGVwPVwiMC4wMVwiIG1pbj1cIjBcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBmb3JtQ29udHJvbE5hbWU9XCJmcmVpZ2h0VXNkXCIgLz48L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjAuMDFcIiBtaW49XCIwXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgZm9ybUNvbnRyb2xOYW1lPVwicG9ydExvY2FsVXNkXCIgLz48L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIwLjAxXCIgbWluPVwiMFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIGZvcm1Db250cm9sTmFtZT1cImlubGFuZFRyeVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0IHRleHQtbXV0ZWRcIiBbc3R5bGUudmlzaWJpbGl0eV09XCJ1c2RSYXRlID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICDiiYgge3sgZ2V0SW5sYW5kVXNkKGkpIHwgbnVtYmVyOicxLjItMicgfX0gJFxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBiZy1saWdodFwiIHJlYWRvbmx5IFt2YWx1ZV09XCJnZXRMaW5lVG90YWxVc2QoaSkgfCBudW1iZXI6JzEuMi0yJ1wiIC8+PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kYW5nZXJcIiAoY2xpY2spPVwicmVtb3ZlTGluZShpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cImxpbmVzQXJyYXkubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjZcIiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtbXV0ZWQgcHktM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGw+PGkgY2xhc3M9XCJmYSBmYS1pbmZvLWNpcmNsZSBtZS0xXCI+PC9pPnt7ICdLZW9wczo6RnJlaWdodE9mZmVyczpBZGRMaW5lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgIDxidXR0b24gYWJwQ2xvc2UgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIj57eyAnQWJwVWk6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2J1dHRvbj5cclxuICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgYnV0dG9uQ2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBbbG9hZGluZ109XCJzYXZpbmdcIiBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBzYXZpbmcgfHwgZm9ybT8uaW52YWxpZFwiIChjbGljayk9XCJzYXZlKClcIj5cclxuICAgICAge3sgJ0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9hYnAtYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYWJwLW1vZGFsPlxyXG4iXX0=
|