File: //home/arjun/projects/env/lib/python3.10/site-packages/faker/providers/ssn/it_IT/__init__.py
"""it_IT ssn provider (yields italian fiscal codes)"""
import unicodedata
from string import ascii_uppercase, digits
from .. import Provider as SsnProvider
ALPHABET = ascii_uppercase
ALPHANUMERICS = sorted(digits + ascii_uppercase)
ALPHANUMERICS_DICT = {char: index for index, char in enumerate(ALPHANUMERICS)}
MONTHS_LIST = ("A", "B", "C", "D", "E", "H", "L", "M", "P", "R", "S", "T")
VOWELS = "AEIOU"
CONSONANTS = [letter for letter in ALPHABET if letter not in VOWELS]
MUNICIPALITIES_LIST = (
"A001",
"A004",
"A005",
"A006",
"A007",
"A008",
"A010",
"A013",
"A014",
"A015",
"A016",
"A017",
"A018",
"A019",
"A020",
"A022",
"A023",
"A024",
"A025",
"A026",
"A027",
"A028",
"A029",
"A032",
"A033",
"A034",
"A035",
"A038",
"A039",
"A040",
"A041",
"A043",
"A044",
"A045",
"A047",
"A048",
"A049",
"A050",
"A051",
"A052",
"A053",
"A054",
"A055",
"A056",
"A057",
"A058",
"A059",
"A060",
"A061",
"A062",
"A064",
"A065",
"A067",
"A068",
"A069",
"A070",
"A071",
"A072",
"A074",
"A075",
"A076",
"A077",
"A080",
"A081",
"A082",
"A083",
"A084",
"A085",
"A087",
"A088",
"A089",
"A091",
"A092",
"A093",
"A094",
"A096",
"A097",
"A098",
"A100",
"A101",
"A102",
"A103",
"A105",
"A106",
"A107",
"A108",
"A109",
"A110",
"A111",
"A112",
"A113",
"A115",
"A116",
"A117",
"A118",
"A119",
"A120",
"A121",
"A122",
"A123",
"A124",
"A125",
"A126",
"A127",
"A128",
"A129",
"A130",
"A131",
"A132",
"A134",
"A135",
"A137",
"A138",
"A139",
"A143",
"A145",
"A146",
"A149",
"A150",
"A153",
"A154",
"A155",
"A157",
"A158",
"A159",
"A160",
"A161",
"A162",
"A163",
"A164",
"A165",
"A166",
"A167",
"A171",
"A172",
"A173",
"A175",
"A176",
"A177",
"A178",
"A179",
"A180",
"A181",
"A182",
"A183",
"A184",
"A185",
"A186",
"A187",
"A188",
"A189",
"A191",
"A192",
"A193",
"A194",
"A195",
"A196",
"A197",
"A198",
"A200",
"A201",
"A202",
"A203",
"A204",
"A205",
"A206",
"A207",
"A208",
"A210",
"A214",
"A215",
"A216",
"A217",
"A218",
"A220",
"A221",
"A222",
"A223",
"A224",
"A225",
"A226",
"A227",
"A228",
"A229",
"A230",
"A231",
"A233",
"A234",
"A235",
"A236",
"A237",
"A238",
"A239",
"A240",
"A241",
"A242",
"A243",
"A244",
"A245",
"A246",
"A249",
"A251",
"A252",
"A253",
"A254",
"A255",
"A256",
"A257",
"A258",
"A259",
"A261",
"A262",
"A263",
"A264",
"A265",
"A266",
"A267",
"A268",
"A269",
"A270",
"A271",
"A272",
"A273",
"A274",
"A275",
"A278",
"A280",
"A281",
"A282",
"A283",
"A284",
"A285",
"A286",
"A287",
"A288",
"A290",
"A291",
"A292",
"A293",
"A294",
"A295",
"A296",
"A297",
"A299",
"A300",
"A301",
"A302",
"A303",
"A304",
"A305",
"A306",
"A308",
"A309",
"A310",
"A312",
"A313",
"A314",
"A315",
"A317",
"A318",
"A319",
"A320",
"A321",
"A323",
"A324",
"A325",
"A326",
"A327",
"A328",
"A329",
"A330",
"A332",
"A333",
"A334",
"A335",
"A337",
"A338",
"A339",
"A340",
"A341",
"A343",
"A344",
"A345",
"A346",
"A347",
"A348",
"A350",
"A351",
"A352",
"A354",
"A355",
"A357",
"A358",
"A359",
"A360",
"A363",
"A365",
"A366",
"A367",
"A368",
"A369",
"A370",
"A371",
"A372",
"A373",
"A374",
"A375",
"A376",
"A377",
"A379",
"A380",
"A382",
"A383",
"A385",
"A386",
"A387",
"A388",
"A389",
"A390",
"A391",
"A392",
"A393",
"A394",
"A396",
"A397",
"A398",
"A399",
"A400",
"A401",
"A402",
"A403",
"A405",
"A407",
"A409",
"A412",
"A413",
"A414",
"A415",
"A418",
"A419",
"A421",
"A422",
"A424",
"A425",
"A427",
"A429",
"A430",
"A431",
"A432",
"A433",
"A434",
"A435",
"A436",
"A437",
"A438",
"A439",
"A440",
"A441",
"A443",
"A444",
"A445",
"A446",
"A447",
"A448",
"A449",
"A451",
"A452",
"A453",
"A454",
"A455",
"A458",
"A459",
"A460",
"A461",
"A462",
"A463",
"A464",
"A465",
"A466",
"A467",
"A468",
"A470",
"A471",
"A472",
"A473",
"A474",
"A475",
"A476",
"A477",
"A478",
"A479",
"A480",
"A481",
"A482",
"A484",
"A485",
"A486",
"A487",
"A488",
"A489",
"A490",
"A491",
"A492",
"A494",
"A495",
"A496",
"A497",
"A499",
"A501",
"A502",
"A503",
"A506",
"A507",
"A508",
"A509",
"A511",
"A512",
"A514",
"A515",
"A516",
"A517",
"A518",
"A519",
"A520",
"A521",
"A522",
"A523",
"A525",
"A526",
"A527",
"A528",
"A529",
"A530",
"A531",
"A532",
"A533",
"A534",
"A535",
"A536",
"A537",
"A538",
"A539",
"A540",
"A541",
"A542",
"A544",
"A546",
"A547",
"A550",
"A551",
"A552",
"A553",
"A555",
"A557",
"A560",
"A561",
"A562",
"A564",
"A565",
"A566",
"A567",
"A568",
"A569",
"A570",
"A571",
"A572",
"A573",
"A574",
"A575",
"A576",
"A577",
"A578",
"A579",
"A580",
"A581",
"A584",
"A586",
"A587",
"A588",
"A589",
"A590",
"A591",
"A592",
"A593",
"A594",
"A597",
"A599",
"A600",
"A601",
"A603",
"A604",
"A605",
"A606",
"A607",
"A609",
"A610",
"A612",
"A613",
"A614",
"A615",
"A616",
"A617",
"A618",
"A619",
"A621",
"A625",
"A626",
"A628",
"A629",
"A630",
"A631",
"A632",
"A634",
"A635",
"A637",
"A638",
"A640",
"A643",
"A645",
"A646",
"A647",
"A650",
"A651",
"A652",
"A653",
"A655",
"A656",
"A657",
"A658",
"A660",
"A661",
"A662",
"A663",
"A664",
"A665",
"A666",
"A667",
"A668",
"A669",
"A670",
"A671",
"A673",
"A674",
"A676",
"A677",
"A678",
"A681",
"A683",
"A684",
"A686",
"A687",
"A689",
"A690",
"A691",
"A692",
"A694",
"A696",
"A697",
"A698",
"A699",
"A700",
"A701",
"A702",
"A703",
"A704",
"A705",
"A706",
"A707",
"A708",
"A709",
"A710",
"A712",
"A713",
"A714",
"A716",
"A717",
"A718",
"A719",
"A720",
"A721",
"A722",
"A725",
"A728",
"A729",
"A730",
"A731",
"A732",
"A733",
"A734",
"A735",
"A736",
"A737",
"A738",
"A739",
"A740",
"A741",
"A742",
"A743",
"A745",
"A746",
"A747",
"A749",
"A750",
"A751",
"A752",
"A755",
"A756",
"A757",
"A759",
"A760",
"A761",
"A762",
"A763",
"A764",
"A765",
"A766",
"A768",
"A769",
"A770",
"A771",
"A772",
"A773",
"A774",
"A776",
"A777",
"A778",
"A779",
"A780",
"A781",
"A782",
"A783",
"A784",
"A785",
"A786",
"A787",
"A788",
"A789",
"A791",
"A792",
"A793",
"A794",
"A795",
"A796",
"A798",
"A799",
"A801",
"A802",
"A804",
"A805",
"A809",
"A810",
"A811",
"A812",
"A813",
"A815",
"A816",
"A817",
"A818",
"A819",
"A820",
"A821",
"A823",
"A825",
"A826",
"A827",
"A831",
"A832",
"A834",
"A835",
"A836",
"A837",
"A841",
"A842",
"A843",
"A844",
"A845",
"A846",
"A847",
"A848",
"A849",
"A850",
"A851",
"A852",
"A853",
"A854",
"A855",
"A856",
"A857",
"A859",
"A861",
"A863",
"A864",
"A870",
"A872",
"A874",
"A876",
"A877",
"A878",
"A880",
"A881",
"A882",
"A883",
"A884",
"A885",
"A887",
"A889",
"A891",
"A892",
"A893",
"A894",
"A895",
"A896",
"A897",
"A898",
"A902",
"A903",
"A904",
"A905",
"A906",
"A909",
"A910",
"A911",
"A912",
"A914",
"A916",
"A918",
"A919",
"A920",
"A922",
"A925",
"A929",
"A930",
"A931",
"A932",
"A937",
"A940",
"A941",
"A942",
"A944",
"A945",
"A946",
"A947",
"A948",
"A949",
"A950",
"A952",
"A953",
"A954",
"A955",
"A956",
"A957",
"A958",
"A959",
"A960",
"A961",
"A962",
"A963",
"A964",
"A965",
"A968",
"A970",
"A971",
"A972",
"A973",
"A975",
"A976",
"A977",
"A978",
"A979",
"A981",
"A982",
"A983",
"A984",
"A986",
"A987",
"A988",
"A989",
"A990",
"A991",
"A992",
"A993",
"A995",
"A996",
"A998",
"A999",
"B001",
"B002",
"B003",
"B005",
"B006",
"B007",
"B008",
"B009",
"B010",
"B012",
"B014",
"B015",
"B016",
"B017",
"B018",
"B019",
"B020",
"B021",
"B024",
"B025",
"B026",
"B028",
"B029",
"B030",
"B031",
"B033",
"B034",
"B035",
"B036",
"B037",
"B038",
"B040",
"B041",
"B042",
"B043",
"B044",
"B046",
"B048",
"B049",
"B051",
"B054",
"B055",
"B056",
"B057",
"B058",
"B061",
"B062",
"B063",
"B064",
"B067",
"B068",
"B069",
"B070",
"B071",
"B073",
"B075",
"B076",
"B077",
"B079",
"B080",
"B081",
"B082",
"B083",
"B084",
"B085",
"B086",
"B088",
"B091",
"B094",
"B097",
"B098",
"B099",
"B100",
"B101",
"B102",
"B104",
"B105",
"B106",
"B107",
"B109",
"B110",
"B111",
"B112",
"B114",
"B115",
"B116",
"B117",
"B118",
"B120",
"B121",
"B123",
"B124",
"B126",
"B128",
"B129",
"B131",
"B132",
"B134",
"B137",
"B138",
"B141",
"B142",
"B143",
"B144",
"B145",
"B149",
"B150",
"B152",
"B153",
"B154",
"B156",
"B157",
"B158",
"B159",
"B160",
"B161",
"B162",
"B166",
"B167",
"B169",
"B171",
"B172",
"B173",
"B175",
"B176",
"B178",
"B179",
"B180",
"B181",
"B182",
"B183",
"B184",
"B187",
"B188",
"B191",
"B192",
"B193",
"B194",
"B195",
"B196",
"B197",
"B198",
"B200",
"B201",
"B202",
"B203",
"B204",
"B205",
"B207",
"B209",
"B212",
"B213",
"B214",
"B215",
"B216",
"B217",
"B218",
"B219",
"B220",
"B221",
"B223",
"B225",
"B227",
"B228",
"B229",
"B230",
"B232",
"B234",
"B235",
"B236",
"B237",
"B238",
"B239",
"B240",
"B242",
"B243",
"B246",
"B247",
"B248",
"B249",
"B250",
"B251",
"B255",
"B256",
"B258",
"B259",
"B261",
"B262",
"B264",
"B265",
"B266",
"B267",
"B268",
"B269",
"B270",
"B272",
"B274",
"B275",
"B276",
"B278",
"B279",
"B280",
"B281",
"B282",
"B284",
"B285",
"B286",
"B287",
"B288",
"B289",
"B292",
"B293",
"B294",
"B295",
"B296",
"B297",
"B300",
"B301",
"B302",
"B303",
"B304",
"B305",
"B306",
"B309",
"B310",
"B311",
"B312",
"B313",
"B314",
"B315",
"B317",
"B319",
"B326",
"B328",
"B332",
"B335",
"B345",
"B346",
"B349",
"B350",
"B351",
"B352",
"B354",
"B355",
"B357",
"B358",
"B361",
"B362",
"B364",
"B365",
"B366",
"B367",
"B368",
"B369",
"B371",
"B374",
"B375",
"B376",
"B377",
"B378",
"B379",
"B380",
"B381",
"B382",
"B383",
"B384",
"B385",
"B387",
"B388",
"B389",
"B390",
"B391",
"B392",
"B393",
"B394",
"B395",
"B396",
"B397",
"B398",
"B399",
"B400",
"B402",
"B403",
"B404",
"B405",
"B406",
"B408",
"B409",
"B410",
"B413",
"B415",
"B416",
"B417",
"B418",
"B419",
"B423",
"B424",
"B425",
"B426",
"B427",
"B428",
"B429",
"B430",
"B431",
"B432",
"B433",
"B434",
"B435",
"B436",
"B437",
"B439",
"B440",
"B441",
"B442",
"B443",
"B444",
"B445",
"B446",
"B447",
"B448",
"B450",
"B452",
"B453",
"B455",
"B457",
"B460",
"B461",
"B462",
"B463",
"B465",
"B466",
"B467",
"B468",
"B469",
"B470",
"B471",
"B472",
"B473",
"B474",
"B476",
"B477",
"B481",
"B482",
"B483",
"B484",
"B485",
"B486",
"B490",
"B491",
"B492",
"B493",
"B494",
"B496",
"B497",
"B498",
"B499",
"B500",
"B501",
"B502",
"B504",
"B505",
"B506",
"B507",
"B509",
"B510",
"B511",
"B512",
"B513",
"B514",
"B515",
"B516",
"B519",
"B520",
"B521",
"B522",
"B524",
"B525",
"B526",
"B527",
"B528",
"B529",
"B530",
"B531",
"B532",
"B533",
"B534",
"B535",
"B536",
"B537",
"B538",
"B539",
"B540",
"B541",
"B542",
"B543",
"B544",
"B546",
"B549",
"B550",
"B551",
"B553",
"B554",
"B555",
"B556",
"B557",
"B559",
"B561",
"B562",
"B563",
"B564",
"B565",
"B566",
"B567",
"B569",
"B570",
"B572",
"B573",
"B574",
"B576",
"B577",
"B578",
"B579",
"B580",
"B581",
"B582",
"B584",
"B586",
"B587",
"B588",
"B589",
"B590",
"B591",
"B592",
"B593",
"B594",
"B595",
"B597",
"B598",
"B602",
"B603",
"B604",
"B605",
"B606",
"B607",
"B608",
"B609",
"B610",
"B612",
"B613",
"B615",
"B616",
"B617",
"B618",
"B619",
"B620",
"B621",
"B624",
"B626",
"B627",
"B628",
"B629",
"B630",
"B631",
"B632",
"B633",
"B634",
"B635",
"B636",
"B637",
"B639",
"B640",
"B641",
"B642",
"B643",
"B644",
"B645",
"B646",
"B647",
"B648",
"B649",
"B650",
"B651",
"B653",
"B655",
"B656",
"B658",
"B660",
"B661",
"B662",
"B663",
"B664",
"B666",
"B667",
"B669",
"B670",
"B671",
"B672",
"B674",
"B675",
"B676",
"B677",
"B678",
"B679",
"B680",
"B681",
"B682",
"B684",
"B685",
"B686",
"B687",
"B688",
"B689",
"B690",
"B691",
"B692",
"B693",
"B694",
"B695",
"B696",
"B697",
"B698",
"B701",
"B703",
"B704",
"B705",
"B706",
"B707",
"B708",
"B709",
"B710",
"B711",
"B712",
"B715",
"B716",
"B717",
"B718",
"B719",
"B720",
"B722",
"B724",
"B725",
"B726",
"B727",
"B729",
"B730",
"B731",
"B732",
"B733",
"B734",
"B735",
"B736",
"B738",
"B740",
"B741",
"B742",
"B743",
"B744",
"B745",
"B748",
"B749",
"B752",
"B754",
"B755",
"B756",
"B758",
"B759",
"B760",
"B762",
"B763",
"B765",
"B766",
"B767",
"B768",
"B769",
"B771",
"B772",
"B774",
"B776",
"B777",
"B778",
"B779",
"B780",
"B781",
"B782",
"B783",
"B784",
"B785",
"B787",
"B788",
"B789",
"B790",
"B791",
"B792",
"B794",
"B795",
"B796",
"B798",
"B799",
"B801",
"B802",
"B803",
"B804",
"B805",
"B807",
"B808",
"B809",
"B810",
"B812",
"B813",
"B816",
"B817",
"B818",
"B819",
"B820",
"B822",
"B823",
"B824",
"B825",
"B826",
"B827",
"B828",
"B829",
"B830",
"B832",
"B835",
"B836",
"B838",
"B839",
"B840",
"B841",
"B842",
"B844",
"B845",
"B846",
"B847",
"B848",
"B850",
"B851",
"B853",
"B854",
"B856",
"B857",
"B858",
"B859",
"B860",
"B861",
"B862",
"B864",
"B865",
"B866",
"B867",
"B868",
"B869",
"B870",
"B871",
"B872",
"B873",
"B875",
"B876",
"B877",
"B878",
"B879",
"B880",
"B881",
"B882",
"B883",
"B885",
"B886",
"B887",
"B888",
"B889",
"B890",
"B891",
"B892",
"B893",
"B894",
"B895",
"B896",
"B897",
"B898",
"B899",
"B900",
"B901",
"B902",
"B903",
"B904",
"B905",
"B906",
"B907",
"B910",
"B911",
"B912",
"B914",
"B915",
"B916",
"B917",
"B918",
"B919",
"B920",
"B921",
"B922",
"B923",
"B924",
"B925",
"B927",
"B928",
"B929",
"B932",
"B933",
"B934",
"B935",
"B936",
"B937",
"B938",
"B939",
"B940",
"B941",
"B943",
"B945",
"B946",
"B947",
"B948",
"B949",
"B950",
"B952",
"B953",
"B954",
"B955",
"B956",
"B958",
"B959",
"B960",
"B961",
"B962",
"B963",
"B965",
"B966",
"B967",
"B968",
"B969",
"B971",
"B974",
"B977",
"B978",
"B979",
"B980",
"B982",
"B984",
"B985",
"B987",
"B988",
"B989",
"B990",
"B991",
"B993",
"B994",
"B996",
"B997",
"B998",
"B999",
"C002",
"C003",
"C004",
"C006",
"C007",
"C013",
"C014",
"C020",
"C022",
"C024",
"C027",
"C030",
"C033",
"C034",
"C037",
"C038",
"C040",
"C041",
"C044",
"C045",
"C046",
"C047",
"C048",
"C049",
"C050",
"C051",
"C052",
"C053",
"C055",
"C056",
"C057",
"C058",
"C059",
"C060",
"C062",
"C063",
"C064",
"C065",
"C066",
"C067",
"C069",
"C070",
"C072",
"C073",
"C074",
"C075",
"C076",
"C078",
"C079",
"C080",
"C081",
"C082",
"C083",
"C085",
"C086",
"C089",
"C090",
"C091",
"C093",
"C094",
"C096",
"C097",
"C098",
"C100",
"C101",
"C102",
"C104",
"C105",
"C106",
"C107",
"C108",
"C110",
"C111",
"C113",
"C114",
"C115",
"C116",
"C117",
"C118",
"C119",
"C120",
"C121",
"C122",
"C123",
"C125",
"C126",
"C127",
"C128",
"C129",
"C130",
"C133",
"C134",
"C135",
"C136",
"C137",
"C139",
"C141",
"C142",
"C143",
"C145",
"C147",
"C148",
"C149",
"C152",
"C153",
"C154",
"C155",
"C156",
"C157",
"C158",
"C160",
"C161",
"C162",
"C165",
"C166",
"C167",
"C169",
"C172",
"C173",
"C174",
"C175",
"C176",
"C177",
"C178",
"C181",
"C183",
"C184",
"C185",
"C186",
"C187",
"C188",
"C189",
"C190",
"C194",
"C195",
"C197",
"C198",
"C199",
"C200",
"C201",
"C202",
"C203",
"C204",
"C205",
"C206",
"C207",
"C208",
"C209",
"C210",
"C211",
"C213",
"C214",
"C215",
"C216",
"C217",
"C218",
"C219",
"C220",
"C222",
"C223",
"C224",
"C225",
"C226",
"C227",
"C228",
"C229",
"C230",
"C231",
"C232",
"C235",
"C236",
"C237",
"C240",
"C241",
"C242",
"C243",
"C244",
"C245",
"C246",
"C247",
"C248",
"C250",
"C251",
"C252",
"C253",
"C254",
"C255",
"C259",
"C261",
"C262",
"C263",
"C265",
"C266",
"C267",
"C268",
"C269",
"C270",
"C271",
"C272",
"C273",
"C274",
"C275",
"C276",
"C278",
"C279",
"C280",
"C282",
"C283",
"C284",
"C285",
"C286",
"C287",
"C288",
"C289",
"C290",
"C291",
"C292",
"C293",
"C294",
"C296",
"C297",
"C298",
"C300",
"C301",
"C302",
"C303",
"C304",
"C306",
"C307",
"C308",
"C309",
"C310",
"C311",
"C312",
"C313",
"C314",
"C315",
"C316",
"C317",
"C318",
"C319",
"C321",
"C322",
"C323",
"C324",
"C325",
"C327",
"C329",
"C330",
"C331",
"C332",
"C334",
"C335",
"C336",
"C337",
"C338",
"C339",
"C340",
"C341",
"C342",
"C343",
"C344",
"C345",
"C346",
"C347",
"C348",
"C349",
"C351",
"C352",
"C353",
"C354",
"C356",
"C357",
"C359",
"C360",
"C361",
"C363",
"C364",
"C365",
"C369",
"C370",
"C372",
"C375",
"C376",
"C377",
"C378",
"C380",
"C381",
"C382",
"C383",
"C384",
"C385",
"C387",
"C388",
"C389",
"C390",
"C392",
"C393",
"C394",
"C395",
"C396",
"C398",
"C400",
"C404",
"C405",
"C406",
"C407",
"C408",
"C409",
"C410",
"C412",
"C413",
"C414",
"C415",
"C417",
"C418",
"C420",
"C421",
"C422",
"C424",
"C426",
"C428",
"C429",
"C430",
"C432",
"C435",
"C436",
"C437",
"C438",
"C439",
"C440",
"C441",
"C442",
"C443",
"C444",
"C446",
"C447",
"C448",
"C449",
"C453",
"C456",
"C457",
"C458",
"C459",
"C461",
"C463",
"C466",
"C469",
"C470",
"C471",
"C472",
"C474",
"C476",
"C478",
"C479",
"C480",
"C481",
"C482",
"C483",
"C484",
"C485",
"C486",
"C487",
"C488",
"C489",
"C492",
"C493",
"C494",
"C495",
"C496",
"C497",
"C498",
"C500",
"C501",
"C502",
"C503",
"C504",
"C505",
"C506",
"C507",
"C508",
"C509",
"C510",
"C511",
"C512",
"C513",
"C514",
"C515",
"C516",
"C517",
"C518",
"C520",
"C521",
"C523",
"C524",
"C525",
"C527",
"C528",
"C529",
"C530",
"C531",
"C532",
"C533",
"C534",
"C536",
"C537",
"C538",
"C539",
"C540",
"C541",
"C542",
"C543",
"C544",
"C545",
"C547",
"C548",
"C549",
"C550",
"C551",
"C552",
"C553",
"C554",
"C555",
"C556",
"C557",
"C558",
"C559",
"C560",
"C561",
"C563",
"C564",
"C565",
"C566",
"C567",
"C568",
"C569",
"C573",
"C574",
"C576",
"C577",
"C578",
"C580",
"C581",
"C582",
"C583",
"C584",
"C585",
"C587",
"C588",
"C589",
"C591",
"C593",
"C594",
"C595",
"C596",
"C598",
"C599",
"C600",
"C604",
"C605",
"C606",
"C608",
"C609",
"C610",
"C612",
"C613",
"C614",
"C615",
"C616",
"C618",
"C619",
"C620",
"C621",
"C623",
"C624",
"C625",
"C627",
"C628",
"C629",
"C630",
"C631",
"C632",
"C633",
"C634",
"C635",
"C637",
"C638",
"C639",
"C640",
"C641",
"C648",
"C649",
"C650",
"C651",
"C652",
"C653",
"C654",
"C655",
"C656",
"C657",
"C658",
"C659",
"C660",
"C661",
"C662",
"C663",
"C665",
"C668",
"C669",
"C670",
"C672",
"C673",
"C674",
"C675",
"C676",
"C677",
"C678",
"C679",
"C680",
"C681",
"C684",
"C685",
"C686",
"C689",
"C691",
"C695",
"C696",
"C697",
"C698",
"C699",
"C700",
"C701",
"C702",
"C703",
"C704",
"C705",
"C707",
"C708",
"C709",
"C710",
"C711",
"C712",
"C713",
"C714",
"C715",
"C716",
"C717",
"C718",
"C719",
"C722",
"C723",
"C724",
"C725",
"C726",
"C727",
"C728",
"C729",
"C730",
"C732",
"C733",
"C735",
"C738",
"C739",
"C740",
"C741",
"C742",
"C743",
"C744",
"C745",
"C746",
"C747",
"C749",
"C750",
"C751",
"C752",
"C755",
"C756",
"C757",
"C758",
"C759",
"C760",
"C763",
"C764",
"C765",
"C766",
"C767",
"C768",
"C769",
"C770",
"C771",
"C772",
"C773",
"C774",
"C776",
"C777",
"C778",
"C779",
"C780",
"C781",
"C782",
"C783",
"C784",
"C785",
"C787",
"C789",
"C790",
"C791",
"C792",
"C793",
"C794",
"C795",
"C796",
"C800",
"C801",
"C803",
"C804",
"C806",
"C807",
"C810",
"C811",
"C812",
"C813",
"C814",
"C815",
"C816",
"C817",
"C818",
"C819",
"C820",
"C821",
"C823",
"C824",
"C826",
"C829",
"C835",
"C836",
"C838",
"C839",
"C841",
"C844",
"C845",
"C846",
"C847",
"C848",
"C850",
"C851",
"C852",
"C853",
"C854",
"C855",
"C856",
"C857",
"C858",
"C859",
"C860",
"C862",
"C864",
"C865",
"C866",
"C867",
"C868",
"C869",
"C870",
"C871",
"C872",
"C875",
"C876",
"C877",
"C878",
"C879",
"C880",
"C882",
"C883",
"C884",
"C885",
"C886",
"C888",
"C890",
"C893",
"C894",
"C895",
"C897",
"C900",
"C901",
"C902",
"C903",
"C904",
"C905",
"C908",
"C910",
"C911",
"C912",
"C914",
"C917",
"C918",
"C919",
"C920",
"C922",
"C925",
"C926",
"C927",
"C928",
"C929",
"C930",
"C931",
"C933",
"C934",
"C935",
"C936",
"C937",
"C938",
"C939",
"C940",
"C941",
"C943",
"C946",
"C948",
"C950",
"C951",
"C952",
"C954",
"C955",
"C956",
"C957",
"C958",
"C959",
"C960",
"C962",
"C963",
"C964",
"C968",
"C969",
"C971",
"C972",
"C973",
"C974",
"C975",
"C976",
"C977",
"C978",
"C979",
"C980",
"C982",
"C983",
"C984",
"C986",
"C987",
"C988",
"C990",
"C991",
"C992",
"C993",
"C995",
"C996",
"C998",
"C999",
"D003",
"D004",
"D006",
"D007",
"D008",
"D009",
"D010",
"D011",
"D012",
"D013",
"D014",
"D015",
"D016",
"D018",
"D019",
"D020",
"D021",
"D022",
"D024",
"D026",
"D027",
"D028",
"D029",
"D030",
"D033",
"D037",
"D038",
"D040",
"D041",
"D042",
"D043",
"D044",
"D045",
"D046",
"D048",
"D049",
"D050",
"D051",
"D052",
"D054",
"D056",
"D057",
"D058",
"D061",
"D062",
"D064",
"D065",
"D066",
"D068",
"D072",
"D075",
"D076",
"D077",
"D078",
"D079",
"D081",
"D082",
"D085",
"D086",
"D087",
"D088",
"D089",
"D092",
"D093",
"D094",
"D095",
"D096",
"D099",
"D100",
"D101",
"D102",
"D103",
"D105",
"D107",
"D108",
"D109",
"D110",
"D111",
"D112",
"D113",
"D114",
"D117",
"D118",
"D119",
"D120",
"D121",
"D122",
"D123",
"D124",
"D126",
"D127",
"D128",
"D131",
"D132",
"D133",
"D134",
"D136",
"D137",
"D139",
"D141",
"D142",
"D143",
"D144",
"D145",
"D147",
"D149",
"D150",
"D151",
"D154",
"D156",
"D159",
"D161",
"D162",
"D165",
"D166",
"D168",
"D170",
"D171",
"D172",
"D175",
"D177",
"D179",
"D180",
"D181",
"D184",
"D185",
"D186",
"D187",
"D188",
"D189",
"D192",
"D193",
"D195",
"D196",
"D197",
"D198",
"D199",
"D200",
"D201",
"D202",
"D203",
"D204",
"D205",
"D207",
"D208",
"D209",
"D210",
"D211",
"D214",
"D216",
"D217",
"D218",
"D219",
"D221",
"D222",
"D223",
"D226",
"D227",
"D228",
"D229",
"D230",
"D231",
"D232",
"D233",
"D234",
"D236",
"D237",
"D238",
"D239",
"D244",
"D245",
"D246",
"D247",
"D251",
"D253",
"D255",
"D256",
"D257",
"D258",
"D259",
"D260",
"D261",
"D264",
"D265",
"D266",
"D267",
"D268",
"D269",
"D270",
"D271",
"D272",
"D273",
"D277",
"D278",
"D279",
"D280",
"D281",
"D284",
"D286",
"D287",
"D289",
"D290",
"D291",
"D292",
"D293",
"D296",
"D297",
"D298",
"D299",
"D300",
"D303",
"D304",
"D305",
"D309",
"D310",
"D311",
"D312",
"D314",
"D315",
"D316",
"D317",
"D318",
"D319",
"D321",
"D323",
"D324",
"D325",
"D327",
"D328",
"D329",
"D330",
"D331",
"D332",
"D333",
"D334",
"D338",
"D339",
"D341",
"D344",
"D345",
"D346",
"D347",
"D348",
"D350",
"D351",
"D352",
"D355",
"D356",
"D357",
"D358",
"D360",
"D361",
"D364",
"D365",
"D366",
"D367",
"D371",
"D372",
"D373",
"D374",
"D376",
"D377",
"D379",
"D380",
"D383",
"D384",
"D385",
"D386",
"D388",
"D390",
"D391",
"D392",
"D394",
"D395",
"D398",
"D399",
"D401",
"D402",
"D403",
"D406",
"D407",
"D408",
"D410",
"D411",
"D412",
"D414",
"D415",
"D416",
"D419",
"D420",
"D421",
"D422",
"D423",
"D424",
"D426",
"D428",
"D429",
"D430",
"D431",
"D433",
"D434",
"D436",
"D440",
"D441",
"D442",
"D443",
"D444",
"D445",
"D447",
"D450",
"D451",
"D452",
"D453",
"D454",
"D455",
"D456",
"D458",
"D459",
"D461",
"D462",
"D463",
"D464",
"D465",
"D467",
"D468",
"D469",
"D470",
"D471",
"D472",
"D473",
"D474",
"D475",
"D476",
"D477",
"D480",
"D482",
"D483",
"D484",
"D486",
"D487",
"D488",
"D489",
"D490",
"D491",
"D492",
"D493",
"D494",
"D495",
"D496",
"D497",
"D499",
"D501",
"D502",
"D503",
"D504",
"D505",
"D508",
"D509",
"D510",
"D511",
"D512",
"D513",
"D514",
"D518",
"D520",
"D522",
"D523",
"D524",
"D526",
"D527",
"D528",
"D530",
"D531",
"D532",
"D537",
"D538",
"D539",
"D540",
"D541",
"D542",
"D543",
"D544",
"D545",
"D546",
"D547",
"D548",
"D549",
"D550",
"D551",
"D552",
"D553",
"D554",
"D555",
"D557",
"D559",
"D560",
"D561",
"D562",
"D564",
"D565",
"D566",
"D567",
"D568",
"D569",
"D570",
"D571",
"D573",
"D574",
"D575",
"D576",
"D577",
"D578",
"D579",
"D582",
"D585",
"D586",
"D587",
"D588",
"D589",
"D590",
"D591",
"D592",
"D593",
"D594",
"D595",
"D596",
"D597",
"D599",
"D600",
"D604",
"D605",
"D606",
"D607",
"D608",
"D611",
"D612",
"D613",
"D614",
"D615",
"D617",
"D619",
"D621",
"D622",
"D623",
"D624",
"D628",
"D629",
"D630",
"D634",
"D635",
"D636",
"D637",
"D638",
"D639",
"D640",
"D641",
"D643",
"D644",
"D645",
"D646",
"D649",
"D650",
"D651",
"D652",
"D653",
"D654",
"D655",
"D656",
"D660",
"D661",
"D662",
"D665",
"D666",
"D667",
"D668",
"D670",
"D671",
"D672",
"D673",
"D674",
"D675",
"D676",
"D677",
"D678",
"D679",
"D680",
"D681",
"D682",
"D683",
"D684",
"D685",
"D686",
"D688",
"D689",
"D690",
"D691",
"D693",
"D694",
"D695",
"D696",
"D697",
"D700",
"D701",
"D702",
"D703",
"D704",
"D705",
"D706",
"D707",
"D708",
"D709",
"D710",
"D711",
"D712",
"D714",
"D715",
"D717",
"D718",
"D719",
"D720",
"D725",
"D727",
"D728",
"D730",
"D731",
"D732",
"D733",
"D734",
"D735",
"D736",
"D737",
"D738",
"D740",
"D741",
"D742",
"D744",
"D745",
"D746",
"D748",
"D749",
"D750",
"D751",
"D752",
"D754",
"D755",
"D756",
"D757",
"D758",
"D759",
"D760",
"D761",
"D762",
"D763",
"D764",
"D765",
"D766",
"D767",
"D768",
"D769",
"D770",
"D771",
"D773",
"D774",
"D775",
"D776",
"D777",
"D780",
"D781",
"D782",
"D783",
"D784",
"D785",
"D786",
"D787",
"D788",
"D789",
"D790",
"D791",
"D793",
"D794",
"D796",
"D797",
"D798",
"D799",
"D801",
"D802",
"D803",
"D804",
"D805",
"D807",
"D808",
"D810",
"D811",
"D812",
"D813",
"D814",
"D815",
"D817",
"D818",
"D819",
"D821",
"D823",
"D824",
"D825",
"D826",
"D827",
"D828",
"D829",
"D830",
"D832",
"D834",
"D835",
"D836",
"D839",
"D841",
"D842",
"D843",
"D844",
"D845",
"D847",
"D848",
"D849",
"D850",
"D851",
"D852",
"D853",
"D854",
"D855",
"D856",
"D858",
"D859",
"D860",
"D861",
"D862",
"D863",
"D864",
"D865",
"D867",
"D868",
"D869",
"D870",
"D871",
"D872",
"D873",
"D874",
"D875",
"D876",
"D878",
"D879",
"D881",
"D882",
"D883",
"D884",
"D885",
"D886",
"D888",
"D889",
"D890",
"D891",
"D892",
"D894",
"D895",
"D896",
"D897",
"D898",
"D899",
"D901",
"D902",
"D903",
"D905",
"D906",
"D907",
"D909",
"D910",
"D911",
"D912",
"D913",
"D915",
"D917",
"D918",
"D920",
"D921",
"D923",
"D924",
"D925",
"D926",
"D927",
"D928",
"D930",
"D931",
"D932",
"D933",
"D934",
"D935",
"D938",
"D940",
"D942",
"D943",
"D944",
"D945",
"D946",
"D947",
"D948",
"D949",
"D951",
"D952",
"D956",
"D957",
"D958",
"D959",
"D960",
"D961",
"D962",
"D963",
"D964",
"D965",
"D966",
"D967",
"D968",
"D969",
"D970",
"D971",
"D972",
"D974",
"D975",
"D976",
"D977",
"D978",
"D980",
"D981",
"D982",
"D983",
"D984",
"D987",
"D988",
"D990",
"D993",
"D994",
"D995",
"D996",
"D997",
"D998",
"D999",
"E001",
"E003",
"E004",
"E006",
"E007",
"E008",
"E009",
"E010",
"E011",
"E012",
"E013",
"E014",
"E015",
"E016",
"E017",
"E019",
"E020",
"E021",
"E022",
"E023",
"E024",
"E025",
"E026",
"E027",
"E028",
"E029",
"E030",
"E031",
"E033",
"E034",
"E036",
"E037",
"E038",
"E039",
"E040",
"E041",
"E043",
"E044",
"E045",
"E047",
"E048",
"E049",
"E050",
"E052",
"E053",
"E054",
"E055",
"E056",
"E057",
"E058",
"E060",
"E061",
"E062",
"E063",
"E064",
"E065",
"E066",
"E067",
"E068",
"E069",
"E070",
"E071",
"E072",
"E074",
"E078",
"E079",
"E081",
"E082",
"E083",
"E084",
"E085",
"E086",
"E087",
"E088",
"E089",
"E090",
"E091",
"E092",
"E093",
"E094",
"E096",
"E098",
"E100",
"E101",
"E102",
"E103",
"E104",
"E106",
"E107",
"E109",
"E111",
"E113",
"E114",
"E115",
"E116",
"E118",
"E120",
"E122",
"E124",
"E125",
"E126",
"E127",
"E128",
"E130",
"E131",
"E132",
"E133",
"E134",
"E136",
"E139",
"E141",
"E142",
"E143",
"E144",
"E145",
"E146",
"E147",
"E148",
"E149",
"E152",
"E153",
"E154",
"E155",
"E156",
"E158",
"E159",
"E160",
"E161",
"E163",
"E164",
"E165",
"E167",
"E168",
"E169",
"E170",
"E171",
"E172",
"E173",
"E177",
"E178",
"E179",
"E180",
"E182",
"E184",
"E185",
"E187",
"E188",
"E189",
"E191",
"E192",
"E193",
"E195",
"E196",
"E199",
"E200",
"E201",
"E202",
"E203",
"E204",
"E205",
"E206",
"E207",
"E208",
"E209",
"E210",
"E212",
"E213",
"E214",
"E215",
"E216",
"E217",
"E219",
"E221",
"E223",
"E224",
"E226",
"E227",
"E228",
"E229",
"E230",
"E232",
"E233",
"E234",
"E235",
"E236",
"E237",
"E238",
"E239",
"E240",
"E241",
"E242",
"E243",
"E244",
"E245",
"E246",
"E248",
"E249",
"E250",
"E251",
"E252",
"E253",
"E255",
"E256",
"E258",
"E259",
"E261",
"E263",
"E264",
"E265",
"E266",
"E269",
"E270",
"E271",
"E272",
"E273",
"E274",
"E280",
"E281",
"E282",
"E283",
"E284",
"E285",
"E287",
"E288",
"E289",
"E290",
"E291",
"E292",
"E295",
"E297",
"E299",
"E301",
"E304",
"E305",
"E306",
"E307",
"E309",
"E310",
"E311",
"E313",
"E314",
"E317",
"E320",
"E321",
"E323",
"E325",
"E326",
"E327",
"E328",
"E329",
"E330",
"E332",
"E333",
"E334",
"E335",
"E336",
"E337",
"E338",
"E339",
"E340",
"E341",
"E342",
"E343",
"E345",
"E346",
"E348",
"E349",
"E350",
"E351",
"E353",
"E354",
"E356",
"E358",
"E360",
"E363",
"E364",
"E365",
"E366",
"E367",
"E368",
"E369",
"E370",
"E371",
"E372",
"E373",
"E374",
"E375",
"E376",
"E377",
"E379",
"E380",
"E381",
"E382",
"E386",
"E387",
"E388",
"E389",
"E390",
"E391",
"E392",
"E393",
"E394",
"E395",
"E396",
"E397",
"E398",
"E400",
"E401",
"E402",
"E403",
"E405",
"E406",
"E407",
"E409",
"E410",
"E412",
"E413",
"E414",
"E415",
"E416",
"E417",
"E419",
"E420",
"E421",
"E422",
"E423",
"E424",
"E425",
"E426",
"E428",
"E429",
"E430",
"E431",
"E432",
"E433",
"E434",
"E435",
"E436",
"E437",
"E438",
"E439",
"E441",
"E443",
"E445",
"E447",
"E448",
"E450",
"E451",
"E454",
"E456",
"E457",
"E458",
"E459",
"E462",
"E463",
"E464",
"E465",
"E466",
"E467",
"E469",
"E470",
"E471",
"E472",
"E473",
"E474",
"E475",
"E476",
"E479",
"E480",
"E481",
"E482",
"E483",
"E484",
"E485",
"E486",
"E487",
"E488",
"E489",
"E490",
"E491",
"E492",
"E493",
"E494",
"E496",
"E497",
"E498",
"E500",
"E502",
"E504",
"E505",
"E506",
"E507",
"E509",
"E510",
"E512",
"E514",
"E515",
"E517",
"E518",
"E519",
"E520",
"E522",
"E523",
"E524",
"E526",
"E527",
"E528",
"E530",
"E531",
"E532",
"E535",
"E536",
"E537",
"E538",
"E539",
"E540",
"E541",
"E542",
"E543",
"E544",
"E546",
"E547",
"E548",
"E549",
"E550",
"E551",
"E553",
"E554",
"E555",
"E557",
"E558",
"E559",
"E560",
"E562",
"E563",
"E564",
"E565",
"E566",
"E569",
"E570",
"E571",
"E573",
"E574",
"E576",
"E578",
"E581",
"E583",
"E584",
"E587",
"E588",
"E589",
"E590",
"E591",
"E592",
"E593",
"E594",
"E596",
"E597",
"E599",
"E600",
"E602",
"E605",
"E606",
"E607",
"E608",
"E610",
"E611",
"E613",
"E615",
"E617",
"E618",
"E620",
"E621",
"E622",
"E623",
"E624",
"E625",
"E626",
"E627",
"E629",
"E630",
"E632",
"E633",
"E635",
"E638",
"E639",
"E640",
"E644",
"E645",
"E646",
"E647",
"E648",
"E649",
"E651",
"E652",
"E654",
"E655",
"E656",
"E659",
"E660",
"E661",
"E662",
"E664",
"E665",
"E666",
"E668",
"E669",
"E671",
"E673",
"E674",
"E675",
"E677",
"E678",
"E679",
"E680",
"E681",
"E682",
"E683",
"E684",
"E685",
"E687",
"E689",
"E690",
"E691",
"E692",
"E693",
"E694",
"E695",
"E698",
"E700",
"E704",
"E705",
"E706",
"E707",
"E708",
"E709",
"E711",
"E713",
"E714",
"E715",
"E716",
"E718",
"E719",
"E722",
"E723",
"E724",
"E726",
"E729",
"E730",
"E731",
"E734",
"E735",
"E736",
"E737",
"E738",
"E742",
"E743",
"E745",
"E746",
"E747",
"E748",
"E749",
"E750",
"E751",
"E752",
"E753",
"E754",
"E757",
"E758",
"E759",
"E760",
"E761",
"E763",
"E764",
"E767",
"E769",
"E770",
"E772",
"E773",
"E777",
"E778",
"E779",
"E780",
"E782",
"E783",
"E784",
"E785",
"E786",
"E787",
"E788",
"E789",
"E790",
"E791",
"E793",
"E794",
"E795",
"E798",
"E799",
"E800",
"E801",
"E803",
"E804",
"E805",
"E806",
"E807",
"E808",
"E809",
"E810",
"E811",
"E812",
"E813",
"E814",
"E815",
"E816",
"E817",
"E818",
"E819",
"E820",
"E821",
"E825",
"E829",
"E830",
"E833",
"E834",
"E835",
"E836",
"E837",
"E838",
"E839",
"E840",
"E841",
"E842",
"E843",
"E844",
"E847",
"E848",
"E850",
"E851",
"E852",
"E853",
"E854",
"E855",
"E856",
"E858",
"E859",
"E860",
"E862",
"E863",
"E864",
"E865",
"E868",
"E869",
"E870",
"E872",
"E873",
"E874",
"E875",
"E876",
"E877",
"E878",
"E879",
"E880",
"E882",
"E883",
"E884",
"E885",
"E887",
"E888",
"E889",
"E891",
"E892",
"E893",
"E894",
"E896",
"E897",
"E899",
"E900",
"E901",
"E902",
"E903",
"E904",
"E905",
"E906",
"E907",
"E908",
"E910",
"E911",
"E912",
"E914",
"E915",
"E917",
"E919",
"E921",
"E922",
"E923",
"E924",
"E925",
"E927",
"E928",
"E929",
"E930",
"E931",
"E932",
"E933",
"E934",
"E936",
"E938",
"E939",
"E940",
"E941",
"E944",
"E945",
"E946",
"E947",
"E949",
"E951",
"E952",
"E953",
"E954",
"E955",
"E956",
"E957",
"E958",
"E959",
"E960",
"E961",
"E962",
"E963",
"E965",
"E967",
"E968",
"E970",
"E971",
"E972",
"E973",
"E974",
"E975",
"E976",
"E977",
"E978",
"E979",
"E980",
"E981",
"E982",
"E983",
"E984",
"E986",
"E987",
"E988",
"E989",
"E990",
"E991",
"E992",
"E993",
"E994",
"E995",
"E997",
"E998",
"E999",
"F001",
"F002",
"F003",
"F004",
"F005",
"F006",
"F007",
"F009",
"F010",
"F011",
"F012",
"F013",
"F015",
"F016",
"F017",
"F020",
"F021",
"F022",
"F023",
"F024",
"F025",
"F027",
"F028",
"F029",
"F030",
"F032",
"F033",
"F035",
"F037",
"F041",
"F042",
"F043",
"F044",
"F045",
"F046",
"F047",
"F048",
"F050",
"F051",
"F052",
"F053",
"F054",
"F055",
"F058",
"F059",
"F061",
"F063",
"F064",
"F065",
"F066",
"F067",
"F068",
"F070",
"F073",
"F074",
"F078",
"F080",
"F081",
"F082",
"F083",
"F084",
"F085",
"F086",
"F087",
"F088",
"F089",
"F092",
"F093",
"F095",
"F096",
"F097",
"F098",
"F100",
"F101",
"F102",
"F104",
"F105",
"F106",
"F107",
"F108",
"F109",
"F110",
"F111",
"F112",
"F113",
"F114",
"F115",
"F116",
"F117",
"F118",
"F119",
"F120",
"F122",
"F123",
"F125",
"F126",
"F127",
"F130",
"F131",
"F132",
"F133",
"F134",
"F135",
"F136",
"F137",
"F138",
"F139",
"F140",
"F141",
"F144",
"F145",
"F146",
"F147",
"F148",
"F149",
"F151",
"F152",
"F153",
"F154",
"F155",
"F156",
"F157",
"F158",
"F161",
"F162",
"F165",
"F167",
"F168",
"F170",
"F171",
"F172",
"F173",
"F175",
"F176",
"F182",
"F183",
"F184",
"F186",
"F187",
"F188",
"F189",
"F190",
"F191",
"F192",
"F193",
"F194",
"F196",
"F200",
"F201",
"F202",
"F203",
"F205",
"F206",
"F207",
"F208",
"F209",
"F210",
"F213",
"F214",
"F216",
"F217",
"F218",
"F219",
"F220",
"F221",
"F223",
"F224",
"F225",
"F226",
"F229",
"F230",
"F231",
"F232",
"F233",
"F238",
"F239",
"F240",
"F241",
"F242",
"F243",
"F244",
"F246",
"F247",
"F248",
"F249",
"F250",
"F251",
"F254",
"F256",
"F257",
"F258",
"F259",
"F260",
"F261",
"F262",
"F263",
"F265",
"F266",
"F267",
"F268",
"F269",
"F270",
"F271",
"F272",
"F274",
"F275",
"F276",
"F277",
"F278",
"F279",
"F280",
"F281",
"F283",
"F284",
"F287",
"F288",
"F290",
"F293",
"F294",
"F295",
"F297",
"F299",
"F301",
"F304",
"F305",
"F307",
"F308",
"F309",
"F310",
"F311",
"F312",
"F313",
"F315",
"F316",
"F317",
"F318",
"F319",
"F320",
"F322",
"F323",
"F324",
"F325",
"F326",
"F327",
"F328",
"F329",
"F330",
"F332",
"F333",
"F335",
"F336",
"F337",
"F338",
"F340",
"F342",
"F343",
"F346",
"F347",
"F348",
"F351",
"F352",
"F354",
"F355",
"F356",
"F357",
"F358",
"F359",
"F360",
"F361",
"F363",
"F364",
"F365",
"F367",
"F368",
"F369",
"F370",
"F371",
"F372",
"F373",
"F374",
"F375",
"F376",
"F377",
"F378",
"F379",
"F380",
"F381",
"F382",
"F383",
"F384",
"F385",
"F386",
"F387",
"F390",
"F391",
"F392",
"F393",
"F394",
"F395",
"F397",
"F398",
"F399",
"F400",
"F401",
"F403",
"F404",
"F405",
"F407",
"F408",
"F409",
"F410",
"F411",
"F414",
"F415",
"F416",
"F417",
"F419",
"F420",
"F422",
"F423",
"F424",
"F426",
"F427",
"F428",
"F429",
"F430",
"F432",
"F433",
"F434",
"F437",
"F440",
"F441",
"F442",
"F443",
"F445",
"F446",
"F448",
"F449",
"F450",
"F452",
"F453",
"F454",
"F455",
"F456",
"F457",
"F458",
"F460",
"F461",
"F462",
"F463",
"F464",
"F465",
"F467",
"F468",
"F469",
"F471",
"F473",
"F475",
"F477",
"F478",
"F479",
"F480",
"F481",
"F482",
"F483",
"F484",
"F486",
"F487",
"F488",
"F489",
"F491",
"F492",
"F493",
"F494",
"F495",
"F496",
"F497",
"F498",
"F499",
"F500",
"F501",
"F502",
"F503",
"F504",
"F506",
"F507",
"F508",
"F509",
"F510",
"F511",
"F512",
"F513",
"F514",
"F515",
"F516",
"F517",
"F518",
"F519",
"F520",
"F522",
"F523",
"F524",
"F526",
"F527",
"F528",
"F529",
"F531",
"F532",
"F533",
"F534",
"F535",
"F536",
"F537",
"F538",
"F540",
"F541",
"F542",
"F543",
"F544",
"F545",
"F546",
"F547",
"F548",
"F549",
"F550",
"F551",
"F552",
"F553",
"F556",
"F557",
"F558",
"F559",
"F560",
"F561",
"F562",
"F563",
"F564",
"F565",
"F566",
"F567",
"F568",
"F569",
"F570",
"F572",
"F573",
"F574",
"F576",
"F578",
"F579",
"F580",
"F581",
"F582",
"F585",
"F586",
"F587",
"F589",
"F590",
"F591",
"F592",
"F594",
"F595",
"F596",
"F597",
"F598",
"F599",
"F600",
"F601",
"F603",
"F604",
"F605",
"F606",
"F607",
"F608",
"F609",
"F610",
"F611",
"F612",
"F614",
"F616",
"F618",
"F619",
"F620",
"F621",
"F622",
"F623",
"F625",
"F626",
"F627",
"F628",
"F629",
"F631",
"F632",
"F634",
"F636",
"F637",
"F638",
"F639",
"F640",
"F642",
"F644",
"F646",
"F648",
"F651",
"F653",
"F654",
"F655",
"F656",
"F657",
"F660",
"F661",
"F662",
"F664",
"F665",
"F666",
"F667",
"F668",
"F669",
"F670",
"F671",
"F672",
"F674",
"F675",
"F676",
"F677",
"F679",
"F680",
"F681",
"F682",
"F685",
"F686",
"F687",
"F688",
"F689",
"F690",
"F692",
"F696",
"F697",
"F698",
"F701",
"F703",
"F704",
"F705",
"F706",
"F707",
"F708",
"F709",
"F710",
"F711",
"F712",
"F713",
"F715",
"F716",
"F717",
"F718",
"F720",
"F721",
"F722",
"F723",
"F724",
"F725",
"F726",
"F727",
"F728",
"F729",
"F730",
"F731",
"F732",
"F733",
"F734",
"F735",
"F736",
"F737",
"F738",
"F739",
"F740",
"F743",
"F744",
"F745",
"F746",
"F747",
"F748",
"F749",
"F750",
"F751",
"F754",
"F756",
"F758",
"F760",
"F761",
"F762",
"F764",
"F765",
"F766",
"F767",
"F770",
"F771",
"F772",
"F773",
"F774",
"F775",
"F776",
"F777",
"F779",
"F780",
"F781",
"F783",
"F784",
"F785",
"F786",
"F788",
"F789",
"F791",
"F793",
"F795",
"F797",
"F798",
"F799",
"F801",
"F802",
"F806",
"F808",
"F809",
"F810",
"F811",
"F813",
"F814",
"F815",
"F816",
"F817",
"F818",
"F820",
"F822",
"F826",
"F828",
"F829",
"F830",
"F831",
"F832",
"F833",
"F835",
"F836",
"F838",
"F839",
"F840",
"F841",
"F842",
"F843",
"F844",
"F845",
"F846",
"F847",
"F848",
"F849",
"F851",
"F852",
"F856",
"F857",
"F858",
"F859",
"F861",
"F862",
"F863",
"F864",
"F865",
"F866",
"F867",
"F868",
"F870",
"F871",
"F872",
"F874",
"F876",
"F877",
"F878",
"F880",
"F881",
"F882",
"F883",
"F884",
"F886",
"F887",
"F889",
"F890",
"F891",
"F892",
"F893",
"F894",
"F895",
"F898",
"F899",
"F900",
"F901",
"F902",
"F904",
"F906",
"F907",
"F908",
"F910",
"F911",
"F912",
"F913",
"F914",
"F915",
"F916",
"F917",
"F918",
"F920",
"F921",
"F922",
"F923",
"F924",
"F925",
"F926",
"F927",
"F929",
"F930",
"F931",
"F932",
"F933",
"F934",
"F935",
"F937",
"F939",
"F941",
"F942",
"F943",
"F944",
"F947",
"F948",
"F949",
"F950",
"F951",
"F952",
"F955",
"F956",
"F957",
"F958",
"F960",
"F961",
"F962",
"F963",
"F964",
"F965",
"F966",
"F967",
"F968",
"F970",
"F972",
"F974",
"F975",
"F976",
"F977",
"F978",
"F979",
"F980",
"F981",
"F982",
"F983",
"F985",
"F986",
"F987",
"F988",
"F989",
"F990",
"F991",
"F992",
"F993",
"F994",
"F995",
"F996",
"F997",
"F998",
"F999",
"G001",
"G002",
"G003",
"G004",
"G005",
"G006",
"G007",
"G008",
"G009",
"G010",
"G011",
"G012",
"G015",
"G016",
"G018",
"G019",
"G020",
"G021",
"G022",
"G023",
"G025",
"G026",
"G028",
"G030",
"G031",
"G032",
"G034",
"G036",
"G037",
"G039",
"G040",
"G041",
"G042",
"G043",
"G044",
"G045",
"G046",
"G047",
"G048",
"G049",
"G050",
"G054",
"G056",
"G058",
"G061",
"G062",
"G063",
"G064",
"G065",
"G066",
"G068",
"G070",
"G071",
"G074",
"G075",
"G076",
"G078",
"G079",
"G080",
"G081",
"G082",
"G083",
"G084",
"G086",
"G087",
"G088",
"G090",
"G093",
"G095",
"G096",
"G097",
"G098",
"G102",
"G103",
"G105",
"G107",
"G108",
"G109",
"G110",
"G111",
"G113",
"G114",
"G115",
"G116",
"G117",
"G118",
"G119",
"G120",
"G121",
"G122",
"G123",
"G124",
"G125",
"G126",
"G128",
"G129",
"G130",
"G131",
"G133",
"G134",
"G135",
"G136",
"G137",
"G139",
"G140",
"G141",
"G142",
"G143",
"G144",
"G145",
"G146",
"G147",
"G148",
"G149",
"G150",
"G151",
"G152",
"G153",
"G154",
"G155",
"G156",
"G157",
"G158",
"G159",
"G160",
"G161",
"G163",
"G164",
"G165",
"G166",
"G167",
"G168",
"G169",
"G170",
"G171",
"G173",
"G178",
"G179",
"G181",
"G183",
"G184",
"G185",
"G186",
"G187",
"G188",
"G189",
"G190",
"G191",
"G192",
"G193",
"G194",
"G195",
"G196",
"G197",
"G198",
"G199",
"G200",
"G201",
"G202",
"G203",
"G204",
"G205",
"G206",
"G207",
"G208",
"G209",
"G210",
"G211",
"G212",
"G213",
"G215",
"G217",
"G218",
"G220",
"G222",
"G223",
"G224",
"G225",
"G226",
"G227",
"G228",
"G229",
"G230",
"G232",
"G233",
"G234",
"G237",
"G238",
"G240",
"G241",
"G242",
"G243",
"G247",
"G248",
"G249",
"G250",
"G251",
"G252",
"G253",
"G254",
"G255",
"G257",
"G258",
"G259",
"G260",
"G261",
"G262",
"G263",
"G264",
"G266",
"G267",
"G268",
"G270",
"G271",
"G272",
"G273",
"G274",
"G275",
"G276",
"G277",
"G278",
"G280",
"G281",
"G282",
"G283",
"G284",
"G285",
"G286",
"G287",
"G288",
"G289",
"G290",
"G291",
"G292",
"G293",
"G294",
"G295",
"G296",
"G297",
"G298",
"G299",
"G300",
"G302",
"G303",
"G304",
"G305",
"G306",
"G307",
"G308",
"G309",
"G311",
"G312",
"G315",
"G316",
"G317",
"G318",
"G319",
"G320",
"G323",
"G324",
"G325",
"G327",
"G328",
"G330",
"G331",
"G333",
"G334",
"G335",
"G336",
"G337",
"G338",
"G339",
"G340",
"G342",
"G344",
"G346",
"G347",
"G348",
"G349",
"G350",
"G352",
"G353",
"G354",
"G358",
"G359",
"G361",
"G362",
"G364",
"G365",
"G367",
"G368",
"G370",
"G371",
"G372",
"G374",
"G376",
"G377",
"G378",
"G379",
"G381",
"G382",
"G383",
"G384",
"G385",
"G386",
"G387",
"G388",
"G389",
"G391",
"G392",
"G393",
"G394",
"G395",
"G397",
"G398",
"G402",
"G403",
"G404",
"G406",
"G407",
"G408",
"G410",
"G411",
"G412",
"G415",
"G416",
"G417",
"G418",
"G419",
"G420",
"G421",
"G424",
"G426",
"G428",
"G429",
"G430",
"G431",
"G432",
"G433",
"G434",
"G435",
"G436",
"G437",
"G438",
"G439",
"G441",
"G442",
"G443",
"G444",
"G445",
"G446",
"G447",
"G449",
"G450",
"G452",
"G453",
"G454",
"G455",
"G456",
"G457",
"G458",
"G459",
"G461",
"G462",
"G463",
"G465",
"G467",
"G469",
"G471",
"G474",
"G475",
"G476",
"G477",
"G478",
"G479",
"G480",
"G481",
"G482",
"G483",
"G484",
"G485",
"G486",
"G487",
"G488",
"G489",
"G491",
"G492",
"G493",
"G494",
"G495",
"G496",
"G497",
"G498",
"G499",
"G500",
"G502",
"G504",
"G505",
"G506",
"G507",
"G508",
"G509",
"G510",
"G511",
"G512",
"G513",
"G514",
"G515",
"G516",
"G517",
"G518",
"G519",
"G520",
"G521",
"G522",
"G523",
"G524",
"G525",
"G526",
"G528",
"G529",
"G532",
"G534",
"G535",
"G538",
"G540",
"G541",
"G542",
"G543",
"G545",
"G546",
"G547",
"G549",
"G551",
"G553",
"G555",
"G556",
"G557",
"G558",
"G559",
"G560",
"G561",
"G564",
"G565",
"G566",
"G568",
"G570",
"G571",
"G572",
"G574",
"G575",
"G576",
"G577",
"G579",
"G580",
"G582",
"G583",
"G587",
"G588",
"G589",
"G590",
"G591",
"G592",
"G593",
"G594",
"G596",
"G597",
"G598",
"G600",
"G601",
"G602",
"G603",
"G604",
"G605",
"G606",
"G607",
"G608",
"G609",
"G610",
"G611",
"G612",
"G613",
"G614",
"G615",
"G616",
"G618",
"G619",
"G620",
"G621",
"G622",
"G623",
"G624",
"G625",
"G626",
"G627",
"G628",
"G629",
"G630",
"G631",
"G632",
"G634",
"G635",
"G636",
"G639",
"G642",
"G643",
"G645",
"G646",
"G647",
"G648",
"G649",
"G650",
"G651",
"G653",
"G656",
"G657",
"G658",
"G659",
"G660",
"G661",
"G662",
"G663",
"G664",
"G665",
"G666",
"G669",
"G670",
"G671",
"G672",
"G673",
"G674",
"G676",
"G678",
"G680",
"G681",
"G682",
"G683",
"G684",
"G685",
"G686",
"G687",
"G688",
"G690",
"G691",
"G692",
"G693",
"G694",
"G696",
"G697",
"G698",
"G699",
"G702",
"G703",
"G704",
"G705",
"G707",
"G710",
"G712",
"G713",
"G716",
"G717",
"G718",
"G719",
"G720",
"G721",
"G722",
"G724",
"G726",
"G727",
"G728",
"G729",
"G733",
"G734",
"G735",
"G736",
"G737",
"G740",
"G741",
"G742",
"G743",
"G746",
"G747",
"G749",
"G751",
"G752",
"G753",
"G754",
"G756",
"G757",
"G758",
"G760",
"G761",
"G762",
"G763",
"G764",
"G765",
"G766",
"G767",
"G768",
"G769",
"G770",
"G771",
"G772",
"G773",
"G774",
"G775",
"G776",
"G777",
"G779",
"G780",
"G782",
"G784",
"G785",
"G786",
"G787",
"G788",
"G789",
"G790",
"G791",
"G792",
"G793",
"G794",
"G795",
"G796",
"G797",
"G798",
"G799",
"G800",
"G801",
"G802",
"G803",
"G804",
"G805",
"G806",
"G807",
"G808",
"G809",
"G811",
"G812",
"G813",
"G814",
"G815",
"G816",
"G817",
"G818",
"G820",
"G821",
"G822",
"G823",
"G825",
"G826",
"G827",
"G829",
"G830",
"G831",
"G833",
"G834",
"G836",
"G837",
"G838",
"G839",
"G840",
"G842",
"G843",
"G844",
"G846",
"G847",
"G848",
"G849",
"G850",
"G851",
"G852",
"G853",
"G854",
"G855",
"G856",
"G858",
"G859",
"G860",
"G861",
"G862",
"G864",
"G865",
"G866",
"G867",
"G869",
"G870",
"G871",
"G872",
"G873",
"G874",
"G875",
"G877",
"G878",
"G879",
"G881",
"G882",
"G886",
"G887",
"G888",
"G889",
"G890",
"G891",
"G894",
"G895",
"G900",
"G902",
"G903",
"G904",
"G905",
"G906",
"G907",
"G909",
"G910",
"G912",
"G913",
"G914",
"G916",
"G917",
"G919",
"G920",
"G921",
"G922",
"G923",
"G924",
"G925",
"G926",
"G927",
"G929",
"G931",
"G932",
"G933",
"G934",
"G935",
"G936",
"G937",
"G939",
"G940",
"G942",
"G943",
"G944",
"G945",
"G947",
"G949",
"G951",
"G953",
"G954",
"G955",
"G957",
"G959",
"G960",
"G961",
"G962",
"G963",
"G964",
"G965",
"G966",
"G968",
"G969",
"G970",
"G972",
"G973",
"G974",
"G975",
"G976",
"G977",
"G978",
"G979",
"G980",
"G981",
"G982",
"G985",
"G986",
"G987",
"G988",
"G990",
"G991",
"G992",
"G993",
"G994",
"G995",
"G997",
"G999",
"H001",
"H002",
"H004",
"H006",
"H007",
"H010",
"H011",
"H013",
"H014",
"H015",
"H017",
"H018",
"H019",
"H020",
"H021",
"H022",
"H026",
"H027",
"H028",
"H029",
"H030",
"H033",
"H034",
"H036",
"H037",
"H038",
"H040",
"H042",
"H043",
"H045",
"H046",
"H048",
"H052",
"H055",
"H056",
"H059",
"H061",
"H062",
"H063",
"H068",
"H069",
"H070",
"H071",
"H072",
"H073",
"H074",
"H076",
"H077",
"H078",
"H081",
"H083",
"H085",
"H086",
"H087",
"H088",
"H089",
"H090",
"H091",
"H094",
"H095",
"H096",
"H097",
"H098",
"H100",
"H101",
"H102",
"H104",
"H106",
"H107",
"H108",
"H109",
"H110",
"H114",
"H117",
"H118",
"H119",
"H120",
"H121",
"H122",
"H126",
"H127",
"H128",
"H129",
"H130",
"H131",
"H132",
"H134",
"H140",
"H143",
"H146",
"H147",
"H148",
"H150",
"H151",
"H152",
"H153",
"H154",
"H156",
"H157",
"H159",
"H161",
"H163",
"H165",
"H166",
"H168",
"H173",
"H174",
"H175",
"H176",
"H177",
"H180",
"H182",
"H183",
"H184",
"H185",
"H186",
"H187",
"H188",
"H189",
"H192",
"H194",
"H195",
"H196",
"H198",
"H199",
"H200",
"H202",
"H203",
"H204",
"H205",
"H206",
"H207",
"H210",
"H211",
"H212",
"H213",
"H214",
"H216",
"H218",
"H219",
"H220",
"H221",
"H222",
"H223",
"H224",
"H225",
"H227",
"H228",
"H229",
"H230",
"H233",
"H235",
"H236",
"H238",
"H240",
"H242",
"H243",
"H244",
"H245",
"H246",
"H247",
"H250",
"H253",
"H255",
"H256",
"H257",
"H258",
"H259",
"H262",
"H263",
"H264",
"H265",
"H266",
"H267",
"H268",
"H269",
"H270",
"H271",
"H272",
"H273",
"H274",
"H275",
"H276",
"H277",
"H280",
"H281",
"H282",
"H284",
"H285",
"H286",
"H287",
"H288",
"H289",
"H293",
"H294",
"H298",
"H299",
"H300",
"H301",
"H302",
"H303",
"H304",
"H307",
"H308",
"H311",
"H312",
"H313",
"H314",
"H315",
"H316",
"H319",
"H320",
"H321",
"H323",
"H324",
"H325",
"H326",
"H327",
"H328",
"H330",
"H331",
"H333",
"H334",
"H335",
"H336",
"H337",
"H338",
"H340",
"H341",
"H342",
"H343",
"H344",
"H346",
"H347",
"H348",
"H350",
"H353",
"H354",
"H355",
"H356",
"H357",
"H359",
"H361",
"H362",
"H363",
"H364",
"H365",
"H366",
"H367",
"H369",
"H371",
"H372",
"H373",
"H375",
"H376",
"H377",
"H378",
"H379",
"H380",
"H382",
"H383",
"H384",
"H385",
"H386",
"H387",
"H389",
"H390",
"H391",
"H392",
"H393",
"H394",
"H395",
"H396",
"H398",
"H399",
"H400",
"H401",
"H402",
"H403",
"H404",
"H405",
"H406",
"H407",
"H408",
"H409",
"H410",
"H411",
"H412",
"H413",
"H414",
"H416",
"H417",
"H418",
"H420",
"H421",
"H422",
"H423",
"H424",
"H425",
"H426",
"H427",
"H428",
"H429",
"H431",
"H432",
"H433",
"H434",
"H436",
"H437",
"H438",
"H439",
"H440",
"H441",
"H442",
"H443",
"H444",
"H445",
"H446",
"H447",
"H448",
"H449",
"H450",
"H451",
"H452",
"H453",
"H454",
"H455",
"H456",
"H458",
"H459",
"H460",
"H461",
"H462",
"H465",
"H466",
"H467",
"H468",
"H470",
"H472",
"H473",
"H474",
"H475",
"H477",
"H478",
"H479",
"H480",
"H481",
"H484",
"H485",
"H486",
"H488",
"H489",
"H490",
"H491",
"H492",
"H493",
"H494",
"H495",
"H497",
"H498",
"H500",
"H501",
"H502",
"H503",
"H505",
"H507",
"H508",
"H509",
"H511",
"H512",
"H514",
"H516",
"H517",
"H518",
"H519",
"H521",
"H522",
"H523",
"H525",
"H527",
"H528",
"H529",
"H531",
"H532",
"H533",
"H534",
"H535",
"H536",
"H537",
"H538",
"H539",
"H540",
"H541",
"H542",
"H544",
"H546",
"H547",
"H549",
"H552",
"H553",
"H554",
"H555",
"H556",
"H558",
"H559",
"H560",
"H561",
"H562",
"H564",
"H565",
"H566",
"H568",
"H569",
"H570",
"H572",
"H573",
"H574",
"H575",
"H577",
"H578",
"H580",
"H581",
"H583",
"H584",
"H585",
"H588",
"H589",
"H590",
"H591",
"H592",
"H593",
"H594",
"H598",
"H599",
"H601",
"H602",
"H604",
"H606",
"H607",
"H608",
"H609",
"H610",
"H612",
"H614",
"H615",
"H618",
"H620",
"H621",
"H622",
"H623",
"H625",
"H627",
"H628",
"H629",
"H630",
"H631",
"H632",
"H633",
"H634",
"H635",
"H639",
"H641",
"H642",
"H643",
"H644",
"H645",
"H646",
"H647",
"H650",
"H652",
"H654",
"H655",
"H657",
"H658",
"H659",
"H661",
"H662",
"H665",
"H666",
"H669",
"H670",
"H671",
"H672",
"H673",
"H674",
"H675",
"H676",
"H677",
"H678",
"H679",
"H681",
"H682",
"H683",
"H684",
"H686",
"H687",
"H688",
"H689",
"H690",
"H691",
"H693",
"H694",
"H695",
"H699",
"H700",
"H701",
"H702",
"H703",
"H704",
"H706",
"H707",
"H708",
"H710",
"H712",
"H713",
"H714",
"H715",
"H716",
"H717",
"H719",
"H720",
"H723",
"H724",
"H725",
"H726",
"H727",
"H729",
"H730",
"H731",
"H732",
"H733",
"H734",
"H735",
"H736",
"H738",
"H739",
"H743",
"H744",
"H745",
"H746",
"H749",
"H752",
"H753",
"H754",
"H755",
"H756",
"H757",
"H760",
"H763",
"H764",
"H765",
"H766",
"H767",
"H768",
"H769",
"H770",
"H771",
"H772",
"H773",
"H774",
"H775",
"H777",
"H778",
"H779",
"H780",
"H781",
"H782",
"H783",
"H784",
"H785",
"H786",
"H787",
"H789",
"H790",
"H791",
"H792",
"H793",
"H794",
"H795",
"H796",
"H797",
"H798",
"H799",
"H800",
"H801",
"H802",
"H803",
"H804",
"H805",
"H806",
"H807",
"H808",
"H809",
"H810",
"H811",
"H812",
"H814",
"H815",
"H816",
"H818",
"H819",
"H820",
"H821",
"H822",
"H823",
"H824",
"H825",
"H826",
"H827",
"H829",
"H831",
"H833",
"H834",
"H835",
"H836",
"H838",
"H839",
"H840",
"H841",
"H842",
"H843",
"H844",
"H845",
"H846",
"H847",
"H848",
"H850",
"H851",
"H852",
"H855",
"H856",
"H857",
"H858",
"H859",
"H860",
"H861",
"H862",
"H865",
"H867",
"H868",
"H870",
"H872",
"H873",
"H875",
"H876",
"H877",
"H878",
"H880",
"H881",
"H882",
"H883",
"H884",
"H885",
"H887",
"H888",
"H889",
"H890",
"H891",
"H892",
"H893",
"H894",
"H895",
"H896",
"H897",
"H898",
"H899",
"H900",
"H901",
"H903",
"H906",
"H907",
"H910",
"H912",
"H913",
"H914",
"H916",
"H917",
"H918",
"H919",
"H920",
"H921",
"H922",
"H923",
"H924",
"H926",
"H928",
"H929",
"H930",
"H931",
"H933",
"H935",
"H936",
"H937",
"H938",
"H939",
"H940",
"H941",
"H942",
"H943",
"H944",
"H945",
"H949",
"H951",
"H952",
"H953",
"H955",
"H956",
"H957",
"H958",
"H959",
"H961",
"H962",
"H964",
"H967",
"H969",
"H970",
"H971",
"H973",
"H974",
"H975",
"H976",
"H977",
"H978",
"H979",
"H981",
"H982",
"H984",
"H985",
"H986",
"H987",
"H988",
"H989",
"H990",
"H991",
"H992",
"H994",
"H996",
"H997",
"H999",
"I002",
"I003",
"I005",
"I007",
"I008",
"I011",
"I012",
"I014",
"I016",
"I017",
"I018",
"I019",
"I023",
"I024",
"I025",
"I026",
"I027",
"I028",
"I029",
"I030",
"I031",
"I032",
"I034",
"I035",
"I037",
"I040",
"I042",
"I045",
"I046",
"I048",
"I049",
"I051",
"I052",
"I053",
"I054",
"I056",
"I057",
"I058",
"I059",
"I060",
"I061",
"I062",
"I063",
"I065",
"I066",
"I071",
"I072",
"I073",
"I076",
"I079",
"I082",
"I084",
"I086",
"I088",
"I089",
"I090",
"I092",
"I093",
"I095",
"I096",
"I098",
"I102",
"I103",
"I105",
"I107",
"I108",
"I109",
"I110",
"I113",
"I114",
"I115",
"I116",
"I117",
"I118",
"I119",
"I120",
"I121",
"I122",
"I123",
"I124",
"I125",
"I126",
"I128",
"I129",
"I130",
"I131",
"I132",
"I133",
"I135",
"I136",
"I137",
"I138",
"I139",
"I140",
"I142",
"I143",
"I144",
"I145",
"I147",
"I148",
"I150",
"I151",
"I152",
"I153",
"I154",
"I155",
"I156",
"I157",
"I158",
"I162",
"I163",
"I164",
"I165",
"I166",
"I168",
"I169",
"I170",
"I171",
"I172",
"I173",
"I174",
"I175",
"I176",
"I177",
"I178",
"I179",
"I181",
"I182",
"I183",
"I184",
"I185",
"I187",
"I188",
"I189",
"I190",
"I191",
"I192",
"I193",
"I196",
"I197",
"I198",
"I199",
"I201",
"I202",
"I203",
"I205",
"I206",
"I207",
"I208",
"I210",
"I213",
"I214",
"I215",
"I216",
"I217",
"I219",
"I220",
"I221",
"I224",
"I225",
"I230",
"I232",
"I233",
"I234",
"I236",
"I237",
"I238",
"I240",
"I242",
"I243",
"I244",
"I247",
"I248",
"I249",
"I251",
"I253",
"I254",
"I255",
"I256",
"I258",
"I259",
"I260",
"I261",
"I262",
"I263",
"I264",
"I265",
"I266",
"I271",
"I273",
"I274",
"I275",
"I276",
"I277",
"I278",
"I279",
"I280",
"I281",
"I282",
"I283",
"I284",
"I286",
"I287",
"I288",
"I289",
"I290",
"I291",
"I292",
"I293",
"I294",
"I296",
"I298",
"I300",
"I301",
"I302",
"I304",
"I305",
"I306",
"I307",
"I308",
"I309",
"I310",
"I311",
"I312",
"I314",
"I315",
"I316",
"I317",
"I318",
"I319",
"I320",
"I321",
"I322",
"I324",
"I326",
"I327",
"I328",
"I329",
"I330",
"I332",
"I333",
"I335",
"I336",
"I337",
"I339",
"I341",
"I342",
"I344",
"I346",
"I347",
"I348",
"I350",
"I351",
"I352",
"I353",
"I354",
"I356",
"I357",
"I359",
"I360",
"I361",
"I362",
"I363",
"I364",
"I365",
"I367",
"I368",
"I370",
"I371",
"I372",
"I373",
"I374",
"I375",
"I376",
"I377",
"I381",
"I382",
"I384",
"I388",
"I389",
"I390",
"I391",
"I392",
"I393",
"I394",
"I396",
"I400",
"I401",
"I402",
"I403",
"I404",
"I405",
"I407",
"I408",
"I409",
"I410",
"I411",
"I412",
"I414",
"I415",
"I416",
"I417",
"I418",
"I420",
"I421",
"I422",
"I423",
"I424",
"I425",
"I426",
"I428",
"I429",
"I430",
"I431",
"I432",
"I433",
"I434",
"I435",
"I436",
"I437",
"I438",
"I439",
"I441",
"I442",
"I443",
"I444",
"I445",
"I447",
"I448",
"I449",
"I451",
"I452",
"I453",
"I454",
"I455",
"I457",
"I460",
"I461",
"I462",
"I463",
"I464",
"I465",
"I466",
"I467",
"I468",
"I469",
"I470",
"I471",
"I472",
"I473",
"I475",
"I476",
"I477",
"I478",
"I479",
"I480",
"I482",
"I483",
"I484",
"I485",
"I486",
"I487",
"I489",
"I490",
"I492",
"I493",
"I494",
"I496",
"I497",
"I498",
"I499",
"I501",
"I503",
"I504",
"I506",
"I507",
"I510",
"I511",
"I512",
"I519",
"I520",
"I522",
"I523",
"I526",
"I527",
"I529",
"I530",
"I531",
"I532",
"I533",
"I534",
"I535",
"I536",
"I537",
"I538",
"I539",
"I540",
"I541",
"I543",
"I544",
"I545",
"I546",
"I548",
"I549",
"I551",
"I553",
"I554",
"I555",
"I556",
"I558",
"I559",
"I561",
"I562",
"I563",
"I564",
"I565",
"I566",
"I567",
"I569",
"I570",
"I571",
"I573",
"I576",
"I577",
"I578",
"I580",
"I581",
"I582",
"I585",
"I588",
"I589",
"I590",
"I591",
"I592",
"I593",
"I594",
"I595",
"I597",
"I598",
"I599",
"I600",
"I601",
"I602",
"I603",
"I604",
"I605",
"I606",
"I607",
"I608",
"I609",
"I610",
"I611",
"I612",
"I613",
"I614",
"I615",
"I618",
"I621",
"I622",
"I624",
"I625",
"I626",
"I627",
"I628",
"I629",
"I630",
"I631",
"I632",
"I633",
"I634",
"I635",
"I636",
"I637",
"I639",
"I640",
"I641",
"I642",
"I643",
"I644",
"I645",
"I646",
"I647",
"I648",
"I649",
"I651",
"I652",
"I653",
"I654",
"I655",
"I656",
"I657",
"I659",
"I660",
"I661",
"I662",
"I663",
"I666",
"I667",
"I668",
"I669",
"I671",
"I673",
"I676",
"I677",
"I678",
"I679",
"I681",
"I682",
"I683",
"I684",
"I686",
"I687",
"I688",
"I689",
"I690",
"I692",
"I693",
"I695",
"I696",
"I697",
"I698",
"I699",
"I700",
"I701",
"I702",
"I703",
"I704",
"I705",
"I706",
"I707",
"I709",
"I711",
"I712",
"I714",
"I715",
"I716",
"I717",
"I718",
"I720",
"I721",
"I723",
"I724",
"I725",
"I726",
"I727",
"I728",
"I729",
"I730",
"I732",
"I734",
"I735",
"I736",
"I738",
"I739",
"I741",
"I742",
"I743",
"I744",
"I745",
"I747",
"I748",
"I749",
"I750",
"I751",
"I752",
"I753",
"I754",
"I756",
"I757",
"I758",
"I759",
"I761",
"I765",
"I767",
"I771",
"I774",
"I775",
"I777",
"I778",
"I779",
"I780",
"I781",
"I782",
"I783",
"I785",
"I786",
"I787",
"I790",
"I791",
"I793",
"I794",
"I796",
"I797",
"I798",
"I799",
"I800",
"I801",
"I802",
"I803",
"I804",
"I805",
"I808",
"I809",
"I812",
"I813",
"I815",
"I817",
"I819",
"I820",
"I821",
"I822",
"I823",
"I824",
"I825",
"I826",
"I827",
"I828",
"I829",
"I830",
"I831",
"I832",
"I838",
"I839",
"I840",
"I841",
"I843",
"I844",
"I847",
"I848",
"I849",
"I850",
"I851",
"I852",
"I853",
"I854",
"I855",
"I856",
"I857",
"I858",
"I860",
"I861",
"I862",
"I863",
"I864",
"I865",
"I866",
"I867",
"I868",
"I869",
"I871",
"I872",
"I873",
"I874",
"I875",
"I876",
"I877",
"I878",
"I879",
"I880",
"I881",
"I884",
"I885",
"I886",
"I887",
"I888",
"I891",
"I892",
"I893",
"I894",
"I895",
"I896",
"I899",
"I901",
"I902",
"I903",
"I904",
"I905",
"I906",
"I907",
"I908",
"I909",
"I910",
"I911",
"I912",
"I914",
"I916",
"I917",
"I919",
"I921",
"I922",
"I923",
"I924",
"I925",
"I926",
"I927",
"I928",
"I929",
"I930",
"I932",
"I935",
"I936",
"I937",
"I938",
"I939",
"I941",
"I942",
"I943",
"I945",
"I946",
"I947",
"I948",
"I949",
"I950",
"I951",
"I953",
"I954",
"I955",
"I956",
"I959",
"I960",
"I962",
"I963",
"I964",
"I965",
"I968",
"I969",
"I970",
"I973",
"I974",
"I975",
"I976",
"I977",
"I978",
"I980",
"I981",
"I982",
"I984",
"I985",
"I986",
"I990",
"I991",
"I992",
"I993",
"I994",
"I995",
"I996",
"I997",
"I998",
"L002",
"L003",
"L004",
"L006",
"L007",
"L008",
"L009",
"L010",
"L011",
"L013",
"L014",
"L015",
"L016",
"L017",
"L018",
"L019",
"L020",
"L022",
"L023",
"L024",
"L025",
"L026",
"L027",
"L030",
"L032",
"L034",
"L035",
"L036",
"L037",
"L038",
"L039",
"L040",
"L042",
"L046",
"L047",
"L048",
"L049",
"L050",
"L055",
"L056",
"L057",
"L058",
"L059",
"L061",
"L062",
"L063",
"L064",
"L065",
"L066",
"L069",
"L070",
"L071",
"L073",
"L074",
"L075",
"L078",
"L081",
"L082",
"L083",
"L084",
"L085",
"L086",
"L087",
"L088",
"L089",
"L090",
"L093",
"L094",
"L096",
"L097",
"L100",
"L102",
"L103",
"L104",
"L105",
"L106",
"L108",
"L109",
"L111",
"L112",
"L113",
"L115",
"L116",
"L117",
"L118",
"L120",
"L121",
"L122",
"L123",
"L124",
"L125",
"L126",
"L127",
"L131",
"L132",
"L134",
"L136",
"L138",
"L139",
"L140",
"L142",
"L143",
"L144",
"L145",
"L146",
"L147",
"L149",
"L150",
"L152",
"L153",
"L154",
"L155",
"L156",
"L157",
"L158",
"L160",
"L164",
"L165",
"L166",
"L167",
"L168",
"L169",
"L172",
"L173",
"L174",
"L175",
"L176",
"L177",
"L178",
"L180",
"L181",
"L182",
"L183",
"L184",
"L185",
"L186",
"L187",
"L188",
"L189",
"L190",
"L191",
"L192",
"L193",
"L194",
"L195",
"L197",
"L199",
"L200",
"L202",
"L203",
"L204",
"L205",
"L206",
"L207",
"L210",
"L211",
"L212",
"L213",
"L214",
"L215",
"L216",
"L217",
"L218",
"L219",
"L220",
"L221",
"L223",
"L224",
"L225",
"L227",
"L228",
"L229",
"L230",
"L231",
"L233",
"L235",
"L237",
"L238",
"L239",
"L240",
"L241",
"L243",
"L244",
"L245",
"L246",
"L247",
"L248",
"L250",
"L251",
"L252",
"L253",
"L254",
"L256",
"L257",
"L258",
"L259",
"L262",
"L263",
"L265",
"L267",
"L269",
"L270",
"L271",
"L272",
"L273",
"L274",
"L276",
"L277",
"L278",
"L279",
"L280",
"L281",
"L282",
"L284",
"L285",
"L286",
"L287",
"L290",
"L291",
"L292",
"L293",
"L294",
"L295",
"L296",
"L297",
"L298",
"L299",
"L301",
"L302",
"L303",
"L304",
"L305",
"L306",
"L307",
"L308",
"L309",
"L310",
"L312",
"L314",
"L315",
"L316",
"L317",
"L319",
"L321",
"L322",
"L323",
"L324",
"L325",
"L326",
"L327",
"L328",
"L330",
"L331",
"L332",
"L333",
"L334",
"L335",
"L336",
"L337",
"L339",
"L340",
"L342",
"L345",
"L346",
"L347",
"L348",
"L349",
"L353",
"L355",
"L356",
"L357",
"L359",
"L361",
"L363",
"L364",
"L366",
"L367",
"L369",
"L372",
"L377",
"L378",
"L379",
"L380",
"L382",
"L383",
"L384",
"L386",
"L388",
"L389",
"L392",
"L393",
"L396",
"L397",
"L398",
"L399",
"L400",
"L401",
"L402",
"L403",
"L404",
"L406",
"L407",
"L408",
"L409",
"L410",
"L411",
"L413",
"L414",
"L415",
"L416",
"L418",
"L419",
"L420",
"L421",
"L423",
"L424",
"L425",
"L426",
"L427",
"L428",
"L429",
"L430",
"L431",
"L432",
"L433",
"L434",
"L435",
"L437",
"L438",
"L439",
"L440",
"L444",
"L445",
"L447",
"L448",
"L449",
"L450",
"L451",
"L452",
"L453",
"L454",
"L455",
"L458",
"L459",
"L460",
"L461",
"L462",
"L463",
"L464",
"L466",
"L468",
"L469",
"L470",
"L471",
"L472",
"L473",
"L474",
"L475",
"L477",
"L478",
"L480",
"L482",
"L483",
"L484",
"L485",
"L487",
"L488",
"L489",
"L490",
"L492",
"L494",
"L496",
"L497",
"L498",
"L499",
"L500",
"L501",
"L502",
"L503",
"L505",
"L506",
"L507",
"L508",
"L509",
"L511",
"L512",
"L513",
"L514",
"L515",
"L516",
"L517",
"L519",
"L521",
"L522",
"L524",
"L525",
"L526",
"L527",
"L528",
"L529",
"L531",
"L532",
"L533",
"L535",
"L537",
"L538",
"L539",
"L540",
"L544",
"L545",
"L546",
"L547",
"L551",
"L552",
"L554",
"L555",
"L556",
"L557",
"L558",
"L561",
"L562",
"L563",
"L564",
"L565",
"L566",
"L567",
"L568",
"L569",
"L570",
"L571",
"L572",
"L573",
"L574",
"L575",
"L576",
"L577",
"L578",
"L579",
"L580",
"L581",
"L582",
"L583",
"L584",
"L586",
"L588",
"L589",
"L590",
"L591",
"L593",
"L594",
"L595",
"L596",
"L597",
"L598",
"L599",
"L601",
"L603",
"L604",
"L605",
"L607",
"L609",
"L611",
"L612",
"L613",
"L614",
"L616",
"L617",
"L620",
"L623",
"L624",
"L625",
"L626",
"L627",
"L628",
"L629",
"L631",
"L633",
"L634",
"L638",
"L639",
"L640",
"L641",
"L642",
"L643",
"L644",
"L647",
"L651",
"L653",
"L654",
"L655",
"L656",
"L658",
"L660",
"L664",
"L665",
"L666",
"L667",
"L668",
"L669",
"L670",
"L671",
"L672",
"L673",
"L675",
"L676",
"L677",
"L680",
"L681",
"L682",
"L685",
"L686",
"L687",
"L689",
"L690",
"L691",
"L693",
"L696",
"L698",
"L699",
"L700",
"L702",
"L703",
"L704",
"L706",
"L707",
"L709",
"L710",
"L711",
"L712",
"L713",
"L715",
"L716",
"L719",
"L720",
"L722",
"L723",
"L724",
"L725",
"L726",
"L727",
"L728",
"L729",
"L730",
"L733",
"L734",
"L735",
"L736",
"L737",
"L738",
"L739",
"L740",
"L741",
"L742",
"L743",
"L744",
"L745",
"L746",
"L747",
"L748",
"L749",
"L750",
"L751",
"L752",
"L753",
"L758",
"L762",
"L764",
"L765",
"L769",
"L771",
"L772",
"L773",
"L774",
"L775",
"L776",
"L777",
"L778",
"L779",
"L780",
"L781",
"L783",
"L784",
"L785",
"L787",
"L788",
"L792",
"L795",
"L797",
"L799",
"L801",
"L802",
"L804",
"L805",
"L806",
"L807",
"L808",
"L809",
"L810",
"L811",
"L812",
"L814",
"L815",
"L816",
"L817",
"L819",
"L820",
"L823",
"L826",
"L827",
"L828",
"L829",
"L830",
"L831",
"L833",
"L834",
"L835",
"L836",
"L837",
"L838",
"L840",
"L841",
"L842",
"L843",
"L844",
"L845",
"L846",
"L847",
"L848",
"L850",
"L851",
"L854",
"L856",
"L857",
"L858",
"L859",
"L860",
"L865",
"L866",
"L868",
"L869",
"L872",
"L873",
"L874",
"L876",
"L878",
"L879",
"L880",
"L881",
"L882",
"L883",
"L885",
"L886",
"L887",
"L888",
"L889",
"L890",
"L892",
"L894",
"L897",
"L898",
"L899",
"L900",
"L904",
"L905",
"L906",
"L907",
"L908",
"L909",
"L912",
"L913",
"L915",
"L916",
"L917",
"L919",
"L920",
"L922",
"L923",
"L924",
"L926",
"L928",
"L929",
"L931",
"L933",
"L934",
"L936",
"L937",
"L938",
"L939",
"L942",
"L943",
"L944",
"L945",
"L946",
"L947",
"L948",
"L949",
"L950",
"L951",
"L952",
"L953",
"L956",
"L957",
"L958",
"L959",
"L961",
"L963",
"L964",
"L965",
"L966",
"L967",
"L968",
"L969",
"L970",
"L971",
"L972",
"L973",
"L974",
"L975",
"L977",
"L978",
"L979",
"L980",
"L981",
"L982",
"L983",
"L984",
"L985",
"L986",
"L987",
"L988",
"L989",
"L990",
"L991",
"L992",
"L994",
"L995",
"L998",
"L999",
"M002",
"M003",
"M004",
"M007",
"M009",
"M011",
"M013",
"M014",
"M015",
"M016",
"M017",
"M018",
"M019",
"M021",
"M022",
"M023",
"M025",
"M026",
"M027",
"M028",
"M030",
"M031",
"M032",
"M041",
"M042",
"M043",
"M044",
"M045",
"M048",
"M050",
"M052",
"M053",
"M055",
"M057",
"M058",
"M059",
"M060",
"M062",
"M063",
"M065",
"M067",
"M069",
"M070",
"M071",
"M072",
"M073",
"M077",
"M078",
"M079",
"M080",
"M081",
"M082",
"M083",
"M085",
"M086",
"M088",
"M089",
"M090",
"M091",
"M092",
"M093",
"M094",
"M095",
"M096",
"M098",
"M100",
"M101",
"M102",
"M103",
"M104",
"M105",
"M106",
"M108",
"M109",
"M110",
"M111",
"M113",
"M115",
"M116",
"M118",
"M119",
"M120",
"M121",
"M122",
"M123",
"M124",
"M125",
"M126",
"M127",
"M130",
"M131",
"M132",
"M133",
"M136",
"M138",
"M139",
"M140",
"M141",
"M143",
"M144",
"M145",
"M147",
"M150",
"M152",
"M153",
"M156",
"M158",
"M161",
"M162",
"M163",
"M165",
"M166",
"M167",
"M168",
"M169",
"M170",
"M171",
"M172",
"M173",
"M176",
"M177",
"M178",
"M179",
"M180",
"M182",
"M183",
"M184",
"M185",
"M187",
"M188",
"M189",
"M190",
"M194",
"M196",
"M197",
"M199",
"M200",
"M201",
"M202",
"M203",
"M204",
"M207",
"M208",
"M209",
"M210",
"M211",
"M212",
"M213",
"M214",
"M253",
"M255",
"M256",
"M257",
"M258",
"M259",
"M260",
"M261",
"M262",
"M263",
"M264",
"M265",
"M266",
"M267",
"M268",
"M269",
"M270",
"M271",
"M272",
"M273",
"M274",
"M275",
"M276",
"M277",
"M278",
"M279",
"M280",
"M281",
"M282",
"M283",
"M284",
"M285",
"M286",
"M287",
"M288",
"M289",
"M290",
"M291",
"M292",
"M294",
"M295",
"M297",
"M298",
"M300",
"M301",
"M302",
"M303",
"M308",
"M309",
"M311",
"M312",
"M313",
"M314",
"M315",
"M316",
"M317",
"M318",
"M319",
"M320",
"M321",
"M322",
"M323",
"M324",
"M325",
"M326",
"M327",
"M328",
"M329",
"M330",
"M331",
"M332",
"M333",
"M334",
"M335",
"M336",
"M337",
"M338",
"M339",
"M340",
"M341",
"M342",
"M343",
"M344",
"M345",
"M346",
"M347",
"M348",
"M349",
"M350",
"M351",
"M352",
"M353",
"M354",
"M355",
"M356",
"M357",
"M358",
"M359",
"M360",
"M361",
"M362",
"M363",
"M364",
"M365",
"M366",
"M367",
"M368",
"M369",
"M370",
"M371",
"M372",
"M373",
"M374",
"M375",
"M376",
"M377",
"M378",
"M379",
"M380",
"M381",
"M382",
"M383",
"M384",
"M385",
"M386",
"M387",
"M388",
"M389",
"M390",
"M391",
"M392",
"M393",
"M394",
"M395",
"M396",
"M397",
"M398",
"M399",
"M400",
"M401",
"M402",
"M403",
"M404",
"M405",
"M406",
"M407",
"M408",
"M409",
"M410",
"M411",
"M412",
"M413",
"M414",
"M415",
"M416",
"M417",
"M418",
"M419",
"M420",
"M421",
"M422",
"M423",
"M424",
"M425",
"M426",
"M427",
"M428",
"M429",
"M430",
"M431",
"M432",
)
CHECKSUM_TABLE = (
(
1,
0,
5,
7,
9,
13,
15,
17,
19,
21,
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,
),
(
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
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,
),
)
def checksum(value: str) -> str:
"""
Calculates the checksum char used for the 16th char.
Author: Vincenzo Palazzo
"""
return chr(65 + sum(CHECKSUM_TABLE[index % 2][ALPHANUMERICS_DICT[char]] for index, char in enumerate(value)) % 26)
class Provider(SsnProvider):
"""
Generates italian fiscal codes.
"""
def ssn(self) -> str:
sex: int = self.random_int(min=0, max=1)
surname: str = self._get_surname_letters()
name: str = self._get_name_letters(sex)
year: str = "%02d" % self.random_int(min=0, max=99)
is_leap_year: bool = self.is_leap_year(int(year))
month: str = self.random_element(MONTHS_LIST)
max_day: int = self._get_max_day(is_leap_year=is_leap_year, month=month)
day: str = "%02d" % (self.random_int(min=1, max=max_day) + (40 if sex == 1 else 0))
municipality: str = self.random_element(MUNICIPALITIES_LIST)
code: str = f"{surname}{name}{year}{month}{day}{municipality}"
return code + checksum(code)
vat_id_formats = ("IT###########",)
def vat_id(self) -> str:
"""
http://ec.europa.eu/taxation_customs/vies/faq.html#item_11
:return: A random Italian VAT ID
"""
return self.bothify(self.random_element(self.vat_id_formats))
def _get_name_letters(self, sex: int) -> str:
"""
Rules:
* take all consonants in their order
* if >= 4, take the 1st, 3rd and 4th
* if < 3 take the vowels also; vowels must go _after_ the consonants
and must be taken in the order they appear (LUCA -> LCU)
* if == 3 return all 3 consonants
* if name is < 3 chars, pad it on the right with "X" (LI -> LIX)
Args:
sex: int
Returns:
str
"""
if sex == 1:
name = self.generator.first_name_male().upper()
else:
name = self.generator.first_name_female().upper()
name = self._transliterate_name(name)
if len(name) < 3:
return self._pad_shorter(name)
name_consonants = self._get_consonants(name)
cons_len = len(name_consonants)
if cons_len >= 4:
name_part = "".join([name_consonants[0], name_consonants[1], name_consonants[3]])
elif cons_len < 3:
name_part = "".join(name_consonants + self._get_vowels(name))[:3]
else:
name_part = "".join(name_consonants)
return name_part
def _get_surname_letters(self) -> str:
"""
Rules:
* if consonants >=3 : take the first 3
* if less, pad them with vowels; vowels come after the consonants and in the order they appear (ROSA -> RSO)
* if surname is less than 3 chars, pad it on the right with 'X' (FO -> FOX)
Returns:
str
"""
surname = self.generator.last_name().upper()
surname = self._transliterate_name(surname)
if len(surname) < 3:
return self._pad_shorter(surname)
surname_consonants = self._get_consonants(surname)
cons_len = len(surname_consonants)
if cons_len < 3:
surname_part = "".join(surname_consonants + self._get_vowels(surname))[:3]
else:
surname_part = "".join(surname_consonants)[:3]
return surname_part
@staticmethod
def _transliterate_name(name: str) -> str:
nfkd_form: str = unicodedata.normalize("NFKD", name)
return "".join([c for c in nfkd_form if unicodedata.combining(c) == 0])
@staticmethod
def _get_vowels(sequence: str) -> list:
"""
Returns list of vowels in provided string
"""
vowels = []
for char in sequence:
if char in VOWELS:
vowels.append(char)
return vowels
@staticmethod
def _get_consonants(sequence: str) -> list:
"""
Returns list of consonants in provided string
"""
consonants = []
for char in sequence:
if char in CONSONANTS:
consonants.append(char)
return consonants
@staticmethod
def _pad_shorter(sequence: str) -> str:
"""
Pads shorter string with the allowed char
"""
return sequence.ljust(3, "X")
@staticmethod
def is_leap_year(year: int) -> bool:
"""
Checks if the one given is a leap year
"""
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
return True
return False
@staticmethod
def _get_max_day(is_leap_year: bool, month: str) -> int:
"""
Returns the maximum day for the current month
"""
if month in ["D", "H", "P", "S"]:
max_day = 30
elif month == "B":
max_day = 29 if is_leap_year else 28
else:
max_day = 31
return max_day