sigesp 0.9.44-23230418 → 0.9.46-20230713

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 (189) hide show
  1. package/bundles/sigesp.umd.js +77 -45
  2. package/bundles/sigesp.umd.js.map +1 -1
  3. package/bundles/sigesp.umd.min.js +1 -15
  4. package/bundles/sigesp.umd.min.js.map +1 -1
  5. package/esm2015/lib/app/app.component.js +1 -1
  6. package/esm2015/lib/app/app.module.js +1 -1
  7. package/esm2015/lib/core/interfaces/Auditoria.js +1 -1
  8. package/esm2015/lib/core/interfaces/Banco.js +1 -1
  9. package/esm2015/lib/core/interfaces/Catalogo.js +1 -1
  10. package/esm2015/lib/core/interfaces/CentroCosto.js +1 -1
  11. package/esm2015/lib/core/interfaces/Clasificacion.js +1 -1
  12. package/esm2015/lib/core/interfaces/ComprobantePresupuestario.js +1 -1
  13. package/esm2015/lib/core/interfaces/Comunidad.js +1 -1
  14. package/esm2015/lib/core/interfaces/Configuracion.js +1 -1
  15. package/esm2015/lib/core/interfaces/ConfiguracionRPC.js +1 -1
  16. package/esm2015/lib/core/interfaces/ConfiguracionSCG.js +1 -1
  17. package/esm2015/lib/core/interfaces/ConfigurationSPG.js +1 -1
  18. package/esm2015/lib/core/interfaces/Constantes.js +1 -1
  19. package/esm2015/lib/core/interfaces/CuentaEgresos.js +1 -1
  20. package/esm2015/lib/core/interfaces/CuentaIngreso.js +1 -1
  21. package/esm2015/lib/core/interfaces/CuentaIngresoEstructura.js +1 -1
  22. package/esm2015/lib/core/interfaces/CuentaInstitucional.js +1 -1
  23. package/esm2015/lib/core/interfaces/CuentaPresupuesto.js +1 -1
  24. package/esm2015/lib/core/interfaces/CuentasPorPagar.js +1 -1
  25. package/esm2015/lib/core/interfaces/Documento.js +1 -1
  26. package/esm2015/lib/core/interfaces/EntradaSuministro.js +1 -1
  27. package/esm2015/lib/core/interfaces/Especialidad.js +1 -1
  28. package/esm2015/lib/core/interfaces/EstructuraPresupuestaria.js +1 -1
  29. package/esm2015/lib/core/interfaces/FuenteFinanciamiento.js +1 -1
  30. package/esm2015/lib/core/interfaces/IBancoCuentasPorPagar.js +1 -1
  31. package/esm2015/lib/core/interfaces/ITipoDepositos.js +1 -1
  32. package/esm2015/lib/core/interfaces/Integracion.js +1 -1
  33. package/esm2015/lib/core/interfaces/Lugares.js +1 -1
  34. package/esm2015/lib/core/interfaces/Moneda.js +1 -1
  35. package/esm2015/lib/core/interfaces/Nomina.js +1 -1
  36. package/esm2015/lib/core/interfaces/PlanUnicoCuenta.js +1 -1
  37. package/esm2015/lib/core/interfaces/Presupuesto.js +1 -1
  38. package/esm2015/lib/core/interfaces/Proveedor.js +1 -1
  39. package/esm2015/lib/core/interfaces/RecursosHumanos.js +1 -1
  40. package/esm2015/lib/core/interfaces/Request.js +1 -1
  41. package/esm2015/lib/core/interfaces/Response.js +1 -1
  42. package/esm2015/lib/core/interfaces/Seguridad.js +1 -1
  43. package/esm2015/lib/core/interfaces/Servicios.js +1 -1
  44. package/esm2015/lib/core/interfaces/Sistema.js +1 -1
  45. package/esm2015/lib/core/interfaces/Tributos.js +1 -1
  46. package/esm2015/lib/core/interfaces/UnidadTributaria.js +1 -1
  47. package/esm2015/lib/core/interfaces/Usuario.js +1 -1
  48. package/esm2015/lib/core/interfaces/UsuarioPrefijo.js +1 -1
  49. package/esm2015/lib/core/models/CFG/Empresa.model.js +1 -1
  50. package/esm2015/lib/core/models/CFG/Enterprise.model.js +1 -1
  51. package/esm2015/lib/core/models/CFG/MPrefijo.model.js +1 -1
  52. package/esm2015/lib/core/models/CFG/Procede.model.js +1 -1
  53. package/esm2015/lib/core/models/CFG/TasaCambio.model.js +1 -1
  54. package/esm2015/lib/core/models/CFG/comunidad.model.js +1 -1
  55. package/esm2015/lib/core/models/CFG/locations.model.js +1 -1
  56. package/esm2015/lib/core/models/CFG/moneda.model.js +1 -1
  57. package/esm2015/lib/core/models/CFG/userPrefix.model.js +1 -1
  58. package/esm2015/lib/core/models/CXP/MConceptosCXP.model.js +1 -1
  59. package/esm2015/lib/core/models/CXP/MTipoDocumentoCXP.model.js +1 -1
  60. package/esm2015/lib/core/models/RPC/clasification.model.js +1 -1
  61. package/esm2015/lib/core/models/RPC/configuracionRPC.model.js +1 -1
  62. package/esm2015/lib/core/models/RPC/document.model.js +1 -1
  63. package/esm2015/lib/core/models/RPC/proveedores.model.js +1 -1
  64. package/esm2015/lib/core/models/RPC/providerBeneficiary.model.js +1 -1
  65. package/esm2015/lib/core/models/RPC/specialty.model.js +1 -1
  66. package/esm2015/lib/core/models/SCB/bank.model.js +1 -1
  67. package/esm2015/lib/core/models/SCG/IncomeAccount.js +1 -1
  68. package/esm2015/lib/core/models/SCG/accountMarriage.model.js +1 -1
  69. package/esm2015/lib/core/models/SCG/centroCosto.model.js +1 -1
  70. package/esm2015/lib/core/models/SCG/configuracionSCG.model.js +1 -1
  71. package/esm2015/lib/core/models/SCG/cuentaInstitucional.model.js +1 -1
  72. package/esm2015/lib/core/models/SCG/planUnicoCuenta.model.js +1 -1
  73. package/esm2015/lib/core/models/SIV/MDetaContable.model.js +1 -1
  74. package/esm2015/lib/core/models/SIV/MDetaEntrada.model.js +1 -1
  75. package/esm2015/lib/core/models/SIV/MEntradaSuministro.model.js +1 -1
  76. package/esm2015/lib/core/models/SIV/MTipoDepositos.model.js +1 -1
  77. package/esm2015/lib/core/models/SNO/MAnticipoPrestaciones.model.js +1 -1
  78. package/esm2015/lib/core/models/SNO/MArchivoTxtCampo.model.js +1 -1
  79. package/esm2015/lib/core/models/SNO/MArchivosTxt.model.js +1 -1
  80. package/esm2015/lib/core/models/SNO/MAsignacionCargo.model.js +1 -1
  81. package/esm2015/lib/core/models/SNO/MAspectoEvaluacion.model.js +1 -1
  82. package/esm2015/lib/core/models/SNO/MAuditoria.model.js +1 -1
  83. package/esm2015/lib/core/models/SNO/MBeneficiario.model.js +1 -1
  84. package/esm2015/lib/core/models/SNO/MCargaMasiva.model.js +1 -1
  85. package/esm2015/lib/core/models/SNO/MCargosPersonal.model.js +2 -2
  86. package/esm2015/lib/core/models/SNO/MClasificacionObrero.mdel.js +1 -1
  87. package/esm2015/lib/core/models/SNO/MCodigoUnicoRac.model.js +1 -1
  88. package/esm2015/lib/core/models/SNO/MComponete.model.js +1 -1
  89. package/esm2015/lib/core/models/SNO/MConceptoVacaciones.model.js +1 -1
  90. package/esm2015/lib/core/models/SNO/MConceptosNomina.model.js +1 -1
  91. package/esm2015/lib/core/models/SNO/MConceptosPersonalNomina.model.js +1 -1
  92. package/esm2015/lib/core/models/SNO/MConcursante.model.js +1 -1
  93. package/esm2015/lib/core/models/SNO/MConcurso.model.js +1 -1
  94. package/esm2015/lib/core/models/SNO/MConfiguracionSNO.model.js +1 -1
  95. package/esm2015/lib/core/models/SNO/MConstanteNomina.model.js +1 -1
  96. package/esm2015/lib/core/models/SNO/MConstantePersonalNomina.model.js +1 -1
  97. package/esm2015/lib/core/models/SNO/MDedicacion.model.js +1 -1
  98. package/esm2015/lib/core/models/SNO/MDefinicionNomina.model.js +4 -3
  99. package/esm2015/lib/core/models/SNO/MDefinicionesBasicas.model.js +1 -1
  100. package/esm2015/lib/core/models/SNO/MDeudaAnterior.model.js +1 -1
  101. package/esm2015/lib/core/models/SNO/MEncargaduria.model.js +1 -1
  102. package/esm2015/lib/core/models/SNO/MEscalaEvaluacion.model.js +1 -1
  103. package/esm2015/lib/core/models/SNO/MEscalaEvaluacionDt.model.js +1 -1
  104. package/esm2015/lib/core/models/SNO/MEstructuraOrganizativa.model.js +1 -1
  105. package/esm2015/lib/core/models/SNO/MFamiliares.model.js +1 -1
  106. package/esm2015/lib/core/models/SNO/MFeriados.model.js +1 -1
  107. package/esm2015/lib/core/models/SNO/MFideicomiso.model.js +1 -1
  108. package/esm2015/lib/core/models/SNO/MFormacionAcademica.model.js +1 -1
  109. package/esm2015/lib/core/models/SNO/MGrado.model.js +1 -1
  110. package/esm2015/lib/core/models/SNO/MHojaTiempo.model.js +1 -1
  111. package/esm2015/lib/core/models/SNO/MImpuestoSobreRenta.model.js +1 -1
  112. package/esm2015/lib/core/models/SNO/MMetodoBanco.model.js +1 -1
  113. package/esm2015/lib/core/models/SNO/MNominaSimple.model.js +1 -1
  114. package/esm2015/lib/core/models/SNO/MPeriodoNomina.model.js +1 -1
  115. package/esm2015/lib/core/models/SNO/MPermisos.model.js +1 -1
  116. package/esm2015/lib/core/models/SNO/MPersonal.model.js +1 -1
  117. package/esm2015/lib/core/models/SNO/MPersonalJubilado.model.js +1 -1
  118. package/esm2015/lib/core/models/SNO/MPersonalNomina.model.js +1 -1
  119. package/esm2015/lib/core/models/SNO/MPlanHorario.model.js +1 -1
  120. package/esm2015/lib/core/models/SNO/MPlantillaConstancia.model.js +1 -1
  121. package/esm2015/lib/core/models/SNO/MPrestamo.model.js +1 -1
  122. package/esm2015/lib/core/models/SNO/MPrimaGrados.model.js +1 -1
  123. package/esm2015/lib/core/models/SNO/MPrimasConcepto.model.js +1 -1
  124. package/esm2015/lib/core/models/SNO/MRango.model.js +1 -1
  125. package/esm2015/lib/core/models/SNO/MReportesRRHH.js +1 -1
  126. package/esm2015/lib/core/models/SNO/MRequisitosConcursante.model.js +1 -1
  127. package/esm2015/lib/core/models/SNO/MRequisitosConcursos.model.js +1 -1
  128. package/esm2015/lib/core/models/SNO/MRequisitosMinimos.model.js +1 -1
  129. package/esm2015/lib/core/models/SNO/MSalarioHistorico.model.js +1 -1
  130. package/esm2015/lib/core/models/SNO/MSolicitudEmpleo.model.js +1 -1
  131. package/esm2015/lib/core/models/SNO/MTablaVacaciones.model.js +1 -1
  132. package/esm2015/lib/core/models/SNO/MTablaVacacionesPeriodo.model.js +1 -1
  133. package/esm2015/lib/core/models/SNO/MTabulador.model.js +1 -1
  134. package/esm2015/lib/core/models/SNO/MTipoEvaluacion.model.js +1 -1
  135. package/esm2015/lib/core/models/SNO/MTipoPersonal.model.js +1 -1
  136. package/esm2015/lib/core/models/SNO/MTiposEnfermedad.model.js +1 -1
  137. package/esm2015/lib/core/models/SNO/MTrabajoAnterior.model.js +1 -1
  138. package/esm2015/lib/core/models/SNO/MUbicacionFisica.model.js +1 -1
  139. package/esm2015/lib/core/models/SNO/MVacacionesPersonal.model.js +1 -1
  140. package/esm2015/lib/core/models/SNO/McargaFamiliar.model.js +1 -1
  141. package/esm2015/lib/core/models/SOC/charge.model.js +1 -1
  142. package/esm2015/lib/core/models/SOC/clause.model.js +1 -1
  143. package/esm2015/lib/core/models/SOC/clauseModality.model.js +1 -1
  144. package/esm2015/lib/core/models/SOC/configuracionSOC.model.js +1 -1
  145. package/esm2015/lib/core/models/SOC/service.model.js +1 -1
  146. package/esm2015/lib/core/models/SOC/serviceCharge.model.js +1 -1
  147. package/esm2015/lib/core/models/SOC/serviceType.model.js +1 -1
  148. package/esm2015/lib/core/models/SPG/administrativeUnit.model.js +1 -1
  149. package/esm2015/lib/core/models/SPG/comprobantePresupuestario.model.js +1 -1
  150. package/esm2015/lib/core/models/SPG/configurationSPG.model.js +3 -1
  151. package/esm2015/lib/core/models/SPG/cuentaPresupuesto.model.js +1 -1
  152. package/esm2015/lib/core/models/SPG/estructuraPresupuestaria.model.js +1 -1
  153. package/esm2015/lib/core/models/SPG/expensiveAccount.model.js +1 -1
  154. package/esm2015/lib/core/models/SPG/fuenteFinanciamiento.model.js +1 -1
  155. package/esm2015/lib/core/models/SPG/incomeStructureAccount.model.js +1 -1
  156. package/esm2015/lib/core/models/SPG/organizationType.model.js +1 -1
  157. package/esm2015/lib/core/models/SSS/component.model.js +1 -1
  158. package/esm2015/lib/core/models/SSS/group.model.js +1 -1
  159. package/esm2015/lib/core/models/SSS/log.model.js +1 -1
  160. package/esm2015/lib/core/models/SSS/securityConfiguration.model.js +1 -1
  161. package/esm2015/lib/core/models/SSS/sistema.js +1 -1
  162. package/esm2015/lib/core/models/SSS/user.model.js +1 -1
  163. package/esm2015/lib/core/models/SSS/userDetail.model.js +1 -1
  164. package/esm2015/lib/core/models/SSS/userPermit.model.js +1 -1
  165. package/esm2015/lib/core/models/SSS/userRights.model.js +1 -1
  166. package/esm2015/lib/core/models/STB/deduction.model.js +1 -1
  167. package/esm2015/lib/core/models/STB/deductionType.model.js +1 -1
  168. package/esm2015/lib/core/models/STB/unidadTributaria.model.js +1 -1
  169. package/esm2015/lib/core/models/basic-model.model.js +1 -1
  170. package/esm2015/lib/shared/components/catalogo/catalogo.component.js +1 -1
  171. package/esm2015/lib/shared/components/catalogo-doble-input/catalogo-doble-input.component.js +1 -1
  172. package/esm2015/lib/shared/components/catalogo-estructuras/catalogo-estructuras.component.js +1 -1
  173. package/esm2015/lib/shared/components/confirm/confirm.component.js +1 -1
  174. package/esm2015/lib/shared/components/icon/icon.component.js +1 -1
  175. package/esm2015/lib/shared/components/table-select/table-select.component.js +1 -1
  176. package/esm2015/lib/shared/material/customPaginator.js +1 -1
  177. package/esm2015/lib/shared/material/material.module.js +1 -1
  178. package/esm2015/lib/shared/pipes/iso-currency.pipe.js +1 -1
  179. package/esm2015/lib/shared/shared.module.js +1 -1
  180. package/esm2015/lib/sigesp.service.js +7 -1
  181. package/esm2015/lib/validation.service.js +1 -1
  182. package/esm2015/public-api.js +1 -1
  183. package/esm2015/sigesp.js +1 -1
  184. package/fesm2015/sigesp.js +43 -30
  185. package/fesm2015/sigesp.js.map +1 -1
  186. package/lib/core/interfaces/ConfigurationSPG.d.ts +1 -0
  187. package/lib/core/models/SPG/configurationSPG.model.d.ts +1 -0
  188. package/lib/sigesp.service.d.ts +6 -0
  189. package/package.json +1 -1
@@ -1384,6 +1384,12 @@ export class SigespService {
1384
1384
  return res;
1385
1385
  }));
1386
1386
  }
