ng-pli-commons 1.0.13 → 1.0.14-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/fesm2022/ng-pli-commons.mjs +1401 -827
  2. package/fesm2022/ng-pli-commons.mjs.map +1 -1
  3. package/lib/components/pdf-generator/pdf-generator.component.d.ts +3 -16
  4. package/lib/components/pdf-visualizer/pdf-visualizer.component.d.ts +2 -0
  5. package/lib/components/token/token.component.d.ts +7 -2
  6. package/lib/ng-pli-commons.module.d.ts +12 -13
  7. package/lib/services/application-pdf-form.service.d.ts +14 -0
  8. package/lib/services/application.service.d.ts +3 -1
  9. package/lib/services/budget-setup.service.d.ts +12 -0
  10. package/lib/services/budget-simulation.service.d.ts +2 -0
  11. package/lib/services/codebtors.service.d.ts +14 -0
  12. package/lib/services/committee-assistant.service.d.ts +19 -0
  13. package/lib/services/correspondence-manager.service.d.ts +1 -0
  14. package/lib/services/document-process.service.d.ts +12 -0
  15. package/lib/services/document.service.d.ts +5 -4
  16. package/lib/services/guarantees-summary-service.d.ts +13 -0
  17. package/lib/services/import-excel-gic.service.d.ts +2 -0
  18. package/lib/services/maintenance.service.d.ts +4 -0
  19. package/lib/services/master-university.service.d.ts +7 -0
  20. package/lib/services/openkm-document.service.d.ts +11 -0
  21. package/lib/services/pli-cnf-committee.service.d.ts +2 -0
  22. package/lib/services/pli-cnf-evaluation-task-template.service.d.ts +20 -0
  23. package/lib/services/pli-cnf-installment-simulator-config.service.d.ts +16 -0
  24. package/lib/services/post-selection.service.d.ts +11 -0
  25. package/lib/services/registry-identifier.service.d.ts +2 -1
  26. package/lib/services/send-application.service.d.ts +1 -0
  27. package/lib/services/status.service.d.ts +1 -0
  28. package/lib/services/tag-management.service.d.ts +23 -0
  29. package/lib/services/token.service.d.ts +1 -0
  30. package/lib/services/visualization-committee.service.d.ts +5 -4
  31. package/package.json +3 -6
  32. package/public-api.d.ts +11 -0
  33. package/version.d.ts +1 -1
  34. package/esm2022/lib/components/backoffice.commons.component.mjs +0 -40
  35. package/esm2022/lib/components/common.lists.component.mjs +0 -176
  36. package/esm2022/lib/components/configuration-token/configuration-token-subject.service.mjs +0 -23
  37. package/esm2022/lib/components/configuration-token/configuration-token.component.mjs +0 -665
  38. package/esm2022/lib/components/configuration-token/guarantee-token/guarantee-token.component.mjs +0 -103
  39. package/esm2022/lib/components/configuration-token/snapshot-token/snapshot-token.component.mjs +0 -108
  40. package/esm2022/lib/components/configuration.commons.component.mjs +0 -40
  41. package/esm2022/lib/components/dashboard.commons.component.mjs +0 -84
  42. package/esm2022/lib/components/dynamic-filter/dynamic-filter.component.mjs +0 -131
  43. package/esm2022/lib/components/excel-to-json/excel-to-json.component.mjs +0 -54
  44. package/esm2022/lib/components/frontoffice.commons.component.mjs +0 -88
  45. package/esm2022/lib/components/pdf-analyzer/pdf-analyzer.component.mjs +0 -162
  46. package/esm2022/lib/components/pdf-config/pdf-config.component.mjs +0 -170
  47. package/esm2022/lib/components/pdf-generator/pdf-generator.component.mjs +0 -223
  48. package/esm2022/lib/components/pdf-merge-visualizer/pdf-merge-visualizer.component.mjs +0 -307
  49. package/esm2022/lib/components/pdf-visualizer/pdf-visualizer.component.mjs +0 -387
  50. package/esm2022/lib/components/progress-bar/progress-bar.component.mjs +0 -92
  51. package/esm2022/lib/components/segmentation-tokens/segmentation-tokens.component.mjs +0 -199
  52. package/esm2022/lib/components/select-ppp/select-ppp.component.mjs +0 -199
  53. package/esm2022/lib/components/show-hide-columns/show-hide-columns-table.component.mjs +0 -116
  54. package/esm2022/lib/components/token/token.component.mjs +0 -1026
  55. package/esm2022/lib/components/tokens-calculator/tokens-calculator.component.mjs +0 -128
  56. package/esm2022/lib/directives/currency-colfuturo-formatter.directive.mjs +0 -47
  57. package/esm2022/lib/directives/currency-decimal-colfuturo-formatter.directive.mjs +0 -34
  58. package/esm2022/lib/ng-pli-commons.module.mjs +0 -389
  59. package/esm2022/lib/ng-pli-commons.service.mjs +0 -14
  60. package/esm2022/lib/pipes/currency-colfuturo.pipe.mjs +0 -35
  61. package/esm2022/lib/pipes/currency-decimal-colfuturo.pipe.mjs +0 -36
  62. package/esm2022/lib/pipes/currency-print-colfuturo.pipe.mjs +0 -33
  63. package/esm2022/lib/pipes/thousands.pipe.mjs +0 -60
  64. package/esm2022/lib/services/application-fill-percentage.service.mjs +0 -30
  65. package/esm2022/lib/services/application-tag.service.mjs +0 -56
  66. package/esm2022/lib/services/application.service.mjs +0 -247
  67. package/esm2022/lib/services/assign-task.service.mjs +0 -30
  68. package/esm2022/lib/services/authentication.service.mjs +0 -133
  69. package/esm2022/lib/services/blocked-beneficiary.service.mjs +0 -42
  70. package/esm2022/lib/services/budget-application.service.mjs +0 -265
  71. package/esm2022/lib/services/budget-simulation.service.mjs +0 -61
  72. package/esm2022/lib/services/budget.service.mjs +0 -205
  73. package/esm2022/lib/services/closure-wallet.service.mjs +0 -39
  74. package/esm2022/lib/services/cnf-correspondence-document-manager.service.mjs +0 -39
  75. package/esm2022/lib/services/committee-money.service.mjs +0 -44
  76. package/esm2022/lib/services/committee-pdf.service.mjs +0 -27
  77. package/esm2022/lib/services/committee-snapshot.service.mjs +0 -60
  78. package/esm2022/lib/services/common-info.service.mjs +0 -51
  79. package/esm2022/lib/services/common.service.mjs +0 -285
  80. package/esm2022/lib/services/configuration-document.service.mjs +0 -297
  81. package/esm2022/lib/services/configuration-minisite.service.mjs +0 -26
  82. package/esm2022/lib/services/configuration.service.mjs +0 -53
  83. package/esm2022/lib/services/correspondence-document-category.service.mjs +0 -31
  84. package/esm2022/lib/services/correspondence-manager.service.mjs +0 -67
  85. package/esm2022/lib/services/credit-score.service.mjs +0 -48
  86. package/esm2022/lib/services/credit-study.service.mjs +0 -292
  87. package/esm2022/lib/services/cube.service.mjs +0 -27
  88. package/esm2022/lib/services/data-form-history.service.mjs +0 -25
  89. package/esm2022/lib/services/data-form.service.mjs +0 -176
  90. package/esm2022/lib/services/data-letter-segmentation.service.mjs +0 -64
  91. package/esm2022/lib/services/document-analysis-auto.service.mjs +0 -27
  92. package/esm2022/lib/services/document-history.service.mjs +0 -43
  93. package/esm2022/lib/services/document-management.service.mjs +0 -57
  94. package/esm2022/lib/services/document-validation-attempt.service.mjs +0 -32
  95. package/esm2022/lib/services/document.service.mjs +0 -131
  96. package/esm2022/lib/services/documentary.type.service.mjs +0 -69
  97. package/esm2022/lib/services/email.service.mjs +0 -30
  98. package/esm2022/lib/services/evaluation.service.mjs +0 -181
  99. package/esm2022/lib/services/export-excel.service.mjs +0 -32
  100. package/esm2022/lib/services/file.service.mjs +0 -153
  101. package/esm2022/lib/services/form.service.mjs +0 -112
  102. package/esm2022/lib/services/gic-client-disbursement-metadata.service.mjs +0 -31
  103. package/esm2022/lib/services/gic-client.service.mjs +0 -49
  104. package/esm2022/lib/services/gic-cnf-bankvision-transaction.service.mjs +0 -31
  105. package/esm2022/lib/services/gic-cnf-closing-date.service.mjs +0 -34
  106. package/esm2022/lib/services/gic-cnf-maintenance.service.mjs +0 -30
  107. package/esm2022/lib/services/gic-collection.service.mjs +0 -53
  108. package/esm2022/lib/services/gic-disbursement.service.mjs +0 -39
  109. package/esm2022/lib/services/gic-extract.service.mjs +0 -41
  110. package/esm2022/lib/services/gic-log.service.mjs +0 -41
  111. package/esm2022/lib/services/gic-payment-application.service.mjs +0 -35
  112. package/esm2022/lib/services/gic-payment-plan-cube.service.mjs +0 -27
  113. package/esm2022/lib/services/gic-payment-plan.service.mjs +0 -32
  114. package/esm2022/lib/services/gic-trm.service.mjs +0 -27
  115. package/esm2022/lib/services/global.show.task.service.mjs +0 -37
  116. package/esm2022/lib/services/guarantee-document.service.mjs +0 -52
  117. package/esm2022/lib/services/guarantee-enrollment.service.mjs +0 -37
  118. package/esm2022/lib/services/guarantee.service.mjs +0 -128
  119. package/esm2022/lib/services/hash.service.mjs +0 -36
  120. package/esm2022/lib/services/import-data.service.mjs +0 -27
  121. package/esm2022/lib/services/import-excel-gic.service.mjs +0 -45
  122. package/esm2022/lib/services/initial-configuration-gic-parameters.service.mjs +0 -51
  123. package/esm2022/lib/services/initial-record.service.mjs +0 -51
  124. package/esm2022/lib/services/integration-ado.service.mjs +0 -54
  125. package/esm2022/lib/services/interaction-application-user.service.mjs +0 -81
  126. package/esm2022/lib/services/interest-adjustment.service.mjs +0 -34
  127. package/esm2022/lib/services/keys-assignation.service.mjs +0 -127
  128. package/esm2022/lib/services/legalization.service.mjs +0 -150
  129. package/esm2022/lib/services/letter-campaing.service.mjs +0 -49
  130. package/esm2022/lib/services/letter-task-mapping.service.mjs +0 -40
  131. package/esm2022/lib/services/log.service.mjs +0 -41
  132. package/esm2022/lib/services/maintenance.service.mjs +0 -66
  133. package/esm2022/lib/services/master-category.service.mjs +0 -66
  134. package/esm2022/lib/services/master-program.service.mjs +0 -78
  135. package/esm2022/lib/services/master-university.service.mjs +0 -68
  136. package/esm2022/lib/services/migration-plis.service.mjs +0 -27
  137. package/esm2022/lib/services/migration-survey-queue.service.mjs +0 -24
  138. package/esm2022/lib/services/page.service.mjs +0 -38
  139. package/esm2022/lib/services/partner-system.service.mjs +0 -30
  140. package/esm2022/lib/services/partner.service.mjs +0 -34
  141. package/esm2022/lib/services/pdf-analyzer.service.mjs +0 -33
  142. package/esm2022/lib/services/people-master.service.mjs +0 -42
  143. package/esm2022/lib/services/permission.service.mjs +0 -29
  144. package/esm2022/lib/services/pli-cnf-acuity-fields.service.mjs +0 -34
  145. package/esm2022/lib/services/pli-cnf-app-card-filter.service.mjs +0 -40
  146. package/esm2022/lib/services/pli-cnf-appointment-type.service.mjs +0 -41
  147. package/esm2022/lib/services/pli-cnf-budget-program-type.service.mjs +0 -54
  148. package/esm2022/lib/services/pli-cnf-budget.service.mjs +0 -31
  149. package/esm2022/lib/services/pli-cnf-cloning.service.mjs +0 -27
  150. package/esm2022/lib/services/pli-cnf-committee-pdf-config-table-config.service.mjs +0 -47
  151. package/esm2022/lib/services/pli-cnf-committee-pdf-gen-status.service.mjs +0 -30
  152. package/esm2022/lib/services/pli-cnf-committee-valpro-columns.service.mjs +0 -42
  153. package/esm2022/lib/services/pli-cnf-committee-visualization-mode.service.mjs +0 -42
  154. package/esm2022/lib/services/pli-cnf-committee.service.mjs +0 -51
  155. package/esm2022/lib/services/pli-cnf-config-minisite.service.mjs +0 -90
  156. package/esm2022/lib/services/pli-cnf-configuration-credit-study.service.mjs +0 -41
  157. package/esm2022/lib/services/pli-cnf-document-management.service.mjs +0 -40
  158. package/esm2022/lib/services/pli-cnf-dynamic-keys-assign.service.mjs +0 -52
  159. package/esm2022/lib/services/pli-cnf-evaluation-task-mailing.service.mjs +0 -31
  160. package/esm2022/lib/services/pli-cnf-evaluation-task.service.mjs +0 -112
  161. package/esm2022/lib/services/pli-cnf-evaluation-template.service.mjs +0 -95
  162. package/esm2022/lib/services/pli-cnf-form-edit.service.mjs +0 -68
  163. package/esm2022/lib/services/pli-cnf-form-multiaplicacion.service.mjs +0 -46
  164. package/esm2022/lib/services/pli-cnf-guarantee-documents-template.service.mjs +0 -40
  165. package/esm2022/lib/services/pli-cnf-guarantee-token.service.mjs +0 -42
  166. package/esm2022/lib/services/pli-cnf-header.service.mjs +0 -39
  167. package/esm2022/lib/services/pli-cnf-indicator.service.mjs +0 -39
  168. package/esm2022/lib/services/pli-cnf-information-system.service.mjs +0 -24
  169. package/esm2022/lib/services/pli-cnf-interaction.service.mjs +0 -78
  170. package/esm2022/lib/services/pli-cnf-letter-template-type.service.mjs +0 -29
  171. package/esm2022/lib/services/pli-cnf-letter-template.service.mjs +0 -48
  172. package/esm2022/lib/services/pli-cnf-look-and-feel.service.mjs +0 -28
  173. package/esm2022/lib/services/pli-cnf-mail.service.mjs +0 -30
  174. package/esm2022/lib/services/pli-cnf-menu-form.service.mjs +0 -34
  175. package/esm2022/lib/services/pli-cnf-migration-plis-field-budget.service.mjs +0 -34
  176. package/esm2022/lib/services/pli-cnf-migration-plis-field.service.mjs +0 -47
  177. package/esm2022/lib/services/pli-cnf-migration-status-plis.service.mjs +0 -44
  178. package/esm2022/lib/services/pli-cnf-page-section-form.service.mjs +0 -66
  179. package/esm2022/lib/services/pli-cnf-page-sub-process.service.mjs +0 -25
  180. package/esm2022/lib/services/pli-cnf-pdfs.service.mjs +0 -31
  181. package/esm2022/lib/services/pli-cnf-profile-form.service.mjs +0 -40
  182. package/esm2022/lib/services/pli-cnf-profile-user.service.mjs +0 -49
  183. package/esm2022/lib/services/pli-cnf-project-summary.service.mjs +0 -39
  184. package/esm2022/lib/services/pli-cnf-scenario.service.mjs +0 -47
  185. package/esm2022/lib/services/pli-cnf-segmentation.service.mjs +0 -72
  186. package/esm2022/lib/services/pli-cnf-snapshot-token.service.mjs +0 -42
  187. package/esm2022/lib/services/pli-cnf-status-flow-interaction.service.mjs +0 -74
  188. package/esm2022/lib/services/pli-cnf-status-flow.service.mjs +0 -56
  189. package/esm2022/lib/services/pli-cnf-support-document-category.service.mjs +0 -47
  190. package/esm2022/lib/services/pli-cnf-support-document.service.mjs +0 -56
  191. package/esm2022/lib/services/pli-cnf-survey-document.service.mjs +0 -37
  192. package/esm2022/lib/services/pli-cnf-survey-pdf.service.mjs +0 -34
  193. package/esm2022/lib/services/pli-cnf-survey.service.mjs +0 -46
  194. package/esm2022/lib/services/pli-cnf-task-group.service.mjs +0 -33
  195. package/esm2022/lib/services/pli-cnf-text-category.service.mjs +0 -38
  196. package/esm2022/lib/services/pli-cnf-text-option.service.mjs +0 -39
  197. package/esm2022/lib/services/pli-cnf-text.service.mjs +0 -62
  198. package/esm2022/lib/services/pli-cnf-type-text.service.mjs +0 -45
  199. package/esm2022/lib/services/pli-cnf-university-article.service.mjs +0 -39
  200. package/esm2022/lib/services/pli-cnf-user-calendar.service.mjs +0 -36
  201. package/esm2022/lib/services/pli-cnf-user-workspace.service.mjs +0 -35
  202. package/esm2022/lib/services/pli-cnf-valpro-keys.service.mjs +0 -35
  203. package/esm2022/lib/services/pli-cnf-workspace-segmentation.service.mjs +0 -31
  204. package/esm2022/lib/services/pli-message-type.service.mjs +0 -40
  205. package/esm2022/lib/services/pli-multiple-value-filter.service.mjs +0 -39
  206. package/esm2022/lib/services/pli-promocion-username.service.mjs +0 -57
  207. package/esm2022/lib/services/pli-seg-action-user.service.mjs +0 -37
  208. package/esm2022/lib/services/pli-segmentation.service.mjs +0 -130
  209. package/esm2022/lib/services/pli-tag-assignment.service.mjs +0 -36
  210. package/esm2022/lib/services/pli-tag.service.mjs +0 -55
  211. package/esm2022/lib/services/pli-user.service.mjs +0 -51
  212. package/esm2022/lib/services/plis-beneficiario.service.mjs +0 -29
  213. package/esm2022/lib/services/plis-estatus-change.service.mjs +0 -30
  214. package/esm2022/lib/services/ppp.service.mjs +0 -360
  215. package/esm2022/lib/services/profile.service.mjs +0 -60
  216. package/esm2022/lib/services/progress-bar.service.mjs +0 -40
  217. package/esm2022/lib/services/promotion-score.service.mjs +0 -44
  218. package/esm2022/lib/services/registry-identifier.service.mjs +0 -39
  219. package/esm2022/lib/services/return-refund.service.mjs +0 -53
  220. package/esm2022/lib/services/segmentation-tokens.service.mjs +0 -43
  221. package/esm2022/lib/services/segmentation-user-service.service.mjs +0 -94
  222. package/esm2022/lib/services/segmentation.service.mjs +0 -31
  223. package/esm2022/lib/services/send-application.service.mjs +0 -484
  224. package/esm2022/lib/services/sesion-form.service.mjs +0 -31
  225. package/esm2022/lib/services/sesion.service.mjs +0 -48
  226. package/esm2022/lib/services/spinner.service.mjs +0 -16
  227. package/esm2022/lib/services/sponsorship-letter.service.mjs +0 -68
  228. package/esm2022/lib/services/status.service.mjs +0 -100
  229. package/esm2022/lib/services/summary-budget.service.mjs +0 -24
  230. package/esm2022/lib/services/survey-metadata.service.mjs +0 -28
  231. package/esm2022/lib/services/survey-queue.service.mjs +0 -24
  232. package/esm2022/lib/services/survey.service.mjs +0 -52
  233. package/esm2022/lib/services/tasa.cambio.service.mjs +0 -35
  234. package/esm2022/lib/services/token-transformation.service.mjs +0 -62
  235. package/esm2022/lib/services/token.service.mjs +0 -1429
  236. package/esm2022/lib/services/university.service.mjs +0 -50
  237. package/esm2022/lib/services/upload-documents.service.mjs +0 -60
  238. package/esm2022/lib/services/user.service.mjs +0 -28
  239. package/esm2022/lib/services/visualization-committee.service.mjs +0 -84
  240. package/esm2022/lib/utils/custom-validator.mjs +0 -95
  241. package/esm2022/lib/utils/form-util.mjs +0 -35
  242. package/esm2022/lib/utils/formio-util.mjs +0 -582
  243. package/esm2022/lib/utils/version-commons.mjs +0 -10
  244. package/esm2022/ng-pli-commons.mjs +0 -5
  245. package/esm2022/public-api.mjs +0 -216
  246. package/esm2022/version.mjs +0 -29
