oxpi-nglib 2.0.64 → 2.0.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/esm2022/lib/cadastros/clientes/clientes/clientes-form.component.mjs +4 -4
  2. package/esm2022/lib/cadastros/clientes/clientes/clientes.component.mjs +5 -5
  3. package/esm2022/lib/cadastros/clientes/clientes-add-dialog/clientes-add-dialog.component.mjs +4 -4
  4. package/esm2022/lib/cadastros/clientes/clientes-edit-dialog/clientes-edit-dialog.component.mjs +4 -4
  5. package/esm2022/lib/cadastros/clientes/selecao-cliente-dialog/selecao-cliente-dialog.component.mjs +4 -4
  6. package/esm2022/lib/cadastros/fornecedores/fornecedores/fornecedores-form.component.mjs +4 -4
  7. package/esm2022/lib/cadastros/fornecedores/fornecedores/fornecedores.component.mjs +5 -5
  8. package/esm2022/lib/cadastros/fornecedores/fornecedores-add-dialog/fornecedores-add-dialog.component.mjs +4 -4
  9. package/esm2022/lib/cadastros/fornecedores/fornecedores-edit-dialog/fornecedores-edit-dialog.component.mjs +4 -4
  10. package/esm2022/lib/cadastros/fornecedores/selecao-fornecedor-dialog/selecao-fornecedor-dialog.component.mjs +4 -4
  11. package/esm2022/lib/cadastros/funcionarios/funcionario-add-dialog/funcionario-add-dialog.component.mjs +4 -4
  12. package/esm2022/lib/cadastros/funcionarios/funcionario-edit-dialog/funcionario-edit-dialog.component.mjs +4 -4
  13. package/esm2022/lib/cadastros/funcionarios/funcionario-form/funcionario-form.component.mjs +4 -4
  14. package/esm2022/lib/cadastros/funcionarios/funcionarios/funcionarios.component.mjs +5 -5
  15. package/esm2022/lib/controls/alert-dialog/alert-dialog.component.mjs +4 -4
  16. package/esm2022/lib/controls/busy-indicator/busy-indicator.component.mjs +5 -5
  17. package/esm2022/lib/controls/check-button/check-button.component.mjs +5 -5
  18. package/esm2022/lib/controls/image-viewer/image-viewer.component.mjs +5 -5
  19. package/esm2022/lib/controls/item-card/item-card.component.mjs +4 -4
  20. package/esm2022/lib/controls/month-year-picker/month-year-picker.component.mjs +4 -4
  21. package/esm2022/lib/controls/numeric-picker/numeric-picker.component.mjs +4 -4
  22. package/esm2022/lib/controls/paginator/paginator.component.mjs +4 -4
  23. package/esm2022/lib/controls/produto-card/produto-card.component.mjs +4 -4
  24. package/esm2022/lib/controls/radio-button-group/radio-button-group.component.mjs +4 -4
  25. package/esm2022/lib/controls/selecao-list-item/selecao-list-item.component.mjs +5 -5
  26. package/esm2022/lib/oxpi-nglib.module.mjs +6 -93
  27. package/esm2022/lib/providers/auth-data.service.mjs +4 -4
  28. package/esm2022/lib/providers/common-web-service.mjs +4 -4
  29. package/esm2022/lib/providers/export.file.service.mjs +4 -4
  30. package/esm2022/lib/providers/notification.service.mjs +6 -6
  31. package/esm2022/lib/providers/preference.service.mjs +4 -4
  32. package/esm2022/lib/providers/safe-html.pipe.mjs +4 -4
  33. package/esm2022/lib/providers/screen-helper.service.mjs +4 -4
  34. package/esm2022/public-api.mjs +1 -30
  35. package/fesm2022/oxpi-nglib.mjs +521 -3347
  36. package/fesm2022/oxpi-nglib.mjs.map +1 -1
  37. package/lib/oxpi-nglib.module.d.ts +25 -54
  38. package/lib/providers/notification.service.d.ts +1 -1
  39. package/package.json +3 -3
  40. package/public-api.d.ts +0 -29
  41. package/esm2022/lib/cadastros/produtos/produto-add-dialog/produto-add-dialog.component.mjs +0 -85
  42. package/esm2022/lib/cadastros/produtos/produto-busca-filtros-dialog/produto-busca-filtros-dialog.component.mjs +0 -88
  43. package/esm2022/lib/cadastros/produtos/produto-composicao/produto-composicao.component.mjs +0 -150
  44. package/esm2022/lib/cadastros/produtos/produto-composicao-add-dialog/produto-composicao-add-dialog.component.mjs +0 -68
  45. package/esm2022/lib/cadastros/produtos/produto-edit-dialog/produto-edit-dialog.component.mjs +0 -84
  46. package/esm2022/lib/cadastros/produtos/produto-form/produto-form.component.mjs +0 -371
  47. package/esm2022/lib/cadastros/produtos/produto-selecao-dialog/produto-selecao-dialog.component.mjs +0 -159
  48. package/esm2022/lib/cadastros/produtos/produtos/produtos.component.mjs +0 -277
  49. package/esm2022/lib/cadastros/produtos-categoria-cardapio/produto-categoria-cardapio-add-dialog/produto-categoria-cardapio-add-dialog.component.mjs +0 -70
  50. package/esm2022/lib/cadastros/produtos-categoria-cardapio/produto-categoria-cardapio-edit-dialog/produto-categoria-cardapio-edit-dialog.component.mjs +0 -78
  51. package/esm2022/lib/cadastros/produtos-categoria-cardapio/produto-categoria-cardapio-selecao-dialog/produto-categoria-cardapio-selecao-dialog.component.mjs +0 -106
  52. package/esm2022/lib/cadastros/produtos-categoria-cardapio/produtos-categorias-cardapio/produtos-categorias-cardapio.component.mjs +0 -165
  53. package/esm2022/lib/cadastros/produtos-grupos/mover-grupo-dialog/mover-grupo-dialog.component.mjs +0 -65
  54. package/esm2022/lib/cadastros/produtos-grupos/produto-grupo-add-dialog/produto-grupo-add-dialog.component.mjs +0 -69
  55. package/esm2022/lib/cadastros/produtos-grupos/produto-grupo-edit-dialog/produto-grupo-edit-dialog.component.mjs +0 -68
  56. package/esm2022/lib/cadastros/produtos-grupos/produto-grupo-form/produto-grupo-form.component.mjs +0 -21
  57. package/esm2022/lib/cadastros/produtos-grupos/produto-grupo-selecao-dialog/produto-grupo-selecao-dialog.component.mjs +0 -106
  58. package/esm2022/lib/cadastros/produtos-grupos/produtos-grupos/produtos-grupos.component.mjs +0 -184
  59. package/esm2022/lib/cadastros/produtos-history/produtos-history.component.mjs +0 -79
  60. package/esm2022/lib/cadastros/produtos-informacoes-adicionais/produtos-informacoes-adicionais.component.mjs +0 -79
  61. package/esm2022/lib/cadastros/produtos-ncm-dialog/produtos-ncm-dialog.component.mjs +0 -58
  62. package/esm2022/lib/cadastros/produtos-subgrupos/produto-subgrupo-add-dialog/produto-subgrupo-add-dialog.component.mjs +0 -71
  63. package/esm2022/lib/cadastros/produtos-subgrupos/produto-subgrupo-edit-dialog/produto-subgrupo-edit-dialog.component.mjs +0 -68
  64. package/esm2022/lib/cadastros/produtos-subgrupos/produto-subgrupo-selecao-dialog/produto-subgrupo-selecao-dialog.component.mjs +0 -109
  65. package/esm2022/lib/cadastros/produtos-subgrupos/produtos-subgrupos/produtos-subgrupos.component.mjs +0 -156
  66. package/esm2022/lib/cadastros/produtos-verificacao-grupo/produto-verificacao-grupo-add-dialog/produto-verificacao-grupo-add-dialog.component.mjs +0 -70
  67. package/esm2022/lib/cadastros/produtos-verificacao-grupo/produto-verificacao-grupo-edit-dialog/produto-verificacao-grupo-edit-dialog.component.mjs +0 -78
  68. package/esm2022/lib/cadastros/produtos-verificacao-grupo/produto-verificacao-grupo-selecao-dialog/produto-verificacao-grupo-selecao-dialog.component.mjs +0 -106
  69. package/esm2022/lib/cadastros/produtos-verificacao-grupo/produtos-verificacao-grupo/produtos-verificacao-grupo.component.mjs +0 -160
  70. package/lib/cadastros/produtos/produto-add-dialog/produto-add-dialog.component.d.ts +0 -28
  71. package/lib/cadastros/produtos/produto-busca-filtros-dialog/produto-busca-filtros-dialog.component.d.ts +0 -34
  72. package/lib/cadastros/produtos/produto-composicao/produto-composicao.component.d.ts +0 -30
  73. package/lib/cadastros/produtos/produto-composicao-add-dialog/produto-composicao-add-dialog.component.d.ts +0 -29
  74. package/lib/cadastros/produtos/produto-edit-dialog/produto-edit-dialog.component.d.ts +0 -28
  75. package/lib/cadastros/produtos/produto-form/produto-form.component.d.ts +0 -83
  76. package/lib/cadastros/produtos/produto-selecao-dialog/produto-selecao-dialog.component.d.ts +0 -43
  77. package/lib/cadastros/produtos/produtos/produtos.component.d.ts +0 -50
  78. package/lib/cadastros/produtos-categoria-cardapio/produto-categoria-cardapio-add-dialog/produto-categoria-cardapio-add-dialog.component.d.ts +0 -27
  79. package/lib/cadastros/produtos-categoria-cardapio/produto-categoria-cardapio-edit-dialog/produto-categoria-cardapio-edit-dialog.component.d.ts +0 -28
  80. package/lib/cadastros/produtos-categoria-cardapio/produto-categoria-cardapio-selecao-dialog/produto-categoria-cardapio-selecao-dialog.component.d.ts +0 -35
  81. package/lib/cadastros/produtos-categoria-cardapio/produtos-categorias-cardapio/produtos-categorias-cardapio.component.d.ts +0 -39
  82. package/lib/cadastros/produtos-grupos/mover-grupo-dialog/mover-grupo-dialog.component.d.ts +0 -21
  83. package/lib/cadastros/produtos-grupos/produto-grupo-add-dialog/produto-grupo-add-dialog.component.d.ts +0 -27
  84. package/lib/cadastros/produtos-grupos/produto-grupo-edit-dialog/produto-grupo-edit-dialog.component.d.ts +0 -27
  85. package/lib/cadastros/produtos-grupos/produto-grupo-form/produto-grupo-form.component.d.ts +0 -11
  86. package/lib/cadastros/produtos-grupos/produto-grupo-selecao-dialog/produto-grupo-selecao-dialog.component.d.ts +0 -35
  87. package/lib/cadastros/produtos-grupos/produtos-grupos/produtos-grupos.component.d.ts +0 -37
  88. package/lib/cadastros/produtos-history/produtos-history.component.d.ts +0 -28
  89. package/lib/cadastros/produtos-informacoes-adicionais/produtos-informacoes-adicionais.component.d.ts +0 -25
  90. package/lib/cadastros/produtos-ncm-dialog/produtos-ncm-dialog.component.d.ts +0 -29
  91. package/lib/cadastros/produtos-subgrupos/produto-subgrupo-add-dialog/produto-subgrupo-add-dialog.component.d.ts +0 -27
  92. package/lib/cadastros/produtos-subgrupos/produto-subgrupo-edit-dialog/produto-subgrupo-edit-dialog.component.d.ts +0 -28
  93. package/lib/cadastros/produtos-subgrupos/produto-subgrupo-selecao-dialog/produto-subgrupo-selecao-dialog.component.d.ts +0 -35
  94. package/lib/cadastros/produtos-subgrupos/produtos-subgrupos/produtos-subgrupos.component.d.ts +0 -36
  95. package/lib/cadastros/produtos-verificacao-grupo/produto-verificacao-grupo-add-dialog/produto-verificacao-grupo-add-dialog.component.d.ts +0 -27
  96. package/lib/cadastros/produtos-verificacao-grupo/produto-verificacao-grupo-edit-dialog/produto-verificacao-grupo-edit-dialog.component.d.ts +0 -28
  97. package/lib/cadastros/produtos-verificacao-grupo/produto-verificacao-grupo-selecao-dialog/produto-verificacao-grupo-selecao-dialog.component.d.ts +0 -35
  98. package/lib/cadastros/produtos-verificacao-grupo/produtos-verificacao-grupo/produtos-verificacao-grupo.component.d.ts +0 -39
