@seniorsistemas/yms-integration 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/seniorsistemas-yms-integration.umd.js +2922 -1185
- package/bundles/seniorsistemas-yms-integration.umd.js.map +1 -1
- package/bundles/seniorsistemas-yms-integration.umd.min.js +1 -1
- package/bundles/seniorsistemas-yms-integration.umd.min.js.map +1 -1
- package/esm2015/index.js +9 -1
- package/esm2015/seniorsistemas-yms-integration.js +48 -38
- package/esm2015/src/devices/balancas/balancas.service.js +4 -1
- package/esm2015/src/devices/balancas/visualiar-balanca/visualizar-balanca.component.js +8 -25
- package/esm2015/src/devices/balancas/weightScale.js +1 -1
- package/esm2015/src/devices/cancelas/cancelas.service.js +5 -1
- package/esm2015/src/devices/cancelas/controlador-cancela/controlador-cancela.component.js +91 -21
- package/esm2015/src/devices/cancelas/gate.js +1 -1
- package/esm2015/src/devices/dock/dock.module.js +12 -0
- package/esm2015/src/devices/dock/dock.service.js +22 -0
- package/esm2015/src/erp-senior/components/nota-form/nota-form.component.js +24 -9
- package/esm2015/src/erp-senior/core/entities/agenda/agenda.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/cidade/cidade.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/contrato-compra/contrato-compra.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/contrato-compra-item/contrato-compra-item.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/derivacao/derivacao.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/devolucao/devolucao.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/empresa/empresa.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/estado/estado.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/expedicao/expedicao.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/familia-produto/familia-produto.js +5 -7
- package/esm2015/src/erp-senior/core/entities/familia-produto/familia-produto.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/filial/filial.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/log-integracao/log-integracao.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/motorista/motorista.js +1 -1
- package/esm2015/src/erp-senior/core/entities/ordem-compra/ordem-compra.module.js +7 -2
- package/esm2015/src/erp-senior/core/entities/pais/pais.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pedido-venda/pedido-venda.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pedido-venda-item/pedido-venda-item.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pessoa/pessoa.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco-dto.js +1 -5
- package/esm2015/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.js +1 -7
- package/esm2015/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pessoa-fisica/pessoa-fisica.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pessoa-juridica/pessoa-juridica.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/processo-avulso/processo-avulso.module.js +7 -2
- package/esm2015/src/erp-senior/core/entities/produto/produto.js +1 -9
- package/esm2015/src/erp-senior/core/entities/produto/produto.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/recebimento-contrato/recebimento.module.js +7 -2
- package/esm2015/src/erp-senior/core/entities/recebimento-ordem-compra/recebimento-ordem-compra.module.js +11 -12
- package/esm2015/src/erp-senior/core/entities/royalty/royalty.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/safra/safra.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/transgenia/transgenia.js +1 -1
- package/esm2015/src/erp-senior/core/entities/transportadora/transportadora.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/unidade-medida/unidade-medida.module.js +2 -2
- package/esm2015/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.js +9 -1
- package/esm2015/src/erp-senior/devolucao/form/devolucao-form.component.js +12 -7
- package/esm2015/src/erp-senior/expedicao/form/expedicao-form.component.js +15 -21
- package/esm2015/src/erp-senior/processo-avulso/form/processo-avulso-form.component.js +7 -2
- package/esm2015/src/erp-senior/recebimento/contrato-form/contrato-form.component.js +20 -4
- package/esm2015/src/erp-senior/recebimento/form/recebimento-form.component.js +242 -199
- package/esm2015/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js +29 -20
- package/esm2015/src/erp-senior/recebimento-ordem-compra/ordem-compra-form/ordem-compra-form.component.js +13 -4
- package/esm2015/src/sam-senior/components/credencial-form/credencial-form.component.js +126 -0
- package/esm2015/src/sam-senior/components/scheduling/lobby.service.js +22 -0
- package/esm2015/src/sam-senior/components/scheduling/scheduling.component.js +191 -0
- package/esm2015/src/sam-senior/components/scheduling/shechuling.service.js +40 -0
- package/esm2015/src/sam-senior/components/visited-info/visited-info.component.js +59 -0
- package/esm2015/src/sam-senior/components/visited-info/visited-info.service.js +26 -0
- package/esm2015/src/sam-senior/components/visitor-edit/visitor-edit-form/visitante-form/visitor-edit-form.component.js +84 -0
- package/esm2015/src/sam-senior/components/visitor-edit/visitor-edit-list/visitor-edit-list.component.js +364 -0
- package/esm2015/src/sam-senior/components/visitor-list/visitor-list.component.js +64 -0
- package/esm2015/src/sam-senior/components/visitor-list/visitor-list.service.js +26 -0
- package/esm2015/src/sam-senior/components/visitor-list.module.js +36 -0
- package/esm2015/src/sam-senior/core/entity-service.js +102 -0
- package/esm2015/src/sam-senior/core/lookup.js +184 -0
- package/esm2015/src/sam-senior/core/utils.js +26 -0
- package/esm2015/src/sam-senior/entities/credential-card-dto.js +9 -0
- package/esm2015/src/sam-senior/entities/lobby-dto.js +3 -0
- package/esm2015/src/sam-senior/entities/scheduling-dto.js +3 -0
- package/esm2015/src/sam-senior/entities/scheduling-visitors.js +3 -0
- package/esm2015/src/sam-senior/entities/scheduling.js +26 -0
- package/esm2015/src/sam-senior/entities/visited.js +3 -0
- package/esm2015/src/sam-senior/entities/visitor-credentials-dto.js +6 -0
- package/esm2015/src/sam-senior/entities/visitor-dto.js +1 -0
- package/esm2015/src/sam-senior/entities/visitor-situation.js +10 -0
- package/esm2015/src/sam-senior/form/form-sam.component.js +61 -0
- package/esm2015/src/sam-senior/models/card-credential.js +7 -0
- package/esm2015/src/sam-senior/models/visit-situation.js +8 -0
- package/esm2015/src/sam-senior/models/visitor-situation.js +10 -0
- package/esm2015/src/sam-senior/models/visitor.js +23 -0
- package/esm2015/src/sam-senior/sam-senior.module.js +75 -0
- package/esm2015/src/utils/build-form-field.js +28 -0
- package/esm5/index.js +9 -1
- package/esm5/seniorsistemas-yms-integration.js +48 -38
- package/esm5/src/devices/balancas/balancas.service.js +4 -1
- package/esm5/src/devices/balancas/visualiar-balanca/visualizar-balanca.component.js +8 -25
- package/esm5/src/devices/balancas/weightScale.js +1 -1
- package/esm5/src/devices/cancelas/cancelas.service.js +5 -1
- package/esm5/src/devices/cancelas/controlador-cancela/controlador-cancela.component.js +94 -21
- package/esm5/src/devices/cancelas/gate.js +1 -1
- package/esm5/src/devices/dock/dock.module.js +15 -0
- package/esm5/src/devices/dock/dock.service.js +25 -0
- package/esm5/src/erp-senior/components/nota-form/nota-form.component.js +24 -9
- package/esm5/src/erp-senior/core/entities/agenda/agenda.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/cidade/cidade.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/contrato-compra/contrato-compra.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/contrato-compra-item/contrato-compra-item.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/derivacao/derivacao.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/devolucao/devolucao.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/empresa/empresa.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/estado/estado.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/expedicao/expedicao.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/familia-produto/familia-produto.js +5 -7
- package/esm5/src/erp-senior/core/entities/familia-produto/familia-produto.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/filial/filial.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/log-integracao/log-integracao.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/motorista/motorista.js +1 -1
- package/esm5/src/erp-senior/core/entities/ordem-compra/ordem-compra.module.js +7 -2
- package/esm5/src/erp-senior/core/entities/pais/pais.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pedido-venda/pedido-venda.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pedido-venda-item/pedido-venda-item.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pessoa/pessoa.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco-dto.js +1 -5
- package/esm5/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.js +1 -7
- package/esm5/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pessoa-fisica/pessoa-fisica.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pessoa-juridica/pessoa-juridica.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/processo-avulso/processo-avulso.module.js +7 -2
- package/esm5/src/erp-senior/core/entities/produto/produto.js +1 -9
- package/esm5/src/erp-senior/core/entities/produto/produto.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/recebimento-contrato/recebimento.module.js +7 -2
- package/esm5/src/erp-senior/core/entities/recebimento-ordem-compra/recebimento-ordem-compra.module.js +11 -12
- package/esm5/src/erp-senior/core/entities/royalty/royalty.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/safra/safra.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/transgenia/transgenia.js +1 -1
- package/esm5/src/erp-senior/core/entities/transportadora/transportadora.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/unidade-medida/unidade-medida.module.js +2 -2
- package/esm5/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.js +9 -1
- package/esm5/src/erp-senior/devolucao/form/devolucao-form.component.js +12 -7
- package/esm5/src/erp-senior/expedicao/form/expedicao-form.component.js +15 -21
- package/esm5/src/erp-senior/processo-avulso/form/processo-avulso-form.component.js +7 -2
- package/esm5/src/erp-senior/recebimento/contrato-form/contrato-form.component.js +21 -4
- package/esm5/src/erp-senior/recebimento/form/recebimento-form.component.js +244 -203
- package/esm5/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js +29 -20
- package/esm5/src/erp-senior/recebimento-ordem-compra/ordem-compra-form/ordem-compra-form.component.js +14 -4
- package/esm5/src/sam-senior/components/credencial-form/credencial-form.component.js +144 -0
- package/esm5/src/sam-senior/components/scheduling/lobby.service.js +25 -0
- package/esm5/src/sam-senior/components/scheduling/scheduling.component.js +199 -0
- package/esm5/src/sam-senior/components/scheduling/shechuling.service.js +43 -0
- package/esm5/src/sam-senior/components/visited-info/visited-info.component.js +56 -0
- package/esm5/src/sam-senior/components/visited-info/visited-info.service.js +29 -0
- package/esm5/src/sam-senior/components/visitor-edit/visitor-edit-form/visitante-form/visitor-edit-form.component.js +87 -0
- package/esm5/src/sam-senior/components/visitor-edit/visitor-edit-list/visitor-edit-list.component.js +384 -0
- package/esm5/src/sam-senior/components/visitor-list/visitor-list.component.js +82 -0
- package/esm5/src/sam-senior/components/visitor-list/visitor-list.service.js +29 -0
- package/esm5/src/sam-senior/components/visitor-list.module.js +37 -0
- package/esm5/src/sam-senior/core/entity-service.js +107 -0
- package/esm5/src/sam-senior/core/lookup.js +229 -0
- package/esm5/src/sam-senior/core/utils.js +28 -0
- package/esm5/src/sam-senior/entities/credential-card-dto.js +13 -0
- package/esm5/src/sam-senior/entities/lobby-dto.js +7 -0
- package/esm5/src/sam-senior/entities/scheduling-dto.js +7 -0
- package/esm5/src/sam-senior/entities/scheduling-visitors.js +7 -0
- package/esm5/src/sam-senior/entities/scheduling.js +30 -0
- package/esm5/src/sam-senior/entities/visited.js +7 -0
- package/esm5/src/sam-senior/entities/visitor-credentials-dto.js +8 -0
- package/esm5/src/sam-senior/entities/visitor-dto.js +1 -0
- package/esm5/src/sam-senior/entities/visitor-situation.js +10 -0
- package/esm5/src/sam-senior/form/form-sam.component.js +64 -0
- package/esm5/src/sam-senior/models/card-credential.js +7 -0
- package/esm5/src/sam-senior/models/visit-situation.js +8 -0
- package/esm5/src/sam-senior/models/visitor-situation.js +10 -0
- package/esm5/src/sam-senior/models/visitor.js +32 -0
- package/esm5/src/sam-senior/sam-senior.module.js +76 -0
- package/esm5/src/utils/build-form-field.js +29 -0
- package/fesm2015/seniorsistemas-yms-integration.js +2763 -1193
- package/fesm2015/seniorsistemas-yms-integration.js.map +1 -1
- package/fesm5/seniorsistemas-yms-integration.js +2888 -1169
- package/fesm5/seniorsistemas-yms-integration.js.map +1 -1
- package/index.d.ts +7 -0
- package/package.json +3 -3
- package/seniorsistemas-yms-integration.d.ts +47 -37
- package/seniorsistemas-yms-integration.metadata.json +1 -1
- package/src/devices/balancas/balancas.service.d.ts +1 -0
- package/src/devices/balancas/visualiar-balanca/visualizar-balanca.component.d.ts +2 -11
- package/src/devices/balancas/weightScale.d.ts +2 -2
- package/src/devices/cancelas/cancelas.service.d.ts +1 -0
- package/src/devices/cancelas/controlador-cancela/controlador-cancela.component.d.ts +12 -8
- package/src/devices/cancelas/gate.d.ts +2 -0
- package/src/devices/dock/dock.module.d.ts +2 -0
- package/src/devices/dock/dock.service.d.ts +10 -0
- package/src/erp-senior/components/nota-form/nota-form.component.d.ts +7 -1
- package/src/erp-senior/core/entities/motorista/motorista.d.ts +3 -0
- package/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco-dto.d.ts +2 -0
- package/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.d.ts +2 -0
- package/src/erp-senior/core/entities/transgenia/transgenia.d.ts +2 -0
- package/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.d.ts +2 -0
- package/src/erp-senior/devolucao/form/devolucao-form.component.d.ts +2 -0
- package/src/erp-senior/processo-avulso/form/processo-avulso-form.component.d.ts +2 -0
- package/src/erp-senior/recebimento/contrato-form/contrato-form.component.d.ts +10 -4
- package/src/erp-senior/recebimento/form/recebimento-form.component.d.ts +25 -10
- package/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.d.ts +4 -2
- package/src/erp-senior/recebimento-ordem-compra/ordem-compra-form/ordem-compra-form.component.d.ts +6 -2
- package/src/sam-senior/components/credencial-form/credencial-form.component.d.ts +29 -0
- package/src/sam-senior/components/scheduling/lobby.service.d.ts +9 -0
- package/src/sam-senior/components/scheduling/scheduling.component.d.ts +43 -0
- package/src/sam-senior/components/scheduling/shechuling.service.d.ts +14 -0
- package/src/sam-senior/components/visited-info/visited-info.component.d.ts +15 -0
- package/src/sam-senior/components/visited-info/visited-info.service.d.ts +10 -0
- package/src/sam-senior/components/visitor-edit/visitor-edit-form/visitante-form/visitor-edit-form.component.d.ts +22 -0
- package/src/sam-senior/components/visitor-edit/visitor-edit-list/visitor-edit-list.component.d.ts +56 -0
- package/src/sam-senior/components/visitor-list/visitor-list.component.d.ts +16 -0
- package/src/sam-senior/components/visitor-list/visitor-list.service.d.ts +10 -0
- package/src/sam-senior/components/visitor-list.module.d.ts +5 -0
- package/src/sam-senior/core/entity-service.d.ts +35 -0
- package/src/sam-senior/core/lookup.d.ts +38 -0
- package/src/sam-senior/core/utils.d.ts +18 -0
- package/src/sam-senior/entities/credential-card-dto.d.ts +12 -0
- package/src/sam-senior/entities/lobby-dto.d.ts +5 -0
- package/src/sam-senior/entities/scheduling-dto.d.ts +11 -0
- package/src/sam-senior/entities/scheduling-visitors.d.ts +6 -0
- package/src/sam-senior/entities/scheduling.d.ts +12 -0
- package/src/sam-senior/entities/visited.d.ts +4 -0
- package/src/sam-senior/entities/visitor-credentials-dto.d.ts +6 -0
- package/src/sam-senior/entities/visitor-dto.d.ts +10 -0
- package/src/sam-senior/entities/visitor-situation.d.ts +8 -0
- package/src/sam-senior/form/form-sam.component.d.ts +18 -0
- package/src/sam-senior/models/card-credential.d.ts +16 -0
- package/src/sam-senior/models/visit-situation.d.ts +6 -0
- package/src/sam-senior/models/visitor-situation.d.ts +8 -0
- package/src/sam-senior/models/visitor.d.ts +24 -0
- package/src/sam-senior/sam-senior.module.d.ts +6 -0
- package/src/utils/build-form-field.d.ts +9 -0
package/esm5/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js
CHANGED
|
@@ -97,6 +97,7 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
97
97
|
this.fornecedorNotas = [];
|
|
98
98
|
this.formCarregado = false;
|
|
99
99
|
this.ordemCompraSelecionado = null;
|
|
100
|
+
this.permissions = {};
|
|
100
101
|
this.ngUnsubscribe = new Subject();
|
|
101
102
|
/**PRODUTO DEPENDE DE FILIAL. ORDEM COMPRA DEPENDE DE FILIAL */
|
|
102
103
|
this.onFilialValueChange = function (filial, formGroup) {
|
|
@@ -153,13 +154,7 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
153
154
|
}
|
|
154
155
|
this.getEmpresaFilial();
|
|
155
156
|
this.totalEixosComposicao = this.agenda && this.agenda.veiculo ? this.agenda.veiculo.eixos || 0 : 0;
|
|
156
|
-
var statusAgenda = [
|
|
157
|
-
"AGUARDANDO_CONFIRMACAO_SOLICITANTE",
|
|
158
|
-
"AGENDADO",
|
|
159
|
-
"AGUARDANDO_CONFIRMACAO",
|
|
160
|
-
"EM_EXECUCAO",
|
|
161
|
-
"REJEITADO_POR_VALIDACAO"
|
|
162
|
-
];
|
|
157
|
+
var statusAgenda = ["AGUARDANDO_CONFIRMACAO_SOLICITANTE", "AGENDADO", "AGUARDANDO_CONFIRMACAO", "REJEITADO_POR_VALIDACAO"];
|
|
163
158
|
if (this.agenda && !statusAgenda.includes(this.agenda.status)) {
|
|
164
159
|
this.formGroup.disable();
|
|
165
160
|
this.disableButtonSave = true;
|
|
@@ -168,6 +163,10 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
168
163
|
this.erpProcessService.current.subscribe(function (message) { return _this.erpProcessData = message; });
|
|
169
164
|
this.erpFormConfigService.current.subscribe(function (message) { return _this.enableRevalidation = message; });
|
|
170
165
|
this.verificaSeTemAlteracao();
|
|
166
|
+
this.route.data.pipe(takeUntil(this.ngUnsubscribe)).subscribe(function (data) { return _this.onRouteDataChange(data); });
|
|
167
|
+
};
|
|
168
|
+
RecebimentoOrdemCompraFormComponent.prototype.onRouteDataChange = function (data) {
|
|
169
|
+
this.permissions = data.allPermissions.agenda;
|
|
171
170
|
};
|
|
172
171
|
RecebimentoOrdemCompraFormComponent.prototype.verificaSeTemAlteracao = function () {
|
|
173
172
|
var _this = this;
|
|
@@ -293,7 +292,7 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
293
292
|
filialId: (this.formGroup.get("filial").value && this.formGroup.get("filial").value.id) || null,
|
|
294
293
|
chaveDocumento: value.trim() || ""
|
|
295
294
|
}).pipe(takeUntil(this.ngUnsubscribe), finalize(function () { return _this.loading = false; })).subscribe(function (response) {
|
|
296
|
-
_this.
|
|
295
|
+
_this.addNovaNota(response);
|
|
297
296
|
});
|
|
298
297
|
}
|
|
299
298
|
};
|
|
@@ -334,7 +333,7 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
334
333
|
_this.formGroup.patchValue(recebimentoOrdemCompra);
|
|
335
334
|
recebimentoOrdemCompra.fornecedores.forEach(function (fornecedor) {
|
|
336
335
|
var form = _this.getFornecedorForm(fornecedor);
|
|
337
|
-
_this.
|
|
336
|
+
_this.getFornecedoresForm().push(form);
|
|
338
337
|
fornecedor.ordens.forEach(function (ordemCompra) {
|
|
339
338
|
var ordemCompraForm = _this.getOrdemCompraForm(ordemCompra);
|
|
340
339
|
_this.getOrdensCompra(form).push(ordemCompraForm);
|
|
@@ -652,7 +651,7 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
652
651
|
RecebimentoOrdemCompraFormComponent.prototype.addFornecedor = function (data) {
|
|
653
652
|
this.erroFornecedores = false;
|
|
654
653
|
var fornecedor = this.getFornecedorForm(data);
|
|
655
|
-
this.
|
|
654
|
+
this.getFornecedoresForm().push(fornecedor);
|
|
656
655
|
return fornecedor;
|
|
657
656
|
};
|
|
658
657
|
RecebimentoOrdemCompraFormComponent.prototype.removeFornecedor = function (control) {
|
|
@@ -661,8 +660,8 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
661
660
|
header: this.translate.instant("yms.erp.remove_fornecedor_header"),
|
|
662
661
|
message: this.translate.instant("yms.erp.remove_fornecedor_message"),
|
|
663
662
|
accept: function () {
|
|
664
|
-
var index = _this.
|
|
665
|
-
_this.
|
|
663
|
+
var index = _this.getFornecedoresForm().controls.indexOf(control);
|
|
664
|
+
_this.getFornecedoresForm().removeAt(index);
|
|
666
665
|
}
|
|
667
666
|
});
|
|
668
667
|
};
|
|
@@ -678,7 +677,7 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
678
677
|
this.checkValuesChanges(formGroup, "fornecedor", "origemMercadoria", this.origemMercadoriaService, getFilterQueryFornecedor, ['codigo', 'endereco'], function (val) { return PessoaEndereco.fromDto(val); }, 10, false, true);
|
|
679
678
|
return formGroup;
|
|
680
679
|
};
|
|
681
|
-
RecebimentoOrdemCompraFormComponent.prototype.
|
|
680
|
+
RecebimentoOrdemCompraFormComponent.prototype.getFornecedoresForm = function () {
|
|
682
681
|
return this.formGroup.get("fornecedores");
|
|
683
682
|
};
|
|
684
683
|
RecebimentoOrdemCompraFormComponent.prototype.getNotas = function (formGroup) {
|
|
@@ -873,12 +872,22 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
873
872
|
RecebimentoOrdemCompraFormComponent.prototype.getSaveObservable = function () {
|
|
874
873
|
var value = this.formGroup.getRawValue();
|
|
875
874
|
value.empresa = value.filial.empresa;
|
|
876
|
-
var
|
|
875
|
+
var recebimentoDto = RecebimentoOrdemCompra.toDto(value);
|
|
876
|
+
var fornecedores = recebimentoDto.fornecedores;
|
|
877
|
+
recebimentoDto.fornecedores.forEach(function (anterior) {
|
|
878
|
+
recebimentoDto.fornecedores.forEach(function (posterior) {
|
|
879
|
+
if (anterior.fornecedor.id === posterior.fornecedor.id &&
|
|
880
|
+
anterior.origemMercadoria.id === posterior.origemMercadoria.id) {
|
|
881
|
+
fornecedores = fornecedores.splice(fornecedores.indexOf(posterior), 1);
|
|
882
|
+
}
|
|
883
|
+
});
|
|
884
|
+
});
|
|
885
|
+
recebimentoDto.fornecedores = fornecedores;
|
|
877
886
|
if (this.isNew() && !value.id) {
|
|
878
|
-
return this.recebimentoOrdemCompraService.insert(
|
|
887
|
+
return this.recebimentoOrdemCompraService.insert(recebimentoDto);
|
|
879
888
|
}
|
|
880
889
|
else {
|
|
881
|
-
return this.recebimentoOrdemCompraService.update(this.formGroup.value.id,
|
|
890
|
+
return this.recebimentoOrdemCompraService.update(this.formGroup.value.id, recebimentoDto);
|
|
882
891
|
}
|
|
883
892
|
};
|
|
884
893
|
RecebimentoOrdemCompraFormComponent.prototype.getFormGroup = function () {
|
|
@@ -908,14 +917,14 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
908
917
|
}
|
|
909
918
|
});
|
|
910
919
|
};
|
|
911
|
-
RecebimentoOrdemCompraFormComponent.prototype.
|
|
920
|
+
RecebimentoOrdemCompraFormComponent.prototype.addNovaNota = function (response) {
|
|
912
921
|
var values = (response.documentos || []).length ? response.documentos[0] : undefined;
|
|
913
922
|
if (!values) {
|
|
914
923
|
return;
|
|
915
924
|
}
|
|
916
925
|
var fornecedor = Pessoa.fromDto(values.fornecedor);
|
|
917
926
|
var origemMercadoria = PessoaEndereco.fromDto(values.origemMercadoria);
|
|
918
|
-
var fornecedorForm = this.
|
|
927
|
+
var fornecedorForm = this.getFornecedoresForm().controls.find(function (_a) {
|
|
919
928
|
var value = _a.value;
|
|
920
929
|
return value.fornecedor.id === fornecedor.id;
|
|
921
930
|
});
|
|
@@ -1181,7 +1190,7 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
1181
1190
|
RecebimentoOrdemCompraFormComponent = tslib_1.__decorate([
|
|
1182
1191
|
Component({
|
|
1183
1192
|
selector: 'recebimento-ordem-compra-form',
|
|
1184
|
-
template: "<p-confirmDialog [acceptLabel]=\"'yes' | translate\" acceptIcon=\"\" [rejectLabel]=\"'no' | translate\" rejectIcon=\"\">\n</p-confirmDialog>\n<div *sLoadingState=\"loading\">\n <form [formGroup]=\"formGroup\">\n <div class=\"ui-fluid ui-g\">\n\n <div class=\"ui-g-12\">\n <label for=\"chaveNotaFiscal\">{{'yms.erp.recebimento_chave_nota_fiscal' | translate}}</label>\n <input pInputText type=\"text\" [(ngModel)]=\"chaveNotaFiscal\" [ngModelOptions]=\"{standalone: true}\" (blur)=\"onBlurChaveNotaFiscal()\">\n <!-- <input [class.ng-invalid]=\"erroChaveNota\" pInputText type=\"text\" [(ngModel)]=\"chaveNotaFiscal\" [ngModelOptions]=\"{standalone: true}\" (blur)=\"onBlurChaveNotaFiscal()\"> -->\n <!-- <span class=\"input-error\" *ngIf=\"erroChaveNota\">{{'yms.erp.produto_nota_error_detail' | translate}}</span> -->\n </div>\n\n <div class=\"ui-md-6 ui-g-12 required\">\n <label for=\"filial\">{{'yms.erp.recebimento_ordem_compra_filial' | translate}}</label>\n <s-lookup dataKey=\"id\" id=\"filial\" name=\"filial\" formControlName=\"filial\"\n [searchFields]=\"filialSearchFields\" [searchGridFields]=\"filialSearchGridFields\"\n [searchGridData]=\"filialSearchGridData\" [multiple]=\"false\"\n [lookupSuggestions]=\"filialLookupSuggestions\" (onLookupRequest)=\"onFilialLookupRequest($event)\"\n (onSearchRequest)=\"onFilialSearchRequest($event)\" lookupDisplayField=\"label\"\n [searchTotalRecords]=\"filialSearchTotalRecords\"\n [searchTitle]=\"'yms.erp.filial_search_title' | translate\"\n [searchEmptyTitle]=\"'yms.erp.nothing_found' | translate\"\n [filterLabel]=\"'yms.erp.filter' | translate\" [clearLabel]=\"'yms.erp.clear' | translate\"\n [cancelLabel]=\"'yms.erp.cancel' | translate\" [selectLabel]=\"'yms.erp.select' | translate\"\n [searchTotalRecordsLabel]=\"'yms.erp.total_records' | translate: {value: filialSearchTotalRecords}\">\n </s-lookup>\n <s-control-errors [control]=\"formGroup.controls['filial']\"\n [errorMessages]=\"{ required: 'yms.erp.error_required' | translate }\"></s-control-errors>\n </div>\n\n <div class=\"ui-md-6 ui-g-12\">\n <label for=\"transportadora\">{{'yms.erp.recebimento_ordem_compra_transportadora' | translate}}</label>\n <s-lookup dataKey=\"id\" id=\"transportadora\" name=\"transportadora\" formControlName=\"transportadora\"\n [searchFields]=\"transportadoraSearchFields\" [searchGridFields]=\"transportadoraSearchFields\"\n [searchGridData]=\"transportadoraSearchGridData\" [multiple]=\"false\"\n [lookupSuggestions]=\"transportadoraLookupSuggestions\"\n (onLookupRequest)=\"onTransportadoraLookupRequest($event)\"\n (onSearchRequest)=\"onTransportadoraSearchRequest($event)\" lookupDisplayField=\"label\"\n [searchTotalRecords]=\"transportadoraSearchTotalRecords\"\n [searchTitle]=\"'yms.erp.transportadora_search_title' | translate\"\n [searchEmptyTitle]=\"'yms.erp.nothing_found' | translate\"\n [filterLabel]=\"'yms.erp.filter' | translate\" [clearLabel]=\"'yms.erp.clear' | translate\"\n [cancelLabel]=\"'yms.erp.cancel' | translate\" [selectLabel]=\"'yms.erp.select' | translate\"\n [searchTotalRecordsLabel]=\"'yms.erp.total_records' | translate: {value: transportadoraSearchTotalRecords}\">\n </s-lookup>\n </div>\n\n <div class=\"ui-g-12\" style=\"text-align: right;\" *ngIf=\"totalEixosContratados || totalEixosComposicao\">\n <label for=\"totalEixosContratados\" float=\"right\" style=\"display: inline;\">\n {{totalEixosContratados}} {{'yms.erp.total_eixos_contratados' | translate}} /\n </label>\n <label for=\"totalEixosComposicao\" float=\"right\" style=\"display: inline;\">\n {{totalEixosComposicao}} {{'yms.erp.total_eixos_composicao' | translate}}\n </label>\n </div>\n\n <div class=\"ui-md-12\">\n <s-button *ngIf=\"showButtons() && !!formGroup.get('filial').value && !createdByErp\" styleClass=\"btn-erp-forms\" iconClass=\"fas fa-plus\" label=\"Adicionar fornecedor\" priority=\"secondary\" (onClick)=\"addFornecedor()\"></s-button>\n <span style=\"display: block;\" class=\"input-error\" *ngIf=\"erroFornecedores\">{{'Selecione ao menos um fornecedor para continuar' | translate}}</span>\n </div>\n\n <form class=\"ui-g-12\" *ngFor=\"let fornecedorForm of getFornecedores().controls; let i = index;\" [formGroup]=\"fornecedorForm\">\n <p-panel [style]=\"{position: 'relative'}\" styleClass=\"form-group ui-g-12 ui-md-12\" [toggleable]=\"true\">\n\n <p-header>\n Fornecedor {{+i+1}}\n <s-button \n style=\"display: inline-block; position: absolute; right: 50px; top: 10px\" \n *ngIf=\"showButtons() && !createdByErp\"\n iconClass=\"fas fa-trash\"\n label=\"Remover\"\n priority=\"default\"\n [auxiliary]=\"true\"\n (onClick)=\"removeFornecedor(fornecedorForm)\">\n </s-button>\n </p-header>\n \n <div class=\"ui-md-6 ui-g-12 required\">\n <label for=\"fornecedor\">{{'yms.erp.recebimento_ordem_compra_fornecedor' | translate}}</label>\n <s-lookup dataKey=\"id\" id=\"fornecedor\" name=\"fornecedor\" formControlName=\"fornecedor\"\n [searchFields]=\"fornecedorSearchFields\" [searchGridFields]=\"fornecedorSearchFields\"\n [searchGridData]=\"fornecedorSearchGridData\" [multiple]=\"false\"\n [lookupSuggestions]=\"fornecedorLookupSuggestions\"\n (onLookupRequest)=\"onFornecedorLookupRequest($event)\"\n (onSearchRequest)=\"onFornecedorSearchRequest($event)\" lookupDisplayField=\"label\"\n [searchTotalRecords]=\"fornecedorSearchTotalRecords\"\n [searchTitle]=\"'yms.erp.fornecedor_search_title' | translate\"\n [searchEmptyTitle]=\"'yms.erp.nothing_found' | translate\"\n [filterLabel]=\"'yms.erp.filter' | translate\" [clearLabel]=\"'yms.erp.clear' | translate\"\n [cancelLabel]=\"'yms.erp.cancel' | translate\" [selectLabel]=\"'yms.erp.select' | translate\"\n [searchTotalRecordsLabel]=\"'yms.erp.total_records' | translate: { value: fornecedorSearchTotalRecords }\">\n </s-lookup>\n <s-control-errors\n [control]=\"fornecedorForm.get('fornecedor')\"\n [errorMessages]=\"{ required: 'yms.erp.error_required' | translate }\">\n </s-control-errors>\n </div>\n\n <div class=\"ui-md-6 ui-g-12\">\n <label for=\"origem_mercadoria\">{{'yms.erp.recebimento_ordem_compra_mercadoria' | translate}}</label>\n <s-lookup dataKey=\"id\" id=\"origem_mercadoria\" name=\"origem_mercadoria\" formControlName=\"origemMercadoria\" \n [searchFields]=\"origemMercadoriaSearchFields\" [searchGridFields]=\"origemMercadoriaSearchFields\"\n [searchGridData]=\"origemMercadoriaSearchGridData\" [multiple]=\"false\"\n [lookupSuggestions]=\"origemMercadoriaLookupSuggestions\" lookupDisplayField=\"label\"\n (onLookupRequest)=\"onOrigemMercadoriaLookupRequest(fornecedorForm, $event)\"\n (onSearchRequest)=\"onOrigemMercadoriaSearchRequest(fornecedorForm, $event)\" \n [searchTotalRecords]=\"origemMercadoriaSearchTotalRecords\"\n [searchTitle]=\"'yms.erp.origem_mercadoria_search_title' | translate\"\n [searchEmptyTitle]=\"'yms.erp.nothing_found' | translate\"\n [filterLabel]=\"'yms.erp.filter' | translate\" [clearLabel]=\"'yms.erp.clear' | translate\"\n [cancelLabel]=\"'yms.erp.cancel' | translate\" [selectLabel]=\"'yms.erp.select' | translate\"\n [searchTotalRecordsLabel]=\"'yms.erp.total_records' | translate: { value: origemMercadoriaSearchTotalRecords }\">\n </s-lookup>\n </div>\n\n <div class=\"ui-g-12\">\n <label for=\"fornecedorNotas\">Notas a serem adicionadas</label>\n <s-token-list id=\"fornecedorNotas\" [tokens]=\"fornecedorNotasTokens\" (tokenSelected)=\"addFornecedorNotasTokenEmOrdemCompra(fornecedorForm, $event)\" (tokenRemoved)=\"removeFornecedorNotasTokenDaOrdemCompra($event)\" [removableTokens]=\"true\"></s-token-list>\n </div>\n\n <div class=\"ui-g-12\">\n <s-button label=\"Adicionar nota\" *ngIf=\"showButtons()\" styleClass=\"btn-erp-forms\" priority=\"secondary\" (onClick)=\"addNota(fornecedorForm)\" [disabled]=\"disableAdicionarNota()\"></s-button>\n <s-button label=\"Adicionar ordem de compra\" *ngIf=\"showButtons() && !createdByErp\" styleClass=\"btn-erp-forms\" priority=\"secondary\" (onClick)=\"addOrdemCompra(fornecedorForm)\"></s-button>\n </div>\n\n <div class=\"ui-g-12\">\n <h4>Ordens de Compra</h4>\n <p-table [value]=\"getOrdensCompra(fornecedorForm).controls\" [(selection)]=\"ordemCompraSelecionado\">\n <ng-template pTemplate=\"body\" let-rowData>\n <tr [pSelectableRow]=\"rowData\">\n <td style=\"width: 50px\">\n <p-tableRadioButton [value]=\"rowData.get('ordemCompra').value\"></p-tableRadioButton>\n </td>\n <td>\n <p-accordion>\n <p-accordionTab>\n <p-header>\n Ordem {{rowData.get('ordemCompra').value.codigo}}, Filial {{rowData.get('ordemCompra').value.filial?.codigo}}\n\n <span *ngIf=\"showButtons() && !createdByErp\" style=\"margin-left: 10px; float: right;\" class=\"fas fa-trash\" (click)=\"removerOrdemCompra(fornecedorForm, rowData)\"></span>\n </p-header>\n\n <div class=\"detail-pane\">\n <div class=\"detail-span\">\n <span class=\"title\">Notas</span>\n <span class=\"data\">\n <p-accordion>\n <p-accordionTab *ngFor=\"let nota of getNotas(rowData).controls\">\n <p-header>\n {{nota.get('chaveNotaFiscal').value || (nota.get('serieNotaFiscal').value + ' - ' + nota.get('numeroNotaFiscal').value)}}\n\n <span *ngIf=\"showButtons()\" style=\"margin-left: 10px; float: right;\" class=\"fas fa-trash\" (click)=\"removerNota(fornecedorForm, rowData, nota)\"></span>\n </p-header>\n\n <div class=\"detail-pane\">\n <div class=\"detail-span\">\n <span class=\"title\">S\u00E9rie nota fiscal</span>\n <span class=\"data\">{{nota.value?.serieNotaFiscal}}</span>\n </div>\n <div class=\"detail-span\">\n <span class=\"title\">S\u00E9rie legal nota fiscal</span>\n <span class=\"data\">{{nota.value?.serieLegalNotaFiscal}}</span>\n </div>\n <div class=\"detail-span\">\n <span class=\"title\">N\u00FAmero nota fiscal</span>\n <span class=\"data\">{{nota.value?.numeroNotaFiscal}}</span>\n </div>\n </div>\n\n </p-accordionTab> \n </p-accordion>\n </span>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </p-panel>\n </form>\n </div>\n </form>\n\n <div style=\"margin: 5px 0 5px 0;\">\n <s-button *ngIf=\"showButtons()\" priority=\"primary\" [label]=\"'save' | translate\" (onClick)=\"onSave()\"\n [disabled]=\"loading || disableButtonSave\">\n </s-button>\n <s-button *ngIf=\"saveAndInitButton && showButtons()\" priority=\"primary\" [label]=\"'save_and_init' | translate\"\n (onClick)=\"onSave(true)\" [disabled]=\"loading || disableButtonSave\">\n </s-button>\n </div>\n</div>",
|
|
1193
|
+
template: "<p-confirmDialog [acceptLabel]=\"'yes' | translate\" acceptIcon=\"\" [rejectLabel]=\"'no' | translate\" rejectIcon=\"\">\n</p-confirmDialog>\n<div *sLoadingState=\"loading\">\n <form [formGroup]=\"formGroup\">\n <div class=\"ui-fluid ui-g\">\n\n <div class=\"ui-g-12\">\n <label for=\"chaveNotaFiscal\">{{'yms.erp.recebimento_chave_nota_fiscal' | translate}}</label>\n <input pInputText type=\"text\" [(ngModel)]=\"chaveNotaFiscal\" [ngModelOptions]=\"{standalone: true}\" (blur)=\"onBlurChaveNotaFiscal()\">\n <!-- <input [class.ng-invalid]=\"erroChaveNota\" pInputText type=\"text\" [(ngModel)]=\"chaveNotaFiscal\" [ngModelOptions]=\"{standalone: true}\" (blur)=\"onBlurChaveNotaFiscal()\"> -->\n <!-- <span class=\"input-error\" *ngIf=\"erroChaveNota\">{{'yms.erp.produto_nota_error_detail' | translate}}</span> -->\n </div>\n\n <div class=\"ui-md-6 ui-g-12 required\">\n <label for=\"filial\">{{'yms.erp.recebimento_ordem_compra_filial' | translate}}</label>\n <s-lookup dataKey=\"id\" id=\"filial\" name=\"filial\" formControlName=\"filial\"\n [searchFields]=\"filialSearchFields\" [searchGridFields]=\"filialSearchGridFields\"\n [searchGridData]=\"filialSearchGridData\" [multiple]=\"false\"\n [lookupSuggestions]=\"filialLookupSuggestions\" (onLookupRequest)=\"onFilialLookupRequest($event)\"\n (onSearchRequest)=\"onFilialSearchRequest($event)\" lookupDisplayField=\"label\"\n [searchTotalRecords]=\"filialSearchTotalRecords\"\n [searchTitle]=\"'yms.erp.filial_search_title' | translate\"\n [searchEmptyTitle]=\"'yms.erp.nothing_found' | translate\"\n [filterLabel]=\"'yms.erp.filter' | translate\" [clearLabel]=\"'yms.erp.clear' | translate\"\n [cancelLabel]=\"'yms.erp.cancel' | translate\" [selectLabel]=\"'yms.erp.select' | translate\"\n [searchTotalRecordsLabel]=\"'yms.erp.total_records' | translate: {value: filialSearchTotalRecords}\">\n </s-lookup>\n <s-control-errors [control]=\"formGroup.controls['filial']\"\n [errorMessages]=\"{ required: 'yms.erp.error_required' | translate }\"></s-control-errors>\n </div>\n\n <div class=\"ui-md-6 ui-g-12\">\n <label for=\"transportadora\">{{'yms.erp.recebimento_ordem_compra_transportadora' | translate}}</label>\n <s-lookup dataKey=\"id\" id=\"transportadora\" name=\"transportadora\" formControlName=\"transportadora\"\n [searchFields]=\"transportadoraSearchFields\" [searchGridFields]=\"transportadoraSearchFields\"\n [searchGridData]=\"transportadoraSearchGridData\" [multiple]=\"false\"\n [lookupSuggestions]=\"transportadoraLookupSuggestions\"\n (onLookupRequest)=\"onTransportadoraLookupRequest($event)\"\n (onSearchRequest)=\"onTransportadoraSearchRequest($event)\" lookupDisplayField=\"label\"\n [searchTotalRecords]=\"transportadoraSearchTotalRecords\"\n [searchTitle]=\"'yms.erp.transportadora_search_title' | translate\"\n [searchEmptyTitle]=\"'yms.erp.nothing_found' | translate\"\n [filterLabel]=\"'yms.erp.filter' | translate\" [clearLabel]=\"'yms.erp.clear' | translate\"\n [cancelLabel]=\"'yms.erp.cancel' | translate\" [selectLabel]=\"'yms.erp.select' | translate\"\n [searchTotalRecordsLabel]=\"'yms.erp.total_records' | translate: {value: transportadoraSearchTotalRecords}\">\n </s-lookup>\n </div>\n\n <div class=\"ui-g-12\" style=\"text-align: right;\" *ngIf=\"totalEixosContratados || totalEixosComposicao\">\n <label for=\"totalEixosContratados\" float=\"right\" style=\"display: inline;\">\n {{totalEixosContratados}} {{'yms.erp.total_eixos_contratados' | translate}} /\n </label>\n <label for=\"totalEixosComposicao\" float=\"right\" style=\"display: inline;\">\n {{totalEixosComposicao}} {{'yms.erp.total_eixos_composicao' | translate}}\n </label>\n </div>\n\n <div class=\"ui-md-12\">\n <s-button *ngIf=\"showButtons() && !!formGroup.get('filial').value && !createdByErp\" styleClass=\"btn-erp-forms\" \n iconClass=\"fas fa-plus\" label=\"Adicionar fornecedor\" priority=\"secondary\" \n (onClick)=\"addFornecedor()\" [disabled]=\"disableButtonSave || !permissions.editar\"></s-button>\n <span style=\"display: block;\" class=\"input-error\" *ngIf=\"erroFornecedores\">{{'Selecione ao menos um fornecedor para continuar' | translate}}</span>\n </div>\n\n <form class=\"ui-g-12\" *ngFor=\"let fornecedorForm of getFornecedoresForm().controls; let i = index;\" [formGroup]=\"fornecedorForm\">\n <p-panel [style]=\"{position: 'relative'}\" styleClass=\"form-group ui-g-12 ui-md-12\" [toggleable]=\"true\">\n\n <p-header>\n Fornecedor {{+i+1}}\n <s-button \n style=\"display: inline-block; position: absolute; right: 50px; top: 10px\" \n *ngIf=\"showButtons() && !createdByErp\"\n iconClass=\"fas fa-trash\"\n label=\"Remover\"\n priority=\"default\"\n [auxiliary]=\"true\"\n (onClick)=\"removeFornecedor(fornecedorForm)\">\n </s-button>\n </p-header>\n \n <div class=\"ui-md-6 ui-g-12 required\">\n <label for=\"fornecedor\">{{'yms.erp.recebimento_ordem_compra_fornecedor' | translate}}</label>\n <s-lookup dataKey=\"id\" id=\"fornecedor\" name=\"fornecedor\" formControlName=\"fornecedor\"\n [searchFields]=\"fornecedorSearchFields\" [searchGridFields]=\"fornecedorSearchFields\"\n [searchGridData]=\"fornecedorSearchGridData\" [multiple]=\"false\"\n [lookupSuggestions]=\"fornecedorLookupSuggestions\"\n (onLookupRequest)=\"onFornecedorLookupRequest($event)\"\n (onSearchRequest)=\"onFornecedorSearchRequest($event)\" lookupDisplayField=\"label\"\n [searchTotalRecords]=\"fornecedorSearchTotalRecords\"\n [searchTitle]=\"'yms.erp.fornecedor_search_title' | translate\"\n [searchEmptyTitle]=\"'yms.erp.nothing_found' | translate\"\n [filterLabel]=\"'yms.erp.filter' | translate\" [clearLabel]=\"'yms.erp.clear' | translate\"\n [cancelLabel]=\"'yms.erp.cancel' | translate\" [selectLabel]=\"'yms.erp.select' | translate\"\n [searchTotalRecordsLabel]=\"'yms.erp.total_records' | translate: { value: fornecedorSearchTotalRecords }\">\n </s-lookup>\n <s-control-errors\n [control]=\"fornecedorForm.get('fornecedor')\"\n [errorMessages]=\"{ required: 'yms.erp.error_required' | translate }\">\n </s-control-errors>\n </div>\n\n <div class=\"ui-md-6 ui-g-12\">\n <label for=\"origem_mercadoria\">{{'yms.erp.recebimento_ordem_compra_mercadoria' | translate}}</label>\n <s-lookup dataKey=\"id\" id=\"origem_mercadoria\" name=\"origem_mercadoria\" formControlName=\"origemMercadoria\" \n [searchFields]=\"origemMercadoriaSearchFields\" [searchGridFields]=\"origemMercadoriaSearchFields\"\n [searchGridData]=\"origemMercadoriaSearchGridData\" [multiple]=\"false\"\n [lookupSuggestions]=\"origemMercadoriaLookupSuggestions\" lookupDisplayField=\"label\"\n (onLookupRequest)=\"onOrigemMercadoriaLookupRequest(fornecedorForm, $event)\"\n (onSearchRequest)=\"onOrigemMercadoriaSearchRequest(fornecedorForm, $event)\" \n [searchTotalRecords]=\"origemMercadoriaSearchTotalRecords\"\n [searchTitle]=\"'yms.erp.origem_mercadoria_search_title' | translate\"\n [searchEmptyTitle]=\"'yms.erp.nothing_found' | translate\"\n [filterLabel]=\"'yms.erp.filter' | translate\" [clearLabel]=\"'yms.erp.clear' | translate\"\n [cancelLabel]=\"'yms.erp.cancel' | translate\" [selectLabel]=\"'yms.erp.select' | translate\"\n [searchTotalRecordsLabel]=\"'yms.erp.total_records' | translate: { value: origemMercadoriaSearchTotalRecords }\">\n </s-lookup>\n </div>\n\n <div class=\"ui-g-12\">\n <label for=\"fornecedorNotas\">Notas a serem adicionadas</label>\n <s-token-list id=\"fornecedorNotas\" [tokens]=\"fornecedorNotasTokens\" (tokenSelected)=\"addFornecedorNotasTokenEmOrdemCompra(fornecedorForm, $event)\" (tokenRemoved)=\"removeFornecedorNotasTokenDaOrdemCompra($event)\" [removableTokens]=\"true\"></s-token-list>\n </div>\n\n <div class=\"ui-g-12\">\n <s-button label=\"Adicionar nota\" *ngIf=\"showButtons()\" styleClass=\"btn-erp-forms\" priority=\"secondary\" (onClick)=\"addNota(fornecedorForm)\" [disabled]=\"disableAdicionarNota()\"></s-button>\n <s-button label=\"Adicionar ordem de compra\" *ngIf=\"showButtons() && !createdByErp\" styleClass=\"btn-erp-forms\" priority=\"secondary\" (onClick)=\"addOrdemCompra(fornecedorForm)\"></s-button>\n </div>\n\n <div class=\"ui-g-12\">\n <h4>Ordens de Compra</h4>\n <p-table [value]=\"getOrdensCompra(fornecedorForm).controls\" [(selection)]=\"ordemCompraSelecionado\">\n <ng-template pTemplate=\"body\" let-rowData>\n <tr [pSelectableRow]=\"rowData\">\n <td style=\"width: 50px\">\n <p-tableRadioButton [value]=\"rowData.get('ordemCompra').value\"></p-tableRadioButton>\n </td>\n <td>\n <p-accordion>\n <p-accordionTab>\n <p-header>\n Ordem {{rowData.get('ordemCompra').value.codigo}}, Filial {{rowData.get('ordemCompra').value.filial?.codigo}}\n\n <span *ngIf=\"showButtons() && !createdByErp\" style=\"margin-left: 10px; float: right;\" class=\"fas fa-trash\" (click)=\"removerOrdemCompra(fornecedorForm, rowData)\"></span>\n </p-header>\n\n <div class=\"detail-pane\">\n <div class=\"detail-span\">\n <span class=\"title\">Notas</span>\n <span class=\"data\">\n <p-accordion>\n <p-accordionTab *ngFor=\"let nota of getNotas(rowData).controls\">\n <p-header>\n {{nota.get('chaveNotaFiscal').value || (nota.get('serieNotaFiscal').value + ' - ' + nota.get('numeroNotaFiscal').value)}}\n\n <span *ngIf=\"showButtons()\" style=\"margin-left: 10px; float: right;\" class=\"fas fa-trash\" (click)=\"removerNota(fornecedorForm, rowData, nota)\"></span>\n </p-header>\n\n <div class=\"detail-pane\">\n <div class=\"detail-span\">\n <span class=\"title\">S\u00E9rie nota fiscal</span>\n <span class=\"data\">{{nota.value?.serieNotaFiscal}}</span>\n </div>\n <div class=\"detail-span\">\n <span class=\"title\">S\u00E9rie legal nota fiscal</span>\n <span class=\"data\">{{nota.value?.serieLegalNotaFiscal}}</span>\n </div>\n <div class=\"detail-span\">\n <span class=\"title\">N\u00FAmero nota fiscal</span>\n <span class=\"data\">{{nota.value?.numeroNotaFiscal}}</span>\n </div>\n </div>\n\n </p-accordionTab> \n </p-accordion>\n </span>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </p-panel>\n </form>\n </div>\n </form>\n\n <div style=\"margin: 5px 0 5px 0;\">\n <s-button *ngIf=\"showButtons()\" priority=\"primary\" [label]=\"'save' | translate\" (onClick)=\"onSave()\"\n [disabled]=\"loading || disableButtonSave\">\n </s-button>\n <s-button *ngIf=\"saveAndInitButton && showButtons()\" priority=\"primary\" [label]=\"'save_and_init' | translate\"\n (onClick)=\"onSave(true)\" [disabled]=\"loading || disableButtonSave\">\n </s-button>\n </div>\n</div>",
|
|
1185
1194
|
providers: [ConfirmationService],
|
|
1186
1195
|
styles: [".required-h3{font-size:1.17rem;font-weight:700}.required-h3::after{content:'*';color:#c13018;font-weight:400;margin-left:5px;font-size:14px}.error-required-message{color:#c13018;margin-top:5px;font-size:12px}.separator{width:100%;margin:5px 0;height:1px;background-color:#ccc}.input-error{color:#c13018}.detail-pane{display:flex;flex-wrap:wrap;justify-content:flex-start}.detail-pane .detail-span{width:50%;padding:10px 0;display:flex;flex-direction:column}.detail-pane .detail-span .title{font-size:14px;opacity:.7;margin-bottom:4px}.detail-pane .detail-span .data{font-size:16px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nota-error{color:#c13018}"]
|
|
1187
1196
|
}),
|
|
@@ -1212,4 +1221,4 @@ var RecebimentoOrdemCompraFormComponent = /** @class */ (function () {
|
|
|
1212
1221
|
return RecebimentoOrdemCompraFormComponent;
|
|
1213
1222
|
}());
|
|
1214
1223
|
export { RecebimentoOrdemCompraFormComponent };
|
|
1215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZWJpbWVudG8tb3JkZW0tY29tcHJhLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3ltcy1pbnRlZ3JhdGlvbi8iLCJzb3VyY2VzIjpbInNyYy9lcnAtc2VuaW9yL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS9mb3JtL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDeEYsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQW1CLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFVLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQVksTUFBTSxhQUFhLENBQUM7QUFDM0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0YsT0FBTyxFQUFFLFlB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Q0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWZXJpZmljYU5vdGFmaXNjYWwgfSBmcm9tICcuLi8uLi9jb3JlL3ZlcmlmaWNhLW5vdGEtZmlzY2FsL3ZlcmlmaWNhTm90YUZpc2NhbCc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybUZpZWxkLCBJVG9rZW4gfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0ICogYXMgX21vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBEaWFsb2dTZXJ2aWNlLCBNZXNzYWdlU2VydmljZSwgU29ydE1ldGEgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY29uY2F0TWFwLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmluYWxpemUsIG1hcCwgbWVyZ2VNYXAsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZ2V0TG9va3VwTGFiZWwsIG9uTG9va3VwUmVxdWVzdCwgb25TZWFyY2hSZXF1ZXN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2xvb2t1cC11dGlsc1wiO1xuaW1wb3J0IHsgZGlhbG9nQ29uZmlnLCBpc1ZhbGlkRmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBOb3RhRm9ybUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL25vdGEtZm9ybS9ub3RhLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBZ2VuZGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9hZ2VuZGEvYWdlbmRhXCI7XG5pbXBvcnQgeyBBZ2VuZGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEZXJpdmFjYW8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9kZXJpdmFjYW8vZGVyaXZhY2FvXCI7XG5pbXBvcnQgeyBEZXJpdmFjYW9TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZGVyaXZhY2FvL2Rlcml2YWNhby5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGaWxpYWwgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9maWxpYWwvZmlsaWFsXCI7XG5pbXBvcnQgeyBGaWxpYWxTZXJ2aWNlLCBQZXNxdWlzYXJGaWxpYWlzSW5wdXQgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9maWxpYWwvZmlsaWFsLnNlcnZpY2VcIjtcbmltcG9ydCB7IE9yZGVtQ29tcHJhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvb3JkZW0tY29tcHJhL29yZGVtLWNvbXByYVwiO1xuaW1wb3J0IHsgT3JkZW1Db21wcmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvb3JkZW0tY29tcHJhL29yZGVtLWNvbXByYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQZXNzb2FFbmRlcmVjbyB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS1lbmRlcmVjby9wZXNzb2EtZW5kZXJlY29cIjtcbmltcG9ydCB7IFBlc3NvYUVuZGVyZWNvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS1lbmRlcmVjby9wZXNzb2EtZW5kZXJlY28uc2VydmljZVwiO1xuaW1wb3J0IHsgUGVzc29hIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVzc29hL3Blc3NvYVwiO1xuaW1wb3J0IHsgUGVzc29hU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2Euc2VydmljZVwiO1xuaW1wb3J0IHsgUHJvZHV0byB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Byb2R1dG8vcHJvZHV0b1wiO1xuaW1wb3J0IHsgUHJvZHV0b1BhcmFtcywgUHJvZHV0b1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wcm9kdXRvL3Byb2R1dG8uc2VydmljZVwiO1xuaW1wb3J0IHsgUmVjZWJpbWVudG9PcmRlbUNvbXByYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS9yZWNlYmltZW50by1vcmRlbS1jb21wcmFcIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFEdG8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9yZWNlYmltZW50by1vcmRlbS1jb21wcmEvcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhLWR0b1wiO1xuaW1wb3J0IHsgUmVjZWJpbWVudG9PcmRlbUNvbXByYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9yZWNlYmltZW50by1vcmRlbS1jb21wcmEvcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhLnNlcnZpY2VcIjtcbmltcG9ydCB7IFNhZnJhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvc2FmcmEvc2FmcmFcIjtcbmltcG9ydCB7IFNhZnJhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3NhZnJhL3NhZnJhLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNwb3J0YWRvcmEvdHJhbnNwb3J0YWRvcmFcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zcG9ydGFkb3JhL3RyYW5zcG9ydGFkb3JhLnNlcnZpY2VcIjtcbmltcG9ydCB7IE5vdGFWYWxpZGF0b3JTZXJ2aWNlLCBQZXNxdWlzYXJEb2N1bWVudG9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi9jb3JlL25vdGEtdmFsaWRhdG9yLnNlcnZpY2VcIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFDaGVnYWRhVmVpY3Vsb092ZXJyaWRlIH0gZnJvbSBcIi4uL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1jaGVnYWRhLXZlaWN1bG8ub3ZlcnJpZGVcIjtcbmltcG9ydCB7IFN0YXR1c0FnZW5kYSB9IGZyb20gXCIuLy4uLy4uL2NvcmUvZW51bXMvc3RhdHVzLWFnZW5kYVwiO1xuaW1wb3J0IHsgT3JkZW1Db21wcmFGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi8uLi9vcmRlbS1jb21wcmEtZm9ybS9vcmRlbS1jb21wcmEtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXJwUHJvY2Vzc0RhdGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtcHJvY2Vzcy1kYXRhL2VycC1wcm9jZXNzLWRhdGFcIjtcbmltcG9ydCB7IEVycFByb2Nlc3NTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLXByb2Nlc3MtZGF0YS9lcnAtcHJvY2Vzcy1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFcnBGb3JtQ29uZmlnU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1mb3JtLWNvbmZpZy9lcnAtZm9ybS1jb25maWctc2VydmljZVwiO1xuaW1wb3J0IHsgT3JkZW1Db21wcmFEdG8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9vcmRlbS1jb21wcmEvb3JkZW0tY29tcHJhLWR0b1wiO1xuaW1wb3J0IHsgSGFzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvaGFzLWNoYW5nZS9oYXMtY2hhbmdlLXNlcnZpY2UnO1xuXG5jb25zdCBtb21lbnQgPSBfbW9tZW50O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuLi8uLi9lcnAtc2VuaW9yLnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb25maXJtYXRpb25TZXJ2aWNlXVxufSlcblxuZXhwb3J0IGNsYXNzIFJlY2ViaW1lbnRvT3JkZW1Db21wcmFGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gICAgZGVyaXZhY2FvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBkZXJpdmFjYW9TZWFyY2hHcmlkRGF0YTogRGVyaXZhY2FvW107XG4gICAgZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBkZXJpdmFjYW9BZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBkZXJpdmFjYW9Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIGRlcml2YWNhb0xvb2t1cFN1Z2dlc3Rpb25zOiBEZXJpdmFjYW9bXTtcbiAgICBkZXJpdmFjYW9TZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIGZpbGlhbFNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgZmlsaWFsU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgZmlsaWFsU2VhcmNoR3JpZERhdGE6IEZpbGlhbFtdO1xuICAgIGZpbGlhbExvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiZW1wcmVzYS5ub21lXCJdO1xuICAgIGZpbGlhbEFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiLCBcImVtcHJlc2Eubm9tZVwiXTtcbiAgICBmaWxpYWxMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIGZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zOiBGaWxpYWxbXTtcbiAgICBmaWxpYWxTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIGZvcm5lY2Vkb3JTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIGZvcm5lY2Vkb3JTZWFyY2hHcmlkRGF0YTogUGVzc29hW107XG4gICAgZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiY3BmQ25walwiXTtcbiAgICBmb3JuZWNlZG9yQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCJdO1xuICAgIGZvcm5lY2Vkb3JMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIGZvcm5lY2Vkb3JMb29rdXBTdWdnZXN0aW9uczogUGVzc29hW107XG4gICAgZm9ybmVjZWRvclNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgb3JkZW1Db21wcmFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIG9yZGVtQ29tcHJhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgb3JkZW1Db21wcmFTZWFyY2hHcmlkRGF0YTogT3JkZW1Db21wcmFbXTtcbiAgICBvcmRlbUNvbXByYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJlbXByZXNhLm5vbWVcIl07XG4gICAgb3JkZW1Db21wcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImVtcHJlc2Eubm9tZVwiLCBcImZpbGlhbC5ub21lXCIsIFwicGVzc29hLm5vbWVcIl07XG4gICAgb3JkZW1Db21wcmFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIG9yZGVtQ29tcHJhTG9va3VwU3VnZ2VzdGlvbnM6IE9yZGVtQ29tcHJhW107XG4gICAgb3JkZW1Db21wcmFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIG9yaWdlbU1lcmNhZG9yaWFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIG9yaWdlbU1lcmNhZG9yaWFTZWFyY2hHcmlkRGF0YTogUGVzc29hRW5kZXJlY29bXTtcbiAgICBvcmlnZW1NZXJjYWRvcmlhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcImVuZGVyZWNvXCJdO1xuICAgIG9yaWdlbU1lcmNhZG9yaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImVuZGVyZWNvXCIsIFwibnVtZXJvXCJdO1xuICAgIG9yaWdlbU1lcmNhZG9yaWFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIG9yaWdlbU1lcmNhZG9yaWFMb29rdXBTdWdnZXN0aW9uczogUGVzc29hRW5kZXJlY29bXTtcbiAgICBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBwcm9kdXRvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwcm9kdXRvU2VhcmNoR3JpZERhdGE6IFByb2R1dG9bXTtcbiAgICBwcm9kdXRvTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBwcm9kdXRvQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgcHJvZHV0b0xvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgcHJvZHV0b0xvb2t1cFN1Z2dlc3Rpb25zOiBQcm9kdXRvW107XG4gICAgcHJvZHV0b1NlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgc2FmcmFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHNhZnJhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgc2FmcmFTZWFyY2hHcmlkRGF0YTogU2FmcmFbXTtcbiAgICBzYWZyYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgc2FmcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcImRlc2NyaWNhb1wiXTtcbiAgICBzYWZyYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgc2FmcmFMb29rdXBTdWdnZXN0aW9uczogU2FmcmFbXTtcbiAgICBzYWZyYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgdHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgdHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRGF0YTogVHJhbnNwb3J0YWRvcmFbXTtcbiAgICB0cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJwZXNzb2Eubm9tZVwiLCBcInBlc3NvYS5jcGZDbnBqXCJdO1xuICAgIHRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJwZXNzb2Eubm9tZVwiLCBcInBlc3NvYS5jcGZDbnBqXCJdO1xuICAgIHRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICB0cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zOiBUcmFuc3BvcnRhZG9yYVtdO1xuICAgIHRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBkaXNhYmxlQnV0dG9uU2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY2hhdmVOb3RhRmlzY2FsOiBzdHJpbmc7XG5cbiAgICB0b3RhbEVpeG9zQ29udHJhdGFkb3M6IG51bWJlciA9IDA7XG4gICAgdG90YWxFaXhvc0NvbXBvc2ljYW86IG51bWJlciA9IDA7XG5cbiAgICBlcnJvQ2hhdmVOb3RhID0gZmFsc2U7XG4gICAgZXJyb0Zvcm5lY2Vkb3JlcyA9IGZhbHNlO1xuXG4gICAgcHVibGljIG5vdGFzVG9rZW5zOiBJVG9rZW5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yTm90YXNUb2tlbnM6IElUb2tlbltdID0gW107XG4gICAgcHVibGljIGZvcm5lY2Vkb3JOb3RhcyA9IFtdO1xuXG4gICAgcHJpdmF0ZSBmb3JtQ2FycmVnYWRvID0gZmFsc2U7XG5cbiAgICBvcmRlbUNvbXByYVNlbGVjaW9uYWRvOiBhbnkgPSBudWxsO1xuXG4gICAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgcHVibGljIHNhdmVBbmRJbml0QnV0dG9uOiBhbnk7XG4gICAgcHVibGljIGNyZWF0ZWRCeUVycDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHByaXZhdGUgYWdlbmRhOiBBZ2VuZGE7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgZXJwUHJvY2Vzc0RhdGE6IEVycFByb2Nlc3NEYXRhO1xuICAgIHByaXZhdGUgZW5hYmxlUmV2YWxpZGF0aW9uOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBvcmRlbnM6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmlsaWFsU2VydmljZTogRmlsaWFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwZXNzb2FTZXJ2aWNlOiBQZXNzb2FTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHByb2R1dG9TZXJ2aWNlOiBQcm9kdXRvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkZXJpdmFjYW9TZXJ2aWNlOiBEZXJpdmFjYW9TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zcG9ydGFkb3JhU2VydmljZTogVHJhbnNwb3J0YWRvcmFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG9yZGVtQ29tcHJhU2VydmljZTogT3JkZW1Db21wcmFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlY2ViaW1lbnRvT3JkZW1Db21wcmFTZXJ2aWNlOiBSZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIG9yaWdlbU1lcmNhZG9yaWFTZXJ2aWNlOiBQZXNzb2FFbmRlcmVjb1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2FmcmFTZXJ2aWNlOiBTYWZyYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3ZlcnJpZGU6IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFDaGVnYWRhVmVpY3Vsb092ZXJyaWRlLFxuICAgICAgICBwcml2YXRlIG5vdGFWYWxpZGF0b3JTZXJ2aWNlOiBOb3RhVmFsaWRhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWdlbmRhU2VydmljZTogQWdlbmRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnBQcm9jZXNzU2VydmljZTogRXJwUHJvY2Vzc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZXJwRm9ybUNvbmZpZ1NlcnZpY2U6IEVycEZvcm1Db25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZlcmlmaWNhTm90YUZpc2NhbDogVmVyaWZpY2FOb3RhZmlzY2FsLFxuICAgICAgICBwcml2YXRlIGhhc0NoYW5nZVNlcnZpY2U6IEhhc0NoYW5nZVNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXAoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoeyBhZ2VuZGEgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFnZW5kYSA9PSBcIm5ld1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJlRm9ybSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRSZWNlYmltZW50b09yZGVtQ29tcHJhKGFnZW5kYSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldCgnZmlsaWFsJylcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldCgnZm9ybmVjZWRvcmVzJylcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAgIC5nZXQoJ3RyYW5zcG9ydGFkb3JhJylcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuXG4gICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoRmllbGRzID0gdGhpcy5nZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yU2VhcmNoRmllbGRzID0gdGhpcy5nZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0T3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLnByb2R1dG9TZWFyY2hGaWVsZHMgPSB0aGlzLmdldFByb2R1dG9TZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5zYWZyYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0U2FmcmFTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5zYWZyYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFNhZnJhU2VhcmNoR3JpZEZpZWxkcygpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JkZW1Db21wcmFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldE9yZGVtQ29tcHJhRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JkZW1Db21wcmFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRPcmRlbUNvbXByYUdyaWRGaWVsZHMoKTtcblxuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNwb3J0YWRvcmEodGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQuY25waik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldEVtcHJlc2FGaWxpYWwoKTtcblxuICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudmVpY3VsbyA/IHRoaXMuYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICAgICAgY29uc3Qgc3RhdHVzQWdlbmRhID0gW1xuICAgICAgICAgICAgXCJBR1VBUkRBTkRPX0NPTkZJUk1BQ0FPX1NPTElDSVRBTlRFXCIsXG4gICAgICAgICAgICBcIkFHRU5EQURPXCIsXG4gICAgICAgICAgICBcIkFHVUFSREFORE9fQ09ORklSTUFDQU9cIixcbiAgICAgICAgICAgIFwiRU1fRVhFQ1VDQU9cIixcbiAgICAgICAgICAgIFwiUkVKRUlUQURPX1BPUl9WQUxJREFDQU9cIlxuICAgICAgICBdO1xuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgIXN0YXR1c0FnZW5kYS5pbmNsdWRlcyh0aGlzLmFnZW5kYS5zdGF0dXMpKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvblNhdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKTtcblxuICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lcnBQcm9jZXNzRGF0YSA9IG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmVycEZvcm1Db25maWdTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lbmFibGVSZXZhbGlkYXRpb24gPSBtZXNzYWdlKTtcbiAgICAgICAgdGhpcy52ZXJpZmljYVNlVGVtQWx0ZXJhY2FvKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJpZmljYVNlVGVtQWx0ZXJhY2FvKCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm92ZXJyaWRlLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbml0Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5vdmVycmlkZS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKSB7XG4gICAgICAgIGlmICh0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS5jcmVhdGVkQnlFcnApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZmlsaWFsJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdwcm9kdXRvJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdkZXJpdmFjYW8nKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc3BvcnRhZG9yYVwiKS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgndHJhbnNwb3J0YWRvcmEnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZ3VyZUZvcm0oKSB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzKHRoaXMuZm9ybUdyb3VwLCBcImZpbGlhbFwiLCB0aGlzLm9uRmlsaWFsVmFsdWVDaGFuZ2UpO1xuICAgICAgICBjb25zdCBnZXRGaWx0ZXJRdWVyeVByb2R1dG8gPSAodmFsdWU6IGFueSkgPT4gYHByb2R1dG8uaWQgZXEgJyR7dmFsdWUuaWR9JyBhbmQgc2l0dWFjYW8gZXEgJ0FUSVZPJ2A7XG4gICAgICAgIHRoaXMuY2hlY2tWYWx1ZXNDaGFuZ2VzKHRoaXMuZm9ybUdyb3VwLCBcInByb2R1dG9cIiwgXCJkZXJpdmFjYW9cIiwgdGhpcy5kZXJpdmFjYW9TZXJ2aWNlLCBnZXRGaWx0ZXJRdWVyeVByb2R1dG8sXG4gICAgICAgICAgICBbJ2NvZGlnbycsICdkZXNjcmljYW8nXSwgKHZhbCkgPT4gRGVyaXZhY2FvLmZyb21EdG8odmFsKSwgIDEwLCB0cnVlLCB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGZvcm5lY2Vkb3JlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEhZm9ybmVjZWRvcmVzICYmIGZvcm5lY2Vkb3Jlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycERpc2FibGVGb3JtKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RW1wcmVzYUZpbGlhbCgpIHtcbiAgICAgICAgY29uc3QgcGxhbnRhID0gdGhpcy5hZ2VuZGEucGxhbnRhIHx8IHsgY25wajogW10gfTtcbiAgICAgICAgaWYgKHBsYW50YS5jbnBqLmxlbmd0aCAhPT0gMSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gYHBlc3NvYS5jcGZDbnBqIGVxICcke3BsYW50YS5jbnBqWzBdfSdgO1xuICAgICAgICB0aGlzLmZpbGlhbFNlcnZpY2UubGlzdCh7IGZpbHRlclF1ZXJ5LCBwYWdlOiAwLCBzaXplOiAxMCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGlhbCA9IGNvbnRlbnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbXByZXNhID0gY29udGVudHNbMF0uZW1wcmVzYTtcbiAgICAgICAgICAgICAgICAgICAgZmlsaWFsLmxhYmVsID0gYCR7ZmlsaWFsLmNvZGlnb30gLSAke2ZpbGlhbC5ub21lfWA7XG4gICAgICAgICAgICAgICAgICAgIGVtcHJlc2EubGFiZWwgPSBgJHtlbXByZXNhLmNvZGlnb30gLSAke2VtcHJlc2Eubm9tZX1gO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2VtcHJlc2EnKS5zZXRWYWx1ZShlbXByZXNhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWxpYWwnKS5zZXRWYWx1ZShmaWxpYWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpbGlhbCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3Byb2R1dG8nKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdvcmRlbUNvbXByYScpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tWYWx1ZXNDaGFuZ2VzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBmb3JtQ29udHJvbFVwZGF0ZWQ6IHN0cmluZywgZm9ybUNvbnRyb2xEZXBlbmRlbnQ6IHN0cmluZywgc2VydmljZTogYW55LCBnZXRGaWx0ZXJRdWVyeTogYW55LFxuICAgICAgICB2YXJpYWJsZXM6IGFueSwgZHRvQ29udmVydGVyOiAodmFsOiBhbnkpID0+IGFueSwgcXVlcnlTaXplOiBudW1iZXIgPSAxLCBpc0NoYW5nZVZhbGlkYXRvcnM/OiBib29sZWFuLCBjbGVhckZvcm1Db250cm9sRGVwZW5kZW50PzogYm9vbGVhbikge1xuICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sVXBkYXRlZClcbiAgICAgICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NoYW5nZVZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2xEZXBlbmRlbnQpLnNldFZhbGlkYXRvcnModmFsdWUgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogVmFsaWRhdG9ycy5udWxsVmFsaWRhdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xlYXJGb3JtQ29udHJvbERlcGVuZGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSBnZXRGaWx0ZXJRdWVyeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogcXVlcnlTaXplIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRzIHx8ICFjb250ZW50cy5sZW5ndGggfHwgY29udGVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHNbMF0ubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGdldExvb2t1cExhYmVsKGNvbnRlbnRzWzBdLCB2YXJpYWJsZXMsICcgLSAnLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2xEZXBlbmRlbnQpLnNldFZhbHVlKGR0b0NvbnZlcnRlcihjb250ZW50c1swXSkpO1xuICAgICAgICAgICAgICAgIH0gXG5cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQmx1ckNoYXZlTm90YUZpc2NhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmVyaWZpY2FOb3RhRmlzY2FsLnZlcmlmaWNhU2VOb3RhRmlzY2FsRXN0YUR1cGxpY2FkYSh0aGlzLmNoYXZlTm90YUZpc2NhbCwgIHRoaXMub3JkZW5zLCB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2VucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlTm90YUVycm9yKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jaGF2ZU5vdGFGaXNjYWw7XG4gICAgICAgIGlmICghIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUJ1c2NhbmRvTm90YSgpO1xuXG4gICAgICAgICAgICB0aGlzLm5vdGFWYWxpZGF0b3JTZXJ2aWNlLnBlc3F1aXNhckRvY3VtZW50b1ZhbGlkYU5vdGFFbVVzbyh7XG4gICAgICAgICAgICAgICAgZmlsaWFsSWQ6ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLmlkKSB8fCBudWxsLFxuICAgICAgICAgICAgICAgIGNoYXZlRG9jdW1lbnRvOiB2YWx1ZS50cmltKCkgfHwgXCJcIlxuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSlcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRpY2lvbmFyTm92YU5vdGEocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbHVlQ2hhbmdlcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCwgcGF0aDogc3RyaW5nLCBzdWJzY3JpYmU6IGFueSkge1xuICAgICAgICBmb3JtR3JvdXAuZ2V0KHBhdGgpXG4gICAgICAgICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gc3Vic2NyaWJlKHZhbHVlLCBmb3JtR3JvdXApKTtcbiAgICB9XG5cbiAgICAvKipQUk9EVVRPIERFUEVOREUgREUgRklMSUFMLiBPUkRFTSBDT01QUkEgREVQRU5ERSBERSBGSUxJQUwgKi9cbiAgICBwcml2YXRlIG9uRmlsaWFsVmFsdWVDaGFuZ2UgPSAoZmlsaWFsOiBGaWxpYWwsIGZvcm1Hcm91cDogRm9ybUdyb3VwKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlRm9ybUdyb3VwVmFsdWUoZmlsaWFsLCBcInByb2R1dG9cIiwgZm9ybUdyb3VwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRm9ybmVjZWRvckNoYW5nZSA9IChmb3JuZWNlZG9yOiBQZXNzb2FFbmRlcmVjbywgZm9ybUdyb3VwOiBGb3JtR3JvdXApID0+IHtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb3JtR3JvdXBWYWx1ZShmb3JuZWNlZG9yLCBcIm9yaWdlbU1lcmNhZG9yaWFcIiwgZm9ybUdyb3VwKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb3JtR3JvdXBWYWx1ZShmb3JuZWNlZG9yLCBcIm9yZGVuc1wiLCBmb3JtR3JvdXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlRm9ybUdyb3VwVmFsdWUoaXNBbnk6IGFueSwgZm9ybUNvbnRyb2w6IHN0cmluZywgZm9ybUdyb3VwOiBhbnkpIHtcbiAgICAgICAgaWYgKCFpc0FueSkge1xuICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbCkuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2wpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2wpLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWNlYmltZW50b09yZGVtQ29tcHJhKGFnZW5kYUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZS5saXN0KHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5OiBgYWdlbmRhLmlkIGVxICcke2FnZW5kYUlkfSdgLFxuICAgICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICAgIHBhZ2U6IDBcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbnRlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJlRm9ybSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb250cmF0YWRvcyA9IGNvbnRlbnRzWzBdLmVpeG9zIHx8IDA7XG4gICAgICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gY29udGVudHNbMF0uYWdlbmRhICYmIGNvbnRlbnRzWzBdLmFnZW5kYS52ZWljdWxvIFxuICAgICAgICAgICAgICAgID8gY29udGVudHNbMF0uYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlY2ViaW1lbnRvT3JkZW1Db21wcmE6IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFEdG8gPSBSZWNlYmltZW50b09yZGVtQ29tcHJhLmZyb21EdG8oY29udGVudHNbMF0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHJlY2ViaW1lbnRvT3JkZW1Db21wcmEpO1xuXG4gICAgICAgICAgICByZWNlYmltZW50b09yZGVtQ29tcHJhLmZvcm5lY2Vkb3Jlcy5mb3JFYWNoKGZvcm5lY2Vkb3IgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3JGb3JtKGZvcm5lY2Vkb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzKCkucHVzaChmb3JtKTtcblxuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3Iub3JkZW5zLmZvckVhY2gob3JkZW1Db21wcmEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmRlbUNvbXByYUZvcm0gPSB0aGlzLmdldE9yZGVtQ29tcHJhRm9ybShvcmRlbUNvbXByYSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3JkZW5zQ29tcHJhKGZvcm0pLnB1c2gob3JkZW1Db21wcmFGb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgb3JkZW1Db21wcmEubm90YXMuZm9yRWFjaChub3RhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdGFGb3JtID0gdGhpcy5nZXROb3RhRm9ybShub3RhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm90YXMob3JkZW1Db21wcmFGb3JtKS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJlRm9ybSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxpYWxMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLCBwYWdpbmE6IHsgbGltaXQ6IDEwLCBvZmZzZXQ6IDAgfSB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dCk7XG5cbiAgICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdEZpbGlhaXMoZmlsdGVySW5wdXQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5maWxpYWlzLm1hcCgoZmlsaWFsOiBhbnkpID0+IEZpbGlhbC5mcm9tRHRvKGZpbGlhbCkpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZpbGlhbFNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydDogU29ydE1ldGFbXSA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYgeyBjYW1wbzogc29ydFswXS5maWVsZCwgb3JkZW5hY2FvOiBzb3J0WzBdLm9yZGVyID4gMCA/ICdBc2MnIDogJ0Rlc2MnIH07XG4gICAgICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IGAke3ZhbHVlfWAucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfSwgeyBjbnBqczogdGhpcy5hZ2VuZGEucGxhbnRhLmNucGosIHBhZ2luYTogeyBsaW1pdDogcm93cywgb2Zmc2V0OiBwYWdlLCBsaXN0YU9yZGVuYWNhbzogc29ydEZvcm1hdHRlZCA/IFsgeyAuLi4oc29ydEZvcm1hdHRlZCkgfSBdIDogbnVsbCB9IH0gYXMgUGVzcXVpc2FyRmlsaWFpc0lucHV0KTtcblxuICAgICAgICB0aGlzLmZpbGlhbFNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0RmlsaWFpcyhmaWx0ZXJJbnB1dClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hHcmlkRGF0YSA9IGxpc3QuZmlsaWFpcy5tYXAoRmlsaWFsLmZyb21EdG8pO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC5xdGRUb3RhbFJlZ2lzdHJvcztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKkZJTFRSQSBGT1JORUNFRE9SIEVRIFRSVUUgKi9cbiAgICBwdWJsaWMgb25Gb3JuZWNlZG9yTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIG9uTG9va3VwUmVxdWVzdCh0aGlzLmZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMsIHRoaXMuZm9ybmVjZWRvckxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMuZm9ybmVjZWRvckxvb2t1cFNlcGFyYXRvciwgdGhpcy5wZXNzb2FTZXJ2aWNlLCBcbiAgICAgICAgICAgIHZhbHVlLCBgIGZvcm5lY2Vkb3IgZXEgdHJ1ZSBgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHRoaXMuZm9ybmVjZWRvckxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cyk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRm9ybmVjZWRvclNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBvblNlYXJjaFJlcXVlc3QodGhpcy5mb3JuZWNlZG9yU2VhcmNoRmllbGRzLCB0aGlzLmZvcm5lY2Vkb3JMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLmZvcm5lY2Vkb3JMb29rdXBTZXBhcmF0b3IsIHRoaXMucGVzc29hU2VydmljZSwgXG4gICAgICAgICAgICBldmVudCwgYCBmb3JuZWNlZG9yIGVxIHRydWUgYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKkZJTFRSQSBPUklHRU0gTUVSQ0FET1JJQSBQRUxPIEZPUk5FQ0VET1IgU0VMRUNJT05BRE8gKi9cbiAgICBwdWJsaWMgb25PcmlnZW1NZXJjYWRvcmlhTG9va3VwUmVxdWVzdChmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIG9uTG9va3VwUmVxdWVzdCh0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hGaWVsZHMsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFNlcGFyYXRvciwgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VydmljZSwgXG4gICAgICAgICAgICB2YWx1ZSwgYCBwZXNzb2EuaWQgZXEgJyR7Zm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZS5pZH0nIGApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk9yaWdlbU1lcmNhZG9yaWFTZWFyY2hSZXF1ZXN0KGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIGV2ZW50OiBhbnkpIHtcbiAgICAgICAgb25TZWFyY2hSZXF1ZXN0KHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkcywgdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy5vcmlnZW1NZXJjYWRvcmlhTG9va3VwU2VwYXJhdG9yLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZXJ2aWNlLCBldmVudCxcbiAgICAgICAgICAgIGAgcGVzc29hLmlkIGVxICcke2Zvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUuaWR9JyBgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqRklMVFJBIERFUklWQUNBTyBQRUxPIFBST0RVVE8gKi9cbiAgICBwdWJsaWMgb25EZXJpdmFjYW9Mb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0KHRoaXMuZGVyaXZhY2FvU2VhcmNoRmllbGRzLCB0aGlzLmRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuZGVyaXZhY2FvQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9Mb29rdXBTZXBhcmF0b3IsIHRoaXMuZGVyaXZhY2FvU2VydmljZSwgdmFsdWUsXG4gICAgICAgICAgICBgIHByb2R1dG8uaWQgZXEgJyR7dGhpcy5mb3JtR3JvdXAuZ2V0KFwicHJvZHV0b1wiKS52YWx1ZS5pZH0nIGApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGVyaXZhY2FvU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdCh0aGlzLmRlcml2YWNhb1NlYXJjaEZpZWxkcywgdGhpcy5kZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9BZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMuZGVyaXZhY2FvTG9va3VwU2VwYXJhdG9yLCB0aGlzLmRlcml2YWNhb1NlcnZpY2UsIGV2ZW50LFxuICAgICAgICAgICAgYCBwcm9kdXRvLmlkIGVxICcke3RoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWUuaWR9JyBgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcml2YWNhb1NlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLmRlcml2YWNhb1NlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk9yZGVtQ29tcHJhTG9va3VwUmVxdWVzdChmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIG9uTG9va3VwUmVxdWVzdCh0aGlzLm9yZGVtQ29tcHJhU2VhcmNoRmllbGRzLCB0aGlzLm9yZGVtQ29tcHJhTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5vcmRlbUNvbXByYUFkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMub3JkZW1Db21wcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMub3JkZW1Db21wcmFTZXJ2aWNlLCB2YWx1ZSxcbiAgICAgICAgICAgIGBmaWxpYWwuaWQgZXEgJyR7dGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLmlkfScgYW5kIHBlc3NvYS5pZCBlcSAnJHtmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLmlkfSdgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVtQ29tcHJhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uT3JkZW1Db21wcmFTZWFyY2hSZXF1ZXN0KGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIGV2ZW50OiBhbnkpIHtcbiAgICAgICAgb25TZWFyY2hSZXF1ZXN0KHRoaXMub3JkZW1Db21wcmFTZWFyY2hGaWVsZHMsIHRoaXMub3JkZW1Db21wcmFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5vcmRlbUNvbXByYUFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy5vcmRlbUNvbXByYUxvb2t1cFNlcGFyYXRvciwgdGhpcy5vcmRlbUNvbXByYVNlcnZpY2UsIGV2ZW50LFxuICAgICAgICAgICAgYGZpbGlhbC5pZCBlcSAnJHt0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUuaWR9JyBhbmQgcGVzc29hLmlkIGVxICcke2Zvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUuaWR9J2ApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3JkZW1Db21wcmFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlbUNvbXByYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRPcmRlbUNvbXByYShmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgICAgICAgLm9wZW4oT3JkZW1Db21wcmFGb3JtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgLi4uZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogJ0FkaWNpb25hciBPcmRlbSBkZSBDb21wcmEnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYWdlbmRhOiB0aGlzLmFnZW5kYSxcbiAgICAgICAgICAgICAgICAgICAgZmlsaWFsOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3I6IGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVuczogZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JkZW5zXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub25DbG9zZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKG9yZGVtQ29tcHJhOiBhbnkpID0+IHRoaXMub25PcmRlbUNvbXByYVNhdmVkKG9yZGVtQ29tcHJhLCBmb3JuZWNlZG9yRm9ybSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblByb2R1dG9Mb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsaWFsID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlO1xuICAgICAgICBjb25zdCB0aXBvQWdlbmRhbWVudG8gPSB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG87XG5cbiAgICAgICAgdGhpcy5wcm9kdXRvU2VydmljZS5saXN0UHJvZHV0b3Moe1xuICAgICAgICAgICAgcGVzcXVpc2E6IHZhbHVlLFxuICAgICAgICAgICAgZW1wcmVzYUlkOiAhIWZpbGlhbCA/IGZpbGlhbC5lbXByZXNhLmlkIDogbnVsbCxcbiAgICAgICAgICAgIGZpbGlhbElkOiAhIWZpbGlhbCA/IGZpbGlhbC5pZCA6IG51bGwsXG4gICAgICAgICAgICB0aXBvQWdlbmRhbWVudG9JZDogISF0aXBvQWdlbmRhbWVudG8gPyB0aXBvQWdlbmRhbWVudG8uaWQgOiBudWxsLFxuICAgICAgICAgICAgc2l0dWFjYW86ICdBVElWTycsXG4gICAgICAgICAgICBwYWdpbmE6IHtcbiAgICAgICAgICAgICAgICBsaW1pdDogMTAwLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHRoaXMucHJvZHV0b0xvb2t1cFN1Z2dlc3Rpb25zID0gcmVzLnByb2R1dG9zLm1hcChQcm9kdXRvLmZyb21EdG8pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qcm9kdXRvU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0OiBTb3J0TWV0YVtdID0gbXVsdGlTb3J0TWV0YTtcbiAgICAgICAgY29uc3Qgc29ydEZvcm1hdHRlZCA9ICEhKHNvcnQgfHwgW10pLmxlbmd0aCAmJiB7IGNhbXBvOiBzb3J0WzBdLmZpZWxkLCBvcmRlbmFjYW86IHNvcnRbMF0ub3JkZXIgPiAwID8gJ0FzYycgOiAnRGVzYycgfTtcbiAgICAgICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldFByb2R1dG9TZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IGAke3ZhbHVlfWAucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfSwgeyBwYWdpbmE6IHsgbGltaXQ6IHJvd3MsIG9mZnNldDogcGFnZSwgbGlzdGFPcmRlbmFjYW86IHNvcnRGb3JtYXR0ZWQgPyBbIHsgLi4uKHNvcnRGb3JtYXR0ZWQpIH0gXSA6IG51bGwgfSB9IGFzIFByb2R1dG9QYXJhbXMpO1xuXG4gICAgICAgIGNvbnN0IGZpbGlhbCA9IHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZTtcbiAgICAgICAgY29uc3QgdGlwb0FnZW5kYW1lbnRvID0gdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvO1xuXG4gICAgICAgIHRoaXMucHJvZHV0b1NlcnZpY2UubGlzdFByb2R1dG9zKHtcbiAgICAgICAgICAgIC4uLmZpbHRlcklucHV0LFxuICAgICAgICAgICAgZW1wcmVzYUlkOiAhIWZpbGlhbCA/IGZpbGlhbC5lbXByZXNhLmlkIDogbnVsbCxcbiAgICAgICAgICAgIGZpbGlhbElkOiAhIWZpbGlhbCA/IGZpbGlhbC5pZCA6IG51bGwsXG4gICAgICAgICAgICBzaXR1YWNhbzogJ0FUSVZPJyxcbiAgICAgICAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOiAhIXRpcG9BZ2VuZGFtZW50byA/IHRpcG9BZ2VuZGFtZW50by5pZCA6IG51bGxcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2R1dG9TZWFyY2hUb3RhbFJlY29yZHMgPSByZXMucXRkVG90YWxSZWdpc3Ryb3M7XG4gICAgICAgICAgICB0aGlzLnByb2R1dG9TZWFyY2hHcmlkRGF0YSA9IHJlcy5wcm9kdXRvcy5tYXAoUHJvZHV0by5mcm9tRHRvKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2FmcmFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0KHRoaXMuc2FmcmFTZWFyY2hGaWVsZHMsIHRoaXMuc2FmcmFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5zYWZyYUFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy5zYWZyYUxvb2t1cFNlcGFyYXRvciwgdGhpcy5zYWZyYVNlcnZpY2UsIHZhbHVlKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhZnJhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2FmcmFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgb25TZWFyY2hSZXF1ZXN0KHRoaXMuc2FmcmFTZWFyY2hGaWVsZHMsIHRoaXMuc2FmcmFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5zYWZyYUFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy5zYWZyYUxvb2t1cFNlcGFyYXRvciwgdGhpcy5zYWZyYVNlcnZpY2UsIGV2ZW50KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhZnJhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2FmcmFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UcmFuc3BvcnRhZG9yYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcywgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMsIFxuICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvciwgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2UsIHZhbHVlKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgb25TZWFyY2hSZXF1ZXN0KHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLCBcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlLCBldmVudClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFRyYW5zcG9ydGFkb3JhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjbnBqID0gdmFsdWUucmVwbGFjZSgvXFwuL2csICcnKS5yZXBsYWNlKC9cXC8vZywgJycpLnJlcGxhY2UoL1xcLS9nLCAnJyk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtjbnBqfSdgO1xuICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2VcbiAgICAgICAgICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBwYWdlOiAwLCBzaXplOiAxMCB9KVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1swXS5sYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZ2V0TG9va3VwTGFiZWwoY29udGVudHNbMF0sIFsnY29kaWdvJywgJ3Blc3NvYS5ub21lJ10sICcgLSAnLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3RyYW5zcG9ydGFkb3JhJykuc2V0VmFsdWUoY29udGVudHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlKHN0YXJ0PzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2FnZW5kYScpLnNldFZhbHVlKHRoaXMuYWdlbmRhKTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtR3JvdXApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvRm9ybmVjZWRvcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNOZXcoKSAgfHwgIXRoaXMuZW5hYmxlUmV2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zYXZlQW5kSW5pdChzdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVycFByb2Nlc3NEYXRhID0gdGhpcy5lcnBQcm9jZXNzU2VydmljZS5idWlsZGVyRXJwUHJvY2Vzc0RhdGFWYWxpZGFOb3RhTmFPcmRlbUNvbXByYSh0aGlzLmVycFByb2Nlc3NEYXRhLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgIHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuY2hhbmdlRGF0YUVycCh0aGlzLmVycFByb2Nlc3NEYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgICAuY2hlY2FyUmV2YWxpZGFjYW8odGhpcy5lcnBQcm9jZXNzRGF0YSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UucmVxdWVyUmV2YWxpZGFjYW8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dWFsaXphQWdlbmRhUGFyYVJlamVpdGFkb1BvclZhbGlkYWNhbygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlQW5kSW5pdChzdGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXR1YWxpemFBZ2VuZGFQYXJhUmVqZWl0YWRvUG9yVmFsaWRhY2FvKCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX3RpdGxlXCIpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5wYXRpby5hZ2VuZGFfcmV2YWxpZGFjYW9fbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5kYS5zdGF0dXMgPSBTdGF0dXNBZ2VuZGEuUkVKRUlUQURPX1BPUl9WQUxJREFDQU87XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGEubW90b3Jpc3RhID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLm1vdG9yaXN0YUlkfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5kYS52ZWljdWxvID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLnZlaWN1bG9JZH07XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5hdHVhbGl6YXJBZ2VuZGEodGhpcy5hZ2VuZGEpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKF8pID0+IHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2NoZWdhZGEtdmVpY3Vsb1wiXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWplY3Q6ICgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVBbmRJbml0KHN0YXJ0OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImlkXCIpLnNldFZhbHVlKHZhbHVlLmlkIHx8IG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICYmIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbi5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3VjY2Vzc01lc3NhZ2UoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIHNldmVyaXR5OiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJzYXZlZF9tZXNzYWdlX3RpdGxlXCIpLFxuICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwic2F2ZWRfbWVzc2FnZV9jb250ZW50XCIpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNOZXcoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5mb3JtR3JvdXAudmFsdWUuaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZvcm5lY2Vkb3IoZGF0YT86IGFueSkge1xuICAgICAgICB0aGlzLmVycm9Gb3JuZWNlZG9yZXMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9IHRoaXMuZ2V0Rm9ybmVjZWRvckZvcm0oZGF0YSk7XG4gICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzKCkucHVzaChmb3JuZWNlZG9yKTtcbiAgICAgICAgcmV0dXJuIGZvcm5lY2Vkb3I7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZvcm5lY2Vkb3IoY29udHJvbDogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX2Zvcm5lY2Vkb3JfaGVhZGVyXCIpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX2Zvcm5lY2Vkb3JfbWVzc2FnZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGb3JuZWNlZG9yZXMoKS5jb250cm9scy5pbmRleE9mKGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzKCkucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybmVjZWRvckZvcm0oZGF0YTogYW55ID0ge30pIHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBmb3JuZWNlZG9yOiBbZGF0YS5mb3JuZWNlZG9yLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIG9yaWdlbU1lcmNhZG9yaWE6IFtkYXRhLm9yaWdlbU1lcmNhZG9yaWFdLFxuICAgICAgICAgICAgb3JkZW5zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZXMoZm9ybUdyb3VwLCBcImZvcm5lY2Vkb3JcIiwgdGhpcy5vbkZvcm5lY2Vkb3JDaGFuZ2UpO1xuXG4gICAgICAgIGNvbnN0IGdldEZpbHRlclF1ZXJ5Rm9ybmVjZWRvciA9ICh2YWx1ZTogYW55KSA9PiBgcGVzc29hLmlkIGVxICcke3ZhbHVlLmlkfSdgO1xuICAgICAgICB0aGlzLmNoZWNrVmFsdWVzQ2hhbmdlcyhcbiAgICAgICAgICAgIGZvcm1Hcm91cCwgXCJmb3JuZWNlZG9yXCIsIFwib3JpZ2VtTWVyY2Fkb3JpYVwiLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZXJ2aWNlLFxuICAgICAgICAgICAgZ2V0RmlsdGVyUXVlcnlGb3JuZWNlZG9yLCBbJ2NvZGlnbycsICdlbmRlcmVjbyddLCAodmFsKSA9PiBQZXNzb2FFbmRlcmVjby5mcm9tRHRvKHZhbCksIDEwLCBmYWxzZSwgdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBmb3JtR3JvdXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm5lY2Vkb3JlcygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Tm90YXMoZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcbiAgICAgICAgcmV0dXJuIChmb3JtR3JvdXAuZ2V0KFwibm90YXNcIikgYXMgRm9ybUFycmF5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTm90YShmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihOb3RhRm9ybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZGljaW9uYXJfbm90YVwiKSxcbiAgICAgICAgICAgIC4uLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBmb3JuZWNlZG9yOiBmb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZSxcbiAgICAgICAgICAgICAgICBwcm9kdXRvOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIGZpbGlhbDogdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3JOb3Rhc1Rva2VuczogdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMsXG4gICAgICAgICAgICAgICAgb3JkZW5zOiB0aGlzLm9yZGVucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uQ2xvc2VcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSlcbiAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLm9uTm90YVNhdmVkKHZhbHVlLCBmb3JtR3JvdXApKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3Zlck5vdGEoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgb3JkZW1Db21wcmFGb3JtOiBGb3JtR3JvdXAsIG5vdGFGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfbm90YV9oZWFkZXJcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfbm90YV9tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZW1Db21wcmFJZCA9IG9yZGVtQ29tcHJhRm9ybVtcInZhbHVlXCJdW1wib3JkZW1Db21wcmFcIl1bXCJpZFwiXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtLCBvcmRlbUNvbXByYUlkKS5jb250cm9scy5pbmRleE9mKG5vdGFGb3JtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldE5vdGFzRnJvbU9yZGVucyhmb3JuZWNlZG9yRm9ybSwgb3JkZW1Db21wcmFJZCkucmVtb3ZlQXQoaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90YSA9IG5vdGFGb3JtW1widmFsdWVcIl07XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBub3RhLmNoYXZlTm90YUZpc2NhbCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG5vdGEubnVtZXJvTm90YUZpc2NhbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IG5vdGEuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBzZXJpZU5vdGFGaXNjYWw6IG5vdGEuc2VyaWVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogbm90YS5zZXJpZUxlZ2FsTm90YUZpc2NhbCxcbiAgICAgICAgICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogbm90YS5udW1lcm9Ob3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0J1dHRvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5hZ2VuZGEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuQUdFTkRBRE8sXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuQUdVQVJEQU5ET19DT05GSVJNQUNBTyxcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5BR1VBUkRBTkRPX0NPTkZJUk1BQ0FPX1NPTElDSVRBTlRFLFxuICAgICAgICAgICAgU3RhdHVzQWdlbmRhLlJFSkVJVEFET19QT1JfVkFMSURBQ0FPXG4gICAgICAgIF0uaW5jbHVkZXModGhpcy5hZ2VuZGEuc3RhdHVzIGFzIFN0YXR1c0FnZW5kYSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVBZGljaW9uYXJOb3RhKCkge1xuICAgICAgICBpZiAodGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvID09PSBudWxsIHx8IHRoaXMub3JkZW1Db21wcmFTZWxlY2lvbmFkbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZXJPcmRlbUNvbXByYShmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBvcmRlbUNvbXByYUZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9vcmRlbV9jb21wcmFfaGVhZGVyXCIpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX29yZGVtX2NvbXByYV9tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZW5zQ29tcHJhRm9ybSA9IHRoaXMuZ2V0T3JkZW5zQ29tcHJhKGZvcm5lY2Vkb3JGb3JtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IG9yZGVuc0NvbXByYUZvcm0uY29udHJvbHMuaW5kZXhPZihvcmRlbUNvbXByYUZvcm0pO1xuICAgICAgICAgICAgICAgIG9yZGVuc0NvbXByYUZvcm0ucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uT3JkZW1Db21wcmFTYXZlZChvcmRlbUNvbXByYTogYW55LCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIGNvbnN0IG9yZGVtQ29tcHJhRm9ybSA9IHRoaXMuZ2V0T3JkZW1Db21wcmFGb3JtKHsgb3JkZW1Db21wcmEgOiBvcmRlbUNvbXByYSB9KTtcbiAgICAgICAgdGhpcy5nZXRPcmRlbnNDb21wcmEoZm9ybmVjZWRvckZvcm0pLnB1c2gob3JkZW1Db21wcmFGb3JtKTtcbiAgICAgICAgdGhpcy5nZXRGb3JuZWNlZG9yQnlPcmRlbUNvbXByYShvcmRlbUNvbXByYSwgZm9ybmVjZWRvckZvcm0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybmVjZWRvckJ5T3JkZW1Db21wcmEob3JkZW1Db21wcmE6IE9yZGVtQ29tcHJhRHRvLCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMucGVzc29hU2VydmljZS5saXN0KHsgc2l6ZTogMSwgcGFnZTogMCwgZmlsdGVyUXVlcnk6IGBpZCBlcSAnJHtvcmRlbUNvbXByYS5wZXNzb2EuaWR9J2AgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIG1hcCgoeyBjb250ZW50cyB9KSA9PiAoY29udGVudHMgfHwgW10pLmxlbmd0aCAmJiBjb250ZW50c1swXSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHBlc3NvYSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS5zZXRWYWx1ZShQZXNzb2EuZnJvbUR0byhwZXNzb2EpKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldE9yZGVuc0NvbXByYShmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMub3JkZW5zID0gZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JkZW5zXCIpO1xuICAgICAgICByZXR1cm4gZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JkZW5zXCIpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtOiBBYnN0cmFjdENvbnRyb2wsIG9yZGVtQ29tcHJhSWQ6IGFueSkge1xuICAgICAgICBsZXQgb3JkZW5zRm9ybVNlbGVjaW9uYWRvID0gbnVsbDtcbiAgICAgICAgY29uc3Qgb3JkZW5zQ29tcHJhRm9ybSA9IGZvcm5lY2Vkb3JGb3JtW1wiY29udHJvbHNcIl1bXCJvcmRlbnNcIl1bXCJjb250cm9sc1wiXTtcblxuICAgICAgICBmb3IgKGxldCBvcmRlbUNvbXByYUZvcm0gb2Ygb3JkZW5zQ29tcHJhRm9ybSkge1xuICAgICAgICAgICAgaWYgKG9yZGVtQ29tcHJhRm9ybVtcImNvbnRyb2xzXCJdW1wib3JkZW1Db21wcmFcIl1bXCJ2YWx1ZVwiXS5pZCA9PT0gb3JkZW1Db21wcmFJZCkge1xuICAgICAgICAgICAgICAgIG9yZGVuc0Zvcm1TZWxlY2lvbmFkbyA9IG9yZGVtQ29tcHJhRm9ybVtcImNvbnRyb2xzXCJdW1wibm90YXNcIl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3JkZW5zRm9ybVNlbGVjaW9uYWRvIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRm9ybmVjZWRvck5vdGFzVG9rZW5FbU9yZGVtQ29tcHJhKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIHRva2VuOiBJVG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMub3JkZW1Db21wcmFTZWxlY2lvbmFkbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbU9yZGVtQ29tcHJhTmFvU2VsZWNpb25hZG8oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vdGFzID0gdGhpcy5mb3JuZWNlZG9yTm90YXMuZmlsdGVyKGZvcm5lY2Vkb3JOb3RhID0+IGZvcm5lY2Vkb3JOb3RhLmNoYXZlTm90YUZpc2NhbCA9PT0gdG9rZW4uaWQpO1xuICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbU9yZGVucyhmb3JuZWNlZG9yRm9ybSwgdGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgaWYgKG5vdGFzRm9ybSAhPT0gbnVsbCAmJiBub3Rhc1swXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2godGhpcy5nZXROb3RhRm9ybShub3Rhc1swXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVGb3JuZWNlZG9yTm90YXNUb2tlbkRhT3JkZW1Db21wcmEodG9rZW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGb3JuZWNlZG9yTm90YXNUb2tlbkRhT3JkZW1Db21wcmEodG9rZW46IElUb2tlbikge1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5zcGxpY2UodGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMuaW5kZXhPZih0b2tlbiksIDEpO1xuICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3RhcyA9IHRoaXMuZm9ybmVjZWRvck5vdGFzLmZpbHRlcihmb3JuZWNlZG9yTm90YSA9PiBmb3JuZWNlZG9yTm90YS5jaGF2ZU5vdGFGaXNjYWwgIT09IHRva2VuLmlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVtQ29tcHJhRm9ybShkYXRhOiBhbnkgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBvcmRlbUNvbXByYTogW2RhdGEub3JkZW1Db21wcmEsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgbm90YXM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vdGFGb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGNoYXZlTm90YUZpc2NhbDogW2RhdGEuY2hhdmVOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogW2RhdGEuc2VyaWVOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBbZGF0YS5zZXJpZUxlZ2FsTm90YUZpc2NhbF0sXG4gICAgICAgICAgICBudW1lcm9Ob3RhRmlzY2FsOiBbZGF0YS5udW1lcm9Ob3RhRmlzY2FsXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZW5zYWdlbU9yZGVtQ29tcHJhTmFvU2VsZWNpb25hZG8oKSB7XG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShcImVycm9yXCIsIFwiT3JkZW0gZGUgY29tcHJhIG7Do28gc2VsZWNpb25hZG9cIiwgXCJOZW5odW0gb3JkZW0gZGUgY29tcHJhIGZvaSBzZWxlY2lvbmFkbyFcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5vdGFTYXZlZCh2YWx1ZTogYW55LCBmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIGlmICh0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1PcmRlbUNvbXByYU5hb1NlbGVjaW9uYWRvKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbHVlLmFkZEZvcm5lY2Vkb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtLCB0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgaWYgKG5vdGFzRm9ybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKHRoaXMuZ2V0Tm90YUZvcm0odmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXN0c0Zvcm5lY2Vkb3IgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHMuZmluZCgoZm9ybSkgPT4gKGZvcm0udmFsdWUuZm9ybmVjZWRvciB8fCB7aWQ6IHVuZGVmaW5lZH0pLmlkID09PSB2YWx1ZS5mb3JuZWNlZG9yLmlkKTtcbiAgICAgICAgY29uc3QgeyBpbmZvTm90YSB9ID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IG5vdGFGb3JtID0gdGhpcy5nZXROb3RhRm9ybSh7IFxuICAgICAgICAgICAgY2hhdmVOb3RhRmlzY2FsOiBpbmZvTm90YS5jaGF2ZSxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogaW5mb05vdGEuc2VyaWUsXG4gICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogaW5mb05vdGEuc2VyaWVMZWdhbCxcbiAgICAgICAgICAgIG51bWVyb05vdGFGaXNjYWw6IGluZm9Ob3RhLm51bWVybyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCEhZXhpc3RzRm9ybmVjZWRvcikge1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21PcmRlbnMoZXhpc3RzRm9ybmVjZWRvciwgdGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZpZWxkcyhleGlzdHNGb3JuZWNlZG9yLCBcImZvcm5lY2Vkb3JcIiwgXCJvcmlnZW1NZXJjYWRvcmlhXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlKSB7XG4gICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnNldFZhbHVlKFBlc3NvYS5mcm9tRHRvKHZhbHVlLmZvcm5lY2Vkb3IpKTtcbiAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcIm9yaWdlbU1lcmNhZG9yaWFcIikuc2V0VmFsdWUoUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKSk7XG4gICAgICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbU9yZGVucyhmb3JuZWNlZG9yRm9ybSwgdGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZpZWxkcyhmb3JuZWNlZG9yRm9ybSwgXCJmb3JuZWNlZG9yXCIsIFwib3JpZ2VtTWVyY2Fkb3JpYVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSB0aGlzLmFkZEZvcm5lY2Vkb3IoeyBmb3JuZWNlZG9yOiBQZXNzb2EuZnJvbUR0byh2YWx1ZS5mb3JuZWNlZG9yKSwgb3JpZ2VtTWVyY2Fkb3JpYTogUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZS5vcmlnZW1NZXJjYWRvcmlhKSB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3IsIHRoaXMub3JkZW1Db21wcmFTZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICBub3Rhc0Zvcm0ucHVzaChub3RhRm9ybSk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVGaWVsZHMoZm9ybmVjZWRvciwgXCJmb3JuZWNlZG9yXCIsIFwib3JpZ2VtTWVyY2Fkb3JpYVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTWVzc2FnZShzZXZlcml0eTogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcsIGRldGFpbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIHNldmVyaXR5LFxuICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChzdW1tYXJ5KSxcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChkZXRhaWwpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhdmVPYnNlcnZhYmxlKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHZhbHVlLmVtcHJlc2EgPSB2YWx1ZS5maWxpYWwuZW1wcmVzYTtcbiAgICAgICAgY29uc3QgcmVjZWJpbWVudG9PcmRlbUNvbXByYUR0byA9IFJlY2ViaW1lbnRvT3JkZW1Db21wcmEudG9EdG8odmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkgJiYgIXZhbHVlLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZS5pbnNlcnQocmVjZWJpbWVudG9PcmRlbUNvbXByYUR0byk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZS51cGRhdGUodGhpcy5mb3JtR3JvdXAudmFsdWUuaWQsIHJlY2ViaW1lbnRvT3JkZW1Db21wcmFEdG8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtR3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGlkOiBbdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIGZpbGlhbDogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgZm9ybmVjZWRvcmVzOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcbiAgICAgICAgICAgIHByb2R1dG86IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH1dLFxuICAgICAgICAgICAgZGVyaXZhY2FvOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9XSxcbiAgICAgICAgICAgIHRyYW5zcG9ydGFkb3JhOiBbdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIHNhZnJhOiBbdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIGFnZW5kYTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKXsgXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goKGZvcm06IEZvcm1Hcm91cCkgPT4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkaWNpb25hck5vdmFOb3RhKHJlc3BvbnNlOiBQZXNxdWlzYXJEb2N1bWVudG9SZXNwb25zZSkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSAocmVzcG9uc2UuZG9jdW1lbnRvcyB8fCBbXSkubGVuZ3RoID8gcmVzcG9uc2UuZG9jdW1lbnRvc1swXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSBQZXNzb2EuZnJvbUR0byh2YWx1ZXMuZm9ybmVjZWRvcik7XG4gICAgICAgIGNvbnN0IG9yaWdlbU1lcmNhZG9yaWEgPSBQZXNzb2FFbmRlcmVjby5mcm9tRHRvKHZhbHVlcy5vcmlnZW1NZXJjYWRvcmlhKTtcblxuICAgICAgICBjb25zdCBmb3JuZWNlZG9yRm9ybSA9IHRoaXMuZ2V0Rm9ybmVjZWRvcmVzKCkuY29udHJvbHMuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZS5mb3JuZWNlZG9yLmlkID09PSBmb3JuZWNlZG9yLmlkKSBhcyBGb3JtR3JvdXA7XG4gICAgICAgIGlmICghZm9ybmVjZWRvckZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvcih7IGZvcm5lY2Vkb3IsIG9yaWdlbU1lcmNhZG9yaWEgfSk7XG4gICAgICAgICAgICB0aGlzLmFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuKHZhbHVlcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuKHZhbHVlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGb3JuZWNlZG9yTm90YXNUb2tlbih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzVG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgaWQ6IHRoaXMuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgbGFiZWw6IHZhbHVlLm51bWVyb1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzLnB1c2goe1xuICAgICAgICAgICAgY2hhdmVOb3RhRmlzY2FsOiB0aGlzLmNoYXZlTm90YUZpc2NhbCxcbiAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogdmFsdWUuc2VyaWUsXG4gICAgICAgICAgICBzZXJpZUxlZ2FsTm90YUZpc2NhbDogdmFsdWUuc2VyaWVMZWdhbCxcbiAgICAgICAgICAgIG51bWVyb05vdGFGaXNjYWw6IHZhbHVlLm51bWVybyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGF2ZU5vdGFGaXNjYWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlTm90YUVycm9yKCkge1xuICAgICAgICB0aGlzLmVycm9DaGF2ZU5vdGEgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE5vdGFFcnJvcigpIHtcbiAgICAgICAgdGhpcy5lcnJvQ2hhdmVOb3RhID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lbnNhZ2VtQnVzY2FuZG9Ob3RhKCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBzZXZlcml0eTogJ2luZm8nLFxuICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAubm90YV9zZWFyY2hfc3VtbWFyeVwiKSxcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAubm90YV9zZWFyY2hfZGV0YWlsXCIpLFxuICAgICAgICAgICAgbGlmZTogNTAwMFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVGaWVsZHMoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wsIC4uLmtleXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gZm9ybUdyb3VwLmdldChrZXkpLmRpc2FibGUoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19kZXNjcmljYW9cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbGlhbFNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9ub21lXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWxpYWxTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX25vbWVcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcHJlc2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmVtcHJlc2FcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNwZkNucGpcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY3BmQ25walwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmlnZW1NZXJjYWRvcmlhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19udW1lcm9cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbmRlcmVjb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9lbmRlcmVjb19lbmRlcmVjb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9kdXRvU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnByb2R1dG9fY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhZnJhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5zYWZyYV9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5zYWZyYV9kZXNjcmljYW9cIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTYWZyYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNhZnJhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNhZnJhX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcHJlc2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNhZnJhX2VtcHJlc2FcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlc3NvYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jbnBqXCIpXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2EuY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmRlbUNvbXByYUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAub3JkZW1fY29tcHJhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcHJlc2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmVtcHJlc2FcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJmaWxpYWwubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbFwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmRlbUNvbXByYUdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5vcmRlbV9jb21wcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wcmVzYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZW1wcmVzYVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImZpbGlhbC5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZVJldmFsaWRhdGlvbiA9IChfKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVycFByb2Nlc3NEYXRhICYmIHRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmVycFByb2Nlc3NEYXRhID0gdGhpcy5lcnBQcm9jZXNzU2VydmljZS5idWlsZGVyRXJwUHJvY2Vzc0RhdGEodGhpcy5lcnBQcm9jZXNzRGF0YSwgdGhpcy5mb3JtR3JvdXApO1xuICAgICAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbn1cbiJdfQ==
|
|
1224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZWJpbWVudG8tb3JkZW0tY29tcHJhLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3ltcy1pbnRlZ3JhdGlvbi8iLCJzb3VyY2VzIjpbInNyYy9lcnAtc2VuaW9yL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS9mb3JtL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDeEYsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQW1CLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFVLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQVksTUFBTSxhQUFhLENBQUM7QUFDM0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0YsT0FBTyxFQUFFLFlB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QUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ2xELENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDdkQsQ0FBQztTQUNMLENBQUM7SUFDTixDQUFDO0lBaHNDUTtRQUFSLEtBQUssRUFBRTswQ0FBaUIsTUFBTTt1RUFBQztJQTlGdkIsbUNBQW1DO1FBUC9DLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSwrQkFBK0I7WUFDekMsMm1lQUE2RDtZQUU3RCxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQzs7U0FDbkMsQ0FBQztpREF5RzJCLFdBQVc7WUFDYixnQkFBZ0I7WUFDWixhQUFhO1lBQ2IsYUFBYTtZQUNaLGNBQWM7WUFDWixnQkFBZ0I7WUFDWCxxQkFBcUI7WUFDeEIsa0JBQWtCO1lBQ1AsNkJBQTZCO1lBQzVDLGNBQWM7WUFDdkIsY0FBYztZQUNiLE1BQU07WUFDVyxxQkFBcUI7WUFDaEMsWUFBWTtZQUNoQiw0Q0FBNEM7WUFDaEMsb0JBQW9CO1lBQ3JCLG1CQUFtQjtZQUN6QixhQUFhO1lBQ2IsYUFBYTtZQUNULGlCQUFpQjtZQUNkLG9CQUFvQjtZQUN0QixrQkFBa0I7WUFDcEIsZ0JBQWdCO09BN0hyQyxtQ0FBbUMsQ0F3eUMvQztJQUFELDBDQUFDO0NBQUEsQUF4eUNELElBd3lDQztTQXh5Q1ksbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyaWZpY2FOb3RhZmlzY2FsIH0gZnJvbSAnLi4vLi4vY29yZS92ZXJpZmljYS1ub3RhLWZpc2NhbC92ZXJpZmljYU5vdGFGaXNjYWwnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZvcm1GaWVsZCwgSVRva2VuIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHNcIjtcbmltcG9ydCAqIGFzIF9tb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgRGlhbG9nU2VydmljZSwgTWVzc2FnZVNlcnZpY2UsIFNvcnRNZXRhIH0gZnJvbSBcInByaW1lbmcvYXBpXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGNvbmNhdE1hcCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIG1lcmdlTWFwLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IGdldExvb2t1cExhYmVsLCBvbkxvb2t1cFJlcXVlc3QsIG9uU2VhcmNoUmVxdWVzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb29rdXAtdXRpbHNcIjtcbmltcG9ydCB7IGRpYWxvZ0NvbmZpZywgaXNWYWxpZEZpbHRlciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgTm90YUZvcm1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ub3RhLWZvcm0vbm90YS1mb3JtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQWdlbmRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYVwiO1xuaW1wb3J0IHsgQWdlbmRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2FnZW5kYS9hZ2VuZGEuc2VydmljZVwiO1xuaW1wb3J0IHsgRGVyaXZhY2FvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZGVyaXZhY2FvL2Rlcml2YWNhb1wiO1xuaW1wb3J0IHsgRGVyaXZhY2FvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2Rlcml2YWNhby9kZXJpdmFjYW8uc2VydmljZVwiO1xuaW1wb3J0IHsgRmlsaWFsIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbFwiO1xuaW1wb3J0IHsgRmlsaWFsU2VydmljZSwgUGVzcXVpc2FyRmlsaWFpc0lucHV0IH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBPcmRlbUNvbXByYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL29yZGVtLWNvbXByYS9vcmRlbS1jb21wcmFcIjtcbmltcG9ydCB7IE9yZGVtQ29tcHJhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL29yZGVtLWNvbXByYS9vcmRlbS1jb21wcmEuc2VydmljZVwiO1xuaW1wb3J0IHsgUGVzc29hRW5kZXJlY28gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EtZW5kZXJlY28vcGVzc29hLWVuZGVyZWNvXCI7XG5pbXBvcnQgeyBQZXNzb2FFbmRlcmVjb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EtZW5kZXJlY28vcGVzc29hLWVuZGVyZWNvLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBlc3NvYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2FcIjtcbmltcG9ydCB7IFBlc3NvYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EvcGVzc29hLnNlcnZpY2VcIjtcbmltcG9ydCB7IFByb2R1dG8gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wcm9kdXRvL3Byb2R1dG9cIjtcbmltcG9ydCB7IFByb2R1dG9QYXJhbXMsIFByb2R1dG9TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcHJvZHV0by9wcm9kdXRvLnNlcnZpY2VcIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvT3JkZW1Db21wcmEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9yZWNlYmltZW50by1vcmRlbS1jb21wcmEvcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhXCI7XG5pbXBvcnQgeyBSZWNlYmltZW50b09yZGVtQ29tcHJhRHRvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1kdG9cIjtcbmltcG9ydCB7IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcmVjZWJpbWVudG8tb3JkZW0tY29tcHJhL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTYWZyYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3NhZnJhL3NhZnJhXCI7XG5pbXBvcnQgeyBTYWZyYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9zYWZyYS9zYWZyYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUcmFuc3BvcnRhZG9yYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zcG9ydGFkb3JhL3RyYW5zcG9ydGFkb3JhXCI7XG5pbXBvcnQgeyBUcmFuc3BvcnRhZG9yYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc3BvcnRhZG9yYS90cmFuc3BvcnRhZG9yYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOb3RhVmFsaWRhdG9yU2VydmljZSwgUGVzcXVpc2FyRG9jdW1lbnRvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vY29yZS9ub3RhLXZhbGlkYXRvci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBSZWNlYmltZW50b09yZGVtQ29tcHJhQ2hlZ2FkYVZlaWN1bG9PdmVycmlkZSB9IGZyb20gXCIuLi9yZWNlYmltZW50by1vcmRlbS1jb21wcmEtY2hlZ2FkYS12ZWljdWxvLm92ZXJyaWRlXCI7XG5pbXBvcnQgeyBTdGF0dXNBZ2VuZGEgfSBmcm9tIFwiLi8uLi8uLi9jb3JlL2VudW1zL3N0YXR1cy1hZ2VuZGFcIjtcbmltcG9ydCB7IE9yZGVtQ29tcHJhRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vLi4vb3JkZW0tY29tcHJhLWZvcm0vb3JkZW0tY29tcHJhLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEVycFByb2Nlc3NEYXRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLXByb2Nlc3MtZGF0YS9lcnAtcHJvY2Vzcy1kYXRhXCI7XG5pbXBvcnQgeyBFcnBQcm9jZXNzU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1wcm9jZXNzLWRhdGEvZXJwLXByb2Nlc3Mtc2VydmljZVwiO1xuaW1wb3J0IHsgRXJwRm9ybUNvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtZm9ybS1jb25maWcvZXJwLWZvcm0tY29uZmlnLXNlcnZpY2VcIjtcbmltcG9ydCB7IE9yZGVtQ29tcHJhRHRvIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvb3JkZW0tY29tcHJhL29yZGVtLWNvbXByYS1kdG9cIjtcbmltcG9ydCB7IEhhc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2hhcy1jaGFuZ2UvaGFzLWNoYW5nZS1zZXJ2aWNlJztcblxuY29uc3QgbW9tZW50ID0gX21vbWVudDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdyZWNlYmltZW50by1vcmRlbS1jb21wcmEtZm9ybScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JlY2ViaW1lbnRvLW9yZGVtLWNvbXByYS1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi4vLi4vZXJwLXNlbmlvci5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbQ29uZmlybWF0aW9uU2VydmljZV1cbn0pXG5cbmV4cG9ydCBjbGFzcyBSZWNlYmltZW50b09yZGVtQ29tcHJhRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICAgIGRlcml2YWNhb1NlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgZGVyaXZhY2FvU2VhcmNoR3JpZERhdGE6IERlcml2YWNhb1tdO1xuICAgIGRlcml2YWNhb0xvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgZGVyaXZhY2FvQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgZGVyaXZhY2FvTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBkZXJpdmFjYW9Mb29rdXBTdWdnZXN0aW9uczogRGVyaXZhY2FvW107XG4gICAgZGVyaXZhY2FvU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBmaWxpYWxTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIGZpbGlhbFNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIGZpbGlhbFNlYXJjaEdyaWREYXRhOiBGaWxpYWxbXTtcbiAgICBmaWxpYWxMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImVtcHJlc2Eubm9tZVwiXTtcbiAgICBmaWxpYWxBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJlbXByZXNhLm5vbWVcIl07XG4gICAgZmlsaWFsTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBmaWxpYWxMb29rdXBTdWdnZXN0aW9uczogRmlsaWFsW107XG4gICAgZmlsaWFsU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBmb3JuZWNlZG9yU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBmb3JuZWNlZG9yU2VhcmNoR3JpZERhdGE6IFBlc3NvYVtdO1xuICAgIGZvcm5lY2Vkb3JMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImNwZkNucGpcIl07XG4gICAgZm9ybmVjZWRvckFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiXTtcbiAgICBmb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBmb3JuZWNlZG9yTG9va3VwU3VnZ2VzdGlvbnM6IFBlc3NvYVtdO1xuICAgIGZvcm5lY2Vkb3JTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIG9yZGVtQ29tcHJhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBvcmRlbUNvbXByYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIG9yZGVtQ29tcHJhU2VhcmNoR3JpZERhdGE6IE9yZGVtQ29tcHJhW107XG4gICAgb3JkZW1Db21wcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZW1wcmVzYS5ub21lXCJdO1xuICAgIG9yZGVtQ29tcHJhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJlbXByZXNhLm5vbWVcIiwgXCJmaWxpYWwubm9tZVwiLCBcInBlc3NvYS5ub21lXCJdO1xuICAgIG9yZGVtQ29tcHJhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBvcmRlbUNvbXByYUxvb2t1cFN1Z2dlc3Rpb25zOiBPcmRlbUNvbXByYVtdO1xuICAgIG9yZGVtQ29tcHJhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBvcmlnZW1NZXJjYWRvcmlhU2VhcmNoR3JpZERhdGE6IFBlc3NvYUVuZGVyZWNvW107XG4gICAgb3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJlbmRlcmVjb1wiXTtcbiAgICBvcmlnZW1NZXJjYWRvcmlhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJlbmRlcmVjb1wiLCBcIm51bWVyb1wiXTtcbiAgICBvcmlnZW1NZXJjYWRvcmlhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgICBvcmlnZW1NZXJjYWRvcmlhTG9va3VwU3VnZ2VzdGlvbnM6IFBlc3NvYUVuZGVyZWNvW107XG4gICAgb3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcHJvZHV0b1NlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHJvZHV0b1NlYXJjaEdyaWREYXRhOiBQcm9kdXRvW107XG4gICAgcHJvZHV0b0xvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgcHJvZHV0b0FkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHByb2R1dG9Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHByb2R1dG9Mb29rdXBTdWdnZXN0aW9uczogUHJvZHV0b1tdO1xuICAgIHByb2R1dG9TZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHNhZnJhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBzYWZyYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHNhZnJhU2VhcmNoR3JpZERhdGE6IFNhZnJhW107XG4gICAgc2FmcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwiZGVzY3JpY2FvXCJdO1xuICAgIHNhZnJhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJkZXNjcmljYW9cIl07XG4gICAgc2FmcmFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICAgIHNhZnJhTG9va3VwU3VnZ2VzdGlvbnM6IFNhZnJhW107XG4gICAgc2FmcmFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZERhdGE6IFRyYW5zcG9ydGFkb3JhW107XG4gICAgdHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwicGVzc29hLm5vbWVcIiwgXCJwZXNzb2EuY3BmQ25walwiXTtcbiAgICB0cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwicGVzc29hLm5vbWVcIiwgXCJwZXNzb2EuY3BmQ25walwiXTtcbiAgICB0cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gICAgdHJhbnNwb3J0YWRvcmFMb29rdXBTdWdnZXN0aW9uczogVHJhbnNwb3J0YWRvcmFbXTtcbiAgICB0cmFuc3BvcnRhZG9yYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgZGlzYWJsZUJ1dHRvblNhdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNoYXZlTm90YUZpc2NhbDogc3RyaW5nO1xuXG4gICAgdG90YWxFaXhvc0NvbnRyYXRhZG9zOiBudW1iZXIgPSAwO1xuICAgIHRvdGFsRWl4b3NDb21wb3NpY2FvOiBudW1iZXIgPSAwO1xuXG4gICAgZXJyb0NoYXZlTm90YSA9IGZhbHNlO1xuICAgIGVycm9Gb3JuZWNlZG9yZXMgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBub3Rhc1Rva2VuczogSVRva2VuW10gPSBbXTtcbiAgICBwdWJsaWMgZm9ybmVjZWRvck5vdGFzVG9rZW5zOiBJVG9rZW5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JuZWNlZG9yTm90YXMgPSBbXTtcblxuICAgIHByaXZhdGUgZm9ybUNhcnJlZ2FkbyA9IGZhbHNlO1xuXG4gICAgb3JkZW1Db21wcmFTZWxlY2lvbmFkbzogYW55ID0gbnVsbDtcblxuICAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xuICAgIHB1YmxpYyBzYXZlQW5kSW5pdEJ1dHRvbjogYW55O1xuICAgIHB1YmxpYyBjcmVhdGVkQnlFcnA6IGJvb2xlYW47XG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcblxuICAgIEBJbnB1dCgpIHByaXZhdGUgYWdlbmRhOiBBZ2VuZGE7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgZXJwUHJvY2Vzc0RhdGE6IEVycFByb2Nlc3NEYXRhO1xuICAgIHByaXZhdGUgZW5hYmxlUmV2YWxpZGF0aW9uOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBvcmRlbnM6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmlsaWFsU2VydmljZTogRmlsaWFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwZXNzb2FTZXJ2aWNlOiBQZXNzb2FTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHByb2R1dG9TZXJ2aWNlOiBQcm9kdXRvU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkZXJpdmFjYW9TZXJ2aWNlOiBEZXJpdmFjYW9TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zcG9ydGFkb3JhU2VydmljZTogVHJhbnNwb3J0YWRvcmFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG9yZGVtQ29tcHJhU2VydmljZTogT3JkZW1Db21wcmFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlY2ViaW1lbnRvT3JkZW1Db21wcmFTZXJ2aWNlOiBSZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIG9yaWdlbU1lcmNhZG9yaWFTZXJ2aWNlOiBQZXNzb2FFbmRlcmVjb1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2FmcmFTZXJ2aWNlOiBTYWZyYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3ZlcnJpZGU6IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFDaGVnYWRhVmVpY3Vsb092ZXJyaWRlLFxuICAgICAgICBwcml2YXRlIG5vdGFWYWxpZGF0b3JTZXJ2aWNlOiBOb3RhVmFsaWRhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWdlbmRhU2VydmljZTogQWdlbmRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnBQcm9jZXNzU2VydmljZTogRXJwUHJvY2Vzc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZXJwRm9ybUNvbmZpZ1NlcnZpY2U6IEVycEZvcm1Db25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZlcmlmaWNhTm90YUZpc2NhbDogVmVyaWZpY2FOb3RhZmlzY2FsLFxuICAgICAgICBwcml2YXRlIGhhc0NoYW5nZVNlcnZpY2U6IEhhc0NoYW5nZVNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXAoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoeyBhZ2VuZGEgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFnZW5kYSA9PSBcIm5ld1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJlRm9ybSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRSZWNlYmltZW50b09yZGVtQ29tcHJhKGFnZW5kYSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldCgnZmlsaWFsJylcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldCgnZm9ybmVjZWRvcmVzJylcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAgIC5nZXQoJ3RyYW5zcG9ydGFkb3JhJylcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlUmV2YWxpZGF0aW9uKTtcblxuXG4gICAgICAgIHRoaXMuZGVyaXZhY2FvU2VhcmNoRmllbGRzID0gdGhpcy5nZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yU2VhcmNoRmllbGRzID0gdGhpcy5nZXRGb3JuZWNlZG9yU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0T3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLnByb2R1dG9TZWFyY2hGaWVsZHMgPSB0aGlzLmdldFByb2R1dG9TZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5zYWZyYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0U2FmcmFTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5zYWZyYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFNhZnJhU2VhcmNoR3JpZEZpZWxkcygpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JkZW1Db21wcmFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldE9yZGVtQ29tcHJhRmllbGRzKCk7XG4gICAgICAgIHRoaXMub3JkZW1Db21wcmFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRPcmRlbUNvbXByYUdyaWRGaWVsZHMoKTtcblxuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNwb3J0YWRvcmEodGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQuY25waik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldEVtcHJlc2FGaWxpYWwoKTtcblxuICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudmVpY3VsbyA/IHRoaXMuYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICAgICAgY29uc3Qgc3RhdHVzQWdlbmRhID0gW1wiQUdVQVJEQU5ET19DT05GSVJNQUNBT19TT0xJQ0lUQU5URVwiLCBcIkFHRU5EQURPXCIsIFwiQUdVQVJEQU5ET19DT05GSVJNQUNBT1wiLCBcIlJFSkVJVEFET19QT1JfVkFMSURBQ0FPXCJdO1xuICAgICAgICBpZiAodGhpcy5hZ2VuZGEgJiYgIXN0YXR1c0FnZW5kYS5pbmNsdWRlcyh0aGlzLmFnZW5kYS5zdGF0dXMpKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvblNhdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKTtcblxuICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lcnBQcm9jZXNzRGF0YSA9IG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmVycEZvcm1Db25maWdTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lbmFibGVSZXZhbGlkYXRpb24gPSBtZXNzYWdlKTtcbiAgICAgICAgdGhpcy52ZXJpZmljYVNlVGVtQWx0ZXJhY2FvKCk7XG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5vblJvdXRlRGF0YUNoYW5nZShkYXRhKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm91dGVEYXRhQ2hhbmdlKGRhdGE6IGFueSkge1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZGF0YS5hbGxQZXJtaXNzaW9ucy5hZ2VuZGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJpZmljYVNlVGVtQWx0ZXJhY2FvKCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm92ZXJyaWRlLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbml0Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5vdmVycmlkZS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlZEJ5RXJwRGlzYWJsZUZvcm0oKSB7XG4gICAgICAgIGlmICh0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS5jcmVhdGVkQnlFcnApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEJ5RXJwID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZmlsaWFsJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdwcm9kdXRvJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdkZXJpdmFjYW8nKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc3BvcnRhZG9yYVwiKS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgndHJhbnNwb3J0YWRvcmEnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZ3VyZUZvcm0oKSB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzKHRoaXMuZm9ybUdyb3VwLCBcImZpbGlhbFwiLCB0aGlzLm9uRmlsaWFsVmFsdWVDaGFuZ2UpO1xuICAgICAgICBjb25zdCBnZXRGaWx0ZXJRdWVyeVByb2R1dG8gPSAodmFsdWU6IGFueSkgPT4gYHByb2R1dG8uaWQgZXEgJyR7dmFsdWUuaWR9JyBhbmQgc2l0dWFjYW8gZXEgJ0FUSVZPJ2A7XG4gICAgICAgIHRoaXMuY2hlY2tWYWx1ZXNDaGFuZ2VzKHRoaXMuZm9ybUdyb3VwLCBcInByb2R1dG9cIiwgXCJkZXJpdmFjYW9cIiwgdGhpcy5kZXJpdmFjYW9TZXJ2aWNlLCBnZXRGaWx0ZXJRdWVyeVByb2R1dG8sXG4gICAgICAgICAgICBbJ2NvZGlnbycsICdkZXNjcmljYW8nXSwgKHZhbCkgPT4gRGVyaXZhY2FvLmZyb21EdG8odmFsKSwgIDEwLCB0cnVlLCB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGZvcm5lY2Vkb3JlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEhZm9ybmVjZWRvcmVzICYmIGZvcm5lY2Vkb3Jlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJkZXJpdmFjYW9cIikuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImRlcml2YWNhb1wiKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZWRCeUVycERpc2FibGVGb3JtKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RW1wcmVzYUZpbGlhbCgpIHtcbiAgICAgICAgY29uc3QgcGxhbnRhID0gdGhpcy5hZ2VuZGEucGxhbnRhIHx8IHsgY25wajogW10gfTtcbiAgICAgICAgaWYgKHBsYW50YS5jbnBqLmxlbmd0aCAhPT0gMSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gYHBlc3NvYS5jcGZDbnBqIGVxICcke3BsYW50YS5jbnBqWzBdfSdgO1xuICAgICAgICB0aGlzLmZpbGlhbFNlcnZpY2UubGlzdCh7IGZpbHRlclF1ZXJ5LCBwYWdlOiAwLCBzaXplOiAxMCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGlhbCA9IGNvbnRlbnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbXByZXNhID0gY29udGVudHNbMF0uZW1wcmVzYTtcbiAgICAgICAgICAgICAgICAgICAgZmlsaWFsLmxhYmVsID0gYCR7ZmlsaWFsLmNvZGlnb30gLSAke2ZpbGlhbC5ub21lfWA7XG4gICAgICAgICAgICAgICAgICAgIGVtcHJlc2EubGFiZWwgPSBgJHtlbXByZXNhLmNvZGlnb30gLSAke2VtcHJlc2Eubm9tZX1gO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2VtcHJlc2EnKS5zZXRWYWx1ZShlbXByZXNhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWxpYWwnKS5zZXRWYWx1ZShmaWxpYWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpbGlhbCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ3Byb2R1dG8nKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdvcmRlbUNvbXByYScpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tWYWx1ZXNDaGFuZ2VzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBmb3JtQ29udHJvbFVwZGF0ZWQ6IHN0cmluZywgZm9ybUNvbnRyb2xEZXBlbmRlbnQ6IHN0cmluZywgc2VydmljZTogYW55LCBnZXRGaWx0ZXJRdWVyeTogYW55LFxuICAgICAgICB2YXJpYWJsZXM6IGFueSwgZHRvQ29udmVydGVyOiAodmFsOiBhbnkpID0+IGFueSwgcXVlcnlTaXplOiBudW1iZXIgPSAxLCBpc0NoYW5nZVZhbGlkYXRvcnM/OiBib29sZWFuLCBjbGVhckZvcm1Db250cm9sRGVwZW5kZW50PzogYm9vbGVhbikge1xuICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sVXBkYXRlZClcbiAgICAgICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NoYW5nZVZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2xEZXBlbmRlbnQpLnNldFZhbGlkYXRvcnModmFsdWUgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogVmFsaWRhdG9ycy5udWxsVmFsaWRhdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xlYXJGb3JtQ29udHJvbERlcGVuZGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSBnZXRGaWx0ZXJRdWVyeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogcXVlcnlTaXplIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRzIHx8ICFjb250ZW50cy5sZW5ndGggfHwgY29udGVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbERlcGVuZGVudCkuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHNbMF0ubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGdldExvb2t1cExhYmVsKGNvbnRlbnRzWzBdLCB2YXJpYWJsZXMsICcgLSAnLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2xEZXBlbmRlbnQpLnNldFZhbHVlKGR0b0NvbnZlcnRlcihjb250ZW50c1swXSkpO1xuICAgICAgICAgICAgICAgIH0gXG5cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sRGVwZW5kZW50KS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQmx1ckNoYXZlTm90YUZpc2NhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmVyaWZpY2FOb3RhRmlzY2FsLnZlcmlmaWNhU2VOb3RhRmlzY2FsRXN0YUR1cGxpY2FkYSh0aGlzLmNoYXZlTm90YUZpc2NhbCwgIHRoaXMub3JkZW5zLCB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2VucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlTm90YUVycm9yKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jaGF2ZU5vdGFGaXNjYWw7XG4gICAgICAgIGlmICghIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUJ1c2NhbmRvTm90YSgpO1xuXG4gICAgICAgICAgICB0aGlzLm5vdGFWYWxpZGF0b3JTZXJ2aWNlLnBlc3F1aXNhckRvY3VtZW50b1ZhbGlkYU5vdGFFbVVzbyh7XG4gICAgICAgICAgICAgICAgZmlsaWFsSWQ6ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLmlkKSB8fCBudWxsLFxuICAgICAgICAgICAgICAgIGNoYXZlRG9jdW1lbnRvOiB2YWx1ZS50cmltKCkgfHwgXCJcIlxuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSlcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTm92YU5vdGEocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbHVlQ2hhbmdlcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCwgcGF0aDogc3RyaW5nLCBzdWJzY3JpYmU6IGFueSkge1xuICAgICAgICBmb3JtR3JvdXAuZ2V0KHBhdGgpXG4gICAgICAgICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gc3Vic2NyaWJlKHZhbHVlLCBmb3JtR3JvdXApKTtcbiAgICB9XG5cbiAgICAvKipQUk9EVVRPIERFUEVOREUgREUgRklMSUFMLiBPUkRFTSBDT01QUkEgREVQRU5ERSBERSBGSUxJQUwgKi9cbiAgICBwcml2YXRlIG9uRmlsaWFsVmFsdWVDaGFuZ2UgPSAoZmlsaWFsOiBGaWxpYWwsIGZvcm1Hcm91cDogRm9ybUdyb3VwKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlRm9ybUdyb3VwVmFsdWUoZmlsaWFsLCBcInByb2R1dG9cIiwgZm9ybUdyb3VwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRm9ybmVjZWRvckNoYW5nZSA9IChmb3JuZWNlZG9yOiBQZXNzb2FFbmRlcmVjbywgZm9ybUdyb3VwOiBGb3JtR3JvdXApID0+IHtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb3JtR3JvdXBWYWx1ZShmb3JuZWNlZG9yLCBcIm9yaWdlbU1lcmNhZG9yaWFcIiwgZm9ybUdyb3VwKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VGb3JtR3JvdXBWYWx1ZShmb3JuZWNlZG9yLCBcIm9yZGVuc1wiLCBmb3JtR3JvdXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlRm9ybUdyb3VwVmFsdWUoaXNBbnk6IGFueSwgZm9ybUNvbnRyb2w6IHN0cmluZywgZm9ybUdyb3VwOiBhbnkpIHtcbiAgICAgICAgaWYgKCFpc0FueSkge1xuICAgICAgICAgICAgZm9ybUdyb3VwLmdldChmb3JtQ29udHJvbCkuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2wpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2wpLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWNlYmltZW50b09yZGVtQ29tcHJhKGFnZW5kYUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZS5saXN0KHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5OiBgYWdlbmRhLmlkIGVxICcke2FnZW5kYUlkfSdgLFxuICAgICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICAgIHBhZ2U6IDBcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbnRlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJlRm9ybSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb250cmF0YWRvcyA9IGNvbnRlbnRzWzBdLmVpeG9zIHx8IDA7XG4gICAgICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gY29udGVudHNbMF0uYWdlbmRhICYmIGNvbnRlbnRzWzBdLmFnZW5kYS52ZWljdWxvIFxuICAgICAgICAgICAgICAgID8gY29udGVudHNbMF0uYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlY2ViaW1lbnRvT3JkZW1Db21wcmE6IFJlY2ViaW1lbnRvT3JkZW1Db21wcmFEdG8gPSBSZWNlYmltZW50b09yZGVtQ29tcHJhLmZyb21EdG8oY29udGVudHNbMF0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHJlY2ViaW1lbnRvT3JkZW1Db21wcmEpO1xuXG4gICAgICAgICAgICByZWNlYmltZW50b09yZGVtQ29tcHJhLmZvcm5lY2Vkb3Jlcy5mb3JFYWNoKGZvcm5lY2Vkb3IgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3JGb3JtKGZvcm5lY2Vkb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzRm9ybSgpLnB1c2goZm9ybSk7XG5cbiAgICAgICAgICAgICAgICBmb3JuZWNlZG9yLm9yZGVucy5mb3JFYWNoKG9yZGVtQ29tcHJhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JkZW1Db21wcmFGb3JtID0gdGhpcy5nZXRPcmRlbUNvbXByYUZvcm0ob3JkZW1Db21wcmEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9yZGVuc0NvbXByYShmb3JtKS5wdXNoKG9yZGVtQ29tcHJhRm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIG9yZGVtQ29tcHJhLm5vdGFzLmZvckVhY2gobm90YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RhRm9ybSA9IHRoaXMuZ2V0Tm90YUZvcm0obm90YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5vdGFzKG9yZGVtQ29tcHJhRm9ybSkucHVzaChub3RhRm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZUZvcm0oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRmlsaWFsTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgICAgICAgLnJlZHVjZSgoYSwgeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZS5yZXBsYWNlKC9cXEQvLCBcIlwiKSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlIH07XG4gICAgICAgICAgICB9LCB7IGNucGpzOiB0aGlzLmFnZW5kYS5wbGFudGEuY25waiwgcGFnaW5hOiB7IGxpbWl0OiAxMCwgb2Zmc2V0OiAwIH0gfSBhcyBQZXNxdWlzYXJGaWxpYWlzSW5wdXQpO1xuXG4gICAgICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5maWxpYWxMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuZmlsaWFpcy5tYXAoKGZpbGlhbDogYW55KSA9PiBGaWxpYWwuZnJvbUR0byhmaWxpYWwpKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWxpYWxTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQ6IFNvcnRNZXRhW10gPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBzb3J0Rm9ybWF0dGVkID0gISEoc29ydCB8fCBbXSkubGVuZ3RoICYmIHsgY2FtcG86IHNvcnRbMF0uZmllbGQsIG9yZGVuYWNhbzogc29ydFswXS5vcmRlciA+IDAgPyAnQXNjJyA6ICdEZXNjJyB9O1xuICAgICAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLCBwYWdpbmE6IHsgbGltaXQ6IHJvd3MsIG9mZnNldDogcGFnZSwgbGlzdGFPcmRlbmFjYW86IHNvcnRGb3JtYXR0ZWQgPyBbIHsgLi4uKHNvcnRGb3JtYXR0ZWQpIH0gXSA6IG51bGwgfSB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dCk7XG5cbiAgICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdEZpbGlhaXMoZmlsdGVySW5wdXQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoR3JpZERhdGEgPSBsaXN0LmZpbGlhaXMubWFwKEZpbGlhbC5mcm9tRHRvKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QucXRkVG90YWxSZWdpc3Ryb3M7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipGSUxUUkEgRk9STkVDRURPUiBFUSBUUlVFICovXG4gICAgcHVibGljIG9uRm9ybmVjZWRvckxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy5mb3JuZWNlZG9yU2VhcmNoRmllbGRzLCB0aGlzLmZvcm5lY2Vkb3JMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLmZvcm5lY2Vkb3JMb29rdXBTZXBhcmF0b3IsIHRoaXMucGVzc29hU2VydmljZSwgXG4gICAgICAgICAgICB2YWx1ZSwgYCBmb3JuZWNlZG9yIGVxIHRydWUgYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB0aGlzLmZvcm5lY2Vkb3JMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZvcm5lY2Vkb3JTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgb25TZWFyY2hSZXF1ZXN0KHRoaXMuZm9ybmVjZWRvclNlYXJjaEZpZWxkcywgdGhpcy5mb3JuZWNlZG9yTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvckFkdmFuY2VkRGlzcGxheUZpZWxkcywgdGhpcy5mb3JuZWNlZG9yTG9va3VwU2VwYXJhdG9yLCB0aGlzLnBlc3NvYVNlcnZpY2UsIFxuICAgICAgICAgICAgZXZlbnQsIGAgZm9ybmVjZWRvciBlcSB0cnVlIGApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybmVjZWRvclNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipGSUxUUkEgT1JJR0VNIE1FUkNBRE9SSUEgUEVMTyBGT1JORUNFRE9SIFNFTEVDSU9OQURPICovXG4gICAgcHVibGljIG9uT3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFJlcXVlc3QoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgdmFsdWU6IHN0cmluZykge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoRmllbGRzLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBTZXBhcmF0b3IsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlcnZpY2UsIFxuICAgICAgICAgICAgdmFsdWUsIGAgcGVzc29hLmlkIGVxICcke2Zvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUuaWR9JyBgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcmlnZW1NZXJjYWRvcmlhU2VhcmNoUmVxdWVzdChmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBldmVudDogYW55KSB7XG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdCh0aGlzLm9yaWdlbU1lcmNhZG9yaWFTZWFyY2hGaWVsZHMsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLm9yaWdlbU1lcmNhZG9yaWFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYUxvb2t1cFNlcGFyYXRvciwgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VydmljZSwgZXZlbnQsXG4gICAgICAgICAgICBgIHBlc3NvYS5pZCBlcSAnJHtmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLmlkfScgYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2VtTWVyY2Fkb3JpYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKkZJTFRSQSBERVJJVkFDQU8gUEVMTyBQUk9EVVRPICovXG4gICAgcHVibGljIG9uRGVyaXZhY2FvTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIG9uTG9va3VwUmVxdWVzdCh0aGlzLmRlcml2YWNhb1NlYXJjaEZpZWxkcywgdGhpcy5kZXJpdmFjYW9Mb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmRlcml2YWNhb0FkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvTG9va3VwU2VwYXJhdG9yLCB0aGlzLmRlcml2YWNhb1NlcnZpY2UsIHZhbHVlLFxuICAgICAgICAgICAgYCBwcm9kdXRvLmlkIGVxICcke3RoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWUuaWR9JyBgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcml2YWNhb0xvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRlcml2YWNhb1NlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBvblNlYXJjaFJlcXVlc3QodGhpcy5kZXJpdmFjYW9TZWFyY2hGaWVsZHMsIHRoaXMuZGVyaXZhY2FvTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuZGVyaXZhY2FvQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLmRlcml2YWNhb0xvb2t1cFNlcGFyYXRvciwgdGhpcy5kZXJpdmFjYW9TZXJ2aWNlLCBldmVudCxcbiAgICAgICAgICAgIGAgcHJvZHV0by5pZCBlcSAnJHt0aGlzLmZvcm1Hcm91cC5nZXQoXCJwcm9kdXRvXCIpLnZhbHVlLmlkfScgYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9TZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXJpdmFjYW9TZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcmRlbUNvbXByYUxvb2t1cFJlcXVlc3QoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgdmFsdWU6IHN0cmluZykge1xuICAgICAgICBvbkxvb2t1cFJlcXVlc3QodGhpcy5vcmRlbUNvbXByYVNlYXJjaEZpZWxkcywgdGhpcy5vcmRlbUNvbXByYUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMub3JkZW1Db21wcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLm9yZGVtQ29tcHJhTG9va3VwU2VwYXJhdG9yLCB0aGlzLm9yZGVtQ29tcHJhU2VydmljZSwgdmFsdWUsXG4gICAgICAgICAgICBgZmlsaWFsLmlkIGVxICcke3RoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZS5pZH0nIGFuZCBwZXNzb2EuaWQgZXEgJyR7Zm9ybmVjZWRvckZvcm0uZ2V0KFwiZm9ybmVjZWRvclwiKS52YWx1ZS5pZH0nYClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlbUNvbXByYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk9yZGVtQ29tcHJhU2VhcmNoUmVxdWVzdChmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBldmVudDogYW55KSB7XG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdCh0aGlzLm9yZGVtQ29tcHJhU2VhcmNoRmllbGRzLCB0aGlzLm9yZGVtQ29tcHJhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMub3JkZW1Db21wcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMub3JkZW1Db21wcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMub3JkZW1Db21wcmFTZXJ2aWNlLCBldmVudCxcbiAgICAgICAgICAgIGBmaWxpYWwuaWQgZXEgJyR7dGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLmlkfScgYW5kIHBlc3NvYS5pZCBlcSAnJHtmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLmlkfSdgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVtQ29tcHJhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMub3JkZW1Db21wcmFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkT3JkZW1Db21wcmEoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2VcbiAgICAgICAgICAgIC5vcGVuKE9yZGVtQ29tcHJhRm9ybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIC4uLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgICAgICBoZWFkZXI6ICdBZGljaW9uYXIgT3JkZW0gZGUgQ29tcHJhJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGFnZW5kYTogdGhpcy5hZ2VuZGEsXG4gICAgICAgICAgICAgICAgICAgIGZpbGlhbDogdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yOiBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlbnM6IGZvcm5lY2Vkb3JGb3JtLmdldChcIm9yZGVuc1wiKS52YWx1ZSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uQ2xvc2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChvcmRlbUNvbXByYTogYW55KSA9PiB0aGlzLm9uT3JkZW1Db21wcmFTYXZlZChvcmRlbUNvbXByYSwgZm9ybmVjZWRvckZvcm0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qcm9kdXRvTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbGlhbCA9IHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZTtcbiAgICAgICAgY29uc3QgdGlwb0FnZW5kYW1lbnRvID0gdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvO1xuXG4gICAgICAgIHRoaXMucHJvZHV0b1NlcnZpY2UubGlzdFByb2R1dG9zKHtcbiAgICAgICAgICAgIHBlc3F1aXNhOiB2YWx1ZSxcbiAgICAgICAgICAgIGVtcHJlc2FJZDogISFmaWxpYWwgPyBmaWxpYWwuZW1wcmVzYS5pZCA6IG51bGwsXG4gICAgICAgICAgICBmaWxpYWxJZDogISFmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6ICEhdGlwb0FnZW5kYW1lbnRvID8gdGlwb0FnZW5kYW1lbnRvLmlkIDogbnVsbCxcbiAgICAgICAgICAgIHNpdHVhY2FvOiAnQVRJVk8nLFxuICAgICAgICAgICAgcGFnaW5hOiB7XG4gICAgICAgICAgICAgICAgbGltaXQ6IDEwMCxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB0aGlzLnByb2R1dG9Mb29rdXBTdWdnZXN0aW9ucyA9IHJlcy5wcm9kdXRvcy5tYXAoUHJvZHV0by5mcm9tRHRvKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJvZHV0b1NlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydDogU29ydE1ldGFbXSA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYgeyBjYW1wbzogc29ydFswXS5maWVsZCwgb3JkZW5hY2FvOiBzb3J0WzBdLm9yZGVyID4gMCA/ICdBc2MnIDogJ0Rlc2MnIH07XG4gICAgICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRQcm9kdXRvU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAucmVkdWNlKChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH0sIHsgcGFnaW5hOiB7IGxpbWl0OiByb3dzLCBvZmZzZXQ6IHBhZ2UsIGxpc3RhT3JkZW5hY2FvOiBzb3J0Rm9ybWF0dGVkID8gWyB7IC4uLihzb3J0Rm9ybWF0dGVkKSB9IF0gOiBudWxsIH0gfSBhcyBQcm9kdXRvUGFyYW1zKTtcblxuICAgICAgICBjb25zdCBmaWxpYWwgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWU7XG4gICAgICAgIGNvbnN0IHRpcG9BZ2VuZGFtZW50byA9IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50bztcblxuICAgICAgICB0aGlzLnByb2R1dG9TZXJ2aWNlLmxpc3RQcm9kdXRvcyh7XG4gICAgICAgICAgICAuLi5maWx0ZXJJbnB1dCxcbiAgICAgICAgICAgIGVtcHJlc2FJZDogISFmaWxpYWwgPyBmaWxpYWwuZW1wcmVzYS5pZCA6IG51bGwsXG4gICAgICAgICAgICBmaWxpYWxJZDogISFmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgICAgICAgc2l0dWFjYW86ICdBVElWTycsXG4gICAgICAgICAgICB0aXBvQWdlbmRhbWVudG9JZDogISF0aXBvQWdlbmRhbWVudG8gPyB0aXBvQWdlbmRhbWVudG8uaWQgOiBudWxsXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9kdXRvU2VhcmNoVG90YWxSZWNvcmRzID0gcmVzLnF0ZFRvdGFsUmVnaXN0cm9zO1xuICAgICAgICAgICAgdGhpcy5wcm9kdXRvU2VhcmNoR3JpZERhdGEgPSByZXMucHJvZHV0b3MubWFwKFByb2R1dG8uZnJvbUR0byk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNhZnJhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIG9uTG9va3VwUmVxdWVzdCh0aGlzLnNhZnJhU2VhcmNoRmllbGRzLCB0aGlzLnNhZnJhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuc2FmcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMuc2FmcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMuc2FmcmFTZXJ2aWNlLCB2YWx1ZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYWZyYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNhZnJhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdCh0aGlzLnNhZnJhU2VhcmNoRmllbGRzLCB0aGlzLnNhZnJhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuc2FmcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMuc2FmcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMuc2FmcmFTZXJ2aWNlLCBldmVudClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYWZyYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLnNhZnJhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0KHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLCBcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IsIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlLCB2YWx1ZSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRyYW5zcG9ydGFkb3JhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdCh0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwRGlzcGxheUZpZWxkcywgXG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzLCB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yLCB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZSwgZXZlbnQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUcmFuc3BvcnRhZG9yYSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY25waiA9IHZhbHVlLnJlcGxhY2UoL1xcLi9nLCAnJykucmVwbGFjZSgvXFwvL2csICcnKS5yZXBsYWNlKC9cXC0vZywgJycpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSBgcGVzc29hLmNwZkNucGogZXEgJyR7Y25wan0nYDtcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogMTAgfSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbMF0ubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGdldExvb2t1cExhYmVsKGNvbnRlbnRzWzBdLCBbJ2NvZGlnbycsICdwZXNzb2Eubm9tZSddLCAnIC0gJywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCd0cmFuc3BvcnRhZG9yYScpLnNldFZhbHVlKGNvbnRlbnRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZShzdGFydD86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdhZ2VuZGEnKS5zZXRWYWx1ZSh0aGlzLmFnZW5kYSk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZm9ybUdyb3VwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZm9ybmVjZWRvcmVzXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb0Zvcm5lY2Vkb3JlcyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTmV3KCkgIHx8ICF0aGlzLmVuYWJsZVJldmFsaWRhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFuZEluaXQoc3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lcnBQcm9jZXNzRGF0YSA9IHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuYnVpbGRlckVycFByb2Nlc3NEYXRhVmFsaWRhTm90YU5hT3JkZW1Db21wcmEodGhpcy5lcnBQcm9jZXNzRGF0YSwgdGhpcy5mb3JtR3JvdXApO1xuICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmNoYW5nZURhdGFFcnAodGhpcy5lcnBQcm9jZXNzRGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgLmNoZWNhclJldmFsaWRhY2FvKHRoaXMuZXJwUHJvY2Vzc0RhdGEpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlcXVlclJldmFsaWRhY2FvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFuZEluaXQoc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGF0dWFsaXphQWdlbmRhUGFyYVJlamVpdGFkb1BvclZhbGlkYWNhbygpIHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLnBhdGlvLmFnZW5kYV9yZXZhbGlkYWNhb190aXRsZVwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGEuc3RhdHVzID0gU3RhdHVzQWdlbmRhLlJFSkVJVEFET19QT1JfVkFMSURBQ0FPO1xuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmRhLm1vdG9yaXN0YSA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS5tb3RvcmlzdGFJZH07XG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuZGEudmVpY3VsbyA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS52ZWljdWxvSWR9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuYXR1YWxpemFyQWdlbmRhKHRoaXMuYWdlbmRhKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKChfKSA9PiB0aGlzLmdldFNhdmVPYnNlcnZhYmxlKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9jaGVnYWRhLXZlaWN1bG9cIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlQW5kSW5pdChzdGFydDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmdldFNhdmVPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJpZFwiKS5zZXRWYWx1ZSh2YWx1ZS5pZCB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZVNhdmUodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCAmJiB0aGlzLnNhdmVBbmRJbml0QnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24uY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1Y2Nlc3NNZXNzYWdlKCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBzZXZlcml0eTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwic2F2ZWRfbWVzc2FnZV90aXRsZVwiKSxcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfY29udGVudFwiKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTmV3KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZm9ybUdyb3VwLnZhbHVlLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGb3JuZWNlZG9yKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgdGhpcy5lcnJvRm9ybmVjZWRvcmVzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZvcm5lY2Vkb3IgPSB0aGlzLmdldEZvcm5lY2Vkb3JGb3JtKGRhdGEpO1xuICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5wdXNoKGZvcm5lY2Vkb3IpO1xuICAgICAgICByZXR1cm4gZm9ybmVjZWRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRm9ybmVjZWRvcihjb250cm9sOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfZm9ybmVjZWRvcl9oZWFkZXJcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfZm9ybmVjZWRvcl9tZXNzYWdlXCIpLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5jb250cm9scy5pbmRleE9mKGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybmVjZWRvcmVzRm9ybSgpLnJlbW92ZUF0KGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm5lY2Vkb3JGb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgZm9ybmVjZWRvcjogW2RhdGEuZm9ybmVjZWRvciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBvcmlnZW1NZXJjYWRvcmlhOiBbZGF0YS5vcmlnZW1NZXJjYWRvcmlhXSxcbiAgICAgICAgICAgIG9yZGVuczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzKGZvcm1Hcm91cCwgXCJmb3JuZWNlZG9yXCIsIHRoaXMub25Gb3JuZWNlZG9yQ2hhbmdlKTtcblxuICAgICAgICBjb25zdCBnZXRGaWx0ZXJRdWVyeUZvcm5lY2Vkb3IgPSAodmFsdWU6IGFueSkgPT4gYHBlc3NvYS5pZCBlcSAnJHt2YWx1ZS5pZH0nYDtcbiAgICAgICAgdGhpcy5jaGVja1ZhbHVlc0NoYW5nZXMoXG4gICAgICAgICAgICBmb3JtR3JvdXAsIFwiZm9ybmVjZWRvclwiLCBcIm9yaWdlbU1lcmNhZG9yaWFcIiwgdGhpcy5vcmlnZW1NZXJjYWRvcmlhU2VydmljZSxcbiAgICAgICAgICAgIGdldEZpbHRlclF1ZXJ5Rm9ybmVjZWRvciwgWydjb2RpZ28nLCAnZW5kZXJlY28nXSwgKHZhbCkgPT4gUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWwpLCAxMCwgZmFsc2UsIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gZm9ybUdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JuZWNlZG9yZXNGb3JtKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZm9ybUdyb3VwLmdldChcImZvcm5lY2Vkb3Jlc1wiKSBhcyBGb3JtQXJyYXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb3Rhcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICByZXR1cm4gKGZvcm1Hcm91cC5nZXQoXCJub3Rhc1wiKSBhcyBGb3JtQXJyYXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGROb3RhKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKE5vdGFGb3JtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFkaWNpb25hcl9ub3RhXCIpLFxuICAgICAgICAgICAgLi4uZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGZvcm5lY2Vkb3I6IGZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yXCIpLnZhbHVlLFxuICAgICAgICAgICAgICAgIHByb2R1dG86IHRoaXMuZm9ybUdyb3VwLmdldChcInByb2R1dG9cIikudmFsdWUsXG4gICAgICAgICAgICAgICAgZmlsaWFsOiB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUsXG4gICAgICAgICAgICAgICAgZm9ybmVjZWRvck5vdGFzVG9rZW5zOiB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2VucyxcbiAgICAgICAgICAgICAgICBvcmRlbnM6IHRoaXMub3JkZW5zLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub25DbG9zZVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpKVxuICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMub25Ob3RhU2F2ZWQodmFsdWUsIGZvcm1Hcm91cCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVyTm90YShmb3JuZWNlZG9yRm9ybTogRm9ybUdyb3VwLCBvcmRlbUNvbXByYUZvcm06IEZvcm1Hcm91cCwgbm90YUZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9ub3RhX2hlYWRlclwiKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnJlbW92ZV9ub3RhX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmRlbUNvbXByYUlkID0gb3JkZW1Db21wcmFGb3JtW1widmFsdWVcIl1bXCJvcmRlbUNvbXByYVwiXVtcImlkXCJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXROb3Rhc0Zyb21PcmRlbnMoZm9ybmVjZWRvckZvcm0sIG9yZGVtQ29tcHJhSWQpLmNvbnRyb2xzLmluZGV4T2Yobm90YUZvcm0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtLCBvcmRlbUNvbXByYUlkKS5yZW1vdmVBdChpbmRleCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBub3RhID0gbm90YUZvcm1bXCJ2YWx1ZVwiXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG5vdGEuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogbm90YS5udW1lcm9Ob3RhRmlzY2FsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNoYXZlTm90YUZpc2NhbDogbm90YS5jaGF2ZU5vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgICAgIHNlcmllTm90YUZpc2NhbDogbm90YS5zZXJpZU5vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBub3RhLnNlcmllTGVnYWxOb3RhRmlzY2FsLFxuICAgICAgICAgICAgICAgICAgICBudW1lcm9Ob3RhRmlzY2FsOiBub3RhLm51bWVyb05vdGFGaXNjYWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93QnV0dG9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFnZW5kYSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5BR0VOREFETyxcbiAgICAgICAgICAgIFN0YXR1c0FnZW5kYS5BR1VBUkRBTkRPX0NPTkZJUk1BQ0FPLFxuICAgICAgICAgICAgU3RhdHVzQWdlbmRhLkFHVUFSREFORE9fQ09ORklSTUFDQU9fU09MSUNJVEFOVEUsXG4gICAgICAgICAgICBTdGF0dXNBZ2VuZGEuUkVKRUlUQURPX1BPUl9WQUxJREFDQU9cbiAgICAgICAgXS5pbmNsdWRlcyh0aGlzLmFnZW5kYS5zdGF0dXMgYXMgU3RhdHVzQWdlbmRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZUFkaWNpb25hck5vdGEoKSB7XG4gICAgICAgIGlmICh0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8gPT09IG51bGwgfHwgdGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3Zlck9yZGVtQ29tcHJhKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXAsIG9yZGVtQ29tcHJhRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucmVtb3ZlX29yZGVtX2NvbXByYV9oZWFkZXJcIiksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5yZW1vdmVfb3JkZW1fY29tcHJhX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmRlbnNDb21wcmFGb3JtID0gdGhpcy5nZXRPcmRlbnNDb21wcmEoZm9ybmVjZWRvckZvcm0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3JkZW5zQ29tcHJhRm9ybS5jb250cm9scy5pbmRleE9mKG9yZGVtQ29tcHJhRm9ybSk7XG4gICAgICAgICAgICAgICAgb3JkZW5zQ29tcHJhRm9ybS5yZW1vdmVBdChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25PcmRlbUNvbXByYVNhdmVkKG9yZGVtQ29tcHJhOiBhbnksIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgY29uc3Qgb3JkZW1Db21wcmFGb3JtID0gdGhpcy5nZXRPcmRlbUNvbXByYUZvcm0oeyBvcmRlbUNvbXByYSA6IG9yZGVtQ29tcHJhIH0pO1xuICAgICAgICB0aGlzLmdldE9yZGVuc0NvbXByYShmb3JuZWNlZG9yRm9ybSkucHVzaChvcmRlbUNvbXByYUZvcm0pO1xuICAgICAgICB0aGlzLmdldEZvcm5lY2Vkb3JCeU9yZGVtQ29tcHJhKG9yZGVtQ29tcHJhLCBmb3JuZWNlZG9yRm9ybSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JuZWNlZG9yQnlPcmRlbUNvbXByYShvcmRlbUNvbXByYTogT3JkZW1Db21wcmFEdG8sIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLmxpc3QoeyBzaXplOiAxLCBwYWdlOiAwLCBmaWx0ZXJRdWVyeTogYGlkIGVxICcke29yZGVtQ29tcHJhLnBlc3NvYS5pZH0nYCB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgbWFwKCh7IGNvbnRlbnRzIH0pID0+IChjb250ZW50cyB8fCBbXSkubGVuZ3RoICYmIGNvbnRlbnRzWzBdKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocGVzc29hID0+IHtcbiAgICAgICAgICAgICAgICBmb3JuZWNlZG9yRm9ybS5nZXQoXCJmb3JuZWNlZG9yXCIpLnNldFZhbHVlKFBlc3NvYS5mcm9tRHRvKHBlc3NvYSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0T3JkZW5zQ29tcHJhKGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5vcmRlbnMgPSBmb3JuZWNlZG9yRm9ybS5nZXQoXCJvcmRlbnNcIik7XG4gICAgICAgIHJldHVybiBmb3JuZWNlZG9yRm9ybS5nZXQoXCJvcmRlbnNcIikgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb3Rhc0Zyb21PcmRlbnMoZm9ybmVjZWRvckZvcm06IEFic3RyYWN0Q29udHJvbCwgb3JkZW1Db21wcmFJZDogYW55KSB7XG4gICAgICAgIGxldCBvcmRlbnNGb3JtU2VsZWNpb25hZG8gPSBudWxsO1xuICAgICAgICBjb25zdCBvcmRlbnNDb21wcmFGb3JtID0gZm9ybmVjZWRvckZvcm1bXCJjb250cm9sc1wiXVtcIm9yZGVuc1wiXVtcImNvbnRyb2xzXCJdO1xuXG4gICAgICAgIGZvciAobGV0IG9yZGVtQ29tcHJhRm9ybSBvZiBvcmRlbnNDb21wcmFGb3JtKSB7XG4gICAgICAgICAgICBpZiAob3JkZW1Db21wcmFGb3JtW1wiY29udHJvbHNcIl1bXCJvcmRlbUNvbXByYVwiXVtcInZhbHVlXCJdLmlkID09PSBvcmRlbUNvbXByYUlkKSB7XG4gICAgICAgICAgICAgICAgb3JkZW5zRm9ybVNlbGVjaW9uYWRvID0gb3JkZW1Db21wcmFGb3JtW1wiY29udHJvbHNcIl1bXCJub3Rhc1wiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmRlbnNGb3JtU2VsZWNpb25hZG8gYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGb3JuZWNlZG9yTm90YXNUb2tlbkVtT3JkZW1Db21wcmEoZm9ybmVjZWRvckZvcm06IEZvcm1Hcm91cCwgdG9rZW46IElUb2tlbikge1xuICAgICAgICBpZiAodGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnNhZ2VtT3JkZW1Db21wcmFOYW9TZWxlY2lvbmFkbygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm90YXMgPSB0aGlzLmZvcm5lY2Vkb3JOb3Rhcy5maWx0ZXIoZm9ybmVjZWRvck5vdGEgPT4gZm9ybmVjZWRvck5vdGEuY2hhdmVOb3RhRmlzY2FsID09PSB0b2tlbi5pZCk7XG4gICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtLCB0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICBpZiAobm90YXNGb3JtICE9PSBudWxsICYmIG5vdGFzWzBdICE9PSBudWxsKSB7XG4gICAgICAgICAgICBub3Rhc0Zvcm0ucHVzaCh0aGlzLmdldE5vdGFGb3JtKG5vdGFzWzBdKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbW92ZUZvcm5lY2Vkb3JOb3Rhc1Rva2VuRGFPcmRlbUNvbXByYSh0b2tlbik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZvcm5lY2Vkb3JOb3Rhc1Rva2VuRGFPcmRlbUNvbXByYSh0b2tlbjogSVRva2VuKSB7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzVG9rZW5zLnNwbGljZSh0aGlzLmZvcm5lY2Vkb3JOb3Rhc1Rva2Vucy5pbmRleE9mKHRva2VuKSwgMSk7XG4gICAgICAgIHRoaXMuZm9ybmVjZWRvck5vdGFzID0gdGhpcy5mb3JuZWNlZG9yTm90YXMuZmlsdGVyKGZvcm5lY2Vkb3JOb3RhID0+IGZvcm5lY2Vkb3JOb3RhLmNoYXZlTm90YUZpc2NhbCAhPT0gdG9rZW4uaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JkZW1Db21wcmFGb3JtKGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIG9yZGVtQ29tcHJhOiBbZGF0YS5vcmRlbUNvbXByYSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBub3RhczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Tm90YUZvcm0oZGF0YTogYW55ID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgY2hhdmVOb3RhRmlzY2FsOiBbZGF0YS5jaGF2ZU5vdGFGaXNjYWxdLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiBbZGF0YS5zZXJpZU5vdGFGaXNjYWxdLFxuICAgICAgICAgICAgc2VyaWVMZWdhbE5vdGFGaXNjYWw6IFtkYXRhLnNlcmllTGVnYWxOb3RhRmlzY2FsXSxcbiAgICAgICAgICAgIG51bWVyb05vdGFGaXNjYWw6IFtkYXRhLm51bWVyb05vdGFGaXNjYWxdLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lbnNhZ2VtT3JkZW1Db21wcmFOYW9TZWxlY2lvbmFkbygpIHtcbiAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFwiZXJyb3JcIiwgXCJPcmRlbSBkZSBjb21wcmEgbsOjbyBzZWxlY2lvbmFkb1wiLCBcIk5lbmh1bSBvcmRlbSBkZSBjb21wcmEgZm9pIHNlbGVjaW9uYWRvIVwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uTm90YVNhdmVkKHZhbHVlOiBhbnksIGZvcm5lY2Vkb3JGb3JtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgaWYgKHRoaXMub3JkZW1Db21wcmFTZWxlY2lvbmFkbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbU9yZGVtQ29tcHJhTmFvU2VsZWNpb25hZG8oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsdWUuYWRkRm9ybmVjZWRvcikge1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21PcmRlbnMoZm9ybmVjZWRvckZvcm0sIHRoaXMub3JkZW1Db21wcmFTZWxlY2lvbmFkby5pZCk7XG4gICAgICAgICAgICBpZiAobm90YXNGb3JtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbm90YXNGb3JtLnB1c2godGhpcy5nZXROb3RhRm9ybSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhpc3RzRm9ybmVjZWRvciA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmb3JuZWNlZG9yZXNcIikgYXMgRm9ybUFycmF5KS5jb250cm9scy5maW5kKChmb3JtKSA9PiAoZm9ybS52YWx1ZS5mb3JuZWNlZG9yIHx8IHtpZDogdW5kZWZpbmVkfSkuaWQgPT09IHZhbHVlLmZvcm5lY2Vkb3IuaWQpO1xuICAgICAgICBjb25zdCB7IGluZm9Ob3RhIH0gPSB2YWx1ZTtcbiAgICAgICAgY29uc3Qgbm90YUZvcm0gPSB0aGlzLmdldE5vdGFGb3JtKHsgXG4gICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IGluZm9Ob3RhLmNoYXZlLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiBpbmZvTm90YS5zZXJpZSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiBpbmZvTm90YS5zZXJpZUxlZ2FsLFxuICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogaW5mb05vdGEubnVtZXJvLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoISFleGlzdHNGb3JuZWNlZG9yKSB7XG4gICAgICAgICAgICBjb25zdCBub3Rhc0Zvcm0gPSB0aGlzLmdldE5vdGFzRnJvbU9yZGVucyhleGlzdHNGb3JuZWNlZG9yLCB0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2gobm90YUZvcm0pO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRmllbGRzKGV4aXN0c0Zvcm5lY2Vkb3IsIFwiZm9ybmVjZWRvclwiLCBcIm9yaWdlbU1lcmNhZG9yaWFcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoIWZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikudmFsdWUpIHtcbiAgICAgICAgICAgIGZvcm5lY2Vkb3JGb3JtLmdldChcImZvcm5lY2Vkb3JcIikuc2V0VmFsdWUoUGVzc29hLmZyb21EdG8odmFsdWUuZm9ybmVjZWRvcikpO1xuICAgICAgICAgICAgZm9ybmVjZWRvckZvcm0uZ2V0KFwib3JpZ2VtTWVyY2Fkb3JpYVwiKS5zZXRWYWx1ZShQZXNzb2FFbmRlcmVjby5mcm9tRHRvKHZhbHVlLm9yaWdlbU1lcmNhZG9yaWEpKTtcbiAgICAgICAgICAgIGNvbnN0IG5vdGFzRm9ybSA9IHRoaXMuZ2V0Tm90YXNGcm9tT3JkZW5zKGZvcm5lY2Vkb3JGb3JtLCB0aGlzLm9yZGVtQ29tcHJhU2VsZWNpb25hZG8uaWQpO1xuICAgICAgICAgICAgbm90YXNGb3JtLnB1c2gobm90YUZvcm0pO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRmllbGRzKGZvcm5lY2Vkb3JGb3JtLCBcImZvcm5lY2Vkb3JcIiwgXCJvcmlnZW1NZXJjYWRvcmlhXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZm9ybmVjZWRvciA9IHRoaXMuYWRkRm9ybmVjZWRvcih7IGZvcm5lY2Vkb3I6IFBlc3NvYS5mcm9tRHRvKHZhbHVlLmZvcm5lY2Vkb3IpLCBvcmlnZW1NZXJjYWRvcmlhOiBQZXNzb2FFbmRlcmVjby5mcm9tRHRvKHZhbHVlLm9yaWdlbU1lcmNhZG9yaWEpIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm90YXNGb3JtID0gdGhpcy5nZXROb3Rhc0Zyb21PcmRlbnMoZm9ybmVjZWRvciwgdGhpcy5vcmRlbUNvbXByYVNlbGVjaW9uYWRvLmlkKTtcbiAgICAgICAgICAgIG5vdGFzRm9ybS5wdXNoKG5vdGFGb3JtKTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZpZWxkcyhmb3JuZWNlZG9yLCBcImZvcm5lY2Vkb3JcIiwgXCJvcmlnZW1NZXJjYWRvcmlhXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRNZXNzYWdlKHNldmVyaXR5OiBzdHJpbmcsIHN1bW1hcnk6IHN0cmluZywgZGV0YWlsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgc2V2ZXJpdHksXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxuICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRldGFpbCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2F2ZU9ic2VydmFibGUoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgdmFsdWUuZW1wcmVzYSA9IHZhbHVlLmZpbGlhbC5lbXByZXNhO1xuICAgICAgICBjb25zdCByZWNlYmltZW50b0R0byA9IFJlY2ViaW1lbnRvT3JkZW1Db21wcmEudG9EdG8odmFsdWUpO1xuXG4gICAgICAgIGxldCBmb3JuZWNlZG9yZXM6IGFueVtdID0gcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzO1xuICAgICAgICByZWNlYmltZW50b0R0by5mb3JuZWNlZG9yZXMuZm9yRWFjaChhbnRlcmlvciA9PiB7XG4gICAgICAgICAgICByZWNlYmltZW50b0R0by5mb3JuZWNlZG9yZXMuZm9yRWFjaChwb3N0ZXJpb3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbnRlcmlvci5mb3JuZWNlZG9yLmlkID09PSBwb3N0ZXJpb3IuZm9ybmVjZWRvci5pZCAmJlxuICAgICAgICAgICAgICAgICAgICBhbnRlcmlvci5vcmlnZW1NZXJjYWRvcmlhLmlkID09PSBwb3N0ZXJpb3Iub3JpZ2VtTWVyY2Fkb3JpYS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JuZWNlZG9yZXMgPSBmb3JuZWNlZG9yZXMuc3BsaWNlKGZvcm5lY2Vkb3Jlcy5pbmRleE9mKHBvc3RlcmlvciksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVjZWJpbWVudG9EdG8uZm9ybmVjZWRvcmVzID0gZm9ybmVjZWRvcmVzO1xuXG5cbiAgICAgICAgaWYgKHRoaXMuaXNOZXcoKSAmJiAhdmFsdWUuaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlY2ViaW1lbnRvT3JkZW1Db21wcmFTZXJ2aWNlLmluc2VydChyZWNlYmltZW50b0R0byk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWNlYmltZW50b09yZGVtQ29tcHJhU2VydmljZS51cGRhdGUodGhpcy5mb3JtR3JvdXAudmFsdWUuaWQsIHJlY2ViaW1lbnRvRHRvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybUdyb3VwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBpZDogW3VuZGVmaW5lZF0sXG4gICAgICAgICAgICBmaWxpYWw6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGZvcm5lY2Vkb3JlczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICAgICAgICBwcm9kdXRvOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9XSxcbiAgICAgICAgICAgIGRlcml2YWNhbzogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfV0sXG4gICAgICAgICAgICB0cmFuc3BvcnRhZG9yYTogW3VuZGVmaW5lZF0sXG4gICAgICAgICAgICBzYWZyYTogW3VuZGVmaW5lZF0sXG4gICAgICAgICAgICBhZ2VuZGE6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCl7IFxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKGNvbnRyb2wpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKChmb3JtOiBGb3JtR3JvdXApID0+IHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGROb3ZhTm90YShyZXNwb25zZTogUGVzcXVpc2FyRG9jdW1lbnRvUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gKHJlc3BvbnNlLmRvY3VtZW50b3MgfHwgW10pLmxlbmd0aCA/IHJlc3BvbnNlLmRvY3VtZW50b3NbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JuZWNlZG9yID0gUGVzc29hLmZyb21EdG8odmFsdWVzLmZvcm5lY2Vkb3IpO1xuICAgICAgICBjb25zdCBvcmlnZW1NZXJjYWRvcmlhID0gUGVzc29hRW5kZXJlY28uZnJvbUR0byh2YWx1ZXMub3JpZ2VtTWVyY2Fkb3JpYSk7XG5cbiAgICAgICAgY29uc3QgZm9ybmVjZWRvckZvcm0gPSB0aGlzLmdldEZvcm5lY2Vkb3Jlc0Zvcm0oKS5jb250cm9scy5maW5kKCh7IHZhbHVlIH0pID0+IHZhbHVlLmZvcm5lY2Vkb3IuaWQgPT09IGZvcm5lY2Vkb3IuaWQpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgaWYgKCFmb3JuZWNlZG9yRm9ybSkge1xuICAgICAgICAgICAgdGhpcy5hZGRGb3JuZWNlZG9yKHsgZm9ybmVjZWRvciwgb3JpZ2VtTWVyY2Fkb3JpYSB9KTtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvck5vdGFzVG9rZW4odmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkRm9ybmVjZWRvck5vdGFzVG9rZW4odmFsdWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEZvcm5lY2Vkb3JOb3Rhc1Rva2VuKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXNUb2tlbnMucHVzaCh7XG4gICAgICAgICAgICBpZDogdGhpcy5jaGF2ZU5vdGFGaXNjYWwsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWUubnVtZXJvXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5mb3JuZWNlZG9yTm90YXMucHVzaCh7XG4gICAgICAgICAgICBjaGF2ZU5vdGFGaXNjYWw6IHRoaXMuY2hhdmVOb3RhRmlzY2FsLFxuICAgICAgICAgICAgc2VyaWVOb3RhRmlzY2FsOiB2YWx1ZS5zZXJpZSxcbiAgICAgICAgICAgIHNlcmllTGVnYWxOb3RhRmlzY2FsOiB2YWx1ZS5zZXJpZUxlZ2FsLFxuICAgICAgICAgICAgbnVtZXJvTm90YUZpc2NhbDogdmFsdWUubnVtZXJvLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYXZlTm90YUZpc2NhbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVOb3RhRXJyb3IoKSB7XG4gICAgICAgIHRoaXMuZXJyb0NoYXZlTm90YSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTm90YUVycm9yKCkge1xuICAgICAgICB0aGlzLmVycm9DaGF2ZU5vdGEgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVuc2FnZW1CdXNjYW5kb05vdGEoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIHNldmVyaXR5OiAnaW5mbycsXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5ub3RhX3NlYXJjaF9zdW1tYXJ5XCIpLFxuICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5ub3RhX3NlYXJjaF9kZXRhaWxcIiksXG4gICAgICAgICAgICBsaWZlOiA1MDAwXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzYWJsZUZpZWxkcyhmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCwgLi4ua2V5czogc3RyaW5nW10pIHtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiBmb3JtR3JvdXAuZ2V0KGtleSkuZGlzYWJsZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERlcml2YWNhb1NlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX25vbWVcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfbm9tZVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wcmVzYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZW1wcmVzYVwiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm5lY2Vkb3JTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jcGZDbnBqXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yaWdlbU1lcmNhZG9yaWFTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfZW5kZXJlY29fY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibnVtZXJvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX251bWVyb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVuZGVyZWNvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2VuZGVyZWNvX2VuZGVyZWNvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1dG9TZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnByb2R1dG9fZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucHJvZHV0b19jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2FmcmFTZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNhZnJhX2NvZGlnb1wiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNhZnJhX2Rlc2NyaWNhb1wiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNhZnJhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuc2FmcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuc2FmcmFfZGVzY3JpY2FvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wcmVzYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuc2FmcmFfZW1wcmVzYVwiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9kZXNjcmljYW9cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2EuY3BmQ25walwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlc3NvYS5jcGZDbnBqXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY25walwiKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVtQ29tcHJhRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5vcmRlbV9jb21wcmFfY29kaWdvXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wcmVzYS5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZW1wcmVzYVwiKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImZpbGlhbC5ub21lXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVtQ29tcHJhR3JpZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLm9yZGVtX2NvbXByYV9jb2RpZ29cIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXByZXNhLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5lbXByZXNhXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZmlsaWFsLm5vbWVcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxcIilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlUmV2YWxpZGF0aW9uID0gKF8pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZXJwUHJvY2Vzc0RhdGEgJiYgdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmJ1aWxkZXJFcnBQcm9jZXNzRGF0YSh0aGlzLmVycFByb2Nlc3NEYXRhLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmNoYW5nZURhdGEodGhpcy5lcnBQcm9jZXNzRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxufVxuIl19
|