ibankit
Version:
Validation, field extraction and creation of IBAN, BBAN, BIC numbers
282 lines • 78.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BbanStructure = void 0;
const structurePart_1 = require("./structurePart");
const country_1 = require("./country");
const exceptions_1 = require("./exceptions");
function mod11(value, weights) {
return ((11 - (value.split("").reduce((acc, s, idx) => acc + parseInt(s, 10) * weights[idx % weights.length], 0) % 11)) % 11);
}
function nationalES(bban, structure) {
const weights = [1, 2, 4, 8, 5, 10, 9, 7, 3, 6];
const combined = [structurePart_1.PartType.BANK_CODE, structurePart_1.PartType.BRANCH_CODE].map((p) => structure.extractValueMust(bban, p)).join("");
function to11(v) {
if (v === 10) {
return 1;
}
else if (v === 11) {
return 0;
}
return v;
}
const d1 = to11(mod11(`00${combined}`, weights));
const d2 = to11(mod11(structure.extractValueMust(bban, structurePart_1.PartType.ACCOUNT_NUMBER), weights));
return `${d1}${d2}`;
}
function nationalFR(bban, structure) {
const replaceChars = {
["[AJ]"]: "1",
["[BKS]"]: "2",
["[CLT]"]: "3",
["[DMU]"]: "4",
["[ENV]"]: "5",
["[FOW]"]: "6",
["[GPX]"]: "7",
["[HQY]"]: "8",
["[IRZ]"]: "9",
};
let combined = [structurePart_1.PartType.BANK_CODE, structurePart_1.PartType.BRANCH_CODE, structurePart_1.PartType.ACCOUNT_NUMBER]
.map((p) => String(structure.extractValue(bban, p)))
.join("") + "00";
Object.entries(replaceChars).map(([k, v]) => (combined = combined.replace(new RegExp(k, "g"), v)));
const expected = 97 - combined.split("").reduce((acc, v) => (acc * 10 + parseInt(v)) % 97, 0);
return String(expected).padStart(2, "0");
}
function nationalIT(bban, structure) {
const even = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25];
const odd = [1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23];
const V0 = "0".charCodeAt(0);
const V9 = "9".charCodeAt(0);
const VA = "A".charCodeAt(0);
const value = [structurePart_1.PartType.BANK_CODE, structurePart_1.PartType.BRANCH_CODE, structurePart_1.PartType.ACCOUNT_NUMBER]
.map((p) => structure.extractValueMust(bban, p))
.join("")
.split("")
.map((v) => v.toUpperCase().charCodeAt(0))
.map((v) => v - (V0 <= v && v <= V9 ? V0 : VA))
.reduce((acc, v, idx) => acc + (idx % 2 === 0 ? odd[v] : even[v]), 0) % 26;
return String.fromCharCode(VA + value);
}
function nationalNO(bban, structure) {
const value = [structurePart_1.PartType.BANK_CODE, structurePart_1.PartType.ACCOUNT_NUMBER].map((p) => structure.extractValueMust(bban, p)).join("");
return String(mod11(value, [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]) % 10);
}
function nationalPT(bban, structure) {
const V0 = "0".charCodeAt(0);
const weights = [73, 17, 89, 38, 62, 45, 53, 15, 50, 5, 49, 34, 81, 76, 27, 90, 9, 30, 3];
const remainder = [structurePart_1.PartType.BANK_CODE, structurePart_1.PartType.BRANCH_CODE, structurePart_1.PartType.ACCOUNT_NUMBER]
.map((p) => structure.extractValueMust(bban, p))
.join("")
.split("")
.map((v) => v.charCodeAt(0))
.reduce((acc, v, idx) => (acc + (v - V0) * weights[idx]) % 97, 0);
return String(98 - remainder).padStart(2, "0");
}
class BbanStructure {
constructor(...entries) {
this.entries = entries;
}
getParts() {
return this.entries;
}
validate(bban) {
this.validateBbanLength(bban);
this.validateBbanEntries(bban);
}
extractValue(bban, partType) {
let bbanPartOffset = 0;
let result = null;
for (const part of this.getParts()) {
const partLength = part.getLength();
const partValue = bban.substring(bbanPartOffset, bbanPartOffset + partLength);
bbanPartOffset = bbanPartOffset + partLength;
if (part.getPartType() == partType) {
result = (result || "") + partValue;
}
}
return result;
}
extractValueMust(bban, partType) {
const value = this.extractValue(bban, partType);
if (value === null) {
throw new exceptions_1.RequiredPartTypeMissing(`Required part type [${partType}] missing`);
}
return value;
}
static forCountry(countryCode) {
if (!countryCode) {
return null;
}
return this.structures[countryCode] || null;
}
static getEntries() {
return Object.values(this.structures);
}
static supportedCountries() {
return Object.keys(this.structures);
}
getBbanLength() {
return this.entries.reduce((acc, e) => acc + e.getLength(), 0);
}
validateBbanLength(bban) {
const expectedBbanLength = this.getBbanLength();
const bbanLength = bban.length;
if (expectedBbanLength != bbanLength) {
throw new exceptions_1.FormatException(exceptions_1.FormatViolation.BBAN_LENGTH, `[${bban}] length is ${bbanLength}, expected BBAN length is: ${expectedBbanLength}`, String(bbanLength), String(expectedBbanLength));
}
}
validateBbanEntries(bban) {
let offset = 0;
for (const part of this.getParts()) {
const partLength = part.getLength();
const entryValue = bban.substring(offset, offset + partLength);
offset = offset + partLength;
this.validateBbanEntryCharacterType(bban, part, entryValue);
}
}
validateBbanEntryCharacterType(bban, part, entryValue) {
if (!part.validate(entryValue)) {
switch (part.getCharacterType()) {
case structurePart_1.CharacterType.a:
throw new exceptions_1.FormatException(exceptions_1.FormatViolation.BBAN_ONLY_UPPER_CASE_LETTERS, `[${entryValue}] must contain only upper case letters.`, entryValue);
case structurePart_1.CharacterType.c:
throw new exceptions_1.FormatException(exceptions_1.FormatViolation.BBAN_ONLY_DIGITS_OR_LETTERS, `[${entryValue}] must contain only digits or letters.`, entryValue);
case structurePart_1.CharacterType.n:
throw new exceptions_1.FormatException(exceptions_1.FormatViolation.BBAN_ONLY_DIGITS, `[${entryValue}] must contain only digits.`, entryValue);
}
}
if (part.getPartType() === structurePart_1.PartType.NATIONAL_CHECK_DIGIT && part.hasGenerator) {
const expected = part.generate(bban, this);
if (entryValue !== expected) {
throw new exceptions_1.FormatException(exceptions_1.FormatViolation.NATIONAL_CHECK_DIGIT, `national check digit(s) don't match expect=[${expected}] actual=[${entryValue}]`, expected, entryValue);
}
}
}
}
exports.BbanStructure = BbanStructure;
BbanStructure.bbanFR = new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n, nationalFR));
BbanStructure.structures = {
[country_1.CountryCode.AD]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.c)),
[country_1.CountryCode.AE]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.c)),
[country_1.CountryCode.AL]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(1, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.c)),
[country_1.CountryCode.AO]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(21, structurePart_1.CharacterType.n)),
[country_1.CountryCode.AT]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.n)),
[country_1.CountryCode.AZ]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(20, structurePart_1.CharacterType.c)),
[country_1.CountryCode.BA]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(8, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
[country_1.CountryCode.BE]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(7, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n, (bban, structure) => {
const accountNumber = structure.extractValue(bban, structurePart_1.PartType.ACCOUNT_NUMBER);
const bankCode = structure.extractValue(bban, structurePart_1.PartType.BANK_CODE);
if (accountNumber === null || bankCode === null) {
throw new exceptions_1.FormatException(exceptions_1.FormatViolation.NOT_EMPTY, "account number or bank code missing");
}
const value = parseInt(`${bankCode}${accountNumber}`, 10);
const remainder = Math.floor(value / 97);
let expected = value - remainder * 97;
if (expected === 0) {
expected = 97;
}
return String(expected).padStart(2, "0");
})),
[country_1.CountryCode.BF]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(23, structurePart_1.CharacterType.n)),
[country_1.CountryCode.BG]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountType(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(8, structurePart_1.CharacterType.c)),
[country_1.CountryCode.BH]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(14, structurePart_1.CharacterType.c)),
[country_1.CountryCode.BI]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
[country_1.CountryCode.BJ]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n, nationalFR)),
[country_1.CountryCode.BR]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(8, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(10, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountType(1, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.ownerAccountNumber(1, structurePart_1.CharacterType.c)),
[country_1.CountryCode.BY]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.accountType(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.c)),
[country_1.CountryCode.CF]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(23, structurePart_1.CharacterType.n)),
[country_1.CountryCode.CG]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(23, structurePart_1.CharacterType.n)),
[country_1.CountryCode.CH]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.c)),
[country_1.CountryCode.CI]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.accountNumber(22, structurePart_1.CharacterType.n)),
[country_1.CountryCode.CM]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(23, structurePart_1.CharacterType.n)),
[country_1.CountryCode.CR]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(14, structurePart_1.CharacterType.n)),
[country_1.CountryCode.CV]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(21, structurePart_1.CharacterType.n)),
[country_1.CountryCode.CY]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.c)),
[country_1.CountryCode.CZ]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(6, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(10, structurePart_1.CharacterType.n)),
[country_1.CountryCode.DE]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(8, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(10, structurePart_1.CharacterType.n)),
[country_1.CountryCode.DJ]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
[country_1.CountryCode.DK]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(10, structurePart_1.CharacterType.n)),
[country_1.CountryCode.DO]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.accountNumber(20, structurePart_1.CharacterType.n)),
[country_1.CountryCode.DZ]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(20, structurePart_1.CharacterType.n)),
[country_1.CountryCode.EE]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(1, structurePart_1.CharacterType.n)),
[country_1.CountryCode.EG]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(17, structurePart_1.CharacterType.n)),
[country_1.CountryCode.ES]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n, nationalES), structurePart_1.BbanStructurePart.accountNumber(10, structurePart_1.CharacterType.n)),
[country_1.CountryCode.FI]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.n)),
[country_1.CountryCode.FK]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.n)),
[country_1.CountryCode.FO]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(9, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(1, structurePart_1.CharacterType.n)),
[country_1.CountryCode.FR]: BbanStructure.bbanFR,
[country_1.CountryCode.GA]: BbanStructure.bbanFR,
[country_1.CountryCode.GB]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.branchCode(6, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(8, structurePart_1.CharacterType.n)),
[country_1.CountryCode.GE]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.n)),
[country_1.CountryCode.GI]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(15, structurePart_1.CharacterType.c)),
[country_1.CountryCode.GL]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(10, structurePart_1.CharacterType.n)),
[country_1.CountryCode.GQ]: BbanStructure.bbanFR,
[country_1.CountryCode.GR]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.c)),
[country_1.CountryCode.GT]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.currencyType(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountType(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.c)),
[country_1.CountryCode.HR]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(7, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(10, structurePart_1.CharacterType.n)),
[country_1.CountryCode.HN]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(20, structurePart_1.CharacterType.n)),
[country_1.CountryCode.HU]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCheckDigit(1, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(15, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(1, structurePart_1.CharacterType.n)),
[country_1.CountryCode.IE]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.branchCode(6, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(8, structurePart_1.CharacterType.n)),
[country_1.CountryCode.IL]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(13, structurePart_1.CharacterType.n)),
[country_1.CountryCode.IQ]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.branchCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.n)),
[country_1.CountryCode.IR]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(19, structurePart_1.CharacterType.n)),
[country_1.CountryCode.IS]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(6, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.identificationNumber(10, structurePart_1.CharacterType.n)),
[country_1.CountryCode.IT]: new BbanStructure(structurePart_1.BbanStructurePart.nationalCheckDigit(1, structurePart_1.CharacterType.a, nationalIT), structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.c)),
[country_1.CountryCode.JO]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(18, structurePart_1.CharacterType.c)),
[country_1.CountryCode.KM]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(23, structurePart_1.CharacterType.n)),
[country_1.CountryCode.KW]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(22, structurePart_1.CharacterType.c)),
[country_1.CountryCode.KZ]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(13, structurePart_1.CharacterType.c)),
[country_1.CountryCode.LB]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(20, structurePart_1.CharacterType.c)),
[country_1.CountryCode.LC]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(24, structurePart_1.CharacterType.n)),
[country_1.CountryCode.LI]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.c)),
[country_1.CountryCode.LT]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.n)),
[country_1.CountryCode.LU]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(13, structurePart_1.CharacterType.c)),
[country_1.CountryCode.LV]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(13, structurePart_1.CharacterType.c)),
[country_1.CountryCode.LY]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(15, structurePart_1.CharacterType.n)),
[country_1.CountryCode.MA]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(24, structurePart_1.CharacterType.n)),
[country_1.CountryCode.MC]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n, nationalFR)),
[country_1.CountryCode.MD]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.accountNumber(18, structurePart_1.CharacterType.c)),
[country_1.CountryCode.ME]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(13, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
[country_1.CountryCode.MG]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
[country_1.CountryCode.MK]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(10, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
[country_1.CountryCode.ML]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(1, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(25, structurePart_1.CharacterType.n)),
[country_1.CountryCode.MN]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.n)),
[country_1.CountryCode.MR]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
[country_1.CountryCode.MT]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(18, structurePart_1.CharacterType.c)),
[country_1.CountryCode.MU]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(6, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.branchCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.accountType(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.currencyType(3, structurePart_1.CharacterType.a)),
[country_1.CountryCode.MZ]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(21, structurePart_1.CharacterType.n)),
[country_1.CountryCode.NE]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(22, structurePart_1.CharacterType.n)),
[country_1.CountryCode.NI]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(20, structurePart_1.CharacterType.n)),
[country_1.CountryCode.NL]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(10, structurePart_1.CharacterType.n)),
[country_1.CountryCode.NO]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(6, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(1, structurePart_1.CharacterType.n, nationalNO)),
[country_1.CountryCode.OM]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.n)),
[country_1.CountryCode.PK]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.c)),
[country_1.CountryCode.PL]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(1, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.n)),
[country_1.CountryCode.PS]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(21, structurePart_1.CharacterType.c)),
[country_1.CountryCode.PT]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(11, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n, nationalPT)),
[country_1.CountryCode.QA]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(21, structurePart_1.CharacterType.c)),
[country_1.CountryCode.RO]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.c)),
[country_1.CountryCode.RS]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(13, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
[country_1.CountryCode.RU]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(9, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(15, structurePart_1.CharacterType.c)),
[country_1.CountryCode.SA]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(18, structurePart_1.CharacterType.c)),
[country_1.CountryCode.SC]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.branchCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCheckDigit(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.currencyType(3, structurePart_1.CharacterType.a)),
[country_1.CountryCode.SD]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.n)),
[country_1.CountryCode.SE]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(1, structurePart_1.CharacterType.n)),
[country_1.CountryCode.SI]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(8, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
[country_1.CountryCode.SK]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.n)),
[country_1.CountryCode.SM]: new BbanStructure(structurePart_1.BbanStructurePart.nationalCheckDigit(1, structurePart_1.CharacterType.a, nationalIT), structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.c)),
[country_1.CountryCode.SN]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.branchCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(14, structurePart_1.CharacterType.n)),
[country_1.CountryCode.SO]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(12, structurePart_1.CharacterType.n)),
[country_1.CountryCode.ST]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(13, structurePart_1.CharacterType.n)),
[country_1.CountryCode.SV]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.branchCode(4, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.n)),
[country_1.CountryCode.TG]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(22, structurePart_1.CharacterType.n)),
[country_1.CountryCode.TD]: new BbanStructure(structurePart_1.BbanStructurePart.accountNumber(23, structurePart_1.CharacterType.n)),
[country_1.CountryCode.TL]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(14, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
[country_1.CountryCode.TN]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(3, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(13, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.c)),
[country_1.CountryCode.TR]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(5, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(1, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.c)),
[country_1.CountryCode.UA]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(6, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(19, structurePart_1.CharacterType.n)),
[country_1.CountryCode.VA]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(3, structurePart_1.CharacterType.c), structurePart_1.BbanStructurePart.accountNumber(15, structurePart_1.CharacterType.n)),
[country_1.CountryCode.VG]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(4, structurePart_1.CharacterType.a), structurePart_1.BbanStructurePart.accountNumber(16, structurePart_1.CharacterType.n)),
[country_1.CountryCode.XK]: new BbanStructure(structurePart_1.BbanStructurePart.bankCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.branchCode(2, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.accountNumber(10, structurePart_1.CharacterType.n), structurePart_1.BbanStructurePart.nationalCheckDigit(2, structurePart_1.CharacterType.n)),
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJhblN0cnVjdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYmFuU3RydWN0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUE2RTtBQUM3RSx1Q0FBd0M7QUFDeEMsNkNBQXlGO0FBS3pGLFNBQVMsS0FBSyxDQUFDLEtBQWEsRUFBRSxPQUFpQjtJQUM3QyxPQUFPLENBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FDckgsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFZLEVBQUUsU0FBd0I7SUFDeEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxNQUFNLFFBQVEsR0FBRyxDQUFDLHdCQUFRLENBQUMsU0FBUyxFQUFFLHdCQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXJILFNBQVMsSUFBSSxDQUFDLENBQVM7UUFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osT0FBTyxDQUFDLENBQUM7U0FDVjthQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLHdCQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUUzRixPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLENBQUM7QUFLRCxTQUFTLFVBQVUsQ0FBQyxJQUFZLEVBQUUsU0FBd0I7SUFDeEQsTUFBTSxZQUFZLEdBQUc7UUFDbkIsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHO1FBQ2IsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHO1FBQ2QsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHO1FBQ2QsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHO1FBQ2QsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHO1FBQ2QsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHO1FBQ2QsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHO1FBQ2QsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHO1FBQ2QsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHO0tBQ2YsQ0FBQztJQUNGLElBQUksUUFBUSxHQUNWLENBQUMsd0JBQVEsQ0FBQyxTQUFTLEVBQUUsd0JBQVEsQ0FBQyxXQUFXLEVBQUUsd0JBQVEsQ0FBQyxjQUFjLENBQUM7U0FDaEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUduRyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTlGLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQVksRUFBRSxTQUF3QjtJQUN4RCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUs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