@vendasta/billing 8.1.0 → 9.1.0
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/esm2020/lib/_generated/host.service.mjs +25 -0
- package/esm2020/lib/_generated/index.mjs +2 -0
- package/esm2020/lib/_internal/bank-reconciliation.api.service.mjs +46 -0
- package/esm2020/lib/_internal/billing.api.service.mjs +216 -0
- package/esm2020/lib/_internal/bundle.api.service.mjs +50 -0
- package/esm2020/lib/_internal/contract-document.api.service.mjs +45 -0
- package/esm2020/lib/_internal/contract.api.service.mjs +55 -0
- package/esm2020/lib/_internal/credit.api.service.mjs +45 -0
- package/esm2020/lib/_internal/discount.api.service.mjs +53 -0
- package/esm2020/lib/_internal/enums/applied-discount.enum.mjs +14 -0
- package/esm2020/lib/_internal/enums/card.enum.mjs +17 -0
- package/esm2020/lib/_internal/enums/contract.enum.mjs +14 -0
- package/esm2020/lib/_internal/enums/currency.enum.mjs +35 -0
- package/esm2020/lib/_internal/enums/frequency.enum.mjs +14 -0
- package/esm2020/lib/_internal/enums/index.mjs +31 -0
- package/esm2020/lib/_internal/enums/invoice.enum.mjs +18 -0
- package/esm2020/lib/_internal/enums/merchant-report.enum.mjs +13 -0
- package/{esm2015/lib/_internal/enums/merchant.enum.js → esm2020/lib/_internal/enums/merchant.enum.mjs} +1 -1
- package/esm2020/lib/_internal/enums/month.enum.mjs +23 -0
- package/esm2020/lib/_internal/enums/payment-card.enum.mjs +24 -0
- package/esm2020/lib/_internal/enums/payment-processor.enum.mjs +13 -0
- package/{esm2015/lib/_internal/enums/payment.enum.js → esm2020/lib/_internal/enums/payment.enum.mjs} +1 -1
- package/esm2020/lib/_internal/enums/payout.enum.mjs +22 -0
- package/esm2020/lib/_internal/enums/pricing-plan.enum.mjs +22 -0
- package/{esm2015/lib/_internal/enums/product-summary.enum.js → esm2020/lib/_internal/enums/product-summary.enum.mjs} +1 -1
- package/esm2020/lib/_internal/enums/product.enum.mjs +17 -0
- package/esm2020/lib/_internal/enums/purchase.enum.mjs +27 -0
- package/esm2020/lib/_internal/enums/recurring-invoice.enum.mjs +29 -0
- package/esm2020/lib/_internal/enums/refund.enum.mjs +25 -0
- package/esm2020/lib/_internal/enums/sales-credit-note.enum.mjs +14 -0
- package/{esm2015/lib/_internal/enums/sales-invoice.enum.js → esm2020/lib/_internal/enums/sales-invoice.enum.mjs} +1 -1
- package/esm2020/lib/_internal/enums/sort-direction.enum.mjs +12 -0
- package/{esm2015/lib/_internal/enums/subscribe-validation.enum.js → esm2020/lib/_internal/enums/subscribe-validation.enum.mjs} +1 -1
- package/esm2020/lib/_internal/enums/subscription.enum.mjs +12 -0
- package/esm2020/lib/_internal/index.mjs +33 -0
- package/esm2020/lib/_internal/interfaces/api.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/applied-bundle.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/applied-discount.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/applied-tax-rate.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/balance.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/billable-item.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/bundle.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/card.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/commitment.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/common.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/contract-document.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/contract.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/credit.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/currency.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/customer-summary.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/date-range.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/discount.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/external-account.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/field-mask.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/frequency.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/invoice-template.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/invoice.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/merchant-report.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/merchant.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/metered-component.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/month.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/payment-card.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/payment-processor.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/payment.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/payout.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/pricing-plan-product.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/pricing-plan.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/product-pricing.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/product-summary.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/product.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/purchase.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/recurring-invoice.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/refund.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/retail-customer-configuration.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/sales-credit-note.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/sales-invoice.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/sort-direction.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/subscribe-validation.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/subscription.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/tax-rate.interface.mjs +2 -0
- package/esm2020/lib/_internal/invoice-template.api.service.mjs +85 -0
- package/esm2020/lib/_internal/invoice.api.service.mjs +116 -0
- package/esm2020/lib/_internal/merchant.api.service.mjs +159 -0
- package/esm2020/lib/_internal/objects/api.mjs +841 -0
- package/esm2020/lib/_internal/objects/applied-bundle.mjs +77 -0
- package/esm2020/lib/_internal/objects/applied-discount.mjs +46 -0
- package/esm2020/lib/_internal/objects/applied-tax-rate.mjs +39 -0
- package/esm2020/lib/_internal/objects/balance.mjs +45 -0
- package/esm2020/lib/_internal/objects/billable-item.mjs +562 -0
- package/esm2020/lib/_internal/objects/bundle.mjs +390 -0
- package/esm2020/lib/_internal/objects/card.mjs +7 -0
- package/esm2020/lib/_internal/objects/commitment.mjs +36 -0
- package/esm2020/lib/_internal/objects/common.mjs +56 -0
- package/esm2020/lib/_internal/objects/contract-document.mjs +141 -0
- package/esm2020/lib/_internal/objects/contract.mjs +474 -0
- package/esm2020/lib/_internal/objects/credit.mjs +114 -0
- package/esm2020/lib/_internal/objects/currency.mjs +7 -0
- package/esm2020/lib/_internal/objects/customer-summary.mjs +104 -0
- package/esm2020/lib/_internal/objects/date-range.mjs +36 -0
- package/esm2020/lib/_internal/objects/discount.mjs +299 -0
- package/esm2020/lib/_internal/objects/external-account.mjs +160 -0
- package/esm2020/lib/_internal/objects/field-mask.mjs +27 -0
- package/esm2020/lib/_internal/objects/frequency.mjs +7 -0
- package/esm2020/lib/_internal/objects/index.mjs +46 -0
- package/esm2020/lib/_internal/objects/invoice-template.mjs +707 -0
- package/esm2020/lib/_internal/objects/invoice.mjs +1117 -0
- package/esm2020/lib/_internal/objects/merchant-report.mjs +108 -0
- package/esm2020/lib/_internal/objects/merchant.mjs +991 -0
- package/esm2020/lib/_internal/objects/metered-component.mjs +97 -0
- package/esm2020/lib/_internal/objects/month.mjs +7 -0
- package/esm2020/lib/_internal/objects/payment-card.mjs +211 -0
- package/esm2020/lib/_internal/objects/payment-processor.mjs +7 -0
- package/esm2020/lib/_internal/objects/payment.mjs +1219 -0
- package/esm2020/lib/_internal/objects/payout.mjs +258 -0
- package/esm2020/lib/_internal/objects/pricing-plan-product.mjs +565 -0
- package/esm2020/lib/_internal/objects/pricing-plan.mjs +290 -0
- package/esm2020/lib/_internal/objects/product-pricing.mjs +107 -0
- package/esm2020/lib/_internal/objects/product-summary.mjs +538 -0
- package/esm2020/lib/_internal/objects/product.mjs +302 -0
- package/esm2020/lib/_internal/objects/purchase.mjs +524 -0
- package/esm2020/lib/_internal/objects/recurring-invoice.mjs +327 -0
- package/esm2020/lib/_internal/objects/refund.mjs +181 -0
- package/esm2020/lib/_internal/objects/retail-customer-configuration.mjs +159 -0
- package/esm2020/lib/_internal/objects/sales-credit-note.mjs +211 -0
- package/esm2020/lib/_internal/objects/sales-invoice.mjs +300 -0
- package/esm2020/lib/_internal/objects/sort-direction.mjs +7 -0
- package/esm2020/lib/_internal/objects/subscribe-validation.mjs +31 -0
- package/esm2020/lib/_internal/objects/subscription.mjs +555 -0
- package/esm2020/lib/_internal/objects/tax-rate.mjs +342 -0
- package/esm2020/lib/_internal/payment-method.api.service.mjs +49 -0
- package/esm2020/lib/_internal/payment.api.service.mjs +102 -0
- package/esm2020/lib/_internal/pricing.api.service.mjs +76 -0
- package/esm2020/lib/_internal/product-summary.api.service.mjs +46 -0
- package/esm2020/lib/_internal/product.api.service.mjs +47 -0
- package/esm2020/lib/_internal/purchase.api.service.mjs +59 -0
- package/esm2020/lib/_internal/recurring-invoice.api.service.mjs +60 -0
- package/esm2020/lib/_internal/refund.api.service.mjs +45 -0
- package/esm2020/lib/_internal/retail-customer-configuration.api.service.mjs +45 -0
- package/esm2020/lib/_internal/sales-credit-note.api.service.mjs +45 -0
- package/esm2020/lib/_internal/sales-invoice.api.service.mjs +50 -0
- package/esm2020/lib/_internal/tax.api.service.mjs +63 -0
- package/esm2020/lib/_internal/vendor.api.service.mjs +46 -0
- package/esm2020/lib/index.mjs +3 -0
- package/esm2020/public_api.mjs +2 -0
- package/esm2020/vendasta-billing.mjs +5 -0
- package/fesm2015/{vendasta-billing.js → vendasta-billing.mjs} +1091 -4973
- package/fesm2015/vendasta-billing.mjs.map +1 -0
- package/fesm2020/vendasta-billing.mjs +14371 -0
- package/fesm2020/vendasta-billing.mjs.map +1 -0
- package/lib/_generated/host.service.d.ts +5 -9
- package/lib/_internal/bank-reconciliation.api.service.d.ts +4 -0
- package/lib/_internal/billing.api.service.d.ts +4 -0
- package/lib/_internal/bundle.api.service.d.ts +4 -0
- package/lib/_internal/contract-document.api.service.d.ts +4 -0
- package/lib/_internal/contract.api.service.d.ts +4 -0
- package/lib/_internal/credit.api.service.d.ts +4 -0
- package/lib/_internal/discount.api.service.d.ts +4 -0
- package/lib/_internal/enums/index.d.ts +2 -0
- package/lib/_internal/enums/payment-processor.enum.d.ts +5 -0
- package/lib/_internal/enums/recurring-invoice.enum.d.ts +19 -0
- package/lib/_internal/index.d.ts +1 -0
- package/lib/_internal/interfaces/index.d.ts +2 -0
- package/lib/_internal/interfaces/payment-processor.interface.d.ts +1 -0
- package/lib/_internal/interfaces/recurring-invoice.interface.d.ts +55 -0
- package/lib/_internal/invoice-template.api.service.d.ts +4 -0
- package/lib/_internal/invoice.api.service.d.ts +4 -0
- package/lib/_internal/merchant.api.service.d.ts +4 -0
- package/lib/_internal/objects/index.d.ts +2 -0
- package/lib/_internal/objects/payment-processor.d.ts +1 -0
- package/lib/_internal/objects/recurring-invoice.d.ts +84 -0
- package/lib/_internal/payment-method.api.service.d.ts +4 -0
- package/lib/_internal/payment.api.service.d.ts +4 -0
- package/lib/_internal/pricing.api.service.d.ts +4 -0
- package/lib/_internal/product-summary.api.service.d.ts +4 -0
- package/lib/_internal/product.api.service.d.ts +4 -0
- package/lib/_internal/purchase.api.service.d.ts +4 -0
- package/lib/_internal/recurring-invoice.api.service.d.ts +20 -0
- package/lib/_internal/refund.api.service.d.ts +4 -0
- package/lib/_internal/retail-customer-configuration.api.service.d.ts +4 -0
- package/lib/_internal/sales-credit-note.api.service.d.ts +4 -0
- package/lib/_internal/sales-invoice.api.service.d.ts +4 -0
- package/lib/_internal/tax.api.service.d.ts +4 -0
- package/lib/_internal/vendor.api.service.d.ts +4 -0
- package/lib/index.d.ts +2 -36
- package/package.json +26 -15
- package/src/README.md +1 -0
- package/vendasta-billing.d.ts +1 -0
- package/bundles/vendasta-billing.umd.js +0 -19170
- package/bundles/vendasta-billing.umd.js.map +0 -1
- package/bundles/vendasta-billing.umd.min.js +0 -16
- package/bundles/vendasta-billing.umd.min.js.map +0 -1
- package/esm2015/lib/_generated/host.service.js +0 -65
- package/esm2015/lib/_generated/index.js +0 -2
- package/esm2015/lib/_internal/bank-reconciliation.api.service.js +0 -47
- package/esm2015/lib/_internal/billing.api.service.js +0 -217
- package/esm2015/lib/_internal/bundle.api.service.js +0 -51
- package/esm2015/lib/_internal/contract-document.api.service.js +0 -46
- package/esm2015/lib/_internal/contract.api.service.js +0 -56
- package/esm2015/lib/_internal/credit.api.service.js +0 -46
- package/esm2015/lib/_internal/discount.api.service.js +0 -54
- package/esm2015/lib/_internal/enums/applied-discount.enum.js +0 -14
- package/esm2015/lib/_internal/enums/card.enum.js +0 -17
- package/esm2015/lib/_internal/enums/contract.enum.js +0 -14
- package/esm2015/lib/_internal/enums/currency.enum.js +0 -35
- package/esm2015/lib/_internal/enums/frequency.enum.js +0 -14
- package/esm2015/lib/_internal/enums/index.js +0 -29
- package/esm2015/lib/_internal/enums/invoice.enum.js +0 -18
- package/esm2015/lib/_internal/enums/merchant-report.enum.js +0 -13
- package/esm2015/lib/_internal/enums/month.enum.js +0 -23
- package/esm2015/lib/_internal/enums/payment-card.enum.js +0 -24
- package/esm2015/lib/_internal/enums/payout.enum.js +0 -22
- package/esm2015/lib/_internal/enums/pricing-plan.enum.js +0 -22
- package/esm2015/lib/_internal/enums/product.enum.js +0 -17
- package/esm2015/lib/_internal/enums/purchase.enum.js +0 -27
- package/esm2015/lib/_internal/enums/refund.enum.js +0 -25
- package/esm2015/lib/_internal/enums/sales-credit-note.enum.js +0 -14
- package/esm2015/lib/_internal/enums/sort-direction.enum.js +0 -12
- package/esm2015/lib/_internal/enums/subscription.enum.js +0 -12
- package/esm2015/lib/_internal/index.js +0 -32
- package/esm2015/lib/_internal/interfaces/api.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/applied-bundle.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/applied-discount.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/applied-tax-rate.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/balance.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/billable-item.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/bundle.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/card.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/commitment.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/common.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/contract-document.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/contract.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/credit.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/currency.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/customer-summary.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/date-range.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/discount.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/external-account.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/field-mask.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/frequency.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/index.js +0 -2
- package/esm2015/lib/_internal/interfaces/invoice-template.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/invoice.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/merchant-report.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/merchant.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/metered-component.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/month.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/payment-card.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/payment.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/payout.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/pricing-plan-product.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/pricing-plan.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/product-pricing.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/product-summary.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/product.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/purchase.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/refund.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/retail-customer-configuration.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/sales-credit-note.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/sales-invoice.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/sort-direction.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/subscribe-validation.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/subscription.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/tax-rate.interface.js +0 -2
- package/esm2015/lib/_internal/invoice-template.api.service.js +0 -86
- package/esm2015/lib/_internal/invoice.api.service.js +0 -117
- package/esm2015/lib/_internal/merchant.api.service.js +0 -160
- package/esm2015/lib/_internal/objects/api.js +0 -841
- package/esm2015/lib/_internal/objects/applied-bundle.js +0 -77
- package/esm2015/lib/_internal/objects/applied-discount.js +0 -46
- package/esm2015/lib/_internal/objects/applied-tax-rate.js +0 -39
- package/esm2015/lib/_internal/objects/balance.js +0 -45
- package/esm2015/lib/_internal/objects/billable-item.js +0 -562
- package/esm2015/lib/_internal/objects/bundle.js +0 -390
- package/esm2015/lib/_internal/objects/card.js +0 -7
- package/esm2015/lib/_internal/objects/commitment.js +0 -36
- package/esm2015/lib/_internal/objects/common.js +0 -56
- package/esm2015/lib/_internal/objects/contract-document.js +0 -141
- package/esm2015/lib/_internal/objects/contract.js +0 -474
- package/esm2015/lib/_internal/objects/credit.js +0 -114
- package/esm2015/lib/_internal/objects/currency.js +0 -7
- package/esm2015/lib/_internal/objects/customer-summary.js +0 -104
- package/esm2015/lib/_internal/objects/date-range.js +0 -36
- package/esm2015/lib/_internal/objects/discount.js +0 -299
- package/esm2015/lib/_internal/objects/external-account.js +0 -160
- package/esm2015/lib/_internal/objects/field-mask.js +0 -27
- package/esm2015/lib/_internal/objects/frequency.js +0 -7
- package/esm2015/lib/_internal/objects/index.js +0 -45
- package/esm2015/lib/_internal/objects/invoice-template.js +0 -707
- package/esm2015/lib/_internal/objects/invoice.js +0 -1117
- package/esm2015/lib/_internal/objects/merchant-report.js +0 -108
- package/esm2015/lib/_internal/objects/merchant.js +0 -991
- package/esm2015/lib/_internal/objects/metered-component.js +0 -97
- package/esm2015/lib/_internal/objects/month.js +0 -7
- package/esm2015/lib/_internal/objects/payment-card.js +0 -211
- package/esm2015/lib/_internal/objects/payment.js +0 -1219
- package/esm2015/lib/_internal/objects/payout.js +0 -258
- package/esm2015/lib/_internal/objects/pricing-plan-product.js +0 -565
- package/esm2015/lib/_internal/objects/pricing-plan.js +0 -290
- package/esm2015/lib/_internal/objects/product-pricing.js +0 -107
- package/esm2015/lib/_internal/objects/product-summary.js +0 -538
- package/esm2015/lib/_internal/objects/product.js +0 -302
- package/esm2015/lib/_internal/objects/purchase.js +0 -524
- package/esm2015/lib/_internal/objects/refund.js +0 -181
- package/esm2015/lib/_internal/objects/retail-customer-configuration.js +0 -159
- package/esm2015/lib/_internal/objects/sales-credit-note.js +0 -211
- package/esm2015/lib/_internal/objects/sales-invoice.js +0 -300
- package/esm2015/lib/_internal/objects/sort-direction.js +0 -7
- package/esm2015/lib/_internal/objects/subscribe-validation.js +0 -31
- package/esm2015/lib/_internal/objects/subscription.js +0 -555
- package/esm2015/lib/_internal/objects/tax-rate.js +0 -342
- package/esm2015/lib/_internal/payment-method.api.service.js +0 -50
- package/esm2015/lib/_internal/payment.api.service.js +0 -103
- package/esm2015/lib/_internal/pricing.api.service.js +0 -77
- package/esm2015/lib/_internal/product-summary.api.service.js +0 -47
- package/esm2015/lib/_internal/product.api.service.js +0 -48
- package/esm2015/lib/_internal/purchase.api.service.js +0 -60
- package/esm2015/lib/_internal/refund.api.service.js +0 -46
- package/esm2015/lib/_internal/retail-customer-configuration.api.service.js +0 -46
- package/esm2015/lib/_internal/sales-credit-note.api.service.js +0 -46
- package/esm2015/lib/_internal/sales-invoice.api.service.js +0 -51
- package/esm2015/lib/_internal/tax.api.service.js +0 -64
- package/esm2015/lib/_internal/vendor.api.service.js +0 -47
- package/esm2015/lib/applied_bundle/applied_bundle.js +0 -12
- package/esm2015/lib/applied_bundle/index.js +0 -2
- package/esm2015/lib/applied_discount/applied_discount.js +0 -48
- package/esm2015/lib/applied_discount/index.js +0 -2
- package/esm2015/lib/bank_account/bank-account.service.js +0 -38
- package/esm2015/lib/bank_account/bank_account.js +0 -13
- package/esm2015/lib/bank_account/index.js +0 -3
- package/esm2015/lib/bank_reconciliation/bank-reconciliation.service.js +0 -54
- package/esm2015/lib/bank_reconciliation/index.js +0 -3
- package/esm2015/lib/bank_reconciliation/payout.js +0 -53
- package/esm2015/lib/billable-item/billable-item.js +0 -40
- package/esm2015/lib/billable-item/billable-item.service.js +0 -31
- package/esm2015/lib/billable-item/index.js +0 -2
- package/esm2015/lib/billing-host.service.js +0 -41
- package/esm2015/lib/billing.service.js +0 -376
- package/esm2015/lib/bundle/bundle.js +0 -37
- package/esm2015/lib/bundle/bundle.service.js +0 -56
- package/esm2015/lib/bundle/index.js +0 -2
- package/esm2015/lib/contract/contract.js +0 -21
- package/esm2015/lib/contract/contract.service.js +0 -39
- package/esm2015/lib/contract/dimension.js +0 -21
- package/esm2015/lib/contract/index.js +0 -5
- package/esm2015/lib/contract/mutations.js +0 -11
- package/esm2015/lib/contract-document/contract-document.js +0 -9
- package/esm2015/lib/contract-document/contract-document.service.js +0 -68
- package/esm2015/lib/contract-document/index.js +0 -2
- package/esm2015/lib/contract-document/list-contract-document.js +0 -2
- package/esm2015/lib/core/index.js +0 -3
- package/esm2015/lib/core/paged-response.js +0 -8
- package/esm2015/lib/core/sort-direction.js +0 -6
- package/esm2015/lib/credit/credit.js +0 -8
- package/esm2015/lib/credit/credit.service.js +0 -33
- package/esm2015/lib/credit/index.js +0 -2
- package/esm2015/lib/customer_summary/customer-summary.js +0 -15
- package/esm2015/lib/discount/discount.js +0 -18
- package/esm2015/lib/discount/discount.service.js +0 -73
- package/esm2015/lib/discount/discount_type.js +0 -32
- package/esm2015/lib/discount/index.js +0 -3
- package/esm2015/lib/discount/list-discount.js +0 -2
- package/esm2015/lib/http-shared/error-handlers.js +0 -20
- package/esm2015/lib/index.js +0 -37
- package/esm2015/lib/invoice/index.js +0 -3
- package/esm2015/lib/invoice/invoice.js +0 -198
- package/esm2015/lib/invoice/invoice.service.js +0 -254
- package/esm2015/lib/invoice/list-invoice.js +0 -2
- package/esm2015/lib/invoice-template/index.js +0 -2
- package/esm2015/lib/invoice-template/invoice-template.js +0 -38
- package/esm2015/lib/invoice-template/invoice-template.service.js +0 -78
- package/esm2015/lib/merchant/balance.js +0 -2
- package/esm2015/lib/merchant/index.js +0 -5
- package/esm2015/lib/merchant/merchant.interface.js +0 -2
- package/esm2015/lib/merchant/merchant.js +0 -20
- package/esm2015/lib/merchant/merchant.service.js +0 -212
- package/esm2015/lib/merchant/payout-summary.js +0 -32
- package/esm2015/lib/merchant/retail-configuration.js +0 -57
- package/esm2015/lib/merchant-report/index.js +0 -2
- package/esm2015/lib/merchant-report/merchant-report-status.js +0 -2
- package/esm2015/lib/merchant-report/merchant-report.interfaces.js +0 -2
- package/esm2015/lib/merchant-report/merchant-report.js +0 -2
- package/esm2015/lib/merchant-report/merchant-report.service.js +0 -38
- package/esm2015/lib/payment/dispute.js +0 -92
- package/esm2015/lib/payment/index.js +0 -10
- package/esm2015/lib/payment/payment-allocation-type.js +0 -18
- package/esm2015/lib/payment/payment-source.js +0 -18
- package/esm2015/lib/payment/payment-status.js +0 -17
- package/esm2015/lib/payment/payment.js +0 -292
- package/esm2015/lib/payment/payment.service.js +0 -138
- package/esm2015/lib/payment/retail-payment.js +0 -70
- package/esm2015/lib/payment/retail-status.js +0 -50
- package/esm2015/lib/payment-card/index.js +0 -3
- package/esm2015/lib/payment-card/payment-card.js +0 -60
- package/esm2015/lib/payment-card/payment-card.service.js +0 -45
- package/esm2015/lib/payment-method/index.js +0 -2
- package/esm2015/lib/payment-method/payment-method.service.js +0 -43
- package/esm2015/lib/pricing/billing-strategy.js +0 -39
- package/esm2015/lib/pricing/commitment.js +0 -7
- package/esm2015/lib/pricing/currency.js +0 -86
- package/esm2015/lib/pricing/frequency.js +0 -42
- package/esm2015/lib/pricing/index.js +0 -12
- package/esm2015/lib/pricing/list-pricing-plan-product-filter.js +0 -2
- package/esm2015/lib/pricing/pricing-plan-product.js +0 -53
- package/esm2015/lib/pricing/pricing-plan.js +0 -14
- package/esm2015/lib/pricing/pricing-plan.service.js +0 -287
- package/esm2015/lib/pricing/product-pricing-rules.js +0 -10
- package/esm2015/lib/pricing/product-pricing-type.js +0 -31
- package/esm2015/lib/pricing/product-pricing.js +0 -44
- package/esm2015/lib/pricing/wholesale-pricing.service.js +0 -61
- package/esm2015/lib/product/index.js +0 -3
- package/esm2015/lib/product/list-products.js +0 -30
- package/esm2015/lib/product/product.js +0 -10
- package/esm2015/lib/product-summary/index.js +0 -3
- package/esm2015/lib/product-summary/product-summary.service.js +0 -42
- package/esm2015/lib/product-summary/subscription-retention.js +0 -19
- package/esm2015/lib/purchase/index.js +0 -4
- package/esm2015/lib/purchase/list-purchases.js +0 -17
- package/esm2015/lib/purchase/purchase.js +0 -79
- package/esm2015/lib/purchase/purchase.service.js +0 -31
- package/esm2015/lib/purchase/purchase_status.js +0 -26
- package/esm2015/lib/refund/index.js +0 -3
- package/esm2015/lib/refund/refund.js +0 -81
- package/esm2015/lib/refund/refund.service.js +0 -53
- package/esm2015/lib/retail-customer-configuration/index.js +0 -3
- package/esm2015/lib/retail-customer-configuration/retail-customer-configuration.js +0 -44
- package/esm2015/lib/retail-customer-configuration/retail-customer-configuration.service.js +0 -39
- package/esm2015/lib/revenue/index.js +0 -2
- package/esm2015/lib/revenue/revenue.interfaces.js +0 -2
- package/esm2015/lib/revenue/revenue.service.js +0 -34
- package/esm2015/lib/sales-credit-note/index.js +0 -3
- package/esm2015/lib/sales-credit-note/sales-credit-note.js +0 -53
- package/esm2015/lib/sales-credit-note/sales-credit-note.service.js +0 -72
- package/esm2015/lib/sales-invoice/index.js +0 -3
- package/esm2015/lib/sales-invoice/sales-invoice.js +0 -87
- package/esm2015/lib/sales-invoice/sales-invoice.service.js +0 -77
- package/esm2015/lib/sku.js +0 -4
- package/esm2015/lib/stripe-file/file.js +0 -2
- package/esm2015/lib/stripe-file/index.js +0 -3
- package/esm2015/lib/stripe-file/purpose.js +0 -13
- package/esm2015/lib/stripe-file/stripe-file.service.js +0 -35
- package/esm2015/lib/subscription/can-create-subscriptions-item.js +0 -2
- package/esm2015/lib/subscription/index.js +0 -2
- package/esm2015/lib/tax-rate/index.js +0 -2
- package/esm2015/lib/tax-rate/tax-rate.js +0 -13
- package/esm2015/lib/tax-rate/tax-rate.service.js +0 -86
- package/esm2015/public_api.js +0 -2
- package/esm2015/vendasta-billing.js +0 -5
- package/fesm2015/vendasta-billing.js.map +0 -1
- package/lib/applied_bundle/applied_bundle.d.ts +0 -15
- package/lib/applied_bundle/index.d.ts +0 -1
- package/lib/applied_discount/applied_discount.d.ts +0 -26
- package/lib/applied_discount/index.d.ts +0 -1
- package/lib/bank_account/bank-account.service.d.ts +0 -11
- package/lib/bank_account/bank_account.d.ts +0 -12
- package/lib/bank_account/index.d.ts +0 -3
- package/lib/bank_reconciliation/bank-reconciliation.service.d.ts +0 -10
- package/lib/bank_reconciliation/index.d.ts +0 -2
- package/lib/bank_reconciliation/payout.d.ts +0 -37
- package/lib/billable-item/billable-item.d.ts +0 -40
- package/lib/billable-item/billable-item.service.d.ts +0 -10
- package/lib/billable-item/index.d.ts +0 -2
- package/lib/billing-host.service.d.ts +0 -11
- package/lib/billing.service.d.ts +0 -88
- package/lib/bundle/bundle.d.ts +0 -26
- package/lib/bundle/bundle.service.d.ts +0 -14
- package/lib/bundle/index.d.ts +0 -2
- package/lib/contract/contract.d.ts +0 -20
- package/lib/contract/contract.service.d.ts +0 -23
- package/lib/contract/dimension.d.ts +0 -11
- package/lib/contract/index.d.ts +0 -5
- package/lib/contract/mutations.d.ts +0 -11
- package/lib/contract-document/contract-document.d.ts +0 -8
- package/lib/contract-document/contract-document.service.d.ts +0 -17
- package/lib/contract-document/index.d.ts +0 -3
- package/lib/contract-document/list-contract-document.d.ts +0 -3
- package/lib/core/index.d.ts +0 -2
- package/lib/core/paged-response.d.ts +0 -6
- package/lib/core/sort-direction.d.ts +0 -4
- package/lib/credit/credit.d.ts +0 -7
- package/lib/credit/credit.service.d.ts +0 -9
- package/lib/credit/index.d.ts +0 -2
- package/lib/customer_summary/customer-summary.d.ts +0 -9
- package/lib/discount/discount.d.ts +0 -17
- package/lib/discount/discount.service.d.ts +0 -15
- package/lib/discount/discount_type.d.ts +0 -9
- package/lib/discount/index.d.ts +0 -4
- package/lib/discount/list-discount.d.ts +0 -5
- package/lib/http-shared/error-handlers.d.ts +0 -4
- package/lib/invoice/index.d.ts +0 -3
- package/lib/invoice/invoice.d.ts +0 -86
- package/lib/invoice/invoice.service.d.ts +0 -40
- package/lib/invoice/list-invoice.d.ts +0 -15
- package/lib/invoice-template/index.d.ts +0 -2
- package/lib/invoice-template/invoice-template.d.ts +0 -35
- package/lib/invoice-template/invoice-template.service.d.ts +0 -14
- package/lib/merchant/balance.d.ts +0 -5
- package/lib/merchant/index.d.ts +0 -7
- package/lib/merchant/merchant.d.ts +0 -19
- package/lib/merchant/merchant.interface.d.ts +0 -3
- package/lib/merchant/merchant.service.d.ts +0 -59
- package/lib/merchant/payout-summary.d.ts +0 -19
- package/lib/merchant/retail-configuration.d.ts +0 -24
- package/lib/merchant-report/index.d.ts +0 -4
- package/lib/merchant-report/merchant-report-status.d.ts +0 -1
- package/lib/merchant-report/merchant-report.d.ts +0 -8
- package/lib/merchant-report/merchant-report.interfaces.d.ts +0 -5
- package/lib/merchant-report/merchant-report.service.d.ts +0 -12
- package/lib/payment/dispute.d.ts +0 -61
- package/lib/payment/index.d.ts +0 -9
- package/lib/payment/payment-allocation-type.d.ts +0 -7
- package/lib/payment/payment-source.d.ts +0 -7
- package/lib/payment/payment-status.d.ts +0 -7
- package/lib/payment/payment.d.ts +0 -42
- package/lib/payment/payment.service.d.ts +0 -24
- package/lib/payment/retail-payment.d.ts +0 -33
- package/lib/payment/retail-status.d.ts +0 -24
- package/lib/payment-card/index.d.ts +0 -2
- package/lib/payment-card/payment-card.d.ts +0 -41
- package/lib/payment-card/payment-card.service.d.ts +0 -13
- package/lib/payment-method/index.d.ts +0 -1
- package/lib/payment-method/payment-method.service.d.ts +0 -10
- package/lib/pricing/billing-strategy.d.ts +0 -11
- package/lib/pricing/commitment.d.ts +0 -6
- package/lib/pricing/currency.d.ts +0 -29
- package/lib/pricing/frequency.d.ts +0 -10
- package/lib/pricing/index.d.ts +0 -11
- package/lib/pricing/list-pricing-plan-product-filter.d.ts +0 -4
- package/lib/pricing/pricing-plan-product.d.ts +0 -34
- package/lib/pricing/pricing-plan.d.ts +0 -13
- package/lib/pricing/pricing-plan.service.d.ts +0 -17
- package/lib/pricing/product-pricing-rules.d.ts +0 -7
- package/lib/pricing/product-pricing-type.d.ts +0 -9
- package/lib/pricing/product-pricing.d.ts +0 -37
- package/lib/pricing/wholesale-pricing.service.d.ts +0 -19
- package/lib/product/index.d.ts +0 -2
- package/lib/product/list-products.d.ts +0 -16
- package/lib/product/product.d.ts +0 -9
- package/lib/product-summary/index.d.ts +0 -2
- package/lib/product-summary/product-summary.service.d.ts +0 -10
- package/lib/product-summary/subscription-retention.d.ts +0 -20
- package/lib/purchase/index.d.ts +0 -4
- package/lib/purchase/list-purchases.d.ts +0 -27
- package/lib/purchase/purchase.d.ts +0 -56
- package/lib/purchase/purchase.service.d.ts +0 -10
- package/lib/purchase/purchase_status.d.ts +0 -10
- package/lib/refund/index.d.ts +0 -2
- package/lib/refund/refund.d.ts +0 -36
- package/lib/refund/refund.service.d.ts +0 -11
- package/lib/retail-customer-configuration/index.d.ts +0 -2
- package/lib/retail-customer-configuration/retail-customer-configuration.d.ts +0 -20
- package/lib/retail-customer-configuration/retail-customer-configuration.service.d.ts +0 -9
- package/lib/revenue/index.d.ts +0 -2
- package/lib/revenue/revenue.interfaces.d.ts +0 -3
- package/lib/revenue/revenue.service.d.ts +0 -11
- package/lib/sales-credit-note/index.d.ts +0 -2
- package/lib/sales-credit-note/sales-credit-note.d.ts +0 -30
- package/lib/sales-credit-note/sales-credit-note.service.d.ts +0 -16
- package/lib/sales-invoice/index.d.ts +0 -2
- package/lib/sales-invoice/sales-invoice.d.ts +0 -42
- package/lib/sales-invoice/sales-invoice.service.d.ts +0 -16
- package/lib/sku.d.ts +0 -3
- package/lib/stripe-file/file.d.ts +0 -6
- package/lib/stripe-file/index.d.ts +0 -3
- package/lib/stripe-file/purpose.d.ts +0 -11
- package/lib/stripe-file/stripe-file.service.d.ts +0 -12
- package/lib/subscription/can-create-subscriptions-item.d.ts +0 -6
- package/lib/subscription/index.d.ts +0 -1
- package/lib/tax-rate/index.d.ts +0 -2
- package/lib/tax-rate/tax-rate.d.ts +0 -20
- package/lib/tax-rate/tax-rate.service.d.ts +0 -15
- package/vendasta-billing.metadata.json +0 -1
|
@@ -1,991 +0,0 @@
|
|
|
1
|
-
import { Balance } from './balance';
|
|
2
|
-
import { PagedRequestOptions, PagedResponseMetadata } from './common';
|
|
3
|
-
import { RetailPayout } from './payout';
|
|
4
|
-
import * as e from '../enums';
|
|
5
|
-
export function enumStringToValue(enumRef, value) {
|
|
6
|
-
if (typeof value === 'number') {
|
|
7
|
-
return value;
|
|
8
|
-
}
|
|
9
|
-
return enumRef[value];
|
|
10
|
-
}
|
|
11
|
-
export class ChargeSalesInvoiceRequest {
|
|
12
|
-
constructor(kwargs) {
|
|
13
|
-
if (!kwargs) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
Object.assign(this, kwargs);
|
|
17
|
-
}
|
|
18
|
-
static fromProto(proto) {
|
|
19
|
-
let m = new ChargeSalesInvoiceRequest();
|
|
20
|
-
m = Object.assign(m, proto);
|
|
21
|
-
if (proto.amount) {
|
|
22
|
-
m.amount = parseInt(proto.amount, 10);
|
|
23
|
-
}
|
|
24
|
-
return m;
|
|
25
|
-
}
|
|
26
|
-
toApiJson() {
|
|
27
|
-
const toReturn = {};
|
|
28
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
29
|
-
toReturn['merchantId'] = this.merchantId;
|
|
30
|
-
}
|
|
31
|
-
if (typeof this.invoiceId !== 'undefined') {
|
|
32
|
-
toReturn['invoiceId'] = this.invoiceId;
|
|
33
|
-
}
|
|
34
|
-
if (typeof this.amount !== 'undefined') {
|
|
35
|
-
toReturn['amount'] = this.amount;
|
|
36
|
-
}
|
|
37
|
-
return toReturn;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
export class ConnectStripeAccountRequest {
|
|
41
|
-
constructor(kwargs) {
|
|
42
|
-
if (!kwargs) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
Object.assign(this, kwargs);
|
|
46
|
-
}
|
|
47
|
-
static fromProto(proto) {
|
|
48
|
-
let m = new ConnectStripeAccountRequest();
|
|
49
|
-
m = Object.assign(m, proto);
|
|
50
|
-
return m;
|
|
51
|
-
}
|
|
52
|
-
toApiJson() {
|
|
53
|
-
const toReturn = {};
|
|
54
|
-
if (typeof this.countryCode !== 'undefined') {
|
|
55
|
-
toReturn['countryCode'] = this.countryCode;
|
|
56
|
-
}
|
|
57
|
-
if (typeof this.failureUrl !== 'undefined') {
|
|
58
|
-
toReturn['failureUrl'] = this.failureUrl;
|
|
59
|
-
}
|
|
60
|
-
if (typeof this.successUrl !== 'undefined') {
|
|
61
|
-
toReturn['successUrl'] = this.successUrl;
|
|
62
|
-
}
|
|
63
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
64
|
-
toReturn['merchantId'] = this.merchantId;
|
|
65
|
-
}
|
|
66
|
-
return toReturn;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
export class ConnectStripeAccountResponse {
|
|
70
|
-
constructor(kwargs) {
|
|
71
|
-
if (!kwargs) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
Object.assign(this, kwargs);
|
|
75
|
-
}
|
|
76
|
-
static fromProto(proto) {
|
|
77
|
-
let m = new ConnectStripeAccountResponse();
|
|
78
|
-
m = Object.assign(m, proto);
|
|
79
|
-
return m;
|
|
80
|
-
}
|
|
81
|
-
toApiJson() {
|
|
82
|
-
const toReturn = {};
|
|
83
|
-
if (typeof this.stripeUrl !== 'undefined') {
|
|
84
|
-
toReturn['stripeUrl'] = this.stripeUrl;
|
|
85
|
-
}
|
|
86
|
-
if (typeof this.error !== 'undefined') {
|
|
87
|
-
toReturn['error'] = this.error;
|
|
88
|
-
}
|
|
89
|
-
return toReturn;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
export class CreateMerchantRequest {
|
|
93
|
-
constructor(kwargs) {
|
|
94
|
-
if (!kwargs) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
Object.assign(this, kwargs);
|
|
98
|
-
}
|
|
99
|
-
static fromProto(proto) {
|
|
100
|
-
let m = new CreateMerchantRequest();
|
|
101
|
-
m = Object.assign(m, proto);
|
|
102
|
-
if (proto.includeInFinancialRecords) {
|
|
103
|
-
m.includeInFinancialRecords = CreateMerchantRequestIncludeInFinancialRecords.fromProto(proto.includeInFinancialRecords);
|
|
104
|
-
}
|
|
105
|
-
return m;
|
|
106
|
-
}
|
|
107
|
-
toApiJson() {
|
|
108
|
-
const toReturn = {};
|
|
109
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
110
|
-
toReturn['merchantId'] = this.merchantId;
|
|
111
|
-
}
|
|
112
|
-
if (typeof this.address !== 'undefined') {
|
|
113
|
-
toReturn['address'] = this.address;
|
|
114
|
-
}
|
|
115
|
-
if (typeof this.city !== 'undefined') {
|
|
116
|
-
toReturn['city'] = this.city;
|
|
117
|
-
}
|
|
118
|
-
if (typeof this.state !== 'undefined') {
|
|
119
|
-
toReturn['state'] = this.state;
|
|
120
|
-
}
|
|
121
|
-
if (typeof this.country !== 'undefined') {
|
|
122
|
-
toReturn['country'] = this.country;
|
|
123
|
-
}
|
|
124
|
-
if (typeof this.zipCode !== 'undefined') {
|
|
125
|
-
toReturn['zipCode'] = this.zipCode;
|
|
126
|
-
}
|
|
127
|
-
if (typeof this.emailAddress !== 'undefined') {
|
|
128
|
-
toReturn['emailAddress'] = this.emailAddress;
|
|
129
|
-
}
|
|
130
|
-
if (typeof this.phoneNumber !== 'undefined') {
|
|
131
|
-
toReturn['phoneNumber'] = this.phoneNumber;
|
|
132
|
-
}
|
|
133
|
-
if (typeof this.contactName !== 'undefined') {
|
|
134
|
-
toReturn['contactName'] = this.contactName;
|
|
135
|
-
}
|
|
136
|
-
if (typeof this.companyName !== 'undefined') {
|
|
137
|
-
toReturn['companyName'] = this.companyName;
|
|
138
|
-
}
|
|
139
|
-
if (typeof this.additionalEmailAddresses !== 'undefined') {
|
|
140
|
-
toReturn['additionalEmailAddresses'] = this.additionalEmailAddresses;
|
|
141
|
-
}
|
|
142
|
-
if (typeof this.includeInFinancialRecords !== 'undefined' && this.includeInFinancialRecords !== null) {
|
|
143
|
-
toReturn['includeInFinancialRecords'] = 'toApiJson' in this.includeInFinancialRecords ? this.includeInFinancialRecords.toApiJson() : this.includeInFinancialRecords;
|
|
144
|
-
}
|
|
145
|
-
if (typeof this.hasAlternativePaymentMethod !== 'undefined') {
|
|
146
|
-
toReturn['hasAlternativePaymentMethod'] = this.hasAlternativePaymentMethod;
|
|
147
|
-
}
|
|
148
|
-
return toReturn;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
export class DefaultCustomerConfiguration {
|
|
152
|
-
constructor(kwargs) {
|
|
153
|
-
if (!kwargs) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
Object.assign(this, kwargs);
|
|
157
|
-
}
|
|
158
|
-
static fromProto(proto) {
|
|
159
|
-
let m = new DefaultCustomerConfiguration();
|
|
160
|
-
m = Object.assign(m, proto);
|
|
161
|
-
if (proto.invoiceDay) {
|
|
162
|
-
m.invoiceDay = parseInt(proto.invoiceDay, 10);
|
|
163
|
-
}
|
|
164
|
-
return m;
|
|
165
|
-
}
|
|
166
|
-
toApiJson() {
|
|
167
|
-
const toReturn = {};
|
|
168
|
-
if (typeof this.generateMethod !== 'undefined') {
|
|
169
|
-
toReturn['generateMethod'] = this.generateMethod;
|
|
170
|
-
}
|
|
171
|
-
if (typeof this.collectionMethod !== 'undefined') {
|
|
172
|
-
toReturn['collectionMethod'] = this.collectionMethod;
|
|
173
|
-
}
|
|
174
|
-
if (typeof this.invoiceDay !== 'undefined') {
|
|
175
|
-
toReturn['invoiceDay'] = this.invoiceDay;
|
|
176
|
-
}
|
|
177
|
-
return toReturn;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
export class GetMerchantRequest {
|
|
181
|
-
constructor(kwargs) {
|
|
182
|
-
if (!kwargs) {
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
Object.assign(this, kwargs);
|
|
186
|
-
}
|
|
187
|
-
static fromProto(proto) {
|
|
188
|
-
let m = new GetMerchantRequest();
|
|
189
|
-
m = Object.assign(m, proto);
|
|
190
|
-
return m;
|
|
191
|
-
}
|
|
192
|
-
toApiJson() {
|
|
193
|
-
const toReturn = {};
|
|
194
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
195
|
-
toReturn['merchantId'] = this.merchantId;
|
|
196
|
-
}
|
|
197
|
-
return toReturn;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
export class GetMerchantResponse {
|
|
201
|
-
constructor(kwargs) {
|
|
202
|
-
if (!kwargs) {
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
Object.assign(this, kwargs);
|
|
206
|
-
}
|
|
207
|
-
static fromProto(proto) {
|
|
208
|
-
let m = new GetMerchantResponse();
|
|
209
|
-
m = Object.assign(m, proto);
|
|
210
|
-
if (proto.merchant) {
|
|
211
|
-
m.merchant = Merchant.fromProto(proto.merchant);
|
|
212
|
-
}
|
|
213
|
-
return m;
|
|
214
|
-
}
|
|
215
|
-
toApiJson() {
|
|
216
|
-
const toReturn = {};
|
|
217
|
-
if (typeof this.merchant !== 'undefined' && this.merchant !== null) {
|
|
218
|
-
toReturn['merchant'] = 'toApiJson' in this.merchant ? this.merchant.toApiJson() : this.merchant;
|
|
219
|
-
}
|
|
220
|
-
return toReturn;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
export class GetMultiRetailConfigurationsRequest {
|
|
224
|
-
constructor(kwargs) {
|
|
225
|
-
if (!kwargs) {
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
Object.assign(this, kwargs);
|
|
229
|
-
}
|
|
230
|
-
static fromProto(proto) {
|
|
231
|
-
let m = new GetMultiRetailConfigurationsRequest();
|
|
232
|
-
m = Object.assign(m, proto);
|
|
233
|
-
return m;
|
|
234
|
-
}
|
|
235
|
-
toApiJson() {
|
|
236
|
-
const toReturn = {};
|
|
237
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
238
|
-
toReturn['merchantId'] = this.merchantId;
|
|
239
|
-
}
|
|
240
|
-
if (typeof this.retailGroupIds !== 'undefined') {
|
|
241
|
-
toReturn['retailGroupIds'] = this.retailGroupIds;
|
|
242
|
-
}
|
|
243
|
-
return toReturn;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
export class GetMultiRetailConfigurationsResponse {
|
|
247
|
-
constructor(kwargs) {
|
|
248
|
-
if (!kwargs) {
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
Object.assign(this, kwargs);
|
|
252
|
-
}
|
|
253
|
-
static fromProto(proto) {
|
|
254
|
-
let m = new GetMultiRetailConfigurationsResponse();
|
|
255
|
-
m = Object.assign(m, proto);
|
|
256
|
-
if (proto.retailConfigurations) {
|
|
257
|
-
m.retailConfigurations = Object.keys(proto.retailConfigurations).reduce((obj, k) => { obj[k] = RetailConfiguration.fromProto(proto.retailConfigurations[k]); return obj; }, {});
|
|
258
|
-
}
|
|
259
|
-
return m;
|
|
260
|
-
}
|
|
261
|
-
toApiJson() {
|
|
262
|
-
const toReturn = {};
|
|
263
|
-
if (typeof this.retailConfigurations !== 'undefined' && this.retailConfigurations !== null) {
|
|
264
|
-
toReturn['retailConfigurations'] = 'toApiJson' in this.retailConfigurations ? this.retailConfigurations.toApiJson() : this.retailConfigurations;
|
|
265
|
-
}
|
|
266
|
-
return toReturn;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
export class GetOutstandingBalanceRequest {
|
|
270
|
-
constructor(kwargs) {
|
|
271
|
-
if (!kwargs) {
|
|
272
|
-
return;
|
|
273
|
-
}
|
|
274
|
-
Object.assign(this, kwargs);
|
|
275
|
-
}
|
|
276
|
-
static fromProto(proto) {
|
|
277
|
-
let m = new GetOutstandingBalanceRequest();
|
|
278
|
-
m = Object.assign(m, proto);
|
|
279
|
-
return m;
|
|
280
|
-
}
|
|
281
|
-
toApiJson() {
|
|
282
|
-
const toReturn = {};
|
|
283
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
284
|
-
toReturn['merchantId'] = this.merchantId;
|
|
285
|
-
}
|
|
286
|
-
return toReturn;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
export class GetOutstandingBalanceResponse {
|
|
290
|
-
constructor(kwargs) {
|
|
291
|
-
if (!kwargs) {
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
Object.assign(this, kwargs);
|
|
295
|
-
}
|
|
296
|
-
static fromProto(proto) {
|
|
297
|
-
let m = new GetOutstandingBalanceResponse();
|
|
298
|
-
m = Object.assign(m, proto);
|
|
299
|
-
if (proto.outstandingBalance) {
|
|
300
|
-
m.outstandingBalance = parseInt(proto.outstandingBalance, 10);
|
|
301
|
-
}
|
|
302
|
-
if (proto.currency) {
|
|
303
|
-
m.currency = enumStringToValue(e.Currency, proto.currency);
|
|
304
|
-
}
|
|
305
|
-
return m;
|
|
306
|
-
}
|
|
307
|
-
toApiJson() {
|
|
308
|
-
const toReturn = {};
|
|
309
|
-
if (typeof this.outstandingBalance !== 'undefined') {
|
|
310
|
-
toReturn['outstandingBalance'] = this.outstandingBalance;
|
|
311
|
-
}
|
|
312
|
-
if (typeof this.currency !== 'undefined') {
|
|
313
|
-
toReturn['currency'] = this.currency;
|
|
314
|
-
}
|
|
315
|
-
return toReturn;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
export class GetPayoutSummaryRequest {
|
|
319
|
-
constructor(kwargs) {
|
|
320
|
-
if (!kwargs) {
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
Object.assign(this, kwargs);
|
|
324
|
-
}
|
|
325
|
-
static fromProto(proto) {
|
|
326
|
-
let m = new GetPayoutSummaryRequest();
|
|
327
|
-
m = Object.assign(m, proto);
|
|
328
|
-
return m;
|
|
329
|
-
}
|
|
330
|
-
toApiJson() {
|
|
331
|
-
const toReturn = {};
|
|
332
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
333
|
-
toReturn['merchantId'] = this.merchantId;
|
|
334
|
-
}
|
|
335
|
-
return toReturn;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
export class GetPayoutSummaryResponse {
|
|
339
|
-
constructor(kwargs) {
|
|
340
|
-
if (!kwargs) {
|
|
341
|
-
return;
|
|
342
|
-
}
|
|
343
|
-
Object.assign(this, kwargs);
|
|
344
|
-
}
|
|
345
|
-
static fromProto(proto) {
|
|
346
|
-
let m = new GetPayoutSummaryResponse();
|
|
347
|
-
m = Object.assign(m, proto);
|
|
348
|
-
if (proto.balances) {
|
|
349
|
-
m.balances = proto.balances.map(Balance.fromProto);
|
|
350
|
-
}
|
|
351
|
-
if (proto.nextInTransitPayoutExpectedDate) {
|
|
352
|
-
m.nextInTransitPayoutExpectedDate = new Date(proto.nextInTransitPayoutExpectedDate);
|
|
353
|
-
}
|
|
354
|
-
if (proto.payoutDelayDays) {
|
|
355
|
-
m.payoutDelayDays = parseInt(proto.payoutDelayDays, 10);
|
|
356
|
-
}
|
|
357
|
-
return m;
|
|
358
|
-
}
|
|
359
|
-
toApiJson() {
|
|
360
|
-
const toReturn = {};
|
|
361
|
-
if (typeof this.balances !== 'undefined' && this.balances !== null) {
|
|
362
|
-
toReturn['balances'] = 'toApiJson' in this.balances ? this.balances.toApiJson() : this.balances;
|
|
363
|
-
}
|
|
364
|
-
if (typeof this.nextInTransitPayoutExpectedDate !== 'undefined' && this.nextInTransitPayoutExpectedDate !== null) {
|
|
365
|
-
toReturn['nextInTransitPayoutExpectedDate'] = 'toApiJson' in this.nextInTransitPayoutExpectedDate ? this.nextInTransitPayoutExpectedDate.toApiJson() : this.nextInTransitPayoutExpectedDate;
|
|
366
|
-
}
|
|
367
|
-
if (typeof this.payoutInterval !== 'undefined') {
|
|
368
|
-
toReturn['payoutInterval'] = this.payoutInterval;
|
|
369
|
-
}
|
|
370
|
-
if (typeof this.payoutDelayDays !== 'undefined') {
|
|
371
|
-
toReturn['payoutDelayDays'] = this.payoutDelayDays;
|
|
372
|
-
}
|
|
373
|
-
return toReturn;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
export class GetRetailBalanceRequest {
|
|
377
|
-
constructor(kwargs) {
|
|
378
|
-
if (!kwargs) {
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
Object.assign(this, kwargs);
|
|
382
|
-
}
|
|
383
|
-
static fromProto(proto) {
|
|
384
|
-
let m = new GetRetailBalanceRequest();
|
|
385
|
-
m = Object.assign(m, proto);
|
|
386
|
-
return m;
|
|
387
|
-
}
|
|
388
|
-
toApiJson() {
|
|
389
|
-
const toReturn = {};
|
|
390
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
391
|
-
toReturn['merchantId'] = this.merchantId;
|
|
392
|
-
}
|
|
393
|
-
return toReturn;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
export class GetRetailBalanceResponse {
|
|
397
|
-
constructor(kwargs) {
|
|
398
|
-
if (!kwargs) {
|
|
399
|
-
return;
|
|
400
|
-
}
|
|
401
|
-
Object.assign(this, kwargs);
|
|
402
|
-
}
|
|
403
|
-
static fromProto(proto) {
|
|
404
|
-
let m = new GetRetailBalanceResponse();
|
|
405
|
-
m = Object.assign(m, proto);
|
|
406
|
-
if (proto.balances) {
|
|
407
|
-
m.balances = proto.balances.map(Balance.fromProto);
|
|
408
|
-
}
|
|
409
|
-
return m;
|
|
410
|
-
}
|
|
411
|
-
toApiJson() {
|
|
412
|
-
const toReturn = {};
|
|
413
|
-
if (typeof this.balances !== 'undefined' && this.balances !== null) {
|
|
414
|
-
toReturn['balances'] = 'toApiJson' in this.balances ? this.balances.toApiJson() : this.balances;
|
|
415
|
-
}
|
|
416
|
-
return toReturn;
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
export class GetRetailPayoutRequest {
|
|
420
|
-
constructor(kwargs) {
|
|
421
|
-
if (!kwargs) {
|
|
422
|
-
return;
|
|
423
|
-
}
|
|
424
|
-
Object.assign(this, kwargs);
|
|
425
|
-
}
|
|
426
|
-
static fromProto(proto) {
|
|
427
|
-
let m = new GetRetailPayoutRequest();
|
|
428
|
-
m = Object.assign(m, proto);
|
|
429
|
-
return m;
|
|
430
|
-
}
|
|
431
|
-
toApiJson() {
|
|
432
|
-
const toReturn = {};
|
|
433
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
434
|
-
toReturn['merchantId'] = this.merchantId;
|
|
435
|
-
}
|
|
436
|
-
if (typeof this.payoutId !== 'undefined') {
|
|
437
|
-
toReturn['payoutId'] = this.payoutId;
|
|
438
|
-
}
|
|
439
|
-
return toReturn;
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
export class GetRetailPayoutResponse {
|
|
443
|
-
constructor(kwargs) {
|
|
444
|
-
if (!kwargs) {
|
|
445
|
-
return;
|
|
446
|
-
}
|
|
447
|
-
Object.assign(this, kwargs);
|
|
448
|
-
}
|
|
449
|
-
static fromProto(proto) {
|
|
450
|
-
let m = new GetRetailPayoutResponse();
|
|
451
|
-
m = Object.assign(m, proto);
|
|
452
|
-
if (proto.payout) {
|
|
453
|
-
m.payout = RetailPayout.fromProto(proto.payout);
|
|
454
|
-
}
|
|
455
|
-
return m;
|
|
456
|
-
}
|
|
457
|
-
toApiJson() {
|
|
458
|
-
const toReturn = {};
|
|
459
|
-
if (typeof this.payout !== 'undefined' && this.payout !== null) {
|
|
460
|
-
toReturn['payout'] = 'toApiJson' in this.payout ? this.payout.toApiJson() : this.payout;
|
|
461
|
-
}
|
|
462
|
-
return toReturn;
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
export class UpdateMerchantRequestIncludeInFinancialRecords {
|
|
466
|
-
constructor(kwargs) {
|
|
467
|
-
if (!kwargs) {
|
|
468
|
-
return;
|
|
469
|
-
}
|
|
470
|
-
Object.assign(this, kwargs);
|
|
471
|
-
}
|
|
472
|
-
static fromProto(proto) {
|
|
473
|
-
let m = new UpdateMerchantRequestIncludeInFinancialRecords();
|
|
474
|
-
m = Object.assign(m, proto);
|
|
475
|
-
return m;
|
|
476
|
-
}
|
|
477
|
-
toApiJson() {
|
|
478
|
-
const toReturn = {};
|
|
479
|
-
if (typeof this.includeInFinancialRecords !== 'undefined') {
|
|
480
|
-
toReturn['includeInFinancialRecords'] = this.includeInFinancialRecords;
|
|
481
|
-
}
|
|
482
|
-
return toReturn;
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
export class CreateMerchantRequestIncludeInFinancialRecords {
|
|
486
|
-
constructor(kwargs) {
|
|
487
|
-
if (!kwargs) {
|
|
488
|
-
return;
|
|
489
|
-
}
|
|
490
|
-
Object.assign(this, kwargs);
|
|
491
|
-
}
|
|
492
|
-
static fromProto(proto) {
|
|
493
|
-
let m = new CreateMerchantRequestIncludeInFinancialRecords();
|
|
494
|
-
m = Object.assign(m, proto);
|
|
495
|
-
return m;
|
|
496
|
-
}
|
|
497
|
-
toApiJson() {
|
|
498
|
-
const toReturn = {};
|
|
499
|
-
if (typeof this.includeInFinancialRecords !== 'undefined') {
|
|
500
|
-
toReturn['includeInFinancialRecords'] = this.includeInFinancialRecords;
|
|
501
|
-
}
|
|
502
|
-
return toReturn;
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
export class ListRetailPayoutsRequest {
|
|
506
|
-
constructor(kwargs) {
|
|
507
|
-
if (!kwargs) {
|
|
508
|
-
return;
|
|
509
|
-
}
|
|
510
|
-
Object.assign(this, kwargs);
|
|
511
|
-
}
|
|
512
|
-
static fromProto(proto) {
|
|
513
|
-
let m = new ListRetailPayoutsRequest();
|
|
514
|
-
m = Object.assign(m, proto);
|
|
515
|
-
if (proto.pagingOptions) {
|
|
516
|
-
m.pagingOptions = PagedRequestOptions.fromProto(proto.pagingOptions);
|
|
517
|
-
}
|
|
518
|
-
return m;
|
|
519
|
-
}
|
|
520
|
-
toApiJson() {
|
|
521
|
-
const toReturn = {};
|
|
522
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
523
|
-
toReturn['merchantId'] = this.merchantId;
|
|
524
|
-
}
|
|
525
|
-
if (typeof this.pagingOptions !== 'undefined' && this.pagingOptions !== null) {
|
|
526
|
-
toReturn['pagingOptions'] = 'toApiJson' in this.pagingOptions ? this.pagingOptions.toApiJson() : this.pagingOptions;
|
|
527
|
-
}
|
|
528
|
-
return toReturn;
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
export class ListRetailPayoutsResponse {
|
|
532
|
-
constructor(kwargs) {
|
|
533
|
-
if (!kwargs) {
|
|
534
|
-
return;
|
|
535
|
-
}
|
|
536
|
-
Object.assign(this, kwargs);
|
|
537
|
-
}
|
|
538
|
-
static fromProto(proto) {
|
|
539
|
-
let m = new ListRetailPayoutsResponse();
|
|
540
|
-
m = Object.assign(m, proto);
|
|
541
|
-
if (proto.payouts) {
|
|
542
|
-
m.payouts = proto.payouts.map(RetailPayout.fromProto);
|
|
543
|
-
}
|
|
544
|
-
if (proto.pagingMetadata) {
|
|
545
|
-
m.pagingMetadata = PagedResponseMetadata.fromProto(proto.pagingMetadata);
|
|
546
|
-
}
|
|
547
|
-
return m;
|
|
548
|
-
}
|
|
549
|
-
toApiJson() {
|
|
550
|
-
const toReturn = {};
|
|
551
|
-
if (typeof this.payouts !== 'undefined' && this.payouts !== null) {
|
|
552
|
-
toReturn['payouts'] = 'toApiJson' in this.payouts ? this.payouts.toApiJson() : this.payouts;
|
|
553
|
-
}
|
|
554
|
-
if (typeof this.pagingMetadata !== 'undefined' && this.pagingMetadata !== null) {
|
|
555
|
-
toReturn['pagingMetadata'] = 'toApiJson' in this.pagingMetadata ? this.pagingMetadata.toApiJson() : this.pagingMetadata;
|
|
556
|
-
}
|
|
557
|
-
return toReturn;
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
export class Merchant {
|
|
561
|
-
constructor(kwargs) {
|
|
562
|
-
if (!kwargs) {
|
|
563
|
-
return;
|
|
564
|
-
}
|
|
565
|
-
Object.assign(this, kwargs);
|
|
566
|
-
}
|
|
567
|
-
static fromProto(proto) {
|
|
568
|
-
let m = new Merchant();
|
|
569
|
-
m = Object.assign(m, proto);
|
|
570
|
-
return m;
|
|
571
|
-
}
|
|
572
|
-
toApiJson() {
|
|
573
|
-
const toReturn = {};
|
|
574
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
575
|
-
toReturn['merchantId'] = this.merchantId;
|
|
576
|
-
}
|
|
577
|
-
if (typeof this.address !== 'undefined') {
|
|
578
|
-
toReturn['address'] = this.address;
|
|
579
|
-
}
|
|
580
|
-
if (typeof this.city !== 'undefined') {
|
|
581
|
-
toReturn['city'] = this.city;
|
|
582
|
-
}
|
|
583
|
-
if (typeof this.state !== 'undefined') {
|
|
584
|
-
toReturn['state'] = this.state;
|
|
585
|
-
}
|
|
586
|
-
if (typeof this.country !== 'undefined') {
|
|
587
|
-
toReturn['country'] = this.country;
|
|
588
|
-
}
|
|
589
|
-
if (typeof this.zipCode !== 'undefined') {
|
|
590
|
-
toReturn['zipCode'] = this.zipCode;
|
|
591
|
-
}
|
|
592
|
-
if (typeof this.emailAddress !== 'undefined') {
|
|
593
|
-
toReturn['emailAddress'] = this.emailAddress;
|
|
594
|
-
}
|
|
595
|
-
if (typeof this.phoneNumber !== 'undefined') {
|
|
596
|
-
toReturn['phoneNumber'] = this.phoneNumber;
|
|
597
|
-
}
|
|
598
|
-
if (typeof this.contactName !== 'undefined') {
|
|
599
|
-
toReturn['contactName'] = this.contactName;
|
|
600
|
-
}
|
|
601
|
-
if (typeof this.companyName !== 'undefined') {
|
|
602
|
-
toReturn['companyName'] = this.companyName;
|
|
603
|
-
}
|
|
604
|
-
if (typeof this.autoPostInvoices !== 'undefined') {
|
|
605
|
-
toReturn['autoPostInvoices'] = this.autoPostInvoices;
|
|
606
|
-
}
|
|
607
|
-
if (typeof this.autoChargeInvoices !== 'undefined') {
|
|
608
|
-
toReturn['autoChargeInvoices'] = this.autoChargeInvoices;
|
|
609
|
-
}
|
|
610
|
-
if (typeof this.includeInFinancialRecords !== 'undefined') {
|
|
611
|
-
toReturn['includeInFinancialRecords'] = this.includeInFinancialRecords;
|
|
612
|
-
}
|
|
613
|
-
if (typeof this.additionalEmailAddresses !== 'undefined') {
|
|
614
|
-
toReturn['additionalEmailAddresses'] = this.additionalEmailAddresses;
|
|
615
|
-
}
|
|
616
|
-
if (typeof this.hasAlternativePaymentMethod !== 'undefined') {
|
|
617
|
-
toReturn['hasAlternativePaymentMethod'] = this.hasAlternativePaymentMethod;
|
|
618
|
-
}
|
|
619
|
-
if (typeof this.stripeAccountId !== 'undefined') {
|
|
620
|
-
toReturn['stripeAccountId'] = this.stripeAccountId;
|
|
621
|
-
}
|
|
622
|
-
return toReturn;
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
export class RetailConfiguration {
|
|
626
|
-
constructor(kwargs) {
|
|
627
|
-
if (!kwargs) {
|
|
628
|
-
return;
|
|
629
|
-
}
|
|
630
|
-
Object.assign(this, kwargs);
|
|
631
|
-
}
|
|
632
|
-
static fromProto(proto) {
|
|
633
|
-
let m = new RetailConfiguration();
|
|
634
|
-
m = Object.assign(m, proto);
|
|
635
|
-
if (proto.defaultCustomerConfiguration) {
|
|
636
|
-
m.defaultCustomerConfiguration = DefaultCustomerConfiguration.fromProto(proto.defaultCustomerConfiguration);
|
|
637
|
-
}
|
|
638
|
-
if (proto.currencyConversionRate) {
|
|
639
|
-
m.currencyConversionRate = parseInt(proto.currencyConversionRate, 10);
|
|
640
|
-
}
|
|
641
|
-
return m;
|
|
642
|
-
}
|
|
643
|
-
toApiJson() {
|
|
644
|
-
const toReturn = {};
|
|
645
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
646
|
-
toReturn['merchantId'] = this.merchantId;
|
|
647
|
-
}
|
|
648
|
-
if (typeof this.retailGroupId !== 'undefined') {
|
|
649
|
-
toReturn['retailGroupId'] = this.retailGroupId;
|
|
650
|
-
}
|
|
651
|
-
if (typeof this.currencyCode !== 'undefined') {
|
|
652
|
-
toReturn['currencyCode'] = this.currencyCode;
|
|
653
|
-
}
|
|
654
|
-
if (typeof this.defaultCustomerConfiguration !== 'undefined' && this.defaultCustomerConfiguration !== null) {
|
|
655
|
-
toReturn['defaultCustomerConfiguration'] = 'toApiJson' in this.defaultCustomerConfiguration ? this.defaultCustomerConfiguration.toApiJson() : this.defaultCustomerConfiguration;
|
|
656
|
-
}
|
|
657
|
-
if (typeof this.currencyConversionRate !== 'undefined') {
|
|
658
|
-
toReturn['currencyConversionRate'] = this.currencyConversionRate;
|
|
659
|
-
}
|
|
660
|
-
return toReturn;
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
export class GetMultiRetailConfigurationsResponseRetailConfigurationsEntry {
|
|
664
|
-
constructor(kwargs) {
|
|
665
|
-
if (!kwargs) {
|
|
666
|
-
return;
|
|
667
|
-
}
|
|
668
|
-
Object.assign(this, kwargs);
|
|
669
|
-
}
|
|
670
|
-
static fromProto(proto) {
|
|
671
|
-
let m = new GetMultiRetailConfigurationsResponseRetailConfigurationsEntry();
|
|
672
|
-
m = Object.assign(m, proto);
|
|
673
|
-
if (proto.value) {
|
|
674
|
-
m.value = RetailConfiguration.fromProto(proto.value);
|
|
675
|
-
}
|
|
676
|
-
return m;
|
|
677
|
-
}
|
|
678
|
-
toApiJson() {
|
|
679
|
-
const toReturn = {};
|
|
680
|
-
if (typeof this.key !== 'undefined') {
|
|
681
|
-
toReturn['key'] = this.key;
|
|
682
|
-
}
|
|
683
|
-
if (typeof this.value !== 'undefined' && this.value !== null) {
|
|
684
|
-
toReturn['value'] = 'toApiJson' in this.value ? this.value.toApiJson() : this.value;
|
|
685
|
-
}
|
|
686
|
-
return toReturn;
|
|
687
|
-
}
|
|
688
|
-
}
|
|
689
|
-
export class SearchMerchantsRequest {
|
|
690
|
-
constructor(kwargs) {
|
|
691
|
-
if (!kwargs) {
|
|
692
|
-
return;
|
|
693
|
-
}
|
|
694
|
-
Object.assign(this, kwargs);
|
|
695
|
-
}
|
|
696
|
-
static fromProto(proto) {
|
|
697
|
-
let m = new SearchMerchantsRequest();
|
|
698
|
-
m = Object.assign(m, proto);
|
|
699
|
-
if (proto.sortBy) {
|
|
700
|
-
m.sortBy = enumStringToValue(e.SearchMerchantsRequestSortBy, proto.sortBy);
|
|
701
|
-
}
|
|
702
|
-
if (proto.sortDirection) {
|
|
703
|
-
m.sortDirection = enumStringToValue(e.SortDirection, proto.sortDirection);
|
|
704
|
-
}
|
|
705
|
-
if (proto.pagingOptions) {
|
|
706
|
-
m.pagingOptions = PagedRequestOptions.fromProto(proto.pagingOptions);
|
|
707
|
-
}
|
|
708
|
-
return m;
|
|
709
|
-
}
|
|
710
|
-
toApiJson() {
|
|
711
|
-
const toReturn = {};
|
|
712
|
-
if (typeof this.searchTerm !== 'undefined') {
|
|
713
|
-
toReturn['searchTerm'] = this.searchTerm;
|
|
714
|
-
}
|
|
715
|
-
if (typeof this.sortBy !== 'undefined') {
|
|
716
|
-
toReturn['sortBy'] = this.sortBy;
|
|
717
|
-
}
|
|
718
|
-
if (typeof this.sortDirection !== 'undefined') {
|
|
719
|
-
toReturn['sortDirection'] = this.sortDirection;
|
|
720
|
-
}
|
|
721
|
-
if (typeof this.pagingOptions !== 'undefined' && this.pagingOptions !== null) {
|
|
722
|
-
toReturn['pagingOptions'] = 'toApiJson' in this.pagingOptions ? this.pagingOptions.toApiJson() : this.pagingOptions;
|
|
723
|
-
}
|
|
724
|
-
return toReturn;
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
export class SearchMerchantsResponse {
|
|
728
|
-
constructor(kwargs) {
|
|
729
|
-
if (!kwargs) {
|
|
730
|
-
return;
|
|
731
|
-
}
|
|
732
|
-
Object.assign(this, kwargs);
|
|
733
|
-
}
|
|
734
|
-
static fromProto(proto) {
|
|
735
|
-
let m = new SearchMerchantsResponse();
|
|
736
|
-
m = Object.assign(m, proto);
|
|
737
|
-
if (proto.merchants) {
|
|
738
|
-
m.merchants = proto.merchants.map(Merchant.fromProto);
|
|
739
|
-
}
|
|
740
|
-
if (proto.pagingMetadata) {
|
|
741
|
-
m.pagingMetadata = PagedResponseMetadata.fromProto(proto.pagingMetadata);
|
|
742
|
-
}
|
|
743
|
-
return m;
|
|
744
|
-
}
|
|
745
|
-
toApiJson() {
|
|
746
|
-
const toReturn = {};
|
|
747
|
-
if (typeof this.merchants !== 'undefined' && this.merchants !== null) {
|
|
748
|
-
toReturn['merchants'] = 'toApiJson' in this.merchants ? this.merchants.toApiJson() : this.merchants;
|
|
749
|
-
}
|
|
750
|
-
if (typeof this.pagingMetadata !== 'undefined' && this.pagingMetadata !== null) {
|
|
751
|
-
toReturn['pagingMetadata'] = 'toApiJson' in this.pagingMetadata ? this.pagingMetadata.toApiJson() : this.pagingMetadata;
|
|
752
|
-
}
|
|
753
|
-
return toReturn;
|
|
754
|
-
}
|
|
755
|
-
}
|
|
756
|
-
export class SetAutoChargeInvoicesRequest {
|
|
757
|
-
constructor(kwargs) {
|
|
758
|
-
if (!kwargs) {
|
|
759
|
-
return;
|
|
760
|
-
}
|
|
761
|
-
Object.assign(this, kwargs);
|
|
762
|
-
}
|
|
763
|
-
static fromProto(proto) {
|
|
764
|
-
let m = new SetAutoChargeInvoicesRequest();
|
|
765
|
-
m = Object.assign(m, proto);
|
|
766
|
-
return m;
|
|
767
|
-
}
|
|
768
|
-
toApiJson() {
|
|
769
|
-
const toReturn = {};
|
|
770
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
771
|
-
toReturn['merchantId'] = this.merchantId;
|
|
772
|
-
}
|
|
773
|
-
if (typeof this.autoChargeInvoices !== 'undefined') {
|
|
774
|
-
toReturn['autoChargeInvoices'] = this.autoChargeInvoices;
|
|
775
|
-
}
|
|
776
|
-
return toReturn;
|
|
777
|
-
}
|
|
778
|
-
}
|
|
779
|
-
export class SetAutoPostInvoicesRequest {
|
|
780
|
-
constructor(kwargs) {
|
|
781
|
-
if (!kwargs) {
|
|
782
|
-
return;
|
|
783
|
-
}
|
|
784
|
-
Object.assign(this, kwargs);
|
|
785
|
-
}
|
|
786
|
-
static fromProto(proto) {
|
|
787
|
-
let m = new SetAutoPostInvoicesRequest();
|
|
788
|
-
m = Object.assign(m, proto);
|
|
789
|
-
return m;
|
|
790
|
-
}
|
|
791
|
-
toApiJson() {
|
|
792
|
-
const toReturn = {};
|
|
793
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
794
|
-
toReturn['merchantId'] = this.merchantId;
|
|
795
|
-
}
|
|
796
|
-
if (typeof this.shouldAutoPostInvoices !== 'undefined') {
|
|
797
|
-
toReturn['shouldAutoPostInvoices'] = this.shouldAutoPostInvoices;
|
|
798
|
-
}
|
|
799
|
-
return toReturn;
|
|
800
|
-
}
|
|
801
|
-
}
|
|
802
|
-
export class SetDefaultPaymentCardRequest {
|
|
803
|
-
constructor(kwargs) {
|
|
804
|
-
if (!kwargs) {
|
|
805
|
-
return;
|
|
806
|
-
}
|
|
807
|
-
Object.assign(this, kwargs);
|
|
808
|
-
}
|
|
809
|
-
static fromProto(proto) {
|
|
810
|
-
let m = new SetDefaultPaymentCardRequest();
|
|
811
|
-
m = Object.assign(m, proto);
|
|
812
|
-
return m;
|
|
813
|
-
}
|
|
814
|
-
toApiJson() {
|
|
815
|
-
const toReturn = {};
|
|
816
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
817
|
-
toReturn['merchantId'] = this.merchantId;
|
|
818
|
-
}
|
|
819
|
-
if (typeof this.cardId !== 'undefined') {
|
|
820
|
-
toReturn['cardId'] = this.cardId;
|
|
821
|
-
}
|
|
822
|
-
return toReturn;
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
export class SetHasAlternativePaymentMethodRequest {
|
|
826
|
-
constructor(kwargs) {
|
|
827
|
-
if (!kwargs) {
|
|
828
|
-
return;
|
|
829
|
-
}
|
|
830
|
-
Object.assign(this, kwargs);
|
|
831
|
-
}
|
|
832
|
-
static fromProto(proto) {
|
|
833
|
-
let m = new SetHasAlternativePaymentMethodRequest();
|
|
834
|
-
m = Object.assign(m, proto);
|
|
835
|
-
return m;
|
|
836
|
-
}
|
|
837
|
-
toApiJson() {
|
|
838
|
-
const toReturn = {};
|
|
839
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
840
|
-
toReturn['merchantId'] = this.merchantId;
|
|
841
|
-
}
|
|
842
|
-
if (typeof this.hasAlternativePaymentMethod !== 'undefined') {
|
|
843
|
-
toReturn['hasAlternativePaymentMethod'] = this.hasAlternativePaymentMethod;
|
|
844
|
-
}
|
|
845
|
-
return toReturn;
|
|
846
|
-
}
|
|
847
|
-
}
|
|
848
|
-
export class SetIncludeInFinancialRecordsRequest {
|
|
849
|
-
constructor(kwargs) {
|
|
850
|
-
if (!kwargs) {
|
|
851
|
-
return;
|
|
852
|
-
}
|
|
853
|
-
Object.assign(this, kwargs);
|
|
854
|
-
}
|
|
855
|
-
static fromProto(proto) {
|
|
856
|
-
let m = new SetIncludeInFinancialRecordsRequest();
|
|
857
|
-
m = Object.assign(m, proto);
|
|
858
|
-
return m;
|
|
859
|
-
}
|
|
860
|
-
toApiJson() {
|
|
861
|
-
const toReturn = {};
|
|
862
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
863
|
-
toReturn['merchantId'] = this.merchantId;
|
|
864
|
-
}
|
|
865
|
-
if (typeof this.includeInFinancialRecords !== 'undefined') {
|
|
866
|
-
toReturn['includeInFinancialRecords'] = this.includeInFinancialRecords;
|
|
867
|
-
}
|
|
868
|
-
return toReturn;
|
|
869
|
-
}
|
|
870
|
-
}
|
|
871
|
-
export class UpdateMerchantRequest {
|
|
872
|
-
constructor(kwargs) {
|
|
873
|
-
if (!kwargs) {
|
|
874
|
-
return;
|
|
875
|
-
}
|
|
876
|
-
Object.assign(this, kwargs);
|
|
877
|
-
}
|
|
878
|
-
static fromProto(proto) {
|
|
879
|
-
let m = new UpdateMerchantRequest();
|
|
880
|
-
m = Object.assign(m, proto);
|
|
881
|
-
if (proto.includeInFinancialRecords) {
|
|
882
|
-
m.includeInFinancialRecords = UpdateMerchantRequestIncludeInFinancialRecords.fromProto(proto.includeInFinancialRecords);
|
|
883
|
-
}
|
|
884
|
-
return m;
|
|
885
|
-
}
|
|
886
|
-
toApiJson() {
|
|
887
|
-
const toReturn = {};
|
|
888
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
889
|
-
toReturn['merchantId'] = this.merchantId;
|
|
890
|
-
}
|
|
891
|
-
if (typeof this.address !== 'undefined') {
|
|
892
|
-
toReturn['address'] = this.address;
|
|
893
|
-
}
|
|
894
|
-
if (typeof this.city !== 'undefined') {
|
|
895
|
-
toReturn['city'] = this.city;
|
|
896
|
-
}
|
|
897
|
-
if (typeof this.state !== 'undefined') {
|
|
898
|
-
toReturn['state'] = this.state;
|
|
899
|
-
}
|
|
900
|
-
if (typeof this.country !== 'undefined') {
|
|
901
|
-
toReturn['country'] = this.country;
|
|
902
|
-
}
|
|
903
|
-
if (typeof this.zipCode !== 'undefined') {
|
|
904
|
-
toReturn['zipCode'] = this.zipCode;
|
|
905
|
-
}
|
|
906
|
-
if (typeof this.emailAddress !== 'undefined') {
|
|
907
|
-
toReturn['emailAddress'] = this.emailAddress;
|
|
908
|
-
}
|
|
909
|
-
if (typeof this.phoneNumber !== 'undefined') {
|
|
910
|
-
toReturn['phoneNumber'] = this.phoneNumber;
|
|
911
|
-
}
|
|
912
|
-
if (typeof this.contactName !== 'undefined') {
|
|
913
|
-
toReturn['contactName'] = this.contactName;
|
|
914
|
-
}
|
|
915
|
-
if (typeof this.companyName !== 'undefined') {
|
|
916
|
-
toReturn['companyName'] = this.companyName;
|
|
917
|
-
}
|
|
918
|
-
if (typeof this.additionalEmailAddresses !== 'undefined') {
|
|
919
|
-
toReturn['additionalEmailAddresses'] = this.additionalEmailAddresses;
|
|
920
|
-
}
|
|
921
|
-
if (typeof this.includeInFinancialRecords !== 'undefined' && this.includeInFinancialRecords !== null) {
|
|
922
|
-
toReturn['includeInFinancialRecords'] = 'toApiJson' in this.includeInFinancialRecords ? this.includeInFinancialRecords.toApiJson() : this.includeInFinancialRecords;
|
|
923
|
-
}
|
|
924
|
-
if (typeof this.hasAlternativePaymentMethod !== 'undefined') {
|
|
925
|
-
toReturn['hasAlternativePaymentMethod'] = this.hasAlternativePaymentMethod;
|
|
926
|
-
}
|
|
927
|
-
return toReturn;
|
|
928
|
-
}
|
|
929
|
-
}
|
|
930
|
-
export class UpsertDefaultRetailCustomerConfigurationRequest {
|
|
931
|
-
constructor(kwargs) {
|
|
932
|
-
if (!kwargs) {
|
|
933
|
-
return;
|
|
934
|
-
}
|
|
935
|
-
Object.assign(this, kwargs);
|
|
936
|
-
}
|
|
937
|
-
static fromProto(proto) {
|
|
938
|
-
let m = new UpsertDefaultRetailCustomerConfigurationRequest();
|
|
939
|
-
m = Object.assign(m, proto);
|
|
940
|
-
if (proto.defaultCustomerConfiguration) {
|
|
941
|
-
m.defaultCustomerConfiguration = DefaultCustomerConfiguration.fromProto(proto.defaultCustomerConfiguration);
|
|
942
|
-
}
|
|
943
|
-
return m;
|
|
944
|
-
}
|
|
945
|
-
toApiJson() {
|
|
946
|
-
const toReturn = {};
|
|
947
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
948
|
-
toReturn['merchantId'] = this.merchantId;
|
|
949
|
-
}
|
|
950
|
-
if (typeof this.retailGroupId !== 'undefined') {
|
|
951
|
-
toReturn['retailGroupId'] = this.retailGroupId;
|
|
952
|
-
}
|
|
953
|
-
if (typeof this.defaultCustomerConfiguration !== 'undefined' && this.defaultCustomerConfiguration !== null) {
|
|
954
|
-
toReturn['defaultCustomerConfiguration'] = 'toApiJson' in this.defaultCustomerConfiguration ? this.defaultCustomerConfiguration.toApiJson() : this.defaultCustomerConfiguration;
|
|
955
|
-
}
|
|
956
|
-
return toReturn;
|
|
957
|
-
}
|
|
958
|
-
}
|
|
959
|
-
export class UpsertRetailConfigurationRequest {
|
|
960
|
-
constructor(kwargs) {
|
|
961
|
-
if (!kwargs) {
|
|
962
|
-
return;
|
|
963
|
-
}
|
|
964
|
-
Object.assign(this, kwargs);
|
|
965
|
-
}
|
|
966
|
-
static fromProto(proto) {
|
|
967
|
-
let m = new UpsertRetailConfigurationRequest();
|
|
968
|
-
m = Object.assign(m, proto);
|
|
969
|
-
if (proto.currencyConversionRate) {
|
|
970
|
-
m.currencyConversionRate = parseInt(proto.currencyConversionRate, 10);
|
|
971
|
-
}
|
|
972
|
-
return m;
|
|
973
|
-
}
|
|
974
|
-
toApiJson() {
|
|
975
|
-
const toReturn = {};
|
|
976
|
-
if (typeof this.merchantId !== 'undefined') {
|
|
977
|
-
toReturn['merchantId'] = this.merchantId;
|
|
978
|
-
}
|
|
979
|
-
if (typeof this.retailGroupId !== 'undefined') {
|
|
980
|
-
toReturn['retailGroupId'] = this.retailGroupId;
|
|
981
|
-
}
|
|
982
|
-
if (typeof this.currencyCode !== 'undefined') {
|
|
983
|
-
toReturn['currencyCode'] = this.currencyCode;
|
|
984
|
-
}
|
|
985
|
-
if (typeof this.currencyConversionRate !== 'undefined') {
|
|
986
|
-
toReturn['currencyConversionRate'] = this.currencyConversionRate;
|
|
987
|
-
}
|
|
988
|
-
return toReturn;
|
|
989
|
-
}
|
|
990
|
-
}
|
|
991
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyY2hhbnQuanMiLCJzb3VyY2VSb290IjoiL3dvcmtzcGFjZS9zZGtzL3R5cGVzY3JpcHQvc3JjL2JpbGxpbmdfc2RrL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9faW50ZXJuYWwvb2JqZWN0cy9tZXJjaGFudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTlCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxPQUFZLEVBQUUsS0FBYTtJQUM5RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sT0FBTyx5QkFBeUI7SUFZbEMsWUFBWSxNQUE2QztRQUNyRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVpELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7UUFDeEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUMxRCxPQUFPLENBQUMsQ0FBQztJQUNiLENB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ZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJhbGFuY2UgfSBmcm9tICcuL2JhbGFuY2UnO1xuaW1wb3J0IHsgUGFnZWRSZXF1ZXN0T3B0aW9ucywgUGFnZWRSZXNwb25zZU1ldGFkYXRhIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgUmV0YWlsUGF5b3V0IH0gZnJvbSAnLi9wYXlvdXQnO1xuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgQ2hhcmdlU2FsZXNJbnZvaWNlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ2hhcmdlU2FsZXNJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuICAgIGFtb3VudDogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ2hhcmdlU2FsZXNJbnZvaWNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENoYXJnZVNhbGVzSW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYW1vdW50KSB7bS5hbW91bnQgPSBwYXJzZUludChwcm90by5hbW91bnQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2hhcmdlU2FsZXNJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYW1vdW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhbW91bnQnXSA9IHRoaXMuYW1vdW50O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbm5lY3RTdHJpcGVBY2NvdW50UmVxdWVzdCBpbXBsZW1lbnRzIGkuQ29ubmVjdFN0cmlwZUFjY291bnRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjb3VudHJ5Q29kZTogc3RyaW5nO1xuICAgIGZhaWx1cmVVcmw6IHN0cmluZztcbiAgICBzdWNjZXNzVXJsOiBzdHJpbmc7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ29ubmVjdFN0cmlwZUFjY291bnRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ29ubmVjdFN0cmlwZUFjY291bnRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Db25uZWN0U3RyaXBlQWNjb3VudFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudHJ5Q29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY291bnRyeUNvZGUnXSA9IHRoaXMuY291bnRyeUNvZGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmFpbHVyZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZmFpbHVyZVVybCddID0gdGhpcy5mYWlsdXJlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Y2Nlc3NVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1Y2Nlc3NVcmwnXSA9IHRoaXMuc3VjY2Vzc1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29ubmVjdFN0cmlwZUFjY291bnRSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ29ubmVjdFN0cmlwZUFjY291bnRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc3RyaXBlVXJsOiBzdHJpbmc7XG4gICAgZXJyb3I6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENvbm5lY3RTdHJpcGVBY2NvdW50UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDb25uZWN0U3RyaXBlQWNjb3VudFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Db25uZWN0U3RyaXBlQWNjb3VudFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RyaXBlVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdHJpcGVVcmwnXSA9IHRoaXMuc3RyaXBlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVycm9yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlcnJvciddID0gdGhpcy5lcnJvcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVNZXJjaGFudFJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZU1lcmNoYW50UmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBjaXR5OiBzdHJpbmc7XG4gICAgc3RhdGU6IHN0cmluZztcbiAgICBjb3VudHJ5OiBzdHJpbmc7XG4gICAgemlwQ29kZTogc3RyaW5nO1xuICAgIGVtYWlsQWRkcmVzczogc3RyaW5nO1xuICAgIHBob25lTnVtYmVyOiBzdHJpbmc7XG4gICAgY29udGFjdE5hbWU6IHN0cmluZztcbiAgICBjb21wYW55TmFtZTogc3RyaW5nO1xuICAgIGFkZGl0aW9uYWxFbWFpbEFkZHJlc3Nlczogc3RyaW5nW107XG4gICAgaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkczogQ3JlYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcztcbiAgICBoYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2Q6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNZXJjaGFudFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVNZXJjaGFudFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkcykge20uaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyA9IENyZWF0ZU1lcmNoYW50UmVxdWVzdEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMuZnJvbVByb3RvKHByb3RvLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNZXJjaGFudFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkcmVzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWRkcmVzcyddID0gdGhpcy5hZGRyZXNzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NpdHknXSA9IHRoaXMuY2l0eTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdGUnXSA9IHRoaXMuc3RhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY291bnRyeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY291bnRyeSddID0gdGhpcy5jb3VudHJ5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnppcENvZGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ppcENvZGUnXSA9IHRoaXMuemlwQ29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbWFpbEFkZHJlc3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsQWRkcmVzcyddID0gdGhpcy5lbWFpbEFkZHJlc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGhvbmVOdW1iZXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bob25lTnVtYmVyJ10gPSB0aGlzLnBob25lTnVtYmVyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnRhY3ROYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb250YWN0TmFtZSddID0gdGhpcy5jb250YWN0TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wYW55TmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29tcGFueU5hbWUnXSA9IHRoaXMuY29tcGFueU5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkaXRpb25hbEVtYWlsQWRkcmVzc2VzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRpdGlvbmFsRW1haWxBZGRyZXNzZXMnXSA9IHRoaXMuYWRkaXRpb25hbEVtYWlsQWRkcmVzc2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyAhPT0gbnVsbCkge3RvUmV0dXJuWydpbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMgPyAodGhpcy5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2QnXSA9IHRoaXMuaGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24gaW1wbGVtZW50cyBpLkRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb25JbnRlcmZhY2Uge1xuICAgIGdlbmVyYXRlTWV0aG9kOiBzdHJpbmc7XG4gICAgY29sbGVjdGlvbk1ldGhvZDogc3RyaW5nO1xuICAgIGludm9pY2VEYXk6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24ge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2VEYXkpIHttLmludm9pY2VEYXkgPSBwYXJzZUludChwcm90by5pbnZvaWNlRGF5LCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb25JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5nZW5lcmF0ZU1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZ2VuZXJhdGVNZXRob2QnXSA9IHRoaXMuZ2VuZXJhdGVNZXRob2Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sbGVjdGlvbk1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29sbGVjdGlvbk1ldGhvZCddID0gdGhpcy5jb2xsZWN0aW9uTWV0aG9kO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VEYXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VEYXknXSA9IHRoaXMuaW52b2ljZURheTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNZXJjaGFudFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldE1lcmNoYW50UmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVyY2hhbnRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TWVyY2hhbnRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNZXJjaGFudFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TWVyY2hhbnRSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TWVyY2hhbnRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVyY2hhbnQ6IE1lcmNoYW50O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TWVyY2hhbnRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE1lcmNoYW50UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVyY2hhbnQpIHttLm1lcmNoYW50ID0gTWVyY2hhbnQuZnJvbVByb3RvKHByb3RvLm1lcmNoYW50KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TWVyY2hhbnRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lcmNoYW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lcmNoYW50J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lcmNoYW50ID8gKHRoaXMubWVyY2hhbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVyY2hhbnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlSZXRhaWxDb25maWd1cmF0aW9uc1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpUmV0YWlsQ29uZmlndXJhdGlvbnNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgcmV0YWlsR3JvdXBJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlSZXRhaWxDb25maWd1cmF0aW9uc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlSZXRhaWxDb25maWd1cmF0aW9uc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmV0YWlsR3JvdXBJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JldGFpbEdyb3VwSWRzJ10gPSB0aGlzLnJldGFpbEdyb3VwSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpUmV0YWlsQ29uZmlndXJhdGlvbnNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlSZXRhaWxDb25maWd1cmF0aW9uc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICByZXRhaWxDb25maWd1cmF0aW9uczoge1trZXk6IHN0cmluZ106IFJldGFpbENvbmZpZ3VyYXRpb259O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlSZXRhaWxDb25maWd1cmF0aW9uc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlSZXRhaWxDb25maWd1cmF0aW9uc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnJldGFpbENvbmZpZ3VyYXRpb25zKSB7bS5yZXRhaWxDb25maWd1cmF0aW9ucyA9IE9iamVjdC5rZXlzKHByb3RvLnJldGFpbENvbmZpZ3VyYXRpb25zKS5yZWR1Y2U8YW55Pigob2JqLCBrKSA9PiB7IG9ialtrXSA9IFJldGFpbENvbmZpZ3VyYXRpb24uZnJvbVByb3RvKHByb3RvLnJldGFpbENvbmZpZ3VyYXRpb25zW2tdKTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXRhaWxDb25maWd1cmF0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5yZXRhaWxDb25maWd1cmF0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydyZXRhaWxDb25maWd1cmF0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXRhaWxDb25maWd1cmF0aW9ucyA/ICh0aGlzLnJldGFpbENvbmZpZ3VyYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJldGFpbENvbmZpZ3VyYXRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE91dHN0YW5kaW5nQmFsYW5jZVJlcXVlc3QgaW1wbGVtZW50cyBpLkdldE91dHN0YW5kaW5nQmFsYW5jZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE91dHN0YW5kaW5nQmFsYW5jZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRPdXRzdGFuZGluZ0JhbGFuY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRPdXRzdGFuZGluZ0JhbGFuY2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE91dHN0YW5kaW5nQmFsYW5jZVJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRPdXRzdGFuZGluZ0JhbGFuY2VSZXNwb25zZUludGVyZmFjZSB7XG4gICAgb3V0c3RhbmRpbmdCYWxhbmNlOiBudW1iZXI7XG4gICAgY3VycmVuY3k6IGUuQ3VycmVuY3k7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRPdXRzdGFuZGluZ0JhbGFuY2VSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE91dHN0YW5kaW5nQmFsYW5jZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm91dHN0YW5kaW5nQmFsYW5jZSkge20ub3V0c3RhbmRpbmdCYWxhbmNlID0gcGFyc2VJbnQocHJvdG8ub3V0c3RhbmRpbmdCYWxhbmNlLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uY3VycmVuY3kpIHttLmN1cnJlbmN5ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5DdXJyZW5jeT4oZS5DdXJyZW5jeSwgcHJvdG8uY3VycmVuY3kpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRPdXRzdGFuZGluZ0JhbGFuY2VSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm91dHN0YW5kaW5nQmFsYW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3V0c3RhbmRpbmdCYWxhbmNlJ10gPSB0aGlzLm91dHN0YW5kaW5nQmFsYW5jZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJyZW5jeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VycmVuY3knXSA9IHRoaXMuY3VycmVuY3k7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UGF5b3V0U3VtbWFyeVJlcXVlc3QgaW1wbGVtZW50cyBpLkdldFBheW91dFN1bW1hcnlSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQYXlvdXRTdW1tYXJ5UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFBheW91dFN1bW1hcnlSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRQYXlvdXRTdW1tYXJ5UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRQYXlvdXRTdW1tYXJ5UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFBheW91dFN1bW1hcnlSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYmFsYW5jZXM6IEJhbGFuY2VbXTtcbiAgICBuZXh0SW5UcmFuc2l0UGF5b3V0RXhwZWN0ZWREYXRlOiBEYXRlO1xuICAgIHBheW91dEludGVydmFsOiBzdHJpbmc7XG4gICAgcGF5b3V0RGVsYXlEYXlzOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQYXlvdXRTdW1tYXJ5UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRQYXlvdXRTdW1tYXJ5UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYmFsYW5jZXMpIHttLmJhbGFuY2VzID0gcHJvdG8uYmFsYW5jZXMubWFwKEJhbGFuY2UuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5uZXh0SW5UcmFuc2l0UGF5b3V0RXhwZWN0ZWREYXRlKSB7bS5uZXh0SW5UcmFuc2l0UGF5b3V0RXhwZWN0ZWREYXRlID0gbmV3IERhdGUocHJvdG8ubmV4dEluVHJhbnNpdFBheW91dEV4cGVjdGVkRGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8ucGF5b3V0RGVsYXlEYXlzKSB7bS5wYXlvdXREZWxheURheXMgPSBwYXJzZUludChwcm90by5wYXlvdXREZWxheURheXMsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UGF5b3V0U3VtbWFyeVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYmFsYW5jZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYmFsYW5jZXMgIT09IG51bGwpIHt0b1JldHVyblsnYmFsYW5jZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYmFsYW5jZXMgPyAodGhpcy5iYWxhbmNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5iYWxhbmNlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uZXh0SW5UcmFuc2l0UGF5b3V0RXhwZWN0ZWREYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm5leHRJblRyYW5zaXRQYXlvdXRFeHBlY3RlZERhdGUgIT09IG51bGwpIHt0b1JldHVyblsnbmV4dEluVHJhbnNpdFBheW91dEV4cGVjdGVkRGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5uZXh0SW5UcmFuc2l0UGF5b3V0RXhwZWN0ZWREYXRlID8gKHRoaXMubmV4dEluVHJhbnNpdFBheW91dEV4cGVjdGVkRGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5uZXh0SW5UcmFuc2l0UGF5b3V0RXhwZWN0ZWREYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBheW91dEludGVydmFsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXlvdXRJbnRlcnZhbCddID0gdGhpcy5wYXlvdXRJbnRlcnZhbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXlvdXREZWxheURheXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BheW91dERlbGF5RGF5cyddID0gdGhpcy5wYXlvdXREZWxheURheXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UmV0YWlsQmFsYW5jZVJlcXVlc3QgaW1wbGVtZW50cyBpLkdldFJldGFpbEJhbGFuY2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRSZXRhaWxCYWxhbmNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFJldGFpbEJhbGFuY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRSZXRhaWxCYWxhbmNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRSZXRhaWxCYWxhbmNlUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFJldGFpbEJhbGFuY2VSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYmFsYW5jZXM6IEJhbGFuY2VbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFJldGFpbEJhbGFuY2VSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFJldGFpbEJhbGFuY2VSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5iYWxhbmNlcykge20uYmFsYW5jZXMgPSBwcm90by5iYWxhbmNlcy5tYXAoQmFsYW5jZS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRSZXRhaWxCYWxhbmNlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5iYWxhbmNlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5iYWxhbmNlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydiYWxhbmNlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5iYWxhbmNlcyA/ICh0aGlzLmJhbGFuY2VzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmJhbGFuY2VzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFJldGFpbFBheW91dFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldFJldGFpbFBheW91dFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBwYXlvdXRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0UmV0YWlsUGF5b3V0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFJldGFpbFBheW91dFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFJldGFpbFBheW91dFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGF5b3V0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BheW91dElkJ10gPSB0aGlzLnBheW91dElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFJldGFpbFBheW91dFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRSZXRhaWxQYXlvdXRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcGF5b3V0OiBSZXRhaWxQYXlvdXQ7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRSZXRhaWxQYXlvdXRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFJldGFpbFBheW91dFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBheW91dCkge20ucGF5b3V0ID0gUmV0YWlsUGF5b3V0LmZyb21Qcm90byhwcm90by5wYXlvdXQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRSZXRhaWxQYXlvdXRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBheW91dCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXlvdXQgIT09IG51bGwpIHt0b1JldHVyblsncGF5b3V0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBheW91dCA/ICh0aGlzLnBheW91dCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXlvdXQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyBpbXBsZW1lbnRzIGkuVXBkYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkc0ludGVyZmFjZSB7XG4gICAgaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkczogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZU1lcmNoYW50UmVxdWVzdEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVNZXJjaGFudFJlcXVlc3RJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVNZXJjaGFudFJlcXVlc3RJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyddID0gdGhpcy5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU1lcmNoYW50UmVxdWVzdEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMgaW1wbGVtZW50cyBpLkNyZWF0ZU1lcmNoYW50UmVxdWVzdEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHNJbnRlcmZhY2Uge1xuICAgIGluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHM6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNZXJjaGFudFJlcXVlc3RJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2luY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMnXSA9IHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UmV0YWlsUGF5b3V0c1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RSZXRhaWxQYXlvdXRzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UmV0YWlsUGF5b3V0c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UmV0YWlsUGF5b3V0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFnaW5nT3B0aW9ucykge20ucGFnaW5nT3B0aW9ucyA9IFBhZ2VkUmVxdWVzdE9wdGlvbnMuZnJvbVByb3RvKHByb3RvLnBhZ2luZ09wdGlvbnMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0UmV0YWlsUGF5b3V0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdPcHRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ09wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nT3B0aW9ucyA/ICh0aGlzLnBhZ2luZ09wdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nT3B0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UmV0YWlsUGF5b3V0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0UmV0YWlsUGF5b3V0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwYXlvdXRzOiBSZXRhaWxQYXlvdXRbXTtcbiAgICBwYWdpbmdNZXRhZGF0YTogUGFnZWRSZXNwb25zZU1ldGFkYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFJldGFpbFBheW91dHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RSZXRhaWxQYXlvdXRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGF5b3V0cykge20ucGF5b3V0cyA9IHByb3RvLnBheW91dHMubWFwKFJldGFpbFBheW91dC5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0UmV0YWlsUGF5b3V0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGF5b3V0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYXlvdXRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BheW91dHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGF5b3V0cyA/ICh0aGlzLnBheW91dHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGF5b3V0czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdNZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdNZXRhZGF0YSA/ICh0aGlzLnBhZ2luZ01ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ01ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lcmNoYW50IGltcGxlbWVudHMgaS5NZXJjaGFudEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBjaXR5OiBzdHJpbmc7XG4gICAgc3RhdGU6IHN0cmluZztcbiAgICBjb3VudHJ5OiBzdHJpbmc7XG4gICAgemlwQ29kZTogc3RyaW5nO1xuICAgIGVtYWlsQWRkcmVzczogc3RyaW5nO1xuICAgIHBob25lTnVtYmVyOiBzdHJpbmc7XG4gICAgY29udGFjdE5hbWU6IHN0cmluZztcbiAgICBjb21wYW55TmFtZTogc3RyaW5nO1xuICAgIGF1dG9Qb3N0SW52b2ljZXM6IGJvb2xlYW47XG4gICAgYXV0b0NoYXJnZUludm9pY2VzOiBib29sZWFuO1xuICAgIGluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHM6IGJvb2xlYW47XG4gICAgYWRkaXRpb25hbEVtYWlsQWRkcmVzc2VzOiBzdHJpbmdbXTtcbiAgICBoYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2Q6IGJvb2xlYW47XG4gICAgc3RyaXBlQWNjb3VudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNZXJjaGFudCB7XG4gICAgICAgIGxldCBtID0gbmV3IE1lcmNoYW50KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NZXJjaGFudEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRyZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRyZXNzJ10gPSB0aGlzLmFkZHJlc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2l0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2l0eSddID0gdGhpcy5jaXR5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0ZSddID0gdGhpcy5zdGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudHJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb3VudHJ5J10gPSB0aGlzLmNvdW50cnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuemlwQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnemlwQ29kZSddID0gdGhpcy56aXBDb2RlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtYWlsQWRkcmVzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1haWxBZGRyZXNzJ10gPSB0aGlzLmVtYWlsQWRkcmVzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5waG9uZU51bWJlciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGhvbmVOdW1iZXInXSA9IHRoaXMucGhvbmVOdW1iZXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGFjdE5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnRhY3ROYW1lJ10gPSB0aGlzLmNvbnRhY3ROYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBhbnlOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb21wYW55TmFtZSddID0gdGhpcy5jb21wYW55TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdXRvUG9zdEludm9pY2VzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhdXRvUG9zdEludm9pY2VzJ10gPSB0aGlzLmF1dG9Qb3N0SW52b2ljZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXV0b0NoYXJnZUludm9pY2VzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhdXRvQ2hhcmdlSW52b2ljZXMnXSA9IHRoaXMuYXV0b0NoYXJnZUludm9pY2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2luY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMnXSA9IHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRpdGlvbmFsRW1haWxBZGRyZXNzZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZGl0aW9uYWxFbWFpbEFkZHJlc3NlcyddID0gdGhpcy5hZGRpdGlvbmFsRW1haWxBZGRyZXNzZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2QnXSA9IHRoaXMuaGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0cmlwZUFjY291bnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RyaXBlQWNjb3VudElkJ10gPSB0aGlzLnN0cmlwZUFjY291bnRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXRhaWxDb25maWd1cmF0aW9uIGltcGxlbWVudHMgaS5SZXRhaWxDb25maWd1cmF0aW9uSW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgcmV0YWlsR3JvdXBJZDogc3RyaW5nO1xuICAgIGN1cnJlbmN5Q29kZTogc3RyaW5nO1xuICAgIGRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb246IERlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb247XG4gICAgY3VycmVuY3lDb252ZXJzaW9uUmF0ZTogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmV0YWlsQ29uZmlndXJhdGlvbiB7XG4gICAgICAgIGxldCBtID0gbmV3IFJldGFpbENvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbikge20uZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbiA9IERlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24uZnJvbVByb3RvKHByb3RvLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmN1cnJlbmN5Q29udmVyc2lvblJhdGUpIHttLmN1cnJlbmN5Q29udmVyc2lvblJhdGUgPSBwYXJzZUludChwcm90by5jdXJyZW5jeUNvbnZlcnNpb25SYXRlLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJldGFpbENvbmZpZ3VyYXRpb25JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmV0YWlsR3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmV0YWlsR3JvdXBJZCddID0gdGhpcy5yZXRhaWxHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbmN5Q29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VycmVuY3lDb2RlJ10gPSB0aGlzLmN1cnJlbmN5Q29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uID8gKHRoaXMuZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbmN5Q29udmVyc2lvblJhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnJlbmN5Q29udmVyc2lvblJhdGUnXSA9IHRoaXMuY3VycmVuY3lDb252ZXJzaW9uUmF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVzcG9uc2VSZXRhaWxDb25maWd1cmF0aW9uc0VudHJ5IGltcGxlbWVudHMgaS5HZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVzcG9uc2VSZXRhaWxDb25maWd1cmF0aW9uc0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogUmV0YWlsQ29uZmlndXJhdGlvbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpUmV0YWlsQ29uZmlndXJhdGlvbnNSZXNwb25zZVJldGFpbENvbmZpZ3VyYXRpb25zRW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVzcG9uc2VSZXRhaWxDb25maWd1cmF0aW9uc0VudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnZhbHVlKSB7bS52YWx1ZSA9IFJldGFpbENvbmZpZ3VyYXRpb24uZnJvbVByb3RvKHByb3RvLnZhbHVlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlSZXRhaWxDb25maWd1cmF0aW9uc1Jlc3BvbnNlUmV0YWlsQ29uZmlndXJhdGlvbnNFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd2YWx1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52YWx1ZSA/ICh0aGlzLnZhbHVlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlYXJjaE1lcmNoYW50c1JlcXVlc3QgaW1wbGVtZW50cyBpLlNlYXJjaE1lcmNoYW50c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHNlYXJjaFRlcm06IHN0cmluZztcbiAgICBzb3J0Qnk6IGUuU2VhcmNoTWVyY2hhbnRzUmVxdWVzdFNvcnRCeTtcbiAgICBzb3J0RGlyZWN0aW9uOiBlLlNvcnREaXJlY3Rpb247XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9ucztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNlYXJjaE1lcmNoYW50c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZWFyY2hNZXJjaGFudHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNvcnRCeSkge20uc29ydEJ5ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5TZWFyY2hNZXJjaGFudHNSZXF1ZXN0U29ydEJ5PihlLlNlYXJjaE1lcmNoYW50c1JlcXVlc3RTb3J0QnksIHByb3RvLnNvcnRCeSk7fVxuICAgICAgICBpZiAocHJvdG8uc29ydERpcmVjdGlvbikge20uc29ydERpcmVjdGlvbiA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuU29ydERpcmVjdGlvbj4oZS5Tb3J0RGlyZWN0aW9uLCBwcm90by5zb3J0RGlyZWN0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdPcHRpb25zKSB7bS5wYWdpbmdPcHRpb25zID0gUGFnZWRSZXF1ZXN0T3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nT3B0aW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlYXJjaE1lcmNoYW50c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWFyY2hUZXJtICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZWFyY2hUZXJtJ10gPSB0aGlzLnNlYXJjaFRlcm07fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29ydEJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb3J0QnknXSA9IHRoaXMuc29ydEJ5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvcnREaXJlY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvcnREaXJlY3Rpb24nXSA9IHRoaXMuc29ydERpcmVjdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlYXJjaE1lcmNoYW50c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5TZWFyY2hNZXJjaGFudHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRzOiBNZXJjaGFudFtdO1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZWFyY2hNZXJjaGFudHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFNlYXJjaE1lcmNoYW50c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1lcmNoYW50cykge20ubWVyY2hhbnRzID0gcHJvdG8ubWVyY2hhbnRzLm1hcChNZXJjaGFudC5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ01ldGFkYXRhKSB7bS5wYWdpbmdNZXRhZGF0YSA9IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YS5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nTWV0YWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZWFyY2hNZXJjaGFudHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXJjaGFudHMgIT09IG51bGwpIHt0b1JldHVyblsnbWVyY2hhbnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lcmNoYW50cyA/ICh0aGlzLm1lcmNoYW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXJjaGFudHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRBdXRvQ2hhcmdlSW52b2ljZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5TZXRBdXRvQ2hhcmdlSW52b2ljZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgYXV0b0NoYXJnZUludm9pY2VzOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2V0QXV0b0NoYXJnZUludm9pY2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNldEF1dG9DaGFyZ2VJbnZvaWNlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNldEF1dG9DaGFyZ2VJbnZvaWNlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXV0b0NoYXJnZUludm9pY2VzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhdXRvQ2hhcmdlSW52b2ljZXMnXSA9IHRoaXMuYXV0b0NoYXJnZUludm9pY2VzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldEF1dG9Qb3N0SW52b2ljZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5TZXRBdXRvUG9zdEludm9pY2VzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIHNob3VsZEF1dG9Qb3N0SW52b2ljZXM6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZXRBdXRvUG9zdEludm9pY2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNldEF1dG9Qb3N0SW52b2ljZXNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZXRBdXRvUG9zdEludm9pY2VzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zaG91bGRBdXRvUG9zdEludm9pY2VzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzaG91bGRBdXRvUG9zdEludm9pY2VzJ10gPSB0aGlzLnNob3VsZEF1dG9Qb3N0SW52b2ljZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0RGVmYXVsdFBheW1lbnRDYXJkUmVxdWVzdCBpbXBsZW1lbnRzIGkuU2V0RGVmYXVsdFBheW1lbnRDYXJkUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGNhcmRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2V0RGVmYXVsdFBheW1lbnRDYXJkUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNldERlZmF1bHRQYXltZW50Q2FyZFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNldERlZmF1bHRQYXltZW50Q2FyZFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FyZElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYXJkSWQnXSA9IHRoaXMuY2FyZElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldEhhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZFJlcXVlc3QgaW1wbGVtZW50cyBpLlNldEhhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBoYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2Q6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZXRIYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2V0SGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2V0SGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2QgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZCddID0gdGhpcy5oYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2Q7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0SW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkc1JlcXVlc3QgaW1wbGVtZW50cyBpLlNldEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkczogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNldEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2V0SW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNldEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2luY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMnXSA9IHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVNZXJjaGFudFJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZU1lcmNoYW50UmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBjaXR5OiBzdHJpbmc7XG4gICAgc3RhdGU6IHN0cmluZztcbiAgICBjb3VudHJ5OiBzdHJpbmc7XG4gICAgemlwQ29kZTogc3RyaW5nO1xuICAgIGVtYWlsQWRkcmVzczogc3RyaW5nO1xuICAgIHBob25lTnVtYmVyOiBzdHJpbmc7XG4gICAgY29udGFjdE5hbWU6IHN0cmluZztcbiAgICBjb21wYW55TmFtZTogc3RyaW5nO1xuICAgIGFkZGl0aW9uYWxFbWFpbEFkZHJlc3Nlczogc3RyaW5nW107XG4gICAgaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkczogVXBkYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcztcbiAgICBoYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2Q6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVNZXJjaGFudFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVNZXJjaGFudFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkcykge20uaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyA9IFVwZGF0ZU1lcmNoYW50UmVxdWVzdEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMuZnJvbVByb3RvKHByb3RvLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVNZXJjaGFudFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkcmVzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWRkcmVzcyddID0gdGhpcy5hZGRyZXNzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NpdHknXSA9IHRoaXMuY2l0eTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdGUnXSA9IHRoaXMuc3RhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY291bnRyeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY291bnRyeSddID0gdGhpcy5jb3VudHJ5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnppcENvZGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ppcENvZGUnXSA9IHRoaXMuemlwQ29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbWFpbEFkZHJlc3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsQWRkcmVzcyddID0gdGhpcy5lbWFpbEFkZHJlc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGhvbmVOdW1iZXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bob25lTnVtYmVyJ10gPSB0aGlzLnBob25lTnVtYmVyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnRhY3ROYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb250YWN0TmFtZSddID0gdGhpcy5jb250YWN0TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wYW55TmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29tcGFueU5hbWUnXSA9IHRoaXMuY29tcGFueU5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkaXRpb25hbEVtYWlsQWRkcmVzc2VzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRpdGlvbmFsRW1haWxBZGRyZXNzZXMnXSA9IHRoaXMuYWRkaXRpb25hbEVtYWlsQWRkcmVzc2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyAhPT0gbnVsbCkge3RvUmV0dXJuWydpbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMgPyAodGhpcy5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2QnXSA9IHRoaXMuaGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwc2VydERlZmF1bHRSZXRhaWxDdXN0b21lckNvbmZpZ3VyYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5VcHNlcnREZWZhdWx0UmV0YWlsQ3VzdG9tZXJDb25maWd1cmF0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIHJldGFpbEdyb3VwSWQ6IHN0cmluZztcbiAgICBkZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uOiBEZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBzZXJ0RGVmYXVsdFJldGFpbEN1c3RvbWVyQ29uZmlndXJhdGlvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcHNlcnREZWZhdWx0UmV0YWlsQ3VzdG9tZXJDb25maWd1cmF0aW9uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uKSB7bS5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uID0gRGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbi5mcm9tUHJvdG8ocHJvdG8uZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwc2VydERlZmF1bHRSZXRhaWxDdXN0b21lckNvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJldGFpbEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JldGFpbEdyb3VwSWQnXSA9IHRoaXMucmV0YWlsR3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uID8gKHRoaXMuZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwc2VydFJldGFpbENvbmZpZ3VyYXRpb25SZXF1ZXN0IGltcGxlbWVudHMgaS5VcHNlcnRSZXRhaWxDb25maWd1cmF0aW9uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIHJldGFpbEdyb3VwSWQ6IHN0cmluZztcbiAgICBjdXJyZW5jeUNvZGU6IHN0cmluZztcbiAgICBjdXJyZW5jeUNvbnZlcnNpb25SYXRlOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcHNlcnRSZXRhaWxDb25maWd1cmF0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwc2VydFJldGFpbENvbmZpZ3VyYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmN1cnJlbmN5Q29udmVyc2lvblJhdGUpIHttLmN1cnJlbmN5Q29udmVyc2lvblJhdGUgPSBwYXJzZUludChwcm90by5jdXJyZW5jeUNvbnZlcnNpb25SYXRlLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwc2VydFJldGFpbENvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJldGFpbEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JldGFpbEdyb3VwSWQnXSA9IHRoaXMucmV0YWlsR3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJyZW5jeUNvZGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnJlbmN5Q29kZSddID0gdGhpcy5jdXJyZW5jeUNvZGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVuY3lDb252ZXJzaW9uUmF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VycmVuY3lDb252ZXJzaW9uUmF0ZSddID0gdGhpcy5jdXJyZW5jeUNvbnZlcnNpb25SYXRlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19
|