@senior-gestao-pessoas/payroll-core 9.7.0-develop-83cda3e2 → 9.7.0-feature-hcmgdp-11851-0d47b4a9

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 (22) hide show
  1. package/bundles/senior-gestao-pessoas-payroll-core.umd.js +151 -14
  2. package/bundles/senior-gestao-pessoas-payroll-core.umd.js.map +1 -1
  3. package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js +1 -1
  4. package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js.map +1 -1
  5. package/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.d.ts +7 -1
  6. package/components/utils/cnpj-validator.d.ts +5 -0
  7. package/components/utils/format-utils/format-utils.service.d.ts +3 -2
  8. package/components/utils/generic-validators.d.ts +6 -0
  9. package/esm2015/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +21 -6
  10. package/esm2015/components/utils/cnpj-validator.js +54 -1
  11. package/esm2015/components/utils/format-utils/format-utils.service.js +23 -10
  12. package/esm2015/components/utils/generic-validators.js +57 -1
  13. package/esm5/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +21 -6
  14. package/esm5/components/utils/cnpj-validator.js +54 -1
  15. package/esm5/components/utils/format-utils/format-utils.service.js +23 -10
  16. package/esm5/components/utils/generic-validators.js +57 -1
  17. package/fesm2015/senior-gestao-pessoas-payroll-core.js +151 -14
  18. package/fesm2015/senior-gestao-pessoas-payroll-core.js.map +1 -1
  19. package/fesm5/senior-gestao-pessoas-payroll-core.js +151 -14
  20. package/fesm5/senior-gestao-pessoas-payroll-core.js.map +1 -1
  21. package/package.json +1 -1
  22. package/senior-gestao-pessoas-payroll-core.metadata.json +1 -1
@@ -142,6 +142,62 @@ var GenericValidator = /** @class */ (function () {
142
142
  }
143
143
  return null;
144
144
  };
145
+ /**
146
+ * Valida se o CNPJ Alfanumérico é valido. Deve-se ser informado o cpf sem máscara.
147
+ */
148
+ GenericValidator.isValidCnpjAlphanumeric = function (control) {
149
+ var cnpj = control.value;
150
+ if (cnpj) {
151
+ cnpj = cnpj.replace(/[^\dA-Za-z]/g, '').toUpperCase();
152
+ if (cnpj.length !== 14) {
153
+ return null;
154
+ }
155
+ // Valida que dígitos verificadores são numéricos
156
+ if (!/^\d$/.test(cnpj.charAt(12)) || !/^\d$/.test(cnpj.charAt(13))) {
157
+ return { cnpjNotValid: true };
158
+ }
159
+ // Elimina CNPJs invalidos conhecidos
160
+ if (cnpj === '00000000000000' ||
161
+ cnpj === '11111111111111' ||
162
+ cnpj === '22222222222222' ||
163
+ cnpj === '33333333333333' ||
164
+ cnpj === '44444444444444' ||
165
+ cnpj === '55555555555555' ||
166
+ cnpj === '66666666666666' ||
167
+ cnpj === '77777777777777' ||
168
+ cnpj === '88888888888888' ||
169
+ cnpj === '99999999999999') {
170
+ return { cnpjNotValid: true };
171
+ }
172
+ // Valida DVs
173
+ var size = cnpj.length - 2;
174
+ var digits = cnpj.substring(size);
175
+ if (!GenericValidator.validateCnpjDigit(cnpj, size, Number(digits.charAt(0)))) {
176
+ return { cnpjNotValid: true };
177
+ }
178
+ if (!GenericValidator.validateCnpjDigit(cnpj, size + 1, Number(digits.charAt(1)))) {
179
+ return { cnpjNotValid: true };
180
+ }
181
+ return null;
182
+ }
183
+ return null;
184
+ };
185
+ GenericValidator.validateCnpjDigit = function (cnpj, size, digit) {
186
+ var numbers = cnpj.substring(0, size);
187
+ var sum = 0;
188
+ var pos = size - 7;
189
+ for (var i = size; i >= 1; i--) {
190
+ sum += this.convertToAsciiMinus48(numbers.charAt(size - i)) * pos--;
191
+ if (pos < 2) {
192
+ pos = 9;
193
+ }
194
+ }
195
+ var result = sum % 11 < 2 ? 0 : 11 - (sum % 11);
196
+ return result === digit;
197
+ };
198
+ GenericValidator.convertToAsciiMinus48 = function (input) {
199
+ return input.charCodeAt(0) - 48;
200
+ };
145
201
  /**
146
202
  * Válida o número de telefone da chave PIX.
147
203
  */
@@ -164,4 +220,4 @@ var GenericValidator = /** @class */ (function () {
164
220
  return GenericValidator;
165
221
  }());
