ng-pli-commons 0.0.1908 → 1.0.1
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/esm2022/lib/components/backoffice.commons.component.mjs +40 -0
- package/esm2022/lib/components/common.lists.component.mjs +194 -0
- package/{esm2020 → esm2022}/lib/components/configuration-token/configuration-token-subject.service.mjs +23 -23
- package/esm2022/lib/components/configuration-token/configuration-token.component.mjs +665 -0
- package/esm2022/lib/components/configuration-token/guarantee-token/guarantee-token.component.mjs +103 -0
- package/esm2022/lib/components/configuration-token/snapshot-token/snapshot-token.component.mjs +108 -0
- package/esm2022/lib/components/configuration.commons.component.mjs +40 -0
- package/{esm2020 → esm2022}/lib/components/dashboard.commons.component.mjs +84 -84
- package/esm2022/lib/components/dynamic-filter/dynamic-filter.component.mjs +131 -0
- package/esm2022/lib/components/excel-to-json/excel-to-json.component.mjs +54 -0
- package/esm2022/lib/components/frontoffice.commons.component.mjs +86 -0
- package/esm2022/lib/components/pdf-analyzer/pdf-analyzer.component.mjs +162 -0
- package/{esm2020 → esm2022}/lib/components/pdf-config/pdf-config.component.mjs +170 -170
- package/esm2022/lib/components/pdf-generator/pdf-generator.component.mjs +223 -0
- package/esm2022/lib/components/pdf-merge-visualizer/pdf-merge-visualizer.component.mjs +307 -0
- package/esm2022/lib/components/pdf-visualizer/pdf-visualizer.component.mjs +387 -0
- package/esm2022/lib/components/progress-bar/progress-bar.component.mjs +92 -0
- package/esm2022/lib/components/segmentation-tokens/segmentation-tokens.component.mjs +199 -0
- package/esm2022/lib/components/select-ppp/select-ppp.component.mjs +199 -0
- package/esm2022/lib/components/show-hide-columns/show-hide-columns-table.component.mjs +116 -0
- package/esm2022/lib/components/token/token.component.mjs +1006 -0
- package/esm2022/lib/components/tokens-calculator/tokens-calculator.component.mjs +128 -0
- package/{esm2020 → esm2022}/lib/directives/currency-colfuturo-formatter.directive.mjs +47 -47
- package/{esm2020 → esm2022}/lib/directives/currency-decimal-colfuturo-formatter.directive.mjs +34 -34
- package/esm2022/lib/ng-pli-commons.module.mjs +387 -0
- package/{esm2020 → esm2022}/lib/ng-pli-commons.service.mjs +14 -14
- package/esm2022/lib/pipes/currency-colfuturo.pipe.mjs +35 -0
- package/{esm2020 → esm2022}/lib/pipes/currency-decimal-colfuturo.pipe.mjs +36 -36
- package/{esm2020 → esm2022}/lib/pipes/currency-print-colfuturo.pipe.mjs +33 -33
- package/esm2022/lib/pipes/thousands.pipe.mjs +60 -0
- package/{esm2020 → esm2022}/lib/services/application-fill-percentage.service.mjs +30 -30
- package/{esm2020 → esm2022}/lib/services/application-tag.service.mjs +56 -56
- package/{esm2020 → esm2022}/lib/services/application.service.mjs +247 -247
- package/esm2022/lib/services/authentication.service.mjs +133 -0
- package/{esm2020 → esm2022}/lib/services/blocked-beneficiary.service.mjs +42 -42
- package/esm2022/lib/services/budget-application.service.mjs +265 -0
- package/{esm2020 → esm2022}/lib/services/budget-simulation.service.mjs +61 -61
- package/esm2022/lib/services/budget.service.mjs +205 -0
- package/{esm2020 → esm2022}/lib/services/closure-wallet.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/services/cnf-correspondence-document-manager.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/services/committee-money.service.mjs +44 -44
- package/{esm2020 → esm2022}/lib/services/committee-pdf.service.mjs +27 -27
- package/{esm2020 → esm2022}/lib/services/committee-snapshot.service.mjs +60 -60
- package/{esm2020 → esm2022}/lib/services/common-info.service.mjs +51 -51
- package/esm2022/lib/services/common.service.mjs +291 -0
- package/esm2022/lib/services/configuration-document.service.mjs +297 -0
- package/{esm2020 → esm2022}/lib/services/configuration-minisite.service.mjs +26 -26
- package/{esm2020 → esm2022}/lib/services/configuration.service.mjs +53 -53
- package/{esm2020 → esm2022}/lib/services/correspondence-document-category.service.mjs +31 -31
- package/{esm2020 → esm2022}/lib/services/correspondence-manager.service.mjs +67 -67
- package/{esm2020 → esm2022}/lib/services/credit-score.service.mjs +48 -48
- package/{esm2020 → esm2022}/lib/services/credit-study.service.mjs +292 -292
- package/{esm2020 → esm2022}/lib/services/cube.service.mjs +27 -27
- package/{esm2020 → esm2022}/lib/services/data-form-history.service.mjs +25 -25
- package/{esm2020 → esm2022}/lib/services/data-form.service.mjs +176 -176
- package/{esm2020 → esm2022}/lib/services/data-letter-segmentation.service.mjs +64 -64
- package/{esm2020 → esm2022}/lib/services/document-analysis-auto.service.mjs +27 -27
- package/{esm2020 → esm2022}/lib/services/document-history.service.mjs +43 -43
- package/{esm2020 → esm2022}/lib/services/document-management.service.mjs +57 -57
- package/{esm2020 → esm2022}/lib/services/document-validation-attempt.service.mjs +32 -32
- package/{esm2020 → esm2022}/lib/services/document.service.mjs +131 -131
- package/esm2022/lib/services/documentary.type.service.mjs +69 -0
- package/{esm2020 → esm2022}/lib/services/email.service.mjs +30 -30
- package/{esm2020 → esm2022}/lib/services/evaluation.service.mjs +181 -181
- package/{esm2020 → esm2022}/lib/services/export-excel.service.mjs +32 -32
- package/esm2022/lib/services/file.service.mjs +153 -0
- package/{esm2020 → esm2022}/lib/services/form.service.mjs +112 -112
- package/{esm2020 → esm2022}/lib/services/gic-client-disbursement-metadata.service.mjs +31 -31
- package/{esm2020 → esm2022}/lib/services/gic-client.service.mjs +49 -49
- package/{esm2020 → esm2022}/lib/services/gic-cnf-bankvision-transaction.service.mjs +31 -31
- package/{esm2020 → esm2022}/lib/services/gic-cnf-closing-date.service.mjs +34 -34
- package/{esm2020 → esm2022}/lib/services/gic-cnf-maintenance.service.mjs +30 -30
- package/{esm2020 → esm2022}/lib/services/gic-collection.service.mjs +53 -53
- package/{esm2020 → esm2022}/lib/services/gic-disbursement.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/services/gic-extract.service.mjs +41 -41
- package/{esm2020 → esm2022}/lib/services/gic-log.service.mjs +41 -41
- package/{esm2020 → esm2022}/lib/services/gic-payment-application.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/services/gic-payment-plan-cube.service.mjs +27 -27
- package/{esm2020 → esm2022}/lib/services/gic-payment-plan.service.mjs +32 -32
- package/{esm2020 → esm2022}/lib/services/gic-trm.service.mjs +27 -27
- package/{esm2020 → esm2022}/lib/services/global.show.task.service.mjs +37 -37
- package/{esm2020 → esm2022}/lib/services/guarantee-document.service.mjs +52 -52
- package/{esm2020 → esm2022}/lib/services/guarantee-enrollment.service.mjs +37 -37
- package/esm2022/lib/services/guarantee.service.mjs +128 -0
- package/{esm2020 → esm2022}/lib/services/hash.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/services/import-data.service.mjs +27 -27
- package/{esm2020 → esm2022}/lib/services/import-excel-gic.service.mjs +45 -45
- package/{esm2020 → esm2022}/lib/services/initial-configuration-gic-parameters.service.mjs +51 -51
- package/{esm2020 → esm2022}/lib/services/initial-record.service.mjs +51 -51
- package/{esm2020 → esm2022}/lib/services/integration-ado.service.mjs +54 -54
- package/{esm2020 → esm2022}/lib/services/interaction-application-user.service.mjs +81 -81
- package/{esm2020 → esm2022}/lib/services/interest-adjustment.service.mjs +34 -34
- package/esm2022/lib/services/keys-assignation.service.mjs +127 -0
- package/{esm2020 → esm2022}/lib/services/legalization.service.mjs +150 -150
- package/{esm2020 → esm2022}/lib/services/letter-campaing.service.mjs +49 -49
- package/{esm2020 → esm2022}/lib/services/letter-task-mapping.service.mjs +40 -40
- package/{esm2020 → esm2022}/lib/services/log.service.mjs +41 -41
- package/{esm2020 → esm2022}/lib/services/maintenance.service.mjs +66 -66
- package/{esm2020 → esm2022}/lib/services/master-category.service.mjs +66 -66
- package/{esm2020 → esm2022}/lib/services/master-program.service.mjs +78 -78
- package/{esm2020 → esm2022}/lib/services/master-university.service.mjs +68 -68
- package/{esm2020 → esm2022}/lib/services/migration-plis.service.mjs +27 -27
- package/{esm2020 → esm2022}/lib/services/migration-survey-queue.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/services/page.service.mjs +38 -38
- package/{esm2020 → esm2022}/lib/services/partner-system.service.mjs +30 -30
- package/{esm2020 → esm2022}/lib/services/partner.service.mjs +34 -34
- package/{esm2020 → esm2022}/lib/services/pdf-analyzer.service.mjs +33 -33
- package/{esm2020 → esm2022}/lib/services/people-master.service.mjs +42 -42
- package/{esm2020 → esm2022}/lib/services/permission.service.mjs +29 -29
- package/{esm2020 → esm2022}/lib/services/pli-cnf-acuity-fields.service.mjs +34 -34
- package/{esm2020 → esm2022}/lib/services/pli-cnf-app-card-filter.service.mjs +40 -40
- package/{esm2020 → esm2022}/lib/services/pli-cnf-appointment-type.service.mjs +41 -41
- package/{esm2020 → esm2022}/lib/services/pli-cnf-budget-program-type.service.mjs +54 -54
- package/{esm2020 → esm2022}/lib/services/pli-cnf-budget.service.mjs +31 -31
- package/{esm2020 → esm2022}/lib/services/pli-cnf-cloning.service.mjs +27 -27
- package/{esm2020 → esm2022}/lib/services/pli-cnf-committee-pdf-config-table-config.service.mjs +47 -47
- package/{esm2020 → esm2022}/lib/services/pli-cnf-committee-pdf-gen-status.service.mjs +30 -30
- package/{esm2020 → esm2022}/lib/services/pli-cnf-committee-valpro-columns.service.mjs +42 -42
- package/{esm2020 → esm2022}/lib/services/pli-cnf-committee-visualization-mode.service.mjs +42 -42
- package/{esm2020 → esm2022}/lib/services/pli-cnf-committee.service.mjs +51 -51
- package/{esm2020 → esm2022}/lib/services/pli-cnf-config-minisite.service.mjs +90 -90
- package/{esm2020 → esm2022}/lib/services/pli-cnf-configuration-credit-study.service.mjs +41 -41
- package/{esm2020 → esm2022}/lib/services/pli-cnf-document-management.service.mjs +40 -40
- package/{esm2020 → esm2022}/lib/services/pli-cnf-dynamic-keys-assign.service.mjs +52 -52
- package/{esm2020 → esm2022}/lib/services/pli-cnf-evaluation-task-mailing.service.mjs +31 -31
- package/esm2022/lib/services/pli-cnf-evaluation-task.service.mjs +112 -0
- package/{esm2020 → esm2022}/lib/services/pli-cnf-evaluation-template.service.mjs +95 -95
- package/{esm2020 → esm2022}/lib/services/pli-cnf-form-edit.service.mjs +68 -68
- package/{esm2020 → esm2022}/lib/services/pli-cnf-form-multiaplicacion.service.mjs +46 -46
- package/{esm2020 → esm2022}/lib/services/pli-cnf-guarantee-documents-template.service.mjs +40 -40
- package/{esm2020 → esm2022}/lib/services/pli-cnf-guarantee-token.service.mjs +42 -42
- package/{esm2020 → esm2022}/lib/services/pli-cnf-header.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/services/pli-cnf-indicator.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/services/pli-cnf-information-system.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/services/pli-cnf-interaction.service.mjs +78 -78
- package/{esm2020 → esm2022}/lib/services/pli-cnf-letter-template-type.service.mjs +29 -29
- package/{esm2020 → esm2022}/lib/services/pli-cnf-letter-template.service.mjs +48 -48
- package/{esm2020 → esm2022}/lib/services/pli-cnf-look-and-feel.service.mjs +28 -28
- package/{esm2020 → esm2022}/lib/services/pli-cnf-mail.service.mjs +30 -30
- package/{esm2020 → esm2022}/lib/services/pli-cnf-menu-form.service.mjs +34 -34
- package/{esm2020 → esm2022}/lib/services/pli-cnf-migration-plis-field-budget.service.mjs +33 -33
- package/{esm2020 → esm2022}/lib/services/pli-cnf-migration-plis-field.service.mjs +47 -47
- package/{esm2020 → esm2022}/lib/services/pli-cnf-migration-status-plis.service.mjs +44 -44
- package/{esm2020 → esm2022}/lib/services/pli-cnf-page-section-form.service.mjs +66 -66
- package/{esm2020 → esm2022}/lib/services/pli-cnf-page-sub-process.service.mjs +25 -25
- package/{esm2020 → esm2022}/lib/services/pli-cnf-pdfs.service.mjs +31 -31
- package/{esm2020 → esm2022}/lib/services/pli-cnf-profile-form.service.mjs +40 -40
- package/{esm2020 → esm2022}/lib/services/pli-cnf-profile-user.service.mjs +49 -49
- package/{esm2020 → esm2022}/lib/services/pli-cnf-project-summary.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/services/pli-cnf-scenario.service.mjs +47 -47
- package/{esm2020 → esm2022}/lib/services/pli-cnf-segmentation.service.mjs +72 -72
- package/{esm2020 → esm2022}/lib/services/pli-cnf-snapshot-token.service.mjs +42 -42
- package/{esm2020 → esm2022}/lib/services/pli-cnf-status-flow-interaction.service.mjs +74 -74
- package/{esm2020 → esm2022}/lib/services/pli-cnf-status-flow.service.mjs +56 -56
- package/{esm2020 → esm2022}/lib/services/pli-cnf-support-document-category.service.mjs +47 -47
- package/{esm2020 → esm2022}/lib/services/pli-cnf-support-document.service.mjs +56 -56
- package/{esm2020 → esm2022}/lib/services/pli-cnf-survey-document.service.mjs +37 -37
- package/{esm2020 → esm2022}/lib/services/pli-cnf-survey-pdf.service.mjs +34 -34
- package/{esm2020 → esm2022}/lib/services/pli-cnf-survey.service.mjs +46 -46
- package/{esm2020 → esm2022}/lib/services/pli-cnf-task-group.service.mjs +33 -33
- package/{esm2020 → esm2022}/lib/services/pli-cnf-text-category.service.mjs +38 -38
- package/{esm2020 → esm2022}/lib/services/pli-cnf-text-option.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/services/pli-cnf-text.service.mjs +62 -62
- package/{esm2020 → esm2022}/lib/services/pli-cnf-type-text.service.mjs +45 -45
- package/{esm2020 → esm2022}/lib/services/pli-cnf-university-article.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/services/pli-cnf-user-calendar.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/services/pli-cnf-user-workspace.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/services/pli-cnf-valpro-keys.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/services/pli-cnf-workspace-segmentation.service.mjs +31 -31
- package/{esm2020 → esm2022}/lib/services/pli-message-type.service.mjs +40 -40
- package/{esm2020 → esm2022}/lib/services/pli-multiple-value-filter.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/services/pli-promocion-username.service.mjs +57 -57
- package/{esm2020 → esm2022}/lib/services/pli-seg-action-user.service.mjs +37 -37
- package/{esm2020 → esm2022}/lib/services/pli-segmentation.service.mjs +130 -130
- package/{esm2020 → esm2022}/lib/services/pli-tag-assignment.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/services/pli-tag.service.mjs +55 -55
- package/{esm2020 → esm2022}/lib/services/pli-user.service.mjs +51 -51
- package/{esm2020 → esm2022}/lib/services/plis-beneficiario.service.mjs +29 -29
- package/{esm2020 → esm2022}/lib/services/plis-estatus-change.service.mjs +30 -30
- package/esm2022/lib/services/ppp.service.mjs +360 -0
- package/{esm2020 → esm2022}/lib/services/profile.service.mjs +60 -60
- package/esm2022/lib/services/progress-bar.service.mjs +40 -0
- package/{esm2020 → esm2022}/lib/services/promotion-score.service.mjs +44 -44
- package/{esm2020 → esm2022}/lib/services/registry-identifier.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/services/return-refund.service.mjs +53 -53
- package/esm2022/lib/services/segmentation-tokens.service.mjs +43 -0
- package/{esm2020 → esm2022}/lib/services/segmentation-user-service.service.mjs +90 -90
- package/{esm2020 → esm2022}/lib/services/segmentation.service.mjs +31 -31
- package/esm2022/lib/services/send-application.service.mjs +492 -0
- package/{esm2020 → esm2022}/lib/services/sesion-form.service.mjs +31 -31
- package/{esm2020 → esm2022}/lib/services/sesion.service.mjs +48 -48
- package/{esm2020 → esm2022}/lib/services/spinner.service.mjs +16 -16
- package/{esm2020 → esm2022}/lib/services/sponsorship-letter.service.mjs +68 -68
- package/{esm2020 → esm2022}/lib/services/status.service.mjs +100 -100
- package/{esm2020 → esm2022}/lib/services/summary-budget.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/services/survey-metadata.service.mjs +28 -28
- package/{esm2020 → esm2022}/lib/services/survey-queue.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/services/survey.service.mjs +52 -52
- package/{esm2020 → esm2022}/lib/services/tasa.cambio.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/services/token-transformation.service.mjs +62 -62
- package/esm2022/lib/services/token.service.mjs +1345 -0
- package/{esm2020 → esm2022}/lib/services/university.service.mjs +50 -50
- package/esm2022/lib/services/upload-documents.service.mjs +60 -0
- package/{esm2020 → esm2022}/lib/services/user.service.mjs +28 -28
- package/{esm2020 → esm2022}/lib/services/visualization-committee.service.mjs +84 -84
- package/esm2022/lib/utils/custom-validator.mjs +95 -0
- package/esm2022/lib/utils/form-util.mjs +35 -0
- package/esm2022/lib/utils/formio-util.mjs +582 -0
- package/{esm2020 → esm2022}/lib/utils/version-commons.mjs +9 -9
- package/{esm2020 → esm2022}/ng-pli-commons.mjs +4 -4
- package/{esm2020 → esm2022}/public-api.mjs +214 -214
- package/{esm2020 → esm2022}/version.mjs +29 -29
- package/{fesm2020 → fesm2022}/ng-pli-commons.mjs +16724 -16725
- package/fesm2022/ng-pli-commons.mjs.map +1 -0
- package/{ng-pli-commons.d.ts → index.d.ts} +5 -5
- package/lib/components/backoffice.commons.component.d.ts +15 -15
- package/lib/components/common.lists.component.d.ts +61 -61
- package/lib/components/configuration-token/configuration-token-subject.service.d.ts +10 -10
- package/lib/components/configuration-token/configuration-token.component.d.ts +124 -124
- package/lib/components/configuration-token/guarantee-token/guarantee-token.component.d.ts +33 -33
- package/lib/components/configuration-token/snapshot-token/snapshot-token.component.d.ts +37 -37
- package/lib/components/configuration.commons.component.d.ts +15 -15
- package/lib/components/dashboard.commons.component.d.ts +39 -39
- package/lib/components/dynamic-filter/dynamic-filter.component.d.ts +50 -50
- package/lib/components/excel-to-json/excel-to-json.component.d.ts +12 -12
- package/lib/components/frontoffice.commons.component.d.ts +26 -26
- package/lib/components/pdf-analyzer/pdf-analyzer.component.d.ts +36 -36
- package/lib/components/pdf-config/pdf-config.component.d.ts +78 -78
- package/lib/components/pdf-generator/pdf-generator.component.d.ts +69 -69
- package/lib/components/pdf-merge-visualizer/pdf-merge-visualizer.component.d.ts +114 -114
- package/lib/components/pdf-visualizer/pdf-visualizer.component.d.ts +147 -147
- package/lib/components/progress-bar/progress-bar.component.d.ts +30 -30
- package/lib/components/segmentation-tokens/segmentation-tokens.component.d.ts +48 -48
- package/lib/components/select-ppp/select-ppp.component.d.ts +42 -42
- package/lib/components/show-hide-columns/show-hide-columns-table.component.d.ts +39 -39
- package/lib/components/token/token.component.d.ts +99 -99
- package/lib/components/tokens-calculator/tokens-calculator.component.d.ts +37 -37
- package/lib/directives/currency-colfuturo-formatter.directive.d.ts +14 -14
- package/lib/directives/currency-decimal-colfuturo-formatter.directive.d.ts +13 -13
- package/lib/ng-pli-commons.module.d.ts +47 -47
- package/lib/ng-pli-commons.service.d.ts +6 -6
- package/lib/pipes/currency-colfuturo.pipe.d.ts +12 -12
- package/lib/pipes/currency-decimal-colfuturo.pipe.d.ts +11 -11
- package/lib/pipes/currency-print-colfuturo.pipe.d.ts +11 -11
- package/lib/pipes/thousands.pipe.d.ts +9 -9
- package/lib/services/application-fill-percentage.service.d.ts +15 -15
- package/lib/services/application-tag.service.d.ts +23 -23
- package/lib/services/application.service.d.ts +107 -107
- package/lib/services/authentication.service.d.ts +45 -45
- package/lib/services/blocked-beneficiary.service.d.ts +17 -17
- package/lib/services/budget-application.service.d.ts +52 -52
- package/lib/services/budget-simulation.service.d.ts +32 -32
- package/lib/services/budget.service.d.ts +65 -65
- package/lib/services/closure-wallet.service.d.ts +16 -16
- package/lib/services/cnf-correspondence-document-manager.service.d.ts +14 -14
- package/lib/services/committee-money.service.d.ts +12 -12
- package/lib/services/committee-pdf.service.d.ts +13 -13
- package/lib/services/committee-snapshot.service.d.ts +24 -24
- package/lib/services/common-info.service.d.ts +30 -30
- package/lib/services/common.service.d.ts +103 -103
- package/lib/services/configuration-document.service.d.ts +84 -84
- package/lib/services/configuration-minisite.service.d.ts +13 -13
- package/lib/services/configuration.service.d.ts +15 -15
- package/lib/services/correspondence-document-category.service.d.ts +12 -12
- package/lib/services/correspondence-manager.service.d.ts +21 -21
- package/lib/services/credit-score.service.d.ts +14 -14
- package/lib/services/credit-study.service.d.ts +52 -52
- package/lib/services/cube.service.d.ts +14 -14
- package/lib/services/data-form-history.service.d.ts +13 -13
- package/lib/services/data-form.service.d.ts +82 -82
- package/lib/services/data-letter-segmentation.service.d.ts +20 -20
- package/lib/services/document-analysis-auto.service.d.ts +14 -14
- package/lib/services/document-history.service.d.ts +18 -18
- package/lib/services/document-management.service.d.ts +22 -22
- package/lib/services/document-validation-attempt.service.d.ts +13 -13
- package/lib/services/document.service.d.ts +51 -51
- package/lib/services/documentary.type.service.d.ts +23 -23
- package/lib/services/email.service.d.ts +15 -15
- package/lib/services/evaluation.service.d.ts +58 -58
- package/lib/services/export-excel.service.d.ts +8 -8
- package/lib/services/file.service.d.ts +63 -63
- package/lib/services/form.service.d.ts +39 -39
- package/lib/services/gic-client-disbursement-metadata.service.d.ts +12 -12
- package/lib/services/gic-client.service.d.ts +20 -20
- package/lib/services/gic-cnf-bankvision-transaction.service.d.ts +13 -13
- package/lib/services/gic-cnf-closing-date.service.d.ts +15 -15
- package/lib/services/gic-cnf-maintenance.service.d.ts +13 -13
- package/lib/services/gic-collection.service.d.ts +19 -19
- package/lib/services/gic-disbursement.service.d.ts +16 -16
- package/lib/services/gic-extract.service.d.ts +15 -15
- package/lib/services/gic-log.service.d.ts +17 -17
- package/lib/services/gic-payment-application.service.d.ts +15 -15
- package/lib/services/gic-payment-plan-cube.service.d.ts +13 -13
- package/lib/services/gic-payment-plan.service.d.ts +19 -19
- package/lib/services/gic-trm.service.d.ts +14 -14
- package/lib/services/global.show.task.service.d.ts +20 -20
- package/lib/services/guarantee-document.service.d.ts +17 -17
- package/lib/services/guarantee-enrollment.service.d.ts +14 -14
- package/lib/services/guarantee.service.d.ts +34 -34
- package/lib/services/hash.service.d.ts +18 -18
- package/lib/services/import-data.service.d.ts +14 -14
- package/lib/services/import-excel-gic.service.d.ts +22 -22
- package/lib/services/initial-configuration-gic-parameters.service.d.ts +19 -19
- package/lib/services/initial-record.service.d.ts +24 -24
- package/lib/services/integration-ado.service.d.ts +15 -15
- package/lib/services/interaction-application-user.service.d.ts +28 -28
- package/lib/services/interest-adjustment.service.d.ts +16 -16
- package/lib/services/keys-assignation.service.d.ts +33 -33
- package/lib/services/legalization.service.d.ts +46 -46
- package/lib/services/letter-campaing.service.d.ts +24 -24
- package/lib/services/letter-task-mapping.service.d.ts +22 -22
- package/lib/services/log.service.d.ts +17 -17
- package/lib/services/maintenance.service.d.ts +23 -23
- package/lib/services/master-category.service.d.ts +40 -40
- package/lib/services/master-program.service.d.ts +45 -45
- package/lib/services/master-university.service.d.ts +40 -40
- package/lib/services/migration-plis.service.d.ts +14 -14
- package/lib/services/migration-survey-queue.service.d.ts +12 -12
- package/lib/services/page.service.d.ts +18 -18
- package/lib/services/partner-system.service.d.ts +13 -13
- package/lib/services/partner.service.d.ts +17 -17
- package/lib/services/pdf-analyzer.service.d.ts +11 -11
- package/lib/services/people-master.service.d.ts +14 -14
- package/lib/services/permission.service.d.ts +14 -14
- package/lib/services/pli-cnf-acuity-fields.service.d.ts +14 -14
- package/lib/services/pli-cnf-app-card-filter.service.d.ts +20 -20
- package/lib/services/pli-cnf-appointment-type.service.d.ts +16 -16
- package/lib/services/pli-cnf-budget-program-type.service.d.ts +18 -18
- package/lib/services/pli-cnf-budget.service.d.ts +13 -13
- package/lib/services/pli-cnf-cloning.service.d.ts +12 -12
- package/lib/services/pli-cnf-committee-pdf-config-table-config.service.d.ts +19 -19
- package/lib/services/pli-cnf-committee-pdf-gen-status.service.d.ts +13 -13
- package/lib/services/pli-cnf-committee-valpro-columns.service.d.ts +15 -15
- package/lib/services/pli-cnf-committee-visualization-mode.service.d.ts +17 -17
- package/lib/services/pli-cnf-committee.service.d.ts +21 -21
- package/lib/services/pli-cnf-config-minisite.service.d.ts +26 -26
- package/lib/services/pli-cnf-configuration-credit-study.service.d.ts +16 -16
- package/lib/services/pli-cnf-document-management.service.d.ts +15 -15
- package/lib/services/pli-cnf-dynamic-keys-assign.service.d.ts +21 -21
- package/lib/services/pli-cnf-evaluation-task-mailing.service.d.ts +13 -13
- package/lib/services/pli-cnf-evaluation-task.service.d.ts +35 -35
- package/lib/services/pli-cnf-evaluation-template.service.d.ts +44 -44
- package/lib/services/pli-cnf-form-edit.service.d.ts +29 -29
- package/lib/services/pli-cnf-form-multiaplicacion.service.d.ts +21 -21
- package/lib/services/pli-cnf-guarantee-documents-template.service.d.ts +17 -17
- package/lib/services/pli-cnf-guarantee-token.service.d.ts +16 -16
- package/lib/services/pli-cnf-header.service.d.ts +18 -18
- package/lib/services/pli-cnf-indicator.service.d.ts +20 -20
- package/lib/services/pli-cnf-information-system.service.d.ts +12 -12
- package/lib/services/pli-cnf-interaction.service.d.ts +31 -31
- package/lib/services/pli-cnf-letter-template-type.service.d.ts +15 -15
- package/lib/services/pli-cnf-letter-template.service.d.ts +22 -22
- package/lib/services/pli-cnf-look-and-feel.service.d.ts +13 -13
- package/lib/services/pli-cnf-mail.service.d.ts +13 -13
- package/lib/services/pli-cnf-menu-form.service.d.ts +16 -16
- package/lib/services/pli-cnf-migration-plis-field-budget.service.d.ts +14 -14
- package/lib/services/pli-cnf-migration-plis-field.service.d.ts +17 -17
- package/lib/services/pli-cnf-migration-status-plis.service.d.ts +17 -17
- package/lib/services/pli-cnf-page-section-form.service.d.ts +24 -24
- package/lib/services/pli-cnf-page-sub-process.service.d.ts +12 -12
- package/lib/services/pli-cnf-pdfs.service.d.ts +14 -14
- package/lib/services/pli-cnf-profile-form.service.d.ts +20 -20
- package/lib/services/pli-cnf-profile-user.service.d.ts +24 -24
- package/lib/services/pli-cnf-project-summary.service.d.ts +16 -16
- package/lib/services/pli-cnf-scenario.service.d.ts +23 -23
- package/lib/services/pli-cnf-segmentation.service.d.ts +32 -32
- package/lib/services/pli-cnf-snapshot-token.service.d.ts +16 -16
- package/lib/services/pli-cnf-status-flow-interaction.service.d.ts +28 -28
- package/lib/services/pli-cnf-status-flow.service.d.ts +26 -26
- package/lib/services/pli-cnf-support-document-category.service.d.ts +17 -17
- package/lib/services/pli-cnf-support-document.service.d.ts +23 -23
- package/lib/services/pli-cnf-survey-document.service.d.ts +16 -16
- package/lib/services/pli-cnf-survey-pdf.service.d.ts +15 -15
- package/lib/services/pli-cnf-survey.service.d.ts +19 -19
- package/lib/services/pli-cnf-task-group.service.d.ts +15 -15
- package/lib/services/pli-cnf-text-category.service.d.ts +15 -15
- package/lib/services/pli-cnf-text-option.service.d.ts +15 -15
- package/lib/services/pli-cnf-text.service.d.ts +21 -21
- package/lib/services/pli-cnf-type-text.service.d.ts +16 -16
- package/lib/services/pli-cnf-university-article.service.d.ts +20 -20
- package/lib/services/pli-cnf-user-calendar.service.d.ts +16 -16
- package/lib/services/pli-cnf-user-workspace.service.d.ts +18 -18
- package/lib/services/pli-cnf-valpro-keys.service.d.ts +18 -18
- package/lib/services/pli-cnf-workspace-segmentation.service.d.ts +16 -16
- package/lib/services/pli-message-type.service.d.ts +15 -15
- package/lib/services/pli-multiple-value-filter.service.d.ts +17 -17
- package/lib/services/pli-promocion-username.service.d.ts +26 -26
- package/lib/services/pli-seg-action-user.service.d.ts +20 -20
- package/lib/services/pli-segmentation.service.d.ts +48 -48
- package/lib/services/pli-tag-assignment.service.d.ts +15 -15
- package/lib/services/pli-tag.service.d.ts +21 -21
- package/lib/services/pli-user.service.d.ts +24 -24
- package/lib/services/plis-beneficiario.service.d.ts +10 -10
- package/lib/services/plis-estatus-change.service.d.ts +13 -13
- package/lib/services/ppp.service.d.ts +77 -77
- package/lib/services/profile.service.d.ts +26 -26
- package/lib/services/progress-bar.service.d.ts +14 -14
- package/lib/services/promotion-score.service.d.ts +14 -14
- package/lib/services/registry-identifier.service.d.ts +16 -16
- package/lib/services/return-refund.service.d.ts +20 -20
- package/lib/services/segmentation-tokens.service.d.ts +22 -22
- package/lib/services/segmentation-user-service.service.d.ts +26 -26
- package/lib/services/segmentation.service.d.ts +16 -16
- package/lib/services/send-application.service.d.ts +71 -71
- package/lib/services/sesion-form.service.d.ts +16 -16
- package/lib/services/sesion.service.d.ts +27 -27
- package/lib/services/spinner.service.d.ts +6 -6
- package/lib/services/sponsorship-letter.service.d.ts +34 -34
- package/lib/services/status.service.d.ts +31 -31
- package/lib/services/summary-budget.service.d.ts +11 -11
- package/lib/services/survey-metadata.service.d.ts +13 -13
- package/lib/services/survey-queue.service.d.ts +12 -12
- package/lib/services/survey.service.d.ts +17 -17
- package/lib/services/tasa.cambio.service.d.ts +14 -14
- package/lib/services/token-transformation.service.d.ts +19 -19
- package/lib/services/token.service.d.ts +270 -270
- package/lib/services/university.service.d.ts +28 -28
- package/lib/services/upload-documents.service.d.ts +21 -21
- package/lib/services/user.service.d.ts +12 -12
- package/lib/services/visualization-committee.service.d.ts +32 -32
- package/lib/utils/custom-validator.d.ts +19 -19
- package/lib/utils/form-util.d.ts +11 -11
- package/lib/utils/formio-util.d.ts +105 -105
- package/lib/utils/version-commons.d.ts +4 -4
- package/package.json +10 -16
- package/public-api.d.ts +210 -210
- package/version.d.ts +25 -25
- package/esm2020/lib/components/backoffice.commons.component.mjs +0 -40
- package/esm2020/lib/components/common.lists.component.mjs +0 -194
- package/esm2020/lib/components/configuration-token/configuration-token.component.mjs +0 -665
- package/esm2020/lib/components/configuration-token/guarantee-token/guarantee-token.component.mjs +0 -103
- package/esm2020/lib/components/configuration-token/snapshot-token/snapshot-token.component.mjs +0 -108
- package/esm2020/lib/components/configuration.commons.component.mjs +0 -40
- package/esm2020/lib/components/dynamic-filter/dynamic-filter.component.mjs +0 -131
- package/esm2020/lib/components/excel-to-json/excel-to-json.component.mjs +0 -54
- package/esm2020/lib/components/frontoffice.commons.component.mjs +0 -86
- package/esm2020/lib/components/pdf-analyzer/pdf-analyzer.component.mjs +0 -162
- package/esm2020/lib/components/pdf-generator/pdf-generator.component.mjs +0 -223
- package/esm2020/lib/components/pdf-merge-visualizer/pdf-merge-visualizer.component.mjs +0 -307
- package/esm2020/lib/components/pdf-visualizer/pdf-visualizer.component.mjs +0 -387
- package/esm2020/lib/components/progress-bar/progress-bar.component.mjs +0 -92
- package/esm2020/lib/components/segmentation-tokens/segmentation-tokens.component.mjs +0 -199
- package/esm2020/lib/components/select-ppp/select-ppp.component.mjs +0 -199
- package/esm2020/lib/components/show-hide-columns/show-hide-columns-table.component.mjs +0 -116
- package/esm2020/lib/components/token/token.component.mjs +0 -1006
- package/esm2020/lib/components/tokens-calculator/tokens-calculator.component.mjs +0 -128
- package/esm2020/lib/ng-pli-commons.module.mjs +0 -390
- package/esm2020/lib/pipes/currency-colfuturo.pipe.mjs +0 -35
- package/esm2020/lib/pipes/thousands.pipe.mjs +0 -60
- package/esm2020/lib/services/authentication.service.mjs +0 -133
- package/esm2020/lib/services/budget-application.service.mjs +0 -265
- package/esm2020/lib/services/budget.service.mjs +0 -205
- package/esm2020/lib/services/common.service.mjs +0 -291
- package/esm2020/lib/services/configuration-document.service.mjs +0 -297
- package/esm2020/lib/services/documentary.type.service.mjs +0 -69
- package/esm2020/lib/services/file.service.mjs +0 -153
- package/esm2020/lib/services/guarantee.service.mjs +0 -128
- package/esm2020/lib/services/keys-assignation.service.mjs +0 -127
- package/esm2020/lib/services/pli-cnf-evaluation-task.service.mjs +0 -112
- package/esm2020/lib/services/ppp.service.mjs +0 -360
- package/esm2020/lib/services/progress-bar.service.mjs +0 -40
- package/esm2020/lib/services/segmentation-tokens.service.mjs +0 -43
- package/esm2020/lib/services/send-application.service.mjs +0 -492
- package/esm2020/lib/services/token.service.mjs +0 -1345
- package/esm2020/lib/services/upload-documents.service.mjs +0 -60
- package/esm2020/lib/utils/custom-validator.mjs +0 -95
- package/esm2020/lib/utils/form-util.mjs +0 -35
- package/esm2020/lib/utils/formio-util.mjs +0 -580
- package/fesm2015/ng-pli-commons.mjs +0 -17373
- package/fesm2015/ng-pli-commons.mjs.map +0 -1
- package/fesm2020/ng-pli-commons.mjs.map +0 -1
|
@@ -1,665 +0,0 @@
|
|
|
1
|
-
import { Component, Input, LOCALE_ID, Inject, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { CommonListsComponent } from '../common.lists.component';
|
|
3
|
-
import { FormGroup, FormControl, Validators } from '@angular/forms';
|
|
4
|
-
import { Token, UtilString, ETipoPresupuesto } from 'ng-pli-util';
|
|
5
|
-
import { CurrencyPipe } from '@angular/common';
|
|
6
|
-
import { TokenService } from '../../services/token.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "ngx-toastr";
|
|
9
|
-
import * as i2 from "../../services/common.service";
|
|
10
|
-
import * as i3 from "../../services/ppp.service";
|
|
11
|
-
import * as i4 from "@angular/router";
|
|
12
|
-
import * as i5 from "../../services/budget.service";
|
|
13
|
-
import * as i6 from "../../services/token.service";
|
|
14
|
-
import * as i7 from "../../services/pli-cnf-snapshot-token.service";
|
|
15
|
-
import * as i8 from "../../services/configuration-document.service";
|
|
16
|
-
import * as i9 from "./../../services/pli-cnf-evaluation-task.service";
|
|
17
|
-
import * as i10 from "../../services/pli-cnf-guarantee-token.service";
|
|
18
|
-
import * as i11 from "./configuration-token-subject.service";
|
|
19
|
-
import * as i12 from "primeng/accordion";
|
|
20
|
-
import * as i13 from "primeng/table";
|
|
21
|
-
import * as i14 from "./snapshot-token/snapshot-token.component";
|
|
22
|
-
import * as i15 from "./guarantee-token/guarantee-token.component";
|
|
23
|
-
import * as i16 from "@angular/common";
|
|
24
|
-
import * as i17 from "ng-pli-util";
|
|
25
|
-
import * as i18 from "primeng/api";
|
|
26
|
-
import * as i19 from "@angular/forms";
|
|
27
|
-
export class ConfigurationTokenComponent extends CommonListsComponent {
|
|
28
|
-
constructor(toastrService, cdRef, commonService, pppService, router, budgetService, tokenService, snapshotTokenService, configurationDocumentService, pliCnfTaskService, pliCnfGuaranteeTokenService, configurationTokenSubjectService) {
|
|
29
|
-
super(commonService, cdRef);
|
|
30
|
-
this.toastrService = toastrService;
|
|
31
|
-
this.cdRef = cdRef;
|
|
32
|
-
this.commonService = commonService;
|
|
33
|
-
this.pppService = pppService;
|
|
34
|
-
this.router = router;
|
|
35
|
-
this.budgetService = budgetService;
|
|
36
|
-
this.tokenService = tokenService;
|
|
37
|
-
this.snapshotTokenService = snapshotTokenService;
|
|
38
|
-
this.configurationDocumentService = configurationDocumentService;
|
|
39
|
-
this.pliCnfTaskService = pliCnfTaskService;
|
|
40
|
-
this.pliCnfGuaranteeTokenService = pliCnfGuaranteeTokenService;
|
|
41
|
-
this.configurationTokenSubjectService = configurationTokenSubjectService;
|
|
42
|
-
/** It contains if visible frm tokens */
|
|
43
|
-
this.showFrm = false;
|
|
44
|
-
/** It contains if visible frm tokens */
|
|
45
|
-
this.showFrmMultiple = false;
|
|
46
|
-
/** It contains if visible static tokens */
|
|
47
|
-
this.showStatic = false;
|
|
48
|
-
/** It contains if visible budget tokens */
|
|
49
|
-
this.showBudget = false;
|
|
50
|
-
/** It contains if visible calculated tokens */
|
|
51
|
-
this.showCalculated = false;
|
|
52
|
-
/** It contains if visible calculated form */
|
|
53
|
-
this.showCalculatedForm = false;
|
|
54
|
-
/** It contains if visible calculated tokens */
|
|
55
|
-
this.showSnapshot = false;
|
|
56
|
-
/** It contains if visible calculated form */
|
|
57
|
-
this.showSnapshotForm = false;
|
|
58
|
-
/** It contains if visible budget tokens */
|
|
59
|
-
this.showDocument = true;
|
|
60
|
-
/** It contains if visible budget tokens */
|
|
61
|
-
this.showTask = true;
|
|
62
|
-
/* It contains if visible guarantee tokens*/
|
|
63
|
-
this.showGuatantee = false;
|
|
64
|
-
/* It contains if visible guarantee-form tokens*/
|
|
65
|
-
this.showDocumentAutoAnalysis = false;
|
|
66
|
-
/* It contains if visible guarantee-form tokens*/
|
|
67
|
-
this.showGuatanteeForm = false;
|
|
68
|
-
/** It returns the list token */
|
|
69
|
-
this.onStaticToken = new EventEmitter();
|
|
70
|
-
/*It contains the guarantee token */
|
|
71
|
-
this.lGuaranteeTokens = [];
|
|
72
|
-
this.showAsTitle = false;
|
|
73
|
-
/** Valida si finalizo */
|
|
74
|
-
this.ready = false;
|
|
75
|
-
/** List of tokens static and dynamic form */
|
|
76
|
-
this.lStaticToken = [];
|
|
77
|
-
/** List of calculated tokens */
|
|
78
|
-
this.lCalculatedToken = [];
|
|
79
|
-
/** */
|
|
80
|
-
this.callBudgetService = false;
|
|
81
|
-
this.readyAccordeon = false;
|
|
82
|
-
this.currencyPipe = new CurrencyPipe(this.locale);
|
|
83
|
-
}
|
|
84
|
-
ngOnInit() {
|
|
85
|
-
super.ngOnInit();
|
|
86
|
-
this.ready = false;
|
|
87
|
-
this.getTokenSnapshot();
|
|
88
|
-
this.getTokenGuarantee();
|
|
89
|
-
if (this.showFrm ||
|
|
90
|
-
this.showFrmMultiple ||
|
|
91
|
-
this.showStatic ||
|
|
92
|
-
this.showBudget ||
|
|
93
|
-
this.showCalculated)
|
|
94
|
-
this.initListTokens();
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Get the info of tokens from dynamic form, static tokens and calculated.
|
|
98
|
-
*/
|
|
99
|
-
initListTokens() {
|
|
100
|
-
if (!this.promCodigo) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
this.patCodigo = this.pppService.getPatCodigoByPromCodigo(this.promCodigo);
|
|
104
|
-
this.lStaticToken = [];
|
|
105
|
-
this.lCalculatedToken = [];
|
|
106
|
-
this.initListTokenForm();
|
|
107
|
-
}
|
|
108
|
-
initListTokenForm() {
|
|
109
|
-
this.tokenService.getFormFieldsByPromCode(this.promCodigo).then((lStaticToken) => {
|
|
110
|
-
if (lStaticToken) {
|
|
111
|
-
for (let staticToken of lStaticToken) {
|
|
112
|
-
staticToken.tokenType = TokenService.TOKEN_LABEL_FORM;
|
|
113
|
-
let staticTokenValue = [];
|
|
114
|
-
for (let formField of staticToken.value) {
|
|
115
|
-
staticTokenValue.push(formField);
|
|
116
|
-
// Validation to add the country token País
|
|
117
|
-
//"http://servicioslocales.colfuturo.org:32151/data/getUniversitiesByName"
|
|
118
|
-
if (formField.type &&
|
|
119
|
-
formField.type === 'select' &&
|
|
120
|
-
formField.data &&
|
|
121
|
-
formField.data.url &&
|
|
122
|
-
formField.data.url.indexOf('getUniversitiesByName') >= 0) {
|
|
123
|
-
staticTokenValue.push({
|
|
124
|
-
type: 'select-attribute',
|
|
125
|
-
label: 'País',
|
|
126
|
-
key: formField.key + '_level1'
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
staticToken.value = staticTokenValue;
|
|
131
|
-
}
|
|
132
|
-
Array.prototype.push.apply(this.lStaticToken, lStaticToken);
|
|
133
|
-
}
|
|
134
|
-
this.initListTokenDocuments();
|
|
135
|
-
//this.initListTokenPresupuesto();
|
|
136
|
-
// this.initListTokenTasks();
|
|
137
|
-
}, (error) => {
|
|
138
|
-
console.log('Error initListTokenForm-getFormFieldsByPromCode', error);
|
|
139
|
-
this.toastrService.error('Error consultando tokens de formulario');
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
initListTokenDocuments() {
|
|
143
|
-
this.configurationDocumentService.getListByPromCodigo(this.promCodigo).subscribe((lConfigurationDocument) => {
|
|
144
|
-
if (lConfigurationDocument) {
|
|
145
|
-
this.lStaticToken[this.lStaticToken.length] = {
|
|
146
|
-
title: {
|
|
147
|
-
key: TokenService.getKeyDocument(),
|
|
148
|
-
value: TokenService.TOKEN_LABEL_DOCUMENTO
|
|
149
|
-
},
|
|
150
|
-
tokenType: TokenService.TOKEN_LABEL_DOCUMENTO,
|
|
151
|
-
value: []
|
|
152
|
-
};
|
|
153
|
-
lConfigurationDocument.forEach((cDocument) => {
|
|
154
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
155
|
-
key: cDocument.id + '_info',
|
|
156
|
-
label: cDocument.name
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
this.initListDocumentAnalysis();
|
|
161
|
-
}, (error) => this.toastrService.error('Error consultando la información de documentos'));
|
|
162
|
-
}
|
|
163
|
-
initListDocumentAnalysis() {
|
|
164
|
-
this.configurationDocumentService
|
|
165
|
-
.getByPromCodigoAndAutomaticValidation(this.promCodigo)
|
|
166
|
-
.subscribe({
|
|
167
|
-
next: (lConfigurationDocument) => {
|
|
168
|
-
if (lConfigurationDocument) {
|
|
169
|
-
this.lStaticToken[this.lStaticToken.length] = {
|
|
170
|
-
title: {
|
|
171
|
-
key: TokenService.getKeyDocumentAnalysis(),
|
|
172
|
-
value: TokenService.TOKEN_LABEL_DOCUMENTO_ANALISIS_AUTOMATICO
|
|
173
|
-
},
|
|
174
|
-
tokenType: TokenService.TOKEN_DOCUMENTO_ANALYSIS_TYPE,
|
|
175
|
-
value: []
|
|
176
|
-
};
|
|
177
|
-
lConfigurationDocument.forEach((cDocument) => {
|
|
178
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
179
|
-
key: cDocument.id + '_partial',
|
|
180
|
-
label: cDocument.name + ' - Análisis parcial'
|
|
181
|
-
});
|
|
182
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
183
|
-
key: cDocument.id + '_total',
|
|
184
|
-
label: cDocument.name + ' - Análisis total'
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
this.initListTokenPresupuesto();
|
|
189
|
-
},
|
|
190
|
-
error: (err) => {
|
|
191
|
-
this.toastrService.error('Error consultando la información de análisis automático de documentos');
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
initListTokenPresupuesto() {
|
|
196
|
-
this.budgetService.lGlobalBudgetChanged.subscribe({
|
|
197
|
-
next: (lGlobalBudget) => {
|
|
198
|
-
if (!this.callBudgetService) {
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
this.callBudgetService = false;
|
|
202
|
-
if (lGlobalBudget) {
|
|
203
|
-
let budgetType = [];
|
|
204
|
-
for (let globalBudget of lGlobalBudget) {
|
|
205
|
-
if (globalBudget.pliTipoPresupuesto.tpresCodigo === ETipoPresupuesto.PRIMARY) {
|
|
206
|
-
budgetType.push(globalBudget);
|
|
207
|
-
}
|
|
208
|
-
else if (globalBudget.pliTipoPresupuesto.tpresCodigo ===
|
|
209
|
-
ETipoPresupuesto.SECONDARY) {
|
|
210
|
-
budgetType.push(globalBudget);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
if (budgetType && Object.keys(budgetType).length > 0) {
|
|
214
|
-
this.lStaticToken[this.lStaticToken.length] = {
|
|
215
|
-
title: {
|
|
216
|
-
key: TokenService.getKeyBudget(),
|
|
217
|
-
value: TokenService.TOKEN_LABEL_BUDGET
|
|
218
|
-
},
|
|
219
|
-
tokenType: TokenService.TOKEN_LABEL_BUDGET,
|
|
220
|
-
value: []
|
|
221
|
-
};
|
|
222
|
-
for (let budget of budgetType) {
|
|
223
|
-
const tpresCodigo = budget.pliTipoPresupuesto.tpresCodigo;
|
|
224
|
-
// Add date of financing
|
|
225
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
226
|
-
key: tpresCodigo +
|
|
227
|
-
'_' +
|
|
228
|
-
TokenService.BUDGET_TOKENS_KEY_FECHA_FINANCING_START,
|
|
229
|
-
label: budget.cpreNombre + ' fecha inicio financiación'
|
|
230
|
-
});
|
|
231
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
232
|
-
key: tpresCodigo +
|
|
233
|
-
'_' +
|
|
234
|
-
TokenService.BUDGET_TOKENS_KEY_FECHA_FINANCING_END,
|
|
235
|
-
label: budget.cpreNombre + ' fecha fin financiación'
|
|
236
|
-
});
|
|
237
|
-
// Add the total amount
|
|
238
|
-
// this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
239
|
-
// key:
|
|
240
|
-
// tpresCodigo + '_' + TokenService.BUDGET_TOKENS_KEY_TOTAL_AMOUNT,
|
|
241
|
-
// label: budget.cpreNombre + ' total'
|
|
242
|
-
// });
|
|
243
|
-
// Add the Convocatoria process total amount
|
|
244
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
245
|
-
key: tpresCodigo +
|
|
246
|
-
'_' +
|
|
247
|
-
TokenService.BUDGET_TOKENS_KEY_APPLICATION_PROCESS_TOTAL_AMOUNT,
|
|
248
|
-
label: 'Convocatoria- ' + budget.cpreNombre + ' total'
|
|
249
|
-
});
|
|
250
|
-
// Add the Convocatoria process own founds
|
|
251
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
252
|
-
key: tpresCodigo +
|
|
253
|
-
'_' +
|
|
254
|
-
TokenService.BUDGET_TOKENS_KEY_APPLICATION_PROCESS_TOTAL_OWN_FOUNDS,
|
|
255
|
-
label: 'Convocatoria- ' + budget.cpreNombre + ' fondos propios'
|
|
256
|
-
});
|
|
257
|
-
// Add the Convocatoria process financing
|
|
258
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
259
|
-
key: tpresCodigo +
|
|
260
|
-
'_' +
|
|
261
|
-
TokenService.BUDGET_TOKENS_KEY_APPLICATION_PROCESS_TOTAL_FINANCING,
|
|
262
|
-
label: 'Convocatoria- ' + budget.cpreNombre + ' financiación'
|
|
263
|
-
});
|
|
264
|
-
// Add the Convocatoria process total amount
|
|
265
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
266
|
-
key: tpresCodigo +
|
|
267
|
-
'_' +
|
|
268
|
-
TokenService.BUDGET_TOKENS_KEY_LEGALIZATION_PROCESS_TOTAL_AMOUNT,
|
|
269
|
-
label: 'Legalización- ' + budget.cpreNombre + ' total'
|
|
270
|
-
});
|
|
271
|
-
// Add the Convocatoria process own founds
|
|
272
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
273
|
-
key: tpresCodigo +
|
|
274
|
-
'_' +
|
|
275
|
-
TokenService.BUDGET_TOKENS_KEY_LEGALIZATION_PROCESS_TOTAL_OWN_FOUNDS,
|
|
276
|
-
label: 'Legalización- ' + budget.cpreNombre + ' fondos propios'
|
|
277
|
-
});
|
|
278
|
-
// Add the Convocatoria process financing
|
|
279
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
280
|
-
key: tpresCodigo +
|
|
281
|
-
'_' +
|
|
282
|
-
TokenService.BUDGET_TOKENS_KEY_LEGALIZATION_PROCESS_TOTAL_FINANCING,
|
|
283
|
-
label: 'Legalización- ' + budget.cpreNombre + ' financiación'
|
|
284
|
-
});
|
|
285
|
-
// Add the Convocatoria process financing
|
|
286
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
287
|
-
key: tpresCodigo +
|
|
288
|
-
'_' +
|
|
289
|
-
TokenService.BUDGET_TOKENS_KEY_INSURANCE_AMOUNT,
|
|
290
|
-
label: 'Legalización- ' + budget.cpreNombre + ' financiación + seguro'
|
|
291
|
-
});
|
|
292
|
-
// JMP - Mantis 6674 - add token legalization or application total financing
|
|
293
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
294
|
-
key: tpresCodigo +
|
|
295
|
-
'_' +
|
|
296
|
-
TokenService.LEGALIZATION_OR_APPLICATION_TOTAL_FINANCING,
|
|
297
|
-
label: 'Financiación - ' +
|
|
298
|
-
budget.cpreNombre +
|
|
299
|
-
' legalización (+ seguro) o Convocatoria '
|
|
300
|
-
});
|
|
301
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
302
|
-
key: tpresCodigo +
|
|
303
|
-
'_' +
|
|
304
|
-
TokenService.BUDGET_TOKENS_KEY_RESUME_CATEGORY_YEAR,
|
|
305
|
-
label: budget.cpreNombre + ' resumen rubro y año'
|
|
306
|
-
});
|
|
307
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
308
|
-
key: tpresCodigo + '_' + TokenService.BUDGET_TOKENS_DURATION_STUDIES,
|
|
309
|
-
label: budget.cpreNombre + ' duración de estudios en meses'
|
|
310
|
-
});
|
|
311
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
312
|
-
key: tpresCodigo +
|
|
313
|
-
'_' +
|
|
314
|
-
TokenService.BUDGET_TOKENS_FINANCING_DURATION,
|
|
315
|
-
label: budget.cpreNombre + ' duración de financiación en meses'
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
this.initListTokenTasks();
|
|
320
|
-
}
|
|
321
|
-
},
|
|
322
|
-
error: (error) => {
|
|
323
|
-
console.error('ERROR del servicio: ', error);
|
|
324
|
-
}
|
|
325
|
-
});
|
|
326
|
-
this.budgetService.getListPresupuestoGlobal(this.promCodigo);
|
|
327
|
-
this.callBudgetService = true;
|
|
328
|
-
}
|
|
329
|
-
initListTokenTasks() {
|
|
330
|
-
this.pliCnfTaskService
|
|
331
|
-
.getByPromCodigo(this.promCodigo)
|
|
332
|
-
.subscribe((listTask) => {
|
|
333
|
-
if (listTask) {
|
|
334
|
-
let tokenTaskArr = [];
|
|
335
|
-
for (let i = 0; i < listTask.length; i++) {
|
|
336
|
-
tokenTaskArr.push(listTask[i]);
|
|
337
|
-
tokenTaskArr[i]['formulaToken'] =
|
|
338
|
-
this.camelize(this.eliminarDiacriticos(listTask[i].name)) +
|
|
339
|
-
'_' +
|
|
340
|
-
listTask[i].id;
|
|
341
|
-
}
|
|
342
|
-
this.lStaticToken[this.lStaticToken.length] = {
|
|
343
|
-
title: {
|
|
344
|
-
key: TokenService.TOKEN_LABEL_TASKL,
|
|
345
|
-
value: TokenService.TOKEN_LABEL_TASK
|
|
346
|
-
},
|
|
347
|
-
tokenType: TokenService.TOKEN_LABEL_TASK,
|
|
348
|
-
value: []
|
|
349
|
-
};
|
|
350
|
-
tokenTaskArr.forEach((cTask) => {
|
|
351
|
-
this.lStaticToken[this.lStaticToken.length - 1].value.push({
|
|
352
|
-
key: cTask.formulaToken,
|
|
353
|
-
label: cTask.name
|
|
354
|
-
});
|
|
355
|
-
});
|
|
356
|
-
this.adjustStaticTokensInfo();
|
|
357
|
-
this.getTokenCalculated();
|
|
358
|
-
}
|
|
359
|
-
});
|
|
360
|
-
}
|
|
361
|
-
adjustStaticTokensInfo() {
|
|
362
|
-
// Add the static tokens
|
|
363
|
-
this.lStaticToken[this.lStaticToken.length] = {
|
|
364
|
-
title: {
|
|
365
|
-
key: TokenService.getKeyStatic(),
|
|
366
|
-
value: TokenService.TOKEN_LABEL_STATIC
|
|
367
|
-
},
|
|
368
|
-
tokenType: TokenService.TOKEN_LABEL_STATIC,
|
|
369
|
-
value: TokenService.STATIC_TOKENS
|
|
370
|
-
};
|
|
371
|
-
this.readyAccordeon = true;
|
|
372
|
-
let colMax = 4;
|
|
373
|
-
//Organize depends of the panels
|
|
374
|
-
for (let groupToken of this.lStaticToken) {
|
|
375
|
-
let panel = [];
|
|
376
|
-
if (groupToken.tokenType == TokenService.TOKEN_LABEL_FORM) {
|
|
377
|
-
let panelName = null;
|
|
378
|
-
let lastPanelName = null;
|
|
379
|
-
for (let staticToken of groupToken.value) {
|
|
380
|
-
if (!this.showFrmMultiple &&
|
|
381
|
-
staticToken.editgrid &&
|
|
382
|
-
staticToken.editgrid === true) {
|
|
383
|
-
continue;
|
|
384
|
-
}
|
|
385
|
-
if (staticToken.panelName) {
|
|
386
|
-
panelName = staticToken.panelName;
|
|
387
|
-
}
|
|
388
|
-
if (panelName !== null && panelName != lastPanelName) {
|
|
389
|
-
panel.push({
|
|
390
|
-
title: {
|
|
391
|
-
value: panelName
|
|
392
|
-
},
|
|
393
|
-
value: []
|
|
394
|
-
});
|
|
395
|
-
}
|
|
396
|
-
else if (panelName === null && panel.length === 0) {
|
|
397
|
-
panel.push({
|
|
398
|
-
title: {
|
|
399
|
-
value: groupToken.title.value
|
|
400
|
-
},
|
|
401
|
-
value: []
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
panel[panel.length - 1].value.push(staticToken);
|
|
405
|
-
lastPanelName = panelName;
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
else {
|
|
409
|
-
panel.push({
|
|
410
|
-
title: {
|
|
411
|
-
value: groupToken.title.value
|
|
412
|
-
},
|
|
413
|
-
value: []
|
|
414
|
-
});
|
|
415
|
-
for (let staticToken of groupToken.value) {
|
|
416
|
-
panel[panel.length - 1].value.push(staticToken);
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
groupToken.value = panel;
|
|
420
|
-
}
|
|
421
|
-
for (let panel of this.lStaticToken) {
|
|
422
|
-
for (let groupToken of panel.value) {
|
|
423
|
-
let iCol = 0;
|
|
424
|
-
let iRow = 0;
|
|
425
|
-
let lStaticTokenTmp = [];
|
|
426
|
-
lStaticTokenTmp[iRow] = [];
|
|
427
|
-
for (let staticToken of groupToken.value) {
|
|
428
|
-
if (staticToken.type && staticToken.type === 'button') {
|
|
429
|
-
continue;
|
|
430
|
-
}
|
|
431
|
-
if (!lStaticTokenTmp[iRow]) {
|
|
432
|
-
lStaticTokenTmp[iRow] = [];
|
|
433
|
-
}
|
|
434
|
-
if (panel.tokenType === TokenService.TOKEN_LABEL_TASK) {
|
|
435
|
-
lStaticTokenTmp[iRow].push({
|
|
436
|
-
key: '${' + panel.title.key + '_' + staticToken.key + '}',
|
|
437
|
-
value: staticToken.label,
|
|
438
|
-
object: staticToken
|
|
439
|
-
});
|
|
440
|
-
}
|
|
441
|
-
else {
|
|
442
|
-
lStaticTokenTmp[iRow].push({
|
|
443
|
-
key: '${' + panel.title.key + '_' + staticToken.key + '}',
|
|
444
|
-
value: staticToken.label,
|
|
445
|
-
object: staticToken
|
|
446
|
-
});
|
|
447
|
-
}
|
|
448
|
-
iCol++;
|
|
449
|
-
if (iCol == colMax) {
|
|
450
|
-
iRow++;
|
|
451
|
-
iCol = 0;
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
if (iCol > 0) {
|
|
455
|
-
for (let i = iCol; i < colMax; i++) {
|
|
456
|
-
lStaticTokenTmp[iRow].push({
|
|
457
|
-
key: null,
|
|
458
|
-
value: null
|
|
459
|
-
});
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
groupToken.value = lStaticTokenTmp;
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
this.onStaticToken.emit(this.lStaticToken);
|
|
466
|
-
this.configurationTokenSubjectService.setSubjectConfigurationTokens(this.lStaticToken);
|
|
467
|
-
}
|
|
468
|
-
getTokenCalculated() {
|
|
469
|
-
this.tokenService.getListByPromCodigo(this.promCodigo).subscribe((lToken) => {
|
|
470
|
-
this.lCalculatedToken = lToken;
|
|
471
|
-
this.ready = true;
|
|
472
|
-
}, (error) => {
|
|
473
|
-
console.log('Error getTokenCalculated -getListByPromCodigo', error);
|
|
474
|
-
this.toastrService.error('Error el formulario');
|
|
475
|
-
});
|
|
476
|
-
}
|
|
477
|
-
getTokenSnapshot() {
|
|
478
|
-
if (this.showSnapshot) {
|
|
479
|
-
this.snapshotTokenService.getAllByPromCode(this.promCodigo).subscribe((tokens) => {
|
|
480
|
-
this.snapShotTokens = tokens;
|
|
481
|
-
this.ready = true;
|
|
482
|
-
});
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
getTokenGuarantee() {
|
|
486
|
-
if (this.showGuatantee) {
|
|
487
|
-
this.pliCnfGuaranteeTokenService.getAllByPromCodigo(this.promCodigo).subscribe({
|
|
488
|
-
next: (result) => {
|
|
489
|
-
this.lGuaranteeTokens = result;
|
|
490
|
-
this.ready = true;
|
|
491
|
-
},
|
|
492
|
-
error: (error) => {
|
|
493
|
-
this.toastrService.error('Error al obtener los token de garantias', 'Error');
|
|
494
|
-
}
|
|
495
|
-
});
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
eliminarDiacriticos(texto) {
|
|
499
|
-
return texto.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
500
|
-
}
|
|
501
|
-
camelize(str) {
|
|
502
|
-
return str
|
|
503
|
-
.trim()
|
|
504
|
-
.split(/\s+/)
|
|
505
|
-
.map((a) => a.trim())
|
|
506
|
-
.filter((a) => a.length > 0)
|
|
507
|
-
.map((a) => a[0].toUpperCase() + a.substring(1))
|
|
508
|
-
.join('');
|
|
509
|
-
}
|
|
510
|
-
/** It deletes a sponsor */
|
|
511
|
-
delete(token) {
|
|
512
|
-
if (confirm('¿Está seguro que desea eliminar el token ' + token.name + '?')) {
|
|
513
|
-
this.tokenService.delete(token.id).subscribe((result) => {
|
|
514
|
-
this.toastrService.success('El token fué eliminada exitosamente');
|
|
515
|
-
this.getTokenCalculated();
|
|
516
|
-
}, (error) => {
|
|
517
|
-
this.toastrService.error('Error al intentar eliminar el token');
|
|
518
|
-
});
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
/** Tet the label to calculated tokens */
|
|
522
|
-
labelCalculated(token) {
|
|
523
|
-
return '${' + TokenService.getKeyCalculated(token) + '}';
|
|
524
|
-
}
|
|
525
|
-
/** Tet the label to calculated tokens */
|
|
526
|
-
labelSnapshot(token) {
|
|
527
|
-
return '${' + TokenService.getKeySnapshot(token) + '}';
|
|
528
|
-
}
|
|
529
|
-
/* The label to guarantee tokens */
|
|
530
|
-
labelGuarantee(token) {
|
|
531
|
-
return '${' + TokenService.getKeyGuarantee(token) + '}';
|
|
532
|
-
}
|
|
533
|
-
initForm(tokenSelected) {
|
|
534
|
-
this.tokenSelected =
|
|
535
|
-
tokenSelected == null
|
|
536
|
-
? new Token()
|
|
537
|
-
: Object.assign(new Token(), JSON.parse(JSON.stringify(tokenSelected)));
|
|
538
|
-
if (!this.tokenSelected.promCodigo) {
|
|
539
|
-
this.tokenSelected.promCodigo = this.promCodigo;
|
|
540
|
-
}
|
|
541
|
-
this.controlName = new FormControl(this.tokenSelected.name, Validators.required);
|
|
542
|
-
this.controlFormula = new FormControl(this.tokenSelected.formula, Validators.required);
|
|
543
|
-
this.frmToken = new FormGroup({
|
|
544
|
-
controlName: this.controlName,
|
|
545
|
-
controlFormula: this.controlFormula
|
|
546
|
-
});
|
|
547
|
-
}
|
|
548
|
-
resolveKeyCalculatedToken() {
|
|
549
|
-
return UtilString.replaceAccentSpacesOthers(this.tokenSelected.name);
|
|
550
|
-
}
|
|
551
|
-
save() {
|
|
552
|
-
if (this.isFormValid(this.frmToken)) {
|
|
553
|
-
// Validate if the name is unique
|
|
554
|
-
if (this.lCalculatedToken && this.lCalculatedToken.length > 0) {
|
|
555
|
-
for (let calToken of this.lCalculatedToken) {
|
|
556
|
-
if (UtilString.replaceAccentSpacesOthers(calToken.name) ===
|
|
557
|
-
UtilString.replaceAccentSpacesOthers(this.tokenSelected.name) &&
|
|
558
|
-
(!this.tokenSelected.id || this.tokenSelected.id !== calToken.id)) {
|
|
559
|
-
this.toastrService.warning('El token ' + calToken.name + ' tiene la misma llave', 'Alerta!');
|
|
560
|
-
return;
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
let evalFormula = false;
|
|
565
|
-
try {
|
|
566
|
-
evalFormula = this.tokenService.validateFormula(this.lStaticToken, this.tokenSelected.name, this.tokenSelected.formula);
|
|
567
|
-
}
|
|
568
|
-
catch (error) {
|
|
569
|
-
console.error(error.error);
|
|
570
|
-
this.toastrService.error(error.message, error.title);
|
|
571
|
-
return;
|
|
572
|
-
}
|
|
573
|
-
if (!evalFormula) {
|
|
574
|
-
this.toastrService.error('No se logro evaluar la formular', 'Error!');
|
|
575
|
-
return;
|
|
576
|
-
}
|
|
577
|
-
// Save the tokenSelected
|
|
578
|
-
this.tokenService.save(this.tokenSelected).subscribe((tokenSave) => {
|
|
579
|
-
this.toastrService.success('Se ha guardado exitosamente ', 'Guardado exitoso!');
|
|
580
|
-
this.tokenSelected = null;
|
|
581
|
-
this.getTokenCalculated();
|
|
582
|
-
}, (error) => {
|
|
583
|
-
console.error(error);
|
|
584
|
-
this.toastrService.error('Error al intentar guardar el token', 'Error!');
|
|
585
|
-
});
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
cancel() {
|
|
589
|
-
this.tokenSelected = null;
|
|
590
|
-
}
|
|
591
|
-
/** It validates if type is frm */
|
|
592
|
-
isGroupFrm(type) {
|
|
593
|
-
return type === TokenService.TOKEN_LABEL_FORM;
|
|
594
|
-
}
|
|
595
|
-
/** It validates if type is static */
|
|
596
|
-
isGroupStatic(type) {
|
|
597
|
-
return type === TokenService.TOKEN_LABEL_STATIC;
|
|
598
|
-
}
|
|
599
|
-
/** It validates if type is budget */
|
|
600
|
-
isGroupBudget(type) {
|
|
601
|
-
return type === TokenService.TOKEN_LABEL_BUDGET;
|
|
602
|
-
}
|
|
603
|
-
/** It validates if type is document */
|
|
604
|
-
isGroupDocument(type) {
|
|
605
|
-
return type === TokenService.TOKEN_LABEL_DOCUMENTO;
|
|
606
|
-
}
|
|
607
|
-
isGroupDocumentAnalysis(type) {
|
|
608
|
-
return type === TokenService.TOKEN_DOCUMENTO_ANALYSIS_TYPE;
|
|
609
|
-
}
|
|
610
|
-
/** It validates if type is task */
|
|
611
|
-
isGroupTask(type) {
|
|
612
|
-
return type === TokenService.TOKEN_LABEL_TASK;
|
|
613
|
-
}
|
|
614
|
-
/** It validates visibility to all tokens mixed */
|
|
615
|
-
validateVisibility(type) {
|
|
616
|
-
return ((this.isGroupFrm(type) && this.showFrm) ||
|
|
617
|
-
(this.isGroupStatic(type) && this.showStatic) ||
|
|
618
|
-
(this.isGroupBudget(type) && this.showBudget) ||
|
|
619
|
-
(this.isGroupDocument(type) && this.showDocument) ||
|
|
620
|
-
(this.isGroupTask(type) && this.showTask) ||
|
|
621
|
-
(this.isGroupDocumentAnalysis(type) && this.showDocumentAutoAnalysis));
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
ConfigurationTokenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ConfigurationTokenComponent, deps: [{ token: i1.ToastrService }, { token: i0.ChangeDetectorRef }, { token: i2.CommonService }, { token: i3.PppService }, { token: i4.Router }, { token: i5.BudgetService }, { token: i6.TokenService }, { token: i7.PliCnfSnapshotTokenServices }, { token: i8.ConfigurationDocumentService }, { token: i9.PliCnfEvaluationTaskService }, { token: i10.PliCnfGuaranteeTokenService }, { token: i11.ConfigurationTokenSubjectService }], target: i0.ɵɵFactoryTarget.Component });
|
|
625
|
-
ConfigurationTokenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: ConfigurationTokenComponent, selector: "pli-configuration-token", inputs: { promCodigo: "promCodigo", showFrm: "showFrm", showFrmMultiple: "showFrmMultiple", showStatic: "showStatic", showBudget: "showBudget", showCalculated: "showCalculated", showCalculatedForm: "showCalculatedForm", showSnapshot: "showSnapshot", showSnapshotForm: "showSnapshotForm", showDocument: "showDocument", showTask: "showTask", showGuatantee: "showGuatantee", showDocumentAutoAnalysis: "showDocumentAutoAnalysis", showGuatanteeForm: "showGuatanteeForm", showAsTitle: "showAsTitle" }, outputs: { onStaticToken: "onStaticToken" }, usesInheritance: true, ngImport: i0, template: "<div\r\n\t*ngIf=\"readyAccordeon && ready\"\r\n\tpliAuthorityDirective\r\n\t[authorities]=\"[p('ROLE_TOKENS_CONSULTAR')]\"\r\n\t[patCodigo]=\"patCodigo\"\r\n\t[externalAllowed]=\"false\"\r\n>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<h4 class=\"no-margin-top\" *ngIf=\"!showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</h4>\r\n\t\t\t<label class=\"no-margin-top form-control-label\" *ngIf=\"showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</label>\r\n\t\t\t<p-accordion [multiple]=\"true\">\r\n\t\t\t\t<ng-container *ngFor=\"let groupToken of lStaticToken\">\r\n\t\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t\t*ngIf=\"validateVisibility(groupToken.tokenType)\"\r\n\t\t\t\t\t\theader=\"{{ groupToken.title.value }}\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div *ngFor=\"let panel of groupToken.value\">\r\n\t\t\t\t\t\t\t<h4 *ngIf=\"groupToken.value && groupToken.value.length > 1\">\r\n\t\t\t\t\t\t\t\t{{ panel.title.value }}\r\n\t\t\t\t\t\t\t</h4>\r\n\t\t\t\t\t\t\t<hr\r\n\t\t\t\t\t\t\t\t*ngIf=\"groupToken.value && groupToken.value.length > 1\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin: 5px 0\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<div *ngFor=\"let staticToken of panel.value\" class=\"ui-g\">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[0] && staticToken[0].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[0].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[0].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[0].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[0].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[1] && staticToken[1].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[1].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[1].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[1].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[1].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[2] && staticToken[2].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[2].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[2].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[2].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[2].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[3] && staticToken[3].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[3].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[3].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[3].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[3].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</p-accordionTab>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t*ngIf=\"\r\n\t\t\t\t\t\tlCalculatedToken && showCalculatedForm === false && showCalculated === true\r\n\t\t\t\t\t\"\r\n\t\t\t\t\theader=\"Tokens calculados\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<div *ngFor=\"let token of lCalculatedToken\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"snapShotTokens && showSnapshot\" header=\"Tokens snapshot\">\r\n\t\t\t\t\t<div *ngFor=\"let token of snapShotTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelSnapshot(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelSnapshot(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"lGuaranteeTokens && showGuatantee\" header=\"Tokens Garantias\">\r\n\t\t\t\t\t<div *ngFor=\"let token of lGuaranteeTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelGuarantee(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelGuarantee(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t</p-accordion>\r\n\t\t</div>\r\n\t\t<div\r\n\t\t\tclass=\"col-md-12\"\r\n\t\t\t*ngIf=\"lCalculatedToken && showCalculatedForm === true && showCalculated === true\"\r\n\t\t>\r\n\t\t\t<span style=\"width: 1px; height: 10px\"> </span>\r\n\t\t\t<h4 class=\"no-margin-top\">Tokens calculados</h4>\r\n\t\t\t<p-table [value]=\"lCalculatedToken\" [responsive]=\"true\">\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<tr class=\"text-align-center\">\r\n\t\t\t\t\t\t<th class=\"text-align-center\" width=\"40%\">Nombre</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Formula</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Creado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Modificado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Acciones</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"body\" let-token>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t{{ token.name }}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td class=\"cut-line\">{{ token.formula }}</td>\r\n\t\t\t\t\t\t<td>{{ token.createdAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>{{ token.modifiedAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<div class=\"btn-group\" role=\"group\">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"initForm(token)\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tEditar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default dropdown-toggle\"\r\n\t\t\t\t\t\t\t\t\tdata-toggle=\"dropdown\"\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\t\t\t\t\t\taria-expanded=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<span class=\"caret\"></span>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<ul class=\"dropdown-menu\">\r\n\t\t\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"delete(token)\"\r\n\t\t\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_ELIMINAR')]\"\r\n\t\t\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Eliminar</a\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-table>\r\n\t\t\t<div class=\"text-align-right\" style=\"padding: 0.75rem 1.25rem\">\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclass=\"btn btn-primary\"\r\n\t\t\t\t\t(click)=\"initForm(null)\"\r\n\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t\tAgregar nuevo\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<form [formGroup]=\"frmToken\" (ngSubmit)=\"save()\" *ngIf=\"tokenSelected\">\r\n\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"name\" class=\"form-control-label\">Nombre</label>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"input\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Nombre\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlName\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.name\"\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t<br /><br />\r\n\t\t\t\t\t\t\t\t\t\t<label class=\"form-control-label\">Llave:</label\r\n\t\t\t\t\t\t\t\t\t\t> <span style=\"font-weight: bold\">{{\r\n\t\t\t\t\t\t\t\t\t\t\tresolveKeyCalculatedToken()\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlName, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>Nombre es requerido</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"formula\" class=\"form-control-label\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Formula</label\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- <input type=\"input\" class=\"form-control\" name=\"formula\" id=\"formula\" placeholder=\"F\u00F3rmula\"\r\n formControlName=\"formula\" [(ngModel)]=\"tokenSelected.formula\" /> -->\r\n\t\t\t\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t\t\t\tcols=\"50\"\r\n\t\t\t\t\t\t\t\t\t\t\trows=\"4\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlFormula\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.formula\"\r\n\t\t\t\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlFormula, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>F\u00F3rmula es requerida</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"card-footer text-align-right\">\r\n\t\t\t\t\t\t\t\t<button type=\"button\" (click)=\"cancel()\" class=\"btn btn-link\">\r\n\t\t\t\t\t\t\t\t\tCancelar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-success\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tGuardar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</form>\r\n\t\t\t</div>\r\n\t\t\t<pli-snapshot-token\r\n\t\t\t\t[promCodigo]=\"promCodigo\"\r\n\t\t\t\t*ngIf=\"showSnapshotForm\"\r\n\t\t\t></pli-snapshot-token>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12\">\r\n\t\t\t<pli-guarantee-token [promCodigo]=\"promCodigo\" *ngIf=\"showGuatanteeForm\">\r\n\t\t\t</pli-guarantee-token>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [""], components: [{ type: i12.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { type: i12.AccordionTab, selector: "p-accordionTab", inputs: ["header", "disabled", "cache", "transitionOptions", "selected"], outputs: ["selectedChange"] }, { type: i13.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i14.SnapshotTokenComponent, selector: "pli-snapshot-token", inputs: ["promCodigo"] }, { type: i15.GuaranteeTokenComponent, selector: "pli-guarantee-token", inputs: ["promCodigo"] }], directives: [{ type: i16.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i17.AuthorityDirectiveDirective, selector: "[pliAuthorityDirective]", inputs: ["authorities", "patCodigo", "externalAllowed"] }, { type: i16.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i18.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i19.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i19.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i19.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i19.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i19.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i19.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "lowercase": i16.LowerCasePipe, "date": i16.DatePipe } });
|
|
626
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ConfigurationTokenComponent, decorators: [{
|
|
627
|
-
type: Component,
|
|
628
|
-
args: [{ selector: 'pli-configuration-token', template: "<div\r\n\t*ngIf=\"readyAccordeon && ready\"\r\n\tpliAuthorityDirective\r\n\t[authorities]=\"[p('ROLE_TOKENS_CONSULTAR')]\"\r\n\t[patCodigo]=\"patCodigo\"\r\n\t[externalAllowed]=\"false\"\r\n>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<h4 class=\"no-margin-top\" *ngIf=\"!showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</h4>\r\n\t\t\t<label class=\"no-margin-top form-control-label\" *ngIf=\"showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</label>\r\n\t\t\t<p-accordion [multiple]=\"true\">\r\n\t\t\t\t<ng-container *ngFor=\"let groupToken of lStaticToken\">\r\n\t\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t\t*ngIf=\"validateVisibility(groupToken.tokenType)\"\r\n\t\t\t\t\t\theader=\"{{ groupToken.title.value }}\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div *ngFor=\"let panel of groupToken.value\">\r\n\t\t\t\t\t\t\t<h4 *ngIf=\"groupToken.value && groupToken.value.length > 1\">\r\n\t\t\t\t\t\t\t\t{{ panel.title.value }}\r\n\t\t\t\t\t\t\t</h4>\r\n\t\t\t\t\t\t\t<hr\r\n\t\t\t\t\t\t\t\t*ngIf=\"groupToken.value && groupToken.value.length > 1\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin: 5px 0\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<div *ngFor=\"let staticToken of panel.value\" class=\"ui-g\">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[0] && staticToken[0].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[0].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[0].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[0].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[0].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[1] && staticToken[1].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[1].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[1].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[1].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[1].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[2] && staticToken[2].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[2].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[2].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[2].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[2].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[3] && staticToken[3].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[3].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[3].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[3].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[3].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</p-accordionTab>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t*ngIf=\"\r\n\t\t\t\t\t\tlCalculatedToken && showCalculatedForm === false && showCalculated === true\r\n\t\t\t\t\t\"\r\n\t\t\t\t\theader=\"Tokens calculados\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<div *ngFor=\"let token of lCalculatedToken\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"snapShotTokens && showSnapshot\" header=\"Tokens snapshot\">\r\n\t\t\t\t\t<div *ngFor=\"let token of snapShotTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelSnapshot(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelSnapshot(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"lGuaranteeTokens && showGuatantee\" header=\"Tokens Garantias\">\r\n\t\t\t\t\t<div *ngFor=\"let token of lGuaranteeTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelGuarantee(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelGuarantee(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t</p-accordion>\r\n\t\t</div>\r\n\t\t<div\r\n\t\t\tclass=\"col-md-12\"\r\n\t\t\t*ngIf=\"lCalculatedToken && showCalculatedForm === true && showCalculated === true\"\r\n\t\t>\r\n\t\t\t<span style=\"width: 1px; height: 10px\"> </span>\r\n\t\t\t<h4 class=\"no-margin-top\">Tokens calculados</h4>\r\n\t\t\t<p-table [value]=\"lCalculatedToken\" [responsive]=\"true\">\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<tr class=\"text-align-center\">\r\n\t\t\t\t\t\t<th class=\"text-align-center\" width=\"40%\">Nombre</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Formula</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Creado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Modificado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Acciones</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"body\" let-token>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t{{ token.name }}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td class=\"cut-line\">{{ token.formula }}</td>\r\n\t\t\t\t\t\t<td>{{ token.createdAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>{{ token.modifiedAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<div class=\"btn-group\" role=\"group\">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"initForm(token)\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tEditar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default dropdown-toggle\"\r\n\t\t\t\t\t\t\t\t\tdata-toggle=\"dropdown\"\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\t\t\t\t\t\taria-expanded=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<span class=\"caret\"></span>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<ul class=\"dropdown-menu\">\r\n\t\t\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"delete(token)\"\r\n\t\t\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_ELIMINAR')]\"\r\n\t\t\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Eliminar</a\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-table>\r\n\t\t\t<div class=\"text-align-right\" style=\"padding: 0.75rem 1.25rem\">\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclass=\"btn btn-primary\"\r\n\t\t\t\t\t(click)=\"initForm(null)\"\r\n\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t\tAgregar nuevo\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<form [formGroup]=\"frmToken\" (ngSubmit)=\"save()\" *ngIf=\"tokenSelected\">\r\n\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"name\" class=\"form-control-label\">Nombre</label>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"input\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Nombre\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlName\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.name\"\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t<br /><br />\r\n\t\t\t\t\t\t\t\t\t\t<label class=\"form-control-label\">Llave:</label\r\n\t\t\t\t\t\t\t\t\t\t> <span style=\"font-weight: bold\">{{\r\n\t\t\t\t\t\t\t\t\t\t\tresolveKeyCalculatedToken()\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlName, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>Nombre es requerido</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"formula\" class=\"form-control-label\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Formula</label\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- <input type=\"input\" class=\"form-control\" name=\"formula\" id=\"formula\" placeholder=\"F\u00F3rmula\"\r\n formControlName=\"formula\" [(ngModel)]=\"tokenSelected.formula\" /> -->\r\n\t\t\t\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t\t\t\tcols=\"50\"\r\n\t\t\t\t\t\t\t\t\t\t\trows=\"4\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlFormula\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.formula\"\r\n\t\t\t\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlFormula, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>F\u00F3rmula es requerida</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"card-footer text-align-right\">\r\n\t\t\t\t\t\t\t\t<button type=\"button\" (click)=\"cancel()\" class=\"btn btn-link\">\r\n\t\t\t\t\t\t\t\t\tCancelar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-success\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tGuardar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</form>\r\n\t\t\t</div>\r\n\t\t\t<pli-snapshot-token\r\n\t\t\t\t[promCodigo]=\"promCodigo\"\r\n\t\t\t\t*ngIf=\"showSnapshotForm\"\r\n\t\t\t></pli-snapshot-token>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12\">\r\n\t\t\t<pli-guarantee-token [promCodigo]=\"promCodigo\" *ngIf=\"showGuatanteeForm\">\r\n\t\t\t</pli-guarantee-token>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [""] }]
|
|
629
|
-
}], ctorParameters: function () { return [{ type: i1.ToastrService }, { type: i0.ChangeDetectorRef }, { type: i2.CommonService }, { type: i3.PppService }, { type: i4.Router }, { type: i5.BudgetService }, { type: i6.TokenService }, { type: i7.PliCnfSnapshotTokenServices }, { type: i8.ConfigurationDocumentService }, { type: i9.PliCnfEvaluationTaskService }, { type: i10.PliCnfGuaranteeTokenService }, { type: i11.ConfigurationTokenSubjectService }]; }, propDecorators: { promCodigo: [{
|
|
630
|
-
type: Input
|
|
631
|
-
}], showFrm: [{
|
|
632
|
-
type: Input
|
|
633
|
-
}], showFrmMultiple: [{
|
|
634
|
-
type: Input
|
|
635
|
-
}], showStatic: [{
|
|
636
|
-
type: Input
|
|
637
|
-
}], showBudget: [{
|
|
638
|
-
type: Input
|
|
639
|
-
}], showCalculated: [{
|
|
640
|
-
type: Input
|
|
641
|
-
}], showCalculatedForm: [{
|
|
642
|
-
type: Input
|
|
643
|
-
}], showSnapshot: [{
|
|
644
|
-
type: Input
|
|
645
|
-
}], showSnapshotForm: [{
|
|
646
|
-
type: Input
|
|
647
|
-
}], showDocument: [{
|
|
648
|
-
type: Input
|
|
649
|
-
}], showTask: [{
|
|
650
|
-
type: Input
|
|
651
|
-
}], showGuatantee: [{
|
|
652
|
-
type: Input
|
|
653
|
-
}], showDocumentAutoAnalysis: [{
|
|
654
|
-
type: Input
|
|
655
|
-
}], showGuatanteeForm: [{
|
|
656
|
-
type: Input
|
|
657
|
-
}], onStaticToken: [{
|
|
658
|
-
type: Output
|
|
659
|
-
}], showAsTitle: [{
|
|
660
|
-
type: Input
|
|
661
|
-
}], locale: [{
|
|
662
|
-
type: Inject,
|
|
663
|
-
args: [LOCALE_ID]
|
|
664
|
-
}] } });
|
|
665
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10b2tlbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wbGktY29tbW9ucy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbi10b2tlbi9jb25maWd1cmF0aW9uLXRva2VuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9uLXRva2VuL2NvbmZpZ3VyYXRpb24tdG9rZW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNOLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFFTixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFDTixLQUFLLEVBRUwsVUFBVSxFQUNWLGdCQUFnQixFQUtoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXNUQsTUFBTSxPQUFPLDJCQUE0QixTQUFRLG9CQUFvQjtJQTJEcEUsWUFDUyxhQUE0QixFQUMxQixLQUF3QixFQUN4QixhQUE0QixFQUM5QixVQUFzQixFQUN0QixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsb0JBQWlELEVBQ2pELDRCQUEwRCxFQUMxRCxpQkFBOEMsRUFDOUMsMkJBQXdELEVBQ3hELGdDQUFrRTtRQUUx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LENBQUM7WUFDN0MsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDN0MsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDakQsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDekMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQ3JFLENBQUM7SUFDSCxDQUFDOzt3SEF0ckJXLDJCQUEyQjs0R0FBM0IsMkJBQTJCLG1uQkN4Q3hDLHU2YUFvVUE7MkZENVJhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDQyx5QkFBeUI7K2RBTTFCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFRRSxXQUFXO3NCQUFuQixLQUFLO2dCQW1Cb0IsTUFBTTtzQkFBL0IsTUFBTTt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxpQ25mRXZhbHVhdGlvblRhc2tTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wbGktY25mLWV2YWx1YXRpb24tdGFzay5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0T25Jbml0LFxyXG5cdElucHV0LFxyXG5cdExPQ0FMRV9JRCxcclxuXHRJbmplY3QsXHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0T3V0cHV0LFxyXG5cdEV2ZW50RW1pdHRlclxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25MaXN0c0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi5saXN0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG5cdFRva2VuLFxyXG5cdFBsaUNuZlByZXN1cHVlc3RvR2xvYmFsLFxyXG5cdFV0aWxTdHJpbmcsXHJcblx0RVRpcG9QcmVzdXB1ZXN0byxcclxuXHRQbGlDbmZTbmFwc2hvdFRva2VuLFxyXG5cdENvbmZpZ3VyYXRpb25Eb2N1bWVudCxcclxuXHRQbGlDbmZFdmFsdWF0aW9uVGFzayxcclxuXHRQbGlDbmZHdWFyYW50ZWVUb2tlblxyXG59IGZyb20gJ25nLXBsaS11dGlsJztcclxuaW1wb3J0IHsgQ3VycmVuY3lQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHBwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCdWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnVkZ2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2tlblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b2tlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGxpQ25mU25hcHNob3RUb2tlblNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGxpLWNuZi1zbmFwc2hvdC10b2tlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkRvY3VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24tZG9jdW1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFBsaUNuZkd1YXJhbnRlZVRva2VuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BsaS1jbmYtZ3VhcmFudGVlLXRva2VuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uVG9rZW5TdWJqZWN0U2VydmljZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi10b2tlbi1zdWJqZWN0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdwbGktY29uZmlndXJhdGlvbi10b2tlbicsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb24tdG9rZW4uY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2NvbmZpZ3VyYXRpb24tdG9rZW4uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uVG9rZW5Db21wb25lbnQgZXh0ZW5kcyBDb21tb25MaXN0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0LyoqIGl0IGNvbnRhaW5zIHRoZSBwcm9tIGNvZGlnbyAqL1xyXG5cdEBJbnB1dCgpIHByb21Db2RpZ286IG51bWJlcjtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBmcm0gdG9rZW5zICovXHJcblx0QElucHV0KCkgc2hvd0ZybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGZybSB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93RnJtTXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBzdGF0aWMgdG9rZW5zICovXHJcblx0QElucHV0KCkgc2hvd1N0YXRpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGJ1ZGdldCB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93QnVkZ2V0OiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgY2FsY3VsYXRlZCB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93Q2FsY3VsYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGNhbGN1bGF0ZWQgZm9ybSAqL1xyXG5cdEBJbnB1dCgpIHNob3dDYWxjdWxhdGVkRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGNhbGN1bGF0ZWQgdG9rZW5zICovXHJcblx0QElucHV0KCkgc2hvd1NuYXBzaG90OiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgY2FsY3VsYXRlZCBmb3JtICovXHJcblx0QElucHV0KCkgc2hvd1NuYXBzaG90Rm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGJ1ZGdldCB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93RG9jdW1lbnQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGJ1ZGdldCB0b2tlbnMgKi9cclxuXHRASW5wdXQoKSBzaG93VGFzazogYm9vbGVhbiA9IHRydWU7XHJcblx0LyogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBndWFyYW50ZWUgdG9rZW5zKi9cclxuXHRASW5wdXQoKSBzaG93R3VhdGFudGVlOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBndWFyYW50ZWUtZm9ybSB0b2tlbnMqL1xyXG5cdEBJbnB1dCgpIHNob3dEb2N1bWVudEF1dG9BbmFseXNpczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgZ3VhcmFudGVlLWZvcm0gdG9rZW5zKi9cclxuXHRASW5wdXQoKSBzaG93R3VhdGFudGVlRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCByZXR1cm5zIHRoZSBsaXN0IHRva2VuICovXHJcblx0QE91dHB1dCgpIG9uU3RhdGljVG9rZW4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHQvKiogaXQgY29udGFpbnMgdGhlIHBhdCBjb2RpZ28gKi9cclxuXHRwYXRDb2RpZ286IG51bWJlcjtcclxuXHQvKiogaXQgY29udGFpbnMgdGhlIHNuYXBTaG90IHRva2VucyAqL1xyXG5cdHNuYXBTaG90VG9rZW5zOiBQbGlDbmZTbmFwc2hvdFRva2VuW107XHJcblx0LypJdCBjb250YWlucyB0aGUgZ3VhcmFudGVlIHRva2VuICovXHJcblx0bEd1YXJhbnRlZVRva2VuczogUGxpQ25mR3VhcmFudGVlVG9rZW5bXSA9IFtdO1xyXG5cclxuXHRASW5wdXQoKSBzaG93QXNUaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKiogVmFsaWRhIHNpIGZpbmFsaXpvICAqL1xyXG5cdHJlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIExpc3Qgb2YgdG9rZW5zIHN0YXRpYyBhbmQgZHluYW1pYyBmb3JtICovXHJcblx0bFN0YXRpY1Rva2VuOiBhbnkgPSBbXTtcclxuXHQvKiogTGlzdCBvZiBjYWxjdWxhdGVkIHRva2VucyAqL1xyXG5cdGxDYWxjdWxhdGVkVG9rZW46IGFueSA9IFtdO1xyXG5cdC8qKiBJdCBjb250YWlucyB0aGUgZm9ybSBncm91cCBvZiBUb2tlbiAqL1xyXG5cdGZybVRva2VuOiBGb3JtR3JvdXA7XHJcblx0Y29udHJvbE5hbWU6IEZvcm1Db250cm9sO1xyXG5cdGNvbnRyb2xGb3JtdWxhOiBGb3JtQ29udHJvbDtcclxuXHJcblx0LyoqIE9iamVjdCBUb2tlbiBuZXcgb3Igc2VsZWN0ZWQgdG8gZWRpdCAqL1xyXG5cdHRva2VuU2VsZWN0ZWQ6IFRva2VuO1xyXG5cdC8qKiAqL1xyXG5cdGNhbGxCdWRnZXRTZXJ2aWNlOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqICovXHJcblx0cHJpdmF0ZSBjdXJyZW5jeVBpcGU6IEN1cnJlbmN5UGlwZTtcclxuXHRASW5qZWN0KExPQ0FMRV9JRCkgcHVibGljIGxvY2FsZTogc3RyaW5nO1xyXG5cdHJlYWR5QWNjb3JkZW9uOiBib29sZWFuID0gZmFsc2U7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXHJcblx0XHRwcm90ZWN0ZWQgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0cHJvdGVjdGVkIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHBwcFNlcnZpY2U6IFBwcFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG5cdFx0cHJpdmF0ZSBidWRnZXRTZXJ2aWNlOiBCdWRnZXRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcclxuXHRcdHByaXZhdGUgc25hcHNob3RUb2tlblNlcnZpY2U6IFBsaUNuZlNuYXBzaG90VG9rZW5TZXJ2aWNlcyxcclxuXHRcdHByaXZhdGUgY29uZmlndXJhdGlvbkRvY3VtZW50U2VydmljZTogQ29uZmlndXJhdGlvbkRvY3VtZW50U2VydmljZSxcclxuXHRcdHByaXZhdGUgcGxpQ25mVGFza1NlcnZpY2U6IFBsaUNuZkV2YWx1YXRpb25UYXNrU2VydmljZSxcclxuXHRcdHByaXZhdGUgcGxpQ25mR3VhcmFudGVlVG9rZW5TZXJ2aWNlOiBQbGlDbmZHdWFyYW50ZWVUb2tlblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbmZpZ3VyYXRpb25Ub2tlblN1YmplY3RTZXJ2aWNlOiBDb25maWd1cmF0aW9uVG9rZW5TdWJqZWN0U2VydmljZVxyXG5cdCkge1xyXG5cdFx0c3VwZXIoY29tbW9uU2VydmljZSwgY2RSZWYpO1xyXG5cdFx0dGhpcy5jdXJyZW5jeVBpcGUgPSBuZXcgQ3VycmVuY3lQaXBlKHRoaXMubG9jYWxlKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0c3VwZXIubmdPbkluaXQoKTtcclxuXHRcdHRoaXMucmVhZHkgPSBmYWxzZTtcclxuXHRcdHRoaXMuZ2V0VG9rZW5TbmFwc2hvdCgpO1xyXG5cdFx0dGhpcy5nZXRUb2tlbkd1YXJhbnRlZSgpO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnNob3dGcm0gfHxcclxuXHRcdFx0dGhpcy5zaG93RnJtTXVsdGlwbGUgfHxcclxuXHRcdFx0dGhpcy5zaG93U3RhdGljIHx8XHJcblx0XHRcdHRoaXMuc2hvd0J1ZGdldCB8fFxyXG5cdFx0XHR0aGlzLnNob3dDYWxjdWxhdGVkXHJcblx0XHQpXHJcblx0XHRcdHRoaXMuaW5pdExpc3RUb2tlbnMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0aGUgaW5mbyBvZiB0b2tlbnMgZnJvbSBkeW5hbWljIGZvcm0sIHN0YXRpYyB0b2tlbnMgYW5kIGNhbGN1bGF0ZWQuXHJcblx0ICovXHJcblx0aW5pdExpc3RUb2tlbnMoKSB7XHJcblx0XHRpZiAoIXRoaXMucHJvbUNvZGlnbykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnBhdENvZGlnbyA9IHRoaXMucHBwU2VydmljZS5nZXRQYXRDb2RpZ29CeVByb21Db2RpZ28odGhpcy5wcm9tQ29kaWdvKTtcclxuXHRcdHRoaXMubFN0YXRpY1Rva2VuID0gW107XHJcblx0XHR0aGlzLmxDYWxjdWxhdGVkVG9rZW4gPSBbXTtcclxuXHRcdHRoaXMuaW5pdExpc3RUb2tlbkZvcm0oKTtcclxuXHR9XHJcblxyXG5cdGluaXRMaXN0VG9rZW5Gb3JtKCkge1xyXG5cdFx0dGhpcy50b2tlblNlcnZpY2UuZ2V0Rm9ybUZpZWxkc0J5UHJvbUNvZGUodGhpcy5wcm9tQ29kaWdvKS50aGVuKFxyXG5cdFx0XHQobFN0YXRpY1Rva2VuOiBhbnlbXSkgPT4ge1xyXG5cdFx0XHRcdGlmIChsU3RhdGljVG9rZW4pIHtcclxuXHRcdFx0XHRcdGZvciAobGV0IHN0YXRpY1Rva2VuIG9mIGxTdGF0aWNUb2tlbikge1xyXG5cdFx0XHRcdFx0XHRzdGF0aWNUb2tlbi50b2tlblR5cGUgPSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRk9STTtcclxuXHRcdFx0XHRcdFx0bGV0IHN0YXRpY1Rva2VuVmFsdWUgPSBbXTtcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUZpZWxkIG9mIHN0YXRpY1Rva2VuLnZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5WYWx1ZS5wdXNoKGZvcm1GaWVsZCk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gVmFsaWRhdGlvbiB0byBhZGQgdGhlIGNvdW50cnkgdG9rZW4gUGHDrXNcclxuXHRcdFx0XHRcdFx0XHQvL1wiaHR0cDovL3NlcnZpY2lvc2xvY2FsZXMuY29sZnV0dXJvLm9yZzozMjE1MS9kYXRhL2dldFVuaXZlcnNpdGllc0J5TmFtZVwiXHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUZpZWxkLnR5cGUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1GaWVsZC50eXBlID09PSAnc2VsZWN0JyAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUZpZWxkLmRhdGEgJiZcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1GaWVsZC5kYXRhLnVybCAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUZpZWxkLmRhdGEudXJsLmluZGV4T2YoJ2dldFVuaXZlcnNpdGllc0J5TmFtZScpID49IDBcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuVmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdzZWxlY3QtYXR0cmlidXRlJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6ICdQYcOtcycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGtleTogZm9ybUZpZWxkLmtleSArICdfbGV2ZWwxJ1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuLnZhbHVlID0gc3RhdGljVG9rZW5WYWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMubFN0YXRpY1Rva2VuLCBsU3RhdGljVG9rZW4pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmluaXRMaXN0VG9rZW5Eb2N1bWVudHMoKTtcclxuXHRcdFx0XHQvL3RoaXMuaW5pdExpc3RUb2tlblByZXN1cHVlc3RvKCk7XHJcblx0XHRcdFx0Ly8gdGhpcy5pbml0TGlzdFRva2VuVGFza3MoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ0Vycm9yIGluaXRMaXN0VG9rZW5Gb3JtLWdldEZvcm1GaWVsZHNCeVByb21Db2RlJywgZXJyb3IpO1xyXG5cdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgY29uc3VsdGFuZG8gdG9rZW5zIGRlIGZvcm11bGFyaW8nKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGluaXRMaXN0VG9rZW5Eb2N1bWVudHMoKSB7XHJcblx0XHR0aGlzLmNvbmZpZ3VyYXRpb25Eb2N1bWVudFNlcnZpY2UuZ2V0TGlzdEJ5UHJvbUNvZGlnbyh0aGlzLnByb21Db2RpZ28pLnN1YnNjcmliZShcclxuXHRcdFx0KGxDb25maWd1cmF0aW9uRG9jdW1lbnQ6IENvbmZpZ3VyYXRpb25Eb2N1bWVudFtdKSA9PiB7XHJcblx0XHRcdFx0aWYgKGxDb25maWd1cmF0aW9uRG9jdW1lbnQpIHtcclxuXHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aF0gPSB7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuZ2V0S2V5RG9jdW1lbnQoKSxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0RPQ1VNRU5UT1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0b2tlblR5cGU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9ET0NVTUVOVE8sXHJcblx0XHRcdFx0XHRcdHZhbHVlOiBbXVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGxDb25maWd1cmF0aW9uRG9jdW1lbnQuZm9yRWFjaCgoY0RvY3VtZW50KSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGtleTogY0RvY3VtZW50LmlkICsgJ19pbmZvJyxcclxuXHRcdFx0XHRcdFx0XHRsYWJlbDogY0RvY3VtZW50Lm5hbWVcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5pbml0TGlzdERvY3VtZW50QW5hbHlzaXMoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KGVycm9yKSA9PiB0aGlzLnRvYXN0clNlcnZpY2UuZXJyb3IoJ0Vycm9yIGNvbnN1bHRhbmRvIGxhIGluZm9ybWFjacOzbiBkZSBkb2N1bWVudG9zJylcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRpbml0TGlzdERvY3VtZW50QW5hbHlzaXMoKSB7XHJcblx0XHR0aGlzLmNvbmZpZ3VyYXRpb25Eb2N1bWVudFNlcnZpY2VcclxuXHRcdFx0LmdldEJ5UHJvbUNvZGlnb0FuZEF1dG9tYXRpY1ZhbGlkYXRpb24odGhpcy5wcm9tQ29kaWdvKVxyXG5cdFx0XHQuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAobENvbmZpZ3VyYXRpb25Eb2N1bWVudDogQ29uZmlndXJhdGlvbkRvY3VtZW50W10pID0+IHtcclxuXHRcdFx0XHRcdGlmIChsQ29uZmlndXJhdGlvbkRvY3VtZW50KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aF0gPSB7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLmdldEtleURvY3VtZW50QW5hbHlzaXMoKSxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRE9DVU1FTlRPX0FOQUxJU0lTX0FVVE9NQVRJQ09cclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHRva2VuVHlwZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0RPQ1VNRU5UT19BTkFMWVNJU19UWVBFLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBbXVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRsQ29uZmlndXJhdGlvbkRvY3VtZW50LmZvckVhY2goKGNEb2N1bWVudCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OiBjRG9jdW1lbnQuaWQgKyAnX3BhcnRpYWwnLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGNEb2N1bWVudC5uYW1lICsgJyAtIEFuw6FsaXNpcyBwYXJjaWFsJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OiBjRG9jdW1lbnQuaWQgKyAnX3RvdGFsJyxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBjRG9jdW1lbnQubmFtZSArICcgLSBBbsOhbGlzaXMgdG90YWwnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5pbml0TGlzdFRva2VuUHJlc3VwdWVzdG8oKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2UuZXJyb3IoXHJcblx0XHRcdFx0XHRcdCdFcnJvciBjb25zdWx0YW5kbyBsYSBpbmZvcm1hY2nDs24gZGUgYW7DoWxpc2lzIGF1dG9tw6F0aWNvIGRlIGRvY3VtZW50b3MnXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRpbml0TGlzdFRva2VuUHJlc3VwdWVzdG8oKSB7XHJcblx0XHR0aGlzLmJ1ZGdldFNlcnZpY2UubEdsb2JhbEJ1ZGdldENoYW5nZWQuc3Vic2NyaWJlKHtcclxuXHRcdFx0bmV4dDogKGxHbG9iYWxCdWRnZXQ6IFBsaUNuZlByZXN1cHVlc3RvR2xvYmFsW10pID0+IHtcclxuXHRcdFx0XHRpZiAoIXRoaXMuY2FsbEJ1ZGdldFNlcnZpY2UpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5jYWxsQnVkZ2V0U2VydmljZSA9IGZhbHNlO1xyXG5cdFx0XHRcdGlmIChsR2xvYmFsQnVkZ2V0KSB7XHJcblx0XHRcdFx0XHRsZXQgYnVkZ2V0VHlwZTogUGxpQ25mUHJlc3VwdWVzdG9HbG9iYWxbXSA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgZ2xvYmFsQnVkZ2V0IG9mIGxHbG9iYWxCdWRnZXQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdGdsb2JhbEJ1ZGdldC5wbGlUaXBvUHJlc3VwdWVzdG8udHByZXNDb2RpZ28gPT09IEVUaXBvUHJlc3VwdWVzdG8uUFJJTUFSWVxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRidWRnZXRUeXBlLnB1c2goZ2xvYmFsQnVkZ2V0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRnbG9iYWxCdWRnZXQucGxpVGlwb1ByZXN1cHVlc3RvLnRwcmVzQ29kaWdvID09PVxyXG5cdFx0XHRcdFx0XHRcdEVUaXBvUHJlc3VwdWVzdG8uU0VDT05EQVJZXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGJ1ZGdldFR5cGUucHVzaChnbG9iYWxCdWRnZXQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoYnVkZ2V0VHlwZSAmJiBPYmplY3Qua2V5cyhidWRnZXRUeXBlKS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aF0gPSB7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLmdldEtleUJ1ZGdldCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9CVURHRVRcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHRva2VuVHlwZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVCxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgYnVkZ2V0IG9mIGJ1ZGdldFR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCB0cHJlc0NvZGlnbyA9IGJ1ZGdldC5wbGlUaXBvUHJlc3VwdWVzdG8udHByZXNDb2RpZ287XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIGRhdGUgb2YgZmluYW5jaW5nXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0ZFQ0hBX0ZJTkFOQ0lOR19TVEFSVCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgZmVjaGEgaW5pY2lvIGZpbmFuY2lhY2nDs24nXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0ZFQ0hBX0ZJTkFOQ0lOR19FTkQsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYnVkZ2V0LmNwcmVOb21icmUgKyAnIGZlY2hhIGZpbiBmaW5hbmNpYWNpw7NuJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCB0aGUgdG90YWwgYW1vdW50XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0Ly8gXHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0Ly8gXHRcdHRwcmVzQ29kaWdvICsgJ18nICsgVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX1RPVEFMX0FNT1VOVCxcclxuXHRcdFx0XHRcdFx0XHQvLyBcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgdG90YWwnXHJcblx0XHRcdFx0XHRcdFx0Ly8gfSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBDb252b2NhdG9yaWEgcHJvY2VzcyB0b3RhbCBhbW91bnRcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9BTU9VTlQsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ0NvbnZvY2F0b3JpYS0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyB0b3RhbCdcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIG93biBmb3VuZHNcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9PV05fRk9VTkRTLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6ICdDb252b2NhdG9yaWEtICcgKyBidWRnZXQuY3ByZU5vbWJyZSArICcgZm9uZG9zIHByb3Bpb3MnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBDb252b2NhdG9yaWEgcHJvY2VzcyBmaW5hbmNpbmdcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9GSU5BTkNJTkcsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ0NvbnZvY2F0b3JpYS0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBmaW5hbmNpYWNpw7NuJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCB0aGUgQ29udm9jYXRvcmlhIHByb2Nlc3MgdG90YWwgYW1vdW50XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0xFR0FMSVpBVElPTl9QUk9DRVNTX1RPVEFMX0FNT1VOVCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAnTGVnYWxpemFjacOzbi0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyB0b3RhbCdcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIG93biBmb3VuZHNcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfT1dOX0ZPVU5EUyxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAnTGVnYWxpemFjacOzbi0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBmb25kb3MgcHJvcGlvcydcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIGZpbmFuY2luZ1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9GSU5BTkNJTkcsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ0xlZ2FsaXphY2nDs24tICcgKyBidWRnZXQuY3ByZU5vbWJyZSArICcgZmluYW5jaWFjacOzbidcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIGZpbmFuY2luZ1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9JTlNVUkFOQ0VfQU1PVU5ULFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6XHJcblx0XHRcdFx0XHRcdFx0XHRcdCdMZWdhbGl6YWNpw7NuLSAnICsgYnVkZ2V0LmNwcmVOb21icmUgKyAnIGZpbmFuY2lhY2nDs24gKyBzZWd1cm8nXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gSk1QIC0gTWFudGlzIDY2NzQgLSBhZGQgdG9rZW4gbGVnYWxpemF0aW9uIG9yIGFwcGxpY2F0aW9uIHRvdGFsIGZpbmFuY2luZ1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5MRUdBTElaQVRJT05fT1JfQVBQTElDQVRJT05fVE9UQUxfRklOQU5DSU5HLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6XHJcblx0XHRcdFx0XHRcdFx0XHRcdCdGaW5hbmNpYWNpw7NuIC0gJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdGJ1ZGdldC5jcHJlTm9tYnJlICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JyBsZWdhbGl6YWNpw7NuICgrIHNlZ3VybykgbyBDb252b2NhdG9yaWEgJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9SRVNVTUVfQ0FURUdPUllfWUVBUixcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgcmVzdW1lbiBydWJybyB5IGHDsW8nXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICsgJ18nICsgVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfRFVSQVRJT05fU1RVRElFUyxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgZHVyYWNpw7NuIGRlIGVzdHVkaW9zIGVuIG1lc2VzJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0ZJTkFOQ0lOR19EVVJBVElPTixcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgZHVyYWNpw7NuIGRlIGZpbmFuY2lhY2nDs24gZW4gbWVzZXMnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuaW5pdExpc3RUb2tlblRhc2tzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvcjogKGVycm9yKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcignRVJST1IgZGVsIHNlcnZpY2lvOiAnLCBlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5idWRnZXRTZXJ2aWNlLmdldExpc3RQcmVzdXB1ZXN0b0dsb2JhbCh0aGlzLnByb21Db2RpZ28pO1xyXG5cdFx0dGhpcy5jYWxsQnVkZ2V0U2VydmljZSA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRpbml0TGlzdFRva2VuVGFza3MoKSB7XHJcblx0XHR0aGlzLnBsaUNuZlRhc2tTZXJ2aWNlXHJcblx0XHRcdC5nZXRCeVByb21Db2RpZ28odGhpcy5wcm9tQ29kaWdvKVxyXG5cdFx0XHQuc3Vic2NyaWJlKChsaXN0VGFzazogUGxpQ25mRXZhbHVhdGlvblRhc2tbXSkgPT4ge1xyXG5cdFx0XHRcdGlmIChsaXN0VGFzaykge1xyXG5cdFx0XHRcdFx0bGV0IHRva2VuVGFza0FyciA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0VGFzay5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHR0b2tlblRhc2tBcnIucHVzaChsaXN0VGFza1tpXSk7XHJcblx0XHRcdFx0XHRcdHRva2VuVGFza0FycltpXVsnZm9ybXVsYVRva2VuJ10gPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY2FtZWxpemUodGhpcy5lbGltaW5hckRpYWNyaXRpY29zKGxpc3RUYXNrW2ldLm5hbWUpKSArXHJcblx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRsaXN0VGFza1tpXS5pZDtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGhdID0ge1xyXG5cdFx0XHRcdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdFx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0tMLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTS1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0b2tlblR5cGU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9UQVNLLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR0b2tlblRhc2tBcnIuZm9yRWFjaCgoY1Rhc2spID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiBjVGFzay5mb3JtdWxhVG9rZW4sXHJcblx0XHRcdFx0XHRcdFx0bGFiZWw6IGNUYXNrLm5hbWVcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHRoaXMuYWRqdXN0U3RhdGljVG9rZW5zSW5mbygpO1xyXG5cdFx0XHRcdFx0dGhpcy5nZXRUb2tlbkNhbGN1bGF0ZWQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0YWRqdXN0U3RhdGljVG9rZW5zSW5mbygpIHtcclxuXHRcdC8vIEFkZCB0aGUgc3RhdGljIHRva2Vuc1xyXG5cdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoXSA9IHtcclxuXHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRrZXk6IFRva2VuU2VydmljZS5nZXRLZXlTdGF0aWMoKSxcclxuXHRcdFx0XHR2YWx1ZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1NUQVRJQ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0b2tlblR5cGU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUMsXHJcblx0XHRcdHZhbHVlOiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU1xyXG5cdFx0fTtcclxuXHRcdHRoaXMucmVhZHlBY2NvcmRlb24gPSB0cnVlO1xyXG5cdFx0bGV0IGNvbE1heCA9IDQ7XHJcblx0XHQvL09yZ2FuaXplIGRlcGVuZHMgb2YgdGhlIHBhbmVsc1xyXG5cdFx0Zm9yIChsZXQgZ3JvdXBUb2tlbiBvZiB0aGlzLmxTdGF0aWNUb2tlbikge1xyXG5cdFx0XHRsZXQgcGFuZWw6IGFueSA9IFtdO1xyXG5cdFx0XHRpZiAoZ3JvdXBUb2tlbi50b2tlblR5cGUgPT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk0pIHtcclxuXHRcdFx0XHRsZXQgcGFuZWxOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cdFx0XHRcdGxldCBsYXN0UGFuZWxOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cdFx0XHRcdGZvciAobGV0IHN0YXRpY1Rva2VuIG9mIGdyb3VwVG9rZW4udmFsdWUpIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0IXRoaXMuc2hvd0ZybU11bHRpcGxlICYmXHJcblx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuLmVkaXRncmlkICYmXHJcblx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuLmVkaXRncmlkID09PSB0cnVlXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoc3RhdGljVG9rZW4ucGFuZWxOYW1lKSB7XHJcblx0XHRcdFx0XHRcdHBhbmVsTmFtZSA9IHN0YXRpY1Rva2VuLnBhbmVsTmFtZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChwYW5lbE5hbWUgIT09IG51bGwgJiYgcGFuZWxOYW1lICE9IGxhc3RQYW5lbE5hbWUpIHtcclxuXHRcdFx0XHRcdFx0cGFuZWwucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBwYW5lbE5hbWVcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBbXVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAocGFuZWxOYW1lID09PSBudWxsICYmIHBhbmVsLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRwYW5lbC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGdyb3VwVG9rZW4udGl0bGUudmFsdWVcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBbXVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHBhbmVsW3BhbmVsLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goc3RhdGljVG9rZW4pO1xyXG5cdFx0XHRcdFx0bGFzdFBhbmVsTmFtZSA9IHBhbmVsTmFtZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cGFuZWwucHVzaCh7XHJcblx0XHRcdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZTogZ3JvdXBUb2tlbi50aXRsZS52YWx1ZVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHZhbHVlOiBbXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGZvciAobGV0IHN0YXRpY1Rva2VuIG9mIGdyb3VwVG9rZW4udmFsdWUpIHtcclxuXHRcdFx0XHRcdHBhbmVsW3BhbmVsLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goc3RhdGljVG9rZW4pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRncm91cFRva2VuLnZhbHVlID0gcGFuZWw7XHJcblx0XHR9XHJcblx0XHRmb3IgKGxldCBwYW5lbCBvZiB0aGlzLmxTdGF0aWNUb2tlbikge1xyXG5cdFx0XHRmb3IgKGxldCBncm91cFRva2VuIG9mIHBhbmVsLnZhbHVlKSB7XHJcblx0XHRcdFx0bGV0IGlDb2wgPSAwO1xyXG5cdFx0XHRcdGxldCBpUm93ID0gMDtcclxuXHRcdFx0XHRsZXQgbFN0YXRpY1Rva2VuVG1wID0gW107XHJcblx0XHRcdFx0bFN0YXRpY1Rva2VuVG1wW2lSb3ddID0gW107XHJcblx0XHRcdFx0Zm9yIChsZXQgc3RhdGljVG9rZW4gb2YgZ3JvdXBUb2tlbi52YWx1ZSkge1xyXG5cdFx0XHRcdFx0aWYgKHN0YXRpY1Rva2VuLnR5cGUgJiYgc3RhdGljVG9rZW4udHlwZSA9PT0gJ2J1dHRvbicpIHtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIWxTdGF0aWNUb2tlblRtcFtpUm93XSkge1xyXG5cdFx0XHRcdFx0XHRsU3RhdGljVG9rZW5UbXBbaVJvd10gPSBbXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChwYW5lbC50b2tlblR5cGUgPT09IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9UQVNLKSB7XHJcblx0XHRcdFx0XHRcdGxTdGF0aWNUb2tlblRtcFtpUm93XS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRrZXk6ICckeycgKyBwYW5lbC50aXRsZS5rZXkgKyAnXycgKyBzdGF0aWNUb2tlbi5rZXkgKyAnfScsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHN0YXRpY1Rva2VuLmxhYmVsLFxyXG5cdFx0XHRcdFx0XHRcdG9iamVjdDogc3RhdGljVG9rZW5cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRsU3RhdGljVG9rZW5UbXBbaVJvd10ucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiAnJHsnICsgcGFuZWwudGl0bGUua2V5ICsgJ18nICsgc3RhdGljVG9rZW4ua2V5ICsgJ30nLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBzdGF0aWNUb2tlbi5sYWJlbCxcclxuXHRcdFx0XHRcdFx0XHRvYmplY3Q6IHN0YXRpY1Rva2VuXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlDb2wrKztcclxuXHRcdFx0XHRcdGlmIChpQ29sID09IGNvbE1heCkge1xyXG5cdFx0XHRcdFx0XHRpUm93Kys7XHJcblx0XHRcdFx0XHRcdGlDb2wgPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoaUNvbCA+IDApIHtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBpQ29sOyBpIDwgY29sTWF4OyBpKyspIHtcclxuXHRcdFx0XHRcdFx0bFN0YXRpY1Rva2VuVG1wW2lSb3ddLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGtleTogbnVsbCxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogbnVsbFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Z3JvdXBUb2tlbi52YWx1ZSA9IGxTdGF0aWNUb2tlblRtcDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5vblN0YXRpY1Rva2VuLmVtaXQodGhpcy5sU3RhdGljVG9rZW4pO1xyXG5cdFx0dGhpcy5jb25maWd1cmF0aW9uVG9rZW5TdWJqZWN0U2VydmljZS5zZXRTdWJqZWN0Q29uZmlndXJhdGlvblRva2Vucyh0aGlzLmxTdGF0aWNUb2tlbik7XHJcblx0fVxyXG5cclxuXHRnZXRUb2tlbkNhbGN1bGF0ZWQoKSB7XHJcblx0XHR0aGlzLnRva2VuU2VydmljZS5nZXRMaXN0QnlQcm9tQ29kaWdvKHRoaXMucHJvbUNvZGlnbykuc3Vic2NyaWJlKFxyXG5cdFx0XHQobFRva2VuOiBUb2tlbltdKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5sQ2FsY3VsYXRlZFRva2VuID0gbFRva2VuO1xyXG5cdFx0XHRcdHRoaXMucmVhZHkgPSB0cnVlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnRXJyb3IgZ2V0VG9rZW5DYWxjdWxhdGVkIC1nZXRMaXN0QnlQcm9tQ29kaWdvJywgZXJyb3IpO1xyXG5cdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgZWwgZm9ybXVsYXJpbycpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0VG9rZW5TbmFwc2hvdCgpIHtcclxuXHRcdGlmICh0aGlzLnNob3dTbmFwc2hvdCkge1xyXG5cdFx0XHR0aGlzLnNuYXBzaG90VG9rZW5TZXJ2aWNlLmdldEFsbEJ5UHJvbUNvZGUodGhpcy5wcm9tQ29kaWdvKS5zdWJzY3JpYmUoKHRva2VucykgPT4ge1xyXG5cdFx0XHRcdHRoaXMuc25hcFNob3RUb2tlbnMgPSB0b2tlbnM7XHJcblx0XHRcdFx0dGhpcy5yZWFkeSA9IHRydWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0VG9rZW5HdWFyYW50ZWUoKSB7XHJcblx0XHRpZiAodGhpcy5zaG93R3VhdGFudGVlKSB7XHJcblx0XHRcdHRoaXMucGxpQ25mR3VhcmFudGVlVG9rZW5TZXJ2aWNlLmdldEFsbEJ5UHJvbUNvZGlnbyh0aGlzLnByb21Db2RpZ28pLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHJlc3VsdDogUGxpQ25mR3VhcmFudGVlVG9rZW5bXSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5sR3VhcmFudGVlVG9rZW5zID0gcmVzdWx0O1xyXG5cdFx0XHRcdFx0dGhpcy5yZWFkeSA9IHRydWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRlcnJvcjogKGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2UuZXJyb3IoJ0Vycm9yIGFsIG9idGVuZXIgbG9zIHRva2VuIGRlIGdhcmFudGlhcycsICdFcnJvcicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRlbGltaW5hckRpYWNyaXRpY29zKHRleHRvKSB7XHJcblx0XHRyZXR1cm4gdGV4dG8ubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcblx0fVxyXG5cclxuXHRjYW1lbGl6ZShzdHIpIHtcclxuXHRcdHJldHVybiBzdHJcclxuXHRcdFx0LnRyaW0oKVxyXG5cdFx0XHQuc3BsaXQoL1xccysvKVxyXG5cdFx0XHQubWFwKChhKSA9PiBhLnRyaW0oKSlcclxuXHRcdFx0LmZpbHRlcigoYSkgPT4gYS5sZW5ndGggPiAwKVxyXG5cdFx0XHQubWFwKChhKSA9PiBhWzBdLnRvVXBwZXJDYXNlKCkgKyBhLnN1YnN0cmluZygxKSlcclxuXHRcdFx0LmpvaW4oJycpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IGRlbGV0ZXMgYSBzcG9uc29yICovXHJcblx0ZGVsZXRlKHRva2VuOiBUb2tlbikge1xyXG5cdFx0aWYgKGNvbmZpcm0oJ8K/RXN0w6Egc2VndXJvIHF1ZSBkZXNlYSBlbGltaW5hciBlbCB0b2tlbiAnICsgdG9rZW4ubmFtZSArICc/JykpIHtcclxuXHRcdFx0dGhpcy50b2tlblNlcnZpY2UuZGVsZXRlKHRva2VuLmlkKS5zdWJzY3JpYmUoXHJcblx0XHRcdFx0KHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLnN1Y2Nlc3MoJ0VsIHRva2VuIGZ1w6kgZWxpbWluYWRhIGV4aXRvc2FtZW50ZScpO1xyXG5cdFx0XHRcdFx0dGhpcy5nZXRUb2tlbkNhbGN1bGF0ZWQoKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBhbCBpbnRlbnRhciBlbGltaW5hciBlbCB0b2tlbicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKiBUZXQgdGhlIGxhYmVsIHRvIGNhbGN1bGF0ZWQgdG9rZW5zICovXHJcblx0bGFiZWxDYWxjdWxhdGVkKHRva2VuOiBUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gJyR7JyArIFRva2VuU2VydmljZS5nZXRLZXlDYWxjdWxhdGVkKHRva2VuKSArICd9JztcclxuXHR9XHJcblxyXG5cdC8qKiBUZXQgdGhlIGxhYmVsIHRvIGNhbGN1bGF0ZWQgdG9rZW5zICovXHJcblx0bGFiZWxTbmFwc2hvdCh0b2tlbjogUGxpQ25mU25hcHNob3RUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gJyR7JyArIFRva2VuU2VydmljZS5nZXRLZXlTbmFwc2hvdCh0b2tlbikgKyAnfSc7XHJcblx0fVxyXG5cclxuXHQvKiBUaGUgbGFiZWwgdG8gZ3VhcmFudGVlIHRva2VucyAqL1xyXG5cdGxhYmVsR3VhcmFudGVlKHRva2VuOiBQbGlDbmZHdWFyYW50ZWVUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gJyR7JyArIFRva2VuU2VydmljZS5nZXRLZXlHdWFyYW50ZWUodG9rZW4pICsgJ30nO1xyXG5cdH1cclxuXHJcblx0aW5pdEZvcm0odG9rZW5TZWxlY3RlZDogVG9rZW4pIHtcclxuXHRcdHRoaXMudG9rZW5TZWxlY3RlZCA9XHJcblx0XHRcdHRva2VuU2VsZWN0ZWQgPT0gbnVsbFxyXG5cdFx0XHRcdD8gbmV3IFRva2VuKClcclxuXHRcdFx0XHQ6IE9iamVjdC5hc3NpZ24obmV3IFRva2VuKCksIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodG9rZW5TZWxlY3RlZCkpKTtcclxuXHRcdGlmICghdGhpcy50b2tlblNlbGVjdGVkLnByb21Db2RpZ28pIHtcclxuXHRcdFx0dGhpcy50b2tlblNlbGVjdGVkLnByb21Db2RpZ28gPSB0aGlzLnByb21Db2RpZ287XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jb250cm9sTmFtZSA9IG5ldyBGb3JtQ29udHJvbCh0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblx0XHR0aGlzLmNvbnRyb2xGb3JtdWxhID0gbmV3IEZvcm1Db250cm9sKHRoaXMudG9rZW5TZWxlY3RlZC5mb3JtdWxhLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcblx0XHR0aGlzLmZybVRva2VuID0gbmV3IEZvcm1Hcm91cCh7XHJcblx0XHRcdGNvbnRyb2xOYW1lOiB0aGlzLmNvbnRyb2xOYW1lLFxyXG5cdFx0XHRjb250cm9sRm9ybXVsYTogdGhpcy5jb250cm9sRm9ybXVsYVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlS2V5Q2FsY3VsYXRlZFRva2VuKCkge1xyXG5cdFx0cmV0dXJuIFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyh0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSk7XHJcblx0fVxyXG5cclxuXHRzYXZlKCkge1xyXG5cdFx0aWYgKHRoaXMuaXNGb3JtVmFsaWQodGhpcy5mcm1Ub2tlbikpIHtcclxuXHRcdFx0Ly8gVmFsaWRhdGUgaWYgdGhlIG5hbWUgaXMgdW5pcXVlXHJcblx0XHRcdGlmICh0aGlzLmxDYWxjdWxhdGVkVG9rZW4gJiYgdGhpcy5sQ2FsY3VsYXRlZFRva2VuLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRmb3IgKGxldCBjYWxUb2tlbiBvZiB0aGlzLmxDYWxjdWxhdGVkVG9rZW4pIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKGNhbFRva2VuLm5hbWUpID09PVxyXG5cdFx0XHRcdFx0XHRcdFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyh0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSkgJiZcclxuXHRcdFx0XHRcdFx0KCF0aGlzLnRva2VuU2VsZWN0ZWQuaWQgfHwgdGhpcy50b2tlblNlbGVjdGVkLmlkICE9PSBjYWxUb2tlbi5pZClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2Uud2FybmluZyhcclxuXHRcdFx0XHRcdFx0XHQnRWwgdG9rZW4gJyArIGNhbFRva2VuLm5hbWUgKyAnIHRpZW5lIGxhIG1pc21hIGxsYXZlJyxcclxuXHRcdFx0XHRcdFx0XHQnQWxlcnRhISdcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgZXZhbEZvcm11bGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRldmFsRm9ybXVsYSA9IHRoaXMudG9rZW5TZXJ2aWNlLnZhbGlkYXRlRm9ybXVsYShcclxuXHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuLFxyXG5cdFx0XHRcdFx0dGhpcy50b2tlblNlbGVjdGVkLm5hbWUsXHJcblx0XHRcdFx0XHR0aGlzLnRva2VuU2VsZWN0ZWQuZm9ybXVsYVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvci5lcnJvcik7XHJcblx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKGVycm9yLm1lc3NhZ2UsIGVycm9yLnRpdGxlKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFldmFsRm9ybXVsYSkge1xyXG5cdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignTm8gc2UgbG9ncm8gZXZhbHVhciBsYSBmb3JtdWxhcicsICdFcnJvciEnKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gU2F2ZSB0aGUgdG9rZW5TZWxlY3RlZFxyXG5cdFx0XHR0aGlzLnRva2VuU2VydmljZS5zYXZlKHRoaXMudG9rZW5TZWxlY3RlZCkuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdCh0b2tlblNhdmU6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLnN1Y2Nlc3MoJ1NlIGhhIGd1YXJkYWRvIGV4aXRvc2FtZW50ZSAnLCAnR3VhcmRhZG8gZXhpdG9zbyEnKTtcclxuXHRcdFx0XHRcdHRoaXMudG9rZW5TZWxlY3RlZCA9IG51bGw7XHJcblx0XHRcdFx0XHR0aGlzLmdldFRva2VuQ2FsY3VsYXRlZCgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgYWwgaW50ZW50YXIgZ3VhcmRhciBlbCB0b2tlbicsICdFcnJvciEnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjYW5jZWwoKSB7XHJcblx0XHR0aGlzLnRva2VuU2VsZWN0ZWQgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHZhbGlkYXRlcyBpZiB0eXBlIGlzIGZybSAqL1xyXG5cdGlzR3JvdXBGcm0odHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk07XHJcblx0fVxyXG5cclxuXHQvKiogSXQgdmFsaWRhdGVzIGlmIHR5cGUgaXMgc3RhdGljICovXHJcblx0aXNHcm91cFN0YXRpYyh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0eXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHZhbGlkYXRlcyBpZiB0eXBlIGlzIGJ1ZGdldCAqL1xyXG5cdGlzR3JvdXBCdWRnZXQodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVDtcclxuXHR9XHJcblxyXG5cdC8qKiBJdCB2YWxpZGF0ZXMgaWYgdHlwZSBpcyBkb2N1bWVudCAqL1xyXG5cdGlzR3JvdXBEb2N1bWVudCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0eXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRE9DVU1FTlRPO1xyXG5cdH1cclxuXHJcblx0aXNHcm91cERvY3VtZW50QW5hbHlzaXModHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0RPQ1VNRU5UT19BTkFMWVNJU19UWVBFO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHZhbGlkYXRlcyBpZiB0eXBlIGlzIHRhc2sgKi9cclxuXHRpc0dyb3VwVGFzayh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0eXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTSztcclxuXHR9XHJcblxyXG5cdC8qKiBJdCB2YWxpZGF0ZXMgdmlzaWJpbGl0eSB0byBhbGwgdG9rZW5zIG1peGVkICovXHJcblx0dmFsaWRhdGVWaXNpYmlsaXR5KHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0KHRoaXMuaXNHcm91cEZybSh0eXBlKSAmJiB0aGlzLnNob3dGcm0pIHx8XHJcblx0XHRcdCh0aGlzLmlzR3JvdXBTdGF0aWModHlwZSkgJiYgdGhpcy5zaG93U3RhdGljKSB8fFxyXG5cdFx0XHQodGhpcy5pc0dyb3VwQnVkZ2V0KHR5cGUpICYmIHRoaXMuc2hvd0J1ZGdldCkgfHxcclxuXHRcdFx0KHRoaXMuaXNHcm91cERvY3VtZW50KHR5cGUpICYmIHRoaXMuc2hvd0RvY3VtZW50KSB8fFxyXG5cdFx0XHQodGhpcy5pc0dyb3VwVGFzayh0eXBlKSAmJiB0aGlzLnNob3dUYXNrKSB8fFxyXG5cdFx0XHQodGhpcy5pc0dyb3VwRG9jdW1lbnRBbmFseXNpcyh0eXBlKSAmJiB0aGlzLnNob3dEb2N1bWVudEF1dG9BbmFseXNpcylcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsIjxkaXZcclxuXHQqbmdJZj1cInJlYWR5QWNjb3JkZW9uICYmIHJlYWR5XCJcclxuXHRwbGlBdXRob3JpdHlEaXJlY3RpdmVcclxuXHRbYXV0aG9yaXRpZXNdPVwiW3AoJ1JPTEVfVE9LRU5TX0NPTlNVTFRBUicpXVwiXHJcblx0W3BhdENvZGlnb109XCJwYXRDb2RpZ29cIlxyXG5cdFtleHRlcm5hbEFsbG93ZWRdPVwiZmFsc2VcIlxyXG4+XHJcblx0PGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cdFx0PGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG5cdFx0XHQ8aDQgY2xhc3M9XCJuby1tYXJnaW4tdG9wXCIgKm5nSWY9XCIhc2hvd0FzVGl0bGVcIj5cclxuXHRcdFx0XHRUb2tlbnMgZm9ybXVsYXJpbywgZG9jdW1lbnRvcywgcHJlc3VwdWVzdG8sIHRhcmVhcyB5IGVzdMOhdGljb3NcclxuXHRcdFx0PC9oND5cclxuXHRcdFx0PGxhYmVsIGNsYXNzPVwibm8tbWFyZ2luLXRvcCBmb3JtLWNvbnRyb2wtbGFiZWxcIiAqbmdJZj1cInNob3dBc1RpdGxlXCI+XHJcblx0XHRcdFx0VG9rZW5zIGZvcm11bGFyaW8sIGRvY3VtZW50b3MsIHByZXN1cHVlc3RvLCB0YXJlYXMgeSBlc3TDoXRpY29zXHJcblx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdDxwLWFjY29yZGlvbiBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxyXG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwVG9rZW4gb2YgbFN0YXRpY1Rva2VuXCI+XHJcblx0XHRcdFx0XHQ8cC1hY2NvcmRpb25UYWJcclxuXHRcdFx0XHRcdFx0Km5nSWY9XCJ2YWxpZGF0ZVZpc2liaWxpdHkoZ3JvdXBUb2tlbi50b2tlblR5cGUpXCJcclxuXHRcdFx0XHRcdFx0aGVhZGVyPVwie3sgZ3JvdXBUb2tlbi50aXRsZS52YWx1ZSB9fVwiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IHBhbmVsIG9mIGdyb3VwVG9rZW4udmFsdWVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8aDQgKm5nSWY9XCJncm91cFRva2VuLnZhbHVlICYmIGdyb3VwVG9rZW4udmFsdWUubGVuZ3RoID4gMVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0e3sgcGFuZWwudGl0bGUudmFsdWUgfX1cclxuXHRcdFx0XHRcdFx0XHQ8L2g0PlxyXG5cdFx0XHRcdFx0XHRcdDxoclxyXG5cdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJncm91cFRva2VuLnZhbHVlICYmIGdyb3VwVG9rZW4udmFsdWUubGVuZ3RoID4gMVwiXHJcblx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbjogNXB4IDBcIlxyXG5cdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgc3RhdGljVG9rZW4gb2YgcGFuZWwudmFsdWVcIiBjbGFzcz1cInVpLWdcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJzdGF0aWNUb2tlblswXSAmJiBzdGF0aWNUb2tlblswXS5rZXlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVpLWctMTIgdWktbWQtNiB1aS1sZy0zIGN1dC1saW5lXCJcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJjb3B5TWVzc2FnZShzdGF0aWNUb2tlblswXS5rZXkpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cInt7IHN0YXRpY1Rva2VuWzBdLmtleSB9fVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNsaXBib2FyZFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgc3RhdGljVG9rZW5bMF0udmFsdWUgfX1cIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuWzBdLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwic3RhdGljVG9rZW5bMV0gJiYgc3RhdGljVG9rZW5bMV0ua2V5XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiY29weU1lc3NhZ2Uoc3RhdGljVG9rZW5bMV0ua2V5KVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBzdGF0aWNUb2tlblsxXS5rZXkgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1jbGlwYm9hcmRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiB0aXRsZT1cInt7IHN0YXRpY1Rva2VuWzFdLnZhbHVlIH19XCI+e3tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGF0aWNUb2tlblsxXS52YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cInN0YXRpY1Rva2VuWzJdICYmIHN0YXRpY1Rva2VuWzJdLmtleVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidWktZy0xMiB1aS1tZC02IHVpLWxnLTMgY3V0LWxpbmVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKHN0YXRpY1Rva2VuWzJdLmtleSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwie3sgc3RhdGljVG9rZW5bMl0ua2V5IH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gdGl0bGU9XCJ7eyBzdGF0aWNUb2tlblsyXS52YWx1ZSB9fVwiPnt7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5bMl0udmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJzdGF0aWNUb2tlblszXSAmJiBzdGF0aWNUb2tlblszXS5rZXlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVpLWctMTIgdWktbWQtNiB1aS1sZy0zIGN1dC1saW5lXCJcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJjb3B5TWVzc2FnZShzdGF0aWNUb2tlblszXS5rZXkpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cInt7IHN0YXRpY1Rva2VuWzNdLmtleSB9fVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNsaXBib2FyZFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgc3RhdGljVG9rZW5bM10udmFsdWUgfX1cIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuWzNdLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9wLWFjY29yZGlvblRhYj5cclxuXHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHQ8cC1hY2NvcmRpb25UYWJcclxuXHRcdFx0XHRcdCpuZ0lmPVwiXHJcblx0XHRcdFx0XHRcdGxDYWxjdWxhdGVkVG9rZW4gJiYgc2hvd0NhbGN1bGF0ZWRGb3JtID09PSBmYWxzZSAmJiBzaG93Q2FsY3VsYXRlZCA9PT0gdHJ1ZVxyXG5cdFx0XHRcdFx0XCJcclxuXHRcdFx0XHRcdGhlYWRlcj1cIlRva2VucyBjYWxjdWxhZG9zXCJcclxuXHRcdFx0XHQ+XHJcblx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCB0b2tlbiBvZiBsQ2FsY3VsYXRlZFRva2VuXCIgY2xhc3M9XCJ1aS1nXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKGxhYmVsQ2FsY3VsYXRlZCh0b2tlbikpXCJcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwie3sgbGFiZWxDYWxjdWxhdGVkKHRva2VuKSB9fVwiXHJcblx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4XCJcclxuXHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNsaXBib2FyZFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiB0aXRsZT1cInt7IHRva2VuLm5hbWUgfX1cIj57eyB0b2tlbi5uYW1lIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvcC1hY2NvcmRpb25UYWI+XHJcblx0XHRcdFx0PHAtYWNjb3JkaW9uVGFiICpuZ0lmPVwic25hcFNob3RUb2tlbnMgJiYgc2hvd1NuYXBzaG90XCIgaGVhZGVyPVwiVG9rZW5zIHNuYXBzaG90XCI+XHJcblx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCB0b2tlbiBvZiBzbmFwU2hvdFRva2Vuc1wiIGNsYXNzPVwidWktZ1wiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidWktZy0xMiB1aS1tZC02IHVpLWxnLTMgY3V0LWxpbmVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJjb3B5TWVzc2FnZShsYWJlbFNuYXBzaG90KHRva2VuKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBsYWJlbFNuYXBzaG90KHRva2VuKSB9fVwiXHJcblx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4XCJcclxuXHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNsaXBib2FyZFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiB0aXRsZT1cInt7IHRva2VuLm5hbWUgfX1cIj57eyB0b2tlbi5uYW1lIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvcC1hY2NvcmRpb25UYWI+XHJcblx0XHRcdFx0PHAtYWNjb3JkaW9uVGFiICpuZ0lmPVwibEd1YXJhbnRlZVRva2VucyAmJiBzaG93R3VhdGFudGVlXCIgaGVhZGVyPVwiVG9rZW5zIEdhcmFudGlhc1wiPlxyXG5cdFx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgdG9rZW4gb2YgbEd1YXJhbnRlZVRva2Vuc1wiIGNsYXNzPVwidWktZ1wiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidWktZy0xMiB1aS1tZC02IHVpLWxnLTMgY3V0LWxpbmVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJjb3B5TWVzc2FnZShsYWJlbEd1YXJhbnRlZSh0b2tlbikpXCJcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwie3sgbGFiZWxHdWFyYW50ZWUodG9rZW4pIH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgdG9rZW4ubmFtZSB9fVwiPnt7IHRva2VuLm5hbWUgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9wLWFjY29yZGlvblRhYj5cclxuXHRcdFx0PC9wLWFjY29yZGlvbj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdlxyXG5cdFx0XHRjbGFzcz1cImNvbC1tZC0xMlwiXHJcblx0XHRcdCpuZ0lmPVwibENhbGN1bGF0ZWRUb2tlbiAmJiBzaG93Q2FsY3VsYXRlZEZvcm0gPT09IHRydWUgJiYgc2hvd0NhbGN1bGF0ZWQgPT09IHRydWVcIlxyXG5cdFx0PlxyXG5cdFx0XHQ8c3BhbiBzdHlsZT1cIndpZHRoOiAxcHg7IGhlaWdodDogMTBweFwiPiZuYnNwOzwvc3Bhbj5cclxuXHRcdFx0PGg0IGNsYXNzPVwibm8tbWFyZ2luLXRvcFwiPlRva2VucyBjYWxjdWxhZG9zPC9oND5cclxuXHRcdFx0PHAtdGFibGUgW3ZhbHVlXT1cImxDYWxjdWxhdGVkVG9rZW5cIiBbcmVzcG9uc2l2ZV09XCJ0cnVlXCI+XHJcblx0XHRcdFx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG5cdFx0XHRcdFx0PHRyIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0PHRoIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIiB3aWR0aD1cIjQwJVwiPk5vbWJyZTwvdGg+XHJcblx0XHRcdFx0XHRcdDx0aCBjbGFzcz1cInRleHQtYWxpZ24tY2VudGVyXCI+Rm9ybXVsYTwvdGg+XHJcblx0XHRcdFx0XHRcdDx0aCBjbGFzcz1cInRleHQtYWxpZ24tY2VudGVyXCI+Q3JlYWRvPC90aD5cclxuXHRcdFx0XHRcdFx0PHRoIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj5Nb2RpZmljYWRvPC90aD5cclxuXHRcdFx0XHRcdFx0PHRoIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj5BY2Npb25lczwvdGg+XHJcblx0XHRcdFx0XHQ8L3RyPlxyXG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtdG9rZW4+XHJcblx0XHRcdFx0XHQ8dHI+XHJcblx0XHRcdFx0XHRcdDx0ZD5cclxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJjb3B5TWVzc2FnZShsYWJlbENhbGN1bGF0ZWQodG9rZW4pKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4XCJcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwie3sgbGFiZWxDYWxjdWxhdGVkKHRva2VuKSB9fVwiXHJcblx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1jbGlwYm9hcmRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0e3sgdG9rZW4ubmFtZSB9fVxyXG5cdFx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJjdXQtbGluZVwiPnt7IHRva2VuLmZvcm11bGEgfX08L3RkPlxyXG5cdFx0XHRcdFx0XHQ8dGQ+e3sgdG9rZW4uY3JlYXRlZEF0IHwgZGF0ZTogJ2RkIE1NTSB5eXl5JyB8IGxvd2VyY2FzZSB9fTwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZD57eyB0b2tlbi5tb2RpZmllZEF0IHwgZGF0ZTogJ2RkIE1NTSB5eXl5JyB8IGxvd2VyY2FzZSB9fTwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZD5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJpbml0Rm9ybSh0b2tlbilcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwbGlBdXRob3JpdHlEaXJlY3RpdmVcclxuXHRcdFx0XHRcdFx0XHRcdFx0W2F1dGhvcml0aWVzXT1cIltwKCdST0xFX1RPS0VOU19DUkVBUl9FRElUQVInKV1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbcGF0Q29kaWdvXT1cInBhdENvZGlnb1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtleHRlcm5hbEFsbG93ZWRdPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRFZGl0YXJcclxuXHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgZHJvcGRvd24tdG9nZ2xlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1leHBhbmRlZD1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bGk+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhc2NyaXB0OjtcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImRlbGV0ZSh0b2tlbilcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGxpQXV0aG9yaXR5RGlyZWN0aXZlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbYXV0aG9yaXRpZXNdPVwiW3AoJ1JPTEVfVE9LRU5TX0VMSU1JTkFSJyldXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtwYXRDb2RpZ29dPVwicGF0Q29kaWdvXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtleHRlcm5hbEFsbG93ZWRdPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PkVsaW1pbmFyPC9hXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC91bD5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHRcdDwvdHI+XHJcblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0PC9wLXRhYmxlPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1hbGlnbi1yaWdodFwiIHN0eWxlPVwicGFkZGluZzogMC43NXJlbSAxLjI1cmVtXCI+XHJcblx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcblx0XHRcdFx0XHQoY2xpY2spPVwiaW5pdEZvcm0obnVsbClcIlxyXG5cdFx0XHRcdFx0cGxpQXV0aG9yaXR5RGlyZWN0aXZlXHJcblx0XHRcdFx0XHRbYXV0aG9yaXRpZXNdPVwiW3AoJ1JPTEVfVE9LRU5TX0NSRUFSX0VESVRBUicpXVwiXHJcblx0XHRcdFx0XHRbcGF0Q29kaWdvXT1cInBhdENvZGlnb1wiXHJcblx0XHRcdFx0XHRbZXh0ZXJuYWxBbGxvd2VkXT1cImZhbHNlXCJcclxuXHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRBZ3JlZ2FyIG51ZXZvXHJcblx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdDwvZGl2PlxyXG5cclxuXHRcdFx0PGRpdj5cclxuXHRcdFx0XHQ8Zm9ybSBbZm9ybUdyb3VwXT1cImZybVRva2VuXCIgKG5nU3VibWl0KT1cInNhdmUoKVwiICpuZ0lmPVwidG9rZW5TZWxlY3RlZFwiPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbC1zbS02IGNvbC1tZC02XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJlcXVpcmVkXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIm5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPk5vbWJyZTwvbGFiZWw+XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImlucHV0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJuYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwibmFtZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj1cIk5vbWJyZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtQ29udHJvbE5hbWU9XCJjb250cm9sTmFtZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbKG5nTW9kZWwpXT1cInRva2VuU2VsZWN0ZWQubmFtZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnIgLz48YnIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5MbGF2ZTo8L2xhYmVsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PiZuYnNwOyZuYnNwOzxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGRcIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZUtleUNhbGN1bGF0ZWRUb2tlbigpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1lcnJvclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNtYWxsICpuZ0lmPVwiaGFzRXJyb3IoY29udHJvbE5hbWUsICdyZXF1aXJlZCcpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Pk5vbWJyZSBlcyByZXF1ZXJpZG88L3NtYWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbC1zbS02IGNvbC1tZC02XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJlcXVpcmVkXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cImZvcm11bGFcIiBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+Rm9ybXVsYTwvbGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gPGlucHV0IHR5cGU9XCJpbnB1dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cImZvcm11bGFcIiBpZD1cImZvcm11bGFcIiBwbGFjZWhvbGRlcj1cIkbDs3JtdWxhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZm9ybXVsYVwiIFsobmdNb2RlbCldPVwidG9rZW5TZWxlY3RlZC5mb3JtdWxhXCIgLz4gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRleHRhcmVhXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2xzPVwiNTBcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cm93cz1cIjRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cImZvcm11bGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJmb3JtdWxhXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cImNvbnRyb2xGb3JtdWxhXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFsobmdNb2RlbCldPVwidG9rZW5TZWxlY3RlZC5mb3JtdWxhXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWVycm9yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c21hbGwgKm5nSWY9XCJoYXNFcnJvcihjb250cm9sRm9ybXVsYSwgJ3JlcXVpcmVkJylcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+RsOzcm11bGEgZXMgcmVxdWVyaWRhPC9zbWFsbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciB0ZXh0LWFsaWduLXJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsKClcIiBjbGFzcz1cImJ0biBidG4tbGlua1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRDYW5jZWxhclxyXG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJzdWJtaXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHBsaUF1dGhvcml0eURpcmVjdGl2ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbYXV0aG9yaXRpZXNdPVwiW3AoJ1JPTEVfVE9LRU5TX0NSRUFSX0VESVRBUicpXVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtwYXRDb2RpZ29dPVwicGF0Q29kaWdvXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W2V4dGVybmFsQWxsb3dlZF09XCJmYWxzZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdEd1YXJkYXJcclxuXHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZm9ybT5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHRcdDxwbGktc25hcHNob3QtdG9rZW5cclxuXHRcdFx0XHRbcHJvbUNvZGlnb109XCJwcm9tQ29kaWdvXCJcclxuXHRcdFx0XHQqbmdJZj1cInNob3dTbmFwc2hvdEZvcm1cIlxyXG5cdFx0XHQ+PC9wbGktc25hcHNob3QtdG9rZW4+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTJcIj5cclxuXHRcdFx0PHBsaS1ndWFyYW50ZWUtdG9rZW4gW3Byb21Db2RpZ29dPVwicHJvbUNvZGlnb1wiICpuZ0lmPVwic2hvd0d1YXRhbnRlZUZvcm1cIj5cclxuXHRcdFx0PC9wbGktZ3VhcmFudGVlLXRva2VuPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|