@@ -1,371 +0,0 @@
1
- import { animate, style, transition, trigger } from '@angular/animations';
2
- import { HttpEventType } from '@angular/common/http';
3
- import { Component, EventEmitter, Input, Output } from '@angular/core';
4
- import { createProduct } from '../../../models/entidades/produto';
5
- import { LazyTrigger } from '../../../models/infra/lazy-trigger';
6
- import { NumberParser } from '../../../models/infra/number-parser';
7
- import { ProdutoCategoriaCardapioSelecaoDialogComponent } from '../../produtos-categoria-cardapio/produto-categoria-cardapio-selecao-dialog/produto-categoria-cardapio-selecao-dialog.component';
8
- import { ProdutoGrupoSelecaoDialogComponent } from '../../produtos-grupos/produto-grupo-selecao-dialog/produto-grupo-selecao-dialog.component';
9
- import { ProdutosNcmDialogComponent } from '../../produtos-ncm-dialog/produtos-ncm-dialog.component';
10
- import { ProdutoSubgrupoSelecaoDialogComponent } from '../../produtos-subgrupos/produto-subgrupo-selecao-dialog/produto-subgrupo-selecao-dialog.component';
11
- import { ProdutoVerificaoGrupoSelecaoDialogComponent } from '../../produtos-verificacao-grupo/produto-verificacao-grupo-selecao-dialog/produto-verificacao-grupo-selecao-dialog.component';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@angular/material/dialog";
14
- import * as i2 from "../../../providers/common-web-service";
15
- import * as i3 from "@angular/common/http";
16
- import * as i4 from "../../../providers/auth-data.service";
17
- import * as i5 from "../../../providers/notification.service";
18
- import * as i6 from "../../../providers/screen-helper.service";
19
- import * as i7 from "@angular/common";
20
- import * as i8 from "@angular/forms";
21
- import * as i9 from "@angular/material/button";
22
- import * as i10 from "@angular/material/select";
23
- import * as i11 from "@angular/material/core";
24
- import * as i12 from "@angular/material/autocomplete";
25
- import * as i13 from "@angular/material/slide-toggle";
26
- import * as i14 from "../../../controls/radio-button-group/radio-button-group.component";
27
- export const lateralAnimation = trigger('menuLateral', [
28
- transition(':enter', [
29
- style({ opacity: 0 }),
30
- animate('600ms', style({ 'opacity': 1 }))
31
- ])
32
- ]);
33
- export class ProdutoFormComponent {
34
- get model() {
35
- return this._model;
36
- }
37
- set model(value) {
38
- this._model = value;
39
- this.setImgUrl();
40
- this.findNCM();
41
- }
42
- constructor(dialog, ws, http, auth, notification, screenHelper) {
43
- this.dialog = dialog;
44
- this.ws = ws;
45
- this.http = http;
46
- this.auth = auth;
47
- this.notification = notification;
48
- this.screenHelper = screenHelper;
49
- this.cfopList = [
50
- { item1: '5101', item2: 'Venda de produção do estabelecimento' },
51
- { item1: '5102', item2: 'Venda de mercadoria adquirida ou recebida de terceiros' },
52
- { item1: '5405', item2: 'Venda de mercadoria, adquirida ou recebida de terceiros, sujeita ao regime de substituição tributária, na condição de contribuinte-substituído' },
53
- { item1: '5933', item2: 'Serviço' },
54
- ];
55
- this.stList = [
56
- { item1: 'F', item2: 'Subs. Trib.' },
57
- { item1: 'I', item2: 'Isento' },
58
- { item1: 'N', item2: 'Não Tributado' },
59
- { item1: 'Q', item2: 'Isento ISSQN' },
60
- { item1: 'S', item2: 'Tributado ISSQN' },
61
- { item1: 'T', item2: 'Tributado ICMS' },
62
- ];
63
- this.modBaseICMS = [
64
- { item1: 0, item2: 'Margem Valor Agregado (%)' },
65
- { item1: 1, item2: 'Pauta (Valor)' },
66
- { item1: 2, item2: 'Preço Tabelado Máx. (valor)' },
67
- { item1: 3, item2: 'Valor da operação' },
68
- ];
69
- this.cstICMSList = [
70
- { item1: '00', item2: 'Tributada integralmente' },
71
- { item1: '10', item2: 'Tributada e com cobrança do ICMS por substituição tributária' },
72
- { item1: '20', item2: 'Com redução de base de cálculo' },
73
- { item1: '30', item2: 'Isenta ou não tributada e com cobrança do ICMS por substituição tributária' },
74
- { item1: '40', item2: 'Isenta' },
75
- { item1: '41', item2: 'Não tributada' },
76
- { item1: '50', item2: 'Suspensão' },
77
- { item1: '51', item2: 'Diferimento' },
78
- { item1: '60', item2: 'ICMS cobrado anteriormente por substituição tributária' },
79
- { item1: '70', item2: 'Com redução de base de cálculo e cobrança do ICMS por substituição tributária' },
80
- { item1: '90', item2: 'Outros' },
81
- { item1: '101', item2: 'Tributada pelo Simples Nacional com permissão de crédito' },
82
- { item1: '102', item2: 'Tributada pelo Simples Nacional sem permissão de crédito' },
83
- { item1: '103', item2: 'Isenção do ICMS no Simples Nacional para faixa de receita bruta' },
84
- { item1: '300', item2: 'Imune' },
85
- { item1: '400', item2: 'Não tributada pelo Simples Nacional' },
86
- { item1: '201', item2: 'Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por Substituição Tributária' },
87
- { item1: '202', item2: 'Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por Substituição Tributária' },
88
- { item1: '203', item2: 'Isenção do ICMS nos Simples Nacional para faixa de receita bruta e com cobrança do ICMS por Substituição Tributária' },
89
- { item1: '500', item2: 'ICMS cobrado anteriormente por substituição tributária (substituído) ou por antecipação' },
90
- { item1: '900', item2: 'Outros' }
91
- ];
92
- this.cstCofinsList = [
93
- { item1: '01', item2: ' Operação Tributável (base de cálculo = valor da operação alíquota normal (cumulativo/não cumulativo));' },
94
- { item1: '02', item2: ' Operação Tributável (base de cálculo = valor da operação (alíquota diferenciada));' },
95
- { item1: '03', item2: ' Operação Tributável (base de cálculo = quantidade vendida x alíquota por unidade de produto);' },
96
- { item1: '04', item2: ' Operação Tributável (tributação monofásica (alíquota zero));' },
97
- { item1: '05', item2: ' Operação Tributável (Substituição Tributária);' },
98
- { item1: '06', item2: ' Operação Tributável (alíquota zero);' },
99
- { item1: '07', item2: ' Operação Isenta da Contribuição;' },
100
- { item1: '08', item2: ' Operação Sem Incidência da Contribuição;' },
101
- { item1: '09', item2: ' Operação com Suspensão da Contribuição;' },
102
- { item1: '99', item2: ' Outras Operações;' },
103
- { item1: '49', item2: ' Outras Operações de Saída; ' },
104
- { item1: '50', item2: ' Operação com Direito a Crédito Vinculada Exclusivamente a Receita Tributada no Mercado Interno; ' },
105
- { item1: '51', item2: ' Operação com Direito a Crédito Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno ;' },
106
- { item1: '52', item2: ' Operação com Direito a Crédito Vinculada Exclusivamente a Receita de Exportação; ' },
107
- { item1: '53', item2: ' Operação com Direito a Crédito Vinculada a Receitas Tributadas e NãoTributadas no Mercado Interno; ' },
108
- { item1: '54', item2: ' Operação com Direito a Crédito Vinculada a Receitas Tributadas no Mercado Interno e de Exportação ;' },
109
- { item1: '55', item2: ' Operação com Direito a Crédito Vinculada a Receitas NãoTributadas no Mercado Interno e de Exportação; ' },
110
- { item1: '56', item2: ' Operação com Direito a Crédito Vinculada a Receitas Tributadas e NãoTributadas no Mercado Interno, e de Exportação;' },
111
- { item1: '60', item2: ' Crédito Presumido Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno; ' },
112
- { item1: '61', item2: ' Crédito Presumido Operação de Aquisição Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno; ' },
113
- { item1: '62', item2: ' Crédito Presumido Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação; ' },
114
- { item1: '63', item2: ' Crédito Presumido Operação de Aquisição Vinculada a Receitas Tributadas e NãoTributadas no Mercado Interno; ' },
115
- { item1: '64', item2: ' Crédito Presumido Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação; ' },
116
- { item1: '65', item2: ' Crédito Presumido Operação de Aquisição Vinculada a Receitas NãoTributadas no Mercado Interno e de Exportação; ' },
117
- { item1: '66', item2: ' Crédito Presumido Operação de Aquisição Vinculada a Receitas Tributadas e NãoTributadas no Mercado Interno, e de Exportação; ' },
118
- { item1: '67', item2: ' Crédito Presumido Outras Operações; ' },
119
- { item1: '70', item2: ' Operação de Aquisição sem Direito a Crédito; ' },
120
- { item1: '71', item2: ' Operação de Aquisição com Isenção; ' },
121
- { item1: '72', item2: ' Operação de Aquisição com Suspensão; ' },
122
- { item1: '73', item2: ' Operação de Aquisição a Alíquota Zero; ' },
123
- { item1: '74', item2: ' Operação de Aquisição sem Incidência da Contribuição; ' },
124
- { item1: '75', item2: ' Operação de Aquisição por Substituição Tributária;' },
125
- { item1: '98', item2: ' Outras Operações de Entrada;' },
126
- ];
127
- this.ncmEncontrado = false;
128
- this.ncmNaoEncontrado = false;
129
- this.isBusy = false;
130
- this.pRedBC_icmsParser = new NumberParser(v => this.model.pRedBC_icms = v, () => this.model.pRedBC_icms);
131
- this.pRedBCEfet_icmsParser = new NumberParser(v => this.model.pRedBCEfet_icms = v, () => this.model.pRedBCEfet_icms);
132
- this.picmsEfet_icmsParser = new NumberParser(v => this.model.picmsEfet_icms = v, () => this.model.picmsEfet_icms);
133
- this.vbcEfet_icmsParser = new NumberParser(v => this.model.vbcEfet_icms = v, () => this.model.vbcEfet_icms);
134
- this.vicmsEfet_icmsParser = new NumberParser(v => this.model.vicmsEfet_icms = v, () => this.model.vicmsEfet_icms);
135
- this.psT_icmsParser = new NumberParser(v => this.model.psT_icms = v, () => this.model.psT_icms);
136
- this.vbcstRet_icmsParser = new NumberParser(v => this.model.vbcstRet_icms = v, () => this.model.vbcstRet_icms);
137
- this.vicmsSubstituto_icmsParser = new NumberParser(v => this.model.vicmsSubstituto_icms = v, () => this.model.vicmsSubstituto_icms);
138
- this.vicmsstRet_icmsParser = new NumberParser(v => this.model.vicmsstRet_icms = v, () => this.model.vicmsstRet_icms);
139
- this.pfcP_icmsParser = new NumberParser(v => this.model.pfcP_icms = v, () => this.model.pfcP_icms);
140
- this.vbcfcP_icmsParser = new NumberParser(v => this.model.vbcfcP_icms = v, () => this.model.vbcfcP_icms);
141
- this.pfcpsT_icmsParser = new NumberParser(v => this.model.pfcpsT_icms = v, () => this.model.pfcpsT_icms);
142
- this.vbcfcpsT_icmsParser = new NumberParser(v => this.model.vbcfcpsT_icms = v, () => this.model.vbcfcpsT_icms);
143
- this.pfcpstRet_icmsParser = new NumberParser(v => this.model.pfcpstRet_icms = v, () => this.model.pfcpstRet_icms);
144
- this.vbcfcpstRet_icmsParser = new NumberParser(v => this.model.vbcfcpstRet_icms = v, () => this.model.vbcfcpstRet_icms);
145
- this.ppiS_pisParser = new NumberParser(v => this.model.ppiS_pis = v, () => this.model.ppiS_pis);
146
- this.vbC_pisParser = new NumberParser(v => this.model.vbC_pis = v, () => this.model.vbC_pis);
147
- this.pcofinS_cofinsParser = new NumberParser(v => this.model.pcofinS_cofins = v, () => this.model.pcofinS_cofins);
148
- this.vbC_cofinsParser = new NumberParser(v => this.model.vbC_cofins = v, () => this.model.vbC_cofins);
149
- this.precoVendaParser = new NumberParser((v) => this.model.precoVenda = v ?? 0, () => this.model.precoVenda);
150
- this.precoCustoParser = new NumberParser((v) => this.model.precoCusto = v ?? 0, () => this.model.precoCusto);
151
- this.precoFuncParser = new NumberParser((v) => this.model.precoFuncionario = v ?? 0, () => this.model.precoFuncionario);
152
- this.pICMS_icmsParser = new NumberParser((v) => this.model.pICMS_icms = v, () => this.model.pICMS_icms);
153
- this.qtdMinSubEstoqueParser = new NumberParser((v) => this.model.qtdMinSubEstoque = v, () => this.model.qtdMinSubEstoque);
154
- this.estoqueMinimoParser = new NumberParser((v) => this.model.estoqueMinimo = v ?? 0, () => this.model.estoqueMinimo);
155
- this.quantidadeSuiteParser = new NumberParser((v) => this.model.quantidadeSuite = v ?? 0, () => this.model.quantidadeSuite);
156
- this.lazyTriggerNcm = new LazyTrigger(() => { this.findNCM(); });
157
- this.editMode = false;
158
- this.nextIdClick = new EventEmitter();
159
- this.progress = 0;
160
- this.message = '';
161
- this._model = createProduct();
162
- this.tabs = [
163
- { name: "Campos Gerais", value: 0 },
164
- { name: "Campos Fiscais", value: 1 },
165
- { name: "Cardápio Digital", value: 2 }
166
- ];
167
- this.selectedTab = 0;
168
- this.setores = [];
169
- }
170
- ngOnInit() {
171
- this.loadSetores();
172
- }
173
- loadSetores() {
174
- this.isBusy = true;
175
- this.ws.getAllSetores()
176
- .subscribe(r => {
177
- this.setores = r;
178
- console.info(r);
179
- this.isBusy = false;
180
- }, err => {
181
- this.isBusy = false;
182
- this.notification.showHttpError(err);
183
- });
184
- }
185
- editarNCM() {
186
- let height = (window.innerHeight * 0.95) + 'px';
187
- let width = 550 + 'px';
188
- if (this.screenHelper.mobileScreen) {
189
- width = (window.innerWidth * 0.99) + 'px';
190
- height = (window.innerHeight * 0.99) + 'px';
191
- }
192
- let dialogRef = this.dialog.open(ProdutosNcmDialogComponent, {
193
- height: height,
194
- width: width,
195
- maxWidth: '100%',
196
- panelClass: 'dialog-p0',
197
- });
198
- dialogRef.afterClosed().subscribe(result => {
199
- if (result == undefined)
200
- return;
201
- if (!this.model)
202
- return;
203
- this.model.ncm = result.codigoApenasDigitos;
204
- this.lazyTriggerNcm.fire();
205
- });
206
- }
207
- editarSubgrupo() {
208
- let height = (window.innerHeight * 0.95) + 'px';
209
- let width = 550 + 'px';
210
- if (this.screenHelper.mobileScreen) {
211
- width = (window.innerWidth * 0.99) + 'px';
212
- height = (window.innerHeight * 0.99) + 'px';
213
- }
214
- let dialogRef = this.dialog.open(ProdutoSubgrupoSelecaoDialogComponent, {
215
- height: height,
216
- width: width,
217
- maxWidth: '100%',
218
- panelClass: 'dialog-p0',
219
- });
220
- dialogRef.afterClosed().subscribe(result => {
221
- if (result == undefined)
222
- return;
223
- if (!this.model)
224
- return;
225
- this.model.subgrupoId = result.id;
226
- this.model.subgrupoNome = result.nome;
227
- });
228
- }
229
- editarGrupo() {
230
- let height = (window.innerHeight * 0.95) + 'px';
231
- let width = 550 + 'px';
232
- if (this.screenHelper.mobileScreen) {
233
- width = (window.innerWidth * 0.99) + 'px';
234
- height = (window.innerHeight * 0.99) + 'px';
235
- }
236
- let dialogRef = this.dialog.open(ProdutoGrupoSelecaoDialogComponent, {
237
- height: height,
238
- width: width,
239
- maxWidth: '100%',
240
- panelClass: 'dialog-p0',
241
- });
242
- dialogRef.afterClosed().subscribe(result => {
243
- if (result == undefined)
244
- return;
245
- if (!this.model)
246
- return;
247
- this.model.grupoId = result.id;
248
- this.model.grupoNome = result.nome;
249
- });
250
- }
251
- editarCategoriaCardapio() {
252
- let height = (window.innerHeight * 0.95) + 'px';
253
- let width = 550 + 'px';
254
- if (this.screenHelper.mobileScreen) {
255
- width = (window.innerWidth * 0.99) + 'px';
256
- height = (window.innerHeight * 0.99) + 'px';
257
- }
258
- let dialogRef = this.dialog.open(ProdutoCategoriaCardapioSelecaoDialogComponent, {
259
- height: height,
260
- width: width,
261
- maxWidth: '100%',
262
- panelClass: 'dialog-p0',
263
- });
264
- dialogRef.afterClosed().subscribe(result => {
265
- if (result == undefined)
266
- return;
267
- if (!this.model)
268
- return;
269
- this.model.categoriaCardapioId = result.id;
270
- this.model.categoriaCardapioNome = result.nome;
271
- });
272
- }
273
- editarVerificacaoGrupo() {
274
- let height = (window.innerHeight * 0.95) + 'px';
275
- let width = 550 + 'px';
276
- if (this.screenHelper.mobileScreen) {
277
- width = (window.innerWidth * 0.99) + 'px';
278
- height = (window.innerHeight * 0.99) + 'px';
279
- }
280
- let dialogRef = this.dialog.open(ProdutoVerificaoGrupoSelecaoDialogComponent, {
281
- height: height,
282
- width: width,
283
- maxWidth: '100%',
284
- panelClass: 'dialog-p0',
285
- });
286
- dialogRef.afterClosed().subscribe(result => {
287
- if (result == undefined)
288
- return;
289
- if (!this.model)
290
- return;
291
- this.model.produtoVerificaoGrupoId = result.id;
292
- this.model.produtoVerificaoGrupoNome = result.nome;
293
- });
294
- }
295
- changeModo(ev) {
296
- this.selectedTab = ev.value;
297
- }
298
- uploadFile(files) {
299
- if (!this.model)
300
- return;
301
- if (files.length === 0) {
302
- return;
303
- }
304
- let fileToUpload = files[0];
305
- const formData = new FormData();
306
- formData.append('file', fileToUpload, fileToUpload.name);
307
- this.http.post(this.ws.UPLOAD_CONTENT_BASE_URL + "Produto?produtoId=" + this.model.id, formData, {
308
- reportProgress: true,
309
- observe: 'events',
310
- headers: {
311
- "Authorization": 'token ' + this.auth.token,
312
- }
313
- })
314
- .subscribe(event => {
315
- if (event.type === HttpEventType.UploadProgress) {
316
- const total = event.total ?? -1;
317
- this.progress = Math.round(100 * event.loaded / total);
318
- }
319
- else if (event.type === HttpEventType.Response) {
320
- this.message = 'Sucesso';
321
- this.imgUrl = undefined;
322
- setTimeout(() => {
323
- this.setImgUrl(new Date().getMinutes() + "");
324
- }, 1000);
325
- }
326
- }, err => {
327
- const httpError = err;
328
- this.message = httpError.error;
329
- });
330
- }
331
- setImgUrl(upload = undefined) {
332
- if (!this.model)
333
- return;
334
- this.imgUrl = this.ws.MEDIA_PRODUTO_IMAGEM_URL +
335
- '?produtoId=' + this.model.id +
336
- '&token=' + this.auth.token +
337
- (upload !== undefined ? '&upload=' + upload : '');
338
- }
339
- findNCM() {
340
- this.ncmEncontrado = false;
341
- this.ncmNaoEncontrado = false;
342
- if (!this.model)
343
- return;
344
- if (!this.model.ncm)
345
- return;
346
- this.isBusy = true;
347
- this.ws.findNcm(this.model.ncm)
348
- .subscribe(r => {
349
- this.ncmEncontrado = r != null;
350
- this.ncmNaoEncontrado = r == null;
351
- console.info(r);
352
- this.isBusy = false;
353
- }, err => {
354
- this.isBusy = false;
355
- this.notification.showHttpError(err);
356
- });
357
- }
358
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ProdutoFormComponent, deps: [{ token: i1.MatDialog }, { token: i2.CommonWebService }, { token: i3.HttpClient }, { token: i4.AuthDataService }, { token: i5.NotificationService }, { token: i6.ScreenHelperService }], target: i0.ɵɵFactoryTarget.Component }); }
359
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: ProdutoFormComponent, selector: "ox-produto-form", inputs: { editMode: "editMode", model: "model" }, outputs: { nextIdClick: "nextIdClick" }, ngImport: i0, template: "<div style=\"margin-bottom: 16px\">\n <ox-radio-button-group (change)=\"changeModo($event)\" [items]=\"tabs\" class=\"tool-item-container\">\n </ox-radio-button-group>\n</div>\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 0\">\n <div class=\"hbox\">\n <div class=\"form-group\">\n <label>C\u00F3digo</label>\n <div class=\"hbox\">\n <input id=\"id\" [readonly]=\"editMode\" [(ngModel)]=\"model.id\" class=\"form-control input-120\"\n tabindex=\"2\">\n <button (click)=\"nextIdClick.emit()\" *ngIf=\"!editMode\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n lightbulb\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Refer\u00EAncia</label>\n <input id=\"referencia\" maxlength=\"30\" [(ngModel)]=\"model.referencia\" class=\"form-control input-120\" tabindex=\"2\">\n </div>\n </div>\n <div class=\"form-group\">\n <label>Nome</label>\n <input id=\"nome\" maxlength=\"60\" [(ngModel)]=\"model.nome\" cdkFocusInitial class=\"form-control input-300\" tabindex=\"2\">\n </div>\n <div class=\"hbox\">\n <div class=\"form-group\">\n <label>Pre\u00E7o de Venda</label>\n <input id=\"precoVenda\" [ngModel]=\"model.precoVenda | number:'1.2-2'\"\n (ngModelChange)=\"precoVendaParser.parse($event)\" (focusout)=\"precoVendaParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Pre\u00E7o p/ Func.</label>\n <input id=\"precoFuncionario\" [ngModel]=\"model.precoFuncionario | number:'1.2-2'\"\n (ngModelChange)=\"precoFuncParser.parse($event)\" (focusout)=\"precoFuncParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Pre\u00E7o de Custo</label>\n <input id=\"precoCusto\" [ngModel]=\"model.precoCusto | number:'1.2-2'\"\n (ngModelChange)=\"precoCustoParser.parse($event)\" (focusout)=\"precoCustoParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n </div>\n <div class=\"form-group\">\n <label>Grupo</label>\n <div class=\"hbox\">\n <div id=\"grupo\" (click)=\"editarGrupo()\" class=\"form-control grow-1 input-selecao input-300\">\n {{model.grupoNome}} </div>\n <button (click)=\"editarGrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group\">\n <label>Subgrupo</label>\n <div class=\"hbox\">\n <div id=\"subgrupo\" (click)=\"editarSubgrupo()\" class=\"form-control grow-1 input-selecao input-300\">\n {{model.subgrupoNome}} </div>\n <button (click)=\"editarSubgrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>Unidade</label>\n <input id=\"unidade\" [(ngModel)]=\"model.unidade\" class=\"form-control input-120\">\n </div>\n <div class=\"form-group\">\n <label>Estoque Min.</label>\n <input id=\"estoqueMinimo\" [ngModel]=\"model.estoqueMinimo\" class=\"form-control input-120\"\n (ngModelChange)=\"estoqueMinimoParser.parse($event)\" (focusout)=\"estoqueMinimoParser.checkout()\">\n </div>\n <div class=\"form-group\">\n <label>Qtd. Su\u00EDte</label>\n <input id=\"quantidadeSuite\" [ngModel]=\"model.quantidadeSuite\" class=\"form-control input-120 text-right\"\n (ngModelChange)=\"quantidadeSuiteParser.parse($event)\" (focusout)=\"quantidadeSuiteParser.checkout()\">\n </div>\n </div>\n\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>C\u00F3digo Patrim\u00F4nio</label>\n <input id=\"codigoPatrimonio\" [(ngModel)]=\"model.codigoPatrimonio\" class=\"form-control input-120\"\n maxlength=\"36\">\n </div>\n <div class=\"form-group\">\n <label>Obs.</label>\n <input id=\"obs\" maxlength=\"300\" [(ngModel)]=\"model.obs\" class=\"form-control input-300\" maxlength=\"300\">\n </div>\n </div>\n \n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>Setor Subestoque</label>\n <mat-select [(value)]=\"model.setorSubEstoqueId\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of setores\" [value]=\"i.id\">\n {{i.nome}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Qtd. Subestoque</label>\n <input id=\"qtdMinSubEstoque\" [ngModel]=\"model.qtdMinSubEstoque\" class=\"form-control input-120 text-right\"\n (ngModelChange)=\"qtdMinSubEstoqueParser.parse($event)\" (focusout)=\"qtdMinSubEstoqueParser.checkout()\">\n </div>\n </div>\n <div class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.estoqueControlado\" tabindex=-1>Controlado no Estoque</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.imprimiCozinha\" tabindex=-1>Imprime Cozinha</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.imprimeCorredor\" tabindex=-1>Imprime Corredor</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.verNaRecepcao\" tabindex=-1>Ver na Recep\u00E7\u00E3o</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.omiteCliente\" tabindex=-1>N\u00E3o Exibe para o Cliente na Sa\u00EDda\n </mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.isAtivo\" tabindex=-1>Ativado</mat-slide-toggle>\n </div>\n\n</div>\n\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 1\">\n\n <div style=\"margin-bottom: 16px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.emiteNFCe\" tabindex=-1>Emite Fiscal\n </mat-slide-toggle>\n </div>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>GTIN</label>\n <input id=\"gtin\" [(ngModel)]=\"model.gtin\" class=\"form-control input-120\" placeholder=\"SEM GTIN\"\n maxlength=\"14\">\n </div>\n <div class=\"form-group\">\n <label>CFOP</label>\n <input id=\"cfop\" [(ngModel)]=\"model.cfop\" [matAutocomplete]=\"auto\" matInput class=\"form-control input-100\"\n maxlength=\"4\">\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of cfopList\" [value]=\"option.item1\">\n {{option.item1}} <small>{{option.item2}}</small>\n </mat-option>\n </mat-autocomplete>\n </div>\n <div class=\"form-group\">\n <label>NCM</label>\n <div class=\"hbox\">\n <input id=\"ncm\" (input)=\"lazyTriggerNcm.fire()\" [(ngModel)]=\"model.ncm\" class=\"form-control input-100\"\n maxlength=\"8\">\n <button (click)=\"editarNCM()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n <span class=\"badge buscando\" *ngIf=\"isBusy\">Buscando...</span>\n <span class=\"badge encontrado\" *ngIf=\"ncmEncontrado\">Encontrado</span>\n <span class=\"badge nao-encontrado\" *ngIf=\"ncmNaoEncontrado\">N\u00E3o encontrado</span>\n </div>\n </div>\n </div>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CEST</label>\n <input id=\"cest\" [(ngModel)]=\"model.cest\" autocomplete=\"off\" class=\"form-control input-120\" maxlength=\"7\">\n </div>\n <div class=\"form-group\">\n <label>ICMS (ECF/SAT)</label>\n <input id=\"aliquotaICMS\" [(ngModel)]=\"model.aliquotaICMS\" autocomplete=\"off\" class=\"form-control input-100 text-right\"\n maxlength=\"5\">\n </div>\n <div class=\"form-group\">\n <label>S. T. (ECF/SAT)</label>\n <input id=\"sitTrib\" [(ngModel)]=\"model.sitTrib\" autocomplete=\"off\" [matAutocomplete]=\"autoST\" matInput\n class=\"form-control input-120\" maxlength=\"5\">\n <mat-autocomplete #autoST=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of stList\" [value]=\"option.item1\">\n {{option.item1}} <small>{{option.item2}}</small>\n </mat-option>\n </mat-autocomplete>\n </div>\n \n </div>\n <h4>Campos da NFC-e</h4>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/CSOSN</label>\n <mat-select [(value)]=\"model.csT_icms\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of cstICMSList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliq. ICMS (%)</label>\n <input id=\"pICMS_icms\" [ngModel]=\"model.pICMS_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pICMS_icmsParser.parse($event)\" (focusout)=\"pICMS_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>Modalidade BC</label>\n <mat-select [(value)]=\"model.modBC_icms\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of modBaseICMS\" [value]=\"i.item1\">\n {{i.item1}} <small>{{i.item2}}</small>\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>cBenef</label>\n <input id=\"cBenef\" [(ngModel)]=\"model.cBenef\" autocomplete=\"off\" class=\"form-control input-120\" maxlength=\"20\">\n </div>\n <div class=\"form-group\">\n <label>pRedBC (%)</label>\n <input id=\"pRedBC_icms\" [ngModel]=\"model.pRedBC_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pRedBC_icmsParser.parse($event)\" (focusout)=\"pRedBC_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>ICMS Efetivo CST60/CSOSN500</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pRedBCEfet (%)</label>\n <input id=\"pRedBCEfet_icms\" [ngModel]=\"model.pRedBCEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pRedBCEfet_icmsParser.parse($event)\" (focusout)=\"pRedBCEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pICMSEfet (%)</label>\n <input id=\"picmsEfet_icms\" [ngModel]=\"model.picmsEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"picmsEfet_icmsParser.parse($event)\" (focusout)=\"picmsEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCEfet (R$)</label>\n <input id=\"vbcEfet_icms\" [ngModel]=\"model.vbcEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcEfet_icmsParser.parse($event)\" (focusout)=\"vbcEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSEfet (R$)</label>\n <input id=\"vicmsEfet_icms\" [ngModel]=\"model.vicmsEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsEfet_icmsParser.parse($event)\" (focusout)=\"vicmsEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>Substitui\u00E7\u00E3o Tribut\u00E1ria (ST)</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pST (%)</label>\n <input id=\"psT_icms\" [ngModel]=\"model.psT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"psT_icmsParser.parse($event)\" (focusout)=\"psT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCSTRet (R$)</label>\n <input id=\"vbcstRet_icms\" [ngModel]=\"model.vbcstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcstRet_icmsParser.parse($event)\" (focusout)=\"vbcstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSSubs (R$)</label>\n <input id=\"vicmsSubstituto_icms\" [ngModel]=\"model.vicmsSubstituto_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsSubstituto_icmsParser.parse($event)\"\n (focusout)=\"vicmsSubstituto_icmsParser.checkout()\" class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSSTRet (R$)</label>\n <input id=\"vicmsstRet_icms\" [ngModel]=\"model.vicmsstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsstRet_icmsParser.parse($event)\" (focusout)=\"vicmsstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>Fundo de Combate a Pobresa</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pFCP (%)</label>\n <input id=\"pfcP_icms\" [ngModel]=\"model.pfcP_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcP_icmsParser.parse($event)\" (focusout)=\"pfcP_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCP (R$)</label>\n <input id=\"vbcfcP_icms\" [ngModel]=\"model.vbcfcP_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcP_icmsParser.parse($event)\" (focusout)=\"vbcfcP_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pFCPST (%)</label>\n <input id=\"pfcpsT_icms\" [ngModel]=\"model.pfcpsT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcpsT_icmsParser.parse($event)\" (focusout)=\"pfcpsT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCPST (R$)</label>\n <input id=\"vbcfcpsT_icms\" [ngModel]=\"model.vbcfcpsT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcpsT_icmsParser.parse($event)\" (focusout)=\"vbcfcpsT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pFCPSTRet (%)</label>\n <input id=\"pfcpstRet_icms\" [ngModel]=\"model.pfcpstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcpstRet_icmsParser.parse($event)\" (focusout)=\"pfcpstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCPSTRet (R$)</label>\n <input id=\"vbcfcpstRet_icms\" [ngModel]=\"model.vbcfcpstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcpstRet_icmsParser.parse($event)\" (focusout)=\"vbcfcpstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>PIS</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/PIS</label>\n <mat-select [(value)]=\"model.csT_pis\" class=\"form-control input-120\">\n <mat-option [value]=\"null\">\n Nenhum\n </mat-option>\n <mat-option *ngFor=\"let i of cstCofinsList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliquota PIS (%)</label>\n <input id=\"ppiS_pis\" [ngModel]=\"model.ppiS_pis | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"ppiS_pisParser.parse($event)\" (focusout)=\"ppiS_pisParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>PIS BC %</label>\n <input id=\"vbC_pis\" [ngModel]=\"model.vbC_pis | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbC_pisParser.parse($event)\" (focusout)=\"vbC_pisParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n \n <h6>COFINS</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/COFINS</label>\n <mat-select [(value)]=\"model.csT_cofins\" class=\"form-control input-120\">\n <mat-option [value]=\"null\">\n Nenhum\n </mat-option>\n <mat-option *ngFor=\"let i of cstCofinsList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliq. COFINS (%)</label>\n <input id=\"pcofinS_cofins\" [ngModel]=\"model.pcofinS_cofins | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pcofinS_cofinsParser.parse($event)\" (focusout)=\"pcofinS_cofinsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>COFINS BC %</label>\n <input id=\"vbC_cofins\" [ngModel]=\"model.vbC_cofins | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbC_cofinsParser.parse($event)\" (focusout)=\"vbC_cofinsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n</div>\n\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 2\">\n\n <div style=\"margin-bottom: 16px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.disponivelCardapio\" tabindex=-1>Dispon\u00EDvel no Card\u00E1pio Digital\n </mat-slide-toggle>\n </div>\n <div style=\"margin-bottom: 8px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.destaque\" tabindex=-1>Destaque no card\u00E1pio digital\n </mat-slide-toggle>\n </div>\n <div class=\"form-group\">\n <label>Descri\u00E7\u00E3o</label>\n <textarea id=\"descricao\" [(ngModel)]=\"model.descricao\" cols=\"40\" rows=\"5\" class=\"form-control input-300\"\n tabindex=\"2\"></textarea>\n </div>\n <div class=\"form-group\">\n <label>Varia\u00E7\u00F5es (separados por ';')</label>\n <input placeholder=\"Ex.: bem passado;ao ponto;mal passado\" id=\"variacoes\" maxlength=\"300\" [(ngModel)]=\"model.variacoes\" class=\"form-control input-300\" maxlength=\"300\">\n </div>\n <div class=\"form-group\">\n <label>Categoria</label>\n <div class=\"hbox\">\n <div id=\"categoriaCardapio\" (click)=\"editarCategoriaCardapio()\"\n class=\"form-control grow-1 input-selecao input-300\">\n {{model.categoriaCardapioNome}} </div>\n <button (click)=\"editarCategoriaCardapio()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group\">\n <label>Grupo no App Camareiras</label>\n <div class=\"hbox\">\n <div id=\"verificacaoGrupo\" (click)=\"editarVerificacaoGrupo()\"\n class=\"form-control grow-1 input-selecao input-300\">\n {{model.produtoVerificaoGrupoNome}} </div>\n <button (click)=\"editarVerificacaoGrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"imagem-container\" *ngIf=\"editMode\">\n <img [src]=\"imgUrl\" class=\"img-fluid\" *ngIf=\"imgUrl\" />\n\n <input type=\"file\" #file placeholder=\"Choose file\" (change)=\"uploadFile(file.files)\" accept=\".jpg,.png\"\n style=\"display: none;\">\n\n <button mat-button color=\"primary\" type=\"button\" (click)=\"file.click()\">Escolher Imagem</button>\n\n <span class=\"upload\" *ngIf=\"progress > 0\">\n {{progress}}%\n </span>\n <span class=\"upload\" *ngIf=\"message\">\n {{message}}\n </span>\n </div>\n\n</div>", styles: [".imagem-container{border:1px solid #ced4da;display:flex;flex-direction:column;border-radius:9px;max-width:460px}small{font-size:xx-small}.badge{color:#fff;font-size:xx-small;display:flex;align-items:center;padding:4px;border-radius:13px;margin-left:2px}.badge.encontrado{background:#05a301;border:1px solid #28d112}.badge.nao-encontrado{background:#a30101;border:1px solid #d17812}.badge.buscando{background:#929292;border:1px solid #a3a3a3}h6{margin:8px 0;color:#666}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i12.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i12.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i14.RadioButtonGroupComponent, selector: "ox-radio-button-group", inputs: ["selectedItem", "items"], outputs: ["change"] }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }], animations: [lateralAnimation] }); }
360
- }
361
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ProdutoFormComponent, decorators: [{
362
- type: Component,
363
- args: [{ selector: 'ox-produto-form', animations: [lateralAnimation], template: "<div style=\"margin-bottom: 16px\">\n <ox-radio-button-group (change)=\"changeModo($event)\" [items]=\"tabs\" class=\"tool-item-container\">\n </ox-radio-button-group>\n</div>\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 0\">\n <div class=\"hbox\">\n <div class=\"form-group\">\n <label>C\u00F3digo</label>\n <div class=\"hbox\">\n <input id=\"id\" [readonly]=\"editMode\" [(ngModel)]=\"model.id\" class=\"form-control input-120\"\n tabindex=\"2\">\n <button (click)=\"nextIdClick.emit()\" *ngIf=\"!editMode\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n lightbulb\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Refer\u00EAncia</label>\n <input id=\"referencia\" maxlength=\"30\" [(ngModel)]=\"model.referencia\" class=\"form-control input-120\" tabindex=\"2\">\n </div>\n </div>\n <div class=\"form-group\">\n <label>Nome</label>\n <input id=\"nome\" maxlength=\"60\" [(ngModel)]=\"model.nome\" cdkFocusInitial class=\"form-control input-300\" tabindex=\"2\">\n </div>\n <div class=\"hbox\">\n <div class=\"form-group\">\n <label>Pre\u00E7o de Venda</label>\n <input id=\"precoVenda\" [ngModel]=\"model.precoVenda | number:'1.2-2'\"\n (ngModelChange)=\"precoVendaParser.parse($event)\" (focusout)=\"precoVendaParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Pre\u00E7o p/ Func.</label>\n <input id=\"precoFuncionario\" [ngModel]=\"model.precoFuncionario | number:'1.2-2'\"\n (ngModelChange)=\"precoFuncParser.parse($event)\" (focusout)=\"precoFuncParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Pre\u00E7o de Custo</label>\n <input id=\"precoCusto\" [ngModel]=\"model.precoCusto | number:'1.2-2'\"\n (ngModelChange)=\"precoCustoParser.parse($event)\" (focusout)=\"precoCustoParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n </div>\n <div class=\"form-group\">\n <label>Grupo</label>\n <div class=\"hbox\">\n <div id=\"grupo\" (click)=\"editarGrupo()\" class=\"form-control grow-1 input-selecao input-300\">\n {{model.grupoNome}} </div>\n <button (click)=\"editarGrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group\">\n <label>Subgrupo</label>\n <div class=\"hbox\">\n <div id=\"subgrupo\" (click)=\"editarSubgrupo()\" class=\"form-control grow-1 input-selecao input-300\">\n {{model.subgrupoNome}} </div>\n <button (click)=\"editarSubgrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>Unidade</label>\n <input id=\"unidade\" [(ngModel)]=\"model.unidade\" class=\"form-control input-120\">\n </div>\n <div class=\"form-group\">\n <label>Estoque Min.</label>\n <input id=\"estoqueMinimo\" [ngModel]=\"model.estoqueMinimo\" class=\"form-control input-120\"\n (ngModelChange)=\"estoqueMinimoParser.parse($event)\" (focusout)=\"estoqueMinimoParser.checkout()\">\n </div>\n <div class=\"form-group\">\n <label>Qtd. Su\u00EDte</label>\n <input id=\"quantidadeSuite\" [ngModel]=\"model.quantidadeSuite\" class=\"form-control input-120 text-right\"\n (ngModelChange)=\"quantidadeSuiteParser.parse($event)\" (focusout)=\"quantidadeSuiteParser.checkout()\">\n </div>\n </div>\n\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>C\u00F3digo Patrim\u00F4nio</label>\n <input id=\"codigoPatrimonio\" [(ngModel)]=\"model.codigoPatrimonio\" class=\"form-control input-120\"\n maxlength=\"36\">\n </div>\n <div class=\"form-group\">\n <label>Obs.</label>\n <input id=\"obs\" maxlength=\"300\" [(ngModel)]=\"model.obs\" class=\"form-control input-300\" maxlength=\"300\">\n </div>\n </div>\n \n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>Setor Subestoque</label>\n <mat-select [(value)]=\"model.setorSubEstoqueId\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of setores\" [value]=\"i.id\">\n {{i.nome}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Qtd. Subestoque</label>\n <input id=\"qtdMinSubEstoque\" [ngModel]=\"model.qtdMinSubEstoque\" class=\"form-control input-120 text-right\"\n (ngModelChange)=\"qtdMinSubEstoqueParser.parse($event)\" (focusout)=\"qtdMinSubEstoqueParser.checkout()\">\n </div>\n </div>\n <div class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.estoqueControlado\" tabindex=-1>Controlado no Estoque</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.imprimiCozinha\" tabindex=-1>Imprime Cozinha</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.imprimeCorredor\" tabindex=-1>Imprime Corredor</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.verNaRecepcao\" tabindex=-1>Ver na Recep\u00E7\u00E3o</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.omiteCliente\" tabindex=-1>N\u00E3o Exibe para o Cliente na Sa\u00EDda\n </mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.isAtivo\" tabindex=-1>Ativado</mat-slide-toggle>\n </div>\n\n</div>\n\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 1\">\n\n <div style=\"margin-bottom: 16px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.emiteNFCe\" tabindex=-1>Emite Fiscal\n </mat-slide-toggle>\n </div>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>GTIN</label>\n <input id=\"gtin\" [(ngModel)]=\"model.gtin\" class=\"form-control input-120\" placeholder=\"SEM GTIN\"\n maxlength=\"14\">\n </div>\n <div class=\"form-group\">\n <label>CFOP</label>\n <input id=\"cfop\" [(ngModel)]=\"model.cfop\" [matAutocomplete]=\"auto\" matInput class=\"form-control input-100\"\n maxlength=\"4\">\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of cfopList\" [value]=\"option.item1\">\n {{option.item1}} <small>{{option.item2}}</small>\n </mat-option>\n </mat-autocomplete>\n </div>\n <div class=\"form-group\">\n <label>NCM</label>\n <div class=\"hbox\">\n <input id=\"ncm\" (input)=\"lazyTriggerNcm.fire()\" [(ngModel)]=\"model.ncm\" class=\"form-control input-100\"\n maxlength=\"8\">\n <button (click)=\"editarNCM()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n <span class=\"badge buscando\" *ngIf=\"isBusy\">Buscando...</span>\n <span class=\"badge encontrado\" *ngIf=\"ncmEncontrado\">Encontrado</span>\n <span class=\"badge nao-encontrado\" *ngIf=\"ncmNaoEncontrado\">N\u00E3o encontrado</span>\n </div>\n </div>\n </div>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CEST</label>\n <input id=\"cest\" [(ngModel)]=\"model.cest\" autocomplete=\"off\" class=\"form-control input-120\" maxlength=\"7\">\n </div>\n <div class=\"form-group\">\n <label>ICMS (ECF/SAT)</label>\n <input id=\"aliquotaICMS\" [(ngModel)]=\"model.aliquotaICMS\" autocomplete=\"off\" class=\"form-control input-100 text-right\"\n maxlength=\"5\">\n </div>\n <div class=\"form-group\">\n <label>S. T. (ECF/SAT)</label>\n <input id=\"sitTrib\" [(ngModel)]=\"model.sitTrib\" autocomplete=\"off\" [matAutocomplete]=\"autoST\" matInput\n class=\"form-control input-120\" maxlength=\"5\">\n <mat-autocomplete #autoST=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of stList\" [value]=\"option.item1\">\n {{option.item1}} <small>{{option.item2}}</small>\n </mat-option>\n </mat-autocomplete>\n </div>\n \n </div>\n <h4>Campos da NFC-e</h4>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/CSOSN</label>\n <mat-select [(value)]=\"model.csT_icms\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of cstICMSList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliq. ICMS (%)</label>\n <input id=\"pICMS_icms\" [ngModel]=\"model.pICMS_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pICMS_icmsParser.parse($event)\" (focusout)=\"pICMS_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>Modalidade BC</label>\n <mat-select [(value)]=\"model.modBC_icms\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of modBaseICMS\" [value]=\"i.item1\">\n {{i.item1}} <small>{{i.item2}}</small>\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>cBenef</label>\n <input id=\"cBenef\" [(ngModel)]=\"model.cBenef\" autocomplete=\"off\" class=\"form-control input-120\" maxlength=\"20\">\n </div>\n <div class=\"form-group\">\n <label>pRedBC (%)</label>\n <input id=\"pRedBC_icms\" [ngModel]=\"model.pRedBC_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pRedBC_icmsParser.parse($event)\" (focusout)=\"pRedBC_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>ICMS Efetivo CST60/CSOSN500</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pRedBCEfet (%)</label>\n <input id=\"pRedBCEfet_icms\" [ngModel]=\"model.pRedBCEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pRedBCEfet_icmsParser.parse($event)\" (focusout)=\"pRedBCEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pICMSEfet (%)</label>\n <input id=\"picmsEfet_icms\" [ngModel]=\"model.picmsEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"picmsEfet_icmsParser.parse($event)\" (focusout)=\"picmsEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCEfet (R$)</label>\n <input id=\"vbcEfet_icms\" [ngModel]=\"model.vbcEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcEfet_icmsParser.parse($event)\" (focusout)=\"vbcEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSEfet (R$)</label>\n <input id=\"vicmsEfet_icms\" [ngModel]=\"model.vicmsEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsEfet_icmsParser.parse($event)\" (focusout)=\"vicmsEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>Substitui\u00E7\u00E3o Tribut\u00E1ria (ST)</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pST (%)</label>\n <input id=\"psT_icms\" [ngModel]=\"model.psT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"psT_icmsParser.parse($event)\" (focusout)=\"psT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCSTRet (R$)</label>\n <input id=\"vbcstRet_icms\" [ngModel]=\"model.vbcstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcstRet_icmsParser.parse($event)\" (focusout)=\"vbcstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSSubs (R$)</label>\n <input id=\"vicmsSubstituto_icms\" [ngModel]=\"model.vicmsSubstituto_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsSubstituto_icmsParser.parse($event)\"\n (focusout)=\"vicmsSubstituto_icmsParser.checkout()\" class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSSTRet (R$)</label>\n <input id=\"vicmsstRet_icms\" [ngModel]=\"model.vicmsstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsstRet_icmsParser.parse($event)\" (focusout)=\"vicmsstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>Fundo de Combate a Pobresa</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pFCP (%)</label>\n <input id=\"pfcP_icms\" [ngModel]=\"model.pfcP_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcP_icmsParser.parse($event)\" (focusout)=\"pfcP_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCP (R$)</label>\n <input id=\"vbcfcP_icms\" [ngModel]=\"model.vbcfcP_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcP_icmsParser.parse($event)\" (focusout)=\"vbcfcP_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pFCPST (%)</label>\n <input id=\"pfcpsT_icms\" [ngModel]=\"model.pfcpsT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcpsT_icmsParser.parse($event)\" (focusout)=\"pfcpsT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCPST (R$)</label>\n <input id=\"vbcfcpsT_icms\" [ngModel]=\"model.vbcfcpsT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcpsT_icmsParser.parse($event)\" (focusout)=\"vbcfcpsT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pFCPSTRet (%)</label>\n <input id=\"pfcpstRet_icms\" [ngModel]=\"model.pfcpstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcpstRet_icmsParser.parse($event)\" (focusout)=\"pfcpstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCPSTRet (R$)</label>\n <input id=\"vbcfcpstRet_icms\" [ngModel]=\"model.vbcfcpstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcpstRet_icmsParser.parse($event)\" (focusout)=\"vbcfcpstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>PIS</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/PIS</label>\n <mat-select [(value)]=\"model.csT_pis\" class=\"form-control input-120\">\n <mat-option [value]=\"null\">\n Nenhum\n </mat-option>\n <mat-option *ngFor=\"let i of cstCofinsList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliquota PIS (%)</label>\n <input id=\"ppiS_pis\" [ngModel]=\"model.ppiS_pis | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"ppiS_pisParser.parse($event)\" (focusout)=\"ppiS_pisParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>PIS BC %</label>\n <input id=\"vbC_pis\" [ngModel]=\"model.vbC_pis | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbC_pisParser.parse($event)\" (focusout)=\"vbC_pisParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n \n <h6>COFINS</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/COFINS</label>\n <mat-select [(value)]=\"model.csT_cofins\" class=\"form-control input-120\">\n <mat-option [value]=\"null\">\n Nenhum\n </mat-option>\n <mat-option *ngFor=\"let i of cstCofinsList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliq. COFINS (%)</label>\n <input id=\"pcofinS_cofins\" [ngModel]=\"model.pcofinS_cofins | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pcofinS_cofinsParser.parse($event)\" (focusout)=\"pcofinS_cofinsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>COFINS BC %</label>\n <input id=\"vbC_cofins\" [ngModel]=\"model.vbC_cofins | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbC_cofinsParser.parse($event)\" (focusout)=\"vbC_cofinsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n</div>\n\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 2\">\n\n <div style=\"margin-bottom: 16px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.disponivelCardapio\" tabindex=-1>Dispon\u00EDvel no Card\u00E1pio Digital\n </mat-slide-toggle>\n </div>\n <div style=\"margin-bottom: 8px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.destaque\" tabindex=-1>Destaque no card\u00E1pio digital\n </mat-slide-toggle>\n </div>\n <div class=\"form-group\">\n <label>Descri\u00E7\u00E3o</label>\n <textarea id=\"descricao\" [(ngModel)]=\"model.descricao\" cols=\"40\" rows=\"5\" class=\"form-control input-300\"\n tabindex=\"2\"></textarea>\n </div>\n <div class=\"form-group\">\n <label>Varia\u00E7\u00F5es (separados por ';')</label>\n <input placeholder=\"Ex.: bem passado;ao ponto;mal passado\" id=\"variacoes\" maxlength=\"300\" [(ngModel)]=\"model.variacoes\" class=\"form-control input-300\" maxlength=\"300\">\n </div>\n <div class=\"form-group\">\n <label>Categoria</label>\n <div class=\"hbox\">\n <div id=\"categoriaCardapio\" (click)=\"editarCategoriaCardapio()\"\n class=\"form-control grow-1 input-selecao input-300\">\n {{model.categoriaCardapioNome}} </div>\n <button (click)=\"editarCategoriaCardapio()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group\">\n <label>Grupo no App Camareiras</label>\n <div class=\"hbox\">\n <div id=\"verificacaoGrupo\" (click)=\"editarVerificacaoGrupo()\"\n class=\"form-control grow-1 input-selecao input-300\">\n {{model.produtoVerificaoGrupoNome}} </div>\n <button (click)=\"editarVerificacaoGrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"imagem-container\" *ngIf=\"editMode\">\n <img [src]=\"imgUrl\" class=\"img-fluid\" *ngIf=\"imgUrl\" />\n\n <input type=\"file\" #file placeholder=\"Choose file\" (change)=\"uploadFile(file.files)\" accept=\".jpg,.png\"\n style=\"display: none;\">\n\n <button mat-button color=\"primary\" type=\"button\" (click)=\"file.click()\">Escolher Imagem</button>\n\n <span class=\"upload\" *ngIf=\"progress > 0\">\n {{progress}}%\n </span>\n <span class=\"upload\" *ngIf=\"message\">\n {{message}}\n </span>\n </div>\n\n</div>", styles: [".imagem-container{border:1px solid #ced4da;display:flex;flex-direction:column;border-radius:9px;max-width:460px}small{font-size:xx-small}.badge{color:#fff;font-size:xx-small;display:flex;align-items:center;padding:4px;border-radius:13px;margin-left:2px}.badge.encontrado{background:#05a301;border:1px solid #28d112}.badge.nao-encontrado{background:#a30101;border:1px solid #d17812}.badge.buscando{background:#929292;border:1px solid #a3a3a3}h6{margin:8px 0;color:#666}\n"] }]
364
- }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.CommonWebService }, { type: i3.HttpClient }, { type: i4.AuthDataService }, { type: i5.NotificationService }, { type: i6.ScreenHelperService }]; }, propDecorators: { editMode: [{
365
- type: Input
366
- }], nextIdClick: [{
367
- type: Output
368
- }], model: [{
369
- type: Input
370
- }] } });
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHV0by1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL294cGktbmdsaWIvc3JjL2xpYi9jYWRhc3Ryb3MvcHJvZHV0b3MvcHJvZHV0by1mb3JtL3Byb2R1dG8tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9veHBpLW5nbGliL3NyYy9saWIvY2FkYXN0cm9zL3Byb2R1dG9zL3Byb2R1dG8tZm9ybS9wcm9kdXRvLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBaUMsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsYUFBYSxFQUFXLE1BQU0sbUNBQW1DLENBQUM7QUFFM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU9uRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxpSUFBaUksQ0FBQztBQUNqTSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyRkFBMkYsQ0FBQztBQUMvSSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNyRyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxvR0FBb0csQ0FBQztBQUMzSixPQUFPLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSw4SEFBOEgsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUUzTCxNQUFNLENBQUMsTUFBTSxnQkFB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QUFPO1FBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQzVCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0F6VVUsb0JBQW9CO2tHQUFwQixvQkFBb0Isa0pDdENqQyx5c3JCQWdiTSw4cEZENVlRLENBQUMsZ0JBQWdCLENBQUM7OzJGQUVuQixvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBR2YsQ0FBQyxnQkFBZ0IsQ0FBQzswUEEwSHJCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFTTSxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFJhZGlvQnV0dG9uR3JvdXBEYXRhIH0gZnJvbSAnLi4vLi4vLi4vY29udHJvbHMvcmFkaW8tYnV0dG9uLWdyb3VwL3JhZGlvLWJ1dHRvbi1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgY3JlYXRlUHJvZHVjdCwgUHJvZHV0byB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbnRpZGFkZXMvcHJvZHV0byc7XG5pbXBvcnQgeyBTZXRvckVzdG9xdWUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZW50aWRhZGVzL3NldG9yLWVzdG9xdWUnO1xuaW1wb3J0IHsgTGF6eVRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvaW5mcmEvbGF6eS10cmlnZ2VyJztcbmltcG9ydCB7IE51bWJlclBhcnNlciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbmZyYS9udW1iZXItcGFyc2VyJztcbmltcG9ydCB7IFR1cGxlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3R1cGxlJztcbmltcG9ydCB7IEF1dGhEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9hdXRoLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25XZWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2NvbW1vbi13ZWItc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNjcmVlbkhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvc2NyZWVuLWhlbHBlci5zZXJ2aWNlJztcblxuaW1wb3J0IHsgUHJvZHV0b0NhdGVnb3JpYUNhcmRhcGlvU2VsZWNhb0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Byb2R1dG9zLWNhdGVnb3JpYS1jYXJkYXBpby9wcm9kdXRvLWNhdGVnb3JpYS1jYXJkYXBpby1zZWxlY2FvLWRpYWxvZy9wcm9kdXRvLWNhdGVnb3JpYS1jYXJkYXBpby1zZWxlY2FvLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHV0b0dydXBvU2VsZWNhb0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Byb2R1dG9zLWdydXBvcy9wcm9kdXRvLWdydXBvLXNlbGVjYW8tZGlhbG9nL3Byb2R1dG8tZ3J1cG8tc2VsZWNhby1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1dG9zTmNtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZHV0b3MtbmNtLWRpYWxvZy9wcm9kdXRvcy1uY20tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdXRvU3ViZ3J1cG9TZWxlY2FvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZHV0b3Mtc3ViZ3J1cG9zL3Byb2R1dG8tc3ViZ3J1cG8tc2VsZWNhby1kaWFsb2cvcHJvZHV0by1zdWJncnVwby1zZWxlY2FvLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHV0b1ZlcmlmaWNhb0dydXBvU2VsZWNhb0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Byb2R1dG9zLXZlcmlmaWNhY2FvLWdydXBvL3Byb2R1dG8tdmVyaWZpY2FjYW8tZ3J1cG8tc2VsZWNhby1kaWFsb2cvcHJvZHV0by12ZXJpZmljYWNhby1ncnVwby1zZWxlY2FvLWRpYWxvZy5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgbGF0ZXJhbEFuaW1hdGlvbiA9IHRyaWdnZXIoXG4gICdtZW51TGF0ZXJhbCcsXG4gIFtcbiAgICB0cmFuc2l0aW9uKFxuICAgICAgJzplbnRlcicsIFtcbiAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCB9KSxcbiAgICAgIGFuaW1hdGUoJzYwMG1zJywgc3R5bGUoeyAnb3BhY2l0eSc6IDEgfSkpXG4gICAgXVxuICAgICldXG4pXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ294LXByb2R1dG8tZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9kdXRvLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9kdXRvLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW2xhdGVyYWxBbmltYXRpb25dXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1dG9Gb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2ZvcExpc3Q6IFR1cGxlPHN0cmluZywgc3RyaW5nPltdID0gW1xuICAgIHsgaXRlbTE6ICc1MTAxJywgaXRlbTI6ICdWZW5kYSBkZSBwcm9kdcOnw6NvIGRvIGVzdGFiZWxlY2ltZW50bycgfSxcbiAgICB7IGl0ZW0xOiAnNTEwMicsIGl0ZW0yOiAnVmVuZGEgZGUgbWVyY2Fkb3JpYSBhZHF1aXJpZGEgb3UgcmVjZWJpZGEgZGUgdGVyY2Vpcm9zJyB9LFxuICAgIHsgaXRlbTE6ICc1NDA1JywgaXRlbTI6ICdWZW5kYSBkZSBtZXJjYWRvcmlhLCBhZHF1aXJpZGEgb3UgcmVjZWJpZGEgZGUgdGVyY2Vpcm9zLCBzdWplaXRhIGFvIHJlZ2ltZSBkZSBzdWJzdGl0dWnDp8OjbyB0cmlidXTDoXJpYSwgbmEgY29uZGnDp8OjbyBkZSBjb250cmlidWludGUtc3Vic3RpdHXDrWRvJyB9LFxuICAgIHsgaXRlbTE6ICc1OTMzJywgaXRlbTI6ICdTZXJ2acOnbycgfSxcbiAgXTtcbiAgc3RMaXN0OiBUdXBsZTxzdHJpbmcsIHN0cmluZz5bXSA9IFtcbiAgICB7IGl0ZW0xOiAnRicsIGl0ZW0yOiAnU3Vicy4gVHJpYi4nIH0sXG4gICAgeyBpdGVtMTogJ0knLCBpdGVtMjogJ0lzZW50bycgfSxcbiAgICB7IGl0ZW0xOiAnTicsIGl0ZW0yOiAnTsOjbyBUcmlidXRhZG8nIH0sXG4gICAgeyBpdGVtMTogJ1EnLCBpdGVtMjogJ0lzZW50byBJU1NRTicgfSxcbiAgICB7IGl0ZW0xOiAnUycsIGl0ZW0yOiAnVHJpYnV0YWRvIElTU1FOJyB9LFxuICAgIHsgaXRlbTE6ICdUJywgaXRlbTI6ICdUcmlidXRhZG8gSUNNUycgfSxcbiAgXTtcbiAgbW9kQmFzZUlDTVM6IFR1cGxlPG51bWJlciwgc3RyaW5nPltdID0gW1xuICAgIHsgaXRlbTE6IDAsIGl0ZW0yOiAnTWFyZ2VtIFZhbG9yIEFncmVnYWRvICglKScgfSxcbiAgICB7IGl0ZW0xOiAxLCBpdGVtMjogJ1BhdXRhIChWYWxvciknIH0sXG4gICAgeyBpdGVtMTogMiwgaXRlbTI6ICdQcmXDp28gVGFiZWxhZG8gTcOheC4gKHZhbG9yKScgfSxcbiAgICB7IGl0ZW0xOiAzLCBpdGVtMjogJ1ZhbG9yIGRhIG9wZXJhw6fDo28nIH0sXG4gIF07XG4gIGNzdElDTVNMaXN0OiBUdXBsZTxzdHJpbmcsIHN0cmluZz5bXSA9IFtcbiAgICB7IGl0ZW0xOiAnMDAnLCBpdGVtMjogJ1RyaWJ1dGFkYSBpbnRlZ3JhbG1lbnRlJyB9LFxuICAgIHsgaXRlbTE6ICcxMCcsIGl0ZW0yOiAnVHJpYnV0YWRhIGUgY29tIGNvYnJhbsOnYSBkbyBJQ01TIHBvciBzdWJzdGl0dWnDp8OjbyB0cmlidXTDoXJpYScgfSxcbiAgICB7IGl0ZW0xOiAnMjAnLCBpdGVtMjogJ0NvbSByZWR1w6fDo28gZGUgYmFzZSBkZSBjw6FsY3VsbycgfSxcbiAgICB7IGl0ZW0xOiAnMzAnLCBpdGVtMjogJ0lzZW50YSBvdSBuw6NvIHRyaWJ1dGFkYSBlIGNvbSBjb2JyYW7Dp2EgZG8gSUNNUyBwb3Igc3Vic3RpdHVpw6fDo28gdHJpYnV0w6FyaWEnIH0sXG4gICAgeyBpdGVtMTogJzQwJywgaXRlbTI6ICdJc2VudGEnIH0sXG4gICAgeyBpdGVtMTogJzQxJywgaXRlbTI6ICdOw6NvIHRyaWJ1dGFkYScgfSxcbiAgICB7IGl0ZW0xOiAnNTAnLCBpdGVtMjogJ1N1c3BlbnPDo28nIH0sXG4gICAgeyBpdGVtMTogJzUxJywgaXRlbTI6ICdEaWZlcmltZW50bycgfSxcbiAgICB7IGl0ZW0xOiAnNjAnLCBpdGVtMjogJ0lDTVMgY29icmFkbyBhbnRlcmlvcm1lbnRlIHBvciBzdWJzdGl0dWnDp8OjbyB0cmlidXTDoXJpYScgfSxcbiAgICB7IGl0ZW0xOiAnNzAnLCBpdGVtMjogJ0NvbSByZWR1w6fDo28gZGUgYmFzZSBkZSBjw6FsY3VsbyBlIGNvYnJhbsOnYSBkbyBJQ01TIHBvciBzdWJzdGl0dWnDp8OjbyB0cmlidXTDoXJpYScgfSxcbiAgICB7IGl0ZW0xOiAnOTAnLCBpdGVtMjogJ091dHJvcycgfSxcbiAgICB7IGl0ZW0xOiAnMTAxJywgaXRlbTI6ICdUcmlidXRhZGEgcGVsbyBTaW1wbGVzIE5hY2lvbmFsIGNvbSBwZXJtaXNzw6NvIGRlIGNyw6lkaXRvJyB9LFxuICAgIHsgaXRlbTE6ICcxMDInLCBpdGVtMjogJ1RyaWJ1dGFkYSBwZWxvIFNpbXBsZXMgTmFjaW9uYWwgc2VtIHBlcm1pc3PDo28gZGUgY3LDqWRpdG8nIH0sXG4gICAgeyBpdGVtMTogJzEwMycsIGl0ZW0yOiAnSXNlbsOnw6NvIGRvIElDTVMgbm8gU2ltcGxlcyBOYWNpb25hbCBwYXJhIGZhaXhhIGRlIHJlY2VpdGEgYnJ1dGEnIH0sXG4gICAgeyBpdGVtMTogJzMwMCcsIGl0ZW0yOiAnSW11bmUnIH0sXG4gICAgeyBpdGVtMTogJzQwMCcsIGl0ZW0yOiAnTsOjbyB0cmlidXRhZGEgcGVsbyBTaW1wbGVzIE5hY2lvbmFsJyB9LFxuICAgIHsgaXRlbTE6ICcyMDEnLCBpdGVtMjogJ1RyaWJ1dGFkYSBwZWxvIFNpbXBsZXMgTmFjaW9uYWwgY29tIHBlcm1pc3PDo28gZGUgY3LDqWRpdG8gZSBjb20gY29icmFuw6dhIGRvIElDTVMgcG9yIFN1YnN0aXR1acOnw6NvIFRyaWJ1dMOhcmlhJyB9LFxuICAgIHsgaXRlbTE6ICcyMDInLCBpdGVtMjogJ1RyaWJ1dGFkYSBwZWxvIFNpbXBsZXMgTmFjaW9uYWwgc2VtIHBlcm1pc3PDo28gZGUgY3LDqWRpdG8gZSBjb20gY29icmFuw6dhIGRvIElDTVMgcG9yIFN1YnN0aXR1acOnw6NvIFRyaWJ1dMOhcmlhJyB9LFxuICAgIHsgaXRlbTE6ICcyMDMnLCBpdGVtMjogJ0lzZW7Dp8OjbyBkbyBJQ01TIG5vcyBTaW1wbGVzIE5hY2lvbmFsIHBhcmEgZmFpeGEgZGUgcmVjZWl0YSBicnV0YSBlIGNvbSBjb2JyYW7Dp2EgZG8gSUNNUyBwb3IgU3Vic3RpdHVpw6fDo28gVHJpYnV0w6FyaWEnIH0sXG4gICAgeyBpdGVtMTogJzUwMCcsIGl0ZW0yOiAnSUNNUyBjb2JyYWRvIGFudGVyaW9ybWVudGUgcG9yIHN1YnN0aXR1acOnw6NvIHRyaWJ1dMOhcmlhIChzdWJzdGl0dcOtZG8pIG91IHBvciBhbnRlY2lwYcOnw6NvJyB9LFxuICAgIHsgaXRlbTE6ICc5MDAnLCBpdGVtMjogJ091dHJvcycgfVxuICBdO1xuICBjc3RDb2ZpbnNMaXN0OiBUdXBsZTxzdHJpbmcsIHN0cmluZz5bXSA9IFtcbiAgICB7IGl0ZW0xOiAnMDEnLCBpdGVtMjogJyBPcGVyYcOnw6NvIFRyaWJ1dMOhdmVsIChiYXNlIGRlIGPDoWxjdWxvID0gdmFsb3IgZGEgb3BlcmHDp8OjbyBhbMOtcXVvdGEgbm9ybWFsIChjdW11bGF0aXZvL27Do28gY3VtdWxhdGl2bykpOycgfSxcbiAgICB7IGl0ZW0xOiAnMDInLCBpdGVtMjogJyBPcGVyYcOnw6NvIFRyaWJ1dMOhdmVsIChiYXNlIGRlIGPDoWxjdWxvID0gdmFsb3IgZGEgb3BlcmHDp8OjbyAoYWzDrXF1b3RhIGRpZmVyZW5jaWFkYSkpOycgfSxcbiAgICB7IGl0ZW0xOiAnMDMnLCBpdGVtMjogJyBPcGVyYcOnw6NvIFRyaWJ1dMOhdmVsIChiYXNlIGRlIGPDoWxjdWxvID0gcXVhbnRpZGFkZSB2ZW5kaWRhIHggYWzDrXF1b3RhIHBvciB1bmlkYWRlIGRlIHByb2R1dG8pOycgfSxcbiAgICB7IGl0ZW0xOiAnMDQnLCBpdGVtMjogJyBPcGVyYcOnw6NvIFRyaWJ1dMOhdmVsICh0cmlidXRhw6fDo28gbW9ub2bDoXNpY2EgKGFsw61xdW90YSB6ZXJvKSk7JyB9LFxuICAgIHsgaXRlbTE6ICcwNScsIGl0ZW0yOiAnIE9wZXJhw6fDo28gVHJpYnV0w6F2ZWwgKFN1YnN0aXR1acOnw6NvIFRyaWJ1dMOhcmlhKTsnIH0sXG4gICAgeyBpdGVtMTogJzA2JywgaXRlbTI6ICcgT3BlcmHDp8OjbyBUcmlidXTDoXZlbCAoYWzDrXF1b3RhIHplcm8pOycgfSxcbiAgICB7IGl0ZW0xOiAnMDcnLCBpdGVtMjogJyBPcGVyYcOnw6NvIElzZW50YSBkYSBDb250cmlidWnDp8OjbzsnIH0sXG4gICAgeyBpdGVtMTogJzA4JywgaXRlbTI6ICcgT3BlcmHDp8OjbyBTZW0gSW5jaWTDqm5jaWEgZGEgQ29udHJpYnVpw6fDo287JyB9LFxuICAgIHsgaXRlbTE6ICcwOScsIGl0ZW0yOiAnIE9wZXJhw6fDo28gY29tIFN1c3BlbnPDo28gZGEgQ29udHJpYnVpw6fDo287JyB9LFxuICAgIHsgaXRlbTE6ICc5OScsIGl0ZW0yOiAnIE91dHJhcyBPcGVyYcOnw7VlczsnIH0sXG4gICAgeyBpdGVtMTogJzQ5JywgaXRlbTI6ICcgT3V0cmFzIE9wZXJhw6fDtWVzIGRlIFNhw61kYTsgJyB9LFxuICAgIHsgaXRlbTE6ICc1MCcsIGl0ZW0yOiAnIE9wZXJhw6fDo28gY29tIERpcmVpdG8gYSBDcsOpZGl0byAgVmluY3VsYWRhIEV4Y2x1c2l2YW1lbnRlIGEgUmVjZWl0YSBUcmlidXRhZGEgbm8gTWVyY2FkbyBJbnRlcm5vOyAnIH0sXG4gICAgeyBpdGVtMTogJzUxJywgaXRlbTI6ICcgT3BlcmHDp8OjbyBjb20gRGlyZWl0byBhIENyw6lkaXRvICBWaW5jdWxhZGEgRXhjbHVzaXZhbWVudGUgYSBSZWNlaXRhIE7Do28gVHJpYnV0YWRhIG5vIE1lcmNhZG8gSW50ZXJubyA7JyB9LFxuICAgIHsgaXRlbTE6ICc1MicsIGl0ZW0yOiAnIE9wZXJhw6fDo28gY29tIERpcmVpdG8gYSBDcsOpZGl0byAgVmluY3VsYWRhIEV4Y2x1c2l2YW1lbnRlIGEgUmVjZWl0YSBkZSBFeHBvcnRhw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNTMnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGNvbSBEaXJlaXRvIGEgQ3LDqWRpdG8gIFZpbmN1bGFkYSBhIFJlY2VpdGFzIFRyaWJ1dGFkYXMgZSBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm87ICcgfSxcbiAgICB7IGl0ZW0xOiAnNTQnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGNvbSBEaXJlaXRvIGEgQ3LDqWRpdG8gIFZpbmN1bGFkYSBhIFJlY2VpdGFzIFRyaWJ1dGFkYXMgbm8gTWVyY2FkbyBJbnRlcm5vIGUgZGUgRXhwb3J0YcOnw6NvIDsnIH0sXG4gICAgeyBpdGVtMTogJzU1JywgaXRlbTI6ICcgT3BlcmHDp8OjbyBjb20gRGlyZWl0byBhIENyw6lkaXRvICBWaW5jdWxhZGEgYSBSZWNlaXRhcyBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm8gZSBkZSBFeHBvcnRhw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNTYnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGNvbSBEaXJlaXRvIGEgQ3LDqWRpdG8gIFZpbmN1bGFkYSBhIFJlY2VpdGFzIFRyaWJ1dGFkYXMgZSBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm8sIGUgZGUgRXhwb3J0YcOnw6NvOycgfSxcbiAgICB7IGl0ZW0xOiAnNjAnLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gVmluY3VsYWRhIEV4Y2x1c2l2YW1lbnRlIGEgUmVjZWl0YSBUcmlidXRhZGEgbm8gTWVyY2FkbyBJbnRlcm5vOyAnIH0sXG4gICAgeyBpdGVtMTogJzYxJywgaXRlbTI6ICcgQ3LDqWRpdG8gUHJlc3VtaWRvICBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIFZpbmN1bGFkYSBFeGNsdXNpdmFtZW50ZSBhIFJlY2VpdGEgTsOjbyBUcmlidXRhZGEgbm8gTWVyY2FkbyBJbnRlcm5vOyAnIH0sXG4gICAgeyBpdGVtMTogJzYyJywgaXRlbTI6ICcgQ3LDqWRpdG8gUHJlc3VtaWRvICBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIFZpbmN1bGFkYSBFeGNsdXNpdmFtZW50ZSBhIFJlY2VpdGEgZGUgRXhwb3J0YcOnw6NvOyAnIH0sXG4gICAgeyBpdGVtMTogJzYzJywgaXRlbTI6ICcgQ3LDqWRpdG8gUHJlc3VtaWRvICBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIFZpbmN1bGFkYSBhIFJlY2VpdGFzIFRyaWJ1dGFkYXMgZSBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm87ICcgfSxcbiAgICB7IGl0ZW0xOiAnNjQnLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gVmluY3VsYWRhIGEgUmVjZWl0YXMgVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm8gZSBkZSBFeHBvcnRhw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNjUnLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gVmluY3VsYWRhIGEgUmVjZWl0YXMgTsOjb1RyaWJ1dGFkYXMgbm8gTWVyY2FkbyBJbnRlcm5vIGUgZGUgRXhwb3J0YcOnw6NvOyAnIH0sXG4gICAgeyBpdGVtMTogJzY2JywgaXRlbTI6ICcgQ3LDqWRpdG8gUHJlc3VtaWRvICBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIFZpbmN1bGFkYSBhIFJlY2VpdGFzIFRyaWJ1dGFkYXMgZSBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm8sIGUgZGUgRXhwb3J0YcOnw6NvOyAnIH0sXG4gICAgeyBpdGVtMTogJzY3JywgaXRlbTI6ICcgQ3LDqWRpdG8gUHJlc3VtaWRvICBPdXRyYXMgT3BlcmHDp8O1ZXM7ICcgfSxcbiAgICB7IGl0ZW0xOiAnNzAnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIHNlbSBEaXJlaXRvIGEgQ3LDqWRpdG87ICcgfSxcbiAgICB7IGl0ZW0xOiAnNzEnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIGNvbSBJc2Vuw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNzInLCBpdGVtMjogJyBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIGNvbSBTdXNwZW5zw6NvOyAnIH0sXG4gICAgeyBpdGVtMTogJzczJywgaXRlbTI6ICcgT3BlcmHDp8OjbyBkZSBBcXVpc2nDp8OjbyBhIEFsw61xdW90YSBaZXJvOyAnIH0sXG4gICAgeyBpdGVtMTogJzc0JywgaXRlbTI6ICcgT3BlcmHDp8OjbyBkZSBBcXVpc2nDp8OjbyBzZW0gSW5jaWTDqm5jaWEgZGEgQ29udHJpYnVpw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNzUnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIHBvciBTdWJzdGl0dWnDp8OjbyBUcmlidXTDoXJpYTsnIH0sXG4gICAgeyBpdGVtMTogJzk4JywgaXRlbTI6ICcgT3V0cmFzIE9wZXJhw6fDtWVzIGRlIEVudHJhZGE7JyB9LFxuICBdO1xuICBuY21FbmNvbnRyYWRvOiBib29sZWFuID0gZmFsc2U7XG4gIG5jbU5hb0VuY29udHJhZG86IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNCdXN5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcFJlZEJDX2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wUmVkQkNfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwucFJlZEJDX2ljbXMpO1xuICBwUmVkQkNFZmV0X2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wUmVkQkNFZmV0X2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnBSZWRCQ0VmZXRfaWNtcyk7XG4gIHBpY21zRWZldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwucGljbXNFZmV0X2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnBpY21zRWZldF9pY21zKTtcbiAgdmJjRWZldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJjRWZldF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC52YmNFZmV0X2ljbXMpO1xuICB2aWNtc0VmZXRfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnZpY21zRWZldF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC52aWNtc0VmZXRfaWNtcyk7XG5cbiAgcHNUX2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wc1RfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwucHNUX2ljbXMpO1xuICB2YmNzdFJldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJjc3RSZXRfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJjc3RSZXRfaWNtcyk7XG4gIHZpY21zU3Vic3RpdHV0b19pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmljbXNTdWJzdGl0dXRvX2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnZpY21zU3Vic3RpdHV0b19pY21zKTtcbiAgdmljbXNzdFJldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmljbXNzdFJldF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC52aWNtc3N0UmV0X2ljbXMpO1xuXG4gIHBmY1BfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnBmY1BfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwucGZjUF9pY21zKTtcbiAgdmJjZmNQX2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC52YmNmY1BfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJjZmNQX2ljbXMpO1xuICBwZmNwc1RfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnBmY3BzVF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC5wZmNwc1RfaWNtcyk7XG4gIHZiY2ZjcHNUX2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC52YmNmY3BzVF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC52YmNmY3BzVF9pY21zKTtcbiAgcGZjcHN0UmV0X2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wZmNwc3RSZXRfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwucGZjcHN0UmV0X2ljbXMpO1xuICB2YmNmY3BzdFJldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJjZmNwc3RSZXRfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJjZmNwc3RSZXRfaWNtcyk7XG5cbiAgcHBpU19waXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wcGlTX3BpcyA9IHYsICgpID0+IHRoaXMubW9kZWwucHBpU19waXMpO1xuICB2YkNfcGlzUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJDX3BpcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJDX3Bpcyk7XG5cbiAgcGNvZmluU19jb2ZpbnNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wY29maW5TX2NvZmlucyA9IHYsICgpID0+IHRoaXMubW9kZWwucGNvZmluU19jb2ZpbnMpO1xuICB2YkNfY29maW5zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJDX2NvZmlucyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJDX2NvZmlucyk7XG5cblxuICBwcmVjb1ZlbmRhUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcigodikgPT4gdGhpcy5tb2RlbC5wcmVjb1ZlbmRhID0gdiA/PyAwLCAoKSA9PiB0aGlzLm1vZGVsLnByZWNvVmVuZGEpO1xuICBwcmVjb0N1c3RvUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcigodikgPT4gdGhpcy5tb2RlbC5wcmVjb0N1c3RvID0gdiA/PyAwLCAoKSA9PiB0aGlzLm1vZGVsLnByZWNvQ3VzdG8pO1xuICBwcmVjb0Z1bmNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKCh2KSA9PiB0aGlzLm1vZGVsLnByZWNvRnVuY2lvbmFyaW8gPSB2ID8/IDAsICgpID0+IHRoaXMubW9kZWwucHJlY29GdW5jaW9uYXJpbyk7XG5cbiAgcElDTVNfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIoKHYpID0+IHRoaXMubW9kZWwucElDTVNfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwucElDTVNfaWNtcyk7XG4gIFxuICBxdGRNaW5TdWJFc3RvcXVlUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcigodikgPT4gdGhpcy5tb2RlbC5xdGRNaW5TdWJFc3RvcXVlID0gdiwgKCkgPT4gdGhpcy5tb2RlbC5xdGRNaW5TdWJFc3RvcXVlKTtcbiAgZXN0b3F1ZU1pbmltb1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIoKHYpID0+IHRoaXMubW9kZWwuZXN0b3F1ZU1pbmltbyA9IHYgPz8gMCwgKCkgPT4gdGhpcy5tb2RlbC5lc3RvcXVlTWluaW1vKTtcbiAgcXVhbnRpZGFkZVN1aXRlUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcigodikgPT4gdGhpcy5tb2RlbC5xdWFudGlkYWRlU3VpdGUgPSB2ID8/IDAsICgpID0+IHRoaXMubW9kZWwucXVhbnRpZGFkZVN1aXRlKTtcblxuICBsYXp5VHJpZ2dlck5jbSA9IG5ldyBMYXp5VHJpZ2dlcigoKSA9PiB7IHRoaXMuZmluZE5DTSgpOyB9KTtcblxuICBASW5wdXQoKSBlZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgbmV4dElkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBwcm9ncmVzczogbnVtYmVyID0gMDtcbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBpbWdVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBfbW9kZWw6IFByb2R1dG8gPSBjcmVhdGVQcm9kdWN0KCk7XG4gIGdldCBtb2RlbCgpOiBQcm9kdXRvIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gIH1cbiAgQElucHV0KCkgc2V0IG1vZGVsKHZhbHVlOiBQcm9kdXRvKSB7XG4gICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcbiAgICB0aGlzLnNldEltZ1VybCgpO1xuICAgIHRoaXMuZmluZE5DTSgpO1xuICB9XG5cbiAgdGFiczogUmFkaW9CdXR0b25Hcm91cERhdGFbXSA9IFtcbiAgICB7IG5hbWU6IFwiQ2FtcG9zIEdlcmFpc1wiLCB2YWx1ZTogMCB9LFxuICAgIHsgbmFtZTogXCJDYW1wb3MgRmlzY2Fpc1wiLCB2YWx1ZTogMSB9LFxuICAgIHsgbmFtZTogXCJDYXJkw6FwaW8gRGlnaXRhbFwiLCB2YWx1ZTogMiB9XG4gIF07XG4gIHNlbGVjdGVkVGFiOiBudW1iZXIgPSAwO1xuICBzZXRvcmVzOiBTZXRvckVzdG9xdWVbXSA9IFtdO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB3czogQ29tbW9uV2ViU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY3JlZW5IZWxwZXI6IFNjcmVlbkhlbHBlclNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZFNldG9yZXMoKTtcbiAgfVxuXG4gIGxvYWRTZXRvcmVzKCkge1xuICAgIHRoaXMuaXNCdXN5ID0gdHJ1ZTtcbiAgICB0aGlzLndzLmdldEFsbFNldG9yZXMoKVxuICAgICAgLnN1YnNjcmliZShyID0+IHtcbiAgICAgICAgdGhpcy5zZXRvcmVzID0gcjtcbiAgICAgICAgY29uc29sZS5pbmZvKHIpO1xuICAgICAgICB0aGlzLmlzQnVzeSA9IGZhbHNlO1xuICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uc2hvd0h0dHBFcnJvcihlcnIpO1xuICAgICAgfSk7XG4gIH1cbiAgZWRpdGFyTkNNKCkge1xuICAgIGxldCBoZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICogMC45NSkgKyAncHgnO1xuICAgIGxldCB3aWR0aCA9IDU1MCArICdweCc7XG4gICAgaWYgKHRoaXMuc2NyZWVuSGVscGVyLm1vYmlsZVNjcmVlbikge1xuICAgICAgd2lkdGggPSAod2luZG93LmlubmVyV2lkdGggKiAwLjk5KSArICdweCc7XG4gICAgICBoZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICogMC45OSkgKyAncHgnO1xuICAgIH1cbiAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQcm9kdXRvc05jbURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgcGFuZWxDbGFzczogJ2RpYWxvZy1wMCcsXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgICB0aGlzLm1vZGVsLm5jbSA9IHJlc3VsdC5jb2RpZ29BcGVuYXNEaWdpdG9zO1xuICAgICAgdGhpcy5sYXp5VHJpZ2dlck5jbS5maXJlKCk7XG4gICAgfSk7XG4gIH1cbiAgZWRpdGFyU3ViZ3J1cG8oKSB7XG4gICAgbGV0IGhlaWdodCA9ICh3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjk1KSArICdweCc7XG4gICAgbGV0IHdpZHRoID0gNTUwICsgJ3B4JztcbiAgICBpZiAodGhpcy5zY3JlZW5IZWxwZXIubW9iaWxlU2NyZWVuKSB7XG4gICAgICB3aWR0aCA9ICh3aW5kb3cuaW5uZXJXaWR0aCAqIDAuOTkpICsgJ3B4JztcbiAgICAgIGhlaWdodCA9ICh3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjk5KSArICdweCc7XG4gICAgfVxuICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFByb2R1dG9TdWJncnVwb1NlbGVjYW9EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdkaWFsb2ctcDAnLFxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuO1xuICAgICAgdGhpcy5tb2RlbC5zdWJncnVwb0lkID0gcmVzdWx0LmlkO1xuICAgICAgdGhpcy5tb2RlbC5zdWJncnVwb05vbWUgPSByZXN1bHQubm9tZTtcbiAgICB9KTtcbiAgfVxuICBlZGl0YXJHcnVwbygpIHtcbiAgICBsZXQgaGVpZ2h0ID0gKHdpbmRvdy5pbm5lckhlaWdodCAqIDAuOTUpICsgJ3B4JztcbiAgICBsZXQgd2lkdGggPSA1NTAgKyAncHgnO1xuICAgIGlmICh0aGlzLnNjcmVlbkhlbHBlci5tb2JpbGVTY3JlZW4pIHtcbiAgICAgIHdpZHRoID0gKHdpbmRvdy5pbm5lcldpZHRoICogMC45OSkgKyAncHgnO1xuICAgICAgaGVpZ2h0ID0gKHdpbmRvdy5pbm5lckhlaWdodCAqIDAuOTkpICsgJ3B4JztcbiAgICB9XG4gICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUHJvZHV0b0dydXBvU2VsZWNhb0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgcGFuZWxDbGFzczogJ2RpYWxvZy1wMCcsXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgICB0aGlzLm1vZGVsLmdydXBvSWQgPSByZXN1bHQuaWQ7XG4gICAgICB0aGlzLm1vZGVsLmdydXBvTm9tZSA9IHJlc3VsdC5ub21lO1xuICAgIH0pO1xuICB9XG4gIGVkaXRhckNhdGVnb3JpYUNhcmRhcGlvKCkge1xuICAgIGxldCBoZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICogMC45NSkgKyAncHgnO1xuICAgIGxldCB3aWR0aCA9IDU1MCArICdweCc7XG4gICAgaWYgKHRoaXMuc2NyZWVuSGVscGVyLm1vYmlsZVNjcmVlbikge1xuICAgICAgd2lkdGggPSAod2luZG93LmlubmVyV2lkdGggKiAwLjk5KSArICdweCc7XG4gICAgICBoZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICogMC45OSkgKyAncHgnO1xuICAgIH1cbiAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQcm9kdXRvQ2F0ZWdvcmlhQ2FyZGFwaW9TZWxlY2FvRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICBwYW5lbENsYXNzOiAnZGlhbG9nLXAwJyxcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybjtcbiAgICAgIHRoaXMubW9kZWwuY2F0ZWdvcmlhQ2FyZGFwaW9JZCA9IHJlc3VsdC5pZDtcbiAgICAgIHRoaXMubW9kZWwuY2F0ZWdvcmlhQ2FyZGFwaW9Ob21lID0gcmVzdWx0Lm5vbWU7XG4gICAgfSk7XG4gIH1cbiAgZWRpdGFyVmVyaWZpY2FjYW9HcnVwbygpIHtcbiAgICBsZXQgaGVpZ2h0ID0gKHdpbmRvdy5pbm5lckhlaWdodCAqIDAuOTUpICsgJ3B4JztcbiAgICBsZXQgd2lkdGggPSA1NTAgKyAncHgnO1xuICAgIGlmICh0aGlzLnNjcmVlbkhlbHBlci5tb2JpbGVTY3JlZW4pIHtcbiAgICAgIHdpZHRoID0gKHdpbmRvdy5pbm5lcldpZHRoICogMC45OSkgKyAncHgnO1xuICAgICAgaGVpZ2h0ID0gKHdpbmRvdy5pbm5lckhlaWdodCAqIDAuOTkpICsgJ3B4JztcbiAgICB9XG4gICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUHJvZHV0b1ZlcmlmaWNhb0dydXBvU2VsZWNhb0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgcGFuZWxDbGFzczogJ2RpYWxvZy1wMCcsXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgICB0aGlzLm1vZGVsLnByb2R1dG9WZXJpZmljYW9HcnVwb0lkID0gcmVzdWx0LmlkO1xuICAgICAgdGhpcy5tb2RlbC5wcm9kdXRvVmVyaWZpY2FvR3J1cG9Ob21lID0gcmVzdWx0Lm5vbWU7XG4gICAgfSk7XG4gIH1cbiAgY2hhbmdlTW9kbyhldjogUmFkaW9CdXR0b25Hcm91cERhdGEpIHtcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gZXYudmFsdWU7XG4gIH1cblxuICB1cGxvYWRGaWxlKGZpbGVzIDogYW55KSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmlsZVRvVXBsb2FkID0gPEZpbGU+ZmlsZXNbMF07XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlVG9VcGxvYWQsIGZpbGVUb1VwbG9hZC5uYW1lKTtcbiAgICB0aGlzLmh0dHAucG9zdCh0aGlzLndzLlVQTE9BRF9DT05URU5UX0JBU0VfVVJMICsgXCJQcm9kdXRvP3Byb2R1dG9JZD1cIiArIHRoaXMubW9kZWwuaWQsIGZvcm1EYXRhLFxuICAgICAge1xuICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogJ3Rva2VuICcgKyB0aGlzLmF1dGgudG9rZW4sXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB0b3RhbCA9IGV2ZW50LnRvdGFsID8/IC0xO1xuICAgICAgICAgIHRoaXMucHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKDEwMCAqIGV2ZW50LmxvYWRlZCAvIHRvdGFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1N1Y2Vzc28nO1xuICAgICAgICAgIHRoaXMuaW1nVXJsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRJbWdVcmwobmV3IERhdGUoKS5nZXRNaW51dGVzKCkgKyBcIlwiKTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfVxuICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgY29uc3QgaHR0cEVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSA9IGVycjtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gaHR0cEVycm9yLmVycm9yO1xuICAgICAgfSk7XG4gIH1cblxuICBzZXRJbWdVcmwodXBsb2FkOiBzdHJpbmd8dW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgdGhpcy5pbWdVcmwgPSB0aGlzLndzLk1FRElBX1BST0RVVE9fSU1BR0VNX1VSTCArXG4gICAgICAnP3Byb2R1dG9JZD0nICsgdGhpcy5tb2RlbC5pZCArXG4gICAgICAnJnRva2VuPScgKyB0aGlzLmF1dGgudG9rZW4gK1xuICAgICAgKHVwbG9hZCAhPT0gdW5kZWZpbmVkID8gJyZ1cGxvYWQ9JyArIHVwbG9hZCA6ICcnKTtcbiAgfVxuXG4gIGZpbmROQ00oKSB7XG4gICAgdGhpcy5uY21FbmNvbnRyYWRvID0gZmFsc2U7XG4gICAgdGhpcy5uY21OYW9FbmNvbnRyYWRvID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLm1vZGVsLm5jbSkgcmV0dXJuO1xuICAgIHRoaXMuaXNCdXN5ID0gdHJ1ZTtcbiAgICB0aGlzLndzLmZpbmROY20odGhpcy5tb2RlbC5uY20pXG4gICAgICAuc3Vic2NyaWJlKHIgPT4ge1xuICAgICAgICB0aGlzLm5jbUVuY29udHJhZG8gPSByICE9IG51bGw7XG4gICAgICAgIHRoaXMubmNtTmFvRW5jb250cmFkbyA9IHIgPT0gbnVsbDtcbiAgICAgICAgY29uc29sZS5pbmZvKHIpO1xuICAgICAgICB0aGlzLmlzQnVzeSA9IGZhbHNlO1xuICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uc2hvd0h0dHBFcnJvcihlcnIpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxNnB4XCI+XG4gICAgPG94LXJhZGlvLWJ1dHRvbi1ncm91cCAoY2hhbmdlKT1cImNoYW5nZU1vZG8oJGV2ZW50KVwiIFtpdGVtc109XCJ0YWJzXCIgY2xhc3M9XCJ0b29sLWl0ZW0tY29udGFpbmVyXCI+XG4gICAgPC9veC1yYWRpby1idXR0b24tZ3JvdXA+XG48L2Rpdj5cbjxkaXYgW0BtZW51TGF0ZXJhbF0gY2xhc3M9XCJ2Ym94XCIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PSAwXCI+XG4gICAgPGRpdiBjbGFzcz1cImhib3hcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5Dw7NkaWdvPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYm94XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiaWRcIiBbcmVhZG9ubHldPVwiZWRpdE1vZGVcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLmlkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIyXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmV4dElkQ2xpY2suZW1pdCgpXCIgKm5nSWY9XCIhZWRpdE1vZGVcIiBjbGFzcz1cImZvcm0taW5saW5lLWJ1dHRvbiBidG4tZm9ybS1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRidWxiXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWFyZ2luLWxlZnQtOFwiPlxuICAgICAgICAgICAgPGxhYmVsPlJlZmVyw6puY2lhPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInJlZmVyZW5jaWFcIiBtYXhsZW5ndGg9XCIzMFwiIFsobmdNb2RlbCldPVwibW9kZWwucmVmZXJlbmNpYVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEyMFwiIHRhYmluZGV4PVwiMlwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWw+Tm9tZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBpZD1cIm5vbWVcIiBtYXhsZW5ndGg9XCI2MFwiIFsobmdNb2RlbCldPVwibW9kZWwubm9tZVwiIGNka0ZvY3VzSW5pdGlhbCBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0zMDBcIiB0YWJpbmRleD1cIjJcIj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPlByZcOnbyBkZSBWZW5kYTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwcmVjb1ZlbmRhXCIgW25nTW9kZWxdPVwibW9kZWwucHJlY29WZW5kYSB8IG51bWJlcjonMS4yLTInXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwcmVjb1ZlbmRhUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicHJlY29WZW5kYVBhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiIHRhYmluZGV4PVwiMlwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgIG1hcmdpbi1sZWZ0LThcIj5cbiAgICAgICAgICAgIDxsYWJlbD5QcmXDp28gcC8gRnVuYy48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicHJlY29GdW5jaW9uYXJpb1wiIFtuZ01vZGVsXT1cIm1vZGVsLnByZWNvRnVuY2lvbmFyaW8gfCBudW1iZXI6JzEuMi0yJ1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHJlY29GdW5jUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicHJlY29GdW5jUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCIgdGFiaW5kZXg9XCIyXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCAgbWFyZ2luLWxlZnQtOFwiPlxuICAgICAgICAgICAgPGxhYmVsPlByZcOnbyBkZSBDdXN0bzwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwcmVjb0N1c3RvXCIgW25nTW9kZWxdPVwibW9kZWwucHJlY29DdXN0byB8IG51bWJlcjonMS4yLTInXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwcmVjb0N1c3RvUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicHJlY29DdXN0b1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiIHRhYmluZGV4PVwiMlwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWw+R3J1cG88L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGJveFwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cImdydXBvXCIgKGNsaWNrKT1cImVkaXRhckdydXBvKClcIiBjbGFzcz1cImZvcm0tY29udHJvbCBncm93LTEgaW5wdXQtc2VsZWNhbyBpbnB1dC0zMDBcIj5cbiAgICAgICAgICAgICAgICB7e21vZGVsLmdydXBvTm9tZX19IDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZWRpdGFyR3J1cG8oKVwiIGNsYXNzPVwiZm9ybS1pbmxpbmUtYnV0dG9uIGJ0bi1mb3JtLW1hcmdpblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbD5TdWJncnVwbzwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGlkPVwic3ViZ3J1cG9cIiAoY2xpY2spPVwiZWRpdGFyU3ViZ3J1cG8oKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGdyb3ctMSBpbnB1dC1zZWxlY2FvIGlucHV0LTMwMFwiPlxuICAgICAgICAgICAgICAgIHt7bW9kZWwuc3ViZ3J1cG9Ob21lfX0gPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0YXJTdWJncnVwbygpXCIgY2xhc3M9XCJmb3JtLWlubGluZS1idXR0b24gYnRuLWZvcm0tbWFyZ2luXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPlVuaWRhZGU8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidW5pZGFkZVwiIFsobmdNb2RlbCldPVwibW9kZWwudW5pZGFkZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEyMFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5Fc3RvcXVlIE1pbi48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwiZXN0b3F1ZU1pbmltb1wiIFtuZ01vZGVsXT1cIm1vZGVsLmVzdG9xdWVNaW5pbW9cIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZXN0b3F1ZU1pbmltb1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cImVzdG9xdWVNaW5pbW9QYXJzZXIuY2hlY2tvdXQoKVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5RdGQuIFN1w610ZTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJxdWFudGlkYWRlU3VpdGVcIiBbbmdNb2RlbF09XCJtb2RlbC5xdWFudGlkYWRlU3VpdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjAgdGV4dC1yaWdodFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJxdWFudGlkYWRlU3VpdGVQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJxdWFudGlkYWRlU3VpdGVQYXJzZXIuY2hlY2tvdXQoKVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJoYm94IGdhcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+Q8OzZGlnbyBQYXRyaW3DtG5pbzwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJjb2RpZ29QYXRyaW1vbmlvXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5jb2RpZ29QYXRyaW1vbmlvXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIzNlwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5PYnMuPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cIm9ic1wiIG1heGxlbmd0aD1cIjMwMFwiIFsobmdNb2RlbCldPVwibW9kZWwub2JzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMzAwXCIgbWF4bGVuZ3RoPVwiMzAwXCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJoYm94IGdhcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+U2V0b3IgU3ViZXN0b3F1ZTwvbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJtb2RlbC5zZXRvclN1YkVzdG9xdWVJZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEyMFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpIG9mIHNldG9yZXNcIiBbdmFsdWVdPVwiaS5pZFwiPlxuICAgICAgICAgICAgICAgICAgICB7e2kubm9tZX19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5RdGQuIFN1YmVzdG9xdWU8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicXRkTWluU3ViRXN0b3F1ZVwiIFtuZ01vZGVsXT1cIm1vZGVsLnF0ZE1pblN1YkVzdG9xdWVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjAgdGV4dC1yaWdodFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJxdGRNaW5TdWJFc3RvcXVlUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicXRkTWluU3ViRXN0b3F1ZVBhcnNlci5jaGVja291dCgpXCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ2Ym94XCI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwibW9kZWwuZXN0b3F1ZUNvbnRyb2xhZG9cIiB0YWJpbmRleD0tMT5Db250cm9sYWRvIG5vIEVzdG9xdWU8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwibW9kZWwuaW1wcmltaUNvemluaGFcIiB0YWJpbmRleD0tMT5JbXByaW1lIENvemluaGE8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwibW9kZWwuaW1wcmltZUNvcnJlZG9yXCIgdGFiaW5kZXg9LTE+SW1wcmltZSBDb3JyZWRvcjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJtb2RlbC52ZXJOYVJlY2VwY2FvXCIgdGFiaW5kZXg9LTE+VmVyIG5hIFJlY2Vww6fDo288L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwibW9kZWwub21pdGVDbGllbnRlXCIgdGFiaW5kZXg9LTE+TsOjbyBFeGliZSBwYXJhIG8gQ2xpZW50ZSBuYSBTYcOtZGFcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cIm1vZGVsLmlzQXRpdm9cIiB0YWJpbmRleD0tMT5BdGl2YWRvPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDwvZGl2PlxuXG48L2Rpdj5cblxuPGRpdiBbQG1lbnVMYXRlcmFsXSBjbGFzcz1cInZib3hcIiAqbmdJZj1cInNlbGVjdGVkVGFiID09IDFcIj5cblxuICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxNnB4O1wiIGNsYXNzPVwidmJveFwiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cIm1vZGVsLmVtaXRlTkZDZVwiIHRhYmluZGV4PS0xPkVtaXRlIEZpc2NhbFxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5HVElOPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImd0aW5cIiBbKG5nTW9kZWwpXT1cIm1vZGVsLmd0aW5cIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIiBwbGFjZWhvbGRlcj1cIlNFTSBHVElOXCJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5DRk9QPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImNmb3BcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLmNmb3BcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiBtYXRJbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDBcIlxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjRcIj5cbiAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjZm9wTGlzdFwiIFt2YWx1ZV09XCJvcHRpb24uaXRlbTFcIj5cbiAgICAgICAgICAgICAgICAgICAge3tvcHRpb24uaXRlbTF9fSA8c21hbGw+e3tvcHRpb24uaXRlbTJ9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5OQ008L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhib3hcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJuY21cIiAoaW5wdXQpPVwibGF6eVRyaWdnZXJOY20uZmlyZSgpXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5uY21cIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDBcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI4XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZWRpdGFyTkNNKClcIiBjbGFzcz1cImZvcm0taW5saW5lLWJ1dHRvbiBidG4tZm9ybS1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJ1c2NhbmRvXCIgKm5nSWY9XCJpc0J1c3lcIj5CdXNjYW5kby4uLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGVuY29udHJhZG9cIiAqbmdJZj1cIm5jbUVuY29udHJhZG9cIj5FbmNvbnRyYWRvPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgbmFvLWVuY29udHJhZG9cIiAqbmdJZj1cIm5jbU5hb0VuY29udHJhZG9cIj5Ow6NvIGVuY29udHJhZG88L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5DRVNUPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImNlc3RcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLmNlc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIiBtYXhsZW5ndGg9XCI3XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPklDTVMgKEVDRi9TQVQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImFsaXF1b3RhSUNNU1wiIFsobmdNb2RlbCldPVwibW9kZWwuYWxpcXVvdGFJQ01TXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIlxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjVcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+Uy4gVC4gKEVDRi9TQVQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInNpdFRyaWJcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLnNpdFRyaWJcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9TVFwiIG1hdElucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCIgbWF4bGVuZ3RoPVwiNVwiPlxuICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG9TVD1cIm1hdEF1dG9jb21wbGV0ZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc3RMaXN0XCIgW3ZhbHVlXT1cIm9wdGlvbi5pdGVtMVwiPlxuICAgICAgICAgICAgICAgICAgICB7e29wdGlvbi5pdGVtMX19IDxzbWFsbD57e29wdGlvbi5pdGVtMn19PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICA8L2Rpdj5cbiAgICA8aDQ+Q2FtcG9zIGRhIE5GQy1lPC9oND5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkNTVC9DU09TTjwvbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJtb2RlbC5jc1RfaWNtc1wiICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaSBvZiBjc3RJQ01TTGlzdFwiIFt2YWx1ZV09XCJpLml0ZW0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aS5pdGVtMX19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5BbGlxLiBJQ01TICglKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwSUNNU19pY21zXCIgW25nTW9kZWxdPVwibW9kZWwucElDTVNfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwSUNNU19pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicElDTVNfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5Nb2RhbGlkYWRlIEJDPC9sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cIm1vZGVsLm1vZEJDX2ljbXNcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaSBvZiBtb2RCYXNlSUNNU1wiIFt2YWx1ZV09XCJpLml0ZW0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aS5pdGVtMX19IDxzbWFsbD57e2kuaXRlbTJ9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5jQmVuZWY8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwiY0JlbmVmXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5jQmVuZWZcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIiBtYXhsZW5ndGg9XCIyMFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5wUmVkQkMgKCUpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInBSZWRCQ19pY21zXCIgW25nTW9kZWxdPVwibW9kZWwucFJlZEJDX2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicFJlZEJDX2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwUmVkQkNfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aDY+SUNNUyBFZmV0aXZvIENTVDYwL0NTT1NONTAwPC9oNj5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnBSZWRCQ0VmZXQgKCUpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInBSZWRCQ0VmZXRfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnBSZWRCQ0VmZXRfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwUmVkQkNFZmV0X2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwUmVkQkNFZmV0X2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+cElDTVNFZmV0ICglKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwaWNtc0VmZXRfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnBpY21zRWZldF9pY21zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInBpY21zRWZldF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicGljbXNFZmV0X2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+dkJDRWZldCAoUiQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZiY0VmZXRfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnZiY0VmZXRfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YmNFZmV0X2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2YmNFZmV0X2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+dklDTVNFZmV0IChSJCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidmljbXNFZmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52aWNtc0VmZXRfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2aWNtc0VmZXRfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInZpY21zRWZldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxoNj5TdWJzdGl0dWnDp8OjbyBUcmlidXTDoXJpYSAoU1QpPC9oNj5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnBTVCAoJSk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicHNUX2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC5wc1RfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwc1RfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInBzVF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZCQ1NUUmV0IChSJCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidmJjc3RSZXRfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnZiY3N0UmV0X2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmJjc3RSZXRfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInZiY3N0UmV0X2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+dklDTVNTdWJzIChSJCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidmljbXNTdWJzdGl0dXRvX2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52aWNtc1N1YnN0aXR1dG9faWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2aWNtc1N1YnN0aXR1dG9faWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwidmljbXNTdWJzdGl0dXRvX2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZJQ01TU1RSZXQgKFIkKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJ2aWNtc3N0UmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52aWNtc3N0UmV0X2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmljbXNzdFJldF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwidmljbXNzdFJldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxoNj5GdW5kbyBkZSBDb21iYXRlIGEgUG9icmVzYTwvaDY+XG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5wRkNQICglKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwZmNQX2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC5wZmNQX2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicGZjUF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicGZjUF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZCQ0ZDUCAoUiQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZiY2ZjUF9pY21zXCIgW25nTW9kZWxdPVwibW9kZWwudmJjZmNQX2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmJjZmNQX2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2YmNmY1BfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5wRkNQU1QgKCUpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInBmY3BzVF9pY21zXCIgW25nTW9kZWxdPVwibW9kZWwucGZjcHNUX2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicGZjcHNUX2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwZmNwc1RfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD52QkNGQ1BTVCAoUiQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZiY2ZjcHNUX2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52YmNmY3BzVF9pY21zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZiY2ZjcHNUX2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2YmNmY3BzVF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnBGQ1BTVFJldCAoJSk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicGZjcHN0UmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC5wZmNwc3RSZXRfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwZmNwc3RSZXRfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInBmY3BzdFJldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZCQ0ZDUFNUUmV0IChSJCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidmJjZmNwc3RSZXRfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnZiY2ZjcHN0UmV0X2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmJjZmNwc3RSZXRfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInZiY2ZjcHN0UmV0X2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGg2PlBJUzwvaDY+XG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5DU1QvUElTPC9sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cIm1vZGVsLmNzVF9waXNcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICBOZW5odW1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGkgb2YgY3N0Q29maW5zTGlzdFwiIFt2YWx1ZV09XCJpLml0ZW0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aS5pdGVtMX19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5BbGlxdW90YSBQSVMgKCUpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInBwaVNfcGlzXCIgW25nTW9kZWxdPVwibW9kZWwucHBpU19waXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHBpU19waXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwcGlTX3Bpc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5QSVMgQkMgJTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJ2YkNfcGlzXCIgW25nTW9kZWxdPVwibW9kZWwudmJDX3BpcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YkNfcGlzUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwidmJDX3Bpc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8aDY+Q09GSU5TPC9oNj5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkNTVC9DT0ZJTlM8L2xhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwibW9kZWwuY3NUX2NvZmluc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEyMFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIE5lbmh1bVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaSBvZiBjc3RDb2ZpbnNMaXN0XCIgW3ZhbHVlXT1cImkuaXRlbTFcIj5cbiAgICAgICAgICAgICAgICAgICAge3tpLml0ZW0xfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkFsaXEuIENPRklOUyAoJSk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicGNvZmluU19jb2ZpbnNcIiBbbmdNb2RlbF09XCJtb2RlbC5wY29maW5TX2NvZmlucyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwY29maW5TX2NvZmluc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInBjb2ZpblNfY29maW5zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkNPRklOUyBCQyAlPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZiQ19jb2ZpbnNcIiBbbmdNb2RlbF09XCJtb2RlbC52YkNfY29maW5zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZiQ19jb2ZpbnNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2YkNfY29maW5zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgW0BtZW51TGF0ZXJhbF0gY2xhc3M9XCJ2Ym94XCIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PSAyXCI+XG5cbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTZweDtcIiBjbGFzcz1cInZib3hcIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJtb2RlbC5kaXNwb25pdmVsQ2FyZGFwaW9cIiB0YWJpbmRleD0tMT5EaXNwb27DrXZlbCBubyBDYXJkw6FwaW8gRGlnaXRhbFxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDhweDtcIiBjbGFzcz1cInZib3hcIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJtb2RlbC5kZXN0YXF1ZVwiIHRhYmluZGV4PS0xPkRlc3RhcXVlIG5vIGNhcmTDoXBpbyBkaWdpdGFsXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWw+RGVzY3Jpw6fDo288L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgaWQ9XCJkZXNjcmljYW9cIiBbKG5nTW9kZWwpXT1cIm1vZGVsLmRlc2NyaWNhb1wiIGNvbHM9XCI0MFwiIHJvd3M9XCI1XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMzAwXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMlwiPjwvdGV4dGFyZWE+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsPlZhcmlhw6fDtWVzIChzZXBhcmFkb3MgcG9yICc7Jyk8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgcGxhY2Vob2xkZXI9XCJFeC46IGJlbSBwYXNzYWRvO2FvIHBvbnRvO21hbCBwYXNzYWRvXCIgaWQ9XCJ2YXJpYWNvZXNcIiBtYXhsZW5ndGg9XCIzMDBcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLnZhcmlhY29lc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTMwMFwiIG1heGxlbmd0aD1cIjMwMFwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbD5DYXRlZ29yaWE8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGJveFwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cImNhdGVnb3JpYUNhcmRhcGlvXCIgKGNsaWNrKT1cImVkaXRhckNhdGVnb3JpYUNhcmRhcGlvKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGdyb3ctMSBpbnB1dC1zZWxlY2FvIGlucHV0LTMwMFwiPlxuICAgICAgICAgICAgICAgIHt7bW9kZWwuY2F0ZWdvcmlhQ2FyZGFwaW9Ob21lfX0gPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0YXJDYXRlZ29yaWFDYXJkYXBpbygpXCIgY2xhc3M9XCJmb3JtLWlubGluZS1idXR0b24gYnRuLWZvcm0tbWFyZ2luXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsPkdydXBvIG5vIEFwcCBDYW1hcmVpcmFzPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhib3hcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJ2ZXJpZmljYWNhb0dydXBvXCIgKGNsaWNrKT1cImVkaXRhclZlcmlmaWNhY2FvR3J1cG8oKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZ3Jvdy0xIGlucHV0LXNlbGVjYW8gaW5wdXQtMzAwXCI+XG4gICAgICAgICAgICAgICAge3ttb2RlbC5wcm9kdXRvVmVyaWZpY2FvR3J1cG9Ob21lfX0gPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0YXJWZXJpZmljYWNhb0dydXBvKClcIiBjbGFzcz1cImZvcm0taW5saW5lLWJ1dHRvbiBidG4tZm9ybS1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VtLWNvbnRhaW5lclwiICpuZ0lmPVwiZWRpdE1vZGVcIj5cbiAgICAgICAgPGltZyBbc3JjXT1cImltZ1VybFwiIGNsYXNzPVwiaW1nLWZsdWlkXCIgKm5nSWY9XCJpbWdVcmxcIiAvPlxuXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiICNmaWxlIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIGZpbGVcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoZmlsZS5maWxlcylcIiBhY2NlcHQ9XCIuanBnLC5wbmdcIlxuICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuXG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZpbGUuY2xpY2soKVwiPkVzY29saGVyIEltYWdlbTwvYnV0dG9uPlxuXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkXCIgKm5nSWY9XCJwcm9ncmVzcyA+IDBcIj5cbiAgICAgICAgICAgIHt7cHJvZ3Jlc3N9fSVcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZFwiICpuZ0lmPVwibWVzc2FnZVwiPlxuICAgICAgICAgICAge3ttZXNzYWdlfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG48L2Rpdj4iXX0=