166
222
  export { GenericValidator };
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12YWxpZGF0b3JzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tcGVzc29hcy9wYXlyb2xsLWNvcmUvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3V0aWxzL2dlbmVyaWMtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTtJQUNJO0lBQWdCLENBQUM7SUFFakI7O09BRUc7SUFDSSwyQkFBVSxHQUFqQixVQUFrQixPQUF3QjtRQUN0QyxJQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRTFCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7YUFDakIsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2QyxJQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQztRQUN2QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLElBQ0ksR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQ2pCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBRXJCLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDM0I7WUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6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SUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNJLDZCQUFZLEdBQW5CLFVBQW9CLE9BQXdCO1FBQ3hDLElBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDL0IsSUFBTSxlQUFlLEdBQUcsc0NBQXNDLENBQUM7UUFFL0QsSUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwRCxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBQ0wsdUJBQUM7QUFBRCxDQUFDLEFBeExELElBd0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbmV4cG9ydCBjbGFzcyBHZW5lcmljVmFsaWRhdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhIG8gQ0VJIChDYWRhc3RybyBlc3BlY8OtZmljbyBkZSBJTlNTKSBkaWdpdGFkby5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNWYWxpZENlaShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JzIHtcbiAgICAgICAgY29uc3QgY2VpID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICBpZiAoIWNlaSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGVsc2UgaWYgKGNlaS5sZW5ndGggIT0gMTEpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IG11bHRpcGxpY2Fkb3JCYXNlID0gXCIzMjk4NzY1NDMyXCI7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGxldCByZXN0byA9IDA7XG4gICAgICAgIGxldCBtdWx0aXBsaWNhbmRvID0gMDtcbiAgICAgICAgbGV0IG11bHRpcGxpY2Fkb3IgPSAwO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNlaS5sZW5ndGggIT09IDExIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiMDAwMDAwMDAwMDBcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjExMTExMTExMTExXCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCIyMjIyMjIyMjIyMlwiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiMzMzMzMzMzMzMzNcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjQ0NDQ0NDQ0NDQ0XCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCI1NTU1NTU1NTU1NVwiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiNjY2NjY2NjY2NjZcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjc3Nzc3Nzc3Nzc3XCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCI4ODg4ODg4ODg4OFwiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiOTk5OTk5OTk5OTlcIlxuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4geyBpbnZhbGlkQ2VpOiB0cnVlIH07XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbXVsdGlwbGljYW5kbyA9IHBhcnNlSW50KGNlaS5zdWJzdHJpbmcoaSwgaSArIDEpLCAxMCk7XG4gICAgICAgICAgICAgICAgbXVsdGlwbGljYWRvciA9IHBhcnNlSW50KG11bHRpcGxpY2Fkb3JCYXNlLnN1YnN0cmluZyhpLCBpICsgMSksIDEwKTtcbiAgICAgICAgICAgICAgICB0b3RhbCArPSBtdWx0aXBsaWNhbmRvICogbXVsdGlwbGljYWRvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdG8gPSAxMSAtICh0b3RhbCAlIDExKTtcbiAgICAgICAgICAgIHJlc3RvID0gcmVzdG8gPT09IDEwIHx8IHJlc3RvID09PSAxMSA/IDAgOiByZXN0bztcblxuICAgICAgICAgICAgY29uc3QgZGlnaXRvID0gcGFyc2VJbnQoXCJcIiArIGNlaS5jaGFyQXQoMTApLCAxMCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdG8gPT09IGRpZ2l0byA/IG51bGwgOiB7IGludmFsaWRDZWk6IHRydWUgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYSBzZSBvIENQRiDDqSB2YWxpZG8uIERldmUtc2Ugc2VyIGluZm9ybWFkbyBvIGNwZiBzZW0gbcOhc2NhcmEuXG4gICAgICovXG4gICAgc3RhdGljIGlzVmFsaWRDcGYoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9ycyB7XG4gICAgICAgIGNvbnN0IGNwZiA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgIGlmIChjcGYpIHtcbiAgICAgICAgICAgIGxldCBudW1iZXJzLCBkaWdpdHMsIHN1bSwgaSwgcmVzdWx0LCBlcXVhbERpZ2l0cztcbiAgICAgICAgICAgIGVxdWFsRGlnaXRzID0gMTtcbiAgICAgICAgICAgIGlmIChjcGYubGVuZ3RoIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNwZi5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY3BmLmNoYXJBdChpKSAhPT0gY3BmLmNoYXJBdChpICsgMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxEaWdpdHMgPSAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWVxdWFsRGlnaXRzKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVycyA9IGNwZi5zdWJzdHJpbmcoMCwgOSk7XG4gICAgICAgICAgICAgICAgZGlnaXRzID0gY3BmLnN1YnN0cmluZyg5KTtcbiAgICAgICAgICAgICAgICBzdW0gPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDEwOyBpID4gMTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSBudW1iZXJzLmNoYXJBdCgxMCAtIGkpICogaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VtICUgMTEgPCAyID8gMCA6IDExIC0gKHN1bSAlIDExKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBOdW1iZXIoZGlnaXRzLmNoYXJBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY3BmTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbnVtYmVycyA9IGNwZi5zdWJzdHJpbmcoMCwgMTApO1xuICAgICAgICAgICAgICAgIHN1bSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMTE7IGkgPiAxOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtICs9IG51bWJlcnMuY2hhckF0KDExIC0gaSkgKiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBzdW0gJSAxMSA8IDIgPyAwIDogMTEgLSAoc3VtICUgMTEpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IE51bWJlcihkaWdpdHMuY2hhckF0KDEpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjcGZOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY3BmTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGEgc2UgbyBDTlBKIMOpIHZhbGlkby4gRGV2ZS1zZSBzZXIgaW5mb3JtYWRvIG8gY3BmIHNlbSBtw6FzY2FyYS5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNWYWxpZENucGooY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9ycyB7XG4gICAgICAgIGxldCBjbnBqID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICBpZiAoY25waikge1xuICAgICAgICAgICAgbGV0IHNpemUsIG51bWJlcnMsIGRpZ2l0cywgc3VtLCBwb3MsIHJlc3VsdDtcbiAgICAgICAgICAgIGNucGogPSBjbnBqLnJlcGxhY2UoL1teXFxkXSsvZywgJycpO1xuXG4gICAgICAgICAgICBpZiAoY25wai5sZW5ndGggIT09IDE0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVsaW1pbmEgQ05QSnMgaW52YWxpZG9zIGNvbmhlY2lkb3NcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnMDAwMDAwMDAwMDAwMDAnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzExMTExMTExMTExMTExJyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICcyMjIyMjIyMjIyMjIyMicgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnMzMzMzMzMzMzMzMzMzMnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzQ0NDQ0NDQ0NDQ0NDQ0JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc1NTU1NTU1NTU1NTU1NScgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnNjY2NjY2NjY2NjY2NjYnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzc3Nzc3Nzc3Nzc3Nzc3JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc4ODg4ODg4ODg4ODg4OCcgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnOTk5OTk5OTk5OTk5OTknXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjbnBqTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVmFsaWRhIERWc1xuICAgICAgICAgICAgc2l6ZSA9IGNucGoubGVuZ3RoIC0gMjtcbiAgICAgICAgICAgIG51bWJlcnMgPSBjbnBqLnN1YnN0cmluZygwLCBzaXplKTtcbiAgICAgICAgICAgIGRpZ2l0cyA9IGNucGouc3Vic3RyaW5nKHNpemUpO1xuICAgICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICAgIHBvcyA9IHNpemUgLSA3O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNpemU7IGkgPj0gMTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgc3VtICs9IG51bWJlcnMuY2hhckF0KHNpemUgLSBpKSAqIHBvcy0tO1xuICAgICAgICAgICAgICAgIGlmIChwb3MgPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IDk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gc3VtICUgMTEgPCAyID8gMCA6IDExIC0gKHN1bSAlIDExKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IE51bWJlcihkaWdpdHMuY2hhckF0KDApKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzaXplID0gc2l6ZSArIDE7XG4gICAgICAgICAgICBudW1iZXJzID0gY25wai5zdWJzdHJpbmcoMCwgc2l6ZSk7XG4gICAgICAgICAgICBzdW0gPSAwO1xuICAgICAgICAgICAgcG9zID0gc2l6ZSAtIDc7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc2l6ZTsgaSA+PSAxOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBzdW0gKz0gbnVtYmVycy5jaGFyQXQoc2l6ZSAtIGkpICogcG9zLS07XG4gICAgICAgICAgICAgICAgaWYgKHBvcyA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zID0gOTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSBzdW0gJSAxMSA8IDIgPyAwIDogMTEgLSAoc3VtICUgMTEpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gTnVtYmVyKGRpZ2l0cy5jaGFyQXQoMSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY25wak5vdFZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFbDoWxpZGEgbyBuw7ptZXJvIGRlIHRlbGVmb25lIGRhIGNoYXZlIFBJWC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNWYWxpZFBob25lTnVtYmVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMge1xuICAgICAgICBsZXQgY2VsbFBob25lS2V5ID0gY29udHJvbC52YWx1ZSB8fCAnJztcbiAgICAgICAgY2VsbFBob25lS2V5ID0gY2VsbFBob25lS2V5LnJlcGxhY2UoL1tcXHMoKS1dL2csICcnKTtcbiAgICAgICAgY29uc3QgcmVnZXhOdW1iZXJUZWxlcGhvbmUgPSAvXlsxLTldW1xcZF17MSwyfVxcZHs4LDEwfSQvO1xuXG4gICAgICAgIGNvbnN0IGlzVmFsaWROdW1iZXJUZWxlcGhvbmUgPSByZWdleE51bWJlclRlbGVwaG9uZS50ZXN0KGNlbGxQaG9uZUtleSk7XG5cbiAgICAgICAgcmV0dXJuIGlzVmFsaWROdW1iZXJUZWxlcGhvbmUgPyBudWxsIDogeyBpbnZhbGlkUGhvbmVOdW1iZXI6IHRydWUgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGEgbyBlbWFpbCBkYSBjaGF2ZSBQSVguXG4gICAgICovXG4gICAgc3RhdGljIGlzVmFsaWRFbWFpbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JzIHtcbiAgICAgICAgY29uc3QgZW1haWxLZXkgPSBjb250cm9sLnZhbHVlO1xuICAgICAgICBjb25zdCByZWdleFZhbGlkRW1haWwgPSAvXltcXHctXFwuXStAW1xcdy1dKyhcXC5bXFx3LV17Miw0fSl7MSwyfSQvO1xuXG4gICAgICAgIGNvbnN0IGlzVmFsaWRFbWFpbCA9IHJlZ2V4VmFsaWRFbWFpbC50ZXN0KGVtYWlsS2V5KTtcblxuICAgICAgICByZXR1cm4gaXNWYWxpZEVtYWlsID8gbnVsbCA6IHsgaW52YWxpZEVtYWlsOiB0cnVlIH07XG4gICAgfVxufVxuIl19
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12YWxpZGF0b3JzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tcGVzc29hcy9wYXlyb2xsLWNvcmUvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3V0aWxzL2dlbmVyaWMtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTtJQUNJO0lBQWdCLENBQUM7SUFFakI7O09BRUc7SUFDSSwyQkFBVSxHQUFqQixVQUFrQixPQUF3QjtRQUN0QyxJQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRTFCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7YUFDakIsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2QyxJQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQztRQUN2QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLElBQ0ksR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQ2pCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxhQUFhO1lBRXJCLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDM0I7WUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6QixhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEQsYUFBYSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDcEUsS0FBSyxJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUM7YUFDMUM7WUFFRCxLQUFLLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLEtBQUssR0FBRyxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBRWpELElBQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDekQ7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSwyQkFBVSxHQUFqQixVQUFrQixPQUF3QjtRQUN0QyxJQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksR0FBRyxFQUFFO1lBQ0wsSUFBSSxPQUFPLFNBQUEsRUFBRSxNQUFNLFNBQUEsRUFBRSxHQUFHLFNBQUEsRUFBRSxDQUFDLFNBQUEsRUFBRSxNQUFNLFNBQUEsRUFBRSxXQUFXLFNBQUEsQ0FBQztZQUNqRCxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUU7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ3JDLFdBQVcsR0FBRyxDQUFDLENBQUM7b0JBQ2hCLE1BQU07aUJBQ1Q7YUFDSjtZQUNELElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsT0FBTyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixNQUFNLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDUixLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDckIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDckM7Z0JBQ0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDaEM7Z0JBQ0QsT0FBTyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQixHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNyQixHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNyQztnQkFDRCxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUNoQztnQkFDRCxPQUFPLElBQUksQ0FBQzthQUNmO2lCQUFNO2dCQUNILE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDaEM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNJLDRCQUFXLEdBQWxCLFVBQW1CLE9BQXdCO1FBQ3ZDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFFekIsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLElBQUksU0FBQSxFQUFFLE9BQU8sU0FBQSxFQUFFLE1BQU0sU0FBQSxFQUFFLEdBQUcsU0FBQSxFQUFFLEdBQUcsU0FBQSxFQUFFLE1BQU0sU0FBQSxDQUFDO1lBQzVDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVuQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFO2dCQUNwQixPQUFPLElBQUksQ0FBQzthQUNmO1lBRUQscUNBQXFDO1lBQ3JDLElBQ0ksSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQixFQUMzQjtnQkFDRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pDO1lBRUQsYUFBYTtZQUNiLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUN2QixPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNSLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsR0FBRyxHQUFHLENBQUMsQ0FBQztpQkFDWDthQUNKO1lBQ0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM1QyxJQUFJLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pDO1lBRUQsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDaEIsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDUixHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVCLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO29CQUNULEdBQUcsR0FBRyxDQUFDLENBQUM7aUJBQ1g7YUFDSjtZQUNELE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUMsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNqQztZQUVELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O01BRUU7SUFDSyx3Q0FBdUIsR0FBOUIsVUFBK0IsT0FBd0I7UUFDbkQsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUV6QixJQUFJLElBQUksRUFBRTtZQUNOLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV0RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFO2dCQUNwQixPQUFPLElBQUksQ0FBQzthQUNmO1lBRUQsaURBQWlEO1lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO2dCQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pDO1lBRUQscUNBQXFDO1lBQ3JDLElBQ0ksSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQjtnQkFDekIsSUFBSSxLQUFLLGdCQUFnQixFQUMzQjtnQkFDRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pDO1lBRUQsYUFBYTtZQUNiLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pDO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNqQztZQUVELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRWMsa0NBQWlCLEdBQWhDLFVBQWlDLElBQVksRUFBRSxJQUFZLEVBQUUsS0FBYTtRQUN0RSxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsR0FBRyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3BFLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtnQkFDVCxHQUFHLEdBQUcsQ0FBQyxDQUFDO2FBQ1g7U0FDSjtRQUNELElBQU0sTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRCxPQUFPLE1BQU0sS0FBSyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVjLHNDQUFxQixHQUFwQyxVQUFxQyxLQUFhO1FBQzlDLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksbUNBQWtCLEdBQXpCLFVBQTBCLE9BQXdCO1FBQzlDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3ZDLFlBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxJQUFNLG9CQUFvQixHQUFHLDBCQUEwQixDQUFDO1FBRXhELElBQU0sc0JBQXNCLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZFLE9BQU8sc0JBQXNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSw2QkFBWSxHQUFuQixVQUFvQixPQUF3QjtRQUN4QyxJQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQy9CLElBQU0sZUFBZSxHQUFHLHNDQUFzQyxDQUFDO1FBRS9ELElBQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEQsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUNMLHVCQUFDO0FBQUQsQ0FBQyxBQTdQRCxJQTZQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhbGlkYXRvcnMsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZhbGlkYXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYSBvIENFSSAoQ2FkYXN0cm8gZXNwZWPDrWZpY28gZGUgSU5TUykgZGlnaXRhZG8uXG4gICAgICovXG4gICAgc3RhdGljIGlzVmFsaWRDZWkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9ycyB7XG4gICAgICAgIGNvbnN0IGNlaSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgaWYgKCFjZWkpIHJldHVybiBudWxsO1xuICAgICAgICBlbHNlIGlmIChjZWkubGVuZ3RoICE9IDExKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBtdWx0aXBsaWNhZG9yQmFzZSA9IFwiMzI5ODc2NTQzMlwiO1xuICAgICAgICBsZXQgdG90YWwgPSAwO1xuICAgICAgICBsZXQgcmVzdG8gPSAwO1xuICAgICAgICBsZXQgbXVsdGlwbGljYW5kbyA9IDA7XG4gICAgICAgIGxldCBtdWx0aXBsaWNhZG9yID0gMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjZWkubGVuZ3RoICE9PSAxMSB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjAwMDAwMDAwMDAwXCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCIxMTExMTExMTExMVwiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiMjIyMjIyMjIyMjJcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjMzMzMzMzMzMzMzXCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCI0NDQ0NDQ0NDQ0NFwiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiNTU1NTU1NTU1NTVcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjY2NjY2NjY2NjY2XCIgfHxcbiAgICAgICAgICAgIGNlaSA9PT0gXCI3Nzc3Nzc3Nzc3N1wiIHx8XG4gICAgICAgICAgICBjZWkgPT09IFwiODg4ODg4ODg4ODhcIiB8fFxuICAgICAgICAgICAgY2VpID09PSBcIjk5OTk5OTk5OTk5XCJcbiAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIHsgaW52YWxpZENlaTogdHJ1ZSB9O1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICAgICAgICAgIG11bHRpcGxpY2FuZG8gPSBwYXJzZUludChjZWkuc3Vic3RyaW5nKGksIGkgKyAxKSwgMTApO1xuICAgICAgICAgICAgICAgIG11bHRpcGxpY2Fkb3IgPSBwYXJzZUludChtdWx0aXBsaWNhZG9yQmFzZS5zdWJzdHJpbmcoaSwgaSArIDEpLCAxMCk7XG4gICAgICAgICAgICAgICAgdG90YWwgKz0gbXVsdGlwbGljYW5kbyAqIG11bHRpcGxpY2Fkb3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3RvID0gMTEgLSAodG90YWwgJSAxMSk7XG4gICAgICAgICAgICByZXN0byA9IHJlc3RvID09PSAxMCB8fCByZXN0byA9PT0gMTEgPyAwIDogcmVzdG87XG5cbiAgICAgICAgICAgIGNvbnN0IGRpZ2l0byA9IHBhcnNlSW50KFwiXCIgKyBjZWkuY2hhckF0KDEwKSwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3RvID09PSBkaWdpdG8gPyBudWxsIDogeyBpbnZhbGlkQ2VpOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGEgc2UgbyBDUEYgw6kgdmFsaWRvLiBEZXZlLXNlIHNlciBpbmZvcm1hZG8gbyBjcGYgc2VtIG3DoXNjYXJhLlxuICAgICAqL1xuICAgIHN0YXRpYyBpc1ZhbGlkQ3BmKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMge1xuICAgICAgICBjb25zdCBjcGYgPSBjb250cm9sLnZhbHVlO1xuICAgICAgICBpZiAoY3BmKSB7XG4gICAgICAgICAgICBsZXQgbnVtYmVycywgZGlnaXRzLCBzdW0sIGksIHJlc3VsdCwgZXF1YWxEaWdpdHM7XG4gICAgICAgICAgICBlcXVhbERpZ2l0cyA9IDE7XG4gICAgICAgICAgICBpZiAoY3BmLmxlbmd0aCA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjcGYubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNwZi5jaGFyQXQoaSkgIT09IGNwZi5jaGFyQXQoaSArIDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVxdWFsRGlnaXRzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFlcXVhbERpZ2l0cykge1xuICAgICAgICAgICAgICAgIG51bWJlcnMgPSBjcGYuc3Vic3RyaW5nKDAsIDkpO1xuICAgICAgICAgICAgICAgIGRpZ2l0cyA9IGNwZi5zdWJzdHJpbmcoOSk7XG4gICAgICAgICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxMDsgaSA+IDE7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gbnVtYmVycy5jaGFyQXQoMTAgLSBpKSAqIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN1bSAlIDExIDwgMiA/IDAgOiAxMSAtIChzdW0gJSAxMSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gTnVtYmVyKGRpZ2l0cy5jaGFyQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGNwZk5vdFZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG51bWJlcnMgPSBjcGYuc3Vic3RyaW5nKDAsIDEwKTtcbiAgICAgICAgICAgICAgICBzdW0gPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDExOyBpID4gMTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSBudW1iZXJzLmNoYXJBdCgxMSAtIGkpICogaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VtICUgMTEgPCAyID8gMCA6IDExIC0gKHN1bSAlIDExKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBOdW1iZXIoZGlnaXRzLmNoYXJBdCgxKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY3BmTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNwZk5vdFZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhIHNlIG8gQ05QSiDDqSB2YWxpZG8uIERldmUtc2Ugc2VyIGluZm9ybWFkbyBvIGNwZiBzZW0gbcOhc2NhcmEuXG4gICAgICovXG4gICAgc3RhdGljIGlzVmFsaWRDbnBqKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMge1xuICAgICAgICBsZXQgY25waiA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgaWYgKGNucGopIHtcbiAgICAgICAgICAgIGxldCBzaXplLCBudW1iZXJzLCBkaWdpdHMsIHN1bSwgcG9zLCByZXN1bHQ7XG4gICAgICAgICAgICBjbnBqID0gY25wai5yZXBsYWNlKC9bXlxcZF0rL2csICcnKTtcblxuICAgICAgICAgICAgaWYgKGNucGoubGVuZ3RoICE9PSAxNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFbGltaW5hIENOUEpzIGludmFsaWRvcyBjb25oZWNpZG9zXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzAwMDAwMDAwMDAwMDAwJyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICcxMTExMTExMTExMTExMScgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnMjIyMjIyMjIyMjIyMjInIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzMzMzMzMzMzMzMzMzMzJyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc0NDQ0NDQ0NDQ0NDQ0NCcgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnNTU1NTU1NTU1NTU1NTUnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzY2NjY2NjY2NjY2NjY2JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc3Nzc3Nzc3Nzc3Nzc3NycgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnODg4ODg4ODg4ODg4ODgnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzk5OTk5OTk5OTk5OTk5J1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY25wak5vdFZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFZhbGlkYSBEVnNcbiAgICAgICAgICAgIHNpemUgPSBjbnBqLmxlbmd0aCAtIDI7XG4gICAgICAgICAgICBudW1iZXJzID0gY25wai5zdWJzdHJpbmcoMCwgc2l6ZSk7XG4gICAgICAgICAgICBkaWdpdHMgPSBjbnBqLnN1YnN0cmluZyhzaXplKTtcbiAgICAgICAgICAgIHN1bSA9IDA7XG4gICAgICAgICAgICBwb3MgPSBzaXplIC0gNztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzaXplOyBpID49IDE7IGktLSkge1xuICAgICAgICAgICAgICAgIHN1bSArPSBudW1iZXJzLmNoYXJBdChzaXplIC0gaSkgKiBwb3MtLTtcbiAgICAgICAgICAgICAgICBpZiAocG9zIDwgMikge1xuICAgICAgICAgICAgICAgICAgICBwb3MgPSA5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IHN1bSAlIDExIDwgMiA/IDAgOiAxMSAtIChzdW0gJSAxMSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBOdW1iZXIoZGlnaXRzLmNoYXJBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjbnBqTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2l6ZSA9IHNpemUgKyAxO1xuICAgICAgICAgICAgbnVtYmVycyA9IGNucGouc3Vic3RyaW5nKDAsIHNpemUpO1xuICAgICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICAgIHBvcyA9IHNpemUgLSA3O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNpemU7IGkgPj0gMTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgc3VtICs9IG51bWJlcnMuY2hhckF0KHNpemUgLSBpKSAqIHBvcy0tO1xuICAgICAgICAgICAgICAgIGlmIChwb3MgPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IDk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gc3VtICUgMTEgPCAyID8gMCA6IDExIC0gKHN1bSAlIDExKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IE51bWJlcihkaWdpdHMuY2hhckF0KDEpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIFZhbGlkYSBzZSBvIENOUEogQWxmYW51bcOpcmljbyDDqSB2YWxpZG8uIERldmUtc2Ugc2VyIGluZm9ybWFkbyBvIGNwZiBzZW0gbcOhc2NhcmEuXG4gICAgKi9cbiAgICBzdGF0aWMgaXNWYWxpZENucGpBbHBoYW51bWVyaWMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9ycyB7XG4gICAgICAgIGxldCBjbnBqID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICBpZiAoY25waikge1xuICAgICAgICAgICAgY25waiA9IGNucGoucmVwbGFjZSgvW15cXGRBLVphLXpdL2csICcnKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoY25wai5sZW5ndGggIT09IDE0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFZhbGlkYSBxdWUgZMOtZ2l0b3MgdmVyaWZpY2Fkb3JlcyBzw6NvIG51bcOpcmljb3NcbiAgICAgICAgICAgIGlmICghL15cXGQkLy50ZXN0KGNucGouY2hhckF0KDEyKSkgfHwgIS9eXFxkJC8udGVzdChjbnBqLmNoYXJBdCgxMykpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY25wak5vdFZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVsaW1pbmEgQ05QSnMgaW52YWxpZG9zIGNvbmhlY2lkb3NcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnMDAwMDAwMDAwMDAwMDAnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzExMTExMTExMTExMTExJyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICcyMjIyMjIyMjIyMjIyMicgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnMzMzMzMzMzMzMzMzMzMnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzQ0NDQ0NDQ0NDQ0NDQ0JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc1NTU1NTU1NTU1NTU1NScgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnNjY2NjY2NjY2NjY2NjYnIHx8XG4gICAgICAgICAgICAgICAgY25waiA9PT0gJzc3Nzc3Nzc3Nzc3Nzc3JyB8fFxuICAgICAgICAgICAgICAgIGNucGogPT09ICc4ODg4ODg4ODg4ODg4OCcgfHxcbiAgICAgICAgICAgICAgICBjbnBqID09PSAnOTk5OTk5OTk5OTk5OTknXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjbnBqTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVmFsaWRhIERWc1xuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IGNucGoubGVuZ3RoIC0gMjtcbiAgICAgICAgICAgIGNvbnN0IGRpZ2l0cyA9IGNucGouc3Vic3RyaW5nKHNpemUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIUdlbmVyaWNWYWxpZGF0b3IudmFsaWRhdGVDbnBqRGlnaXQoY25waiwgc2l6ZSwgTnVtYmVyKGRpZ2l0cy5jaGFyQXQoMCkpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpOb3RWYWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIUdlbmVyaWNWYWxpZGF0b3IudmFsaWRhdGVDbnBqRGlnaXQoY25waiwgc2l6ZSArIDEsIE51bWJlcihkaWdpdHMuY2hhckF0KDEpKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjbnBqTm90VmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVDbnBqRGlnaXQoY25wajogc3RyaW5nLCBzaXplOiBudW1iZXIsIGRpZ2l0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbnVtYmVycyA9IGNucGouc3Vic3RyaW5nKDAsIHNpemUpO1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgbGV0IHBvcyA9IHNpemUgLSA3O1xuICAgICAgICBmb3IgKGxldCBpID0gc2l6ZTsgaSA+PSAxOyBpLS0pIHtcbiAgICAgICAgICAgIHN1bSArPSB0aGlzLmNvbnZlcnRUb0FzY2lpTWludXM0OChudW1iZXJzLmNoYXJBdChzaXplIC0gaSkpICogcG9zLS07XG4gICAgICAgICAgICBpZiAocG9zIDwgMikge1xuICAgICAgICAgICAgICAgIHBvcyA9IDk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VtICUgMTEgPCAyID8gMCA6IDExIC0gKHN1bSAlIDExKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gZGlnaXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY29udmVydFRvQXNjaWlNaW51czQ4KGlucHV0OiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gaW5wdXQuY2hhckNvZGVBdCgwKSAtIDQ4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFbDoWxpZGEgbyBuw7ptZXJvIGRlIHRlbGVmb25lIGRhIGNoYXZlIFBJWC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNWYWxpZFBob25lTnVtYmVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMge1xuICAgICAgICBsZXQgY2VsbFBob25lS2V5ID0gY29udHJvbC52YWx1ZSB8fCAnJztcbiAgICAgICAgY2VsbFBob25lS2V5ID0gY2VsbFBob25lS2V5LnJlcGxhY2UoL1tcXHMoKS1dL2csICcnKTtcbiAgICAgICAgY29uc3QgcmVnZXhOdW1iZXJUZWxlcGhvbmUgPSAvXlsxLTldW1xcZF17MSwyfVxcZHs4LDEwfSQvO1xuXG4gICAgICAgIGNvbnN0IGlzVmFsaWROdW1iZXJUZWxlcGhvbmUgPSByZWdleE51bWJlclRlbGVwaG9uZS50ZXN0KGNlbGxQaG9uZUtleSk7XG5cbiAgICAgICAgcmV0dXJuIGlzVmFsaWROdW1iZXJUZWxlcGhvbmUgPyBudWxsIDogeyBpbnZhbGlkUGhvbmVOdW1iZXI6IHRydWUgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGEgbyBlbWFpbCBkYSBjaGF2ZSBQSVguXG4gICAgICovXG4gICAgc3RhdGljIGlzVmFsaWRFbWFpbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JzIHtcbiAgICAgICAgY29uc3QgZW1haWxLZXkgPSBjb250cm9sLnZhbHVlO1xuICAgICAgICBjb25zdCByZWdleFZhbGlkRW1haWwgPSAvXltcXHctXFwuXStAW1xcdy1dKyhcXC5bXFx3LV17Miw0fSl7MSwyfSQvO1xuXG4gICAgICAgIGNvbnN0IGlzVmFsaWRFbWFpbCA9IHJlZ2V4VmFsaWRFbWFpbC50ZXN0KGVtYWlsS2V5KTtcblxuICAgICAgICByZXR1cm4gaXNWYWxpZEVtYWlsID8gbnVsbCA6IHsgaW52YWxpZEVtYWlsOiB0cnVlIH07XG4gICAgfVxufVxuIl19
@@ -141,6 +141,59 @@ class CNPJValidator {
141
141
  }