1387
+ /**
1388
+ * @description obtiene las cuenta segun el id
1389
+ * @param tipo {'banco', 'default'}
1390
+ * @param id para la opcion banco usar id=idBanco, opcion defaulf id=idEnterprise
1391
+ * @returns
1392
+ */
1387
1393
  getAllBankAccount(tipo, id) {
1388
1394
  return this.http.get(`${this.URL}/dao/scb/cuenta_banco_dao.php?tipo=${tipo}&e=${id}`, { headers: this.getHttpHeaders() })
1389
1395
  .pipe(map((res) => {
@@ -1966,4 +1972,4 @@ SigespService.ctorParameters = () => [
1966
1972
  { type: MatDialog },
1967
1973
  { type: ToastrService }
1968
1974
  ];
1969
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZXNwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovQXBwU2Vydi93d3cvc2lnZXNwdjMoZ2l0KS9zaWdlc3AtZXN0YWJsZS9zaWdlc3BfY29yZS9wcm9qZWN0cy9zaWdlc3Avc3JjLyIsInNvdXJjZXMiOlsibGliL3NpZ2VzcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBcUIsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFakYsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEs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ZUFDNUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7ZUFDN0csS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQU0sS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUcsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzFHLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFNLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRztlQUMxRyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBRyxLQUFLLENBQUMsT0FBTyxJQUFFLElBQUksSUFBSyxLQUFLLENBQUMsT0FBTyxJQUFFLEdBQUcsSUFBRyxLQUFLLENBQUMsT0FBTyxJQUFFLEdBQUcsRUFBQztZQUN0RyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7O0tBS0M7SUFDTyxRQUFRLENBQUMsS0FBVztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzlHLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsRUFBQztZQUMzRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUg7Ozs7T0FJRztJQUNVLDZCQUE2Qjs7WUFDeEMsSUFBSSxhQUFhLEdBQXdCLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDekYsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2xELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDO29CQUNuSCxLQUFLLEVBQUUsa0NBQWtDO29CQUN6QyxVQUFVLEVBQUUsYUFBYTtpQkFDYjtnQkFDZCxLQUFLLEVBQUUsT0FBTztnQkFDZCxTQUFTLEVBQUUsTUFBTTthQUNsQixDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0ksc0JBQXNCO1FBQzNCLE1BQU0sT0FBTyxHQUFhO1lBQ3hCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLGVBQWUsRUFBRTtnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTthQUMzQztTQUNGLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFzQixHQUFHLElBQUksQ0FBQyxHQUFHLGdDQUFnQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDbkcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUMxRSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDVSxvQkFBb0IsQ0FDL0IsT0FBaUIsRUFDakIsS0FBYSxFQUNiLFVBQWlCLEVBQ2pCLGNBQXdCLElBQUksRUFDNUIsUUFBZ0IsT0FBTyxFQUN2QixVQUdJLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFDOztZQUU3QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFO29CQUNKLE9BQU87b0JBQ1AsS0FBSztvQkFDTCxVQUFVO29CQUNWLFdBQVc7aUJBQ0M7Z0JBQ2QsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUM5RCxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSzthQUNsRSxDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFRDs7Ozs7OztPQU9HO0lBQ1UscUJBQXFCLENBQ2hDLE9BQWlCLEVBQ2pCLEtBQWEsRUFDYixVQUFpQixFQUNqQixVQUF3QixFQUN4QixjQUF3QixJQUFJLEVBQzVCLFFBQWdCLE9BQU87O1lBRXZCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO2dCQUM1RCxJQUFJLEVBQUU7b0JBQ0osT0FBTztvQkFDUCxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsV0FBVztvQkFDWCxVQUFVO2lCQUNFO2dCQUNkLEtBQUssRUFBRSxLQUFLO2dCQUNaLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDVSxtQkFBbUI7O1lBQzlCLElBQUksV0FBVyxHQUFpQixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4RSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFO29CQUNKLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQztvQkFDdkYsS0FBSyxFQUFFLHlCQUF5QjtvQkFDaEMsVUFBVSxFQUFFLFdBQVc7aUJBQ1g7Z0JBQ2QsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsU0FBUyxFQUFFLE1BQU07YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0MsQ0FBQztLQUFBO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWM7UUFDbkIsTUFBTSxPQUFPLEdBQWE7WUFDeEIsU0FBUyxFQUFFLGFBQWE7WUFDeEIsZUFBZSxFQUFFO2dCQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRztnQkFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFO2FBQzNDO1NBQ0YsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyw4QkFBOEIsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzFGLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNVLGlCQUFpQjs7WUFDNUIsSUFBSSxLQUFLLEdBQWMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNsRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDO29CQUMzRCxLQUFLLEVBQUUscUJBQXFCO29CQUM1QixXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUM7b0JBQ3pELFVBQVUsRUFBRSxLQUFLO2lCQUNMO2dCQUNkLEtBQUssRUFBRSxPQUFPO2dCQUNkLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVIOzs7Ozs7OztPQVFHO0lBR00sVUFBVSxDQUFDLElBQVcsRUFBQyxFQUFVO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxnQ0FBZ0MsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUMxRixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ25FLENBQUM7SUFDSixDQUFDO0lBR0Q7Ozs7OztPQU1HO0lBQ0ksdUJBQXVCLENBQUMsT0FBdUIsSUFBSSxFQUFFLEVBQVU7UUFDcEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBa0IsR0FBRyxJQUFJLENBQUMsR0FBRyxxQ0FBcUMsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUNyRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ3pFLENBQUM7SUFDSixDQUFDO0lBTUQ7Ozs7T0FJRztJQUNVLGdDQUFnQzs7WUFDM0MsSUFBSSxRQUFRLEdBQTJCLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUYsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2xELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDO29CQUNuQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDO29CQUN2QyxLQUFLLEVBQUUsMENBQTBDO29CQUNqRCxVQUFVLEVBQUUsUUFBUTtpQkFDUjtnQkFDZCxLQUFLLEVBQUUsT0FBTztnQkFDZCxTQUFTLEVBQUUsTUFBTTthQUNsQixDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0kseUJBQXlCLENBQUMsU0FBbUI7UUFDbEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBeUIsR0FBRyxJQUFJLENBQUMsR0FBRywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUN6SCxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDaEYsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ1UsNEJBQTRCOztZQUN2QyxJQUFJLFFBQVEsR0FBeUIsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwRixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFO29CQUNKLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUM7b0JBQ25DLEtBQUssRUFBRSxvQ0FBb0M7b0JBQzNDLFVBQVUsRUFBRSxRQUFRO2lCQUNSO2dCQUNkLEtBQUssRUFBRSxPQUFPO2dCQUNkLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDSSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsR0FBRyxJQUFJLENBQUMsR0FBRyxxQ0FBcUMsRUFDekYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQzVFLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDVSwrQkFBK0IsQ0FDMUMsTUFBYyxFQUNkLFNBQW1DLElBQUksRUFDdkMsUUFBZ0IsT0FBTzs7WUFFdkIsSUFBSSxPQUFPLEdBQXlCLEVBQUUsQ0FBQztZQUV2QyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMxRCxPQUFPLEdBQUcsR0FBRyxDQUFDO2dCQUNkLElBQUksTUFBTSxFQUFFO29CQUNWLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTt3QkFDakIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQzNCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFBO3dCQUNsQyxDQUFDLENBQUMsQ0FBQTtxQkFDSDtvQkFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7d0JBQ2YsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQzNCLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFBO3dCQUM5QixDQUFDLENBQUMsQ0FBQTtxQkFDSDtpQkFDRjtnQkFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDeEIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQTtvQkFDbEUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtvQkFDekQsT0FBTyxDQUFDLENBQUE7Z0JBQ1YsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUMsQ0FBQTtZQUNGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUM5QixDQUFDLFFBQVEsRUFBQyxjQUFjLEVBQUMsWUFBWSxFQUFDLFVBQVUsQ0FBQyxFQUNqRCxNQUFNLEVBQ04sT0FBTyxFQUNQLENBQUMsUUFBUSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsTUFBTSxDQUFDLEVBQ3pDLEtBQUssQ0FDTixDQUFBO1FBQ0gsQ0FBQztLQUFBO0lBRUQ7Ozs7O09BS0c7SUFDVSx5QkFBeUIsQ0FDcEMsTUFBYyxFQUNkLGNBQXVCLElBQUksRUFDM0IsUUFBZ0IsT0FBTzs7WUFFdkIsSUFBSSxPQUFPLEdBQXFCLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDckQsT0FBTyxHQUFHLEdBQUcsQ0FBQTtnQkFDYixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDM0IsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQTtnQkFDeEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNULENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUE7b0JBQ2xFLE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7WUFDRixJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FDL0IsQ0FBQyxRQUFRLEVBQUMsY0FBYyxFQUFDLFlBQVksRUFBQyxZQUFZLENBQUMsRUFDbkQsTUFBTSxFQUNOLE9BQU8sRUFDUCxDQUFDO3dCQUNDLFdBQVcsRUFBRSxRQUFRO3dCQUNyQixRQUFRLEVBQUUsUUFBUTtxQkFDbkIsRUFBRTt3QkFDRCxXQUFXLEVBQUUsWUFBWTt3QkFDekIsUUFBUSxFQUFFLFlBQVk7cUJBQ3ZCLENBQUMsRUFDRixDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxFQUNsRCxLQUFLLENBQ04sQ0FBQTthQUNGO2lCQUFNO2dCQUNMLElBQUksZ0JBQWdCLEdBQXFCLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUNyRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7cUJBQ3pCO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUNGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUM5QixDQUFDLFFBQVEsRUFBQyxjQUFjLEVBQUMsWUFBWSxDQUFDLEVBQ3RDLE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxFQUNwQyxLQUFLLENBQ04sQ0FBQTthQUNGO1FBQ0gsQ0FBQztLQUFBO0lBRUQ7Ozs7O09BS0c7SUFDVSwwQkFBMEIsQ0FDckMsTUFBYyxFQUNkLGNBQXVCLElBQUksRUFDM0IsUUFBZ0IsT0FBTzs7WUFFdkIsSUFBSSxPQUFPLEdBQXNCLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQWMsRUFBRSxFQUFFO2dCQUNqRSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTtnQkFDbEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzNCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUE7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDVCxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFBO29CQUNsRSxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQy9CLENBQUMsUUFBUSxFQUFDLGNBQWMsRUFBQyxZQUFZLEVBQUMsWUFBWSxDQUFDLEVBQ25ELE1BQU0sRUFDTixPQUFPLEVBQ1AsQ0FBQzt3QkFDQyxXQUFXLEVBQUUsUUFBUTt3QkFDckIsUUFBUSxFQUFFLFFBQVE7cUJBQ25CLEVBQUU7d0JBQ0QsV0FBVyxFQUFFLFlBQVk7d0JBQ3pCLFFBQVEsRUFBRSxZQUFZO3FCQUN2QixDQUFDLEVBQ0YsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsRUFDbEQsS0FBSyxDQUNOLENBQUE7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLGdCQUFnQixHQUFzQixFQUFFLENBQUM7Z0JBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDckQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO3FCQUN6QjtnQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDRixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FDOUIsQ0FBQyxRQUFRLEVBQUMsY0FBYyxFQUFDLFlBQVksQ0FBQyxFQUN0QyxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsRUFDcEMsS0FBSyxDQUNOLENBQUE7YUFDRjtRQUNILENBQUM7S0FBQTtJQUVNLHVCQUF1QjtRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsd0NBQXdDLEVBQ3hFLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUFDO2FBQ2hDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRTtZQUNkLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxpQkFBaUIsQ0FBQyxZQUFtQixJQUFJO1FBQzlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxrQ0FDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxFQUFFLEVBQ0YsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFQTs7Ozs7OztNQU9FO0lBQ00sWUFBWSxDQUFDLE1BQWM7UUFFaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLGtDQUFrQyxNQUFNLEVBQUUsRUFDcEYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxNQUFjO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxtQ0FBbUMsTUFBTSxFQUFFLEVBQ25GLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGlCQUFpQixDQUFDLElBQVksRUFBQyxNQUFjO1FBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsb0NBQW9DLElBQUksV0FBVyxNQUFNLEVBQUUsRUFDMUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMzRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxXQUFXLENBQUMsSUFBWSxFQUFDLE1BQWMsRUFBQyxTQUFpQjtRQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsb0NBQW9DLElBQUksV0FBVyxNQUFNLGNBQWMsU0FBUyxFQUFFLEVBQzNILEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDckQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDTSxPQUFPLENBQUMsSUFBWSxFQUFDLE1BQWM7UUFDMUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBUSxHQUFHLElBQUksQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLFdBQVcsTUFBTSxFQUFFLEVBQ2hHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFSzs7Ozs7OztFQU9IO0lBQ00sY0FBYyxDQUFDLElBQVksRUFBQyxNQUFjLEVBQUUsU0FBaUIsRUFBQyxTQUFpQjtRQUNwRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcscUNBQXFDLElBQUksV0FBVyxNQUFNLGNBQWMsU0FBUyxjQUFjLFNBQVMsRUFBRSxFQUN0SixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3hELENBQUM7SUFDSixDQUFDO0lBRUw7Ozs7T0FJRztJQUNJLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLDJCQUEyQixFQUNyRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxrQkFBa0IsQ0FBQyxPQUF5QixJQUFJLEVBQUMsRUFBVTtRQUNoRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0NBQWdDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDMUYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRzs7Ozs7R0FLRDtJQUNTLGFBQWEsQ0FBQyxPQUFvQyxJQUFJLEVBQUUsRUFBVTtRQUN4RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsOEJBQThCLEVBQ3pFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBR0w7Ozs7T0FJRztJQUNJLG9CQUFvQjtRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsb0NBQW9DLEVBQy9FLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4RDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsK0JBQStCLEVBQzFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDRCQUE0QixFQUN2RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGdDQUFnQyxFQUMzRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGFBQWEsQ0FBQyxTQUFtQixJQUFJLEVBQUUsT0FBZSxJQUFJO1FBQy9ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxrQ0FDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLE1BQU0sU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDOUMsRUFBRSxFQUNGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBR0Q7Ozs7OztPQU1HO0lBQ0ksU0FBUyxDQUFDLFNBQXdCLElBQUksRUFBRSxPQUFlLElBQUk7UUFFaEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGtDQUN6QyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsTUFBTSxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUM5QyxFQUFFLEVBQ0YsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ1UscUJBQXFCOztZQUNoQyxJQUFJLFdBQVcsR0FBaUIsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDeEUsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2xELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQztvQkFDbEMsS0FBSyxFQUFFLHlDQUF5QztvQkFDaEQsVUFBVSxFQUFFLFdBQVc7aUJBQ1g7Z0JBQ2QsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsU0FBUyxFQUFFLE1BQU07YUFDbEIsQ0FBQyxDQUFDO1lBRUgsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0MsQ0FBQztLQUFBO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWM7UUFDbkIsSUFBSSxPQUFPLEdBQWE7WUFDdEIsU0FBUyxFQUFFLGFBQWE7WUFDeEIsZUFBZSxFQUFFO2dCQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRztnQkFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFO2FBQzNDO1NBQ0YsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyx5Q0FBeUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3JHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQy9ELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDRCQUE0QixDQUFDLE9BQWUsSUFBSTtRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsMENBQTBDLElBQUksQ0FBQyxDQUFDLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFDNUgsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUdEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsRUFBVTtRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsK0JBQStCLEVBQUUsRUFBRSxFQUM5RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25DO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxRQUFRLENBQUMsWUFBb0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDRCQUE0QixZQUFZLEVBQUUsRUFDckYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxvQ0FBb0MsRUFDL0UsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUlNLGlCQUFpQixDQUFDLElBQVcsRUFBQyxFQUFTO1FBQzVDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxNQUFNLEVBQUUsRUFBRSxFQUNwRixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQzthQUNoQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsR0FBTyxFQUFFLEVBQUU7WUFDZCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDL0Q7aUJBQU07Z0JBQ0wsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7YUFDZjtZQUNELE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZUFBZTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsbUNBQW1DLEVBQzlFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGdDQUFnQyxFQUMzRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGlDQUFpQyxFQUM1RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVNLGlCQUFpQixDQUFDLGdCQUF5QixLQUFLO1FBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxvQ0FDOUIsYUFBYSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFDdEMsRUFBRSxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUN4QyxHQUFHLENBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRTtZQUNkLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNyRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFTSxVQUFVO1FBRWYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRyx5QkFBeUIsRUFDcEMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQ25DLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEdBQWMsRUFBRSxFQUFFO1lBQ3JCLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUM1QztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUVILENBQUM7SUFFTSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsOEJBQThCLEVBQ3pDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUNuQyxDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsQ0FBQyxHQUFjLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDaEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxVQUFVLENBQUMsSUFBWSxFQUFDLEVBQVU7UUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLE9BQU8sRUFBRSxFQUFFLEVBQzVGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUE7Ozs7O01BS0U7SUFDTSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxRQUFRLFlBQVksU0FBUyxFQUFFLEVBQ3ZILEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRjs7Ozs7Ozs7Ozs7T0FXRztJQUNNLHFCQUFxQixDQUFDLEdBQU8sRUFBRSxDQUFTO1FBQzlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRywyQ0FBMkMsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUNsRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDekQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBQ0g7Ozs7O09BS0c7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyx1Q0FBdUMsUUFBUSxFQUFFLEVBQzVGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUE7Ozs7O0lBS0E7SUFFUSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLHFDQUFxQyxXQUFXLEVBQUUsRUFDN0YsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVKOzs7O01BSUU7SUFDTSx1QkFBdUI7UUFFNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLHVDQUF1QyxlQUFlLEVBQUUsRUFDbkcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQztvQkFDcEIsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEQ7YUFDSjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUVKLENBQUM7SUFFRjs7Ozs7Ozs7O01BU0U7SUFFTyxTQUFTLENBQUMsSUFBVyxFQUFDLEVBQVU7UUFDdEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDJDQUEyQyxJQUFJLE9BQU8sRUFBRSxFQUFFLEVBQ3JHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFSjs7Ozs7T0FLRztJQUNPLGVBQWUsQ0FBQyxJQUFXLEVBQUMsRUFBVTtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsMkNBQTJDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDckcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O0tBSUM7SUFDTyxjQUFjLENBQUMsSUFBVyxFQUFDLEVBQVU7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLE9BQU8sRUFBRSxFQUFFLEVBQzVGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7S0FJQztJQUNPLGVBQWUsQ0FBQyxJQUFXLEVBQUMsRUFBVTtRQUM1QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsaUNBQWlDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDM0YsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFSDs7OztPQUlHO0lBQ1csYUFBYSxDQUFDLElBQVcsRUFBQyxVQUFrQixFQUFDLFFBQWdCO1FBQ25FLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRywyQ0FBMkMsVUFBVSxhQUFhLFFBQVEsRUFBRSxFQUN2SCxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQU9BLGFBQWEsQ0FBQyxNQUVVO1FBRTdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsaURBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQ3hCLFdBQVcsTUFBTSxFQUFFLEVBQ25CLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUNuQyxDQUFBO0lBRUgsQ0FBQztJQUVGOzs7Ozs7UUFNSTtJQUNJLGNBQWMsQ0FBQyxJQUFZO1FBQ2hDLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxJQUFJLEdBQUMsa0JBQWtCLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsSUFBSTtZQUNwQixlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtTQUMvQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDVSxPQUFPOztZQUNsQixJQUFJLFFBQVEsR0FBYyxDQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDM0gsdUJBQXVCO1lBQ3ZCLFdBQVc7WUFDWCxJQUFJLFFBQVEsRUFBRTtnQkFDWixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQzlCO1FBRUgsQ0FBQztLQUFBO0lBRUQ7Ozs7O09BS0c7SUFDSSxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBQyxPQUFlO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFQzs7Ozs7S0FLQztJQUNPLG9CQUFvQixDQUFDLE9BQWU7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNSLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFJRjs7Ozs7TUFLRTtJQUNJLGtCQUFrQixDQUFDLE9BQWU7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNSLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLE9BQU87U0FFZCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxRQUFRLENBQUMsSUFBZTtRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDekIsSUFBSSxhQUFhLEdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RCxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBVztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLElBQUk7UUFDVCxnR0FBZ0c7UUFDaEcsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xDLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNVLFFBQVE7O1lBQ25CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUNkO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDZjtZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztLQUFBO0lBRU8sWUFBWSxDQUFDLEtBQXdCO1FBQzNDLE9BQU8sVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUVDOzs7Ozs7S0FNQztJQUNPLFdBQVcsQ0FBQyxJQUFXLEVBQUUsSUFBUztRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUc7ZUFDcEMsSUFBSSxXQUFXLElBQUksQ0FBQyxNQUFNLFdBQVcsSUFBSSxDQUFDLE1BQU0sYUFBYSxJQUFJLENBQUMsUUFBUSxlQUFlLElBQUksQ0FBQyxVQUFVLFdBQVcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUNySSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O0tBT0M7SUFDUSxpQkFBaUIsQ0FBQyxJQUFXLEVBQUMsSUFBUztRQUM1QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUc7aUJBQ3BDLElBQUksV0FBVyxJQUFJLENBQUMsTUFBTSxXQUFXLElBQUksQ0FBQyxNQUFNLGFBQWEsSUFBSSxDQUFDLFFBQVEsZUFBZSxJQUFJLENBQUMsVUFBVSxXQUFXLElBQUksQ0FBQyxNQUFNLGFBQWEsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNqSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUdQOzs7Ozs7T0FNRztJQUVJLHlCQUF5QixDQUFDLFVBQWlCLEVBQUMsSUFBVztRQUMxRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsd0NBQXdDLFVBQVUsU0FBUyxJQUFJLEVBQUUsRUFDNUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFSTs7OztNQUlFO0lBQ1Esb0JBQW9CLENBQUMsVUFBaUIsRUFBQyxPQUFjLEVBQUUsYUFBcUI7UUFDakYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLGdEQUFnRCxVQUFVLFlBQVksT0FBTyxrQkFBa0IsYUFBYSxFQUFFLEVBQzlJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNkLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUVQLENBQUM7SUFFRDs7OztNQUlFO0lBQ00sV0FBVyxDQUFDLFVBQWlCLEVBQUMsT0FBYztRQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsb0NBQW9DLFVBQVUsWUFBWSxPQUFPLEVBQUUsRUFDbkcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FDSixDQUFDO0lBRUosQ0FBQztJQUVBOzs7O0dBSUQ7SUFDSyxHQUFHLENBQUMsSUFBVTtRQUVuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsc0JBQXNCLEVBQUUsSUFBSSxFQUFHO1lBQzFELE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1NBQ25DLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFFYixPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUNILENBQUE7SUFFTCxDQUFDO0lBSUY7Ozs7T0FJRztJQUNLLFdBQVcsQ0FBRSxTQUFrQjtRQUNuQyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLDhDQUE4QztRQUN4RyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGtEQUFrRDtRQUMzRyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbEgsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7OztNQUlFO0lBQ0ssV0FBVyxDQUFFLFNBQWtCO1FBQ25DLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsOENBQThDO1FBQ3hHLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0RBQWtEO1FBQzNHLElBQUksZUFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEgsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFHRDs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFpQkU7SUFDTSx3QkFBd0IsQ0FBRSxhQUFzQixFQUFFLFFBQWlCO1FBQ3JFLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsQ0FBRTtRQUM1RCxJQUFJLE9BQU8sSUFBRSxHQUFHLEVBQUM7WUFDYixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDbEIsQ0FBQztJQUVMOzs7O1NBSUs7SUFDRyxZQUFZO1FBRWpCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUM7YUFDeEQsSUFBSSxDQUNILFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQTtZQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLGNBQWMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pELHVCQUF1QjtZQUV2QixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFJLDhCQUE4QjtRQUMzRCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRUosQ0FBQztJQUNGOzs7O09BSUc7SUFDSyxXQUFXO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUUsQ0FBQyxJQUFTLEVBQUksRUFBRTtZQUMxQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNGOzs7O09BSUc7SUFDSyxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUE7Ozs7S0FJQztJQUVPLGVBQWUsQ0FBQyxHQUFhO1FBQ2xDLElBQUksSUFBSSxHQUFDLEVBQUUsQ0FBQztRQUNaLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBLEVBQUUsR0FBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFBLENBQUEsQ0FBQyxDQUFDLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDZCQUE2QixFQUFDLElBQUksRUFDOUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUM7YUFDakMsSUFBSSxDQUNILEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxHQUFFLE9BQU8sR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQ2pDLENBQUM7SUFDSixDQUFDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDSyxjQUFjLENBQUMsT0FBYyxFQUFDLFVBQWlCLEVBQUMsU0FBaUI7UUFDdEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLCtDQUErQyxPQUFPLE9BQU8sVUFBVSxNQUFNLFNBQVMsRUFBRSxFQUNuSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7OztZQTEvRUEsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUF2RU0sVUFBVTtZQUtWLFNBQVM7WUFPVCxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTVByZWZpam8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9NUHJlZmlqby5tb2RlbCc7XHJcbmltcG9ydCB7IE1FbnRlcnByaXNlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvRW50ZXJwcmlzZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1QZXJzb25hbE5vbWluYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01QZXJzb25hbE5vbWluYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Ib2phVGllbXBvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUhvamFUaWVtcG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1Vc3VhcmlvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TU1MvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJUmVxdWVzdCB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1Qcm92ZWVkb3IgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9wcm92ZWVkb3Jlcy5tb2RlbCc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1Vc3VhcmlvUHJlZmlqbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL3VzZXJQcmVmaXgubW9kZWwnO1xyXG5pbXBvcnQgeyBJQ2F0YWxvZ28sIGZpbHRlckRhdGEgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9DYXRhbG9nbyc7XHJcbmltcG9ydCB7IENhdGFsb2dvQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jYXRhbG9nby9jYXRhbG9nby5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhUHJlc3VwdWVzdG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9jdWVudGFQcmVzdXB1ZXN0by5tb2RlbCc7XHJcbmltcG9ydCB7IE1DdWVudGFJbnN0aXR1Y2lvbmFsIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0cvY3VlbnRhSW5zdGl0dWNpb25hbC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Nb25lZGEsIE1Nb25lZGFDb25maWcgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9tb25lZGEubW9kZWwnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IE1VbmlkYWRUcmlidXRhcmlhIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvdW5pZGFkVHJpYnV0YXJpYS5tb2RlbCc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jb25maXJtL2NvbmZpcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTUNvbmZpZ3VyYWNpb25TQ0cgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9jb25maWd1cmFjaW9uU0NHLm1vZGVsJztcclxuaW1wb3J0IHsgTVBsYW5Vbmljb0N1ZW50YSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL3BsYW5Vbmljb0N1ZW50YS5tb2RlbCc7XHJcbmltcG9ydCB7IElDb25leGlvbiB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL1VzdWFyaW8nO1xyXG5pbXBvcnQgeyBUYWJsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0L3RhYmxlLXNlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhdGlvblNQRyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2NvbmZpZ3VyYXRpb25TUEcubW9kZWwnO1xyXG5pbXBvcnQgeyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWUsIE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZSwgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlQ29tcGxldGUsIE1BbGxTdHJ1Y3R1cmUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9lc3RydWN0dXJhUHJlc3VwdWVzdGFyaWEubW9kZWwnO1xyXG5pbXBvcnQgeyBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWUsIElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZSB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL0VzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYSc7XHJcbmltcG9ydCB7IE1DZW50cm9Db3N0bywgTVVzdWFyaW9DZW50cm9Db3N0byB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL2NlbnRyb0Nvc3RvLm1vZGVsJztcclxuaW1wb3J0IHsgTUZ1ZW50ZUZpbmFuY2lhbWllbnRvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvZnVlbnRlRmluYW5jaWFtaWVudG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhRWdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2V4cGVuc2l2ZUFjY291bnQubW9kZWwnO1xyXG5pbXBvcnQgeyBDYXRhbG9nb0VzdHJ1Y3R1cmFzQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jYXRhbG9nby1lc3RydWN0dXJhcy9jYXRhbG9nby1lc3RydWN0dXJhcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJVXBkYXRlRGlzdHJpYnV0aW9uLCBJVXBkYXRlRGlzdHJpYnV0aW9uMiwgSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zLCBJVXBkYXRlRGlzdHJpYnV0aW9uSW5ncmVzb3MyIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ3VlbnRhRWdyZXNvcyc7XHJcbmltcG9ydCB7IENhdGFsb2dvRG9ibGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY2F0YWxvZ28tZG9ibGUtaW5wdXQvY2F0YWxvZ28tZG9ibGUtaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTVNpc3RlbWEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9zaXN0ZW1hJztcclxuaW1wb3J0IHsgSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zLCBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpbyc7XHJcbmltcG9ydCB7IE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcywgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2NvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhSW5ncmVzb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9JbmNvbWVBY2NvdW50JztcclxuaW1wb3J0IHsgTUluY29tZVN0cnVjdHVyZUFjY291bnQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9pbmNvbWVTdHJ1Y3R1cmVBY2NvdW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTU9yZ2FuaXphdGlvblR5cGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9vcmdhbml6YXRpb25UeXBlLm1vZGVsJztcclxuaW1wb3J0IHsgTVNwZWNpYWx0eSB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3NwZWNpYWx0eS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Eb2N1bWVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2RvY3VtZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTUNsYXNpZmljYXRpb24gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9jbGFzaWZpY2F0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvdW50cnksIE1TdGF0ZSwgTU11bmljaXBhbGl0eSwgTVBhcmlzaCwgTUNpdHksIE1Db21tdW5pdHkgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9sb2NhdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBNUHJvdmlkZXJCZW5lZmljaWFyeSB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3Byb3ZpZGVyQmVuZWZpY2lhcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBNU2lnZWNvZkJhbmssIE1CYW5rLCBNQmFua0FjY291bnRUeXBlLCBNQWdlbmNpYUJhbmNvLCBNQ3VlbnRhQmFuY28gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDQi9iYW5rLm1vZGVsJztcclxuaW1wb3J0IHsgSVJlc3BvbnNlIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhdGlvblJQQyB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2NvbmZpZ3VyYWNpb25SUEMubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uZmlnU09DIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TT0MvY29uZmlndXJhY2lvblNPQy5tb2RlbCc7XHJcbmltcG9ydCB7IE1EZWR1Y3Rpb25UeXBlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvZGVkdWN0aW9uVHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1DYXJnbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU09DL2NoYXJnZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25jZXB0b1JldGVuY2lvbiwgTURlZHVjdGlvbiB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1RCL2RlZHVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25maWdTU1MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9zZWN1cml0eUNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQWRtaW5pc3RyYXRpdmVVbml0IH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvYWRtaW5pc3RyYXRpdmVVbml0Lm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbXBvbmVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Mb2cgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9sb2cubW9kZWwnO1xyXG5pbXBvcnQgeyBNU2VydmljZUNoYXJnZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU09DL3NlcnZpY2VDaGFyZ2UubW9kZWwnO1xyXG5pbXBvcnQgeyBNRW1wcmVzYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL0VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uY2VwdG9zQ1hQIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DWFAvTUNvbmNlcHRvc0NYUC5tb2RlbCc7XHJcbmltcG9ydCB7IE1UaXBvRG9jdW1lbnRvQ1hQIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DWFAvTVRpcG9Eb2N1bWVudG9DWFAubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhY2lvblNOTyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Db25maWd1cmFjaW9uU05PLm1vZGVsJztcclxuaW1wb3J0IHsgTURlZmluaWNpb25Ob21pbmEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NRGVmaW5pY2lvbk5vbWluYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Bc2lnbmFjaW9uQ2FyZ28gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NQXNpZ25hY2lvbkNhcmdvLm1vZGVsJztcclxuaW1wb3J0IHsgTU5vbWluYVNpbXBsZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Ob21pbmFTaW1wbGUubW9kZWwnO1xyXG5pbXBvcnQgeyBNUGVyc29uYWwgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NUGVyc29uYWwubW9kZWwnO1xyXG5pbXBvcnQgeyBNRW50cmFkYVN1bWluaXN0cm9zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TSVYvTUVudHJhZGFTdW1pbmlzdHJvLm1vZGVsJztcclxuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInXHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7IFxyXG5pbXBvcnQgeyBNU25vTG9nIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUF1ZGl0b3JpYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1UaXBvRGVwb3NpdG9zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TSVYvTVRpcG9EZXBvc2l0b3MubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29tdW5pZGFkIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvY29tdW5pZGFkLm1vZGVsJztcclxuaW1wb3J0IHsgTUV4Y2hhbmdlUmF0ZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL1Rhc2FDYW1iaW8ubW9kZWwnO1xyXG5cclxuICBcclxuICBASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxuICB9KVxyXG4gIGV4cG9ydCBjbGFzcyBTaWdlc3BTZXJ2aWNlIHtcclxuXHJcbiAgICBwdWJsaWMgdXN1YXJpb0FjdGl2bzogTVVzdWFyaW8gPSBudWxsO1xyXG4gICAgcHVibGljIFVSTDogc3RyaW5nO1xyXG4gICAgcHVibGljIGN1cnJlbnRDb21wb25lbnQ6IE1Db21wb25lbnQgPSBudWxsO1xyXG4gICAgcHVibGljIHVzZXJNZW51ICA9IG51bGw7IFxyXG4gICAgcHVibGljIGlwX2FkcmVzcyA9ICcxMjcuMC4wLjEnO1xyXG4gICAgLy8gcHVibGljIFVSTDogc3RyaW5nID0gXCJodHRwOi8vMTkyLjE2OC4xLjY3L3NpZ2VzcF9waHBcIjtcclxuICAgIC8vIHVzdWFyaW9BY3Rpdm86IE1Vc3VhcmlvID0ge1xyXG4gICAgLy8gICBjb25leGlvbkRCOiB7XHJcbiAgICAvLyAgICAgYmFzZURlRGF0b3M6IFwiZGJfc2lnZXNwX2RlbW92M1wiLFxyXG4gICAgLy8gICAgIGdlc3RvcjogXCJwb3N0Z3Jlc1wiLFxyXG4gICAgLy8gICAgIGxvZ2luOiBcInBvc3RncmVzXCIsXHJcbiAgICAvLyAgICAgbm9tYnJlOiBcIlNJR0VTUCBDLkEsIHNlcnZpZG9yIDg1IChTRSBQVUVERSBVU0FSKVwiLFxyXG4gICAgLy8gICAgIHBhc3N3b3JkOiBcImFkbWluc2lnZXNwXCIsXHJcbiAgICAvLyAgICAgcHVlcnRvOiBcIjU0MzJcIixcclxuICAgIC8vICAgICBzZXJ2aWRvcjogXCIxOTIuMTY4LjEuNjdcIixcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgZW1wcmVzYToge1xyXG4gICAgLy8gICAgIGlkOiAxLFxyXG4gICAgLy8gICAgIHBlcmlvZG9GaXNjYWw6IFwiMjAxOS0wMS0wMVwiLFxyXG4gICAgLy8gICAgIHRpdHVsbzogXCJTSUdFU1AgQy5BLlwiXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIG5vbWJyZTogXCJTSUdFU1BcIixcclxuICAgIC8vICAgdG9rZW46IFwiZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6TTROQ0o5LmV5SndZWE56ZDI5eVpGOTFjM1VpT2lJeE1qTTBOVFkzT0NJc0ltbGtYMlZ0Y0hKbGMyRWlPaUl4SWl3aWRHbDBaVzF3SWpvaVUwbEhSVk5RSUVNdVFTNGlMQ0p3WlhKbWFYTmpZV3dpT2lJeU1ERTVMVEF4TFRBeElpd2liRjkxYzNWaGNtbHZJam9pVTBsSFJWTlFJaXdpYzJWeWRtbGtiM0lpT2lJeE9USXVNVFk0TGpFdU5qY2lMQ0p3ZFdWeWRHOGlPaUkxTkRNeUlpd2lZbUZ6WldSbFpHRjBiM01pT2lKa1lsOXphV2RsYzNCZlpHVnRiM1l6SWl3aWJHOW5hVzRpT2lKd2IzTjBaM0psY3lJc0luQmhjM04zYjNKa0lqb2lZV1J0YVc1emFXZGxjM0FpZlEuUElTQlNmdWVSQWRzV3NKMUFhR2NWQ2dXLTJhSmtndHZMZHNXMEJnbzVsdHlZb3dEOG95X25xSzVzakUyVVJHa1wiXHJcbiAgICAvLyB9XHJcbiAgICAvLyBwcm9jZWRlOiBzdHJpbmcgPSAnU0NHQ01QJztcclxuICAgIC8vIGNvZHNpczogc3RyaW5nID0gJ1NDRyc7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSB0b2FzdDogVG9hc3RyU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsaWRhIHF1ZSBzZWxvIHNlIGVzY3JpYmFuIGd1aW9uZXMgeSA5XHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ubHlHdWlvbmVzQW5kTmluZShldmVudDogYW55KSB7XHJcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICctJyB8fCBldmVudC5rZXkgPT09ICc5Jykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgZWwgbW9uY21wIGRlIHNpZ2VzcF9jb21wcm9iYW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQ29tcHJvYmFudGVBbW91bnQoYW1vdW50OiBudW1iZXIsIGlkQ29tcHJvYmFudGU6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5VUkx9L2Rhby9zaWdlc3AvY29tcHJvYmFudGVfZGFvLnBocD9tb250bz10cnVlYCwge1xyXG4gICAgICAgIG1vbmNtcDogYW1vdW50LFxyXG4gICAgICAgIGlkX2NvbXByb2JhbnRlOiBpZENvbXByb2JhbnRlXHJcbiAgICAgIH0sIHtcclxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIGVsIGNvbXByb2JhbnRlIHByc3VwdWVzdGFyaW8gZGUgRWdyZXNvc1xyXG4gICAgICogQHBhcmFtIGNvbXByb2JhbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcyhjb21wcm9iYW50ZTogSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19lZ3Jlc29zX2Rhby5waHBgLFxyXG4gICAgICB7IC4uLmNvbXByb2JhbnRlLCBpZDogY29tcHJvYmFudGUuaWRfZHRfc3BnY21wIH0sIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgY29tcHJvYmFudGUgcHJlc3VwdWVzdGFyaW8gZGUgRWdyZXNvc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MoKTogT2JzZXJ2YWJsZTxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3NbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9fZWdyZXNvc19kYW8ucGhwYCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSBlbCBjb21wcm9iYW50ZSBwcnN1cHVlc3RhcmlvIGRlIEluZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gY29tcHJvYmFudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyhjb21wcm9iYW50ZTogSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9fZWdyZXNvc19kYW8ucGhwYCxcclxuICAgICAgeyAuLi5jb21wcm9iYW50ZSwgaWQ6IGNvbXByb2JhbnRlLmlkX2R0X3NwaWNtcCB9LCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIGNvbXByb2JhbnRlIHByZXN1cHVlc3RhcmlvIGRlIEluZ3Jlc29zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MoKTogT2JzZXJ2YWJsZTxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvc1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19pbmdyZXNvc19kYW8ucGhwYCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgZWdyZXNvXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25FeHBlbnNlQWNjb3VudChkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb24pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9jdWVudGFzX2VncmVzb3NfZGFvLnBocGAsIGRpc3RyaWJ1dGlvbixcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBlZ3Jlc29cclxuICAgICAqIEBwYXJhbSBkaXN0cmlidXRpb25cclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkV4cGVuc2VBY2NvdW50MihkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb24yW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2N1ZW50YXNfZWdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KTtcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBJbmdyZXNvXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVBY2NvdW50KGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFzX2luZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNQ3VlbnRhSW5ncmVzb3MocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVBY2NvdW50MihkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb25JbmdyZXNvczJbXSk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zcGkvY3VlbnRhc19pbmdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUN1ZW50YUluZ3Jlc29zKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgSW5ncmVzbyBkZSBFc3RydWN0dXJhXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVTdHJ1Y3R1cmVBY2NvdW50KGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zLCBsZXZlbDogbnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFfZXN0cnVjdHVyYV9pbmdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUluY29tZVN0cnVjdHVyZUFjY291bnQocmVzLmRhdGEsIGxldmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjdWVudGFzIHBvciBuaXZlbCBkZSBsYXMgY3VlbmF0cyBkZSBlZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gbGV2ZWwgTsO6bWVybyBkZSBuaXZlbGVzIGRlIGxhIGNvbmZpZ3VyYWNpw7NuXHJcbiAgICAgKiBAcGFyYW0gaWQgaWQgZGVsIG5pdmVsIDMgbyA1IHF1ZSBzZSB2YSBhIGJ1c2NhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DdWVudGFFZ3Jlc29zW10+XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRFeHBlbnNlQWNjb3VudHNGb3JMZXZlbChsZXZlbDogbnVtYmVyLCBpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxNQ3VlbnRhRWdyZXNvc1tdPntcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUN1ZW50YUVncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHA/bGV2ZWw9JHtsZXZlbH0maWQ9JHtpZH1gLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUN1ZW50YUVncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjYXTDoWxvZ28gZGUgZXN0cnVjdHVyYSBwcmVzdXB1ZXNhcmlhXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIENvbmZpZ3VyYWNpw7NuIGRlIGxhIGVzdHJ1Y3R1cmFcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbkNhdGFsb2dvRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhKGRhdGE6IGFueVtdLCBjb25maWd1cmF0aW9uOiBNQ29uZmlndXJhdGlvblNQRyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGNvbnN0IGNhdGFsb2dvID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0VzdHJ1Y3R1cmFzQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgZGF0YSxcclxuICAgICAgICAgIGNvbmZpZ3VyYXRpb25cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY2F0YWxvZ28uYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjdWVudGFzIGRlIGVncmVzb3NcclxuICAgICAqIEBwYXJhbSBvbmx5QXZhaWxhYmxlXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YUVncmVzb3NbXT5cclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRFeHBlbnNlQWNjb3VudHMob25seUF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxNQ3VlbnRhRWdyZXNvc1tdPntcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUN1ZW50YUVncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHAke1xyXG4gICAgICAgIG9ubHlBdmFpbGFibGUgPyAnP2F2YWlsYWJsZT10cnVlJyA6ICcnXHJcbiAgICAgIH1gLCB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUN1ZW50YUVncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB0b2RhcyBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWV0c2FyaWFzIGRlIGxhcyA1IHRhYmxhc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1BbGxTdHJ1Y3R1cmU+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QWxsQnVkZ2V0U3RydWN0dXJlKCk6IFByb21pc2U8TUFsbFN0cnVjdHVyZT4ge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlT25lKCkuc3Vic2NyaWJlKHN0cnVjdHVyZU9uZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZVR3b0FsbCgpLnN1YnNjcmliZShzdHJ1Y3R1cmVUd28gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZVRocmVlKCkuc3Vic2NyaWJlKHN0cnVjdHVyZVRocmVlID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZUZvdXIoKS5zdWJzY3JpYmUoc3RydWN0dXJlRm91ciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZUZpdmVCeUlkRXA0KCkuc3Vic2NyaWJlKHN0cnVjdHVyZUZpdmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBNQWxsU3RydWN0dXJlKHtcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVPbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlVHdvLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVRocmVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUZvdXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlRml2ZVxyXG4gICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGVzdHJ1Y3R1cmEgY29tcGxldGEgZGVwZW5kaWVuZG8gZGUgbGEgY29uZmlndXJhY2nDs25cclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnlbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBnZXRCdWRnZXRTdHJ1Y3R1cmVDb21wbGV0ZShuaXZlbDpudW1iZXIpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IFtdO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZUZpdmUobml2ZWwpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgZGF0YS5wdXNoKC4uLnJlc3VsdClcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlVGhyZWVDb21wbGV0ZSgzKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyAgIGRhdGEucHVzaCguLi5yZXN1bHQpXHJcbiAgICAgICAgLy8gfSlcclxuXHJcbiAgICAgICAgYXdhaXQgcmVzb2x2ZShkYXRhKTtcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDUgcXVlIHZhbiBhIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZUZpdmUoaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBFc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBhY3R1YWxpemFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlRml2ZShzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZUZpdmUoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNV9kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB0b2RhIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgNVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZShsZXZlbDogbnVtYmVyID0gbnVsbCk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocD9jb21wbGV0ZT10cnVlYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlKGUsIGxldmVsKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDUgcG9yIGVsIElkIGRlIGxhIGVzdHJ1Y3R1cmEgNFxyXG4gICAgICogQHBhcmFtIGlkRXA0IGlkIGRlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgNFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZUJ5SWRFcDQoaWRFcDQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNV9kYW8ucGhwJHtpZEVwNCA/IGA/aWRfZXA0PSR7aWRFcDR9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmUoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDMgcXVlIHZhbmEgIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZUZvdXIoaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTRfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBFc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBhY3R1YWxpemFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlRm91cihzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cltdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTRfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZUZvdXIoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXJbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNF9kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBpZEVwMyBJZCBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYXByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRm91cihpZEVwMz86IHN0cmluZyk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXJbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cltdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNF9kYW8ucGhwJHtpZEVwMyA/IGA/aWRfZXAzPSR7aWRFcDN9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXIoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDMgcXVlIHZhbmEgIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZVRocmVlKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgM1xyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZXMgRXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHF1ZSB2YW4gYSBzZXIgYWN0dWFsaXphZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZVRocmVlKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDNcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZVRocmVlKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHBgLCBzdHJ1Y3R1cmVzLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZSB0cmFlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgY29tcGxldGEgaGFzdGEgZWwgbml2ZWwgM1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZVRocmVlQ29tcGxldGUobGV2ZWw6IG51bWJlcik6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocD9jb21wbGV0ZT10cnVlYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlKGVsZW1lbnQsIGxldmVsKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDNcclxuICAgICAqIEBwYXJhbSBpZEVwMiBJZCBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYXByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlVGhyZWUoaWRFcDI/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhM19kYW8ucGhwJHtpZEVwMiA/IGA/aWRfZXAyPSR7aWRFcDJ9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbGltaW5hIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgdW5vXHJcbiAgICAgKiBAcGFyYW0gaWRTdHJ1Y3R1cmVzIElkIGRlIGxhIG8gbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyBxdWUgdmFuIGEgc2VyIGVsaW1pbmFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVsZXRlQnVkZ2V0U3RydWN0dXJlVHdvKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSBkb3NcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmUgRXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSB1bm8gcXVlIHNlIHZhIGEgYWN0dWFsaXphclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZVR3byhzdHJ1Y3R1cmU6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLCBzdHJ1Y3R1cmUsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdHJhIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0cmlhcyBkb3MgZW4gbGEgYmFzZSBkZSBkYXRvc1xyXG4gICAgICogQHBhcmFtIGJ1ZGdldFN0cnVjdHVyZXMgQXJyYXkgZGUgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWEgcXVlIHNlIHZhbiBhIHJlZ2lzdHJhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVUd28oYnVkZ2V0U3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICBidWRnZXRTdHJ1Y3R1cmVzLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVUd28oaWRFcDE6IHN0cmluZyk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTJfZGFvLnBocD9pZF9lcDE9JHtpZEVwMX1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvKGVsZW1lbnQpKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZVR3b0FsbCgpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvKGVsZW1lbnQpKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRWxpbWluYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHVub1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYSBvIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZU9uZShpZFN0cnVjdHVyZXM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KCdkZWxldGUnLCBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMV9kYW8ucGhwYCxcclxuICAgICAgeyBib2R5OiBpZFN0cnVjdHVyZXMsIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgdW5hIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgdW5vXHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlIEVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgdW5vIHF1ZSBzZSB2YSBhIGFjdHVhbGl6YXJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVCdWRnZXRTdHJ1Y3R1cmVPbmUoc3RydWN0dXJlOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMV9kYW8ucGhwYCwgc3RydWN0dXJlLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RyYSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdHJpYXMgZW4gbGEgYmFzZSBkZSBkYXRvc1xyXG4gICAgICogQHBhcmFtIGJ1ZGdldFN0cnVjdHVyZXMgQXJyYXkgZGUgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWEgcXVlIHMgZXZhbiBhIHJlZ2lzdHJhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVPbmUoYnVkZ2V0U3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWExX2Rhby5waHBgLFxyXG4gICAgICBidWRnZXRTdHJ1Y3R1cmVzLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVPbmUoKTogT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWExX2Rhby5waHBgLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFPbmUoZWxlbWVudCkpKSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNvbmZpZ3VyYWNpb25lcyBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25TUEdbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uU1BHKCk6IE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25TUEc+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db25maWd1cmF0aW9uU1BHPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhX2NvbmZpZ19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gbmV3IE1Db25maWd1cmF0aW9uU1BHKHJlc3AuZGF0YVswXSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25SUENbXT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uUlBDKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29uZmlndXJhdGlvblJQQz4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2NvbmZpZ19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXNwLmRhdGEgPSBuZXcgTUNvbmZpZ3VyYXRpb25SUEMocmVzcC5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIE1Db25maWd1cmFjaW9uU05PIGRlIGxhIG5vbWluYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU05PW10+XHJcbiAgICAgKiBAZGF0ZSAyNy0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNOTygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9jb25maWd1cmFjaW9uX2Rhby5waHA/dGlwbz0keydjb25maWd1cmFjaW9uJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGlmKHJlc3AuZGF0YSAhPW51bGwpe1xyXG4gICAgICAgICAgICAgIHJlc3AuZGF0YSA9IHJlc3AuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmZpZ3VyYWNpb25TTk8oZSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlc3AuZGF0YT1bXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZGF0ZVRvU3RyaW5nKGRhdGU6IERhdGUpOiBzdHJpbmd7XHJcbiAgICAgIHJldHVybiBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7XHJcbiAgICAgICAgZGF0ZS5nZXRNb250aCgpICsgMSA+PSAxMCA/IGRhdGUuZ2V0TW9udGgoKSArIDEgOiBgMCR7ZGF0ZS5nZXRNb250aCgpICsgMX1gXHJcbiAgICAgIH0tJHtcclxuICAgICAgICBkYXRlLmdldERhdGUoKSA+PSAxMCA/IGRhdGUuZ2V0RGF0ZSgpIDogYDAke2RhdGUuZ2V0RGF0ZSgpfWBcclxuICAgICAgfWBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgU2VndXJpZGFkXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ1NTUygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nzcy9zZWd1cmlkYWRfY29uZmlnX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlc3AuZGF0YSA9IG5ldyBNQ29uZmlnU1NTKHJlc3AuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNwXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcG9uZW50cyhzeXN0ZW1Db2RlOiBzdHJpbmcgPSBudWxsLCBwZXJtaXQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPElSZXNwb25zZT57XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3NzL2NvbXBvbmVudGVzX2Rhby5waHA/JHtzeXN0ZW1Db2RlID8gYGNvZHNpcz0ke3N5c3RlbUNvZGV9JHtcclxuICAgICAgICAgIHBlcm1pdCA/IGAmcGVybWl0PXRydWVgIDogJydcclxuICAgICAgICB9YCA6ICcnfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApLnBpcGUoXHJcbiAgXHJcbiAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbXBvbmVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBmdWVudGVzIGRlIGZpbmFuY2lhbWllbnRvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUZ1ZW50ZUZpbmFuY2lhbWllbnRvW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RnVlbnRlRmluYW5jaWFtaWVudG8oKTogT2JzZXJ2YWJsZTxNRnVlbnRlRmluYW5jaWFtaWVudG9bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRnVlbnRlRmluYW5jaWFtaWVudG9bXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZnVlbnRlX2ZpbmFuY2lhbWllbnRvX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1GdWVudGVGaW5hbmNpYW1pZW50byhlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2VudHJvcyBkZSBjb3N0b1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DZW50cm9Db3N0b1tdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqIEBwYXJhbSBpZDppZHVzdXJpbyBvIGlkIGRlbCBlY250cm8gZGUgY29zdG9cclxuICAgICAqIG1vZGlmaWNhZG8gMjgtMTItMjAyMlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2VudHJvQ29zdG8odGlwbzogJ2FsbCd8J29uZSd8J3VzZXInfCdlbnRlcic9IG51bGwsIGlkPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1DZW50cm9Db3N0b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY2VudHJvX2Nvc3RvX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ2VudHJvQ29zdG8oZWxlbWVudCkpKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjZW50cm9zIGRlIGNvc3RvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvc3RDZW50ZXJzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY2VudHJvX2Nvc3RvX2Rhby5waHBgLCBcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ2VudHJvQ29zdG8oZWxlbWVudCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlckNvc3RDZW50ZXJzKGNvZGlnbzpzdHJpbmcpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NnL2NlbnRyb19jb3N0b191c3VhcmlvX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsIFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Vc3VhcmlvQ2VudHJvQ29zdG8oZWxlbWVudCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgY2hlY2trc1xyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlIGxhIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBEYXRhIHF1ZSBzIGV2YSBhIG1vc3RyYXIgZW4gbGEgdGFibGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5EaWFsb2dNdWx0aVNlbGVjdChcclxuICAgICAgLy8gY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICAvLyB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgLy8gZGF0YVNvdXJjZTogYW55W10sXHJcbiAgICAgIC8vIGNvbHVtbk5hbWVzPzogc3RyaW5nW11cclxuICAgICAgY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLCBcclxuICAgICAgd2lkdGg6IHN0cmluZyA9ICc0NTBweCcsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBoYXNCYWNrZHJvcD86IGJvb2xlYW4sXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlPzogYm9vbGVhbixcclxuICAgICAgIC8vIGRpc2FibGVNYXN0ZXJUb2dnbGU/OiBib29sZWFuXHJcbiAgICAgIH0gPSB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSwgXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLCBcclxuICAgICAgLy8gIGRpc2FibGVNYXN0ZXJUb2dnbGU6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgICk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVGFibGVTZWxlY3RDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogZGF0YVNvdXJjZSxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzLFxyXG4gICAgICAgICAvLyBkaXNhYmxlTWFzdGVyVG9nZ2xlOiBvcHRpb25zLmRpc2FibGVNYXN0ZXJUb2dnbGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcclxuICAgICAgICBoYXNCYWNrZHJvcDogb3B0aW9ucy5oYXNCYWNrZHJvcCxcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IG9wdGlvbnMuZGlzYWJsZUNsb3NlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TVBsYW5Vbmljb0N1ZW50YT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nUGxhblVuaWNvQ3VlbnRhcygpOiBQcm9taXNlPE1QbGFuVW5pY29DdWVudGE+IHtcclxuICAgICAgbGV0IHBsYW5lczogTVBsYW5Vbmljb0N1ZW50YVtdID0gYXdhaXQgdGhpcy5nZXRMaXN0YWRvUExhblVuaWNvQ3VlbnRhcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2lvbiddLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2nDs24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIFBsYW4gZGUgQ3VlbnRhcyBHw6luZXJhbCcsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBwbGFuZXNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgbGlzdGFkbyBkZWwgcGxhbiDDum5pY28gZGUgY3VlbnRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1wbGFuVW5pY29DdWVudGFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRMaXN0YWRvUExhblVuaWNvQ3VlbnRhcygpOiBPYnNlcnZhYmxlPE1QbGFuVW5pY29DdWVudGFbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNUGxhblVuaWNvQ3VlbnRhW10+KGAke3RoaXMuVVJMfS9kYW8vc2NnL3BsYW5fdW5pY29fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTVBsYW5Vbmljb0N1ZW50YShlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIFNDR1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU0NHW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQG1vZGlmaXQgMjUtMDctMjAyMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNDRygpOiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU0NHW10+IHsgICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbmZpZ3VyYWNpb25TQ0dbXT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY29uZmlndXJhY2lvbl9jb250YWJpbGlkYWRfZGFvLnBocGAsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29uZmlndXJhY2lvblNDRyhlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIHVuIGRpYWxvZyBkZSBjb25maXJtYWNpw7NuXHJcbiAgICAgKiBAcGFyYW0gdGl0bGUgVMOtdHVsbyBkZSBsYSBtb2RhbCBkZSBjb25maXJtXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIChvcGNpb25hbCkgcGFyYSBlbCB1c3VzYXJpb1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPGJvb2xlYW4+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbkRpYWxvZ0NvbmZpcm0odGl0bGU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgbWVzc2FnZTogKG1lc3NhZ2UpID8gbWVzc2FnZSA6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZpZXJ0ZSBlbCBjb250ZW5pZG8gZGUgdW4gQWJzdHJhY3RDb250cm9sIGVuIG1hecO6c2N1bGEgKFVzYXIgZW4gZXZlbnRvIGtleXVwKVxyXG4gICAgICogQHBhcmFtIGZvcm1Hcm91cCBGb3JtdWxhcmlvIGTDs25kZSBzZSB2YSBhIGJ1c2NhciBlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBwYXJhbSBuYW1lIE5vbWJyZSBkZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGFuZ2VUb1VwcGVyQ2FzZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sKGZvcm1Hcm91cCwgbmFtZSkuc2V0VmFsdWUodGhpcy5nZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwLCBuYW1lKS52YWx1ZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEFic3RyYWN0Q29udHJvbCBkZSB1biBmb3JtdWxhcmlvXHJcbiAgICAgKiBAcGFyYW0gZm9ybUdyb3VwIEZvcm11bGFyaW8gZG9uZGUgc2UgdmEgYSBidXNjYXIgZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBOb21icmUgZGVsIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQHJldHVybiBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwOiBGb3JtR3JvdXAsIG5hbWU6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICAgIHJldHVybiBmb3JtR3JvdXAuZ2V0KG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFByZXZpZW5lIHF1ZSBzZSBlc2NyaWJhbiBsZXRyYXMgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKiBAbW9kaWZpY2FkbyBjb21vIG9ubHlOdW1lcm8gcGFyYSBjb3JyZWdpciBjb2RpZ28sIHVzYXIgY3VycmVuY3ktaW5wdXQgc2kgcXVpZXJlIHVzYXIgZGVjaW1hbGVzIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25seURlY2ltYWwoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWlzTmFOKCtldmVudC5rZXkpICYmIGV2ZW50LmtleUNvZGUgIT0gMzIpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUHJldmllbmUgcXVlIHNlIGVzY3JpYmFuIGxldHJhcyBlbiBlbCBpbnB1dCAoVXNhciBlbiBrZXlwcmVzcylcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ubHlOdW1iZXJzKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgICAgaWYgKCFpc05hTigrZXZlbnQua2V5KSAmJiBldmVudC5rZXlDb2RlICE9IDMyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlIChhLXogQS1aIMOhLcO6IMOxw5Egw7zDnCAnLC4pIHF1ZSBzZSBlc2NyaWJhbiBudW1lcm9zIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAZGF0ZSAxNC0wNS0yMDIyXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgdHlwZU5hbWUoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoKGV2ZW50LmtleT49J2EnICYmIGV2ZW50LmtleTw9J3onKSAgfHwgKGV2ZW50LmtleT49J0EnICYmIGV2ZW50LmtleTw9J1onKSB8fCAgZXZlbnQua2V5PT1cIsOxXCIgfHwgIGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHwgKGV2ZW50LmtleT49J8OhJyAmJiBldmVudC5rZXk8PSfDuicpIHx8IGV2ZW50LmtleT49J8O8JyAgfHwgZXZlbnQua2V5Pj0nw5wnICB8fCBldmVudC5rZXk9PVwiJ1wiICB8fCBldmVudC5rZXlDb2RlPT0zMiBcclxuICAgICAgICAgIHx8ICBldmVudC5rZXk9PVwiLlwiIHx8ICBldmVudC5rZXk9PVwiLFwiICApe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSAoMC05IGEteiBBLVogw6Etw7ogw7HDkSDDvMOcICcsLi1fLzooKSUjwromJOKCrMKjwqUpIHF1ZSBzZSBlc2NyaWJhbiAgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBkYXRlIDE0LTA1LTIwMjJcclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyB0eXBlVGV4dChldmVudD86IGFueSk6IGJvb2xlYW4geyAgICAgIFxyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgICYmIGV2ZW50LmtleTw9J3onKSB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpIHx8IGV2ZW50LmtleT09XCLDsVwiIHx8IGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHwgKGV2ZW50LmtleT49J8OhJyAmJiBldmVudC5rZXk8PSfDuicpIHx8IGV2ZW50LmtleT09J8O8JyB8fCBldmVudC5rZXk9PSfDnCcgfHwgZXZlbnQua2V5PT1cIidcIiB8fCBpc05hTigrZXZlbnQua2V5KSBcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09XCIuXCIgIHx8ICBldmVudC5rZXk9PVwiLFwiIHx8IGV2ZW50LmtleT09XCImXCIgfHwgIGV2ZW50LmtleT09XCJfXCJ8fCBldmVudC5rZXk9PVwiLVwiIHx8IGV2ZW50LmtleT09XCIjXCJcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09XCLCulwiICB8fCAgZXZlbnQua2V5PT1cIiRcIiB8fCBldmVudC5rZXk9PVwiKFwiIHx8IGV2ZW50LmtleT09XCIpXCIgfHwgZXZlbnQua2V5PT1cIiVcIiB8fCBldmVudC5rZXk9PScgJ1xyXG4gICAgICAgICAgfHwgZXZlbnQua2V5PT0nOicgIHx8ZXZlbnQua2V5PT0nLyd8fCBldmVudC5rZXlDb2RlPT04MzY0IHx8ICBldmVudC5rZXlDb2RlPT0xNjUgfHxldmVudC5rZXlDb2RlPT0xNjMpe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgIFxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlICgwLTkgYS16IEEtWiDDscORIC4tXykgcXVlIHNlIGVzY3JpYmFuICBlbiBlbCBpbnB1dCAoVXNhciBlbiBrZXlwcmVzcylcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGRhdGUgMTQtMDUtMjAyMlxyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgdHlwZUNvZGUoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoKGV2ZW50LmtleT49J2EnICAmJiBldmVudC5rZXk8PSd6JykgfHwgKGV2ZW50LmtleT49J0EnICYmIGV2ZW50LmtleTw9J1onKSAgfHwgZXZlbnQua2V5PT1cIsOxXCIgfHwgZXZlbnQua2V5PT1cIsORXCIgXHJcbiAgICAgICAgICB8fGlzTmFOKCtldmVudC5rZXkpIHx8IGV2ZW50LmtleT09XCIuXCIgfHwgIGV2ZW50LmtleT09XCJfXCIgfHwgZXZlbnQua2V5PT1cIi1cIil7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQ29tdW5pZGFkPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dVbmlkYWRlc1RyaWJ1dGFyaWFzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCB1ZFRyaWJ1dGFyaWFzOiBNVW5pZGFkVHJpYnV0YXJpYVtdID0gYXdhaXQgdGhpcy5nZXRVbmlkYWRlc1RyaWJ1dGFyaWFzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydhw7FvJywgJ25yb19kZWNyZXRvJywgJ2ZlY2hhX2RlY3JldG8nLCAnZW50cmFkYV92aWRlbmNpYScsICdwdWJsaWNhY2lvbl9nYWNldGEnLCAnbnJvX2dhY2V0YScsICd2YWxvcnV0J10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBVbmlkYWRlcyBUcmlidXRhcmlhcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiB1ZFRyaWJ1dGFyaWFzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyB1bmlkYWRlcyB0cmlidXRhcmlhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRVbmlkYWRlc1RyaWJ1dGFyaWFzKCk6IE9ic2VydmFibGU8TVVuaWRhZFRyaWJ1dGFyaWFbXT4ge1xyXG4gICAgICBjb25zdCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1VbmlkYWRUcmlidXRhcmlhW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3VuZHRyaWJ1dGFyaWFfZGFvLnBocGAsIHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnlbXSkgPT4gcmVzcC5tYXAoZWxlbWVudCA9PiBuZXcgTVVuaWRhZFRyaWJ1dGFyaWEoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW5hIG1vZGFsIGfDqW5lcmljYVxyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlbCBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29HZW5lcmljbyhcclxuICAgICAgY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLCBcclxuICAgICAgd2lkdGg6IHN0cmluZyA9ICc0NTBweCcsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBoYXNCYWNrZHJvcD86IGJvb2xlYW4sXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlPzogYm9vbGVhblxyXG4gICAgICB9ID0ge2Rpc2FibGVDbG9zZTogZmFsc2UsIGhhc0JhY2tkcm9wOiBmYWxzZX1cclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZSxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiBvcHRpb25zLmhhc0JhY2tkcm9wID8gb3B0aW9ucy5oYXNCYWNrZHJvcCA6IGZhbHNlLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZTogb3B0aW9ucy5kaXNhYmxlQ2xvc2UgPyBvcHRpb25zLmRpc2FibGVDbG9zZSA6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW5hIG1vZGFsIGfDqW5lcmljYSBjb24gMiBpbnB1dHNcclxuICAgICAqIEBwYXJhbSBjb2x1bW5zIENvbHVtbmFzIHF1ZSB2YSBhIHRlbmVyIGxhIHRhYmxhXHJcbiAgICAgKiBAcGFyYW0gdGl0bGUgVMOtdHVsbyBkZWwgZGlhbG9nXHJcbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBEYXRhIHF1ZSBzZSB2YSBhIG1vc3RyYXIgZW4gbGEgdGFibGFcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhdGFsb2dvRG9zSW5wdXRzKFxyXG4gICAgICBjb2x1bW5zOiBzdHJpbmdbXSxcclxuICAgICAgdGl0bGU6IHN0cmluZywgXHJcbiAgICAgIGRhdGFTb3VyY2U6IGFueVtdLCBcclxuICAgICAgZmlsdGVyRGF0YTogZmlsdGVyRGF0YVtdLFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLFxyXG4gICAgICB3aWR0aDogc3RyaW5nID0gXCI0NTBweFwiXHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0RvYmxlSW5wdXRDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXMsXHJcbiAgICAgICAgICBmaWx0ZXJEYXRhXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TUNvbXVuaWRhZD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ29tdW5pZGFkKCk6IFByb21pc2U8TUNvbXVuaWRhZD4ge1xyXG4gICAgICBsZXQgY29tdW5pZGFkZXM6IE1Db211bmlkYWRbXSA9IGF3YWl0IHRoaXMuZ2V0Q29tdW5pZGFkZXMoKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ3ByZWZpam8nLCAncGFpcycsICdlc3RhZG8nLCAnbXVuaWNpcGlvJywgJ3BhcnJvcXVpYScsICdjb2RpZ28nLCAnY29tdW5pZGFkJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBDb211bmlkYWRlcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBjb211bmlkYWRlc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29tdW5pZGFkW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tdW5pZGFkZXMoKTogT2JzZXJ2YWJsZTxNQ29tdW5pZGFkW10+IHtcclxuICAgICAgY29uc3QgcmVxdWVzdDogSVJlcXVlc3QgPSB7XHJcbiAgICAgICAgb3BlcmFjaW9uOiAnb2J0ZW5lckRhdGEnLFxyXG4gICAgICAgIHNpZ2VzcF9jb25leGlvbjoge1xyXG4gICAgICAgICAgc2Vydmlkb3I6IHRoaXMuVVJMLFxyXG4gICAgICAgICAgdXN1YXJpbzogdGhpcy51c3VhcmlvQWN0aXZvLmdldEludGVyZmFjZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNQ29tdW5pZGFkW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbXVuaWRhZGVzX2Rhby5waHBgLCByZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55W10pID0+IHJlc3AubWFwKGVsZW1lbnQgPT4gbmV3IE1Db211bmlkYWQoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIGRlIGxhcyBsYXMgbW9uZWRhc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1Nb25lZGE+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ01vbmVkYXMoKTogUHJvbWlzZTxNTW9uZWRhPiB7XHJcbiAgICAgIGxldCBjb2luczogTU1vbmVkYVtdID0gYXdhaXQgdGhpcy5nZXRNb25lZGFzKCd0b2RhcycpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY29kaWdvJywgJ2Rlbm9taW5hY2lvbicsICdjb2RpZ29Jc28nLCAnc2ltYm9sbyddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgTW9uZWRhcycsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lczogWydjw7NkaWdvJywgJ2Rlbm9taW5hY2nDs24nLCAnaXNvJywgJ3NpbWJvbG8nXSxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGNvaW5zXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIG1vbmVkYXNcclxuICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU1vbmVkYVtdPlxyXG4gICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICogYWN0dWFsaXphZG8gNC0xMi0yMDIyXHJcbiAgICogQHBhcmFtIHRpcG8gOnN0cmluZyB7J3RvZGFzJywndW5vJywnYWN0dWFsfVxyXG4gICAqIEBwYXJhbSBpZCA6IG51bWJlclxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqLyBcclxuICAgIFxyXG4gICAgXHJcbiAgICBwdWJsaWMgZ2V0TW9uZWRhcyh0aXBvOnN0cmluZyxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxNTW9uZWRhW10+IHsgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNTW9uZWRhW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL21vbmVkYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNTW9uZWRhKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBARGVzY3JpcHRpb246IE9idGllbmUgbGEgdGFzYSBkZSBjYW1iaW8gYXNvY2lhZGFzIGEgdW5vIG8gdmFyaWFzIG1vbmVkYXNcclxuICAgICAqIEBwYXJhbSB0aXBvIHN0cmluZ1xyXG4gICAgICogQHBhcmFtIGlkIGNvZGlnbyBtb25lZGFcclxuICAgICAqIEByZXR1cm5zIGFycmF5L251bGxcclxuICAgICAqIEB0aXBvOmFsbC0+dG9kYXMsIChtb25lZGEtPnVuYSBtb25lZGEgaWQtPmlkIGRlIG1vbmVkYSlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1cnJlbmN5RXhjaGFuZ2VSYXRlKHRpcG86ICdhbGwnfCAnbW9uZWRhJz0gbnVsbCwgaWQ/Om51bWJlcik6IE9ic2VydmFibGU8TUV4Y2hhbmdlUmF0ZVtdPiB7ICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUV4Y2hhbmdlUmF0ZVtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy90YXNhX2NhbWJpb19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXhjaGFuZ2VSYXRlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNY3VlbnRhSW5zdGl0dWNpb25hbD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc0luc3RpdHVjaW9uYWxlcygpOiBQcm9taXNlPE1DdWVudGFJbnN0aXR1Y2lvbmFsPiB7XHJcbiAgICAgIGxldCBhY2NvdW50czogTUN1ZW50YUluc3RpdHVjaW9uYWxbXSA9IGF3YWl0IHRoaXMuZ2V0Q3VlbnRhc0luc3RpdHVjaW9uYWxlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2lvbiddLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2nDs24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIHBsYW4gZGUgY3VlbnRhIGluc3RpdHVjaW9uYWwnLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNJbnN0aXR1Y2lvbmFsZXMoaW52ZW50b3J5PzogYm9vbGVhbik6IE9ic2VydmFibGU8TUN1ZW50YUluc3RpdHVjaW9uYWxbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jdWVudGFzX2Rhby5waHAkeyhpbnZlbnRvcnkpID8gJz9pbnZlbnRvcnk9dHJ1ZScgOiAnJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFJbnN0aXR1Y2lvbmFsKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY3VlbnRhcyBkZSBwcmVzdXB1ZXN0byAoUmVjdXJzb3MgeSBFZ3Jlc29zKVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc1ByZXN1cHVlc3RvKCk6IFByb21pc2U8TUN1ZW50YVByZXN1cHVlc3RvPiB7XHJcbiAgICAgIGxldCBhY2NvdW50czogTUN1ZW50YVByZXN1cHVlc3RvW10gPSBhd2FpdCB0aGlzLmdldEN1ZW50YXNQcmVzdXB1ZXN0bygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpw7NuJ10sXHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpb24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIEN1ZW50YXMgZGUgUHJlc3VwdWVzdG8nLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgZGUgcmVjdXJzb3MgeSBlZ3Jlc29zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YVByZXN1cHVlc3RvPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNQcmVzdXB1ZXN0bygpOiBPYnNlcnZhYmxlPE1DdWVudGFQcmVzdXB1ZXN0b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFQcmVzdXB1ZXN0bz4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvcGxhbl91bmljb19jdWVudGFzX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhUHJlc3VwdWVzdG8oZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgY8OhdGFsb2dvIGRlIGN1ZW50YXMgZGUgbGEgdGFibGEgXCJzY2dfcGxhbl91bmljb19yZVwiXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIGZpbHRybzogSW5kaWNhIGJham8gcXVlIHBhcmFtZXRyb3Mgc2UgdmEgYSBmaWx0cmFyIGVsIGNhdGFsb2dvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzUHJlc3VzcHVlc3RvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgZmlsdHJvOiBmaWx0cm9DdWVudGFzUHJlc3VwdWVzdG8gPSBudWxsLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gJzc1MHB4J1xyXG4gICAgKTogUHJvbWlzZTxNQ3VlbnRhUHJlc3VwdWVzdG8+IHtcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFQcmVzdXB1ZXN0b1tdID0gW107XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmdldEN1ZW50YXNQcmVzdXB1ZXN0bygpLnRvUHJvbWlzZSgpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIGN1ZW50YXMgPSByZXM7XHJcbiAgICAgICAgaWYgKGZpbHRybykge1xyXG4gICAgICAgICAgaWYgKGZpbHRyby5lc3RhZG8pIHtcclxuICAgICAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjLnN0YXR1cyA9PSBmaWx0cm8uZXN0YWRvXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlsdHJvLnRpcG8pIHtcclxuICAgICAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjLnRpcG8gPT0gZmlsdHJvLnRpcG9cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgZVsncHJvdlN0YXR1cyddID0gZS5zdGF0dXMgPT0gXCJDXCIgPyBcIk1vdmltaWVudG9zXCIgOiBcIlRvdGFsaXphZG9yYVwiXHJcbiAgICAgICAgICBlWydwcm92VHlwZSddID0gZS5zdGF0dXMgPT0gXCJSXCIgPyBcIlJlY3Vyc29zXCIgOiBcIkluZ3Jlc29zXCJcclxuICAgICAgICAgIHJldHVybiBlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIixcInByb3ZUeXBlXCJdLFxyXG4gICAgICAgIHRpdHVsbyxcclxuICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgIFtcIkN1ZW50YVwiLFwiRGVub21pbmFjacOzblwiLFwiRXN0YWRvXCIsXCJUaXBvXCJdLFxyXG4gICAgICAgIGFuY2hvXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGPDoXRhbG9nbyBkZSBjdWVudGFzIGRlIGxhIHRhYmxhIFwic3BnX2N1ZW50YXNcIlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxNQ3VlbnRhRWdyZXNvcz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIHByZXN1cHVlc3RvOiBJbmRpY2Egc2kgc2UgYSB0cmFiYWphciBjb24gZXN0cnVjdHVyYSBkZSBwcmVzdXB1ZXN0byBvIG5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzRWdyZXNvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgcHJlc3VwdWVzdG86IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gXCI3NTBweFwiXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFFZ3Jlc29zPntcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRFeHBlbnNlQWNjb3VudHMoKS50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgY3VlbnRhcyA9IHJlc1xyXG4gICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihlID0+IHtcclxuICAgICAgICAgIHJldHVybiBlLnN0YXR1cyA9PSBcIkNcIlxyXG4gICAgICAgIH0pLm1hcChlID0+IHtcclxuICAgICAgICAgIGVbJ3Byb3ZTdGF0dXMnXSA9IGUuc3RhdHVzID09IFwiQ1wiID8gXCJNb3ZpbWllbnRvc1wiIDogXCJUb3RhbGl6YWRvcmFcIlxyXG4gICAgICAgICAgcmV0dXJuIGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgaWYgKHByZXN1cHVlc3RvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvRG9zSW5wdXRzKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcImVzdHJ1Y3R1cmFcIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgICAgW3tcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiQ3VlbnRhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImN1ZW50YVwiXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkVzdHJ1Y3R1cmFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiZXN0cnVjdHVyYVwiXHJcbiAgICAgICAgICB9XSxcclxuICAgICAgICAgIFtcIkN1ZW50YVwiLCBcIkRlbm9taW5hY2nDs25cIiwgXCJFc3RydWN0dXJhXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkQWNjb3VudHM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgICBjdWVudGFzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlcmVkQWNjb3VudHMuZmluZChlID0+IGUuY3VlbnRhID09IGMuY3VlbnRhKSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLnB1c2goYylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjw6F0YWxvZ28gZGUgY3VlbnRhcyBkZSBsYSB0YWJsYSBcInNwaV9jdWVudGFzXCJcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8TUN1ZW50YUluZ3Jlc29zPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBwYXJhbXMgcHJlc3VwdWVzdG86IEluZGljYSBzaSBzZSBhIHRyYWJhamFyIGNvbiBlc3RydWN0dXJhIGRlIHByZXN1cHVlc3RvIG8gbm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0N1ZW50YXNJbmdyZXNvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgcHJlc3VwdWVzdG86IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gXCI3NTBweFwiXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFJbmdyZXNvcz57XHJcbiAgICAgIGxldCBjdWVudGFzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEluY29tZUFjY291bnRzKCkudG9Qcm9taXNlKCkudGhlbigocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBjdWVudGFzID0gcmVzLmRhdGFcclxuICAgICAgICBjdWVudGFzID0gY3VlbnRhcy5maWx0ZXIoZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZS5lc3RhZG8gPT0gXCJDXCJcclxuICAgICAgICB9KS5tYXAoZSA9PiB7XHJcbiAgICAgICAgICBlWydwcm92U3RhdHVzJ10gPSBlLmVzdGFkbyA9PSBcIkNcIiA/IFwiTW92aW1pZW50b3NcIiA6IFwiVG90YWxpemFkb3JhXCJcclxuICAgICAgICAgIHJldHVybiBlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChwcmVzdXB1ZXN0bykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0Rvc0lucHV0cyhcclxuICAgICAgICAgIFtcImN1ZW50YVwiLFwiZGVub21pbmFjaW9uXCIsXCJlc3RydWN0dXJhXCIsXCJwcm92U3RhdHVzXCJdLFxyXG4gICAgICAgICAgdGl0dWxvLFxyXG4gICAgICAgICAgY3VlbnRhcyxcclxuICAgICAgICAgIFt7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkN1ZW50YVwiLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogXCJjdWVudGFcIlxyXG4gICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJFc3RydWN0dXJhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImVzdHJ1Y3R1cmFcIlxyXG4gICAgICAgICAgfV0sXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0cnVjdHVyYVwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZEFjY291bnRzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICAgIGN1ZW50YXMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgIGlmICghZmlsdGVyZWRBY2NvdW50cy5maW5kKGUgPT4gZS5jdWVudGEgPT0gYy5jdWVudGEpKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMucHVzaChjKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMsXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0gICAgXHJcblxyXG4gICAgcHVibGljIGdldFVuaWRhZEFkbWluaXN0cmF0aXZhKCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3BnL3VuaWRhZF9hZG1pbmlzdHJhdGl2YV9kYW8ucGhwYCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1BZG1pbmlzdHJhdGl2ZVVuaXQoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KSBcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjYXJnb3MgZGUgc2VydmljaW9zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZpY2VDaGFyZ2VzKHNlcnZpY2VJZDpudW1iZXIgPSBudWxsKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NvYy9zZXJ2aWNpb19jYXJnb19kYW8ucGhwJHtcclxuICAgICAgICBzZXJ2aWNlSWQgPyBgP3NlcnZpY2VfaWQ9JHtzZXJ2aWNlSWR9YCA6ICcnXHJcbiAgICAgIH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2VydmljZUNoYXJnZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwYWlzZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ291bnRyeT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAbW9kaWZpZWQgMTAtMDEtMjAyMlxyXG4gICAgICogQHBhcmFtIGNvZGlnbzogQ29kaWdvIGRlbCBwYWlzXHJcblxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRDb3VudHJpZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db3VudHJ5W10+IHtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ291bnRyeT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvcGFpc2VzX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvdW50cnkoZSkpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBlc3RhZG9zXHJcbiAgICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU3RhdGU+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDQtMTItMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gY29kaWdvOiBDb2RpZ28gZGVsIHBhaXNcclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRTdGF0ZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1TdGF0ZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVN0YXRlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lc3RhZG9zX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVN0YXRlKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgbXVuaWNpcGlvc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU11bmljaXBhbGl0eT5cclxuICAgICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAgICogQG1vZGlmaWNhZG8gMTAtMDEtMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gcGFpczogQ29kaWdvIGRlbCBwYWlzICxcclxuICAgICAgICogQHBhcmFtIGVzdGFkbzogQ29kaWdvIGRlbCBlc3RhZG9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG4gICAgICAgKi9cclxuICAgICAgcHVibGljIGdldE11bmljaXBhbGl0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TU11bmljaXBhbGl0eVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TU11bmljaXBhbGl0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvbXVuaWNpcGlvc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNTXVuaWNpcGFsaXR5KGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgcGFycm9xdWlhcyBcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG4gICAgICAgKiBAcGFyYW0gbXVuaWNpcGlvOmNvZGlnbyBNdW5pY2lwaW9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG5cclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRQYXJpc2hlcyhwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcsbXVuaWNpcGlvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1QYXJpc2hbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1QYXJpc2g+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3BhcnJvcXVpYXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGFyaXNoKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2l1ZGFkZXNcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG5cclxuXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRDaXR5KHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TUNpdHlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DaXR5PihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jaXVkYWRlc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2l0eShlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjaXVkYWRlc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVBhcmlzaD5cclxuICAgICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG5cclxuICAgICAgICovXHJcbiAgICAgICAgcHVibGljIGdldENvbW11bml0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZywgbXVuaWNpcGlvPzpzdHJpbmcscGFycm9xdWlhPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db21tdW5pdHlbXT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbW11bml0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY29tdW5pZGFkZXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99JnBhcnJvcXVpYT0ke3BhcnJvcXVpYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbW11bml0eShlKSkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHNpc3RlbWFzIGFjdGl2YXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU2lzdGVtYT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaXN0ZW1hcygpOiBPYnNlcnZhYmxlPE1TaXN0ZW1hW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVNpc3RlbWE+KGAke3RoaXMuVVJMfS9kYW8vc3NzL3Npc3RlbWFzX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2lzdGVtYShlKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBtb25lZGEgYWN0dWFsXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBhY3R1YWxpemFkbzogNC0xMi0yMDIyMlxyXG4gICAgICogQHBhcmFtcyBpZDogaWQgZGUgbGEgbW9uZWRhLFxyXG4gICAgICogQHBhcmFtcyB0aXBvOiB0b2Rhcy0+b2J0aWVuZSB0b2RhcyBsYXMgbW9uZWRhLCAodW5vLT4gb2J0aWVuZSB1bmEgbW9uZWRhICsgaWQpXHJcbiAgICAgKiAobW9uOmZvcm1hdG8gcGFyYSBpbnB1dEN1cnJlbmN5ICsgaWQgKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudEN1cnJlbmN5KHRpcG86J3RvZGFzJ3wndW5vJ3wnbW9uJz1udWxsLGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL21vbmVkYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Nb25lZGFDb25maWcocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGxpbmVhIGVtcHJlc2FcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBhY3R1YWxpemFkbzogNS0xMi0yMDIyMlxyXG4gICAgICovXHJcbiAgICAgICAgIHB1YmxpYyBnZXRFbnRlcnByaXNlKHRpcG86J3VzdWFyaW8nIHwncHJvY2Vzbyd8J2RlZmF1bHQnPW51bGwgLGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lbnRlcnByaXNlX2Rhby5waHA/YCxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUVudGVycHJpc2UoZSkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBvcmdhbml6YWNpb25cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T3JnYW5pemF0aW9uVHlwZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy90aXBvX29yZ2FuaXphY2lvbl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTU9yZ2FuaXphdGlvblR5cGUoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIG9yZ2FuaXphY2lvblxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTcGVjaWFsdGllcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL2VzcGVjaWFsaWRhZF9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNwZWNpYWx0eShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgZG9jdW1lbnRvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXREb2N1bWVudHMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9kb2N1bWVudG9fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Eb2N1bWVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2xhc2lmaWNhY2lvbmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENsYXNpZmljYXRpb25zKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvY2xhc2lmaWNhY2lvbl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNsYXNpZmljYXRpb24oZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgcHJlZmlqbyBkZSBsb3MgdXN1YXJpb3NcclxuICAgICAqIEBwYXJhbSBwcm9jZWRlIERlIHF1ZSBtw7NkdWxvIHByb2NlZGVcclxuICAgICAqIEBwYXJhbSBjb2RzaXMgQ8OzZGlnbyBkZWwgc2lzdGVtYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Vc3VhcmlvUHJlZmlqb1tdPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFVzZXJQcmVmaXgoZmlsdGVyOiAnZGV0YWlsJyA9IG51bGwsIGNvZGU6IHN0cmluZyA9IG51bGwpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbnRyb2xfbnVtZXJvX2Rhby5waHAke1xyXG4gICAgICAgIGZpbHRlciA/IGA/ZmlsdGVyPSR7ZmlsdGVyfSZjb2RlPSR7Y29kZX1gIDogJydcclxuICAgICAgfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Vc3VhcmlvUHJlZmlqbyhlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHBlZmlqb1xyXG4gICAgICogQHBhcmFtIHByb2NlZGUgRGUgcXVlIG3Ds2R1bG8gcHJvY2VkZVxyXG4gICAgICogQHBhcmFtIGNvZHNpcyBDw7NkaWdvIGRlbCBzaXN0ZW1hXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVVzdWFyaW9QcmVmaWpvW10+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseUNyZXNwbyAxNy0xMi0yMDIyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQcmVmaXgoZmlsdGVyOiAnYWxsJyB8ICdvbmUnID0gbnVsbCwgY29kZTogc3RyaW5nID0gbnVsbCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbnRyb2xfbnVtZXJvX2Rhby5waHAke1xyXG4gICAgICAgIGZpbHRlciA/IGA/ZmlsdGVyPSR7ZmlsdGVyfSZjb2RlPSR7Y29kZX1gIDogJydcclxuICAgICAgfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QcmVmaWpvKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBwYXJhIGJ1c2NhciBsb3MgcHJvdmVlZG9yZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNUHJvdmVlZG9yPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dQcm92ZWVkb3JlcygpOiBQcm9taXNlPE1Qcm92ZWVkb3I+IHtcclxuICAgICAgbGV0IHByb3ZlZWRvcmVzOiBNUHJvdmVlZG9yW10gPSBhd2FpdCB0aGlzLmdldFByb3ZlZWRvcmVzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWyd0aXBvJywgJ3JpZicsICdub21icmUnXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIFByb3ZlZWRvcmVzIHkgQmVuZWZpY2lhcmlvcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBwcm92ZWVkb3Jlc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVByb3ZlZWRvcltdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFByb3ZlZWRvcmVzKCk6IE9ic2VydmFibGU8TVByb3ZlZWRvcltdPiB7XHJcbiAgICAgIGxldCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1Qcm92ZWVkb3JbXT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2JlbmVmaWNpYXJpb19kYW8ucGhwYCwgcmVxdWVzdCkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMubWFwKGVsZW1lbnQgPT4gbmV3IE1Qcm92ZWVkb3IoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzIHkgYmVuZWZpY2lhcmlvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQcm92aWRlcnNBbmRCZW5lZmljaWFyaWVzKHR5cGU6IHN0cmluZyA9IG51bGwpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3Byb3ZlZWRvcl9iZW5lZmljaWFyaW9fZGFvLnBocCR7dHlwZSA/IGA/cHJvdmlkZXJfdHlwZT0ke3R5cGV9YCAgOiAnJ31gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVByb3ZpZGVyQmVuZWZpY2lhcnkoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHVuIFVzdWFyaW8gc2VndW4gc3UgSURcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VXNlckJ5SWQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zc3MvdXN1YXJpb19kYW8ucGhwP2lkPSR7aWR9YCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Vc3VhcmlvKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBiYW5jb3NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QmFua3MoaWRFbnRlcnByaXNlPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NiL2JhbmNvX2Rhby5waHA/ZT0ke2lkRW50ZXJwcmlzZX1gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUJhbmsoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGN1ZW50YSBiYW5jYXJpYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QmFua0FjY291bnRUeXBlcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NiL2JhbmNvX3RpcG9fY3VlbnRhX2Rhby5waHBgLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUJhbmtBY2NvdW50VHlwZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWxsQmFua0FjY291bnQodGlwbzpzdHJpbmcsaWQ6bnVtYmVyKXsgICAgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3NjYi9jdWVudGFfYmFuY29fZGFvLnBocD90aXBvPSR7dGlwb30mZT0ke2lkfWAsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhQmFuY28oZWxlbWVudCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNcclxuICAgICAgICB9KSBcclxuICAgICAgKVxyXG4gICAgfSBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBiYW5jb3Mgc2lnZWNvZlxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaWdlY29mQmFua3MoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NpZ2VzcC9iYW5jb19zaWdlY29mX2Rhby5waHBgLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNpZ2Vjb2ZCYW5rKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpb24gZGUgU09DXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ1NPQygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc29jL2NvbmZpZ3VyYWNpb25fZGFvLnBocGAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNQ29uZmlnU09DKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkZWR1Y2Npb25cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RGVkdWN0aW9uVHlwZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3N0Yi90aXBvX2RlZHVjY2lvbl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURlZHVjdGlvblR5cGUoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbmNvbWVBY2NvdW50cyhvbmx5QXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPGFueT57XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3BpL2N1ZW50YXNfaW5ncmVzb3NfZGFvLnBocCR7XHJcbiAgICAgICAgb25seUF2YWlsYWJsZSA/ICc/YXZhaWxhYmxlPXRydWUnIDogJydcclxuICAgICAgfWAsIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DdWVudGFJbmdyZXNvcyhlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDaGFyZ2VzKCl7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3RiL2Nhcmdvc19kYW8ucGhwYCwgXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DYXJnbyhlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gIFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREZWR1Y3Rpb25zKCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zdGIvZGVkdWNjaW9uZXNfZGFvLnBocGAsIFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRGVkdWN0aW9uKGUpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApICBcclxuICAgIH1cclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBsb3MgZGF0b3MgZGUgRW1wcmVzYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogXHJcbiAgICAgKi9cclxuICAgICBwdWJsaWMgZ2V0Q29tcGFueSh0aXBvPzpzdHJpbmcsaWQ/Om51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvZW1wcmVzYXNfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRW1wcmVzYShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkb2N1bWVudG9zIHJlZ2lzdHJhZG9zIGVuIENYUFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogQGRhdGUgMjAtMDctMjAyMVxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRUaXBvc0RvY3VtZXRvcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jeHAvdGlwb19kb2N1bWVudG9fZGFvLnBocD9vcGVyYWNpb249JHsnYnVzY2FyJ30mZXhpc3Rlbj0keydleGlzdGVuJ31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1UaXBvRG9jdW1lbnRvQ1hQKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgICogQHBhcmFtIGdldCB0b21hIGxvcyB2YWxvcmVzOiBbIGlkT3JkZW5Db21wcmEgLCdyZWNlcGNpb24nLCdleGlzdGVuJywnY29kaWdvJywgJ29yZGVuZXNTT0MnLCAnb3AnLCAnYXJ0JyBdXHJcbiAgICAgICogQHBhcmFtIG4gY29kaWdvIERvY3VtZW50byBPcmRlbiwgc2UgdXNhIHBhcmEgb2J0ZW5lciBsb3MgZGV0YWxsZXMgZGUgbGEgb3JkZW4gZGUgY29tcHJhLCBlcyBvYmxpZ2F0b3JpbyBhbCBjb21iaW5hciBjb24gbGEgb3BjaW9uIGdldDogaWRPcmRlbkNvbXByYVxyXG4gICAgICAqIEBkZXNjcmlwdGlvbiAncmVjZXBjaW9uJzogT2J0aW5lIGxhcyBvcmRlbmVzIGRlIHN1bWluaXN0cm8sXHJcbiAgICAgICogZXhpc3RlIHkgY29kaWdvOiBPYnRpZW5lIGxvcyBjb2RpZ29zIHJlZ2lzdHJhZG9zLCBcclxuICAgICAgKiBvcmRlbmVzU09DOiBvYnRpZW5lIGxhcyBvcmRlbmVzIGRlIGNvbXByYSxcclxuICAgICAgKiBvcDogb2J0aWVuZSBsYXMgb3JkZW5lcyBwZW5kaWVudGVzXHJcbiAgICAgICogYXJ0OiBvYnRpZW5lIGxvcyBhcnRpY3Vsb3MgXHJcbiAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAgKiBAZGF0ZSAzLTEwLTIwMjFcclxuICAgICAgKiBAcmV0dXJucyBcclxuICAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRFbnRyYWRhU3VtaW5pc3Ryb3MoZ2V0OmFueSwgbj86c3RyaW5nKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2l2L2VudHJhZGFfc3VtaW5pc3Ryb19kYW8ucGhwP2dldD0ke2dldH0mbj0ke259YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUVudHJhZGFTdW1pbmlzdHJvcyhlKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgZG9jdW1lbnRvcyByZWdpc3RyYWRvcyBlbiBDWFBcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBkYXRlIDIwLTA3LTIwMjFcclxuICAgICAqL1xyXG5cclxuICAgICAgcHVibGljIGdldENvbmNlcHRvc0N4UCgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jeHAvY29uY2VwdG9fZGFvLnBocD9vcGVyYWNpb249JHsnYnVzY2FyJ31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db25jZXB0b3NDWFAoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBsb3MgY29uY2VwdG9zIFJldGVuY2lvbiBJU1JMXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAZGF0ZSAyNi0wNy0yMDIxXHJcbiAgICAgKi9cclxuXHJcbiAgICAgICAgcHVibGljIGdldENvbmNlcHRvc1JldGVuY2lvbigpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3N0Yi9kZWR1Y2Npb25lc19kYW8ucGhwP2NvZGU9JHsnY29uY2VwdG9zJ31gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db25jZXB0b1JldGVuY2lvbihlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAvKiogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBjb25maWd1cmFjacOzbiBkZSBSUkhIIHkgZGUgU05PXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgICAgcHVibGljIG9idGVuZXJDb25maWd1cmFjaW9uU05PKCl7XHJcbiAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vY29uZmlndXJhY2lvbl9kYW8ucGhwP3RpcG89JHsnY29uZmlndXJhY2lvbid9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7IFxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmZpZ3VyYWNpb25TTk8oZSkpOyAgXHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgICogXHJcbiAgICAgICogQHBhcmFtIHRpcG8gWydkZWZhdWx0JywgJ3VubycsICdjYXJnb3MnXSBkYWZhdWx0OlRvZGFzIGxhcyBub21pbmFzLCB1bm86IHVuYSBub21pbmEsICdjYXJnb3MnOiBub21pbmFzIHBvciBjYXJnb3NcclxuICAgICAgKiBAcGFyYW0gaWQgOmlkIGRlIGxhIG5vbWluYS4gQ2FtcG8gcmVxdWVyaWRvIHBhcmEgdW5vIHkgY2FyZ29zXHJcbiAgICAgICogQHJldHVybnMgYXJyYXkoKSAgICAgIFxyXG4gICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBub21pbmFzIHJlZ2lzdHJhZGFzXHJcbiAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAgKiBAZGF0ZSAyMC0xMC0yMVxyXG4gICAgICAqXHJcbiAgICAgKi8gICAgIFxyXG5cclxuICAgICAgIHB1YmxpYyBnZXROb21pbmEodGlwbzpzdHJpbmcsaWQ/Om51bWJlcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9kZWZpbmljaW9uX25vbWluYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURlZmluaWNpb25Ob21pbmEoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgLyoqXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjYXJnb3MgZGUgbGFzIG5vbWluYVxyXG4gICAgKiBAcGFyYW0gdGlwbyBbJ2NvZGlnbycsJ2RlZmF1bHQnXSAtPmNvZGlnbzogb2J0aWVuZSBlbCBwcm94aW1vIGNvZGlnby4gLT5kZWZhdWx0OiBvYnRpZW5lIHRvZG9zIGxvcyBjYXJnb3MgZGUgbGEgbm9taW5hXHJcbiAgICAqIEBwYXJhbSBpZCBpZCBkZSBsYSBub21pbmFcclxuICAgICogQHJldHVybnMgYXJyYXkoKVxyXG4gICAgKi9cclxuICAgICAgcHVibGljIGdldENhcmdvc05vbWluYSh0aXBvOnN0cmluZyxpZD86bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2FzaWduYWNpb25fY2FyZ29zX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQXNpZ25hY2lvbkNhcmdvKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gIFxyXG4gICAgICBcclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB1biBwZXJzb25hbCBkZSBsYSBuw7NtaW5hXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRQZXJzb25hbFNSSCh0aXBvOnN0cmluZyxpZD86bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL3BlcnNvbmFsX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGVyc29uYWwoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGFnZW5jaWEgZGUgYmFuY29cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldEFnZW5jaWFCYW5jbyh0aXBvOnN0cmluZyxpZD86bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NiL2FnZW5jaWFfZGFvLnBocD9jb2RlPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1BZ2VuY2lhQmFuY28oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGhvamFzIGRlIHRpZW1wb1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgICAgICAgcHVibGljIGdldEhvamFUaWVtcG8odGlwbzpzdHJpbmcsaWRQZXJzb25hbD86bnVtYmVyLGlkTm9taW5hPzpudW1iZXIpe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2hvamFfdGllbXBvX2Rhby5waHA/aWRQZXJzb25hbD0ke2lkUGVyc29uYWx9JmlkTm9taW5hPSR7aWROb21pbmF9YCxcclxuICAgICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNSG9qYVRpZW1wbyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gXHJcbiAgICAgIFxyXG5cclxuICAgIFxyXG4gIFxyXG5cclxuXHJcbiAgICBwdWJsaWMgdXNlckhhc1JpZ2h0cyhjb2x1bW46J2FkbWluaXN0cmFkb3InIHwgJ2luc2VydGFyJyB8ICdhY3R1YWxpemFyJyB8ICdjb25zdWx0YXInIFxyXG4gICAgfCAnZWxpbWluYXInIHwgJ2FudWxhcicgfCdkZXNjYXJnYXInIHwgJ2VqZWN1dGFyX19wcm9jZXNhcl8nIHwgJ2ltcHJpbWlyJyBcclxuICAgIHwgJ2Vudmlhcl9fY29ycmVvXycgfCAndmlzaWJsZScpe1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3Nzcy9kZXJlY2hvc191c3VhcmlvX2Rhby5waHA/aWRDb21wb25lbnQ9JHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENvbXBvbmVudC5pZFxyXG4gICAgICAgIH0mY29sdW1uPSR7Y29sdW1ufWAsIFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH1cclxuICAgICAgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldG9ybmEgbG9zIGhlYWRlcnMgcGFyYSBoYWNlciBsYXMgcGV0aWNpb25lc1xyXG4gICAgICogQHBhcmFtcyB0eXBlOiBUaXBvIE1JTUUgcGVybWl0aWRvIHBvciBkZWZlY3RvIHNlIHRvbWEgYXBwbGljYXRpb24vanNvblxyXG4gICAgICogQHJldHVybiBIdHRwSGVhZGVyc1xyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqIEBkYXRlLXVwZGF0ZTogMTUtMDYtMjAyMiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEh0dHBIZWFkZXJzKHR5cGU/OnN0cmluZyk6IEh0dHBIZWFkZXJzIHsgXHJcbiAgICAgICF0eXBlPyB0eXBlPSdhcHBsaWNhdGlvbi9qc29uJzonJzsgICAgICBcclxuICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHR5cGUsXHJcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgJHt0aGlzLnVzdWFyaW9BY3Rpdm8udG9rZW59YFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBzZXJ2aWRvciBndWFyZGFkbyBlbiBlbCBzZXNzaW9uU3RvcmFnZVxyXG4gICAgICogQHJldHVybiBzdHJpbmdcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTZXJ2ZXIoKTogc3RyaW5nIHtcclxuICAgICAgcmV0dXJuIHRoaXMuVVJMO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgdXN1YXJpbyBndWFyZGFkbyBlbiBlbCBzZXNzaW9uU3RvcmFnZVxyXG4gICAgICogQHJldHVybiBNVXN1YXJpb1xyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGdldFVzZXIoKSB7XHJcbiAgICAgIGxldCBjb25leGlvbjogSUNvbmV4aW9uID0gYXdhaXQgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSkgPyBKU09OLnBhcnNlKGF0b2Ioc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSkgOiBudWxsO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKGNvbmV4aW9uKVxyXG4gICAgICAvLyBkZWJ1Z2dlclxyXG4gICAgICBpZiAoY29uZXhpb24pIHtcclxuICAgICAgICB0aGlzLnVzdWFyaW9BY3Rpdm8gPSBuZXcgTVVzdWFyaW8oY29uZXhpb24udXN1YXJpbyk7XHJcbiAgICAgICAgdGhpcy5VUkwgPSBjb25leGlvbi5zZXJ2aWRvcjtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBNdWVzdHJhIHVuIHRvYXN0IGRlIHN1Y2Nlc3NcclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIE1lbnNhamUgcXVlIHNlIHZhIGEgbW9zdHJhclxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvd1RvYXN0U3VjY2VzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gdG9hc3QgZGUgZXJyb3JcclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIE1lbnNhamUgcXVlIHNlIHZhIGEgbW9zdHJhclxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvd1RvYXN0RXJyb3IobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIHRoaXMudG9hc3QuZXJyb3IobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBNdWVzdHJhIHVuIHN3ZWV0YWxlcnQyIGRlIMOpeGl0b1xyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBkYXRlIDIyLTExLTIwMjFcclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIHNob3dUb2FzdFN1Y2Nlc3NTd2FsKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICBpY29uOiAnc3VjY2VzcycsXHJcbiAgICAgICAgICB0aXRsZTogJ8OJeGl0bycsXHJcbiAgICAgICAgICB0ZXh0OiBtZXNzYWdlLCAgXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gc3dlZXRhbGVydDIgZGUgZXJyb3JcclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIE1lbnNhamUgcXVlIHNlIHZhIGEgbW9zdHJhclxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAZGF0ZSAyMi0xMS0yMDIxXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RFcnJvclN3YWwobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgaWNvbjogJ2Vycm9yJyxcclxuICAgICAgICB0aXRsZTogJ8KhRXJyb3IhJyxcclxuICAgICAgICB0ZXh0OiBtZXNzYWdlLCAgXHJcbiAgICAgICAgICAgICBcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHdWFyZGEgZWwgdXN1YXJpbyBsb2d1ZWFkbyBlbiBlbCBTZXNzaW9uU3RvcmFnZVxyXG4gICAgICogQHBhcmFtIHVzZXIgVXN1YXJpbyBxdWUgc2UgdmEgYSBndWFyZGFyIGVuIGVsIFNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzYXZlVXNlcihkYXRhOiBJQ29uZXhpb24pOiB2b2lkIHtcclxuICAgICAgdGhpcy51c3VhcmlvQWN0aXZvID0gbmV3IE1Vc3VhcmlvKGRhdGEudXN1YXJpbyk7XHJcbiAgICAgIHRoaXMuVVJMID0gZGF0YS5zZXJ2aWRvcjtcclxuICAgICAgbGV0IGVuY3J5cHRlZFVzZXI6IHN0cmluZyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd1c2VyJywgZW5jcnlwdGVkVXNlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2V0ZSBhIGxhIHVybCBhIGxhIGN1YWwgc2UgbGUgdmFuIGEgcmVhbGl6YXIgcGV0aWNpb25lcyBhbCBiYWNrRW5kXHJcbiAgICAgKiBAcGFyYW0gdXJsIFVSbCBkb25kZSBzZSB2YW4gYSByZWFsaXphciBsYXMgcGV0aWNpb25lc1xyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0VXJsKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuVVJMID0gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEluaWNpYWxpemEgZWwgc2VydmljaW8gZGUgc2lnZXNwXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbml0KCk6IHZvaWQge1xyXG4gICAgICAvLyBWZXJpZmljYW1vcyBzaSBoYXkgdW4gdXN1YXJpbyBlbiBsYSBzZXNzaW9uU3RvcmFnZSwgZXN0byBlcyBuZWNlc2FyaW8gcGFyYSByZWNhcmdhciBsYSBww6FnaW5hXHJcbiAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpXHJcbiAgICAgICAgdGhpcy5nZXRVc2VyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBWZXJpZmljYSBzaSB1biB1c3VhcmlvIGVzdMOhIGxvZ3VlYWRvXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8Ym9vbGVhbj5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBpc0xvZ2dlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc29sdmUoZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlckVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IGFueSB7XHJcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdPY3VycmnDsyB1biBlcnJvcicpXHJcbiAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBvYnRpZW5lIGVsIHBlcnNvbmFsIHNlZ3VuIGZpbHRyb1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBkYXRlIDE1LTExLTIwMjFcclxuICAgICAqIEBwYXJhbSB0aXBvOiB2YWxvcmVzIFsnY2F0YWxvZ28nLCdkZWZhdWx0Jywnbm9taW5hJ11cclxuICAgICAqIEBwYXJhbXMgZGF0bzpvYmplY3Qge25vbWJyZTpzdHJpbmcsIGFwZWxsaWRvOnN0cmluZywgY2VkdWxhLnN0cmluZ30gdXNlIHBhcmEgbGEgb3BjaW9uICdjYXRhbG9nbydcclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFBlcnNvbmFsKHRpcG86c3RyaW5nLCBkYXRvPzphbnkpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vcGVyc29uYWxfZGFvLnBocD9cclxuICAgICAgICB0aXBvPSR7dGlwb30mY2VkdWxhPSR7ZGF0by5jZWR1bGF9Jm5vbWJyZT0ke2RhdG8ubm9tYnJlfSZhcGVsbGlkbz0ke2RhdG8uYXBlbGxpZG99JmV4cGVkaWVudGU9JHtkYXRvLmV4cGVkaWVudGV9JmlkVGlwbz0ke2RhdG8udGlwb31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QZXJzb25hbChlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9IFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gb2J0ZW5lciBwZXJzb25hbCBOb21pbmEgc2VndW4gZmlsdHJvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGRhdGUgMTUtMTEtMjAyMVxyXG4gICAgICogKiBAcGFyYW0gdGlwbzogdmFsb3JlcyBbJ2NhdGFsb2dvJywnZGVmYXVsdCcsJ25vbWluYSddXHJcbiAgICAgKiBAcGFyYW1zIGRhdG86b2JqZWN0IHtub21icmU6c3RyaW5nLCBhcGVsbGlkbzpzdHJpbmcsIGNlZHVsYS5zdHJpbmd9IHVzZSBwYXJhIGxhIG9wY2lvbiAnY2F0YWxvZ28nXHJcblxyXG4gICAgICovXHJcbiAgICAgICAgcHVibGljIGdldFBlcnNvbmFsTm9taW5hKHRpcG86c3RyaW5nLGRhdG8/OmFueSl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2FzaWduYWNpb25fcGVyc29uYWxfbm9taW5hX2Rhby5waHA/XHJcbiAgICAgICAgICB0aXBvPSR7dGlwb30mY2VkdWxhPSR7ZGF0by5jZWR1bGF9Jm5vbWJyZT0ke2RhdG8ubm9tYnJlfSZhcGVsbGlkbz0ke2RhdG8uYXBlbGxpZG99JmV4cGVkaWVudGU9JHtkYXRvLmV4cGVkaWVudGV9JmlkVGlwbz0ke2RhdG8uaWRUaXBvfSZpZE5vbWluYT0ke2RhdG8uaWROb21pbmF9YCxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGVyc29uYWxOb21pbmEoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSBpZFBlcnNvbmFsOiBpZCBkZWwgcGVyc29uYWxcclxuICAgKiBAcGFyYW0gdGlwbzogdmFsb3Jlc1snbm9taW5hX3BlcnNvbmFsJ10gXHJcbiAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIG5vbWluYXMgZGVsIHBlcnNvbmFsIHJlc3VtaWRhXHJcbiAgICogQGRlcHJlY2F0ZWQ7IDIwLTAxLTIyXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgXHJcbiAgcHVibGljIGdldFBlcnNvbmFsTm9taW5hUmVzdW1pZGEoaWRQZXJzb25hbDpudW1iZXIsdGlwbzpzdHJpbmcpe1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL3BlcnNvbmFsX2Rhby5waHA/aWRQZXJzb25hbD0ke2lkUGVyc29uYWx9JnRpcG89JHt0aXBvfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTU5vbWluYVNpbXBsZShlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgXHJcbiAgICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSnNvbiBNZW51IHBhcmEgZWwgdXN1YXJpbyBkZWZpbmlkbyBzZWd1biBzdSBwZXJtaXNvbG9naWEgZGVsIFNpc3RlbWFcclxuICAgICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAgICAqL1xyXG4gICAgICAgICAgcHVibGljIGdldFBlcmZpbE5vQ29tcG9uZW50KGlkX3VzdWFyaW86bnVtYmVyLHNpc3RlbWE6c3RyaW5nLCBuYW1lQ29tcG9uZW50OiBzdHJpbmcgKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zc3MvZGVyZWNob3NfdXN1YXJpb19kYW8ucGhwP2lkX3VzdWFyaW89JHtpZF91c3VhcmlvfSZzaXN0ZW1hPSR7c2lzdGVtYX0mbmFtZWNvbXBvbmVudD0ke25hbWVDb21wb25lbnR9YCxcclxuICAgICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgXHJcbiAgICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyBcclxuICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgXHJcbiAgICAgICB9XHJcbiAgXHJcbiAgICAgICAvKipcclxuICAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSnNvbiBNZW51IHBhcmEgZWwgdXN1YXJpbyBkZWZpbmlkbyBzZWd1biBzdSBwZXJtaXNvbG9naWEgZGVsIFNpc3RlbWFcclxuICAgICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRKc29uTWVudShpZF91c3VhcmlvOm51bWJlcixzaXN0ZW1hOnN0cmluZyl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3Nzcy9tZW51X2Rhby5waHA/aWRfdXN1YXJpbz0ke2lkX3VzdWFyaW99JnNpc3RlbWE9JHtzaXN0ZW1hfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICAgICBcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyBcclxuICAgICAgICAgICAgICAgdGhpcy51c2VyTWVudSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyTWVudTtcclxuICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgIC8qKlxyXG4gICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlbm9cclxuICAgICAgKi9cclxuICAgICAgcHVibGljIGxvZyhib2R5OiBNTG9nICl7ICBcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3NzL2xvZ19kYW8ucGhwYCwgYm9keSAsIHtcclxuICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgICB9KS5waXBlKCAgXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7ICBcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gIFxyXG4gICAgICAgIFxyXG4gICAvKipcclxuICAgICogQG5hbWUgRW5jcnlwdERhdGFcclxuICAgICogQGRlc2NyaXB0aW9uIEVuc2NyaXB0YSB1bmEgZXhwcmVzaW9uIGRhdGFcclxuICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZcOxb1xyXG4gICAgKi9cclxuICAgIHB1YmxpYyBFbmNyeXB0RGF0YSggZXhwcmVzaW9uIDogc3RyaW5nKXtcclxuICAgICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlIChcIjAxMjM0NTY3ODlTSUdFU1BcIik7IC8vIG7Dum1lcm8gaGV4YWRlY2ltYWwgZGUgMTYgZMOtZ2l0b3MgY29tbyBjbGF2ZVxyXG4gICAgICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoJ1NJR0VTUDAxMjM0NTY3ODknKTsgLy8gTsO6bWVybyBoZXhhZGVjaW1hbCBjb21vIGRlc3BsYXphbWllbnRvIGRlIGNsYXZlXHJcbiAgICAgICBsZXQgc3JjcyA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGV4cHJlc2lvbik7XHJcbiAgICAgICBsZXQgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoc3Jjcywga2V5LCB7IGl2OiBpdiwgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyB9KTtcclxuICAgICAgIHJldHVybiBlbmNyeXB0ZWQuY2lwaGVydGV4dC50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcbiBcclxuICAgIC8qKlxyXG4gICAgKiBAbmFtZSBEZWNyeXB0RGF0YVxyXG4gICAgKiBAZGVzY3JpcHRpb24gRGVzZW5jcmlwdGEgdW5hIGV4cHJlc2lvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2XDsW9cclxuICAgICovXHJcbiAgICBwdWJsaWMgRGVjcnlwdERhdGEoIGV4cHJlc2lvbiA6IHN0cmluZyl7XHJcbiAgICAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoXCIwMTIzNDU2Nzg5U0lHRVNQXCIpOyAvLyBuw7ptZXJvIGhleGFkZWNpbWFsIGRlIDE2IGTDrWdpdG9zIGNvbW8gY2xhdmVcclxuICAgICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKCdTSUdFU1AwMTIzNDU2Nzg5Jyk7IC8vIE7Dum1lcm8gaGV4YWRlY2ltYWwgY29tbyBkZXNwbGF6YW1pZW50byBkZSBjbGF2ZVxyXG4gICAgICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UoZXhwcmVzaW9uKTtcclxuICAgICAgIGxldCBzcmNzID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkoZW5jcnlwdGVkSGV4U3RyKTtcclxuICAgICAgIGxldCBkZWNyeXB0ID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoc3Jjcywga2V5LCB7IGl2OiBpdiwgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyB9KTtcclxuICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcclxuICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHIudG9TdHJpbmcoKTtcclxuICAgIH1cclxuIFxyXG4gXHJcbiAgICAvKipcclxuICAgICogQG5hbWUgZ2V0UmVzcG9uc2VQZXJmaWxUb29sYmFyXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBNZXRvZG8gcXVlIG9idGllbmUgdW5hIHJlc3B1ZXN0YSB0cnVlIG8gZmFsc2UgYmFzYWRvIGVuIHVuYSBlc3RydWN0dXJhIHNyaW5nIGJpbmFucmlhIHNlZ3VuIFxyXG4gICAgKiAgICAgICAgICAgICAgbGEgcG9zaWNpb24gZGFkYSBkZWwgdG9vbGJhci4gc2UgcGFzYSBzdHJpbmcgYmluYXJpbyBxdWUgY29udGllbmUgMSB5IDAgZW4gcmVwcmVzZW50YWNpb24gXHJcbiAgICAqICAgICAgICAgICAgICBkZSBsYXMgcHJvcGllc3RhZGVzIGFkbWluaXN0cmFkb3IsY29uc3VsdGFyLGVqZWN1dGFyLGltcHJpbWlyIGV0YyAuLi4gY2FkYSBwb3NpY2lvbiBzZWN1ZW5jaWFsIFxyXG4gICAgKiAgICAgICAgICAgICAgc2kgZXN0YSBlbiAxIGVzIHRydWUgeSAwIGVuIGZhbHNlIHkgZGV2dWxldmUgZWwgdmFsb3Igc2VndW4gbG8gcmVxdWllcmEgZWwgdXN1YXJpbzpcclxuICAgICogICAgICAgICAgICAgIHN0cmluZ2JpbmFyaW8gOiAnMTAxMScgeSBwb3NpY2lvbiBlcyAyLCBwb3IgdGFudG8gc2UgdGFyZSAwIHkgZXMgZmFsc2UgcXVlIHJlcHJlc2VudGEgb3BjaW9uIGNvbnN1bHRhci5cclxuICAgICogICAgICAgICAgICAgIEVzdHJ1Y3R1cmEgc3RyaW5nIGJpbmFyaW86XHJcbiAgICAqICAgICAgICAgICAgICBQb3NpY2nDs24gOlxyXG4gICAgKiAgICAgICAgICAgICAgMC4gIEFkbWluaXN0cmFkb3IgICAgICAgIDYuICBEZXNjYXJnYXIgICAgICAxMi4gUmV2ZXJzYXIgYXByb2JhciAgICAgIDE4LiBSZXZlcnNhciBhbnVsYXIgY29udGFiaWxpemFkb1xyXG4gICAgKiAgICAgICAgICAgICAgMS4gIGluc2VydGFyICAgICAgICAgICAgIDcuICBFamVjdXRhciAgICAgICAxMy4gQW51bGFyLlxyXG4gICAgKiAgICAgICAgICAgICAgMi4gIEFjdHVhbGl6YXIgICAgICAgICAgIDguICBFbnZpYXIgICAgICAgICAxNC4gcmV2ZXJzYXIgYW51bGFyXHJcbiAgICAqICAgICAgICAgICAgICAzLiAgY29uc3VsdGFyICAgICAgICAgICAgOS4gSW1wcmltaXIgICAgICAgIDE1LiBjb250YWJpbGl6YXJcclxuICAgICogICAgICAgICAgICAgIDQuICBFbGltaW5hciAgICAgICAgICAgICAxMC4gVmlzaWJsZSAgICAgICAgMTYuIHJldmVyc2FyIGNvbnRhYmlsaXphclxyXG4gICAgKiAgICAgICAgICAgICAgNS4gIEFudWxhciAgICAgICAgICAgICAgIDExLiBBcHJvYmFyICAgICAgICAxNy4gYW51bGFyIGNvbnRhYmlsaXphZG8gICAgICAgXHJcbiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2XDsW9cclxuICAgICovXHJcbiAgICAgcHVibGljIGdldFJlc3BvbnNlUGVyZmlsVG9vbGJhciggc3RyaW5nYmluYXJpbyA6IHN0cmluZywgcG9zaXRpb24gOiBudW1iZXIgKXtcclxuICAgICAgICAgIGxldCBiaW5hcmlvID0gc3RyaW5nYmluYXJpby5zdWJzdHJpbmcocG9zaXRpb24scG9zaXRpb24rMSkgO1xyXG4gICAgICAgICAgaWYgKGJpbmFyaW89PVwiMVwiKXtcclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgXHJcbiAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IFxyXG4gICAgIH1cclxuXHJcbiAvKipcclxuICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSXAgZGVsIGNsaWVudGVcclxuICAgICogQHJldHVybiBKc29uIGRhdGFcclxuICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAqL1xyXG4gIHB1YmxpYyBnZXRJUEFkZHJlc3MoKXsgIFxyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFwiaHR0cDovL2FwaS5pcGlmeS5vcmcvP2Zvcm1hdD1qc29uXCIpIFxyXG4gICAgLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXVnaHQgaW4gc2VydmljZScpXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lwX2FkcmVzcycsICcxMjcuMC4wLjEnKTtcclxuICAgICAgICAvL0hhbmRsZSB0aGUgZXJyb3IgaGVyZVxyXG5cclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpOyAgICAvL1JldGhyb3cgaXQgYmFjayB0byBjb21wb25lbnRcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBcclxuICB9XHJcbiAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgKi9cclxuICBwdWJsaWMgc2V0SXBBZHJlc3MoKXtcclxuICAgIHRoaXMuZ2V0SVBBZGRyZXNzKCkuc3Vic2NyaWJlKCAocmVzcDogYW55KSAgID0+IHtcclxuICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXBfYWRyZXNzJywgcmVzcC5pcCk7XHJcbiAgICAgICAgIHRoaXMuaXBfYWRyZXNzID0gcmVzcC5pcDtcclxuICAgIH0pOyAgXHJcbiAgfSBcclxuIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSXAgZGVsIGNsaWVudGVcclxuICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlbm9cclxuICAqL1xyXG4gIHB1YmxpYyBnZXRJcEFkcmVzcygpe1xyXG4gICAgdGhpcy5pcF9hZHJlc3MgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpcF9hZHJlc3MnKTsgIFxyXG4gIH0gXHJcblxyXG4gICAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICogQGRpYSAxOS0wNS0yMDIyXHJcbiAgKi8gIFxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVBdWRpdG9yaWEoc25vOk1Tbm9Mb2dbXSl7XHJcbiAgICAgIGxldCBib2R5PVtdO1xyXG4gICAgICBzbm8uZm9yRWFjaChlPT4ge2JvZHkucHVzaChlLmRhdGFJbnRlZmFjZSgpKX0pO1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9zZWd1cmlkYWRfZGFvLnBocD9gLGJvZHksXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge3JldHVybiByZXM7fSlcclxuICAgICAgKTtcclxuICAgIH0gIFxyXG5cclxuIC8qKiAgXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgZGVwb3NpdG9zICAqIFxyXG4gICogQHBhcmFtIHByb2NlZGUgOiBwcm9jZWRlIGRlbCBtb2R1bG9cclxuICAqIEBwYXJhbSBpZEFydGljdWxvIDogaWQgZGVsIGFydGljdWxvXHJcbiAgKiBAcGFyYW0gaWRVc3VhcmlvIDogaWQgdXN1YXJpbyBwZXJtaXRpZG9cclxuICAqIEByZXR1cm5zIFxyXG4gICogQGF1dGhvciBKYXZpZXIgVG92YXJcclxuICAqIEBkYXRlIDIzLTExLTIwMjJcclxuICAqLyAgICAgIFxyXG4gIHB1YmxpYyBnZXREZXBvc2l0VHlwZShwcm9jZWRlOnN0cmluZyxpZEFydGljdWxvOm51bWJlcixpZFVzdWFyaW8/Om51bWJlcil7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2l2L2NhdGFsb2dvX3BhcmFtZXRyaXphZG9fZGFvLnBocD9nZXQ9JHtwcm9jZWRlfSZpZD0ke2lkQXJ0aWN1bG99Jmk9JHtpZFVzdWFyaW99YCxcclxuICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgIHJldHJ5KDMpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNVGlwb0RlcG9zaXRvcyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgIFxyXG59XHJcblxyXG4gIFxyXG5pbnRlcmZhY2UgZmlsdHJvQ3VlbnRhc1ByZXN1cHVlc3RvIHtcclxuICB0aXBvPzogJ0UnIHwgJ1InLFxyXG4gIGVzdGFkbz86ICdDJyB8ICdTJ1xyXG59XHJcblxyXG5cclxuIl19
1975
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZXNwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovQXBwU2Vydi93d3cvc2lnZXNwX21vZHVsb3Mvc2lnZXNwX2NvcmUvcHJvamVjdHMvc2lnZXNwL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zaWdlc3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQXFCLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWpGLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSxxQ0FBcUMsRUFBRSw2QkFBNkIsRUFBMEMsYUFBYSxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFMVQsT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUV2SCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDMUksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2pGLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQTtBQUM5QixPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7QUFNakUsTUFBTSxPQUFPLGFBQWE7SUFPeEIseURBQXlEO0lBQ3pELDhCQUE4QjtJQUM5QixrQkFBa0I7SUFDbEIsdUNBQXVDO0lBQ3ZDLDBCQUEwQjtJQUMxQix5QkFBeUI7SUFDekIseURBQXlEO0lBQ3pELCtCQUErQjtJQUMvQixzQkFBc0I7SUFDdEIsZ0NBQWdDO0lBQ2hDLE9BQU87SUFDUCxlQUFlO0lBQ2YsYUFBYTtJQUNiLG1DQUFtQztJQUNuQyw0QkFBNEI7SUFDNUIsT0FBTztJQUNQLHNCQUFzQjtJQUN0QiwwYUFBMGE7SUFDMWEsSUFBSTtJQUNKLDhCQUE4QjtJQUM5QiwwQkFBMEI7SUFHMUIsWUFBb0IsSUFBZ0IsRUFBVSxNQUFpQixFQUFVLEtBQW9CO1FBQXpFLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQTVCdEYsa0JBQWEsR0FBYSxJQUFJLENBQUM7UUFFL0IscUJBQWdCLEdBQWUsSUFBSSxDQUFDO1FBQ3BDLGFBQVEsR0FBSSxJQUFJLENBQUM7UUFDakIsY0FBUyxHQUFHLFdBQVcsQ0FBQztJQXdCa0UsQ0FBQztJQUVsRzs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBQyxLQUFVO1FBQ2xDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUU7WUFDMUMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUJBQXVCLENBQUMsTUFBYyxFQUFFLGFBQXFCO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU0sR0FBRyxJQUFJLENBQUMsR0FBRyw0Q0FBNEMsRUFBRTtZQUNqRixNQUFNLEVBQUUsTUFBTTtZQUNkLGNBQWMsRUFBRSxhQUFhO1NBQzlCLEVBQUU7WUFDRCxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksc0NBQXNDLENBQUMsV0FBOEM7UUFDMUYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTSxHQUFHLElBQUksQ0FBQyxHQUFHLHFEQUFxRCxrQ0FDckYsV0FBVyxLQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsWUFBWSxLQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksbUNBQW1DO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXNDLEdBQUcsSUFBSSxDQUFDLEdBQUcscURBQXFELEVBQUU7WUFDMUgsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7U0FDL0IsQ0FBQyxDQUFDLElBQUksQ0FDTCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksaUNBQWlDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUMzRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLHVDQUF1QyxDQUFDLFdBQStDO1FBQzVGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxxREFBcUQsa0NBQ3JGLFdBQVcsS0FBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLFlBQVksS0FBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRDs7T0FFRztJQUNJLG9DQUFvQztRQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF1QyxHQUFHLElBQUksQ0FBQyxHQUFHLHNEQUFzRCxFQUFFO1lBQzVILE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1NBQy9CLENBQUMsQ0FBQyxJQUFJLENBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDNUYsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQ0FBZ0MsQ0FBQyxZQUFpQztRQUN2RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsa0NBQWtDLEVBQUUsWUFBWSxFQUNoRixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRTs7O0lBR0E7SUFDTyxpQ0FBaUMsQ0FBQyxZQUFvQztRQUM1RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsa0NBQWtDLEVBQUUsWUFBWSxFQUNoRixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFSDs7O09BR0c7SUFDSSwrQkFBK0IsQ0FBQyxZQUF5QztRQUM5RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsbUNBQW1DLEVBQUUsWUFBWSxFQUM1RixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQzthQUNoQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUM7Z0JBQ2QsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUM7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0sZ0NBQWdDLENBQUMsWUFBNEM7UUFDbEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLG1DQUFtQyxFQUFFLFlBQVksRUFDNUYsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUM7YUFDaEMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFDO2dCQUNkLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLHdDQUF3QyxDQUFDLFlBQXlDLEVBQUUsS0FBYTtRQUN0RyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQUUsWUFBWSxFQUN0RyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQzthQUNoQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUM7Z0JBQ2QsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDekQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSwwQkFBMEIsQ0FBQyxLQUFhLEVBQUUsRUFBVTtRQUN6RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFtQixHQUFHLElBQUksQ0FBQyxHQUFHLDBDQUEwQyxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQzVHLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUFDO2FBQ2hDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUN2RSxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9DQUFvQyxDQUFDLElBQVcsRUFBRSxhQUFnQztRQUN2RixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUM5RCxJQUFJLEVBQUU7Z0JBQ0osSUFBSTtnQkFDSixhQUFhO2FBQ2Q7WUFDRCxLQUFLLEVBQUUsT0FBTztZQUNkLFNBQVMsRUFBRSxNQUFNO1NBQ2xCLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsZ0JBQXlCLEtBQUs7UUFDdkQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBbUIsR0FBRyxJQUFJLENBQUMsR0FBRyxtQ0FDaEQsYUFBYSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFDdEMsRUFBRSxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUFDO2FBQ3BDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUN2RSxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDdkQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFO3dCQUN4RCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7NEJBQ3RELElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQ0FDN0QsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDO29DQUN4QixZQUFZO29DQUNaLFlBQVk7b0NBQ1osY0FBYztvQ0FDZCxhQUFhO29DQUNiLGFBQWE7aUNBQ2QsQ0FBQyxDQUFDLENBQUM7NEJBQ04sQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDVSwwQkFBMEIsQ0FBQyxLQUFZOztZQUNsRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQU8sT0FBTyxFQUFFLEVBQUU7Z0JBRW5DLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFFZCxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQTtnQkFDdEIsQ0FBQyxDQUFDLENBQUE7Z0JBQ0Ysc0VBQXNFO2dCQUN0RSx5QkFBeUI7Z0JBQ3pCLEtBQUs7Z0JBRUwsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdEIsQ0FBQyxDQUFBLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVEOzs7OztPQUtHO0lBQ0kseUJBQXlCLENBQUMsWUFBbUI7UUFDbEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFDM0YsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHlCQUF5QixDQUFDLFVBQTJDO1FBQzFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFBRSxVQUFVLEVBQ3pGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksc0JBQXNCLENBQUMsVUFBMkM7UUFDdkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUFFLFVBQVUsRUFDMUYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHNCQUFzQixDQUFDLFFBQWdCLElBQUk7UUFDaEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRywyREFBMkQsRUFDeEUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxxQ0FBcUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLDZCQUE2QixDQUFDLEtBQWM7UUFDakQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRyw4Q0FBOEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFDNUYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ3pGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSx5QkFBeUIsQ0FBQyxZQUFtQjtRQUNsRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUMzRixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0kseUJBQXlCLENBQUMsVUFBMkM7UUFDMUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUFFLFVBQVUsRUFDekYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxzQkFBc0IsQ0FBQyxVQUEyQztRQUN2RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQUUsVUFBVSxFQUMxRixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHNCQUFzQixDQUFDLEtBQWM7UUFDMUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRyw4Q0FBOEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFDNUYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ3pGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSwwQkFBMEIsQ0FBQyxZQUFtQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUMzRixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksMEJBQTBCLENBQUMsVUFBNEM7UUFDNUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUFFLFVBQVUsRUFDekYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSx1QkFBdUIsQ0FBQyxVQUE0QztRQUN6RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQUUsVUFBVSxFQUMxRixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksK0JBQStCLENBQUMsS0FBYTtRQUNsRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxHQUFHLDJEQUEyRCxFQUN4RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLHFDQUFxQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3hHLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSx1QkFBdUIsQ0FBQyxLQUFjO1FBQzNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsOENBQThDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQzVGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUMxRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksd0JBQXdCLENBQUMsWUFBbUI7UUFDakQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFDM0YsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksd0JBQXdCLENBQUMsU0FBeUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUFFLFNBQVMsRUFDeEYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxxQkFBcUIsQ0FBQyxnQkFBZ0Q7UUFDM0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUM5RSxnQkFBZ0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFFRDs7OztPQUlHO0lBQ0kscUJBQXFCLENBQUMsS0FBYTtRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFpQyxHQUFHLElBQUksQ0FBQyxHQUFHLHNEQUFzRCxLQUFLLEVBQUUsRUFDN0gsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx3QkFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBaUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFDN0csRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksd0JBQXdCLENBQUMsWUFBbUI7UUFDakQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFDM0YsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksd0JBQXdCLENBQUMsU0FBeUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUFFLFNBQVMsRUFDeEYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxxQkFBcUIsQ0FBQyxnQkFBZ0Q7UUFDM0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUM5RSxnQkFBZ0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFFRDs7OztPQUlHO0lBQ0kscUJBQXFCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWlDLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQzdHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDMUYsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUJBQW1CO1FBRXhCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsbURBQW1ELEVBQ3RHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7O09BSUc7SUFDSSxtQkFBbUI7UUFFeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxtQ0FBbUMsRUFDdEYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFlLEVBQUUsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDN0M7WUFDRCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG1CQUFtQjtRQUV6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsdUNBQXVDLGVBQWUsRUFBRSxFQUNuRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQWUsRUFBRSxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFHLElBQUksRUFBQztvQkFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLElBQUksR0FBQyxFQUFFLENBQUM7aUJBQ2Q7YUFDRjtZQUNELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFHTSxZQUFZLENBQUMsSUFBVTtRQUM1QixPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUMzRSxJQUNFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQzVELEVBQUUsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWTtRQUVqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsbUNBQW1DLEVBQzlFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBZSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUN0QztZQUNELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTSxhQUFhLENBQUMsYUFBcUIsSUFBSSxFQUFFLE1BQWU7UUFFN0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRyxnQ0FBZ0MsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLFVBQVUsR0FDMUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQ1QsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQ25DLENBQUMsSUFBSSxDQUVKLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNSLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUVILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksdUJBQXVCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTBCLEdBQUcsSUFBSSxDQUFDLEdBQUcsd0NBQXdDLEVBQ2pHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUkscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNqRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGNBQWMsQ0FBQyxPQUFrQyxJQUFJLEVBQUUsRUFBVTtRQUN0RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsc0NBQXNDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDaEcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUN0RSxDQUFDO0lBQ04sQ0FBQztJQUlEOzs7O09BSUc7SUFDSSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRywrQkFBK0IsRUFDMUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQy9CLENBQUMsSUFBSSxDQUNKLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFjLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7YUFDOUQ7WUFDRCxPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0sa0JBQWtCLENBQUMsTUFBYTtRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0RBQWdELE1BQU0sRUFBRSxFQUNuRyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FDL0IsQ0FBQyxJQUFJLENBQ0osS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQWMsRUFBRSxFQUFFO1lBQ3JCLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2FBQ3JFO1lBQ0QsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUdEOzs7OztPQUtHO0lBQ0kscUJBQXFCO0lBQzFCLHNCQUFzQjtJQUN0QixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLHlCQUF5QjtJQUN6QixPQUFpQixFQUNqQixLQUFhLEVBQ2IsVUFBaUIsRUFDakIsY0FBd0IsSUFBSSxFQUM1QixRQUFnQixPQUFPLEVBQ3ZCLFVBSUk7UUFDRixZQUFZLEVBQUUsS0FBSztRQUNuQixXQUFXLEVBQUUsS0FBSztLQUVuQjtRQUVELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3JELElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsT0FBTztnQkFDaEIsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLFdBQVc7YUFFWjtZQUNELEtBQUssRUFBRSxLQUFLO1lBQ1osU0FBUyxFQUFFLE1BQU07WUFDakIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtTQUNuQyxDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNVLDBCQUEwQjs7WUFDckMsSUFBSSxNQUFNLEdBQXVCLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckYsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2xELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDO29CQUNuQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDO29CQUN2QyxLQUFLLEVBQUUscUNBQXFDO29CQUM1QyxVQUFVLEVBQUUsTUFBTTtpQkFDTjtnQkFDZCxLQUFLLEVBQUUsT0FBTztnQkFDZCxTQUFTLEVBQUUsTUFBTTthQUNsQixDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0ksMEJBQTBCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFCLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkJBQTZCLEVBQ2pGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUM1RSxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXNCLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQ2xHLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUMvQixDQUFDLElBQUksQ0FDSixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUM3RSxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQixDQUFDLEtBQWEsRUFBRSxPQUFnQjtRQUN0RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNqRCxJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSTthQUNwQztZQUNELEtBQUssRUFBRSxPQUFPO1lBQ2QsU0FBUyxFQUFFLE1BQU07U0FDbEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQixDQUFDLFNBQW9CLEVBQUUsSUFBWTtRQUN6RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0IsQ0FBQyxTQUFvQixFQUFFLElBQVk7UUFDMUQsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxXQUFXLENBQUMsS0FBVztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFO1lBQzdDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxXQUFXLENBQUMsS0FBVztRQUM1QixzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUE7Ozs7OztNQU1FO0lBQ00sUUFBUSxDQUFDLEtBQVc7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFLLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFLLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRztlQUM5RyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLE9BQU8sSUFBRSxFQUFFO2VBQy9HLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFLLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxFQUFHO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDSDs7Ozs7O09BTUc7SUFDTSxRQUFRLENBQUMsS0FBVztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzVHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2VBQzdHLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFNLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFLLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFHLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRztlQUMxRyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBTSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUc7ZUFDMUcsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUcsS0FBSyxDQUFDLE9BQU8sSUFBRSxJQUFJLElBQUssS0FBSyxDQUFDLE9BQU8sSUFBRSxHQUFHLElBQUcsS0FBSyxDQUFDLE9BQU8sSUFBRSxHQUFHLEVBQUM7WUFDdEcsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7OztLQUtDO0lBQ08sUUFBUSxDQUFDLEtBQVc7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFLLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFLLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRztlQUM5RyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLEVBQUM7WUFDM0UsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVIOzs7O09BSUc7SUFDVSw2QkFBNkI7O1lBQ3hDLElBQUksYUFBYSxHQUF3QixNQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pGLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNsRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQztvQkFDbkgsS0FBSyxFQUFFLGtDQUFrQztvQkFDekMsVUFBVSxFQUFFLGFBQWE7aUJBQ2I7Z0JBQ2QsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsU0FBUyxFQUFFLE1BQU07YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0MsQ0FBQztLQUFBO0lBRUQ7Ozs7T0FJRztJQUNJLHNCQUFzQjtRQUMzQixNQUFNLE9BQU8sR0FBYTtZQUN4QixTQUFTLEVBQUUsYUFBYTtZQUN4QixlQUFlLEVBQUU7Z0JBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHO2dCQUNsQixPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUU7YUFDM0M7U0FDRixDQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBc0IsR0FBRyxJQUFJLENBQUMsR0FBRyxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ25HLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ1Usb0JBQW9CLENBQy9CLE9BQWlCLEVBQ2pCLEtBQWEsRUFDYixVQUFpQixFQUNqQixjQUF3QixJQUFJLEVBQzVCLFFBQWdCLE9BQU8sRUFDdkIsVUFHSSxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBQzs7WUFFN0MsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2xELElBQUksRUFBRTtvQkFDSixPQUFPO29CQUNQLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixXQUFXO2lCQUNDO2dCQUNkLEtBQUssRUFBRSxLQUFLO2dCQUNaLFNBQVMsRUFBRSxNQUFNO2dCQUNqQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDOUQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUs7YUFDbEUsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0MsQ0FBQztLQUFBO0lBRUQ7Ozs7Ozs7T0FPRztJQUNVLHFCQUFxQixDQUNoQyxPQUFpQixFQUNqQixLQUFhLEVBQ2IsVUFBaUIsRUFDakIsVUFBd0IsRUFDeEIsY0FBd0IsSUFBSSxFQUM1QixRQUFnQixPQUFPOztZQUV2QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtnQkFDNUQsSUFBSSxFQUFFO29CQUNKLE9BQU87b0JBQ1AsS0FBSztvQkFDTCxVQUFVO29CQUNWLFdBQVc7b0JBQ1gsVUFBVTtpQkFDRTtnQkFDZCxLQUFLLEVBQUUsS0FBSztnQkFDWixTQUFTLEVBQUUsTUFBTTthQUNsQixDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ1UsbUJBQW1COztZQUM5QixJQUFJLFdBQVcsR0FBaUIsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDeEUsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2xELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUM7b0JBQ3ZGLEtBQUssRUFBRSx5QkFBeUI7b0JBQ2hDLFVBQVUsRUFBRSxXQUFXO2lCQUNYO2dCQUNkLEtBQUssRUFBRSxPQUFPO2dCQUNkLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDSSxjQUFjO1FBQ25CLE1BQU0sT0FBTyxHQUFhO1lBQ3hCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLGVBQWUsRUFBRTtnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTthQUMzQztTQUNGLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsOEJBQThCLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUMxRixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDVSxpQkFBaUI7O1lBQzVCLElBQUksS0FBSyxHQUFjLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFO29CQUNKLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQztvQkFDM0QsS0FBSyxFQUFFLHFCQUFxQjtvQkFDNUIsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO29CQUN6RCxVQUFVLEVBQUUsS0FBSztpQkFDTDtnQkFDZCxLQUFLLEVBQUUsT0FBTztnQkFDZCxTQUFTLEVBQUUsTUFBTTthQUNsQixDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFSDs7Ozs7Ozs7T0FRRztJQUdNLFVBQVUsQ0FBQyxJQUFXLEVBQUMsRUFBVTtRQUN0QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0NBQWdDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDMUYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUdEOzs7Ozs7T0FNRztJQUNJLHVCQUF1QixDQUFDLE9BQXVCLElBQUksRUFBRSxFQUFVO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcscUNBQXFDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDckcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUN6RSxDQUFDO0lBQ0osQ0FBQztJQU1EOzs7O09BSUc7SUFDVSxnQ0FBZ0M7O1lBQzNDLElBQUksUUFBUSxHQUEyQixNQUFNLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFGLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNsRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQztvQkFDbkMsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQztvQkFDdkMsS0FBSyxFQUFFLDBDQUEwQztvQkFDakQsVUFBVSxFQUFFLFFBQVE7aUJBQ1I7Z0JBQ2QsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsU0FBUyxFQUFFLE1BQU07YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0MsQ0FBQztLQUFBO0lBRUQ7Ozs7T0FJRztJQUNJLHlCQUF5QixDQUFDLFNBQW1CO1FBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsMkJBQTJCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFDekgsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ2hGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNVLDRCQUE0Qjs7WUFDdkMsSUFBSSxRQUFRLEdBQXlCLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEYsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2xELElBQUksRUFBRTtvQkFDSixXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDO29CQUN2QyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDO29CQUNuQyxLQUFLLEVBQUUsb0NBQW9DO29CQUMzQyxVQUFVLEVBQUUsUUFBUTtpQkFDUjtnQkFDZCxLQUFLLEVBQUUsT0FBTztnQkFDZCxTQUFTLEVBQUUsTUFBTTthQUNsQixDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFCLEdBQUcsSUFBSSxDQUFDLEdBQUcscUNBQXFDLEVBQ3pGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUM1RSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ1UsK0JBQStCLENBQzFDLE1BQWMsRUFDZCxTQUFtQyxJQUFJLEVBQ3ZDLFFBQWdCLE9BQU87O1lBRXZCLElBQUksT0FBTyxHQUF5QixFQUFFLENBQUM7WUFFdkMsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDMUQsT0FBTyxHQUFHLEdBQUcsQ0FBQztnQkFDZCxJQUFJLE1BQU0sRUFBRTtvQkFDVixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7d0JBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUMzQixPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQTt3QkFDbEMsQ0FBQyxDQUFDLENBQUE7cUJBQ0g7b0JBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO3dCQUNmLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUMzQixPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQTt3QkFDOUIsQ0FBQyxDQUFDLENBQUE7cUJBQ0g7aUJBQ0Y7Z0JBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUE7b0JBQ2xFLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUE7b0JBQ3pELE9BQU8sQ0FBQyxDQUFBO2dCQUNWLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7WUFDRixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FDOUIsQ0FBQyxRQUFRLEVBQUMsY0FBYyxFQUFDLFlBQVksRUFBQyxVQUFVLENBQUMsRUFDakQsTUFBTSxFQUNOLE9BQU8sRUFDUCxDQUFDLFFBQVEsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLE1BQU0sQ0FBQyxFQUN6QyxLQUFLLENBQ04sQ0FBQTtRQUNILENBQUM7S0FBQTtJQUVEOzs7OztPQUtHO0lBQ1UseUJBQXlCLENBQ3BDLE1BQWMsRUFDZCxjQUF1QixJQUFJLEVBQzNCLFFBQWdCLE9BQU87O1lBRXZCLElBQUksT0FBTyxHQUFxQixFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3JELE9BQU8sR0FBRyxHQUFHLENBQUE7Z0JBQ2IsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzNCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUE7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDVCxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFBO29CQUNsRSxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQy9CLENBQUMsUUFBUSxFQUFDLGNBQWMsRUFBQyxZQUFZLEVBQUMsWUFBWSxDQUFDLEVBQ25ELE1BQU0sRUFDTixPQUFPLEVBQ1AsQ0FBQzt3QkFDQyxXQUFXLEVBQUUsUUFBUTt3QkFDckIsUUFBUSxFQUFFLFFBQVE7cUJBQ25CLEVBQUU7d0JBQ0QsV0FBVyxFQUFFLFlBQVk7d0JBQ3pCLFFBQVEsRUFBRSxZQUFZO3FCQUN2QixDQUFDLEVBQ0YsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsRUFDbEQsS0FBSyxDQUNOLENBQUE7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLGdCQUFnQixHQUFxQixFQUFFLENBQUM7Z0JBQzVDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDckQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO3FCQUN6QjtnQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDRixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FDOUIsQ0FBQyxRQUFRLEVBQUMsY0FBYyxFQUFDLFlBQVksQ0FBQyxFQUN0QyxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsRUFDcEMsS0FBSyxDQUNOLENBQUE7YUFDRjtRQUNILENBQUM7S0FBQTtJQUVEOzs7OztPQUtHO0lBQ1UsMEJBQTBCLENBQ3JDLE1BQWMsRUFDZCxjQUF1QixJQUFJLEVBQzNCLFFBQWdCLE9BQU87O1lBRXZCLElBQUksT0FBTyxHQUFzQixFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFjLEVBQUUsRUFBRTtnQkFDakUsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUE7Z0JBQ2xCLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMzQixPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFBO2dCQUN4QixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ1QsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQTtvQkFDbEUsT0FBTyxDQUFDLENBQUM7Z0JBQ1gsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUMsQ0FBQTtZQUNGLElBQUksV0FBVyxFQUFFO2dCQUNmLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUMvQixDQUFDLFFBQVEsRUFBQyxjQUFjLEVBQUMsWUFBWSxFQUFDLFlBQVksQ0FBQyxFQUNuRCxNQUFNLEVBQ04sT0FBTyxFQUNQLENBQUM7d0JBQ0MsV0FBVyxFQUFFLFFBQVE7d0JBQ3JCLFFBQVEsRUFBRSxRQUFRO3FCQUNuQixFQUFFO3dCQUNELFdBQVcsRUFBRSxZQUFZO3dCQUN6QixRQUFRLEVBQUUsWUFBWTtxQkFDdkIsQ0FBQyxFQUNGLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQ2xELEtBQUssQ0FDTixDQUFBO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxnQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQ3JELGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtxQkFDekI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQzlCLENBQUMsUUFBUSxFQUFDLGNBQWMsRUFBQyxZQUFZLENBQUMsRUFDdEMsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQ3BDLEtBQUssQ0FDTixDQUFBO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7SUFFTSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLHdDQUF3QyxFQUN4RSxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQzthQUNoQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsR0FBTyxFQUFFLEVBQUU7WUFDZCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsWUFBbUIsSUFBSTtRQUM5QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsa0NBQ3pDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDM0MsRUFBRSxFQUNGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUE7Ozs7Ozs7TUFPRTtJQUNNLFlBQVksQ0FBQyxNQUFjO1FBRWhDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxrQ0FBa0MsTUFBTSxFQUFFLEVBQ3BGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxTQUFTLENBQUMsTUFBYztRQUM3QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsbUNBQW1DLE1BQU0sRUFBRSxFQUNuRixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxpQkFBaUIsQ0FBQyxJQUFZLEVBQUMsTUFBYztRQUNsRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLG9DQUFvQyxJQUFJLFdBQVcsTUFBTSxFQUFFLEVBQzFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDM0QsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksV0FBVyxDQUFDLElBQVksRUFBQyxNQUFjLEVBQUMsU0FBaUI7UUFDOUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVSxHQUFHLElBQUksQ0FBQyxHQUFHLG9DQUFvQyxJQUFJLFdBQVcsTUFBTSxjQUFjLFNBQVMsRUFBRSxFQUMzSCxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3JELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ00sT0FBTyxDQUFDLElBQVksRUFBQyxNQUFjO1FBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxrQ0FBa0MsSUFBSSxXQUFXLE1BQU0sRUFBRSxFQUNoRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25ELENBQUM7SUFDSixDQUFDO0lBRUs7Ozs7Ozs7RUFPSDtJQUNNLGNBQWMsQ0FBQyxJQUFZLEVBQUMsTUFBYyxFQUFFLFNBQWlCLEVBQUMsU0FBaUI7UUFDcEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBYSxHQUFHLElBQUksQ0FBQyxHQUFHLHFDQUFxQyxJQUFJLFdBQVcsTUFBTSxjQUFjLFNBQVMsY0FBYyxTQUFTLEVBQUUsRUFDdEosRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDO0lBQ0osQ0FBQztJQUVMOzs7O09BSUc7SUFDSSxXQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVcsR0FBRyxJQUFJLENBQUMsR0FBRywyQkFBMkIsRUFDckUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksa0JBQWtCLENBQUMsT0FBeUIsSUFBSSxFQUFDLEVBQVU7UUFDaEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGdDQUFnQyxJQUFJLE9BQU8sRUFBRSxFQUFFLEVBQzFGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEM7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUc7Ozs7O0dBS0Q7SUFDUyxhQUFhLENBQUMsT0FBb0MsSUFBSSxFQUFFLEVBQVU7UUFDeEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDhCQUE4QixFQUN6RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUdMOzs7O09BSUc7SUFDSSxvQkFBb0I7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLG9DQUFvQyxFQUMvRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLCtCQUErQixFQUMxRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyw0QkFBNEIsRUFDdkUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxnQ0FBZ0MsRUFDM0UsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxhQUFhLENBQUMsU0FBbUIsSUFBSSxFQUFFLE9BQWUsSUFBSTtRQUMvRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsa0NBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxNQUFNLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzlDLEVBQUUsRUFDRixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUdEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxTQUF3QixJQUFJLEVBQUUsT0FBZSxJQUFJO1FBRWhFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxrQ0FDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLE1BQU0sU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDOUMsRUFBRSxFQUNGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNVLHFCQUFxQjs7WUFDaEMsSUFBSSxXQUFXLEdBQWlCLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNsRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUM7b0JBQ2xDLEtBQUssRUFBRSx5Q0FBeUM7b0JBQ2hELFVBQVUsRUFBRSxXQUFXO2lCQUNYO2dCQUNkLEtBQUssRUFBRSxPQUFPO2dCQUNkLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMsQ0FBQztZQUVILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDSSxjQUFjO1FBQ25CLElBQUksT0FBTyxHQUFhO1lBQ3RCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLGVBQWUsRUFBRTtnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTthQUMzQztTQUNGLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcseUNBQXlDLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNyRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUMvRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSw0QkFBNEIsQ0FBQyxPQUFlLElBQUk7UUFDckQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDBDQUEwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQzVILEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFHRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLEVBQVU7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLCtCQUErQixFQUFFLEVBQUUsRUFDOUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLFlBQW9CO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyw0QkFBNEIsWUFBWSxFQUFFLEVBQ3JGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUM7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsb0NBQW9DLEVBQy9FLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2RDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFHRDs7Ozs7T0FLRztJQUNJLGlCQUFpQixDQUFDLElBQVcsRUFBQyxFQUFTO1FBQzVDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxzQ0FBc0MsSUFBSSxNQUFNLEVBQUUsRUFBRSxFQUNwRixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQzthQUNoQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsR0FBTyxFQUFFLEVBQUU7WUFDZCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDL0Q7aUJBQU07Z0JBQ0wsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7YUFDZjtZQUNELE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZUFBZTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsbUNBQW1DLEVBQzlFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGdDQUFnQyxFQUMzRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGlDQUFpQyxFQUM1RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVNLGlCQUFpQixDQUFDLGdCQUF5QixLQUFLO1FBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxvQ0FDOUIsYUFBYSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFDdEMsRUFBRSxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUN4QyxHQUFHLENBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRTtZQUNkLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNyRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFTSxVQUFVO1FBRWYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRyx5QkFBeUIsRUFDcEMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQ25DLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEdBQWMsRUFBRSxFQUFFO1lBQ3JCLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUM1QztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUVILENBQUM7SUFFTSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsOEJBQThCLEVBQ3pDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUNuQyxDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsQ0FBQyxHQUFjLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDaEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxVQUFVLENBQUMsSUFBWSxFQUFDLEVBQVU7UUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLE9BQU8sRUFBRSxFQUFFLEVBQzVGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUE7Ozs7O01BS0U7SUFDTSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxRQUFRLFlBQVksU0FBUyxFQUFFLEVBQ3ZILEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRjs7Ozs7Ozs7Ozs7T0FXRztJQUNNLHFCQUFxQixDQUFDLEdBQU8sRUFBRSxDQUFTO1FBQzlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRywyQ0FBMkMsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUNsRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDekQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBQ0g7Ozs7O09BS0c7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyx1Q0FBdUMsUUFBUSxFQUFFLEVBQzVGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUE7Ozs7O0lBS0E7SUFFUSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLHFDQUFxQyxXQUFXLEVBQUUsRUFDN0YsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVKOzs7O01BSUU7SUFDTSx1QkFBdUI7UUFFNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLHVDQUF1QyxlQUFlLEVBQUUsRUFDbkcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQztvQkFDcEIsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEQ7YUFDSjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUVKLENBQUM7SUFFRjs7Ozs7Ozs7O01BU0U7SUFFTyxTQUFTLENBQUMsSUFBVyxFQUFDLEVBQVU7UUFDdEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDJDQUEyQyxJQUFJLE9BQU8sRUFBRSxFQUFFLEVBQ3JHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFSjs7Ozs7T0FLRztJQUNPLGVBQWUsQ0FBQyxJQUFXLEVBQUMsRUFBVTtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsMkNBQTJDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDckcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O0tBSUM7SUFDTyxjQUFjLENBQUMsSUFBVyxFQUFDLEVBQVU7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLE9BQU8sRUFBRSxFQUFFLEVBQzVGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7S0FJQztJQUNPLGVBQWUsQ0FBQyxJQUFXLEVBQUMsRUFBVTtRQUM1QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsaUNBQWlDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDM0YsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFSDs7OztPQUlHO0lBQ1csYUFBYSxDQUFDLElBQVcsRUFBQyxVQUFrQixFQUFDLFFBQWdCO1FBQ25FLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRywyQ0FBMkMsVUFBVSxhQUFhLFFBQVEsRUFBRSxFQUN2SCxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQU9BLGFBQWEsQ0FBQyxNQUVVO1FBRTdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsaURBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQ3hCLFdBQVcsTUFBTSxFQUFFLEVBQ25CLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUNuQyxDQUFBO0lBRUgsQ0FBQztJQUVGOzs7Ozs7UUFNSTtJQUNJLGNBQWMsQ0FBQyxJQUFZO1FBQ2hDLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxJQUFJLEdBQUMsa0JBQWtCLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixjQUFjLEVBQUUsSUFBSTtZQUNwQixlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtTQUMvQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDVSxPQUFPOztZQUNsQixJQUFJLFFBQVEsR0FBYyxDQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDM0gsdUJBQXVCO1lBQ3ZCLFdBQVc7WUFDWCxJQUFJLFFBQVEsRUFBRTtnQkFDWixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQzlCO1FBRUgsQ0FBQztLQUFBO0lBRUQ7Ozs7O09BS0c7SUFDSSxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBQyxPQUFlO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFQzs7Ozs7S0FLQztJQUNPLG9CQUFvQixDQUFDLE9BQWU7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNSLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFJRjs7Ozs7TUFLRTtJQUNJLGtCQUFrQixDQUFDLE9BQWU7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNSLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLE9BQU87U0FFZCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxRQUFRLENBQUMsSUFBZTtRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDekIsSUFBSSxhQUFhLEdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RCxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBVztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLElBQUk7UUFDVCxnR0FBZ0c7UUFDaEcsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xDLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNVLFFBQVE7O1lBQ25CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUNkO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDZjtZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztLQUFBO0lBRU8sWUFBWSxDQUFDLEtBQXdCO1FBQzNDLE9BQU8sVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUVDOzs7Ozs7S0FNQztJQUNPLFdBQVcsQ0FBQyxJQUFXLEVBQUUsSUFBUztRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUc7ZUFDcEMsSUFBSSxXQUFXLElBQUksQ0FBQyxNQUFNLFdBQVcsSUFBSSxDQUFDLE1BQU0sYUFBYSxJQUFJLENBQUMsUUFBUSxlQUFlLElBQUksQ0FBQyxVQUFVLFdBQVcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUNySSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O0tBT0M7SUFDUSxpQkFBaUIsQ0FBQyxJQUFXLEVBQUMsSUFBUztRQUM1QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUc7aUJBQ3BDLElBQUksV0FBVyxJQUFJLENBQUMsTUFBTSxXQUFXLElBQUksQ0FBQyxNQUFNLGFBQWEsSUFBSSxDQUFDLFFBQVEsZUFBZSxJQUFJLENBQUMsVUFBVSxXQUFXLElBQUksQ0FBQyxNQUFNLGFBQWEsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNqSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUdQOzs7Ozs7T0FNRztJQUVJLHlCQUF5QixDQUFDLFVBQWlCLEVBQUMsSUFBVztRQUMxRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsd0NBQXdDLFVBQVUsU0FBUyxJQUFJLEVBQUUsRUFDNUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFSTs7OztNQUlFO0lBQ1Esb0JBQW9CLENBQUMsVUFBaUIsRUFBQyxPQUFjLEVBQUUsYUFBcUI7UUFDakYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLGdEQUFnRCxVQUFVLFlBQVksT0FBTyxrQkFBa0IsYUFBYSxFQUFFLEVBQzlJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNkLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUVQLENBQUM7SUFFRDs7OztNQUlFO0lBQ00sV0FBVyxDQUFDLFVBQWlCLEVBQUMsT0FBYztRQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsb0NBQW9DLFVBQVUsWUFBWSxPQUFPLEVBQUUsRUFDbkcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FDSixDQUFDO0lBRUosQ0FBQztJQUVBOzs7O0dBSUQ7SUFDSyxHQUFHLENBQUMsSUFBVTtRQUVuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsc0JBQXNCLEVBQUUsSUFBSSxFQUFHO1lBQzFELE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1NBQ25DLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFFYixPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUNILENBQUE7SUFFTCxDQUFDO0lBSUY7Ozs7T0FJRztJQUNLLFdBQVcsQ0FBRSxTQUFrQjtRQUNuQyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLDhDQUE4QztRQUN4RyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGtEQUFrRDtRQUMzRyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbEgsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7OztNQUlFO0lBQ0ssV0FBVyxDQUFFLFNBQWtCO1FBQ25DLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsOENBQThDO1FBQ3hHLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0RBQWtEO1FBQzNHLElBQUksZUFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEgsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFHRDs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFpQkU7SUFDTSx3QkFBd0IsQ0FBRSxhQUFzQixFQUFFLFFBQWlCO1FBQ3JFLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsQ0FBRTtRQUM1RCxJQUFJLE9BQU8sSUFBRSxHQUFHLEVBQUM7WUFDYixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDbEIsQ0FBQztJQUVMOzs7O1NBSUs7SUFDRyxZQUFZO1FBRWpCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUM7YUFDeEQsSUFBSSxDQUNILFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQTtZQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLGNBQWMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pELHVCQUF1QjtZQUV2QixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFJLDhCQUE4QjtRQUMzRCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRUosQ0FBQztJQUNGOzs7O09BSUc7SUFDSyxXQUFXO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUUsQ0FBQyxJQUFTLEVBQUksRUFBRTtZQUMxQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNGOzs7O09BSUc7SUFDSyxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUE7Ozs7S0FJQztJQUVPLGVBQWUsQ0FBQyxHQUFhO1FBQ2xDLElBQUksSUFBSSxHQUFDLEVBQUUsQ0FBQztRQUNaLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBLEVBQUUsR0FBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFBLENBQUEsQ0FBQyxDQUFDLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDZCQUE2QixFQUFDLElBQUksRUFDOUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUM7YUFDakMsSUFBSSxDQUNILEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxHQUFFLE9BQU8sR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQ2pDLENBQUM7SUFDSixDQUFDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDSyxjQUFjLENBQUMsT0FBYyxFQUFDLFVBQWlCLEVBQUMsU0FBaUI7UUFDdEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLCtDQUErQyxPQUFPLE9BQU8sVUFBVSxNQUFNLFNBQVMsRUFBRSxFQUNuSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7OztZQS8vRUEsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUF2RU0sVUFBVTtZQUtWLFNBQVM7WUFPVCxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTVByZWZpam8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9NUHJlZmlqby5tb2RlbCc7XHJcbmltcG9ydCB7IE1FbnRlcnByaXNlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvRW50ZXJwcmlzZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1QZXJzb25hbE5vbWluYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01QZXJzb25hbE5vbWluYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Ib2phVGllbXBvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUhvamFUaWVtcG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1Vc3VhcmlvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TU1MvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJUmVxdWVzdCB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1Qcm92ZWVkb3IgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9wcm92ZWVkb3Jlcy5tb2RlbCc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1Vc3VhcmlvUHJlZmlqbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL3VzZXJQcmVmaXgubW9kZWwnO1xyXG5pbXBvcnQgeyBJQ2F0YWxvZ28sIGZpbHRlckRhdGEgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9DYXRhbG9nbyc7XHJcbmltcG9ydCB7IENhdGFsb2dvQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jYXRhbG9nby9jYXRhbG9nby5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhUHJlc3VwdWVzdG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9jdWVudGFQcmVzdXB1ZXN0by5tb2RlbCc7XHJcbmltcG9ydCB7IE1DdWVudGFJbnN0aXR1Y2lvbmFsIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0cvY3VlbnRhSW5zdGl0dWNpb25hbC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Nb25lZGEsIE1Nb25lZGFDb25maWcgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9tb25lZGEubW9kZWwnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IE1VbmlkYWRUcmlidXRhcmlhIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvdW5pZGFkVHJpYnV0YXJpYS5tb2RlbCc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jb25maXJtL2NvbmZpcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTUNvbmZpZ3VyYWNpb25TQ0cgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9jb25maWd1cmFjaW9uU0NHLm1vZGVsJztcclxuaW1wb3J0IHsgTVBsYW5Vbmljb0N1ZW50YSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL3BsYW5Vbmljb0N1ZW50YS5tb2RlbCc7XHJcbmltcG9ydCB7IElDb25leGlvbiB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL1VzdWFyaW8nO1xyXG5pbXBvcnQgeyBUYWJsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0L3RhYmxlLXNlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhdGlvblNQRyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2NvbmZpZ3VyYXRpb25TUEcubW9kZWwnO1xyXG5pbXBvcnQgeyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWUsIE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZSwgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlQ29tcGxldGUsIE1BbGxTdHJ1Y3R1cmUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9lc3RydWN0dXJhUHJlc3VwdWVzdGFyaWEubW9kZWwnO1xyXG5pbXBvcnQgeyBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWUsIElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZSB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL0VzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYSc7XHJcbmltcG9ydCB7IE1DZW50cm9Db3N0bywgTVVzdWFyaW9DZW50cm9Db3N0byB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL2NlbnRyb0Nvc3RvLm1vZGVsJztcclxuaW1wb3J0IHsgTUZ1ZW50ZUZpbmFuY2lhbWllbnRvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvZnVlbnRlRmluYW5jaWFtaWVudG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhRWdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2V4cGVuc2l2ZUFjY291bnQubW9kZWwnO1xyXG5pbXBvcnQgeyBDYXRhbG9nb0VzdHJ1Y3R1cmFzQ29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy9jYXRhbG9nby1lc3RydWN0dXJhcy9jYXRhbG9nby1lc3RydWN0dXJhcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJVXBkYXRlRGlzdHJpYnV0aW9uLCBJVXBkYXRlRGlzdHJpYnV0aW9uMiwgSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zLCBJVXBkYXRlRGlzdHJpYnV0aW9uSW5ncmVzb3MyIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ3VlbnRhRWdyZXNvcyc7XHJcbmltcG9ydCB7IENhdGFsb2dvRG9ibGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY2F0YWxvZ28tZG9ibGUtaW5wdXQvY2F0YWxvZ28tZG9ibGUtaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTVNpc3RlbWEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9zaXN0ZW1hJztcclxuaW1wb3J0IHsgSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zLCBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpbyc7XHJcbmltcG9ydCB7IE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcywgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2NvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhSW5ncmVzb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9JbmNvbWVBY2NvdW50JztcclxuaW1wb3J0IHsgTUluY29tZVN0cnVjdHVyZUFjY291bnQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9pbmNvbWVTdHJ1Y3R1cmVBY2NvdW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTU9yZ2FuaXphdGlvblR5cGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9vcmdhbml6YXRpb25UeXBlLm1vZGVsJztcclxuaW1wb3J0IHsgTVNwZWNpYWx0eSB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3NwZWNpYWx0eS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Eb2N1bWVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2RvY3VtZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTUNsYXNpZmljYXRpb24gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9jbGFzaWZpY2F0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvdW50cnksIE1TdGF0ZSwgTU11bmljaXBhbGl0eSwgTVBhcmlzaCwgTUNpdHksIE1Db21tdW5pdHkgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9sb2NhdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBNUHJvdmlkZXJCZW5lZmljaWFyeSB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3Byb3ZpZGVyQmVuZWZpY2lhcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBNU2lnZWNvZkJhbmssIE1CYW5rLCBNQmFua0FjY291bnRUeXBlLCBNQWdlbmNpYUJhbmNvLCBNQ3VlbnRhQmFuY28gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDQi9iYW5rLm1vZGVsJztcclxuaW1wb3J0IHsgSVJlc3BvbnNlIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhdGlvblJQQyB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2NvbmZpZ3VyYWNpb25SUEMubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uZmlnU09DIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TT0MvY29uZmlndXJhY2lvblNPQy5tb2RlbCc7XHJcbmltcG9ydCB7IE1EZWR1Y3Rpb25UeXBlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvZGVkdWN0aW9uVHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1DYXJnbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU09DL2NoYXJnZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25jZXB0b1JldGVuY2lvbiwgTURlZHVjdGlvbiB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1RCL2RlZHVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25maWdTU1MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9zZWN1cml0eUNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQWRtaW5pc3RyYXRpdmVVbml0IH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvYWRtaW5pc3RyYXRpdmVVbml0Lm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbXBvbmVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Mb2cgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9sb2cubW9kZWwnO1xyXG5pbXBvcnQgeyBNU2VydmljZUNoYXJnZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU09DL3NlcnZpY2VDaGFyZ2UubW9kZWwnO1xyXG5pbXBvcnQgeyBNRW1wcmVzYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL0VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uY2VwdG9zQ1hQIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DWFAvTUNvbmNlcHRvc0NYUC5tb2RlbCc7XHJcbmltcG9ydCB7IE1UaXBvRG9jdW1lbnRvQ1hQIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DWFAvTVRpcG9Eb2N1bWVudG9DWFAubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhY2lvblNOTyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Db25maWd1cmFjaW9uU05PLm1vZGVsJztcclxuaW1wb3J0IHsgTURlZmluaWNpb25Ob21pbmEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NRGVmaW5pY2lvbk5vbWluYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Bc2lnbmFjaW9uQ2FyZ28gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NQXNpZ25hY2lvbkNhcmdvLm1vZGVsJztcclxuaW1wb3J0IHsgTU5vbWluYVNpbXBsZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Ob21pbmFTaW1wbGUubW9kZWwnO1xyXG5pbXBvcnQgeyBNUGVyc29uYWwgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NUGVyc29uYWwubW9kZWwnO1xyXG5pbXBvcnQgeyBNRW50cmFkYVN1bWluaXN0cm9zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TSVYvTUVudHJhZGFTdW1pbmlzdHJvLm1vZGVsJztcclxuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInXHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7IFxyXG5pbXBvcnQgeyBNU25vTG9nIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUF1ZGl0b3JpYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1UaXBvRGVwb3NpdG9zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TSVYvTVRpcG9EZXBvc2l0b3MubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29tdW5pZGFkIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvY29tdW5pZGFkLm1vZGVsJztcclxuaW1wb3J0IHsgTUV4Y2hhbmdlUmF0ZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL1Rhc2FDYW1iaW8ubW9kZWwnO1xyXG5cclxuICBcclxuICBASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxuICB9KVxyXG4gIGV4cG9ydCBjbGFzcyBTaWdlc3BTZXJ2aWNlIHtcclxuXHJcbiAgICBwdWJsaWMgdXN1YXJpb0FjdGl2bzogTVVzdWFyaW8gPSBudWxsO1xyXG4gICAgcHVibGljIFVSTDogc3RyaW5nO1xyXG4gICAgcHVibGljIGN1cnJlbnRDb21wb25lbnQ6IE1Db21wb25lbnQgPSBudWxsO1xyXG4gICAgcHVibGljIHVzZXJNZW51ICA9IG51bGw7IFxyXG4gICAgcHVibGljIGlwX2FkcmVzcyA9ICcxMjcuMC4wLjEnO1xyXG4gICAgLy8gcHVibGljIFVSTDogc3RyaW5nID0gXCJodHRwOi8vMTkyLjE2OC4xLjY3L3NpZ2VzcF9waHBcIjtcclxuICAgIC8vIHVzdWFyaW9BY3Rpdm86IE1Vc3VhcmlvID0ge1xyXG4gICAgLy8gICBjb25leGlvbkRCOiB7XHJcbiAgICAvLyAgICAgYmFzZURlRGF0b3M6IFwiZGJfc2lnZXNwX2RlbW92M1wiLFxyXG4gICAgLy8gICAgIGdlc3RvcjogXCJwb3N0Z3Jlc1wiLFxyXG4gICAgLy8gICAgIGxvZ2luOiBcInBvc3RncmVzXCIsXHJcbiAgICAvLyAgICAgbm9tYnJlOiBcIlNJR0VTUCBDLkEsIHNlcnZpZG9yIDg1IChTRSBQVUVERSBVU0FSKVwiLFxyXG4gICAgLy8gICAgIHBhc3N3b3JkOiBcImFkbWluc2lnZXNwXCIsXHJcbiAgICAvLyAgICAgcHVlcnRvOiBcIjU0MzJcIixcclxuICAgIC8vICAgICBzZXJ2aWRvcjogXCIxOTIuMTY4LjEuNjdcIixcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgZW1wcmVzYToge1xyXG4gICAgLy8gICAgIGlkOiAxLFxyXG4gICAgLy8gICAgIHBlcmlvZG9GaXNjYWw6IFwiMjAxOS0wMS0wMVwiLFxyXG4gICAgLy8gICAgIHRpdHVsbzogXCJTSUdFU1AgQy5BLlwiXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIG5vbWJyZTogXCJTSUdFU1BcIixcclxuICAgIC8vICAgdG9rZW46IFwiZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6TTROQ0o5LmV5SndZWE56ZDI5eVpGOTFjM1VpT2lJeE1qTTBOVFkzT0NJc0ltbGtYMlZ0Y0hKbGMyRWlPaUl4SWl3aWRHbDBaVzF3SWpvaVUwbEhSVk5RSUVNdVFTNGlMQ0p3WlhKbWFYTmpZV3dpT2lJeU1ERTVMVEF4TFRBeElpd2liRjkxYzNWaGNtbHZJam9pVTBsSFJWTlFJaXdpYzJWeWRtbGtiM0lpT2lJeE9USXVNVFk0TGpFdU5qY2lMQ0p3ZFdWeWRHOGlPaUkxTkRNeUlpd2lZbUZ6WldSbFpHRjBiM01pT2lKa1lsOXphV2RsYzNCZlpHVnRiM1l6SWl3aWJHOW5hVzRpT2lKd2IzTjBaM0psY3lJc0luQmhjM04zYjNKa0lqb2lZV1J0YVc1emFXZGxjM0FpZlEuUElTQlNmdWVSQWRzV3NKMUFhR2NWQ2dXLTJhSmtndHZMZHNXMEJnbzVsdHlZb3dEOG95X25xSzVzakUyVVJHa1wiXHJcbiAgICAvLyB9XHJcbiAgICAvLyBwcm9jZWRlOiBzdHJpbmcgPSAnU0NHQ01QJztcclxuICAgIC8vIGNvZHNpczogc3RyaW5nID0gJ1NDRyc7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSB0b2FzdDogVG9hc3RyU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsaWRhIHF1ZSBzZWxvIHNlIGVzY3JpYmFuIGd1aW9uZXMgeSA5XHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ubHlHdWlvbmVzQW5kTmluZShldmVudDogYW55KSB7XHJcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICctJyB8fCBldmVudC5rZXkgPT09ICc5Jykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgZWwgbW9uY21wIGRlIHNpZ2VzcF9jb21wcm9iYW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQ29tcHJvYmFudGVBbW91bnQoYW1vdW50OiBudW1iZXIsIGlkQ29tcHJvYmFudGU6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5VUkx9L2Rhby9zaWdlc3AvY29tcHJvYmFudGVfZGFvLnBocD9tb250bz10cnVlYCwge1xyXG4gICAgICAgIG1vbmNtcDogYW1vdW50LFxyXG4gICAgICAgIGlkX2NvbXByb2JhbnRlOiBpZENvbXByb2JhbnRlXHJcbiAgICAgIH0sIHtcclxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIGVsIGNvbXByb2JhbnRlIHByc3VwdWVzdGFyaW8gZGUgRWdyZXNvc1xyXG4gICAgICogQHBhcmFtIGNvbXByb2JhbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcyhjb21wcm9iYW50ZTogSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19lZ3Jlc29zX2Rhby5waHBgLFxyXG4gICAgICB7IC4uLmNvbXByb2JhbnRlLCBpZDogY29tcHJvYmFudGUuaWRfZHRfc3BnY21wIH0sIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgY29tcHJvYmFudGUgcHJlc3VwdWVzdGFyaW8gZGUgRWdyZXNvc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MoKTogT2JzZXJ2YWJsZTxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3NbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9fZWdyZXNvc19kYW8ucGhwYCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSBlbCBjb21wcm9iYW50ZSBwcnN1cHVlc3RhcmlvIGRlIEluZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gY29tcHJvYmFudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyhjb21wcm9iYW50ZTogSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9fZWdyZXNvc19kYW8ucGhwYCxcclxuICAgICAgeyAuLi5jb21wcm9iYW50ZSwgaWQ6IGNvbXByb2JhbnRlLmlkX2R0X3NwaWNtcCB9LCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIGNvbXByb2JhbnRlIHByZXN1cHVlc3RhcmlvIGRlIEluZ3Jlc29zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MoKTogT2JzZXJ2YWJsZTxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvc1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19pbmdyZXNvc19kYW8ucGhwYCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgZWdyZXNvXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25FeHBlbnNlQWNjb3VudChkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb24pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9jdWVudGFzX2VncmVzb3NfZGFvLnBocGAsIGRpc3RyaWJ1dGlvbixcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBlZ3Jlc29cclxuICAgICAqIEBwYXJhbSBkaXN0cmlidXRpb25cclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkV4cGVuc2VBY2NvdW50MihkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb24yW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2N1ZW50YXNfZWdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KTtcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBJbmdyZXNvXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVBY2NvdW50KGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFzX2luZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNQ3VlbnRhSW5ncmVzb3MocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVBY2NvdW50MihkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb25JbmdyZXNvczJbXSk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zcGkvY3VlbnRhc19pbmdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUN1ZW50YUluZ3Jlc29zKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgSW5ncmVzbyBkZSBFc3RydWN0dXJhXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVTdHJ1Y3R1cmVBY2NvdW50KGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zLCBsZXZlbDogbnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFfZXN0cnVjdHVyYV9pbmdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUluY29tZVN0cnVjdHVyZUFjY291bnQocmVzLmRhdGEsIGxldmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjdWVudGFzIHBvciBuaXZlbCBkZSBsYXMgY3VlbmF0cyBkZSBlZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gbGV2ZWwgTsO6bWVybyBkZSBuaXZlbGVzIGRlIGxhIGNvbmZpZ3VyYWNpw7NuXHJcbiAgICAgKiBAcGFyYW0gaWQgaWQgZGVsIG5pdmVsIDMgbyA1IHF1ZSBzZSB2YSBhIGJ1c2NhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DdWVudGFFZ3Jlc29zW10+XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRFeHBlbnNlQWNjb3VudHNGb3JMZXZlbChsZXZlbDogbnVtYmVyLCBpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxNQ3VlbnRhRWdyZXNvc1tdPntcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUN1ZW50YUVncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHA/bGV2ZWw9JHtsZXZlbH0maWQ9JHtpZH1gLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUN1ZW50YUVncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjYXTDoWxvZ28gZGUgZXN0cnVjdHVyYSBwcmVzdXB1ZXNhcmlhXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBEYXRhIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIENvbmZpZ3VyYWNpw7NuIGRlIGxhIGVzdHJ1Y3R1cmFcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbkNhdGFsb2dvRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhKGRhdGE6IGFueVtdLCBjb25maWd1cmF0aW9uOiBNQ29uZmlndXJhdGlvblNQRyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGNvbnN0IGNhdGFsb2dvID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0VzdHJ1Y3R1cmFzQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgZGF0YSxcclxuICAgICAgICAgIGNvbmZpZ3VyYXRpb25cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY2F0YWxvZ28uYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjdWVudGFzIGRlIGVncmVzb3NcclxuICAgICAqIEBwYXJhbSBvbmx5QXZhaWxhYmxlXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YUVncmVzb3NbXT5cclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRFeHBlbnNlQWNjb3VudHMob25seUF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxNQ3VlbnRhRWdyZXNvc1tdPntcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUN1ZW50YUVncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHAke1xyXG4gICAgICAgIG9ubHlBdmFpbGFibGUgPyAnP2F2YWlsYWJsZT10cnVlJyA6ICcnXHJcbiAgICAgIH1gLCB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUN1ZW50YUVncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB0b2RhcyBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWV0c2FyaWFzIGRlIGxhcyA1IHRhYmxhc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1BbGxTdHJ1Y3R1cmU+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QWxsQnVkZ2V0U3RydWN0dXJlKCk6IFByb21pc2U8TUFsbFN0cnVjdHVyZT4ge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlT25lKCkuc3Vic2NyaWJlKHN0cnVjdHVyZU9uZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZVR3b0FsbCgpLnN1YnNjcmliZShzdHJ1Y3R1cmVUd28gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZVRocmVlKCkuc3Vic2NyaWJlKHN0cnVjdHVyZVRocmVlID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZUZvdXIoKS5zdWJzY3JpYmUoc3RydWN0dXJlRm91ciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZUZpdmVCeUlkRXA0KCkuc3Vic2NyaWJlKHN0cnVjdHVyZUZpdmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBNQWxsU3RydWN0dXJlKHtcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVPbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlVHdvLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVRocmVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUZvdXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlRml2ZVxyXG4gICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGVzdHJ1Y3R1cmEgY29tcGxldGEgZGVwZW5kaWVuZG8gZGUgbGEgY29uZmlndXJhY2nDs25cclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnlbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBnZXRCdWRnZXRTdHJ1Y3R1cmVDb21wbGV0ZShuaXZlbDpudW1iZXIpOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IFtdO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZUZpdmUobml2ZWwpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgZGF0YS5wdXNoKC4uLnJlc3VsdClcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlVGhyZWVDb21wbGV0ZSgzKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyAgIGRhdGEucHVzaCguLi5yZXN1bHQpXHJcbiAgICAgICAgLy8gfSlcclxuXHJcbiAgICAgICAgYXdhaXQgcmVzb2x2ZShkYXRhKTtcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDUgcXVlIHZhbiBhIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZUZpdmUoaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBFc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBhY3R1YWxpemFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlRml2ZShzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZUZpdmUoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNV9kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB0b2RhIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgNVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZShsZXZlbDogbnVtYmVyID0gbnVsbCk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocD9jb21wbGV0ZT10cnVlYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlKGUsIGxldmVsKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDUgcG9yIGVsIElkIGRlIGxhIGVzdHJ1Y3R1cmEgNFxyXG4gICAgICogQHBhcmFtIGlkRXA0IGlkIGRlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgNFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZUJ5SWRFcDQoaWRFcDQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNV9kYW8ucGhwJHtpZEVwNCA/IGA/aWRfZXA0PSR7aWRFcDR9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmUoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDMgcXVlIHZhbmEgIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZUZvdXIoaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTRfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBFc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBhY3R1YWxpemFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlRm91cihzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cltdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTRfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZUZvdXIoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXJbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNF9kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBpZEVwMyBJZCBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYXByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRm91cihpZEVwMz86IHN0cmluZyk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXJbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cltdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNF9kYW8ucGhwJHtpZEVwMyA/IGA/aWRfZXAzPSR7aWRFcDN9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXIoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDMgcXVlIHZhbmEgIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZVRocmVlKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgM1xyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZXMgRXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHF1ZSB2YW4gYSBzZXIgYWN0dWFsaXphZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZVRocmVlKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDNcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZVRocmVlKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHBgLCBzdHJ1Y3R1cmVzLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZSB0cmFlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgY29tcGxldGEgaGFzdGEgZWwgbml2ZWwgM1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZVRocmVlQ29tcGxldGUobGV2ZWw6IG51bWJlcik6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocD9jb21wbGV0ZT10cnVlYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlKGVsZW1lbnQsIGxldmVsKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDNcclxuICAgICAqIEBwYXJhbSBpZEVwMiBJZCBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYXByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlVGhyZWUoaWRFcDI/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhM19kYW8ucGhwJHtpZEVwMiA/IGA/aWRfZXAyPSR7aWRFcDJ9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbGltaW5hIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgdW5vXHJcbiAgICAgKiBAcGFyYW0gaWRTdHJ1Y3R1cmVzIElkIGRlIGxhIG8gbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyBxdWUgdmFuIGEgc2VyIGVsaW1pbmFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVsZXRlQnVkZ2V0U3RydWN0dXJlVHdvKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSBkb3NcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmUgRXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSB1bm8gcXVlIHNlIHZhIGEgYWN0dWFsaXphclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZVR3byhzdHJ1Y3R1cmU6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLCBzdHJ1Y3R1cmUsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdHJhIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0cmlhcyBkb3MgZW4gbGEgYmFzZSBkZSBkYXRvc1xyXG4gICAgICogQHBhcmFtIGJ1ZGdldFN0cnVjdHVyZXMgQXJyYXkgZGUgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWEgcXVlIHNlIHZhbiBhIHJlZ2lzdHJhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVUd28oYnVkZ2V0U3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICBidWRnZXRTdHJ1Y3R1cmVzLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVUd28oaWRFcDE6IHN0cmluZyk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTJfZGFvLnBocD9pZF9lcDE9JHtpZEVwMX1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvKGVsZW1lbnQpKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZVR3b0FsbCgpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvKGVsZW1lbnQpKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRWxpbWluYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHVub1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYSBvIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZU9uZShpZFN0cnVjdHVyZXM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KCdkZWxldGUnLCBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMV9kYW8ucGhwYCxcclxuICAgICAgeyBib2R5OiBpZFN0cnVjdHVyZXMsIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgdW5hIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgdW5vXHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlIEVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgdW5vIHF1ZSBzZSB2YSBhIGFjdHVhbGl6YXJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVCdWRnZXRTdHJ1Y3R1cmVPbmUoc3RydWN0dXJlOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMV9kYW8ucGhwYCwgc3RydWN0dXJlLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RyYSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdHJpYXMgZW4gbGEgYmFzZSBkZSBkYXRvc1xyXG4gICAgICogQHBhcmFtIGJ1ZGdldFN0cnVjdHVyZXMgQXJyYXkgZGUgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWEgcXVlIHMgZXZhbiBhIHJlZ2lzdHJhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVPbmUoYnVkZ2V0U3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWExX2Rhby5waHBgLFxyXG4gICAgICBidWRnZXRTdHJ1Y3R1cmVzLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVPbmUoKTogT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWExX2Rhby5waHBgLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFPbmUoZWxlbWVudCkpKSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNvbmZpZ3VyYWNpb25lcyBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25TUEdbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uU1BHKCk6IE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25TUEc+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db25maWd1cmF0aW9uU1BHPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhX2NvbmZpZ19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gbmV3IE1Db25maWd1cmF0aW9uU1BHKHJlc3AuZGF0YVswXSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25SUENbXT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uUlBDKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29uZmlndXJhdGlvblJQQz4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2NvbmZpZ19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXNwLmRhdGEgPSBuZXcgTUNvbmZpZ3VyYXRpb25SUEMocmVzcC5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIE1Db25maWd1cmFjaW9uU05PIGRlIGxhIG5vbWluYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU05PW10+XHJcbiAgICAgKiBAZGF0ZSAyNy0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNOTygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9jb25maWd1cmFjaW9uX2Rhby5waHA/dGlwbz0keydjb25maWd1cmFjaW9uJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGlmKHJlc3AuZGF0YSAhPW51bGwpe1xyXG4gICAgICAgICAgICAgIHJlc3AuZGF0YSA9IHJlc3AuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmZpZ3VyYWNpb25TTk8oZSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlc3AuZGF0YT1bXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZGF0ZVRvU3RyaW5nKGRhdGU6IERhdGUpOiBzdHJpbmd7XHJcbiAgICAgIHJldHVybiBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7XHJcbiAgICAgICAgZGF0ZS5nZXRNb250aCgpICsgMSA+PSAxMCA/IGRhdGUuZ2V0TW9udGgoKSArIDEgOiBgMCR7ZGF0ZS5nZXRNb250aCgpICsgMX1gXHJcbiAgICAgIH0tJHtcclxuICAgICAgICBkYXRlLmdldERhdGUoKSA+PSAxMCA/IGRhdGUuZ2V0RGF0ZSgpIDogYDAke2RhdGUuZ2V0RGF0ZSgpfWBcclxuICAgICAgfWBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgU2VndXJpZGFkXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ1NTUygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nzcy9zZWd1cmlkYWRfY29uZmlnX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlc3AuZGF0YSA9IG5ldyBNQ29uZmlnU1NTKHJlc3AuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNwXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcG9uZW50cyhzeXN0ZW1Db2RlOiBzdHJpbmcgPSBudWxsLCBwZXJtaXQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPElSZXNwb25zZT57XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3NzL2NvbXBvbmVudGVzX2Rhby5waHA/JHtzeXN0ZW1Db2RlID8gYGNvZHNpcz0ke3N5c3RlbUNvZGV9JHtcclxuICAgICAgICAgIHBlcm1pdCA/IGAmcGVybWl0PXRydWVgIDogJydcclxuICAgICAgICB9YCA6ICcnfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApLnBpcGUoXHJcbiAgXHJcbiAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbXBvbmVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBmdWVudGVzIGRlIGZpbmFuY2lhbWllbnRvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUZ1ZW50ZUZpbmFuY2lhbWllbnRvW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RnVlbnRlRmluYW5jaWFtaWVudG8oKTogT2JzZXJ2YWJsZTxNRnVlbnRlRmluYW5jaWFtaWVudG9bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRnVlbnRlRmluYW5jaWFtaWVudG9bXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZnVlbnRlX2ZpbmFuY2lhbWllbnRvX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1GdWVudGVGaW5hbmNpYW1pZW50byhlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2VudHJvcyBkZSBjb3N0b1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DZW50cm9Db3N0b1tdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqIEBwYXJhbSBpZDppZHVzdXJpbyBvIGlkIGRlbCBlY250cm8gZGUgY29zdG9cclxuICAgICAqIG1vZGlmaWNhZG8gMjgtMTItMjAyMlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2VudHJvQ29zdG8odGlwbzogJ2FsbCd8J29uZSd8J3VzZXInfCdlbnRlcic9IG51bGwsIGlkPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1DZW50cm9Db3N0b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY2VudHJvX2Nvc3RvX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ2VudHJvQ29zdG8oZWxlbWVudCkpKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjZW50cm9zIGRlIGNvc3RvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvc3RDZW50ZXJzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY2VudHJvX2Nvc3RvX2Rhby5waHBgLCBcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ2VudHJvQ29zdG8oZWxlbWVudCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlckNvc3RDZW50ZXJzKGNvZGlnbzpzdHJpbmcpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NnL2NlbnRyb19jb3N0b191c3VhcmlvX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsIFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Vc3VhcmlvQ2VudHJvQ29zdG8oZWxlbWVudCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgY2hlY2trc1xyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlIGxhIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBEYXRhIHF1ZSBzIGV2YSBhIG1vc3RyYXIgZW4gbGEgdGFibGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5EaWFsb2dNdWx0aVNlbGVjdChcclxuICAgICAgLy8gY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICAvLyB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgLy8gZGF0YVNvdXJjZTogYW55W10sXHJcbiAgICAgIC8vIGNvbHVtbk5hbWVzPzogc3RyaW5nW11cclxuICAgICAgY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLCBcclxuICAgICAgd2lkdGg6IHN0cmluZyA9ICc0NTBweCcsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBoYXNCYWNrZHJvcD86IGJvb2xlYW4sXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlPzogYm9vbGVhbixcclxuICAgICAgIC8vIGRpc2FibGVNYXN0ZXJUb2dnbGU/OiBib29sZWFuXHJcbiAgICAgIH0gPSB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSwgXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLCBcclxuICAgICAgLy8gIGRpc2FibGVNYXN0ZXJUb2dnbGU6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgICk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVGFibGVTZWxlY3RDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogZGF0YVNvdXJjZSxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzLFxyXG4gICAgICAgICAvLyBkaXNhYmxlTWFzdGVyVG9nZ2xlOiBvcHRpb25zLmRpc2FibGVNYXN0ZXJUb2dnbGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcclxuICAgICAgICBoYXNCYWNrZHJvcDogb3B0aW9ucy5oYXNCYWNrZHJvcCxcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IG9wdGlvbnMuZGlzYWJsZUNsb3NlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TVBsYW5Vbmljb0N1ZW50YT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nUGxhblVuaWNvQ3VlbnRhcygpOiBQcm9taXNlPE1QbGFuVW5pY29DdWVudGE+IHtcclxuICAgICAgbGV0IHBsYW5lczogTVBsYW5Vbmljb0N1ZW50YVtdID0gYXdhaXQgdGhpcy5nZXRMaXN0YWRvUExhblVuaWNvQ3VlbnRhcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2lvbiddLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2nDs24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIFBsYW4gZGUgQ3VlbnRhcyBHw6luZXJhbCcsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBwbGFuZXNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgbGlzdGFkbyBkZWwgcGxhbiDDum5pY28gZGUgY3VlbnRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1wbGFuVW5pY29DdWVudGFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRMaXN0YWRvUExhblVuaWNvQ3VlbnRhcygpOiBPYnNlcnZhYmxlPE1QbGFuVW5pY29DdWVudGFbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNUGxhblVuaWNvQ3VlbnRhW10+KGAke3RoaXMuVVJMfS9kYW8vc2NnL3BsYW5fdW5pY29fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTVBsYW5Vbmljb0N1ZW50YShlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIFNDR1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU0NHW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQG1vZGlmaXQgMjUtMDctMjAyMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNDRygpOiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU0NHW10+IHsgICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbmZpZ3VyYWNpb25TQ0dbXT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY29uZmlndXJhY2lvbl9jb250YWJpbGlkYWRfZGFvLnBocGAsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29uZmlndXJhY2lvblNDRyhlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIHVuIGRpYWxvZyBkZSBjb25maXJtYWNpw7NuXHJcbiAgICAgKiBAcGFyYW0gdGl0bGUgVMOtdHVsbyBkZSBsYSBtb2RhbCBkZSBjb25maXJtXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIChvcGNpb25hbCkgcGFyYSBlbCB1c3VzYXJpb1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPGJvb2xlYW4+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbkRpYWxvZ0NvbmZpcm0odGl0bGU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgbWVzc2FnZTogKG1lc3NhZ2UpID8gbWVzc2FnZSA6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZpZXJ0ZSBlbCBjb250ZW5pZG8gZGUgdW4gQWJzdHJhY3RDb250cm9sIGVuIG1hecO6c2N1bGEgKFVzYXIgZW4gZXZlbnRvIGtleXVwKVxyXG4gICAgICogQHBhcmFtIGZvcm1Hcm91cCBGb3JtdWxhcmlvIGTDs25kZSBzZSB2YSBhIGJ1c2NhciBlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBwYXJhbSBuYW1lIE5vbWJyZSBkZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGFuZ2VUb1VwcGVyQ2FzZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sKGZvcm1Hcm91cCwgbmFtZSkuc2V0VmFsdWUodGhpcy5nZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwLCBuYW1lKS52YWx1ZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEFic3RyYWN0Q29udHJvbCBkZSB1biBmb3JtdWxhcmlvXHJcbiAgICAgKiBAcGFyYW0gZm9ybUdyb3VwIEZvcm11bGFyaW8gZG9uZGUgc2UgdmEgYSBidXNjYXIgZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBOb21icmUgZGVsIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQHJldHVybiBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwOiBGb3JtR3JvdXAsIG5hbWU6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICAgIHJldHVybiBmb3JtR3JvdXAuZ2V0KG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFByZXZpZW5lIHF1ZSBzZSBlc2NyaWJhbiBsZXRyYXMgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKiBAbW9kaWZpY2FkbyBjb21vIG9ubHlOdW1lcm8gcGFyYSBjb3JyZWdpciBjb2RpZ28sIHVzYXIgY3VycmVuY3ktaW5wdXQgc2kgcXVpZXJlIHVzYXIgZGVjaW1hbGVzIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25seURlY2ltYWwoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWlzTmFOKCtldmVudC5rZXkpICYmIGV2ZW50LmtleUNvZGUgIT0gMzIpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUHJldmllbmUgcXVlIHNlIGVzY3JpYmFuIGxldHJhcyBlbiBlbCBpbnB1dCAoVXNhciBlbiBrZXlwcmVzcylcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ubHlOdW1iZXJzKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgICAgaWYgKCFpc05hTigrZXZlbnQua2V5KSAmJiBldmVudC5rZXlDb2RlICE9IDMyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlIChhLXogQS1aIMOhLcO6IMOxw5Egw7zDnCAnLC4pIHF1ZSBzZSBlc2NyaWJhbiBudW1lcm9zIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAZGF0ZSAxNC0wNS0yMDIyXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgdHlwZU5hbWUoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoKGV2ZW50LmtleT49J2EnICYmIGV2ZW50LmtleTw9J3onKSAgfHwgKGV2ZW50LmtleT49J0EnICYmIGV2ZW50LmtleTw9J1onKSB8fCAgZXZlbnQua2V5PT1cIsOxXCIgfHwgIGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHwgKGV2ZW50LmtleT49J8OhJyAmJiBldmVudC5rZXk8PSfDuicpIHx8IGV2ZW50LmtleT49J8O8JyAgfHwgZXZlbnQua2V5Pj0nw5wnICB8fCBldmVudC5rZXk9PVwiJ1wiICB8fCBldmVudC5rZXlDb2RlPT0zMiBcclxuICAgICAgICAgIHx8ICBldmVudC5rZXk9PVwiLlwiIHx8ICBldmVudC5rZXk9PVwiLFwiICApe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSAoMC05IGEteiBBLVogw6Etw7ogw7HDkSDDvMOcICcsLi1fLzooKSUjwromJOKCrMKjwqUpIHF1ZSBzZSBlc2NyaWJhbiAgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBkYXRlIDE0LTA1LTIwMjJcclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyB0eXBlVGV4dChldmVudD86IGFueSk6IGJvb2xlYW4geyAgICAgIFxyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgICYmIGV2ZW50LmtleTw9J3onKSB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpIHx8IGV2ZW50LmtleT09XCLDsVwiIHx8IGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHwgKGV2ZW50LmtleT49J8OhJyAmJiBldmVudC5rZXk8PSfDuicpIHx8IGV2ZW50LmtleT09J8O8JyB8fCBldmVudC5rZXk9PSfDnCcgfHwgZXZlbnQua2V5PT1cIidcIiB8fCBpc05hTigrZXZlbnQua2V5KSBcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09XCIuXCIgIHx8ICBldmVudC5rZXk9PVwiLFwiIHx8IGV2ZW50LmtleT09XCImXCIgfHwgIGV2ZW50LmtleT09XCJfXCJ8fCBldmVudC5rZXk9PVwiLVwiIHx8IGV2ZW50LmtleT09XCIjXCJcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09XCLCulwiICB8fCAgZXZlbnQua2V5PT1cIiRcIiB8fCBldmVudC5rZXk9PVwiKFwiIHx8IGV2ZW50LmtleT09XCIpXCIgfHwgZXZlbnQua2V5PT1cIiVcIiB8fCBldmVudC5rZXk9PScgJ1xyXG4gICAgICAgICAgfHwgZXZlbnQua2V5PT0nOicgIHx8ZXZlbnQua2V5PT0nLyd8fCBldmVudC5rZXlDb2RlPT04MzY0IHx8ICBldmVudC5rZXlDb2RlPT0xNjUgfHxldmVudC5rZXlDb2RlPT0xNjMpe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgIFxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlICgwLTkgYS16IEEtWiDDscORIC4tXykgcXVlIHNlIGVzY3JpYmFuICBlbiBlbCBpbnB1dCAoVXNhciBlbiBrZXlwcmVzcylcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGRhdGUgMTQtMDUtMjAyMlxyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgdHlwZUNvZGUoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoKGV2ZW50LmtleT49J2EnICAmJiBldmVudC5rZXk8PSd6JykgfHwgKGV2ZW50LmtleT49J0EnICYmIGV2ZW50LmtleTw9J1onKSAgfHwgZXZlbnQua2V5PT1cIsOxXCIgfHwgZXZlbnQua2V5PT1cIsORXCIgXHJcbiAgICAgICAgICB8fGlzTmFOKCtldmVudC5rZXkpIHx8IGV2ZW50LmtleT09XCIuXCIgfHwgIGV2ZW50LmtleT09XCJfXCIgfHwgZXZlbnQua2V5PT1cIi1cIil7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQ29tdW5pZGFkPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dVbmlkYWRlc1RyaWJ1dGFyaWFzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCB1ZFRyaWJ1dGFyaWFzOiBNVW5pZGFkVHJpYnV0YXJpYVtdID0gYXdhaXQgdGhpcy5nZXRVbmlkYWRlc1RyaWJ1dGFyaWFzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydhw7FvJywgJ25yb19kZWNyZXRvJywgJ2ZlY2hhX2RlY3JldG8nLCAnZW50cmFkYV92aWRlbmNpYScsICdwdWJsaWNhY2lvbl9nYWNldGEnLCAnbnJvX2dhY2V0YScsICd2YWxvcnV0J10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBVbmlkYWRlcyBUcmlidXRhcmlhcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiB1ZFRyaWJ1dGFyaWFzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyB1bmlkYWRlcyB0cmlidXRhcmlhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRVbmlkYWRlc1RyaWJ1dGFyaWFzKCk6IE9ic2VydmFibGU8TVVuaWRhZFRyaWJ1dGFyaWFbXT4ge1xyXG4gICAgICBjb25zdCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1VbmlkYWRUcmlidXRhcmlhW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3VuZHRyaWJ1dGFyaWFfZGFvLnBocGAsIHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnlbXSkgPT4gcmVzcC5tYXAoZWxlbWVudCA9PiBuZXcgTVVuaWRhZFRyaWJ1dGFyaWEoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW5hIG1vZGFsIGfDqW5lcmljYVxyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlbCBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29HZW5lcmljbyhcclxuICAgICAgY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLCBcclxuICAgICAgd2lkdGg6IHN0cmluZyA9ICc0NTBweCcsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBoYXNCYWNrZHJvcD86IGJvb2xlYW4sXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlPzogYm9vbGVhblxyXG4gICAgICB9ID0ge2Rpc2FibGVDbG9zZTogZmFsc2UsIGhhc0JhY2tkcm9wOiBmYWxzZX1cclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZSxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiBvcHRpb25zLmhhc0JhY2tkcm9wID8gb3B0aW9ucy5oYXNCYWNrZHJvcCA6IGZhbHNlLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZTogb3B0aW9ucy5kaXNhYmxlQ2xvc2UgPyBvcHRpb25zLmRpc2FibGVDbG9zZSA6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW5hIG1vZGFsIGfDqW5lcmljYSBjb24gMiBpbnB1dHNcclxuICAgICAqIEBwYXJhbSBjb2x1bW5zIENvbHVtbmFzIHF1ZSB2YSBhIHRlbmVyIGxhIHRhYmxhXHJcbiAgICAgKiBAcGFyYW0gdGl0bGUgVMOtdHVsbyBkZWwgZGlhbG9nXHJcbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBEYXRhIHF1ZSBzZSB2YSBhIG1vc3RyYXIgZW4gbGEgdGFibGFcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhdGFsb2dvRG9zSW5wdXRzKFxyXG4gICAgICBjb2x1bW5zOiBzdHJpbmdbXSxcclxuICAgICAgdGl0bGU6IHN0cmluZywgXHJcbiAgICAgIGRhdGFTb3VyY2U6IGFueVtdLCBcclxuICAgICAgZmlsdGVyRGF0YTogZmlsdGVyRGF0YVtdLFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLFxyXG4gICAgICB3aWR0aDogc3RyaW5nID0gXCI0NTBweFwiXHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0RvYmxlSW5wdXRDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXMsXHJcbiAgICAgICAgICBmaWx0ZXJEYXRhXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TUNvbXVuaWRhZD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ29tdW5pZGFkKCk6IFByb21pc2U8TUNvbXVuaWRhZD4ge1xyXG4gICAgICBsZXQgY29tdW5pZGFkZXM6IE1Db211bmlkYWRbXSA9IGF3YWl0IHRoaXMuZ2V0Q29tdW5pZGFkZXMoKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ3ByZWZpam8nLCAncGFpcycsICdlc3RhZG8nLCAnbXVuaWNpcGlvJywgJ3BhcnJvcXVpYScsICdjb2RpZ28nLCAnY29tdW5pZGFkJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBDb211bmlkYWRlcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBjb211bmlkYWRlc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29tdW5pZGFkW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tdW5pZGFkZXMoKTogT2JzZXJ2YWJsZTxNQ29tdW5pZGFkW10+IHtcclxuICAgICAgY29uc3QgcmVxdWVzdDogSVJlcXVlc3QgPSB7XHJcbiAgICAgICAgb3BlcmFjaW9uOiAnb2J0ZW5lckRhdGEnLFxyXG4gICAgICAgIHNpZ2VzcF9jb25leGlvbjoge1xyXG4gICAgICAgICAgc2Vydmlkb3I6IHRoaXMuVVJMLFxyXG4gICAgICAgICAgdXN1YXJpbzogdGhpcy51c3VhcmlvQWN0aXZvLmdldEludGVyZmFjZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNQ29tdW5pZGFkW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbXVuaWRhZGVzX2Rhby5waHBgLCByZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55W10pID0+IHJlc3AubWFwKGVsZW1lbnQgPT4gbmV3IE1Db211bmlkYWQoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIGRlIGxhcyBsYXMgbW9uZWRhc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1Nb25lZGE+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ01vbmVkYXMoKTogUHJvbWlzZTxNTW9uZWRhPiB7XHJcbiAgICAgIGxldCBjb2luczogTU1vbmVkYVtdID0gYXdhaXQgdGhpcy5nZXRNb25lZGFzKCd0b2RhcycpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY29kaWdvJywgJ2Rlbm9taW5hY2lvbicsICdjb2RpZ29Jc28nLCAnc2ltYm9sbyddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgTW9uZWRhcycsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lczogWydjw7NkaWdvJywgJ2Rlbm9taW5hY2nDs24nLCAnaXNvJywgJ3NpbWJvbG8nXSxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGNvaW5zXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIG1vbmVkYXNcclxuICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU1vbmVkYVtdPlxyXG4gICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICogYWN0dWFsaXphZG8gNC0xMi0yMDIyXHJcbiAgICogQHBhcmFtIHRpcG8gOnN0cmluZyB7J3RvZGFzJywndW5vJywnYWN0dWFsfVxyXG4gICAqIEBwYXJhbSBpZCA6IG51bWJlclxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqLyBcclxuICAgIFxyXG4gICAgXHJcbiAgICBwdWJsaWMgZ2V0TW9uZWRhcyh0aXBvOnN0cmluZyxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxNTW9uZWRhW10+IHsgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNTW9uZWRhW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL21vbmVkYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNTW9uZWRhKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBARGVzY3JpcHRpb246IE9idGllbmUgbGEgdGFzYSBkZSBjYW1iaW8gYXNvY2lhZGFzIGEgdW5vIG8gdmFyaWFzIG1vbmVkYXNcclxuICAgICAqIEBwYXJhbSB0aXBvIHN0cmluZ1xyXG4gICAgICogQHBhcmFtIGlkIGNvZGlnbyBtb25lZGFcclxuICAgICAqIEByZXR1cm5zIGFycmF5L251bGxcclxuICAgICAqIEB0aXBvOmFsbC0+dG9kYXMsIChtb25lZGEtPnVuYSBtb25lZGEgaWQtPmlkIGRlIG1vbmVkYSlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1cnJlbmN5RXhjaGFuZ2VSYXRlKHRpcG86ICdhbGwnfCAnbW9uZWRhJz0gbnVsbCwgaWQ/Om51bWJlcik6IE9ic2VydmFibGU8TUV4Y2hhbmdlUmF0ZVtdPiB7ICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUV4Y2hhbmdlUmF0ZVtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy90YXNhX2NhbWJpb19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXhjaGFuZ2VSYXRlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNY3VlbnRhSW5zdGl0dWNpb25hbD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc0luc3RpdHVjaW9uYWxlcygpOiBQcm9taXNlPE1DdWVudGFJbnN0aXR1Y2lvbmFsPiB7XHJcbiAgICAgIGxldCBhY2NvdW50czogTUN1ZW50YUluc3RpdHVjaW9uYWxbXSA9IGF3YWl0IHRoaXMuZ2V0Q3VlbnRhc0luc3RpdHVjaW9uYWxlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2lvbiddLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2nDs24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIHBsYW4gZGUgY3VlbnRhIGluc3RpdHVjaW9uYWwnLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNJbnN0aXR1Y2lvbmFsZXMoaW52ZW50b3J5PzogYm9vbGVhbik6IE9ic2VydmFibGU8TUN1ZW50YUluc3RpdHVjaW9uYWxbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jdWVudGFzX2Rhby5waHAkeyhpbnZlbnRvcnkpID8gJz9pbnZlbnRvcnk9dHJ1ZScgOiAnJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFJbnN0aXR1Y2lvbmFsKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY3VlbnRhcyBkZSBwcmVzdXB1ZXN0byAoUmVjdXJzb3MgeSBFZ3Jlc29zKVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc1ByZXN1cHVlc3RvKCk6IFByb21pc2U8TUN1ZW50YVByZXN1cHVlc3RvPiB7XHJcbiAgICAgIGxldCBhY2NvdW50czogTUN1ZW50YVByZXN1cHVlc3RvW10gPSBhd2FpdCB0aGlzLmdldEN1ZW50YXNQcmVzdXB1ZXN0bygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpw7NuJ10sXHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpb24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIEN1ZW50YXMgZGUgUHJlc3VwdWVzdG8nLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgZGUgcmVjdXJzb3MgeSBlZ3Jlc29zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YVByZXN1cHVlc3RvPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNQcmVzdXB1ZXN0bygpOiBPYnNlcnZhYmxlPE1DdWVudGFQcmVzdXB1ZXN0b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFQcmVzdXB1ZXN0bz4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvcGxhbl91bmljb19jdWVudGFzX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhUHJlc3VwdWVzdG8oZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgY8OhdGFsb2dvIGRlIGN1ZW50YXMgZGUgbGEgdGFibGEgXCJzY2dfcGxhbl91bmljb19yZVwiXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIGZpbHRybzogSW5kaWNhIGJham8gcXVlIHBhcmFtZXRyb3Mgc2UgdmEgYSBmaWx0cmFyIGVsIGNhdGFsb2dvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzUHJlc3VzcHVlc3RvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgZmlsdHJvOiBmaWx0cm9DdWVudGFzUHJlc3VwdWVzdG8gPSBudWxsLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gJzc1MHB4J1xyXG4gICAgKTogUHJvbWlzZTxNQ3VlbnRhUHJlc3VwdWVzdG8+IHtcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFQcmVzdXB1ZXN0b1tdID0gW107XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmdldEN1ZW50YXNQcmVzdXB1ZXN0bygpLnRvUHJvbWlzZSgpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIGN1ZW50YXMgPSByZXM7XHJcbiAgICAgICAgaWYgKGZpbHRybykge1xyXG4gICAgICAgICAgaWYgKGZpbHRyby5lc3RhZG8pIHtcclxuICAgICAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjLnN0YXR1cyA9PSBmaWx0cm8uZXN0YWRvXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlsdHJvLnRpcG8pIHtcclxuICAgICAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjLnRpcG8gPT0gZmlsdHJvLnRpcG9cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgZVsncHJvdlN0YXR1cyddID0gZS5zdGF0dXMgPT0gXCJDXCIgPyBcIk1vdmltaWVudG9zXCIgOiBcIlRvdGFsaXphZG9yYVwiXHJcbiAgICAgICAgICBlWydwcm92VHlwZSddID0gZS5zdGF0dXMgPT0gXCJSXCIgPyBcIlJlY3Vyc29zXCIgOiBcIkluZ3Jlc29zXCJcclxuICAgICAgICAgIHJldHVybiBlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIixcInByb3ZUeXBlXCJdLFxyXG4gICAgICAgIHRpdHVsbyxcclxuICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgIFtcIkN1ZW50YVwiLFwiRGVub21pbmFjacOzblwiLFwiRXN0YWRvXCIsXCJUaXBvXCJdLFxyXG4gICAgICAgIGFuY2hvXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGPDoXRhbG9nbyBkZSBjdWVudGFzIGRlIGxhIHRhYmxhIFwic3BnX2N1ZW50YXNcIlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxNQ3VlbnRhRWdyZXNvcz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIHByZXN1cHVlc3RvOiBJbmRpY2Egc2kgc2UgYSB0cmFiYWphciBjb24gZXN0cnVjdHVyYSBkZSBwcmVzdXB1ZXN0byBvIG5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzRWdyZXNvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgcHJlc3VwdWVzdG86IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gXCI3NTBweFwiXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFFZ3Jlc29zPntcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRFeHBlbnNlQWNjb3VudHMoKS50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgY3VlbnRhcyA9IHJlc1xyXG4gICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihlID0+IHtcclxuICAgICAgICAgIHJldHVybiBlLnN0YXR1cyA9PSBcIkNcIlxyXG4gICAgICAgIH0pLm1hcChlID0+IHtcclxuICAgICAgICAgIGVbJ3Byb3ZTdGF0dXMnXSA9IGUuc3RhdHVzID09IFwiQ1wiID8gXCJNb3ZpbWllbnRvc1wiIDogXCJUb3RhbGl6YWRvcmFcIlxyXG4gICAgICAgICAgcmV0dXJuIGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgaWYgKHByZXN1cHVlc3RvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvRG9zSW5wdXRzKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcImVzdHJ1Y3R1cmFcIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgICAgW3tcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiQ3VlbnRhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImN1ZW50YVwiXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkVzdHJ1Y3R1cmFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiZXN0cnVjdHVyYVwiXHJcbiAgICAgICAgICB9XSxcclxuICAgICAgICAgIFtcIkN1ZW50YVwiLCBcIkRlbm9taW5hY2nDs25cIiwgXCJFc3RydWN0dXJhXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkQWNjb3VudHM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgICBjdWVudGFzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlcmVkQWNjb3VudHMuZmluZChlID0+IGUuY3VlbnRhID09IGMuY3VlbnRhKSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLnB1c2goYylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjw6F0YWxvZ28gZGUgY3VlbnRhcyBkZSBsYSB0YWJsYSBcInNwaV9jdWVudGFzXCJcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8TUN1ZW50YUluZ3Jlc29zPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBwYXJhbXMgcHJlc3VwdWVzdG86IEluZGljYSBzaSBzZSBhIHRyYWJhamFyIGNvbiBlc3RydWN0dXJhIGRlIHByZXN1cHVlc3RvIG8gbm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0N1ZW50YXNJbmdyZXNvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgcHJlc3VwdWVzdG86IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gXCI3NTBweFwiXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFJbmdyZXNvcz57XHJcbiAgICAgIGxldCBjdWVudGFzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEluY29tZUFjY291bnRzKCkudG9Qcm9taXNlKCkudGhlbigocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBjdWVudGFzID0gcmVzLmRhdGFcclxuICAgICAgICBjdWVudGFzID0gY3VlbnRhcy5maWx0ZXIoZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZS5lc3RhZG8gPT0gXCJDXCJcclxuICAgICAgICB9KS5tYXAoZSA9PiB7XHJcbiAgICAgICAgICBlWydwcm92U3RhdHVzJ10gPSBlLmVzdGFkbyA9PSBcIkNcIiA/IFwiTW92aW1pZW50b3NcIiA6IFwiVG90YWxpemFkb3JhXCJcclxuICAgICAgICAgIHJldHVybiBlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChwcmVzdXB1ZXN0bykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0Rvc0lucHV0cyhcclxuICAgICAgICAgIFtcImN1ZW50YVwiLFwiZGVub21pbmFjaW9uXCIsXCJlc3RydWN0dXJhXCIsXCJwcm92U3RhdHVzXCJdLFxyXG4gICAgICAgICAgdGl0dWxvLFxyXG4gICAgICAgICAgY3VlbnRhcyxcclxuICAgICAgICAgIFt7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkN1ZW50YVwiLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogXCJjdWVudGFcIlxyXG4gICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJFc3RydWN0dXJhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImVzdHJ1Y3R1cmFcIlxyXG4gICAgICAgICAgfV0sXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0cnVjdHVyYVwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZEFjY291bnRzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICAgIGN1ZW50YXMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgIGlmICghZmlsdGVyZWRBY2NvdW50cy5maW5kKGUgPT4gZS5jdWVudGEgPT0gYy5jdWVudGEpKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMucHVzaChjKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMsXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0gICAgXHJcblxyXG4gICAgcHVibGljIGdldFVuaWRhZEFkbWluaXN0cmF0aXZhKCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3BnL3VuaWRhZF9hZG1pbmlzdHJhdGl2YV9kYW8ucGhwYCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1BZG1pbmlzdHJhdGl2ZVVuaXQoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KSBcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjYXJnb3MgZGUgc2VydmljaW9zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZpY2VDaGFyZ2VzKHNlcnZpY2VJZDpudW1iZXIgPSBudWxsKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NvYy9zZXJ2aWNpb19jYXJnb19kYW8ucGhwJHtcclxuICAgICAgICBzZXJ2aWNlSWQgPyBgP3NlcnZpY2VfaWQ9JHtzZXJ2aWNlSWR9YCA6ICcnXHJcbiAgICAgIH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2VydmljZUNoYXJnZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwYWlzZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ291bnRyeT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAbW9kaWZpZWQgMTAtMDEtMjAyMlxyXG4gICAgICogQHBhcmFtIGNvZGlnbzogQ29kaWdvIGRlbCBwYWlzXHJcblxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRDb3VudHJpZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db3VudHJ5W10+IHtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ291bnRyeT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvcGFpc2VzX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvdW50cnkoZSkpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBlc3RhZG9zXHJcbiAgICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU3RhdGU+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDQtMTItMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gY29kaWdvOiBDb2RpZ28gZGVsIHBhaXNcclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRTdGF0ZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1TdGF0ZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVN0YXRlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lc3RhZG9zX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVN0YXRlKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgbXVuaWNpcGlvc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU11bmljaXBhbGl0eT5cclxuICAgICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAgICogQG1vZGlmaWNhZG8gMTAtMDEtMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gcGFpczogQ29kaWdvIGRlbCBwYWlzICxcclxuICAgICAgICogQHBhcmFtIGVzdGFkbzogQ29kaWdvIGRlbCBlc3RhZG9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG4gICAgICAgKi9cclxuICAgICAgcHVibGljIGdldE11bmljaXBhbGl0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TU11bmljaXBhbGl0eVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TU11bmljaXBhbGl0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvbXVuaWNpcGlvc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNTXVuaWNpcGFsaXR5KGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgcGFycm9xdWlhcyBcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG4gICAgICAgKiBAcGFyYW0gbXVuaWNpcGlvOmNvZGlnbyBNdW5pY2lwaW9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG5cclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRQYXJpc2hlcyhwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcsbXVuaWNpcGlvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1QYXJpc2hbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1QYXJpc2g+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3BhcnJvcXVpYXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGFyaXNoKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2l1ZGFkZXNcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG5cclxuXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRDaXR5KHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TUNpdHlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DaXR5PihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jaXVkYWRlc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2l0eShlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjaXVkYWRlc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVBhcmlzaD5cclxuICAgICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG5cclxuICAgICAgICovXHJcbiAgICAgICAgcHVibGljIGdldENvbW11bml0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZywgbXVuaWNpcGlvPzpzdHJpbmcscGFycm9xdWlhPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db21tdW5pdHlbXT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbW11bml0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY29tdW5pZGFkZXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99JnBhcnJvcXVpYT0ke3BhcnJvcXVpYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbW11bml0eShlKSkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHNpc3RlbWFzIGFjdGl2YXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU2lzdGVtYT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaXN0ZW1hcygpOiBPYnNlcnZhYmxlPE1TaXN0ZW1hW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVNpc3RlbWE+KGAke3RoaXMuVVJMfS9kYW8vc3NzL3Npc3RlbWFzX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2lzdGVtYShlKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBtb25lZGEgYWN0dWFsXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBhY3R1YWxpemFkbzogNC0xMi0yMDIyMlxyXG4gICAgICogQHBhcmFtcyBpZDogaWQgZGUgbGEgbW9uZWRhLFxyXG4gICAgICogQHBhcmFtcyB0aXBvOiB0b2Rhcy0+b2J0aWVuZSB0b2RhcyBsYXMgbW9uZWRhLCAodW5vLT4gb2J0aWVuZSB1bmEgbW9uZWRhICsgaWQpXHJcbiAgICAgKiAobW9uOmZvcm1hdG8gcGFyYSBpbnB1dEN1cnJlbmN5ICsgaWQgKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudEN1cnJlbmN5KHRpcG86J3RvZGFzJ3wndW5vJ3wnbW9uJz1udWxsLGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL21vbmVkYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Nb25lZGFDb25maWcocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGxpbmVhIGVtcHJlc2FcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBhY3R1YWxpemFkbzogNS0xMi0yMDIyMlxyXG4gICAgICovXHJcbiAgICAgICAgIHB1YmxpYyBnZXRFbnRlcnByaXNlKHRpcG86J3VzdWFyaW8nIHwncHJvY2Vzbyd8J2RlZmF1bHQnPW51bGwgLGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lbnRlcnByaXNlX2Rhby5waHA/YCxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUVudGVycHJpc2UoZSkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBvcmdhbml6YWNpb25cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T3JnYW5pemF0aW9uVHlwZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy90aXBvX29yZ2FuaXphY2lvbl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTU9yZ2FuaXphdGlvblR5cGUoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIG9yZ2FuaXphY2lvblxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTcGVjaWFsdGllcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL2VzcGVjaWFsaWRhZF9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNwZWNpYWx0eShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgZG9jdW1lbnRvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXREb2N1bWVudHMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9kb2N1bWVudG9fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Eb2N1bWVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2xhc2lmaWNhY2lvbmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENsYXNpZmljYXRpb25zKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvY2xhc2lmaWNhY2lvbl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNsYXNpZmljYXRpb24oZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgcHJlZmlqbyBkZSBsb3MgdXN1YXJpb3NcclxuICAgICAqIEBwYXJhbSBwcm9jZWRlIERlIHF1ZSBtw7NkdWxvIHByb2NlZGVcclxuICAgICAqIEBwYXJhbSBjb2RzaXMgQ8OzZGlnbyBkZWwgc2lzdGVtYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Vc3VhcmlvUHJlZmlqb1tdPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFVzZXJQcmVmaXgoZmlsdGVyOiAnZGV0YWlsJyA9IG51bGwsIGNvZGU6IHN0cmluZyA9IG51bGwpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbnRyb2xfbnVtZXJvX2Rhby5waHAke1xyXG4gICAgICAgIGZpbHRlciA/IGA/ZmlsdGVyPSR7ZmlsdGVyfSZjb2RlPSR7Y29kZX1gIDogJydcclxuICAgICAgfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Vc3VhcmlvUHJlZmlqbyhlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHBlZmlqb1xyXG4gICAgICogQHBhcmFtIHByb2NlZGUgRGUgcXVlIG3Ds2R1bG8gcHJvY2VkZVxyXG4gICAgICogQHBhcmFtIGNvZHNpcyBDw7NkaWdvIGRlbCBzaXN0ZW1hXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVVzdWFyaW9QcmVmaWpvW10+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseUNyZXNwbyAxNy0xMi0yMDIyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQcmVmaXgoZmlsdGVyOiAnYWxsJyB8ICdvbmUnID0gbnVsbCwgY29kZTogc3RyaW5nID0gbnVsbCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbnRyb2xfbnVtZXJvX2Rhby5waHAke1xyXG4gICAgICAgIGZpbHRlciA/IGA/ZmlsdGVyPSR7ZmlsdGVyfSZjb2RlPSR7Y29kZX1gIDogJydcclxuICAgICAgfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QcmVmaWpvKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBwYXJhIGJ1c2NhciBsb3MgcHJvdmVlZG9yZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNUHJvdmVlZG9yPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dQcm92ZWVkb3JlcygpOiBQcm9taXNlPE1Qcm92ZWVkb3I+IHtcclxuICAgICAgbGV0IHByb3ZlZWRvcmVzOiBNUHJvdmVlZG9yW10gPSBhd2FpdCB0aGlzLmdldFByb3ZlZWRvcmVzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWyd0aXBvJywgJ3JpZicsICdub21icmUnXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIFByb3ZlZWRvcmVzIHkgQmVuZWZpY2lhcmlvcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBwcm92ZWVkb3Jlc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVByb3ZlZWRvcltdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFByb3ZlZWRvcmVzKCk6IE9ic2VydmFibGU8TVByb3ZlZWRvcltdPiB7XHJcbiAgICAgIGxldCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1Qcm92ZWVkb3JbXT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2JlbmVmaWNpYXJpb19kYW8ucGhwYCwgcmVxdWVzdCkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMubWFwKGVsZW1lbnQgPT4gbmV3IE1Qcm92ZWVkb3IoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzIHkgYmVuZWZpY2lhcmlvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQcm92aWRlcnNBbmRCZW5lZmljaWFyaWVzKHR5cGU6IHN0cmluZyA9IG51bGwpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3Byb3ZlZWRvcl9iZW5lZmljaWFyaW9fZGFvLnBocCR7dHlwZSA/IGA/cHJvdmlkZXJfdHlwZT0ke3R5cGV9YCAgOiAnJ31gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVByb3ZpZGVyQmVuZWZpY2lhcnkoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHVuIFVzdWFyaW8gc2VndW4gc3UgSURcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VXNlckJ5SWQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zc3MvdXN1YXJpb19kYW8ucGhwP2lkPSR7aWR9YCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Vc3VhcmlvKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBiYW5jb3NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QmFua3MoaWRFbnRlcnByaXNlPzpudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NiL2JhbmNvX2Rhby5waHA/ZT0ke2lkRW50ZXJwcmlzZX1gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUJhbmsoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGN1ZW50YSBiYW5jYXJpYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QmFua0FjY291bnRUeXBlcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NiL2JhbmNvX3RpcG9fY3VlbnRhX2Rhby5waHBgLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUJhbmtBY2NvdW50VHlwZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIG9idGllbmUgbGFzIGN1ZW50YSBzZWd1biBlbCBpZFxyXG4gICAgICogQHBhcmFtIHRpcG8geydiYW5jbycsICdkZWZhdWx0J31cclxuICAgICAqIEBwYXJhbSBpZCBwYXJhIGxhIG9wY2lvbiBiYW5jbyB1c2FyIGlkPWlkQmFuY28sIG9wY2lvbiBkZWZhdWxmIGlkPWlkRW50ZXJwcmlzZVxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBbGxCYW5rQWNjb3VudCh0aXBvOnN0cmluZyxpZDpudW1iZXIpeyAgICAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc2NiL2N1ZW50YV9iYW5jb19kYW8ucGhwP3RpcG89JHt0aXBvfSZlPSR7aWR9YCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFCYW5jbyhlbGVtZW50KSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICAgIH0pIFxyXG4gICAgICApXHJcbiAgICB9IFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGJhbmNvcyBzaWdlY29mXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNpZ2Vjb2ZCYW5rcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2lnZXNwL2JhbmNvX3NpZ2Vjb2ZfZGFvLnBocGAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2lnZWNvZkJhbmsoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgY29uZmlndXJhY2lvbiBkZSBTT0NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlnU09DKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zb2MvY29uZmlndXJhY2lvbl9kYW8ucGhwYCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Db25maWdTT0MocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRlZHVjY2lvblxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXREZWR1Y3Rpb25UeXBlcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3RiL3RpcG9fZGVkdWNjaW9uX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRGVkdWN0aW9uVHlwZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEluY29tZUFjY291bnRzKG9ubHlBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8YW55PntcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zcGkvY3VlbnRhc19pbmdyZXNvc19kYW8ucGhwJHtcclxuICAgICAgICBvbmx5QXZhaWxhYmxlID8gJz9hdmFpbGFibGU9dHJ1ZScgOiAnJ1xyXG4gICAgICB9YCwge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6YW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUN1ZW50YUluZ3Jlc29zKGUpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoYXJnZXMoKXtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zdGIvY2FyZ29zX2Rhby5waHBgLCBcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNhcmdvKGUpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERlZHVjdGlvbnMoKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3N0Yi9kZWR1Y2Npb25lc19kYW8ucGhwYCwgXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1EZWR1Y3Rpb24oZSkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICkgIFxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGxvcyBkYXRvcyBkZSBFbXByZXNhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRDb21wYW55KHRpcG8/OnN0cmluZyxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lbXByZXNhc19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1FbXByZXNhKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gQ1hQXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAZGF0ZSAyMC0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgICAgcHVibGljIGdldFRpcG9zRG9jdW1ldG9zKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2N4cC90aXBvX2RvY3VtZW50b19kYW8ucGhwP29wZXJhY2lvbj0keydidXNjYXInfSZleGlzdGVuPSR7J2V4aXN0ZW4nfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVRpcG9Eb2N1bWVudG9DWFAoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAgKiBAcGFyYW0gZ2V0IHRvbWEgbG9zIHZhbG9yZXM6IFsgaWRPcmRlbkNvbXByYSAsJ3JlY2VwY2lvbicsJ2V4aXN0ZW4nLCdjb2RpZ28nLCAnb3JkZW5lc1NPQycsICdvcCcsICdhcnQnIF1cclxuICAgICAgKiBAcGFyYW0gbiBjb2RpZ28gRG9jdW1lbnRvIE9yZGVuLCBzZSB1c2EgcGFyYSBvYnRlbmVyIGxvcyBkZXRhbGxlcyBkZSBsYSBvcmRlbiBkZSBjb21wcmEsIGVzIG9ibGlnYXRvcmlvIGFsIGNvbWJpbmFyIGNvbiBsYSBvcGNpb24gZ2V0OiBpZE9yZGVuQ29tcHJhXHJcbiAgICAgICogQGRlc2NyaXB0aW9uICdyZWNlcGNpb24nOiBPYnRpbmUgbGFzIG9yZGVuZXMgZGUgc3VtaW5pc3RybyxcclxuICAgICAgKiBleGlzdGUgeSBjb2RpZ286IE9idGllbmUgbG9zIGNvZGlnb3MgcmVnaXN0cmFkb3MsIFxyXG4gICAgICAqIG9yZGVuZXNTT0M6IG9idGllbmUgbGFzIG9yZGVuZXMgZGUgY29tcHJhLFxyXG4gICAgICAqIG9wOiBvYnRpZW5lIGxhcyBvcmRlbmVzIHBlbmRpZW50ZXNcclxuICAgICAgKiBhcnQ6IG9idGllbmUgbG9zIGFydGljdWxvcyBcclxuICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICAqIEBkYXRlIDMtMTAtMjAyMVxyXG4gICAgICAqIEByZXR1cm5zIFxyXG4gICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldEVudHJhZGFTdW1pbmlzdHJvcyhnZXQ6YW55LCBuPzpzdHJpbmcpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zaXYvZW50cmFkYV9zdW1pbmlzdHJvX2Rhby5waHA/Z2V0PSR7Z2V0fSZuPSR7bn1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRW50cmFkYVN1bWluaXN0cm9zKGUpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkb2N1bWVudG9zIHJlZ2lzdHJhZG9zIGVuIENYUFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogQGRhdGUgMjAtMDctMjAyMVxyXG4gICAgICovXHJcblxyXG4gICAgICBwdWJsaWMgZ2V0Q29uY2VwdG9zQ3hQKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2N4cC9jb25jZXB0b19kYW8ucGhwP29wZXJhY2lvbj0keydidXNjYXInfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmNlcHRvc0NYUChlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGxvcyBjb25jZXB0b3MgUmV0ZW5jaW9uIElTUkxcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBkYXRlIDI2LTA3LTIwMjFcclxuICAgICAqL1xyXG5cclxuICAgICAgICBwdWJsaWMgZ2V0Q29uY2VwdG9zUmV0ZW5jaW9uKCl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3RiL2RlZHVjY2lvbmVzX2Rhby5waHA/Y29kZT0keydjb25jZXB0b3MnfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmNlcHRvUmV0ZW5jaW9uKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIFJSSEggeSBkZSBTTk9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgb2J0ZW5lckNvbmZpZ3VyYWNpb25TTk8oKXtcclxuICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9jb25maWd1cmFjaW9uX2Rhby5waHA/dGlwbz0keydjb25maWd1cmFjaW9uJ31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ29uZmlndXJhY2lvblNOTyhlKSk7ICBcclxuICAgICAgICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgICBcclxuICAgICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAgKiBcclxuICAgICAgKiBAcGFyYW0gdGlwbyBbJ2RlZmF1bHQnLCAndW5vJywgJ2NhcmdvcyddIGRhZmF1bHQ6VG9kYXMgbGFzIG5vbWluYXMsIHVubzogdW5hIG5vbWluYSwgJ2Nhcmdvcyc6IG5vbWluYXMgcG9yIGNhcmdvc1xyXG4gICAgICAqIEBwYXJhbSBpZCA6aWQgZGUgbGEgbm9taW5hLiBDYW1wbyByZXF1ZXJpZG8gcGFyYSB1bm8geSBjYXJnb3NcclxuICAgICAgKiBAcmV0dXJucyBhcnJheSgpICAgICAgXHJcbiAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIG5vbWluYXMgcmVnaXN0cmFkYXNcclxuICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICAqIEBkYXRlIDIwLTEwLTIxXHJcbiAgICAgICpcclxuICAgICAqLyAgICAgXHJcblxyXG4gICAgICAgcHVibGljIGdldE5vbWluYSh0aXBvOnN0cmluZyxpZD86bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2RlZmluaWNpb25fbm9taW5hX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRGVmaW5pY2lvbk5vbWluYShlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAvKipcclxuICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGNhcmdvcyBkZSBsYXMgbm9taW5hXHJcbiAgICAqIEBwYXJhbSB0aXBvIFsnY29kaWdvJywnZGVmYXVsdCddIC0+Y29kaWdvOiBvYnRpZW5lIGVsIHByb3hpbW8gY29kaWdvLiAtPmRlZmF1bHQ6IG9idGllbmUgdG9kb3MgbG9zIGNhcmdvcyBkZSBsYSBub21pbmFcclxuICAgICogQHBhcmFtIGlkIGlkIGRlIGxhIG5vbWluYVxyXG4gICAgKiBAcmV0dXJucyBhcnJheSgpXHJcbiAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0Q2FyZ29zTm9taW5hKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vYXNpZ25hY2lvbl9jYXJnb3NfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Bc2lnbmFjaW9uQ2FyZ28oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSAgXHJcbiAgICAgIFxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHVuIHBlcnNvbmFsIGRlIGxhIG7Ds21pbmFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFBlcnNvbmFsU1JIKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vcGVyc29uYWxfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QZXJzb25hbChlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9IFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgYWdlbmNpYSBkZSBiYW5jb1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0QWdlbmNpYUJhbmNvKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2IvYWdlbmNpYV9kYW8ucGhwP2NvZGU9JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUFnZW5jaWFCYW5jbyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9IFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgaG9qYXMgZGUgdGllbXBvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgICAgICAgICBwdWJsaWMgZ2V0SG9qYVRpZW1wbyh0aXBvOnN0cmluZyxpZFBlcnNvbmFsPzpudW1iZXIsaWROb21pbmE/Om51bWJlcil7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vaG9qYV90aWVtcG9fZGFvLnBocD9pZFBlcnNvbmFsPSR7aWRQZXJzb25hbH0maWROb21pbmE9JHtpZE5vbWluYX1gLFxyXG4gICAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Ib2phVGllbXBvKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBcclxuICAgICAgXHJcblxyXG4gICAgXHJcbiAgXHJcblxyXG5cclxuICAgIHB1YmxpYyB1c2VySGFzUmlnaHRzKGNvbHVtbjonYWRtaW5pc3RyYWRvcicgfCAnaW5zZXJ0YXInIHwgJ2FjdHVhbGl6YXInIHwgJ2NvbnN1bHRhcicgXHJcbiAgICB8ICdlbGltaW5hcicgfCAnYW51bGFyJyB8J2Rlc2NhcmdhcicgfCAnZWplY3V0YXJfX3Byb2Nlc2FyXycgfCAnaW1wcmltaXInIFxyXG4gICAgfCAnZW52aWFyX19jb3JyZW9fJyB8ICd2aXNpYmxlJyl7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3NzL2RlcmVjaG9zX3VzdWFyaW9fZGFvLnBocD9pZENvbXBvbmVudD0ke1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29tcG9uZW50LmlkXHJcbiAgICAgICAgfSZjb2x1bW49JHtjb2x1bW59YCwgXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApXHJcblxyXG4gICAgfVxyXG5cclxuICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0b3JuYSBsb3MgaGVhZGVycyBwYXJhIGhhY2VyIGxhcyBwZXRpY2lvbmVzXHJcbiAgICAgKiBAcGFyYW1zIHR5cGU6IFRpcG8gTUlNRSBwZXJtaXRpZG8gcG9yIGRlZmVjdG8gc2UgdG9tYSBhcHBsaWNhdGlvbi9qc29uXHJcbiAgICAgKiBAcmV0dXJuIEh0dHBIZWFkZXJzXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQGRhdGUtdXBkYXRlOiAxNS0wNi0yMDIyIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SHR0cEhlYWRlcnModHlwZT86c3RyaW5nKTogSHR0cEhlYWRlcnMgeyBcclxuICAgICAgIXR5cGU/IHR5cGU9J2FwcGxpY2F0aW9uL2pzb24nOicnOyAgICAgIFxyXG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogdHlwZSxcclxuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGAke3RoaXMudXN1YXJpb0FjdGl2by50b2tlbn1gXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gaGVhZGVycztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIHNlcnZpZG9yIGd1YXJkYWRvIGVuIGVsIHNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIHN0cmluZ1xyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZlcigpOiBzdHJpbmcge1xyXG4gICAgICByZXR1cm4gdGhpcy5VUkw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCB1c3VhcmlvIGd1YXJkYWRvIGVuIGVsIHNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIE1Vc3VhcmlvXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VXNlcigpIHtcclxuICAgICAgbGV0IGNvbmV4aW9uOiBJQ29uZXhpb24gPSBhd2FpdCAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSA/IEpTT04ucGFyc2UoYXRvYihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpKSA6IG51bGw7XHJcbiAgICAgIC8vY29uc29sZS5sb2coY29uZXhpb24pXHJcbiAgICAgIC8vIGRlYnVnZ2VyXHJcbiAgICAgIGlmIChjb25leGlvbikge1xyXG4gICAgICAgIHRoaXMudXN1YXJpb0FjdGl2byA9IG5ldyBNVXN1YXJpbyhjb25leGlvbi51c3VhcmlvKTtcclxuICAgICAgICB0aGlzLlVSTCA9IGNvbmV4aW9uLnNlcnZpZG9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gdG9hc3QgZGUgc3VjY2Vzc1xyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RTdWNjZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biB0b2FzdCBkZSBlcnJvclxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgdGhpcy50b2FzdC5lcnJvcihtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gc3dlZXRhbGVydDIgZGUgw6l4aXRvXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGRhdGUgMjItMTEtMjAyMVxyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgc2hvd1RvYXN0U3VjY2Vzc1N3YWwobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICAgIGljb246ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHRpdGxlOiAnw4l4aXRvJyxcclxuICAgICAgICAgIHRleHQ6IG1lc3NhZ2UsICBcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biBzd2VldGFsZXJ0MiBkZSBlcnJvclxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBkYXRlIDIyLTExLTIwMjFcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dUb2FzdEVycm9yU3dhbChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICBpY29uOiAnZXJyb3InLFxyXG4gICAgICAgIHRpdGxlOiAnwqFFcnJvciEnLFxyXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UsICBcclxuICAgICAgICAgICAgIFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEd1YXJkYSBlbCB1c3VhcmlvIGxvZ3VlYWRvIGVuIGVsIFNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcGFyYW0gdXNlciBVc3VhcmlvIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZW4gZWwgU2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNhdmVVc2VyKGRhdGE6IElDb25leGlvbik6IHZvaWQge1xyXG4gICAgICB0aGlzLnVzdWFyaW9BY3Rpdm8gPSBuZXcgTVVzdWFyaW8oZGF0YS51c3VhcmlvKTtcclxuICAgICAgdGhpcy5VUkwgPSBkYXRhLnNlcnZpZG9yO1xyXG4gICAgICBsZXQgZW5jcnlwdGVkVXNlcjogc3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3VzZXInLCBlbmNyeXB0ZWRVc2VyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXRlIGEgbGEgdXJsIGEgbGEgY3VhbCBzZSBsZSB2YW4gYSByZWFsaXphciBwZXRpY2lvbmVzIGFsIGJhY2tFbmRcclxuICAgICAqIEBwYXJhbSB1cmwgVVJsIGRvbmRlIHNlIHZhbiBhIHJlYWxpemFyIGxhcyBwZXRpY2lvbmVzXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgdGhpcy5VUkwgPSB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBkZSBzaWdlc3BcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGluaXQoKTogdm9pZCB7XHJcbiAgICAgIC8vIFZlcmlmaWNhbW9zIHNpIGhheSB1biB1c3VhcmlvIGVuIGxhIHNlc3Npb25TdG9yYWdlLCBlc3RvIGVzIG5lY2VzYXJpbyBwYXJhIHJlY2FyZ2FyIGxhIHDDoWdpbmFcclxuICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSlcclxuICAgICAgICB0aGlzLmdldFVzZXIoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFZlcmlmaWNhIHNpIHVuIHVzdWFyaW8gZXN0w6EgbG9ndWVhZG9cclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxib29sZWFuPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGlzTG9nZ2VkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpIHtcclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVyRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogYW55IHtcclxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ09jdXJyacOzIHVuIGVycm9yJylcclxuICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIG9idGllbmUgZWwgcGVyc29uYWwgc2VndW4gZmlsdHJvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGRhdGUgMTUtMTEtMjAyMVxyXG4gICAgICogQHBhcmFtIHRpcG86IHZhbG9yZXMgWydjYXRhbG9nbycsJ2RlZmF1bHQnLCdub21pbmEnXVxyXG4gICAgICogQHBhcmFtcyBkYXRvOm9iamVjdCB7bm9tYnJlOnN0cmluZywgYXBlbGxpZG86c3RyaW5nLCBjZWR1bGEuc3RyaW5nfSB1c2UgcGFyYSBsYSBvcGNpb24gJ2NhdGFsb2dvJ1xyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0UGVyc29uYWwodGlwbzpzdHJpbmcsIGRhdG8/OmFueSl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9wZXJzb25hbF9kYW8ucGhwP1xyXG4gICAgICAgIHRpcG89JHt0aXBvfSZjZWR1bGE9JHtkYXRvLmNlZHVsYX0mbm9tYnJlPSR7ZGF0by5ub21icmV9JmFwZWxsaWRvPSR7ZGF0by5hcGVsbGlkb30mZXhwZWRpZW50ZT0ke2RhdG8uZXhwZWRpZW50ZX0maWRUaXBvPSR7ZGF0by50aXBvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBlcnNvbmFsKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBvYnRlbmVyIHBlcnNvbmFsIE5vbWluYSBzZWd1biBmaWx0cm9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAZGF0ZSAxNS0xMS0yMDIxXHJcbiAgICAgKiAqIEBwYXJhbSB0aXBvOiB2YWxvcmVzIFsnY2F0YWxvZ28nLCdkZWZhdWx0Jywnbm9taW5hJ11cclxuICAgICAqIEBwYXJhbXMgZGF0bzpvYmplY3Qge25vbWJyZTpzdHJpbmcsIGFwZWxsaWRvOnN0cmluZywgY2VkdWxhLnN0cmluZ30gdXNlIHBhcmEgbGEgb3BjaW9uICdjYXRhbG9nbydcclxuXHJcbiAgICAgKi9cclxuICAgICAgICBwdWJsaWMgZ2V0UGVyc29uYWxOb21pbmEodGlwbzpzdHJpbmcsZGF0bz86YW55KXtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vYXNpZ25hY2lvbl9wZXJzb25hbF9ub21pbmFfZGFvLnBocD9cclxuICAgICAgICAgIHRpcG89JHt0aXBvfSZjZWR1bGE9JHtkYXRvLmNlZHVsYX0mbm9tYnJlPSR7ZGF0by5ub21icmV9JmFwZWxsaWRvPSR7ZGF0by5hcGVsbGlkb30mZXhwZWRpZW50ZT0ke2RhdG8uZXhwZWRpZW50ZX0maWRUaXBvPSR7ZGF0by5pZFRpcG99JmlkTm9taW5hPSR7ZGF0by5pZE5vbWluYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QZXJzb25hbE5vbWluYShlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIGlkUGVyc29uYWw6IGlkIGRlbCBwZXJzb25hbFxyXG4gICAqIEBwYXJhbSB0aXBvOiB2YWxvcmVzWydub21pbmFfcGVyc29uYWwnXSBcclxuICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgbm9taW5hcyBkZWwgcGVyc29uYWwgcmVzdW1pZGFcclxuICAgKiBAZGVwcmVjYXRlZDsgMjAtMDEtMjJcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBcclxuICBwdWJsaWMgZ2V0UGVyc29uYWxOb21pbmFSZXN1bWlkYShpZFBlcnNvbmFsOm51bWJlcix0aXBvOnN0cmluZyl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vcGVyc29uYWxfZGFvLnBocD9pZFBlcnNvbmFsPSR7aWRQZXJzb25hbH0mdGlwbz0ke3RpcG99YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNTm9taW5hU2ltcGxlKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICBcclxuICAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBKc29uIE1lbnUgcGFyYSBlbCB1c3VhcmlvIGRlZmluaWRvIHNlZ3VuIHN1IHBlcm1pc29sb2dpYSBkZWwgU2lzdGVtYVxyXG4gICAgICAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICAgICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlbm9cclxuICAgICAgICovXHJcbiAgICAgICAgICBwdWJsaWMgZ2V0UGVyZmlsTm9Db21wb25lbnQoaWRfdXN1YXJpbzpudW1iZXIsc2lzdGVtYTpzdHJpbmcsIG5hbWVDb21wb25lbnQ6IHN0cmluZyApe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLlVSTH0vZGFvL3Nzcy9kZXJlY2hvc191c3VhcmlvX2Rhby5waHA/aWRfdXN1YXJpbz0ke2lkX3VzdWFyaW99JnNpc3RlbWE9JHtzaXN0ZW1hfSZuYW1lY29tcG9uZW50PSR7bmFtZUNvbXBvbmVudH1gLFxyXG4gICAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKCAgICAgICAgICBcclxuICAgICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICBcclxuICAgICAgIH1cclxuICBcclxuICAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBKc29uIE1lbnUgcGFyYSBlbCB1c3VhcmlvIGRlZmluaWRvIHNlZ3VuIHN1IHBlcm1pc29sb2dpYSBkZWwgU2lzdGVtYVxyXG4gICAgICAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICAgICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlbm9cclxuICAgICAgICovXHJcbiAgICAgICAgcHVibGljIGdldEpzb25NZW51KGlkX3VzdWFyaW86bnVtYmVyLHNpc3RlbWE6c3RyaW5nKXtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3NzL21lbnVfZGFvLnBocD9pZF91c3VhcmlvPSR7aWRfdXN1YXJpb30mc2lzdGVtYT0ke3Npc3RlbWF9YCxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgICAgIFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7IFxyXG4gICAgICAgICAgICAgICB0aGlzLnVzZXJNZW51ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJNZW51O1xyXG4gICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgLyoqXHJcbiAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSnNvbiBNZW51IHBhcmEgZWwgdXN1YXJpbyBkZWZpbmlkbyBzZWd1biBzdSBwZXJtaXNvbG9naWEgZGVsIFNpc3RlbWFcclxuICAgICAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgICAqL1xyXG4gICAgICBwdWJsaWMgbG9nKGJvZHk6IE1Mb2cgKXsgIFxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5VUkx9L2Rhby9zc3MvbG9nX2Rhby5waHBgLCBib2R5ICwge1xyXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICAgIH0pLnBpcGUoICBcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHsgIFxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgXHJcbiAgICAgICAgXHJcbiAgIC8qKlxyXG4gICAgKiBAbmFtZSBFbmNyeXB0RGF0YVxyXG4gICAgKiBAZGVzY3JpcHRpb24gRW5zY3JpcHRhIHVuYSBleHByZXNpb24gZGF0YVxyXG4gICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlw7FvXHJcbiAgICAqL1xyXG4gICAgcHVibGljIEVuY3J5cHREYXRhKCBleHByZXNpb24gOiBzdHJpbmcpe1xyXG4gICAgICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKFwiMDEyMzQ1Njc4OVNJR0VTUFwiKTsgLy8gbsO6bWVybyBoZXhhZGVjaW1hbCBkZSAxNiBkw61naXRvcyBjb21vIGNsYXZlXHJcbiAgICAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlICgnU0lHRVNQMDEyMzQ1Njc4OScpOyAvLyBOw7ptZXJvIGhleGFkZWNpbWFsIGNvbW8gZGVzcGxhemFtaWVudG8gZGUgY2xhdmVcclxuICAgICAgIGxldCBzcmNzID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoZXhwcmVzaW9uKTtcclxuICAgICAgIGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChzcmNzLCBrZXksIHsgaXY6IGl2LCBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQywgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3IH0pO1xyXG4gICAgICAgcmV0dXJuIGVuY3J5cHRlZC5jaXBoZXJ0ZXh0LnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuIFxyXG4gICAgLyoqXHJcbiAgICAqIEBuYW1lIERlY3J5cHREYXRhXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBEZXNlbmNyaXB0YSB1bmEgZXhwcmVzaW9uIGRhdGFcclxuICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZcOxb1xyXG4gICAgKi9cclxuICAgIHB1YmxpYyBEZWNyeXB0RGF0YSggZXhwcmVzaW9uIDogc3RyaW5nKXtcclxuICAgICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlIChcIjAxMjM0NTY3ODlTSUdFU1BcIik7IC8vIG7Dum1lcm8gaGV4YWRlY2ltYWwgZGUgMTYgZMOtZ2l0b3MgY29tbyBjbGF2ZVxyXG4gICAgICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoJ1NJR0VTUDAxMjM0NTY3ODknKTsgLy8gTsO6bWVybyBoZXhhZGVjaW1hbCBjb21vIGRlc3BsYXphbWllbnRvIGRlIGNsYXZlXHJcbiAgICAgICBsZXQgZW5jcnlwdGVkSGV4U3RyID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShleHByZXNpb24pO1xyXG4gICAgICAgbGV0IHNyY3MgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShlbmNyeXB0ZWRIZXhTdHIpO1xyXG4gICAgICAgbGV0IGRlY3J5cHQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChzcmNzLCBrZXksIHsgaXY6IGl2LCBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQywgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3IH0pO1xyXG4gICAgICAgbGV0IGRlY3J5cHRlZFN0ciA9IGRlY3J5cHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xyXG4gICAgICAgcmV0dXJuIGRlY3J5cHRlZFN0ci50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gXHJcbiBcclxuICAgIC8qKlxyXG4gICAgKiBAbmFtZSBnZXRSZXNwb25zZVBlcmZpbFRvb2xiYXJcclxuICAgICogQGRlc2NyaXB0aW9uIE1ldG9kbyBxdWUgb2J0aWVuZSB1bmEgcmVzcHVlc3RhIHRydWUgbyBmYWxzZSBiYXNhZG8gZW4gdW5hIGVzdHJ1Y3R1cmEgc3JpbmcgYmluYW5yaWEgc2VndW4gXHJcbiAgICAqICAgICAgICAgICAgICBsYSBwb3NpY2lvbiBkYWRhIGRlbCB0b29sYmFyLiBzZSBwYXNhIHN0cmluZyBiaW5hcmlvIHF1ZSBjb250aWVuZSAxIHkgMCBlbiByZXByZXNlbnRhY2lvbiBcclxuICAgICogICAgICAgICAgICAgIGRlIGxhcyBwcm9waWVzdGFkZXMgYWRtaW5pc3RyYWRvcixjb25zdWx0YXIsZWplY3V0YXIsaW1wcmltaXIgZXRjIC4uLiBjYWRhIHBvc2ljaW9uIHNlY3VlbmNpYWwgXHJcbiAgICAqICAgICAgICAgICAgICBzaSBlc3RhIGVuIDEgZXMgdHJ1ZSB5IDAgZW4gZmFsc2UgeSBkZXZ1bGV2ZSBlbCB2YWxvciBzZWd1biBsbyByZXF1aWVyYSBlbCB1c3VhcmlvOlxyXG4gICAgKiAgICAgICAgICAgICAgc3RyaW5nYmluYXJpbyA6ICcxMDExJyB5IHBvc2ljaW9uIGVzIDIsIHBvciB0YW50byBzZSB0YXJlIDAgeSBlcyBmYWxzZSBxdWUgcmVwcmVzZW50YSBvcGNpb24gY29uc3VsdGFyLlxyXG4gICAgKiAgICAgICAgICAgICAgRXN0cnVjdHVyYSBzdHJpbmcgYmluYXJpbzpcclxuICAgICogICAgICAgICAgICAgIFBvc2ljacOzbiA6XHJcbiAgICAqICAgICAgICAgICAgICAwLiAgQWRtaW5pc3RyYWRvciAgICAgICAgNi4gIERlc2NhcmdhciAgICAgIDEyLiBSZXZlcnNhciBhcHJvYmFyICAgICAgMTguIFJldmVyc2FyIGFudWxhciBjb250YWJpbGl6YWRvXHJcbiAgICAqICAgICAgICAgICAgICAxLiAgaW5zZXJ0YXIgICAgICAgICAgICAgNy4gIEVqZWN1dGFyICAgICAgIDEzLiBBbnVsYXIuXHJcbiAgICAqICAgICAgICAgICAgICAyLiAgQWN0dWFsaXphciAgICAgICAgICAgOC4gIEVudmlhciAgICAgICAgIDE0LiByZXZlcnNhciBhbnVsYXJcclxuICAgICogICAgICAgICAgICAgIDMuICBjb25zdWx0YXIgICAgICAgICAgICA5LiBJbXByaW1pciAgICAgICAgMTUuIGNvbnRhYmlsaXphclxyXG4gICAgKiAgICAgICAgICAgICAgNC4gIEVsaW1pbmFyICAgICAgICAgICAgIDEwLiBWaXNpYmxlICAgICAgICAxNi4gcmV2ZXJzYXIgY29udGFiaWxpemFyXHJcbiAgICAqICAgICAgICAgICAgICA1LiAgQW51bGFyICAgICAgICAgICAgICAgMTEuIEFwcm9iYXIgICAgICAgIDE3LiBhbnVsYXIgY29udGFiaWxpemFkbyAgICAgICBcclxuICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZcOxb1xyXG4gICAgKi9cclxuICAgICBwdWJsaWMgZ2V0UmVzcG9uc2VQZXJmaWxUb29sYmFyKCBzdHJpbmdiaW5hcmlvIDogc3RyaW5nLCBwb3NpdGlvbiA6IG51bWJlciApe1xyXG4gICAgICAgICAgbGV0IGJpbmFyaW8gPSBzdHJpbmdiaW5hcmlvLnN1YnN0cmluZyhwb3NpdGlvbixwb3NpdGlvbisxKSA7XHJcbiAgICAgICAgICBpZiAoYmluYXJpbz09XCIxXCIpe1xyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlOyBcclxuICAgICAgICAgIH0gICBcclxuICAgICAgICAgIHJldHVybiBmYWxzZTsgXHJcbiAgICAgfVxyXG5cclxuIC8qKlxyXG4gICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBJcCBkZWwgY2xpZW50ZVxyXG4gICAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlbm9cclxuICAgICovXHJcbiAgcHVibGljIGdldElQQWRkcmVzcygpeyAgXHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXCJodHRwOi8vYXBpLmlwaWZ5Lm9yZy8/Zm9ybWF0PWpzb25cIikgXHJcbiAgICAucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGNhdWdodCBpbiBzZXJ2aWNlJylcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXBfYWRyZXNzJywgJzEyNy4wLjAuMScpO1xyXG4gICAgICAgIC8vSGFuZGxlIHRoZSBlcnJvciBoZXJlXHJcblxyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycik7ICAgIC8vUmV0aHJvdyBpdCBiYWNrIHRvIGNvbXBvbmVudFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIFxyXG4gIH1cclxuIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSXAgZGVsIGNsaWVudGVcclxuICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlbm9cclxuICAqL1xyXG4gIHB1YmxpYyBzZXRJcEFkcmVzcygpe1xyXG4gICAgdGhpcy5nZXRJUEFkZHJlc3MoKS5zdWJzY3JpYmUoIChyZXNwOiBhbnkpICAgPT4ge1xyXG4gICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpcF9hZHJlc3MnLCByZXNwLmlwKTtcclxuICAgICAgICAgdGhpcy5pcF9hZHJlc3MgPSByZXNwLmlwO1xyXG4gICAgfSk7ICBcclxuICB9IFxyXG4gLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBJcCBkZWwgY2xpZW50ZVxyXG4gICogQHJldHVybiBKc29uIGRhdGFcclxuICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICovXHJcbiAgcHVibGljIGdldElwQWRyZXNzKCl7XHJcbiAgICB0aGlzLmlwX2FkcmVzcyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lwX2FkcmVzcycpOyAgXHJcbiAgfSBcclxuXHJcbiAgIC8qKlxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgSXAgZGVsIGNsaWVudGVcclxuICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgKiBAZGlhIDE5LTA1LTIwMjJcclxuICAqLyAgXHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUF1ZGl0b3JpYShzbm86TVNub0xvZ1tdKXtcclxuICAgICAgbGV0IGJvZHk9W107XHJcbiAgICAgIHNuby5mb3JFYWNoKGU9PiB7Ym9keS5wdXNoKGUuZGF0YUludGVmYWNlKCkpfSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL3NlZ3VyaWRhZF9kYW8ucGhwP2AsYm9keSxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7cmV0dXJuIHJlczt9KVxyXG4gICAgICApO1xyXG4gICAgfSAgXHJcblxyXG4gLyoqICBcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkZXBvc2l0b3MgICogXHJcbiAgKiBAcGFyYW0gcHJvY2VkZSA6IHByb2NlZGUgZGVsIG1vZHVsb1xyXG4gICogQHBhcmFtIGlkQXJ0aWN1bG8gOiBpZCBkZWwgYXJ0aWN1bG9cclxuICAqIEBwYXJhbSBpZFVzdWFyaW8gOiBpZCB1c3VhcmlvIHBlcm1pdGlkb1xyXG4gICogQHJldHVybnMgXHJcbiAgKiBAYXV0aG9yIEphdmllciBUb3ZhclxyXG4gICogQGRhdGUgMjMtMTEtMjAyMlxyXG4gICovICAgICAgXHJcbiAgcHVibGljIGdldERlcG9zaXRUeXBlKHByb2NlZGU6c3RyaW5nLGlkQXJ0aWN1bG86bnVtYmVyLGlkVXN1YXJpbz86bnVtYmVyKXtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zaXYvY2F0YWxvZ29fcGFyYW1ldHJpemFkb19kYW8ucGhwP2dldD0ke3Byb2NlZGV9JmlkPSR7aWRBcnRpY3Vsb30maT0ke2lkVXN1YXJpb31gLFxyXG4gICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgcmV0cnkoMyksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1UaXBvRGVwb3NpdG9zKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgXHJcbn1cclxuXHJcbiAgXHJcbmludGVyZmFjZSBmaWx0cm9DdWVudGFzUHJlc3VwdWVzdG8ge1xyXG4gIHRpcG8/OiAnRScgfCAnUicsXHJcbiAgZXN0YWRvPzogJ0MnIHwgJ1MnXHJcbn1cclxuXHJcblxyXG4iXX0=