@@ -1,307 +0,0 @@
1
- import { Component, Input, EventEmitter, Output } from '@angular/core';
2
- import * as PDFJS_ from 'pdfjs-dist/build/pdf.min.mjs';
3
- import * as panzoom_ from 'panzoom/dist/panzoom';
4
- import { PdfDocument, UtilString } from 'ng-pli-util';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../services/common.service";
7
- import * as i2 from "ngx-toastr";
8
- import * as i3 from "@angular/platform-browser";
9
- import * as i4 from "@angular/common";
10
- import * as i5 from "@angular/forms";
11
- const PDFJS = PDFJS_;
12
- const panzoom = panzoom_;
13
- /** Pdf visualizer Refactor - TODO improve logic and check the edit functionality */
14
- export class PdfMergeVisualizerComponent {
15
- /** Default visualizer height */
16
- static { this.DEFAULT_HEIGHT = 500; }
17
- constructor(commonService, taostrService, sanitization) {
18
- this.commonService = commonService;
19
- this.taostrService = taostrService;
20
- this.sanitization = sanitization;
21
- /** It verifies if is possible to edit html */
22
- this.enableEdit = false; // TODO - Check functionality
23
- /** It fires when the file has been downloaded */
24
- this.onDownload = new EventEmitter();
25
- /** It fires when the name has been sent */
26
- this.onSendEmail = new EventEmitter(); // TODO - Check functionality
27
- /** It fires when the name has been sent */
28
- this.onPdfRendered = new EventEmitter();
29
- /** It allows to edit html */ this.edit = false;
30
- /** it verifies if component is ready */
31
- this.ready = false;
32
- /** it contains the id of canvas */
33
- this.id_canvas = 'pdf-canvas';
34
- }
35
- // it resolves when the html is changed
36
- ngOnChanges(changes) {
37
- const lPdfRequest = changes.lPdfRequest;
38
- const urlFile = changes.urlFile;
39
- if (lPdfRequest && lPdfRequest.currentValue) {
40
- this.generatePDF();
41
- }
42
- else if (urlFile && urlFile.currentValue) {
43
- this.urlFile = urlFile.currentValue;
44
- this.generatePDF();
45
- }
46
- else {
47
- this.ready = false;
48
- if (this.pdfDocument && this.pdfDocument.canvas) {
49
- let canvas = this.pdfDocument.canvas;
50
- var ctx = this.pdfDocument.canvas.getContext('2d');
51
- ctx.clearRect(0, 0, canvas.width, canvas.height);
52
- this.pdfDocument = undefined;
53
- }
54
- }
55
- }
56
- /** It generates the pdf */
57
- generatePDF() {
58
- if (UtilString.isValid(this.urlFile)) {
59
- this.commonService.getBase64PdfByUrl(this.urlFile).subscribe((result) => {
60
- this.showBase64Pdf(result);
61
- }, (error) => {
62
- console.error('Error trying to render PDF', error);
63
- });
64
- }
65
- else if (this.lPdfRequest) {
66
- // if html was changed
67
- this.commonService.getBase64PdfList(this.lPdfRequest).subscribe((result) => {
68
- this.showBase64Pdf(result);
69
- }, (error) => {
70
- console.error('Error trying to render PDF', error);
71
- });
72
- }
73
- }
74
- showBase64Pdf(result) {
75
- this.base64 = result.base64;
76
- var data = atob(this.base64);
77
- PDFJS.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
78
- // create instance of PdfDocument with the id of canvas
79
- this.pdfDocument = new PdfDocument(this.id_canvas);
80
- // assign variables out of scope
81
- let pdfdocument = this.pdfDocument;
82
- panzoom(this.pdfDocument.canvas, {
83
- smoothScroll: false
84
- });
85
- let self = this;
86
- let ready = this.ready;
87
- PDFJS.getDocument({ data: data }).then(function (pdfDoc_) {
88
- pdfdocument.pdfDoc = pdfDoc_;
89
- self.renderPage(1);
90
- ready = true;
91
- self.onPdfRendered.emit(true);
92
- });
93
- }
94
- /** It returns the height */
95
- getHeight() {
96
- if (this.height)
97
- return this.height + 'px';
98
- return PdfMergeVisualizerComponent.DEFAULT_HEIGHT + 'px';
99
- }
100
- /** Get page info from document, resize canvas accordingly, and render page. */
101
- renderPage(num) {
102
- this.pdfDocument.pageRendering = true;
103
- // assign variables out of scope
104
- let selfPdfDocument = this.pdfDocument;
105
- let self = this;
106
- // Using promise to fetch the page
107
- this.pdfDocument.pdfDoc.getPage(num).then(function (page) {
108
- var viewport = page.getViewport(selfPdfDocument.scale);
109
- selfPdfDocument.canvas.height = viewport.height;
110
- selfPdfDocument.canvas.width = viewport.width;
111
- // Render PDF page into canvas context
112
- var renderContext = {
113
- canvasContext: selfPdfDocument.canvas.getContext('2d'),
114
- viewport: viewport
115
- };
116
- var renderTask = page.render(renderContext);
117
- // Wait for rendering to finish
118
- renderTask.promise.then(function () {
119
- selfPdfDocument.pageRendering = false;
120
- if (selfPdfDocument.pageNumPending !== null) {
121
- // New page rendering is pending
122
- self.renderPage(selfPdfDocument.pageNumPending);
123
- selfPdfDocument.pageNumPending = null;
124
- }
125
- });
126
- });
127
- }
128
- /**
129
- * If another page rendering in progress, waits until the rendering is
130
- * finised. Otherwise, executes rendering immediately.
131
- */
132
- queueRenderPage(num) {
133
- if (this.pdfDocument.pageRendering) {
134
- this.pdfDocument.pageNumPending = num;
135
- }
136
- else {
137
- this.renderPage(num);
138
- }
139
- }
140
- /**
141
- * Displays previous page.
142
- */
143
- onPrevPage() {
144
- if (!this.pdfDocument || this.pdfDocument.pageNum <= 1) {
145
- return;
146
- }
147
- this.pdfDocument.pageNum--;
148
- this.queueRenderPage(this.pdfDocument.pageNum);
149
- }
150
- /**
151
- * Displays next page.
152
- */
153
- onNextPage() {
154
- if (!this.pdfDocument || this.pdfDocument.pageNum >= this.pdfDocument.pdfDoc.numPages) {
155
- return;
156
- }
157
- this.pdfDocument.pageNum++;
158
- this.queueRenderPage(this.pdfDocument.pageNum);
159
- }
160
- /**
161
- * Displays Zoom In.
162
- */
163
- onZoomIn() {
164
- if (!this.pdfDocument || this.pdfDocument.scale >= 3) {
165
- return;
166
- }
167
- this.pdfDocument.scale = this.pdfDocument.scale + 0.2;
168
- this.queueRenderPage(this.pdfDocument.pageNum);
169
- }
170
- /**
171
- * Displays Zoom Out.
172
- */
173
- onZoomOut() {
174
- if (!this.pdfDocument || this.pdfDocument.scale <= 0.4) {
175
- return;
176
- }
177
- this.pdfDocument.scale = this.pdfDocument.scale - 0.2;
178
- this.queueRenderPage(this.pdfDocument.pageNum);
179
- }
180
- /** It sends the document by email */
181
- sendEmail() {
182
- if (this.email && UtilString.validateEmail(this.email)) {
183
- this.onSendEmail.emit({
184
- to: this.email,
185
- base64: this.base64
186
- });
187
- this.email = '';
188
- return;
189
- }
190
- this.taostrService.warning('Correo electrónico es incorrecto');
191
- }
192
- /** It fires the event download */
193
- download() {
194
- const contentType = 'application/pdf';
195
- const b64Data = this.base64;
196
- const blob = this.b64toBlob(b64Data, contentType);
197
- const blobUrl = URL.createObjectURL(blob);
198
- var a = document.createElement('a');
199
- document.body.appendChild(a);
200
- a.style.display = 'none';
201
- a.href = blobUrl;
202
- a.download = this.filename;
203
- a.click();
204
- setTimeout(() => {
205
- window.URL.revokeObjectURL(blobUrl);
206
- document.body.removeChild(a);
207
- this.onDownload.emit({
208
- base64: this.base64
209
- });
210
- }, 200);
211
- }
212
- /** It fires when the html is changed */
213
- // change() {
214
- // this.generatePDF();
215
- // this.onChange.emit(this.html);
216
- // }
217
- /** it allows to edit */
218
- toggleEdit() {
219
- this.edit = !this.edit;
220
- }
221
- /**
222
- * it returns if is PdfDocument
223
- */
224
- isPdfDocument() {
225
- return this.pdfDocument !== undefined;
226
- }
227
- /**
228
- * it returns if is Title
229
- */
230
- isTitle() {
231
- return this.title !== undefined;
232
- }
233
- /**
234
- * it returns if is isPdfDoc
235
- */
236
- isPdfDoc() {
237
- return (this.pdfDocument &&
238
- this.pdfDocument.pdfDoc != undefined &&
239
- this.pdfDocument.pdfDoc != null);
240
- }
241
- /**
242
- * it returns if is filename
243
- */
244
- isFilename() {
245
- return this.filename !== undefined;
246
- }
247
- /**
248
- * it returns if is enableEdit
249
- */
250
- isEnableEdit() {
251
- return this.enableEdit == true;
252
- }
253
- /**
254
- * it returns if is edit
255
- */
256
- isEdit() {
257
- return this.edit == true;
258
- }
259
- /**
260
- * it returns if is enableEmail
261
- */
262
- isEnableEmail() {
263
- return this.enableEmail == true;
264
- }
265
- b64toBlob(b64Data, contentType = '', sliceSize = 512) {
266
- const byteArrays = [];
267
- const byteCharacters = atob(b64Data);
268
- for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
269
- const slice = byteCharacters.slice(offset, offset + sliceSize);
270
- const byteNumbers = new Array(slice.length);
271
- for (let i = 0; i < slice.length; i++) {
272
- byteNumbers[i] = slice.charCodeAt(i);
273
- }
274
- const byteArray = new Uint8Array(byteNumbers);
275
- byteArrays.push(byteArray);
276
- }
277
- const blob = new Blob(byteArrays, { type: contentType });
278
- return blob;
279
- }
280
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PdfMergeVisualizerComponent, deps: [{ token: i1.CommonService }, { token: i2.ToastrService }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
281
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PdfMergeVisualizerComponent, selector: "pli-pdf-merge-visualizer", inputs: { lPdfRequest: "lPdfRequest", enableEdit: "enableEdit", title: "title", height: "height", filename: "filename", enableEmail: "enableEmail", urlFile: "urlFile" }, outputs: { onDownload: "onDownload", onSendEmail: "onSendEmail", onPdfRendered: "onPdfRendered" }, usesOnChanges: true, ngImport: i0, template: "<h3 class=\"pdf-visualizer-title\">{{ title }}</h3>\r\n<div class=\"pdf-visualizer-container\">\r\n\t<div class=\"pdf-visualizer-controls\" *ngIf=\"isPdfDocument() === true\">\r\n\t\t<div class=\"row\">\r\n\t\t\t<div class=\"col-md-7\">\r\n\t\t\t\t<div class=\"btn-toolbar\" role=\"toolbar\" aria-label=\"Toolbar with button groups\">\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm mr-2\" role=\"group\" aria-label=\"Second group\">\r\n\t\t\t\t\t\t<!-- zoom in-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\ttitle=\"Acercar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onZoomIn()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-search-plus\"></span>\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t<!-- zoom out-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\ttitle=\"Alejar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onZoomOut()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-search-minus\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm mr-2\" role=\"group\" aria-label=\"Third group\">\r\n\t\t\t\t\t\t<!--prev -->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onPrevPage()\"\r\n\t\t\t\t\t\t\ttitle=\"Anterior\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-chevron-left\"></span>\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t<!-- pagination-->\r\n\t\t\t\t\t\t<span class=\"btn btn-outline-secondary\" *ngIf=\"isPdfDoc() === true\">\r\n\t\t\t\t\t\t\tP\u00E1gina: {{ pdfDocument.pageNum }} / {{ pdfDocument.pdfDoc.numPages }}\r\n\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t<!--next -->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onNextPage()\"\r\n\t\t\t\t\t\t\ttitle=\"Siguiente\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-chevron-right\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm\" role=\"group\" aria-label=\"First group\">\r\n\t\t\t\t\t\t<!-- download-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t[download]=\"filename\"\r\n\t\t\t\t\t\t\t*ngIf=\"isFilename() === true\"\r\n\t\t\t\t\t\t\t(click)=\"download()\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttitle=\"Descargar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<!-- [href]=\"\r\n\t\t\t\t\t\t\t\tsanitization.bypassSecurityTrustUrl(\r\n\t\t\t\t\t\t\t\t\t'data:application/pdf;base64,' + this.base64\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\" -->\r\n\t\t\t\t\t\t\t<span class=\"fa fa-download\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t<!-- TODO - Check functionality -->\r\n\t\t\t\t\t\t<!-- toggle edit-->\r\n\t\t\t\t\t\t<!-- <a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t*ngIf=\"isEnableEdit() === true\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttitle=\"Editar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\t(click)=\"toggleEdit()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-edit\"></span>\r\n\t\t\t\t\t\t</a> -->\r\n\r\n\t\t\t\t\t\t<!-- generate pdf-->\r\n\t\t\t\t\t\t<!-- <a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t*ngIf=\"isEdit() === true\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttitle=\"Generar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\t(click)=\"change()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-play\"></span>\r\n\t\t\t\t\t\t</a> -->\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"col-md-5 pull-right\" *ngIf=\"isEnableEmail() === true\">\r\n\t\t\t\t<div class=\"input-group input-group-sm\">\r\n\t\t\t\t\t<label for=\"pdf-visualizer-email\" class=\"pdf\">\r\n\t\t\t\t\t\tEnviar mensaje a\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"email\"\r\n\t\t\t\t\t\tid=\"pdf-visualizer-email\"\r\n\t\t\t\t\t\tname=\"pdf-visualizer-email\"\r\n\t\t\t\t\t\trequired=\"true\"\r\n\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\tplaceholder=\"Correo electr\u00F3nico\"\r\n\t\t\t\t\t\t[(ngModel)]=\"email\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<div class=\"input-group-append\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t(click)=\"sendEmail()\"\r\n\t\t\t\t\t\t\ttitle=\"Enviar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\t\tsrc=\"http://giro360.co/zona360/colfuturo/PLIC/img/export.svg\"\r\n\t\t\t\t\t\t\t\talt=\"\"\r\n\t\t\t\t\t\t\t\twidth=\"16\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"pdf-visualizer-dashboard\">\r\n\t\t<div class=\"row\">\r\n\t\t\t<!-- <div class=\"col-md-5\" *ngIf=\"isEdit() === true\">\r\n\t\t\t\t<textarea\r\n\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t[style.height]=\"getHeight()\"\r\n\t\t\t\t\tstyle=\"resize:vertical;\"\r\n\t\t\t\t\t[(ngModel)]=\"html\"\r\n\t\t\t\t></textarea>\r\n\t\t\t</div> -->\r\n\t\t\t<div [ngClass]=\"{ 'col-md-7': edit === true, 'col-md-12': !edit }\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tid=\"pdf-scrollable\"\r\n\t\t\t\t\tclass=\"pdf-visualizer-scrollable\"\r\n\t\t\t\t\t[style.height]=\"getHeight()\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<canvas id=\"pdf-canvas\" class=\"pdf-visualizer-canvas\"> </canvas>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [".pdf-visualizer-container{border:1px solid #eee;margin:10px 0}.pdf-visualizer-dashboard,.pdf-visualizer-controls{background-color:#f5f5f5;padding:15px}.pdf-visualizer-dashboard{border-bottom:1px solid #eee;border-top:1px solid #eee}.pdf-visualizer-title{font-size:1.4rem;color:red;text-align:center;margin-bottom:1em}.pdf-visualizer-canvas{cursor:move}.text-align-center{text-align:center}.text-align-left{text-align:left}.text-align-right{text-align:right}.margin-left{margin-left:5px}.pdf-visualizer-scrollable{overflow:hidden;text-align:center}label.pdf{margin-right:.6em;line-height:24px}button.btn-outline-secondary{height:26px;line-height:12px!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
282
- }
283
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PdfMergeVisualizerComponent, decorators: [{
284
- type: Component,
285
- args: [{ selector: 'pli-pdf-merge-visualizer', template: "<h3 class=\"pdf-visualizer-title\">{{ title }}</h3>\r\n<div class=\"pdf-visualizer-container\">\r\n\t<div class=\"pdf-visualizer-controls\" *ngIf=\"isPdfDocument() === true\">\r\n\t\t<div class=\"row\">\r\n\t\t\t<div class=\"col-md-7\">\r\n\t\t\t\t<div class=\"btn-toolbar\" role=\"toolbar\" aria-label=\"Toolbar with button groups\">\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm mr-2\" role=\"group\" aria-label=\"Second group\">\r\n\t\t\t\t\t\t<!-- zoom in-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\ttitle=\"Acercar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onZoomIn()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-search-plus\"></span>\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t<!-- zoom out-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\ttitle=\"Alejar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onZoomOut()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-search-minus\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm mr-2\" role=\"group\" aria-label=\"Third group\">\r\n\t\t\t\t\t\t<!--prev -->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onPrevPage()\"\r\n\t\t\t\t\t\t\ttitle=\"Anterior\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-chevron-left\"></span>\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t<!-- pagination-->\r\n\t\t\t\t\t\t<span class=\"btn btn-outline-secondary\" *ngIf=\"isPdfDoc() === true\">\r\n\t\t\t\t\t\t\tP\u00E1gina: {{ pdfDocument.pageNum }} / {{ pdfDocument.pdfDoc.numPages }}\r\n\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t<!--next -->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onNextPage()\"\r\n\t\t\t\t\t\t\ttitle=\"Siguiente\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-chevron-right\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm\" role=\"group\" aria-label=\"First group\">\r\n\t\t\t\t\t\t<!-- download-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t[download]=\"filename\"\r\n\t\t\t\t\t\t\t*ngIf=\"isFilename() === true\"\r\n\t\t\t\t\t\t\t(click)=\"download()\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttitle=\"Descargar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<!-- [href]=\"\r\n\t\t\t\t\t\t\t\tsanitization.bypassSecurityTrustUrl(\r\n\t\t\t\t\t\t\t\t\t'data:application/pdf;base64,' + this.base64\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\" -->\r\n\t\t\t\t\t\t\t<span class=\"fa fa-download\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t<!-- TODO - Check functionality -->\r\n\t\t\t\t\t\t<!-- toggle edit-->\r\n\t\t\t\t\t\t<!-- <a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t*ngIf=\"isEnableEdit() === true\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttitle=\"Editar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\t(click)=\"toggleEdit()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-edit\"></span>\r\n\t\t\t\t\t\t</a> -->\r\n\r\n\t\t\t\t\t\t<!-- generate pdf-->\r\n\t\t\t\t\t\t<!-- <a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t*ngIf=\"isEdit() === true\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttitle=\"Generar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\t(click)=\"change()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-play\"></span>\r\n\t\t\t\t\t\t</a> -->\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"col-md-5 pull-right\" *ngIf=\"isEnableEmail() === true\">\r\n\t\t\t\t<div class=\"input-group input-group-sm\">\r\n\t\t\t\t\t<label for=\"pdf-visualizer-email\" class=\"pdf\">\r\n\t\t\t\t\t\tEnviar mensaje a\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"email\"\r\n\t\t\t\t\t\tid=\"pdf-visualizer-email\"\r\n\t\t\t\t\t\tname=\"pdf-visualizer-email\"\r\n\t\t\t\t\t\trequired=\"true\"\r\n\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\tplaceholder=\"Correo electr\u00F3nico\"\r\n\t\t\t\t\t\t[(ngModel)]=\"email\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<div class=\"input-group-append\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t(click)=\"sendEmail()\"\r\n\t\t\t\t\t\t\ttitle=\"Enviar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\t\tsrc=\"http://giro360.co/zona360/colfuturo/PLIC/img/export.svg\"\r\n\t\t\t\t\t\t\t\talt=\"\"\r\n\t\t\t\t\t\t\t\twidth=\"16\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"pdf-visualizer-dashboard\">\r\n\t\t<div class=\"row\">\r\n\t\t\t<!-- <div class=\"col-md-5\" *ngIf=\"isEdit() === true\">\r\n\t\t\t\t<textarea\r\n\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t[style.height]=\"getHeight()\"\r\n\t\t\t\t\tstyle=\"resize:vertical;\"\r\n\t\t\t\t\t[(ngModel)]=\"html\"\r\n\t\t\t\t></textarea>\r\n\t\t\t</div> -->\r\n\t\t\t<div [ngClass]=\"{ 'col-md-7': edit === true, 'col-md-12': !edit }\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tid=\"pdf-scrollable\"\r\n\t\t\t\t\tclass=\"pdf-visualizer-scrollable\"\r\n\t\t\t\t\t[style.height]=\"getHeight()\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<canvas id=\"pdf-canvas\" class=\"pdf-visualizer-canvas\"> </canvas>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [".pdf-visualizer-container{border:1px solid #eee;margin:10px 0}.pdf-visualizer-dashboard,.pdf-visualizer-controls{background-color:#f5f5f5;padding:15px}.pdf-visualizer-dashboard{border-bottom:1px solid #eee;border-top:1px solid #eee}.pdf-visualizer-title{font-size:1.4rem;color:red;text-align:center;margin-bottom:1em}.pdf-visualizer-canvas{cursor:move}.text-align-center{text-align:center}.text-align-left{text-align:left}.text-align-right{text-align:right}.margin-left{margin-left:5px}.pdf-visualizer-scrollable{overflow:hidden;text-align:center}label.pdf{margin-right:.6em;line-height:24px}button.btn-outline-secondary{height:26px;line-height:12px!important}\n"] }]
286
- }], ctorParameters: () => [{ type: i1.CommonService }, { type: i2.ToastrService }, { type: i3.DomSanitizer }], propDecorators: { lPdfRequest: [{
287
- type: Input
288
- }], enableEdit: [{
289
- type: Input
290
- }], title: [{
291
- type: Input
292
- }], height: [{
293
- type: Input
294
- }], filename: [{
295
- type: Input
296
- }], enableEmail: [{
297
- type: Input
298
- }], urlFile: [{
299
- type: Input
300
- }], onDownload: [{
301
- type: Output
302
- }], onSendEmail: [{
303
- type: Output
304
- }], onPdfRendered: [{
305
- type: Output
306
- }] } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLW1lcmdlLXZpc3VhbGl6ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcGxpLWNvbW1vbnMvc3JjL2xpYi9jb21wb25lbnRzL3BkZi1tZXJnZS12aXN1YWxpemVyL3BkZi1tZXJnZS12aXN1YWxpemVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy9wZGYtbWVyZ2UtdmlzdWFsaXplci9wZGYtbWVyZ2UtdmlzdWFsaXplci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUdULEtBQUssRUFFTCxZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxNQUFNLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBYyxNQUFNLGFBQWEsQ0FBQzs7Ozs7OztBQUtsRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLG9GQUFvRjtBQU1wRixNQUFNLE9BQU8sMkJBQTJCO0lBQ3ZDLGdDQUFnQzthQUN6QixtQkFBYyxHQUFHLEdBQUcsQUFBTixDQUFPO0lBcUM1QixZQUNXLGFBQTRCLEVBQzlCLGFBQTRCLEVBQzdCLFlBQTBCO1FBRnZCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzdCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBcENsQyw4Q0FBOEM7UUFDckMsZUFBVSxHQUFZLEtBQUssQ0FBQyxDQUFDLDZCQUE2QjtRQVduRSxpREFBaUQ7UUFDdkMsZUFBVSxHQUFzQixJQUFJ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R0EzVFcsMkJBQTJCO21HQUEzQiwyQkFBMkIsa1dDekJ4QyxrOUxBd0tBOzs0RkQvSWEsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNDLDBCQUEwQjt5SUFTM0IsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdE9uQ2hhbmdlcyxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG5cdElucHV0LFxyXG5cdFNpbXBsZUNoYW5nZSxcclxuXHRFdmVudEVtaXR0ZXIsXHJcblx0T3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIFBERkpTXyBmcm9tICdwZGZqcy1kaXN0L2J1aWxkL3BkZi5taW4ubWpzJztcclxuaW1wb3J0ICogYXMgcGFuem9vbV8gZnJvbSAncGFuem9vbS9kaXN0L3Bhbnpvb20nO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZGZEb2N1bWVudCwgVXRpbFN0cmluZywgUmVxdWVzdFBkZiB9IGZyb20gJ25nLXBsaS11dGlsJztcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5cclxuY29uc3QgUERGSlMgPSBQREZKU187XHJcbmNvbnN0IHBhbnpvb20gPSBwYW56b29tXztcclxuLyoqIFBkZiB2aXN1YWxpemVyIFJlZmFjdG9yIC0gVE9ETyBpbXByb3ZlIGxvZ2ljIGFuZCBjaGVjayB0aGUgZWRpdCBmdW5jdGlvbmFsaXR5ICovXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAncGxpLXBkZi1tZXJnZS12aXN1YWxpemVyJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vcGRmLW1lcmdlLXZpc3VhbGl6ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL3BkZi1tZXJnZS12aXN1YWxpemVyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGRmTWVyZ2VWaXN1YWxpemVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHQvKiogRGVmYXVsdCB2aXN1YWxpemVyIGhlaWdodCAqL1xyXG5cdHN0YXRpYyBERUZBVUxUX0hFSUdIVCA9IDUwMDtcclxuXHJcblx0LyoqIFBkZnMgdG8gYmUgZ2VuZXJhdGVkIGFuZCBtZXJnZWQgKi9cclxuXHRASW5wdXQoKSBsUGRmUmVxdWVzdDogUmVxdWVzdFBkZltdO1xyXG5cdC8qKiBJdCB2ZXJpZmllcyBpZiBpcyBwb3NzaWJsZSB0byBlZGl0IGh0bWwgKi9cclxuXHRASW5wdXQoKSBlbmFibGVFZGl0OiBib29sZWFuID0gZmFsc2U7IC8vIFRPRE8gLSBDaGVjayBmdW5jdGlvbmFsaXR5XHJcblx0LyoqIHRpdGxlIG9mIHRoZSBwZGYgKi9cclxuXHRASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG5cdC8qKiB0aGUgaGVpZ2h0IG9mIHRoZSBwZGYgY2FudmFzICovXHJcblx0QElucHV0KCkgaGVpZ2h0OiBudW1iZXI7XHJcblx0LyoqIFRoZSBmaWxlbmFtZSBvZiB0aGUgcGRmICovXHJcblx0QElucHV0KCkgZmlsZW5hbWU6IHN0cmluZztcclxuXHQvKiogSXQgdmVyaWZpZXMgaWYgaXQgYWxsb3dzIHRvIHNlbmQgdGhlIGVtYWlsICovXHJcblx0QElucHV0KCkgZW5hYmxlRW1haWw6IGJvb2xlYW47XHJcblx0LyoqIFRoZSB1cmwgb2YgdGhlIHBkZiAqL1xyXG5cdEBJbnB1dCgpIHVybEZpbGU6IHN0cmluZztcclxuXHQvKiogSXQgZmlyZXMgd2hlbiB0aGUgZmlsZSBoYXMgYmVlbiBkb3dubG9hZGVkICovXHJcblx0QE91dHB1dCgpIG9uRG93bmxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0LyoqIEl0IGZpcmVzIHdoZW4gdGhlIG5hbWUgaGFzIGJlZW4gc2VudCAqL1xyXG5cdEBPdXRwdXQoKSBvblNlbmRFbWFpbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gVE9ETyAtIENoZWNrIGZ1bmN0aW9uYWxpdHlcclxuXHQvKiogSXQgZmlyZXMgd2hlbiB0aGUgbmFtZSBoYXMgYmVlbiBzZW50ICovXHJcblx0QE91dHB1dCgpIG9uUGRmUmVuZGVyZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0LyoqIEl0IGZpcmVzIHdoZW4gdGhlIGh0bWwgaGFzIGJlZW4gbW9kaWZpZWQgKi9cclxuXHQvLyBAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG5cdC8qKiBFbWFpbCB0aGF0IHdpbGwgYmUgc2VuZGVkICovXHJcblx0ZW1haWw6IHN0cmluZztcclxuXHQvKiogYmFzZTY0IGFzIHJlc3VsdCBvZiBodG1sIDIgcGRmICovXHJcblx0YmFzZTY0OiBzdHJpbmc7IC8vIFRPRE8gLSBDaGVjayBmdW5jdGlvbmFsaXR5XHJcblx0LyoqIEl0IGFsbG93cyB0byBlZGl0IGh0bWwgKi8gZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBpdCB2ZXJpZmllcyBpZiBjb21wb25lbnQgaXMgcmVhZHkgKi9cclxuXHRyZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250aW5hcyB0aGUgYWJzdHJhY3Rpb24gb2YgcGRmIGRvY3VtZW50ICovXHJcblx0cGRmRG9jdW1lbnQ6IFBkZkRvY3VtZW50O1xyXG5cdC8qKiBpdCBjb250YWlucyB0aGUgaWQgb2YgY2FudmFzICovXHJcblx0aWRfY2FudmFzOiBzdHJpbmcgPSAncGRmLWNhbnZhcyc7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJvdGVjdGVkIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRhb3N0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXHJcblx0XHRwdWJsaWMgc2FuaXRpemF0aW9uOiBEb21TYW5pdGl6ZXJcclxuXHQpIHt9XHJcblxyXG5cdC8vIGl0IHJlc29sdmVzIHdoZW4gdGhlIGh0bWwgaXMgY2hhbmdlZFxyXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGxQZGZSZXF1ZXN0OiBTaW1wbGVDaGFuZ2UgPSBjaGFuZ2VzLmxQZGZSZXF1ZXN0O1xyXG5cdFx0Y29uc3QgdXJsRmlsZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlcy51cmxGaWxlO1xyXG5cdFx0aWYgKGxQZGZSZXF1ZXN0ICYmIGxQZGZSZXF1ZXN0LmN1cnJlbnRWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLmdlbmVyYXRlUERGKCk7XHJcblx0XHR9IGVsc2UgaWYgKHVybEZpbGUgJiYgdXJsRmlsZS5jdXJyZW50VmFsdWUpIHtcclxuXHRcdFx0dGhpcy51cmxGaWxlID0gdXJsRmlsZS5jdXJyZW50VmFsdWU7XHJcblx0XHRcdHRoaXMuZ2VuZXJhdGVQREYoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucmVhZHkgPSBmYWxzZTtcclxuXHRcdFx0aWYgKHRoaXMucGRmRG9jdW1lbnQgJiYgdGhpcy5wZGZEb2N1bWVudC5jYW52YXMpIHtcclxuXHRcdFx0XHRsZXQgY2FudmFzID0gdGhpcy5wZGZEb2N1bWVudC5jYW52YXM7XHJcblx0XHRcdFx0dmFyIGN0eCA9IHRoaXMucGRmRG9jdW1lbnQuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblx0XHRcdFx0Y3R4LmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG5cdFx0XHRcdHRoaXMucGRmRG9jdW1lbnQgPSB1bmRlZmluZWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKiBJdCBnZW5lcmF0ZXMgdGhlIHBkZiAqL1xyXG5cdGdlbmVyYXRlUERGKCkge1xyXG5cdFx0aWYgKFV0aWxTdHJpbmcuaXNWYWxpZCh0aGlzLnVybEZpbGUpKSB7XHJcblx0XHRcdHRoaXMuY29tbW9uU2VydmljZS5nZXRCYXNlNjRQZGZCeVVybCh0aGlzLnVybEZpbGUpLnN1YnNjcmliZShcclxuXHRcdFx0XHQocmVzdWx0KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dCYXNlNjRQZGYocmVzdWx0KTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHJlbmRlciBQREYnLCBlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLmxQZGZSZXF1ZXN0KSB7XHJcblx0XHRcdC8vIGlmIGh0bWwgd2FzIGNoYW5nZWRcclxuXHRcdFx0dGhpcy5jb21tb25TZXJ2aWNlLmdldEJhc2U2NFBkZkxpc3QodGhpcy5sUGRmUmVxdWVzdCkuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdChyZXN1bHQpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuc2hvd0Jhc2U2NFBkZihyZXN1bHQpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcmVuZGVyIFBERicsIGVycm9yKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzaG93QmFzZTY0UGRmKHJlc3VsdCkge1xyXG5cdFx0dGhpcy5iYXNlNjQgPSByZXN1bHQuYmFzZTY0O1xyXG5cdFx0dmFyIGRhdGEgPSBhdG9iKHRoaXMuYmFzZTY0KTtcclxuXHRcdFBERkpTLndvcmtlclNyYyA9ICcvL21vemlsbGEuZ2l0aHViLmlvL3BkZi5qcy9idWlsZC9wZGYud29ya2VyLmpzJztcclxuXHRcdC8vIGNyZWF0ZSBpbnN0YW5jZSBvZiBQZGZEb2N1bWVudCB3aXRoIHRoZSBpZCBvZiBjYW52YXNcclxuXHRcdHRoaXMucGRmRG9jdW1lbnQgPSBuZXcgUGRmRG9jdW1lbnQodGhpcy5pZF9jYW52YXMpO1xyXG5cclxuXHRcdC8vIGFzc2lnbiB2YXJpYWJsZXMgb3V0IG9mIHNjb3BlXHJcblx0XHRsZXQgcGRmZG9jdW1lbnQ6IFBkZkRvY3VtZW50ID0gdGhpcy5wZGZEb2N1bWVudDtcclxuXHRcdHBhbnpvb20odGhpcy5wZGZEb2N1bWVudC5jYW52YXMsIHtcclxuXHRcdFx0c21vb3RoU2Nyb2xsOiBmYWxzZVxyXG5cdFx0fSk7XHJcblx0XHRsZXQgc2VsZiA9IHRoaXM7XHJcblx0XHRsZXQgcmVhZHkgPSB0aGlzLnJlYWR5O1xyXG5cdFx0UERGSlMuZ2V0RG9jdW1lbnQoeyBkYXRhOiBkYXRhIH0pLnRoZW4oZnVuY3Rpb24gKHBkZkRvY18pIHtcclxuXHRcdFx0cGRmZG9jdW1lbnQucGRmRG9jID0gcGRmRG9jXztcclxuXHRcdFx0c2VsZi5yZW5kZXJQYWdlKDEpO1xyXG5cdFx0XHRyZWFkeSA9IHRydWU7XHJcblx0XHRcdHNlbGYub25QZGZSZW5kZXJlZC5lbWl0KHRydWUpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdC8qKiBJdCByZXR1cm5zIHRoZSBoZWlnaHQgICovXHJcblx0Z2V0SGVpZ2h0KCk6IHN0cmluZyB7XHJcblx0XHRpZiAodGhpcy5oZWlnaHQpIHJldHVybiB0aGlzLmhlaWdodCArICdweCc7XHJcblx0XHRyZXR1cm4gUGRmTWVyZ2VWaXN1YWxpemVyQ29tcG9uZW50LkRFRkFVTFRfSEVJR0hUICsgJ3B4JztcclxuXHR9XHJcblxyXG5cdC8qKiBHZXQgcGFnZSBpbmZvIGZyb20gZG9jdW1lbnQsIHJlc2l6ZSBjYW52YXMgYWNjb3JkaW5nbHksIGFuZCByZW5kZXIgcGFnZS4gKi9cclxuXHRyZW5kZXJQYWdlKG51bSkge1xyXG5cdFx0dGhpcy5wZGZEb2N1bWVudC5wYWdlUmVuZGVyaW5nID0gdHJ1ZTtcclxuXHRcdC8vIGFzc2lnbiB2YXJpYWJsZXMgb3V0IG9mIHNjb3BlXHJcblx0XHRsZXQgc2VsZlBkZkRvY3VtZW50OiBQZGZEb2N1bWVudCA9IHRoaXMucGRmRG9jdW1lbnQ7XHJcblx0XHRsZXQgc2VsZiA9IHRoaXM7XHJcblx0XHQvLyBVc2luZyBwcm9taXNlIHRvIGZldGNoIHRoZSBwYWdlXHJcblx0XHR0aGlzLnBkZkRvY3VtZW50LnBkZkRvYy5nZXRQYWdlKG51bSkudGhlbihmdW5jdGlvbiAocGFnZSkge1xyXG5cdFx0XHR2YXIgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHNlbGZQZGZEb2N1bWVudC5zY2FsZSk7XHJcblx0XHRcdHNlbGZQZGZEb2N1bWVudC5jYW52YXMuaGVpZ2h0ID0gdmlld3BvcnQuaGVpZ2h0O1xyXG5cdFx0XHRzZWxmUGRmRG9jdW1lbnQuY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7XHJcblxyXG5cdFx0XHQvLyBSZW5kZXIgUERGIHBhZ2UgaW50byBjYW52YXMgY29udGV4dFxyXG5cdFx0XHR2YXIgcmVuZGVyQ29udGV4dCA9IHtcclxuXHRcdFx0XHRjYW52YXNDb250ZXh0OiBzZWxmUGRmRG9jdW1lbnQuY2FudmFzLmdldENvbnRleHQoJzJkJyksXHJcblx0XHRcdFx0dmlld3BvcnQ6IHZpZXdwb3J0XHJcblx0XHRcdH07XHJcblx0XHRcdHZhciByZW5kZXJUYXNrID0gcGFnZS5yZW5kZXIocmVuZGVyQ29udGV4dCk7XHJcblxyXG5cdFx0XHQvLyBXYWl0IGZvciByZW5kZXJpbmcgdG8gZmluaXNoXHJcblx0XHRcdHJlbmRlclRhc2sucHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRzZWxmUGRmRG9jdW1lbnQucGFnZVJlbmRlcmluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdGlmIChzZWxmUGRmRG9jdW1lbnQucGFnZU51bVBlbmRpbmcgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdC8vIE5ldyBwYWdlIHJlbmRlcmluZyBpcyBwZW5kaW5nXHJcblx0XHRcdFx0XHRzZWxmLnJlbmRlclBhZ2Uoc2VsZlBkZkRvY3VtZW50LnBhZ2VOdW1QZW5kaW5nKTtcclxuXHRcdFx0XHRcdHNlbGZQZGZEb2N1bWVudC5wYWdlTnVtUGVuZGluZyA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSWYgYW5vdGhlciBwYWdlIHJlbmRlcmluZyBpbiBwcm9ncmVzcywgd2FpdHMgdW50aWwgdGhlIHJlbmRlcmluZyBpc1xyXG5cdCAqIGZpbmlzZWQuIE90aGVyd2lzZSwgZXhlY3V0ZXMgcmVuZGVyaW5nIGltbWVkaWF0ZWx5LlxyXG5cdCAqL1xyXG5cdHF1ZXVlUmVuZGVyUGFnZShudW0pIHtcclxuXHRcdGlmICh0aGlzLnBkZkRvY3VtZW50LnBhZ2VSZW5kZXJpbmcpIHtcclxuXHRcdFx0dGhpcy5wZGZEb2N1bWVudC5wYWdlTnVtUGVuZGluZyA9IG51bTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucmVuZGVyUGFnZShudW0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGlzcGxheXMgcHJldmlvdXMgcGFnZS5cclxuXHQgKi9cclxuXHRvblByZXZQYWdlKCkge1xyXG5cdFx0aWYgKCF0aGlzLnBkZkRvY3VtZW50IHx8IHRoaXMucGRmRG9jdW1lbnQucGFnZU51bSA8PSAxKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMucGRmRG9jdW1lbnQucGFnZU51bS0tO1xyXG5cdFx0dGhpcy5xdWV1ZVJlbmRlclBhZ2UodGhpcy5wZGZEb2N1bWVudC5wYWdlTnVtKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERpc3BsYXlzIG5leHQgcGFnZS5cclxuXHQgKi9cclxuXHRvbk5leHRQYWdlKCkge1xyXG5cdFx0aWYgKCF0aGlzLnBkZkRvY3VtZW50IHx8IHRoaXMucGRmRG9jdW1lbnQucGFnZU51bSA+PSB0aGlzLnBkZkRvY3VtZW50LnBkZkRvYy5udW1QYWdlcykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnBkZkRvY3VtZW50LnBhZ2VOdW0rKztcclxuXHRcdHRoaXMucXVldWVSZW5kZXJQYWdlKHRoaXMucGRmRG9jdW1lbnQucGFnZU51bSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEaXNwbGF5cyBab29tIEluLlxyXG5cdCAqL1xyXG5cdG9uWm9vbUluKCkge1xyXG5cdFx0aWYgKCF0aGlzLnBkZkRvY3VtZW50IHx8IHRoaXMucGRmRG9jdW1lbnQuc2NhbGUgPj0gMykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnBkZkRvY3VtZW50LnNjYWxlID0gdGhpcy5wZGZEb2N1bWVudC5zY2FsZSArIDAuMjtcclxuXHRcdHRoaXMucXVldWVSZW5kZXJQYWdlKHRoaXMucGRmRG9jdW1lbnQucGFnZU51bSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEaXNwbGF5cyBab29tIE91dC5cclxuXHQgKi9cclxuXHRvblpvb21PdXQoKSB7XHJcblx0XHRpZiAoIXRoaXMucGRmRG9jdW1lbnQgfHwgdGhpcy5wZGZEb2N1bWVudC5zY2FsZSA8PSAwLjQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5wZGZEb2N1bWVudC5zY2FsZSA9IHRoaXMucGRmRG9jdW1lbnQuc2NhbGUgLSAwLjI7XHJcblx0XHR0aGlzLnF1ZXVlUmVuZGVyUGFnZSh0aGlzLnBkZkRvY3VtZW50LnBhZ2VOdW0pO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHNlbmRzIHRoZSBkb2N1bWVudCBieSBlbWFpbCAqL1xyXG5cdHNlbmRFbWFpbCgpIHtcclxuXHRcdGlmICh0aGlzLmVtYWlsICYmIFV0aWxTdHJpbmcudmFsaWRhdGVFbWFpbCh0aGlzLmVtYWlsKSkge1xyXG5cdFx0XHR0aGlzLm9uU2VuZEVtYWlsLmVtaXQoe1xyXG5cdFx0XHRcdHRvOiB0aGlzLmVtYWlsLFxyXG5cdFx0XHRcdGJhc2U2NDogdGhpcy5iYXNlNjRcclxuXHRcdFx0fSk7XHJcblx0XHRcdHRoaXMuZW1haWwgPSAnJztcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy50YW9zdHJTZXJ2aWNlLndhcm5pbmcoJ0NvcnJlbyBlbGVjdHLDs25pY28gZXMgaW5jb3JyZWN0bycpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IGZpcmVzIHRoZSBldmVudCBkb3dubG9hZCAqL1xyXG5cdGRvd25sb2FkKCkge1xyXG5cdFx0Y29uc3QgY29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vcGRmJztcclxuXHRcdGNvbnN0IGI2NERhdGEgPSB0aGlzLmJhc2U2NDtcclxuXHRcdGNvbnN0IGJsb2IgPSB0aGlzLmI2NHRvQmxvYihiNjREYXRhLCBjb250ZW50VHlwZSk7XHJcblx0XHRjb25zdCBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHRcdHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG5cdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuXHRcdGEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdGEuaHJlZiA9IGJsb2JVcmw7XHJcblx0XHRhLmRvd25sb2FkID0gdGhpcy5maWxlbmFtZTtcclxuXHRcdGEuY2xpY2soKTtcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHR3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcclxuXHRcdFx0ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcclxuXHRcdFx0dGhpcy5vbkRvd25sb2FkLmVtaXQoe1xyXG5cdFx0XHRcdGJhc2U2NDogdGhpcy5iYXNlNjRcclxuXHRcdFx0fSk7XHJcblx0XHR9LCAyMDApO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IGZpcmVzIHdoZW4gdGhlIGh0bWwgaXMgY2hhbmdlZCAqL1xyXG5cdC8vIGNoYW5nZSgpIHtcclxuXHQvLyBcdHRoaXMuZ2VuZXJhdGVQREYoKTtcclxuXHQvLyBcdHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLmh0bWwpO1xyXG5cdC8vIH1cclxuXHJcblx0LyoqIGl0IGFsbG93cyB0byBlZGl0ICovXHJcblx0dG9nZ2xlRWRpdCgpIHtcclxuXHRcdHRoaXMuZWRpdCA9ICF0aGlzLmVkaXQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBpdCByZXR1cm5zIGlmIGlzIFBkZkRvY3VtZW50XHJcblx0ICovXHJcblx0aXNQZGZEb2N1bWVudCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnBkZkRvY3VtZW50ICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBpdCByZXR1cm5zIGlmIGlzIFRpdGxlXHJcblx0ICovXHJcblx0aXNUaXRsZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnRpdGxlICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBpdCByZXR1cm5zIGlmIGlzIGlzUGRmRG9jXHJcblx0ICovXHJcblx0aXNQZGZEb2MoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHR0aGlzLnBkZkRvY3VtZW50ICYmXHJcblx0XHRcdHRoaXMucGRmRG9jdW1lbnQucGRmRG9jICE9IHVuZGVmaW5lZCAmJlxyXG5cdFx0XHR0aGlzLnBkZkRvY3VtZW50LnBkZkRvYyAhPSBudWxsXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogaXQgcmV0dXJucyBpZiBpcyBmaWxlbmFtZVxyXG5cdCAqL1xyXG5cdGlzRmlsZW5hbWUoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5maWxlbmFtZSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogaXQgcmV0dXJucyBpZiBpcyBlbmFibGVFZGl0XHJcblx0ICovXHJcblx0aXNFbmFibGVFZGl0KCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW5hYmxlRWRpdCA9PSB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogaXQgcmV0dXJucyBpZiBpcyBlZGl0XHJcblx0ICovXHJcblx0aXNFZGl0KCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZWRpdCA9PSB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogaXQgcmV0dXJucyBpZiBpcyBlbmFibGVFbWFpbFxyXG5cdCAqL1xyXG5cdGlzRW5hYmxlRW1haWwoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbmFibGVFbWFpbCA9PSB0cnVlO1xyXG5cdH1cclxuXHJcblx0YjY0dG9CbG9iKGI2NERhdGEsIGNvbnRlbnRUeXBlID0gJycsIHNsaWNlU2l6ZSA9IDUxMikge1xyXG5cdFx0Y29uc3QgYnl0ZUFycmF5cyA9IFtdO1xyXG5cdFx0Y29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xyXG5cdFx0Zm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBvZmZzZXQgKz0gc2xpY2VTaXplKSB7XHJcblx0XHRcdGNvbnN0IHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xyXG5cdFx0XHRjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Ynl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcclxuXHRcdFx0Ynl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoYnl0ZUFycmF5cywgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcclxuXHRcdHJldHVybiBibG9iO1xyXG5cdH1cclxufVxyXG4iLCI8aDMgY2xhc3M9XCJwZGYtdmlzdWFsaXplci10aXRsZVwiPnt7IHRpdGxlIH19PC9oMz5cclxuPGRpdiBjbGFzcz1cInBkZi12aXN1YWxpemVyLWNvbnRhaW5lclwiPlxyXG5cdDxkaXYgY2xhc3M9XCJwZGYtdmlzdWFsaXplci1jb250cm9sc1wiICpuZ0lmPVwiaXNQZGZEb2N1bWVudCgpID09PSB0cnVlXCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtN1wiPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tdG9vbGJhclwiIHJvbGU9XCJ0b29sYmFyXCIgYXJpYS1sYWJlbD1cIlRvb2xiYXIgd2l0aCBidXR0b24gZ3JvdXBzXCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlNlY29uZCBncm91cFwiPlxyXG5cdFx0XHRcdFx0XHQ8IS0tIHpvb20gaW4tLT5cclxuXHRcdFx0XHRcdFx0PGFcclxuXHRcdFx0XHRcdFx0XHRocmVmPVwiSmF2YXNjcmlwdDo7XCJcclxuXHRcdFx0XHRcdFx0XHR0aXRsZT1cIkFjZXJjYXJcIlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS1wbGFjZW1lbnQ9XCJ0b3BcIlxyXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXHJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cIm9uWm9vbUluKClcIlxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1zZWFyY2gtcGx1c1wiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9hPlxyXG5cclxuXHRcdFx0XHRcdFx0PCEtLSB6b29tIG91dC0tPlxyXG5cdFx0XHRcdFx0XHQ8YVxyXG5cdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhc2NyaXB0OjtcIlxyXG5cdFx0XHRcdFx0XHRcdHRpdGxlPVwiQWxlamFyXCJcclxuXHRcdFx0XHRcdFx0XHRkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEtcGxhY2VtZW50PVwidG9wXCJcclxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxyXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJvblpvb21PdXQoKVwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLXNlYXJjaC1taW51c1wiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtc20gbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUaGlyZCBncm91cFwiPlxyXG5cdFx0XHRcdFx0XHQ8IS0tcHJldiAtLT5cclxuXHRcdFx0XHRcdFx0PGFcclxuXHRcdFx0XHRcdFx0XHRocmVmPVwiSmF2YXNjcmlwdDo7XCJcclxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxyXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJvblByZXZQYWdlKClcIlxyXG5cdFx0XHRcdFx0XHRcdHRpdGxlPVwiQW50ZXJpb3JcIlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS1wbGFjZW1lbnQ9XCJ0b3BcIlxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvYT5cclxuXHJcblx0XHRcdFx0XHRcdDwhLS0gcGFnaW5hdGlvbi0tPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiAqbmdJZj1cImlzUGRmRG9jKCkgPT09IHRydWVcIj5cclxuXHRcdFx0XHRcdFx0XHRQw6FnaW5hOiB7eyBwZGZEb2N1bWVudC5wYWdlTnVtIH19IC8ge3sgcGRmRG9jdW1lbnQucGRmRG9jLm51bVBhZ2VzIH19XHJcblx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHJcblx0XHRcdFx0XHRcdDwhLS1uZXh0IC0tPlxyXG5cdFx0XHRcdFx0XHQ8YVxyXG5cdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhc2NyaXB0OjtcIlxyXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXHJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cIm9uTmV4dFBhZ2UoKVwiXHJcblx0XHRcdFx0XHRcdFx0dGl0bGU9XCJTaWd1aWVudGVcIlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS1wbGFjZW1lbnQ9XCJ0b3BcIlxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0XCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC1zbVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJGaXJzdCBncm91cFwiPlxyXG5cdFx0XHRcdFx0XHQ8IS0tIGRvd25sb2FkLS0+XHJcblx0XHRcdFx0XHRcdDxhXHJcblx0XHRcdFx0XHRcdFx0W2Rvd25sb2FkXT1cImZpbGVuYW1lXCJcclxuXHRcdFx0XHRcdFx0XHQqbmdJZj1cImlzRmlsZW5hbWUoKSA9PT0gdHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImRvd25sb2FkKClcIlxyXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXHJcblx0XHRcdFx0XHRcdFx0dGl0bGU9XCJEZXNjYXJnYXJcIlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS1wbGFjZW1lbnQ9XCJ0b3BcIlxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSBbaHJlZl09XCJcclxuXHRcdFx0XHRcdFx0XHRcdHNhbml0aXphdGlvbi5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0LCcgKyB0aGlzLmJhc2U2NFxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFwiIC0tPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0PCEtLSBUT0RPIC0gQ2hlY2sgZnVuY3Rpb25hbGl0eSAtLT5cclxuXHRcdFx0XHRcdFx0PCEtLSB0b2dnbGUgZWRpdC0tPlxyXG5cdFx0XHRcdFx0XHQ8IS0tIDxhXHJcblx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFzY3JpcHQ6O1wiXHJcblx0XHRcdFx0XHRcdFx0Km5nSWY9XCJpc0VuYWJsZUVkaXQoKSA9PT0gdHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcclxuXHRcdFx0XHRcdFx0XHR0aXRsZT1cIkVkaXRhclwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJcclxuXHRcdFx0XHRcdFx0XHRkYXRhLXBsYWNlbWVudD1cInRvcFwiXHJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cInRvZ2dsZUVkaXQoKVwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWVkaXRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvYT4gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHQ8IS0tIGdlbmVyYXRlIHBkZi0tPlxyXG5cdFx0XHRcdFx0XHQ8IS0tIDxhXHJcblx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFzY3JpcHQ6O1wiXHJcblx0XHRcdFx0XHRcdFx0Km5nSWY9XCJpc0VkaXQoKSA9PT0gdHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcclxuXHRcdFx0XHRcdFx0XHR0aXRsZT1cIkdlbmVyYXJcIlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS1wbGFjZW1lbnQ9XCJ0b3BcIlxyXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJjaGFuZ2UoKVwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLXBsYXlcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvYT4gLS0+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY29sLW1kLTUgcHVsbC1yaWdodFwiICpuZ0lmPVwiaXNFbmFibGVFbWFpbCgpID09PSB0cnVlXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCI+XHJcblx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwicGRmLXZpc3VhbGl6ZXItZW1haWxcIiBjbGFzcz1cInBkZlwiPlxyXG5cdFx0XHRcdFx0XHRFbnZpYXIgbWVuc2FqZSBhXHJcblx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdHR5cGU9XCJlbWFpbFwiXHJcblx0XHRcdFx0XHRcdGlkPVwicGRmLXZpc3VhbGl6ZXItZW1haWxcIlxyXG5cdFx0XHRcdFx0XHRuYW1lPVwicGRmLXZpc3VhbGl6ZXItZW1haWxcIlxyXG5cdFx0XHRcdFx0XHRyZXF1aXJlZD1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHRjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcblx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiQ29ycmVvIGVsZWN0csOzbmljb1wiXHJcblx0XHRcdFx0XHRcdFsobmdNb2RlbCldPVwiZW1haWxcIlxyXG5cdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXHJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cInNlbmRFbWFpbCgpXCJcclxuXHRcdFx0XHRcdFx0XHR0aXRsZT1cIkVudmlhclwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJcclxuXHRcdFx0XHRcdFx0XHRkYXRhLXBsYWNlbWVudD1cInRvcFwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8aW1nXHJcblx0XHRcdFx0XHRcdFx0XHRzcmM9XCJodHRwOi8vZ2lybzM2MC5jby96b25hMzYwL2NvbGZ1dHVyby9QTElDL2ltZy9leHBvcnQuc3ZnXCJcclxuXHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiXHJcblx0XHRcdFx0XHRcdFx0XHR3aWR0aD1cIjE2XCJcclxuXHRcdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG5cclxuXHQ8ZGl2IGNsYXNzPVwicGRmLXZpc3VhbGl6ZXItZGFzaGJvYXJkXCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHRcdDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC01XCIgKm5nSWY9XCJpc0VkaXQoKSA9PT0gdHJ1ZVwiPlxyXG5cdFx0XHRcdDx0ZXh0YXJlYVxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG5cdFx0XHRcdFx0W3N0eWxlLmhlaWdodF09XCJnZXRIZWlnaHQoKVwiXHJcblx0XHRcdFx0XHRzdHlsZT1cInJlc2l6ZTp2ZXJ0aWNhbDtcIlxyXG5cdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJodG1sXCJcclxuXHRcdFx0XHQ+PC90ZXh0YXJlYT5cclxuXHRcdFx0PC9kaXY+IC0tPlxyXG5cdFx0XHQ8ZGl2IFtuZ0NsYXNzXT1cInsgJ2NvbC1tZC03JzogZWRpdCA9PT0gdHJ1ZSwgJ2NvbC1tZC0xMic6ICFlZGl0IH1cIj5cclxuXHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRpZD1cInBkZi1zY3JvbGxhYmxlXCJcclxuXHRcdFx0XHRcdGNsYXNzPVwicGRmLXZpc3VhbGl6ZXItc2Nyb2xsYWJsZVwiXHJcblx0XHRcdFx0XHRbc3R5bGUuaGVpZ2h0XT1cImdldEhlaWdodCgpXCJcclxuXHRcdFx0XHQ+XHJcblx0XHRcdFx0XHQ8Y2FudmFzIGlkPVwicGRmLWNhbnZhc1wiIGNsYXNzPVwicGRmLXZpc3VhbGl6ZXItY2FudmFzXCI+IDwvY2FudmFzPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG48L2Rpdj5cclxuIl19