142
142
  return true;
143
143
  }
144
+ checkCNPJAlphanumeric(value) {
145
+ let cnpj = value;
146
+ if (cnpj) {
147
+ cnpj = cnpj.replace(/[^\dA-Za-z]/g, '').toUpperCase();
148
+ if (cnpj.length !== 14) {
149
+ return true;
150
+ }
151
+ // Valida que dígitos verificadores são numéricos
152
+ if (!/^\d$/.test(cnpj.charAt(12)) || !/^\d$/.test(cnpj.charAt(13))) {
153
+ return { cnpjNotValid: true };
154
+ }
155
+ // Elimina CNPJs invalidos conhecidos
156
+ if (cnpj === '00000000000000' ||
157
+ cnpj === '11111111111111' ||
158
+ cnpj === '22222222222222' ||
159
+ cnpj === '33333333333333' ||
160
+ cnpj === '44444444444444' ||
161
+ cnpj === '55555555555555' ||
162
+ cnpj === '66666666666666' ||
163
+ cnpj === '77777777777777' ||
164
+ cnpj === '88888888888888' ||
165
+ cnpj === '99999999999999') {
166
+ return false;
167
+ }
168
+ // Valida DVs
169
+ const size = cnpj.length - 2;
170
+ const digits = cnpj.substring(size);
171
+ if (!this.validateCnpjDigit(cnpj, size, Number(digits.charAt(0)))) {
172
+ return false;
173
+ }
174
+ if (!this.validateCnpjDigit(cnpj, size + 1, Number(digits.charAt(1)))) {
175
+ return false;
176
+ }
177
+ return true;
178
+ }
179
+ return true;
180
+ }
181
+ validateCnpjDigit(cnpj, size, digit) {
182
+ let numbers = cnpj.substring(0, size);
183
+ let sum = 0;
184
+ let pos = size - 7;
185
+ for (let i = size; i >= 1; i--) {
186
+ sum += this.convertToAsciiMinus48(numbers.charAt(size - i)) * pos--;
187
+ if (pos < 2) {
188
+ pos = 9;
189
+ }
190
+ }
191
+ const result = sum % 11 < 2 ? 0 : 11 - (sum % 11);
192
+ return result === digit;
193
+ }
194
+ convertToAsciiMinus48(input) {
195
+ return input.charCodeAt(0) - 48;
196
+ }
144
197
  }
145
198
  const cnpjValidator = new CNPJValidator();
146
199
 
@@ -8456,27 +8509,40 @@ class FormatUtilsService {
8456
8509
  * Retorna o CNPJ formatado
8457
8510
  * @param cnpj CNPJ
8458
8511
  */
8459
- static getFormattedCnpj(cnpj) {
8512
+ static getFormattedCnpj(cnpj, isAlphanumericCNPJ) {
8460
8513
  if (cnpj) {
8461
- return cnpj
8462
- .replace(/\D/g, "")
8463
- .replace(/(\d{2})(\d)/, "$1.$2")
8464
- .replace(/(\d{3})(\d)/, "$1.$2")
8465
- .replace(/(\d{3})(\d)/, "$1/$2")
8466
- .replace(/(\d{4})(\d)/, "$1-$2");
8514
+ if (isAlphanumericCNPJ) {
8515
+ // Remove caracteres especiais mantendo letras e números, e converte para maiúsculas
8516
+ const cleanCnpj = cnpj.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();
8517
+ // Aplica formatação: AA.BBB.CCC/DDDD-EE
8518
+ return cleanCnpj
8519
+ .replace(/^([A-Z0-9]{2})([A-Z0-9])/, '$1.$2')
8520
+ .replace(/^([A-Z0-9]{2}\.)([A-Z0-9]{3})([A-Z0-9])/, '$1$2.$3')
8521
+ .replace(/^([A-Z0-9]{2}\.[A-Z0-9]{3}\.)([A-Z0-9]{3})([A-Z0-9])/, '$1$2/$3')
8522
+ .replace(/^([A-Z0-9]{2}\.[A-Z0-9]{3}\.[A-Z0-9]{3}\/)([A-Z0-9]{4})([0-9])/, '$1$2-$3');
8523
+ }
8524
+ else {
8525
+ return cnpj
8526
+ .replace(/\D/g, "")
8527
+ .replace(/(\d{2})(\d)/, "$1.$2")
8528
+ .replace(/(\d{3})(\d)/, "$1.$2")
8529
+ .replace(/(\d{3})(\d)/, "$1/$2")
8530
+ .replace(/(\d{4})(\d)/, "$1-$2");
8531
+ }
8467
8532
  }
8468
8533
  return null;
8469
8534
  }
8470
8535
  /**
8471
8536
  * Retorna a mascara do CPF/CNPJ
8472
8537
  * @param key Valores possíveis são CPF ou CNPJ
8538
+ * @param isAlphanumericCNPJ Define se o CNPJ pode ser alfanumérico.
8473
8539
  */
8474
- static getCpfCnpjMask(key) {
8540
+ static getCpfCnpjMask(key, isAlphanumericCNPJ) {
8475
8541
  switch (key) {
8476
8542
  case "CPF":
8477
8543
  return "999.999.999-99";
8478
8544
  case "CNPJ":
8479
- return "99.999.999/9999-99";
8545
+ return isAlphanumericCNPJ ? "**.***.***/****-99" : "99.999.999/9999-99";
8480
8546
  default:
8481
8547
  return "";
8482
8548
  }
@@ -8676,6 +8742,62 @@ class GenericValidator {
8676
8742
  }
8677
8743
  return null;
8678
8744
  }
8745
+ /**
8746
+ * Valida se o CNPJ Alfanumérico é valido. Deve-se ser informado o cpf sem máscara.
8747
+ */
8748
+ static isValidCnpjAlphanumeric(control) {
8749
+ let cnpj = control.value;
8750
+ if (cnpj) {
8751
+ cnpj = cnpj.replace(/[^\dA-Za-z]/g, '').toUpperCase();
8752
+ if (cnpj.length !== 14) {
8753
+ return null;
8754
+ }
8755
+ // Valida que dígitos verificadores são numéricos
8756
+ if (!/^\d$/.test(cnpj.charAt(12)) || !/^\d$/.test(cnpj.charAt(13))) {
8757
+ return { cnpjNotValid: true };
8758
+ }
8759
+ // Elimina CNPJs invalidos conhecidos
8760
+ if (cnpj === '00000000000000' ||
8761
+ cnpj === '11111111111111' ||
8762
+ cnpj === '22222222222222' ||
8763
+ cnpj === '33333333333333' ||
8764
+ cnpj === '44444444444444' ||
8765
+ cnpj === '55555555555555' ||
8766
+ cnpj === '66666666666666' ||
8767
+ cnpj === '77777777777777' ||
8768
+ cnpj === '88888888888888' ||
8769
+ cnpj === '99999999999999') {
8770
+ return { cnpjNotValid: true };
8771
+ }
8772
+ // Valida DVs
8773
+ const size = cnpj.length - 2;
8774
+ const digits = cnpj.substring(size);
8775
+ if (!GenericValidator.validateCnpjDigit(cnpj, size, Number(digits.charAt(0)))) {
8776
+ return { cnpjNotValid: true };
8777
+ }
8778
+ if (!GenericValidator.validateCnpjDigit(cnpj, size + 1, Number(digits.charAt(1)))) {
8779
+ return { cnpjNotValid: true };
8780
+ }
8781
+ return null;
8782
+ }
8783
+ return null;
8784
+ }
8785
+ static validateCnpjDigit(cnpj, size, digit) {
8786
+ const numbers = cnpj.substring(0, size);
8787
+ let sum = 0;
8788
+ let pos = size - 7;
8789
+ for (let i = size; i >= 1; i--) {
8790
+ sum += this.convertToAsciiMinus48(numbers.charAt(size - i)) * pos--;
8791
+ if (pos < 2) {
8792
+ pos = 9;
8793
+ }
8794
+ }
8795
+ const result = sum % 11 < 2 ? 0 : 11 - (sum % 11);
8796
+ return result === digit;
8797
+ }
8798
+ static convertToAsciiMinus48(input) {
8799
+ return input.charCodeAt(0) - 48;
8800
+ }
8679
8801
  /**
8680
8802
  * Válida o número de telefone da chave PIX.
8681
8803
  */
@@ -8898,7 +9020,7 @@ let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent
8898
9020
  /**
8899
9021
  * Antes de setar o validator prepara as variáveis necessária para que seja feita a validação do campo.
8900
9022
  */
8901
- setPixKeyValidators(isEditMode) {
9023
+ setPixKeyValidators(isEditMode, isAlphanumericCNPJ) {
8902
9024
  const genericPixKey = this.pixAccountFormGroup.get("pixKey");
8903
9025
  if (this.pixKeyType) {
8904
9026
  switch (this.pixKeyType) {
@@ -8918,9 +9040,7 @@ let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent
8918
9040
  ]));
8919
9041
  break;
8920
9042
  case "CNPJ":
8921
- genericPixKey.setValidators(Validators.compose([
8922
- Validators.required, GenericValidator.isValidCnpj,
8923
- ]));
9043
+ this.configureCnpjKeyValidators(isAlphanumericCNPJ, genericPixKey);
8924
9044
  break;
8925
9045
  case "RANDOM_KEY":
8926
9046
  genericPixKey.setValidators(Validators.required);
@@ -8935,6 +9055,23 @@ let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent
8935
9055
  genericPixKey.updateValueAndValidity();
8936
9056
  }
8937
9057
  }
9058
+ /**
9059
+ * Escolhe o validator do CNPJ conforme a feature toggle alphanumericCNPJFeature.
9060
+ * @param isAlphanumericCNPJ Feature toggle que define se o CNPJ pode ser alfanumérico.
9061
+ * @param genericPixKey Tipo AbstractControl do campo pixKey.
9062
+ */
9063
+ configureCnpjKeyValidators(isAlphanumericCNPJ, genericPixKey) {
9064
+ if (isAlphanumericCNPJ) {
9065
+ genericPixKey.setValidators(Validators.compose([
9066
+ Validators.required, GenericValidator.isValidCnpjAlphanumeric,
9067
+ ]));
9068
+ }
9069
+ else {
9070
+ genericPixKey.setValidators(Validators.compose([
9071
+ Validators.required, GenericValidator.isValidCnpj,
9072
+ ]));
9073
+ }
9074
+ }
8938
9075
  /**
8939
9076
  * Este método calcula as parcentagens que já foram inseridas, e seta a diferença para chegar em
8940
9077
  * 100% na validação do campo "percentage" como um novo maxValue;
@@ -9059,7 +9196,7 @@ __decorate([
9059
9196
  HistoricalPixAccountFormComponent = __decorate([
9060
9197
  Component({
9061
9198
  selector: "pix-account",
9062
- template: "<div id=\"main\">\n <form [formGroup]=\"pixAccountFormGroup\" autocomplete=\"off\">\n <div class=\"ui-fluid\">\n <div class=\"ui-g\">\n <!-- Tipo de chave -->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label>{{'hcm.payroll.employees_addition_pix_key_type'|translate}}</label>\n <input-rest-auto-complete-enum [dropdown]=\"true\" server=\"payroll\"\n enumeration=\"PixKeyType\"\n placeholder=\"{{'hcm.payroll.select' | translate}}\"\n name=\"pixKeyType\" [form]=\"pixAccountFormGroup\"\n (onSelect)=\"onChangePixKeyType($event)\"\n (onClear)=\"onClearPixKeyType()\"\n id=\"ta-pixKeyType\"></input-rest-auto-complete-enum>\n <s-control-errors [control]=\"pixAccountFormGroup.get('pixKeyType')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n pixKeyTypeBankAccountDuplicate: 'hcm.payroll.historical_pix_key_type_bank_account_duplicate' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Chave Pix-->\n <div class=\"ui-md-6 ui-sm-12\" [ngClass]=\"{'required': pixKeyType !== 'BANK_ACCOUNT'}\">\n <label>{{'hcm.payroll.employees_addition_pix_key' | translate}}</label>\n <ng-container [ngSwitch]=\"pixKeyType\">\n <input *ngSwitchCase=\"'TELEPHONE'\" only-number\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n (keyup)=\"phoneMask($event)\" maxlength=\"15\"\n placeholder=\"(__) ____-____\">\n <p-inputMask *ngSwitchCase=\"'CPF'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"___.___.___-__\"\n mask=\"999.999.999-99\" [unmask]=\"true\"></p-inputMask>\n <p-inputMask *ngSwitchCase=\"'CNPJ'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"__.___.___/____-__\"\n mask=\"99.999.999/9999-99\" [unmask]=\"true\"></p-inputMask>\n <input *ngSwitchCase=\"'EMAIL'\"\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"{{'hcm.payroll.employees_addition_email'|translate}}\"/>\n <input *ngSwitchCase=\"'BANK_ACCOUNT'\" disabled\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"/>\n <input *ngSwitchDefault\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\" maxlength=\"100\" />\n </ng-container>\n <s-control-errors *ngIf=\"isShowPixKeyFieldValidatorMessage\" id=\"er-pix-key\"\n [control]=\"pixAccountFormGroup.get('pixKey')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n invalidPhoneNumber: 'hcm.payroll.employees_addition_invalid_phone_number' | translate: { value: pixAccountFormGroup.get('pixKey').value },\n invalidEmail: 'hcm.payroll.employees_addition_email_invalid' | translate,\n cpfNotValid: 'hcm.payroll.employees_addition_cpf_error' | translate,\n cnpjNotValid: 'hcm.payroll.employees_addition_cnpj_error' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Percentual-->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label id=\"lb-percentage\"\n for=\"ff-percentage\">{{ 'hcm.payroll.historical_bank_account_label_percentage' | translate }}</label>\n <div class=\"ui-inputgroup\">\n <span class=\"ui-inputgroup-addon\">%</span>\n <input pInputText id=\"ff-percentage\" name=\"percentage\"\n formControlName=\"percentage\"\n currencyMask\n [options]=\"optionsPercentage\"\n [placeholder]=\"percentagePlaceholder\"/>\n </div>\n <s-control-errors [control]=\"pixAccountFormGroup.get('percentage')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n maxlength: 'hcm.payroll.error_max_length' | translate: { value: '6' },\n max: 'hcm.payroll.error_max_value_number' | translate: { value: maxValuePercentage },\n min: 'hcm.payroll.error_min_value_number' | translate: { value: '0,01' }\n }\">\n </s-control-errors>\n </div>\n <div class=\"ui-g-12\">\n <p-fieldset\n legend=\"{{ 'hcm.payroll.custom_fields' | translate }}\"\n [attr.data-hidden]=\"!customFields || !customFields.fields.length\"\n >\n <s-custom-fields\n domain=\"hcm\"\n service=\"{{customService}}\"\n entity=\"{{customEntity}}\"\n formControlName=\"customFields\"\n [invalidErrorLabel]=\"'hcm.payroll.employees_invalid_field' | translate\"\n >\n </s-custom-fields>\n </p-fieldset>\n </div>\n </div>\n </div>\n </form>\n\n <div [ngClass]=\"withSideBar ? 'footer' : 'footer-s-border'\">\n <div class=\"form-group\">\n <s-button id=\"btn-save\" label=\"{{ labelBtnAdd | translate}}\" priority=\"primary\"\n (onClick)=\"addItem()\" *ngIf=\"visibleBtnSave && !this.isView\"></s-button>\n <s-button *ngIf=\"withSideBar\" id=\"btn-close\" label=\"{{'hcm.payroll.cancel'|translate}}\" priority=\"secondary\"\n priority=\"link\" (onClick)=\"close()\"></s-button>\n </div>\n </div>\n</div>\n",
9199
+ template: "<div id=\"main\">\n <form [formGroup]=\"pixAccountFormGroup\" autocomplete=\"off\">\n <div class=\"ui-fluid\">\n <div class=\"ui-g\">\n <!-- Tipo de chave -->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label>{{'hcm.payroll.employees_addition_pix_key_type'|translate}}</label>\n <input-rest-auto-complete-enum [dropdown]=\"true\" server=\"payroll\"\n enumeration=\"PixKeyType\"\n placeholder=\"{{'hcm.payroll.select' | translate}}\"\n name=\"pixKeyType\" [form]=\"pixAccountFormGroup\"\n (onSelect)=\"onChangePixKeyType($event)\"\n (onClear)=\"onClearPixKeyType()\"\n id=\"ta-pixKeyType\"></input-rest-auto-complete-enum>\n <s-control-errors [control]=\"pixAccountFormGroup.get('pixKeyType')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n pixKeyTypeBankAccountDuplicate: 'hcm.payroll.historical_pix_key_type_bank_account_duplicate' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Chave Pix-->\n <div class=\"ui-md-6 ui-sm-12\" [ngClass]=\"{'required': pixKeyType !== 'BANK_ACCOUNT'}\">\n <label>{{'hcm.payroll.employees_addition_pix_key' | translate}}</label>\n <ng-container [ngSwitch]=\"pixKeyType\">\n <input *ngSwitchCase=\"'TELEPHONE'\" only-number\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n (keyup)=\"phoneMask($event)\" maxlength=\"15\"\n placeholder=\"(__) ____-____\">\n <p-inputMask *ngSwitchCase=\"'CPF'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"___.___.___-__\"\n mask=\"999.999.999-99\" [unmask]=\"true\"></p-inputMask>\n <p-inputMask *ngSwitchCase=\"'CNPJ'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"__.___.___/____-__\"\n mask=\"**.***.***/****-99\" [unmask]=\"true\"></p-inputMask>\n <input *ngSwitchCase=\"'EMAIL'\"\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"{{'hcm.payroll.employees_addition_email'|translate}}\"/>\n <input *ngSwitchCase=\"'BANK_ACCOUNT'\" disabled\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"/>\n <input *ngSwitchDefault\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\" maxlength=\"100\" />\n </ng-container>\n <s-control-errors *ngIf=\"isShowPixKeyFieldValidatorMessage\" id=\"er-pix-key\"\n [control]=\"pixAccountFormGroup.get('pixKey')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n invalidPhoneNumber: 'hcm.payroll.employees_addition_invalid_phone_number' | translate: { value: pixAccountFormGroup.get('pixKey').value },\n invalidEmail: 'hcm.payroll.employees_addition_email_invalid' | translate,\n cpfNotValid: 'hcm.payroll.employees_addition_cpf_error' | translate,\n cnpjNotValid: 'hcm.payroll.employees_addition_cnpj_error' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Percentual-->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label id=\"lb-percentage\"\n for=\"ff-percentage\">{{ 'hcm.payroll.historical_bank_account_label_percentage' | translate }}</label>\n <div class=\"ui-inputgroup\">\n <span class=\"ui-inputgroup-addon\">%</span>\n <input pInputText id=\"ff-percentage\" name=\"percentage\"\n formControlName=\"percentage\"\n currencyMask\n [options]=\"optionsPercentage\"\n [placeholder]=\"percentagePlaceholder\"/>\n </div>\n <s-control-errors [control]=\"pixAccountFormGroup.get('percentage')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n maxlength: 'hcm.payroll.error_max_length' | translate: { value: '6' },\n max: 'hcm.payroll.error_max_value_number' | translate: { value: maxValuePercentage },\n min: 'hcm.payroll.error_min_value_number' | translate: { value: '0,01' }\n }\">\n </s-control-errors>\n </div>\n <div class=\"ui-g-12\">\n <p-fieldset\n legend=\"{{ 'hcm.payroll.custom_fields' | translate }}\"\n [attr.data-hidden]=\"!customFields || !customFields.fields.length\"\n >\n <s-custom-fields\n domain=\"hcm\"\n service=\"{{customService}}\"\n entity=\"{{customEntity}}\"\n formControlName=\"customFields\"\n [invalidErrorLabel]=\"'hcm.payroll.employees_invalid_field' | translate\"\n >\n </s-custom-fields>\n </p-fieldset>\n </div>\n </div>\n </div>\n </form>\n\n <div [ngClass]=\"withSideBar ? 'footer' : 'footer-s-border'\">\n <div class=\"form-group\">\n <s-button id=\"btn-save\" label=\"{{ labelBtnAdd | translate}}\" priority=\"primary\"\n (onClick)=\"addItem()\" *ngIf=\"visibleBtnSave && !this.isView\"></s-button>\n <s-button *ngIf=\"withSideBar\" id=\"btn-close\" label=\"{{'hcm.payroll.cancel'|translate}}\" priority=\"secondary\"\n priority=\"link\" (onClick)=\"close()\"></s-button>\n </div>\n </div>\n</div>\n",
9063
9200
  styles: [".refresh{width:100%!important}#table-annuity .col-default-s{width:10%}#table-annuity .col-default-m{width:12%}#table-annuity .col-default-l{width:16%}#table-annuity .col-action{width:10%}#table-annuity .icon-warning{text-align:center!important;color:#ff6d00c7!important}@media screen and (max-width:612px){#table-annuity .col-default-1,#table-annuity .col-default-2{width:16%}#table-annuity .col-default-3{width:26%}#table-annuity .col-icon{width:10%}#table-annuity .col-action{width:27%}}#main{display:-webkit-box;display:flex;height:100%;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}#main form{height:100%}#main .footer{border-top:1px solid #ccc;padding-top:15px;margin-top:15px;flex-shrink:0;margin-bottom:-18px}#main .footer-s-border{padding-left:7px;flex-shrink:0;margin-bottom:-18px}"]
9064
9201
  })
9065
9202
  ], HistoricalPixAccountFormComponent);