From b87dcea67e260f8cb97840e226e8acef9ea7ca43 Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Sun, 24 May 2026 09:38:06 +0000 Subject: [PATCH 01/18] Added golden file & modified validation config --- .../golden_data/golden_observations.csv | 2061 +++++++++++++++++ .../golden_data/golden_summary_report.csv | 4 + .../validation_config.json | 17 +- 3 files changed, 2081 insertions(+), 1 deletion(-) create mode 100644 scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv create mode 100644 scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_summary_report.csv diff --git a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv new file mode 100644 index 0000000000..d514ac6fa1 --- /dev/null +++ b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv @@ -0,0 +1,2061 @@ +"GeoId","value" +"","{'GeoId': 'country/ALB'}" +"","{'GeoId': 'country/AUT'}" +"","{'GeoId': 'country/BEL'}" +"","{'GeoId': 'country/BGR'}" +"","{'GeoId': 'country/CHE'}" +"","{'GeoId': 'country/CYP'}" +"","{'GeoId': 'country/CZE'}" +"","{'GeoId': 'country/DEU'}" +"","{'GeoId': 'country/DNK'}" +"","{'GeoId': 'country/ESP'}" +"","{'GeoId': 'country/EST'}" +"","{'GeoId': 'country/FIN'}" +"","{'GeoId': 'country/FRA'}" +"","{'GeoId': 'country/GBR'}" +"","{'GeoId': 'country/GRC'}" +"","{'GeoId': 'country/HRV'}" +"","{'GeoId': 'country/HUN'}" +"","{'GeoId': 'country/IRL'}" +"","{'GeoId': 'country/ISL'}" +"","{'GeoId': 'country/ITA'}" +"","{'GeoId': 'country/LIE'}" +"","{'GeoId': 'country/LTU'}" +"","{'GeoId': 'country/LUX'}" +"","{'GeoId': 'country/LVA'}" +"","{'GeoId': 'country/MKD'}" +"","{'GeoId': 'country/MLT'}" +"","{'GeoId': 'country/MNE'}" +"","{'GeoId': 'country/NLD'}" +"","{'GeoId': 'country/NOR'}" +"","{'GeoId': 'country/POL'}" +"","{'GeoId': 'country/PRT'}" +"","{'GeoId': 'country/ROU'}" +"","{'GeoId': 'country/SRB'}" +"","{'GeoId': 'country/SVK'}" +"","{'GeoId': 'country/SVN'}" +"","{'GeoId': 'country/SWE'}" +"","{'GeoId': 'country/TUR'}" +"","{'GeoId': 'nuts/AL0'}" +"","{'GeoId': 'nuts/AL01'}" +"","{'GeoId': 'nuts/AL011'}" +"","{'GeoId': 'nuts/AL012'}" +"","{'GeoId': 'nuts/AL013'}" +"","{'GeoId': 'nuts/AL014'}" +"","{'GeoId': 'nuts/AL015'}" +"","{'GeoId': 'nuts/AL02'}" +"","{'GeoId': 'nuts/AL021'}" +"","{'GeoId': 'nuts/AL022'}" +"","{'GeoId': 'nuts/AL03'}" +"","{'GeoId': 'nuts/AL031'}" +"","{'GeoId': 'nuts/AL032'}" +"","{'GeoId': 'nuts/AL033'}" +"","{'GeoId': 'nuts/AL034'}" +"","{'GeoId': 'nuts/AL035'}" +"","{'GeoId': 'nuts/AT1'}" +"","{'GeoId': 'nuts/AT11'}" +"","{'GeoId': 'nuts/AT111'}" +"","{'GeoId': 'nuts/AT112'}" +"","{'GeoId': 'nuts/AT113'}" +"","{'GeoId': 'nuts/AT12'}" +"","{'GeoId': 'nuts/AT121'}" +"","{'GeoId': 'nuts/AT122'}" +"","{'GeoId': 'nuts/AT123'}" +"","{'GeoId': 'nuts/AT124'}" +"","{'GeoId': 'nuts/AT125'}" +"","{'GeoId': 'nuts/AT126'}" +"","{'GeoId': 'nuts/AT127'}" +"","{'GeoId': 'nuts/AT13'}" +"","{'GeoId': 'nuts/AT130'}" +"","{'GeoId': 'nuts/AT2'}" +"","{'GeoId': 'nuts/AT21'}" +"","{'GeoId': 'nuts/AT211'}" +"","{'GeoId': 'nuts/AT212'}" +"","{'GeoId': 'nuts/AT213'}" +"","{'GeoId': 'nuts/AT22'}" +"","{'GeoId': 'nuts/AT221'}" +"","{'GeoId': 'nuts/AT222'}" +"","{'GeoId': 'nuts/AT223'}" +"","{'GeoId': 'nuts/AT224'}" +"","{'GeoId': 'nuts/AT225'}" +"","{'GeoId': 'nuts/AT226'}" +"","{'GeoId': 'nuts/AT3'}" +"","{'GeoId': 'nuts/AT31'}" +"","{'GeoId': 'nuts/AT311'}" +"","{'GeoId': 'nuts/AT312'}" +"","{'GeoId': 'nuts/AT313'}" +"","{'GeoId': 'nuts/AT314'}" +"","{'GeoId': 'nuts/AT315'}" +"","{'GeoId': 'nuts/AT32'}" +"","{'GeoId': 'nuts/AT321'}" +"","{'GeoId': 'nuts/AT322'}" +"","{'GeoId': 'nuts/AT323'}" +"","{'GeoId': 'nuts/AT33'}" +"","{'GeoId': 'nuts/AT331'}" +"","{'GeoId': 'nuts/AT332'}" +"","{'GeoId': 'nuts/AT333'}" +"","{'GeoId': 'nuts/AT334'}" +"","{'GeoId': 'nuts/AT335'}" +"","{'GeoId': 'nuts/AT34'}" +"","{'GeoId': 'nuts/AT341'}" +"","{'GeoId': 'nuts/AT342'}" +"","{'GeoId': 'nuts/BE1'}" +"","{'GeoId': 'nuts/BE10'}" +"","{'GeoId': 'nuts/BE100'}" +"","{'GeoId': 'nuts/BE2'}" +"","{'GeoId': 'nuts/BE21'}" +"","{'GeoId': 'nuts/BE211'}" +"","{'GeoId': 'nuts/BE212'}" +"","{'GeoId': 'nuts/BE213'}" +"","{'GeoId': 'nuts/BE22'}" +"","{'GeoId': 'nuts/BE221'}" +"","{'GeoId': 'nuts/BE222'}" +"","{'GeoId': 'nuts/BE223'}" +"","{'GeoId': 'nuts/BE224'}" +"","{'GeoId': 'nuts/BE225'}" +"","{'GeoId': 'nuts/BE23'}" +"","{'GeoId': 'nuts/BE231'}" +"","{'GeoId': 'nuts/BE232'}" +"","{'GeoId': 'nuts/BE233'}" +"","{'GeoId': 'nuts/BE234'}" +"","{'GeoId': 'nuts/BE235'}" +"","{'GeoId': 'nuts/BE236'}" +"","{'GeoId': 'nuts/BE24'}" +"","{'GeoId': 'nuts/BE241'}" +"","{'GeoId': 'nuts/BE242'}" +"","{'GeoId': 'nuts/BE25'}" +"","{'GeoId': 'nuts/BE251'}" +"","{'GeoId': 'nuts/BE252'}" +"","{'GeoId': 'nuts/BE253'}" +"","{'GeoId': 'nuts/BE254'}" +"","{'GeoId': 'nuts/BE255'}" +"","{'GeoId': 'nuts/BE256'}" +"","{'GeoId': 'nuts/BE257'}" +"","{'GeoId': 'nuts/BE258'}" +"","{'GeoId': 'nuts/BE3'}" +"","{'GeoId': 'nuts/BE31'}" +"","{'GeoId': 'nuts/BE310'}" +"","{'GeoId': 'nuts/BE32'}" +"","{'GeoId': 'nuts/BE321'}" +"","{'GeoId': 'nuts/BE322'}" +"","{'GeoId': 'nuts/BE323'}" +"","{'GeoId': 'nuts/BE324'}" +"","{'GeoId': 'nuts/BE325'}" +"","{'GeoId': 'nuts/BE326'}" +"","{'GeoId': 'nuts/BE327'}" +"","{'GeoId': 'nuts/BE328'}" +"","{'GeoId': 'nuts/BE329'}" +"","{'GeoId': 'nuts/BE32A'}" +"","{'GeoId': 'nuts/BE32B'}" +"","{'GeoId': 'nuts/BE32C'}" +"","{'GeoId': 'nuts/BE32D'}" +"","{'GeoId': 'nuts/BE33'}" +"","{'GeoId': 'nuts/BE331'}" +"","{'GeoId': 'nuts/BE332'}" +"","{'GeoId': 'nuts/BE334'}" +"","{'GeoId': 'nuts/BE335'}" +"","{'GeoId': 'nuts/BE336'}" +"","{'GeoId': 'nuts/BE34'}" +"","{'GeoId': 'nuts/BE341'}" +"","{'GeoId': 'nuts/BE342'}" +"","{'GeoId': 'nuts/BE343'}" +"","{'GeoId': 'nuts/BE344'}" +"","{'GeoId': 'nuts/BE345'}" +"","{'GeoId': 'nuts/BE35'}" +"","{'GeoId': 'nuts/BE351'}" +"","{'GeoId': 'nuts/BE352'}" +"","{'GeoId': 'nuts/BE353'}" +"","{'GeoId': 'nuts/BG3'}" +"","{'GeoId': 'nuts/BG31'}" +"","{'GeoId': 'nuts/BG311'}" +"","{'GeoId': 'nuts/BG312'}" +"","{'GeoId': 'nuts/BG313'}" +"","{'GeoId': 'nuts/BG314'}" +"","{'GeoId': 'nuts/BG315'}" +"","{'GeoId': 'nuts/BG32'}" +"","{'GeoId': 'nuts/BG321'}" +"","{'GeoId': 'nuts/BG322'}" +"","{'GeoId': 'nuts/BG323'}" +"","{'GeoId': 'nuts/BG324'}" +"","{'GeoId': 'nuts/BG325'}" +"","{'GeoId': 'nuts/BG33'}" +"","{'GeoId': 'nuts/BG331'}" +"","{'GeoId': 'nuts/BG332'}" +"","{'GeoId': 'nuts/BG333'}" +"","{'GeoId': 'nuts/BG334'}" +"","{'GeoId': 'nuts/BG34'}" +"","{'GeoId': 'nuts/BG341'}" +"","{'GeoId': 'nuts/BG342'}" +"","{'GeoId': 'nuts/BG343'}" +"","{'GeoId': 'nuts/BG344'}" +"","{'GeoId': 'nuts/BG4'}" +"","{'GeoId': 'nuts/BG41'}" +"","{'GeoId': 'nuts/BG411'}" +"","{'GeoId': 'nuts/BG412'}" +"","{'GeoId': 'nuts/BG413'}" +"","{'GeoId': 'nuts/BG414'}" +"","{'GeoId': 'nuts/BG415'}" +"","{'GeoId': 'nuts/BG42'}" +"","{'GeoId': 'nuts/BG421'}" +"","{'GeoId': 'nuts/BG422'}" +"","{'GeoId': 'nuts/BG423'}" +"","{'GeoId': 'nuts/BG424'}" +"","{'GeoId': 'nuts/BG425'}" +"","{'GeoId': 'nuts/CH0'}" +"","{'GeoId': 'nuts/CH01'}" +"","{'GeoId': 'nuts/CH011'}" +"","{'GeoId': 'nuts/CH012'}" +"","{'GeoId': 'nuts/CH013'}" +"","{'GeoId': 'nuts/CH02'}" +"","{'GeoId': 'nuts/CH021'}" +"","{'GeoId': 'nuts/CH022'}" +"","{'GeoId': 'nuts/CH023'}" +"","{'GeoId': 'nuts/CH024'}" +"","{'GeoId': 'nuts/CH025'}" +"","{'GeoId': 'nuts/CH03'}" +"","{'GeoId': 'nuts/CH031'}" +"","{'GeoId': 'nuts/CH032'}" +"","{'GeoId': 'nuts/CH033'}" +"","{'GeoId': 'nuts/CH04'}" +"","{'GeoId': 'nuts/CH040'}" +"","{'GeoId': 'nuts/CH05'}" +"","{'GeoId': 'nuts/CH051'}" +"","{'GeoId': 'nuts/CH052'}" +"","{'GeoId': 'nuts/CH053'}" +"","{'GeoId': 'nuts/CH055'}" +"","{'GeoId': 'nuts/CH056'}" +"","{'GeoId': 'nuts/CH057'}" +"","{'GeoId': 'nuts/CH06'}" +"","{'GeoId': 'nuts/CH061'}" +"","{'GeoId': 'nuts/CH062'}" +"","{'GeoId': 'nuts/CH063'}" +"","{'GeoId': 'nuts/CH064'}" +"","{'GeoId': 'nuts/CH065'}" +"","{'GeoId': 'nuts/CH066'}" +"","{'GeoId': 'nuts/CH07'}" +"","{'GeoId': 'nuts/CH070'}" +"","{'GeoId': 'nuts/CY0'}" +"","{'GeoId': 'nuts/CY00'}" +"","{'GeoId': 'nuts/CY000'}" +"","{'GeoId': 'nuts/CZ0'}" +"","{'GeoId': 'nuts/CZ01'}" +"","{'GeoId': 'nuts/CZ010'}" +"","{'GeoId': 'nuts/CZ02'}" +"","{'GeoId': 'nuts/CZ020'}" +"","{'GeoId': 'nuts/CZ03'}" +"","{'GeoId': 'nuts/CZ031'}" +"","{'GeoId': 'nuts/CZ032'}" +"","{'GeoId': 'nuts/CZ04'}" +"","{'GeoId': 'nuts/CZ041'}" +"","{'GeoId': 'nuts/CZ042'}" +"","{'GeoId': 'nuts/CZ05'}" +"","{'GeoId': 'nuts/CZ051'}" +"","{'GeoId': 'nuts/CZ052'}" +"","{'GeoId': 'nuts/CZ053'}" +"","{'GeoId': 'nuts/CZ06'}" +"","{'GeoId': 'nuts/CZ063'}" +"","{'GeoId': 'nuts/CZ064'}" +"","{'GeoId': 'nuts/CZ07'}" +"","{'GeoId': 'nuts/CZ071'}" +"","{'GeoId': 'nuts/CZ072'}" +"","{'GeoId': 'nuts/CZ08'}" +"","{'GeoId': 'nuts/CZ080'}" +"","{'GeoId': 'nuts/DE1'}" +"","{'GeoId': 'nuts/DE11'}" +"","{'GeoId': 'nuts/DE111'}" +"","{'GeoId': 'nuts/DE112'}" +"","{'GeoId': 'nuts/DE113'}" +"","{'GeoId': 'nuts/DE114'}" +"","{'GeoId': 'nuts/DE115'}" +"","{'GeoId': 'nuts/DE116'}" +"","{'GeoId': 'nuts/DE117'}" +"","{'GeoId': 'nuts/DE118'}" +"","{'GeoId': 'nuts/DE119'}" +"","{'GeoId': 'nuts/DE11A'}" +"","{'GeoId': 'nuts/DE11B'}" +"","{'GeoId': 'nuts/DE11C'}" +"","{'GeoId': 'nuts/DE11D'}" +"","{'GeoId': 'nuts/DE12'}" +"","{'GeoId': 'nuts/DE121'}" +"","{'GeoId': 'nuts/DE122'}" +"","{'GeoId': 'nuts/DE123'}" +"","{'GeoId': 'nuts/DE124'}" +"","{'GeoId': 'nuts/DE125'}" +"","{'GeoId': 'nuts/DE126'}" +"","{'GeoId': 'nuts/DE127'}" +"","{'GeoId': 'nuts/DE128'}" +"","{'GeoId': 'nuts/DE129'}" +"","{'GeoId': 'nuts/DE12A'}" +"","{'GeoId': 'nuts/DE12B'}" +"","{'GeoId': 'nuts/DE12C'}" +"","{'GeoId': 'nuts/DE13'}" +"","{'GeoId': 'nuts/DE131'}" +"","{'GeoId': 'nuts/DE132'}" +"","{'GeoId': 'nuts/DE133'}" +"","{'GeoId': 'nuts/DE134'}" +"","{'GeoId': 'nuts/DE135'}" +"","{'GeoId': 'nuts/DE136'}" +"","{'GeoId': 'nuts/DE137'}" +"","{'GeoId': 'nuts/DE138'}" +"","{'GeoId': 'nuts/DE139'}" +"","{'GeoId': 'nuts/DE13A'}" +"","{'GeoId': 'nuts/DE14'}" +"","{'GeoId': 'nuts/DE141'}" +"","{'GeoId': 'nuts/DE142'}" +"","{'GeoId': 'nuts/DE143'}" +"","{'GeoId': 'nuts/DE144'}" +"","{'GeoId': 'nuts/DE145'}" +"","{'GeoId': 'nuts/DE146'}" +"","{'GeoId': 'nuts/DE147'}" +"","{'GeoId': 'nuts/DE148'}" +"","{'GeoId': 'nuts/DE149'}" +"","{'GeoId': 'nuts/DE2'}" +"","{'GeoId': 'nuts/DE21'}" +"","{'GeoId': 'nuts/DE211'}" +"","{'GeoId': 'nuts/DE212'}" +"","{'GeoId': 'nuts/DE213'}" +"","{'GeoId': 'nuts/DE214'}" +"","{'GeoId': 'nuts/DE215'}" +"","{'GeoId': 'nuts/DE216'}" +"","{'GeoId': 'nuts/DE217'}" +"","{'GeoId': 'nuts/DE218'}" +"","{'GeoId': 'nuts/DE219'}" +"","{'GeoId': 'nuts/DE21A'}" +"","{'GeoId': 'nuts/DE21B'}" +"","{'GeoId': 'nuts/DE21C'}" +"","{'GeoId': 'nuts/DE21D'}" +"","{'GeoId': 'nuts/DE21E'}" +"","{'GeoId': 'nuts/DE21F'}" +"","{'GeoId': 'nuts/DE21G'}" +"","{'GeoId': 'nuts/DE21H'}" +"","{'GeoId': 'nuts/DE21I'}" +"","{'GeoId': 'nuts/DE21J'}" +"","{'GeoId': 'nuts/DE21K'}" +"","{'GeoId': 'nuts/DE21L'}" +"","{'GeoId': 'nuts/DE21M'}" +"","{'GeoId': 'nuts/DE21N'}" +"","{'GeoId': 'nuts/DE22'}" +"","{'GeoId': 'nuts/DE221'}" +"","{'GeoId': 'nuts/DE222'}" +"","{'GeoId': 'nuts/DE223'}" +"","{'GeoId': 'nuts/DE224'}" +"","{'GeoId': 'nuts/DE225'}" +"","{'GeoId': 'nuts/DE226'}" +"","{'GeoId': 'nuts/DE227'}" +"","{'GeoId': 'nuts/DE228'}" +"","{'GeoId': 'nuts/DE229'}" +"","{'GeoId': 'nuts/DE22A'}" +"","{'GeoId': 'nuts/DE22B'}" +"","{'GeoId': 'nuts/DE22C'}" +"","{'GeoId': 'nuts/DE23'}" +"","{'GeoId': 'nuts/DE231'}" +"","{'GeoId': 'nuts/DE232'}" +"","{'GeoId': 'nuts/DE233'}" +"","{'GeoId': 'nuts/DE234'}" +"","{'GeoId': 'nuts/DE235'}" +"","{'GeoId': 'nuts/DE236'}" +"","{'GeoId': 'nuts/DE237'}" +"","{'GeoId': 'nuts/DE238'}" +"","{'GeoId': 'nuts/DE239'}" +"","{'GeoId': 'nuts/DE23A'}" +"","{'GeoId': 'nuts/DE24'}" +"","{'GeoId': 'nuts/DE241'}" +"","{'GeoId': 'nuts/DE242'}" +"","{'GeoId': 'nuts/DE243'}" +"","{'GeoId': 'nuts/DE244'}" +"","{'GeoId': 'nuts/DE245'}" +"","{'GeoId': 'nuts/DE246'}" +"","{'GeoId': 'nuts/DE247'}" +"","{'GeoId': 'nuts/DE248'}" +"","{'GeoId': 'nuts/DE249'}" +"","{'GeoId': 'nuts/DE24A'}" +"","{'GeoId': 'nuts/DE24B'}" +"","{'GeoId': 'nuts/DE24C'}" +"","{'GeoId': 'nuts/DE24D'}" +"","{'GeoId': 'nuts/DE25'}" +"","{'GeoId': 'nuts/DE251'}" +"","{'GeoId': 'nuts/DE252'}" +"","{'GeoId': 'nuts/DE253'}" +"","{'GeoId': 'nuts/DE254'}" +"","{'GeoId': 'nuts/DE255'}" +"","{'GeoId': 'nuts/DE256'}" +"","{'GeoId': 'nuts/DE257'}" +"","{'GeoId': 'nuts/DE258'}" +"","{'GeoId': 'nuts/DE259'}" +"","{'GeoId': 'nuts/DE25A'}" +"","{'GeoId': 'nuts/DE25B'}" +"","{'GeoId': 'nuts/DE25C'}" +"","{'GeoId': 'nuts/DE26'}" +"","{'GeoId': 'nuts/DE261'}" +"","{'GeoId': 'nuts/DE262'}" +"","{'GeoId': 'nuts/DE263'}" +"","{'GeoId': 'nuts/DE264'}" +"","{'GeoId': 'nuts/DE265'}" +"","{'GeoId': 'nuts/DE266'}" +"","{'GeoId': 'nuts/DE267'}" +"","{'GeoId': 'nuts/DE268'}" +"","{'GeoId': 'nuts/DE269'}" +"","{'GeoId': 'nuts/DE26A'}" +"","{'GeoId': 'nuts/DE26B'}" +"","{'GeoId': 'nuts/DE26C'}" +"","{'GeoId': 'nuts/DE27'}" +"","{'GeoId': 'nuts/DE271'}" +"","{'GeoId': 'nuts/DE272'}" +"","{'GeoId': 'nuts/DE273'}" +"","{'GeoId': 'nuts/DE274'}" +"","{'GeoId': 'nuts/DE275'}" +"","{'GeoId': 'nuts/DE276'}" +"","{'GeoId': 'nuts/DE277'}" +"","{'GeoId': 'nuts/DE278'}" +"","{'GeoId': 'nuts/DE279'}" +"","{'GeoId': 'nuts/DE27A'}" +"","{'GeoId': 'nuts/DE27B'}" +"","{'GeoId': 'nuts/DE27C'}" +"","{'GeoId': 'nuts/DE27D'}" +"","{'GeoId': 'nuts/DE27E'}" +"","{'GeoId': 'nuts/DE3'}" +"","{'GeoId': 'nuts/DE30'}" +"","{'GeoId': 'nuts/DE300'}" +"","{'GeoId': 'nuts/DE4'}" +"","{'GeoId': 'nuts/DE40'}" +"","{'GeoId': 'nuts/DE401'}" +"","{'GeoId': 'nuts/DE402'}" +"","{'GeoId': 'nuts/DE403'}" +"","{'GeoId': 'nuts/DE404'}" +"","{'GeoId': 'nuts/DE405'}" +"","{'GeoId': 'nuts/DE406'}" +"","{'GeoId': 'nuts/DE407'}" +"","{'GeoId': 'nuts/DE408'}" +"","{'GeoId': 'nuts/DE409'}" +"","{'GeoId': 'nuts/DE40A'}" +"","{'GeoId': 'nuts/DE40B'}" +"","{'GeoId': 'nuts/DE40C'}" +"","{'GeoId': 'nuts/DE40D'}" +"","{'GeoId': 'nuts/DE40E'}" +"","{'GeoId': 'nuts/DE40F'}" +"","{'GeoId': 'nuts/DE40G'}" +"","{'GeoId': 'nuts/DE40H'}" +"","{'GeoId': 'nuts/DE40I'}" +"","{'GeoId': 'nuts/DE5'}" +"","{'GeoId': 'nuts/DE50'}" +"","{'GeoId': 'nuts/DE501'}" +"","{'GeoId': 'nuts/DE502'}" +"","{'GeoId': 'nuts/DE6'}" +"","{'GeoId': 'nuts/DE60'}" +"","{'GeoId': 'nuts/DE600'}" +"","{'GeoId': 'nuts/DE7'}" +"","{'GeoId': 'nuts/DE71'}" +"","{'GeoId': 'nuts/DE711'}" +"","{'GeoId': 'nuts/DE712'}" +"","{'GeoId': 'nuts/DE713'}" +"","{'GeoId': 'nuts/DE714'}" +"","{'GeoId': 'nuts/DE715'}" +"","{'GeoId': 'nuts/DE716'}" +"","{'GeoId': 'nuts/DE717'}" +"","{'GeoId': 'nuts/DE718'}" +"","{'GeoId': 'nuts/DE719'}" +"","{'GeoId': 'nuts/DE71A'}" +"","{'GeoId': 'nuts/DE71B'}" +"","{'GeoId': 'nuts/DE71C'}" +"","{'GeoId': 'nuts/DE71D'}" +"","{'GeoId': 'nuts/DE71E'}" +"","{'GeoId': 'nuts/DE72'}" +"","{'GeoId': 'nuts/DE721'}" +"","{'GeoId': 'nuts/DE722'}" +"","{'GeoId': 'nuts/DE723'}" +"","{'GeoId': 'nuts/DE724'}" +"","{'GeoId': 'nuts/DE725'}" +"","{'GeoId': 'nuts/DE73'}" +"","{'GeoId': 'nuts/DE731'}" +"","{'GeoId': 'nuts/DE732'}" +"","{'GeoId': 'nuts/DE733'}" +"","{'GeoId': 'nuts/DE734'}" +"","{'GeoId': 'nuts/DE735'}" +"","{'GeoId': 'nuts/DE736'}" +"","{'GeoId': 'nuts/DE737'}" +"","{'GeoId': 'nuts/DE8'}" +"","{'GeoId': 'nuts/DE80'}" +"","{'GeoId': 'nuts/DE803'}" +"","{'GeoId': 'nuts/DE804'}" +"","{'GeoId': 'nuts/DE80J'}" +"","{'GeoId': 'nuts/DE80K'}" +"","{'GeoId': 'nuts/DE80L'}" +"","{'GeoId': 'nuts/DE80M'}" +"","{'GeoId': 'nuts/DE80N'}" +"","{'GeoId': 'nuts/DE80O'}" +"","{'GeoId': 'nuts/DE9'}" +"","{'GeoId': 'nuts/DE91'}" +"","{'GeoId': 'nuts/DE911'}" +"","{'GeoId': 'nuts/DE912'}" +"","{'GeoId': 'nuts/DE913'}" +"","{'GeoId': 'nuts/DE914'}" +"","{'GeoId': 'nuts/DE916'}" +"","{'GeoId': 'nuts/DE917'}" +"","{'GeoId': 'nuts/DE918'}" +"","{'GeoId': 'nuts/DE91A'}" +"","{'GeoId': 'nuts/DE91B'}" +"","{'GeoId': 'nuts/DE91C'}" +"","{'GeoId': 'nuts/DE92'}" +"","{'GeoId': 'nuts/DE922'}" +"","{'GeoId': 'nuts/DE923'}" +"","{'GeoId': 'nuts/DE925'}" +"","{'GeoId': 'nuts/DE926'}" +"","{'GeoId': 'nuts/DE927'}" +"","{'GeoId': 'nuts/DE928'}" +"","{'GeoId': 'nuts/DE929'}" +"","{'GeoId': 'nuts/DE93'}" +"","{'GeoId': 'nuts/DE931'}" +"","{'GeoId': 'nuts/DE932'}" +"","{'GeoId': 'nuts/DE933'}" +"","{'GeoId': 'nuts/DE934'}" +"","{'GeoId': 'nuts/DE935'}" +"","{'GeoId': 'nuts/DE936'}" +"","{'GeoId': 'nuts/DE937'}" +"","{'GeoId': 'nuts/DE938'}" +"","{'GeoId': 'nuts/DE939'}" +"","{'GeoId': 'nuts/DE93A'}" +"","{'GeoId': 'nuts/DE93B'}" +"","{'GeoId': 'nuts/DE94'}" +"","{'GeoId': 'nuts/DE941'}" +"","{'GeoId': 'nuts/DE942'}" +"","{'GeoId': 'nuts/DE943'}" +"","{'GeoId': 'nuts/DE944'}" +"","{'GeoId': 'nuts/DE945'}" +"","{'GeoId': 'nuts/DE946'}" +"","{'GeoId': 'nuts/DE947'}" +"","{'GeoId': 'nuts/DE948'}" +"","{'GeoId': 'nuts/DE949'}" +"","{'GeoId': 'nuts/DE94A'}" +"","{'GeoId': 'nuts/DE94B'}" +"","{'GeoId': 'nuts/DE94C'}" +"","{'GeoId': 'nuts/DE94D'}" +"","{'GeoId': 'nuts/DE94E'}" +"","{'GeoId': 'nuts/DE94F'}" +"","{'GeoId': 'nuts/DE94G'}" +"","{'GeoId': 'nuts/DE94H'}" +"","{'GeoId': 'nuts/DEA'}" +"","{'GeoId': 'nuts/DEA1'}" +"","{'GeoId': 'nuts/DEA11'}" +"","{'GeoId': 'nuts/DEA12'}" +"","{'GeoId': 'nuts/DEA13'}" +"","{'GeoId': 'nuts/DEA14'}" +"","{'GeoId': 'nuts/DEA15'}" +"","{'GeoId': 'nuts/DEA16'}" +"","{'GeoId': 'nuts/DEA17'}" +"","{'GeoId': 'nuts/DEA18'}" +"","{'GeoId': 'nuts/DEA19'}" +"","{'GeoId': 'nuts/DEA1A'}" +"","{'GeoId': 'nuts/DEA1B'}" +"","{'GeoId': 'nuts/DEA1C'}" +"","{'GeoId': 'nuts/DEA1D'}" +"","{'GeoId': 'nuts/DEA1E'}" +"","{'GeoId': 'nuts/DEA1F'}" +"","{'GeoId': 'nuts/DEA2'}" +"","{'GeoId': 'nuts/DEA22'}" +"","{'GeoId': 'nuts/DEA23'}" +"","{'GeoId': 'nuts/DEA24'}" +"","{'GeoId': 'nuts/DEA26'}" +"","{'GeoId': 'nuts/DEA27'}" +"","{'GeoId': 'nuts/DEA28'}" +"","{'GeoId': 'nuts/DEA29'}" +"","{'GeoId': 'nuts/DEA2A'}" +"","{'GeoId': 'nuts/DEA2B'}" +"","{'GeoId': 'nuts/DEA2C'}" +"","{'GeoId': 'nuts/DEA2D'}" +"","{'GeoId': 'nuts/DEA3'}" +"","{'GeoId': 'nuts/DEA31'}" +"","{'GeoId': 'nuts/DEA32'}" +"","{'GeoId': 'nuts/DEA33'}" +"","{'GeoId': 'nuts/DEA34'}" +"","{'GeoId': 'nuts/DEA35'}" +"","{'GeoId': 'nuts/DEA36'}" +"","{'GeoId': 'nuts/DEA37'}" +"","{'GeoId': 'nuts/DEA38'}" +"","{'GeoId': 'nuts/DEA4'}" +"","{'GeoId': 'nuts/DEA41'}" +"","{'GeoId': 'nuts/DEA42'}" +"","{'GeoId': 'nuts/DEA43'}" +"","{'GeoId': 'nuts/DEA44'}" +"","{'GeoId': 'nuts/DEA45'}" +"","{'GeoId': 'nuts/DEA46'}" +"","{'GeoId': 'nuts/DEA47'}" +"","{'GeoId': 'nuts/DEA5'}" +"","{'GeoId': 'nuts/DEA51'}" +"","{'GeoId': 'nuts/DEA52'}" +"","{'GeoId': 'nuts/DEA53'}" +"","{'GeoId': 'nuts/DEA54'}" +"","{'GeoId': 'nuts/DEA55'}" +"","{'GeoId': 'nuts/DEA56'}" +"","{'GeoId': 'nuts/DEA57'}" +"","{'GeoId': 'nuts/DEA58'}" +"","{'GeoId': 'nuts/DEA59'}" +"","{'GeoId': 'nuts/DEA5A'}" +"","{'GeoId': 'nuts/DEA5B'}" +"","{'GeoId': 'nuts/DEA5C'}" +"","{'GeoId': 'nuts/DEB'}" +"","{'GeoId': 'nuts/DEB1'}" +"","{'GeoId': 'nuts/DEB11'}" +"","{'GeoId': 'nuts/DEB12'}" +"","{'GeoId': 'nuts/DEB13'}" +"","{'GeoId': 'nuts/DEB14'}" +"","{'GeoId': 'nuts/DEB15'}" +"","{'GeoId': 'nuts/DEB17'}" +"","{'GeoId': 'nuts/DEB18'}" +"","{'GeoId': 'nuts/DEB1A'}" +"","{'GeoId': 'nuts/DEB1B'}" +"","{'GeoId': 'nuts/DEB1C'}" +"","{'GeoId': 'nuts/DEB1D'}" +"","{'GeoId': 'nuts/DEB2'}" +"","{'GeoId': 'nuts/DEB21'}" +"","{'GeoId': 'nuts/DEB22'}" +"","{'GeoId': 'nuts/DEB23'}" +"","{'GeoId': 'nuts/DEB24'}" +"","{'GeoId': 'nuts/DEB25'}" +"","{'GeoId': 'nuts/DEB3'}" +"","{'GeoId': 'nuts/DEB31'}" +"","{'GeoId': 'nuts/DEB32'}" +"","{'GeoId': 'nuts/DEB33'}" +"","{'GeoId': 'nuts/DEB34'}" +"","{'GeoId': 'nuts/DEB35'}" +"","{'GeoId': 'nuts/DEB36'}" +"","{'GeoId': 'nuts/DEB37'}" +"","{'GeoId': 'nuts/DEB38'}" +"","{'GeoId': 'nuts/DEB39'}" +"","{'GeoId': 'nuts/DEB3A'}" +"","{'GeoId': 'nuts/DEB3B'}" +"","{'GeoId': 'nuts/DEB3C'}" +"","{'GeoId': 'nuts/DEB3D'}" +"","{'GeoId': 'nuts/DEB3E'}" +"","{'GeoId': 'nuts/DEB3F'}" +"","{'GeoId': 'nuts/DEB3G'}" +"","{'GeoId': 'nuts/DEB3H'}" +"","{'GeoId': 'nuts/DEB3I'}" +"","{'GeoId': 'nuts/DEB3J'}" +"","{'GeoId': 'nuts/DEB3K'}" +"","{'GeoId': 'nuts/DEC'}" +"","{'GeoId': 'nuts/DEC0'}" +"","{'GeoId': 'nuts/DEC01'}" +"","{'GeoId': 'nuts/DEC02'}" +"","{'GeoId': 'nuts/DEC03'}" +"","{'GeoId': 'nuts/DEC04'}" +"","{'GeoId': 'nuts/DEC05'}" +"","{'GeoId': 'nuts/DEC06'}" +"","{'GeoId': 'nuts/DED'}" +"","{'GeoId': 'nuts/DED2'}" +"","{'GeoId': 'nuts/DED21'}" +"","{'GeoId': 'nuts/DED2C'}" +"","{'GeoId': 'nuts/DED2D'}" +"","{'GeoId': 'nuts/DED2E'}" +"","{'GeoId': 'nuts/DED2F'}" +"","{'GeoId': 'nuts/DED4'}" +"","{'GeoId': 'nuts/DED41'}" +"","{'GeoId': 'nuts/DED42'}" +"","{'GeoId': 'nuts/DED43'}" +"","{'GeoId': 'nuts/DED44'}" +"","{'GeoId': 'nuts/DED45'}" +"","{'GeoId': 'nuts/DED5'}" +"","{'GeoId': 'nuts/DED51'}" +"","{'GeoId': 'nuts/DED52'}" +"","{'GeoId': 'nuts/DED53'}" +"","{'GeoId': 'nuts/DEE'}" +"","{'GeoId': 'nuts/DEE0'}" +"","{'GeoId': 'nuts/DEE01'}" +"","{'GeoId': 'nuts/DEE02'}" +"","{'GeoId': 'nuts/DEE03'}" +"","{'GeoId': 'nuts/DEE04'}" +"","{'GeoId': 'nuts/DEE05'}" +"","{'GeoId': 'nuts/DEE06'}" +"","{'GeoId': 'nuts/DEE07'}" +"","{'GeoId': 'nuts/DEE08'}" +"","{'GeoId': 'nuts/DEE09'}" +"","{'GeoId': 'nuts/DEE0A'}" +"","{'GeoId': 'nuts/DEE0B'}" +"","{'GeoId': 'nuts/DEE0C'}" +"","{'GeoId': 'nuts/DEE0D'}" +"","{'GeoId': 'nuts/DEE0E'}" +"","{'GeoId': 'nuts/DEF'}" +"","{'GeoId': 'nuts/DEF0'}" +"","{'GeoId': 'nuts/DEF01'}" +"","{'GeoId': 'nuts/DEF02'}" +"","{'GeoId': 'nuts/DEF03'}" +"","{'GeoId': 'nuts/DEF04'}" +"","{'GeoId': 'nuts/DEF05'}" +"","{'GeoId': 'nuts/DEF06'}" +"","{'GeoId': 'nuts/DEF07'}" +"","{'GeoId': 'nuts/DEF08'}" +"","{'GeoId': 'nuts/DEF09'}" +"","{'GeoId': 'nuts/DEF0A'}" +"","{'GeoId': 'nuts/DEF0B'}" +"","{'GeoId': 'nuts/DEF0C'}" +"","{'GeoId': 'nuts/DEF0D'}" +"","{'GeoId': 'nuts/DEF0E'}" +"","{'GeoId': 'nuts/DEF0F'}" +"","{'GeoId': 'nuts/DEG'}" +"","{'GeoId': 'nuts/DEG0'}" +"","{'GeoId': 'nuts/DEG01'}" +"","{'GeoId': 'nuts/DEG02'}" +"","{'GeoId': 'nuts/DEG03'}" +"","{'GeoId': 'nuts/DEG04'}" +"","{'GeoId': 'nuts/DEG05'}" +"","{'GeoId': 'nuts/DEG06'}" +"","{'GeoId': 'nuts/DEG07'}" +"","{'GeoId': 'nuts/DEG09'}" +"","{'GeoId': 'nuts/DEG0A'}" +"","{'GeoId': 'nuts/DEG0B'}" +"","{'GeoId': 'nuts/DEG0C'}" +"","{'GeoId': 'nuts/DEG0D'}" +"","{'GeoId': 'nuts/DEG0E'}" +"","{'GeoId': 'nuts/DEG0F'}" +"","{'GeoId': 'nuts/DEG0G'}" +"","{'GeoId': 'nuts/DEG0H'}" +"","{'GeoId': 'nuts/DEG0I'}" +"","{'GeoId': 'nuts/DEG0J'}" +"","{'GeoId': 'nuts/DEG0K'}" +"","{'GeoId': 'nuts/DEG0L'}" +"","{'GeoId': 'nuts/DEG0M'}" +"","{'GeoId': 'nuts/DEG0N'}" +"","{'GeoId': 'nuts/DEG0P'}" +"","{'GeoId': 'nuts/DK0'}" +"","{'GeoId': 'nuts/DK01'}" +"","{'GeoId': 'nuts/DK011'}" +"","{'GeoId': 'nuts/DK012'}" +"","{'GeoId': 'nuts/DK013'}" +"","{'GeoId': 'nuts/DK014'}" +"","{'GeoId': 'nuts/DK02'}" +"","{'GeoId': 'nuts/DK021'}" +"","{'GeoId': 'nuts/DK022'}" +"","{'GeoId': 'nuts/DK03'}" +"","{'GeoId': 'nuts/DK031'}" +"","{'GeoId': 'nuts/DK032'}" +"","{'GeoId': 'nuts/DK04'}" +"","{'GeoId': 'nuts/DK041'}" +"","{'GeoId': 'nuts/DK042'}" +"","{'GeoId': 'nuts/DK05'}" +"","{'GeoId': 'nuts/DK050'}" +"","{'GeoId': 'nuts/EE0'}" +"","{'GeoId': 'nuts/EE00'}" +"","{'GeoId': 'nuts/EE001'}" +"","{'GeoId': 'nuts/EE004'}" +"","{'GeoId': 'nuts/EE006'}" +"","{'GeoId': 'nuts/EE007'}" +"","{'GeoId': 'nuts/EE008'}" +"","{'GeoId': 'nuts/EE009'}" +"","{'GeoId': 'nuts/EE00A'}" +"","{'GeoId': 'nuts/EL3'}" +"","{'GeoId': 'nuts/EL30'}" +"","{'GeoId': 'nuts/EL301'}" +"","{'GeoId': 'nuts/EL302'}" +"","{'GeoId': 'nuts/EL303'}" +"","{'GeoId': 'nuts/EL304'}" +"","{'GeoId': 'nuts/EL305'}" +"","{'GeoId': 'nuts/EL306'}" +"","{'GeoId': 'nuts/EL307'}" +"","{'GeoId': 'nuts/EL4'}" +"","{'GeoId': 'nuts/EL41'}" +"","{'GeoId': 'nuts/EL411'}" +"","{'GeoId': 'nuts/EL412'}" +"","{'GeoId': 'nuts/EL413'}" +"","{'GeoId': 'nuts/EL42'}" +"","{'GeoId': 'nuts/EL421'}" +"","{'GeoId': 'nuts/EL422'}" +"","{'GeoId': 'nuts/EL43'}" +"","{'GeoId': 'nuts/EL431'}" +"","{'GeoId': 'nuts/EL432'}" +"","{'GeoId': 'nuts/EL433'}" +"","{'GeoId': 'nuts/EL434'}" +"","{'GeoId': 'nuts/EL5'}" +"","{'GeoId': 'nuts/EL51'}" +"","{'GeoId': 'nuts/EL511'}" +"","{'GeoId': 'nuts/EL512'}" +"","{'GeoId': 'nuts/EL513'}" +"","{'GeoId': 'nuts/EL514'}" +"","{'GeoId': 'nuts/EL515'}" +"","{'GeoId': 'nuts/EL52'}" +"","{'GeoId': 'nuts/EL521'}" +"","{'GeoId': 'nuts/EL522'}" +"","{'GeoId': 'nuts/EL523'}" +"","{'GeoId': 'nuts/EL524'}" +"","{'GeoId': 'nuts/EL525'}" +"","{'GeoId': 'nuts/EL526'}" +"","{'GeoId': 'nuts/EL527'}" +"","{'GeoId': 'nuts/EL53'}" +"","{'GeoId': 'nuts/EL531'}" +"","{'GeoId': 'nuts/EL532'}" +"","{'GeoId': 'nuts/EL533'}" +"","{'GeoId': 'nuts/EL54'}" +"","{'GeoId': 'nuts/EL541'}" +"","{'GeoId': 'nuts/EL542'}" +"","{'GeoId': 'nuts/EL543'}" +"","{'GeoId': 'nuts/EL6'}" +"","{'GeoId': 'nuts/EL61'}" +"","{'GeoId': 'nuts/EL611'}" +"","{'GeoId': 'nuts/EL612'}" +"","{'GeoId': 'nuts/EL613'}" +"","{'GeoId': 'nuts/EL62'}" +"","{'GeoId': 'nuts/EL621'}" +"","{'GeoId': 'nuts/EL622'}" +"","{'GeoId': 'nuts/EL623'}" +"","{'GeoId': 'nuts/EL624'}" +"","{'GeoId': 'nuts/EL63'}" +"","{'GeoId': 'nuts/EL631'}" +"","{'GeoId': 'nuts/EL632'}" +"","{'GeoId': 'nuts/EL633'}" +"","{'GeoId': 'nuts/EL64'}" +"","{'GeoId': 'nuts/EL641'}" +"","{'GeoId': 'nuts/EL642'}" +"","{'GeoId': 'nuts/EL643'}" +"","{'GeoId': 'nuts/EL644'}" +"","{'GeoId': 'nuts/EL645'}" +"","{'GeoId': 'nuts/EL65'}" +"","{'GeoId': 'nuts/EL651'}" +"","{'GeoId': 'nuts/EL652'}" +"","{'GeoId': 'nuts/EL653'}" +"","{'GeoId': 'nuts/ES1'}" +"","{'GeoId': 'nuts/ES11'}" +"","{'GeoId': 'nuts/ES111'}" +"","{'GeoId': 'nuts/ES112'}" +"","{'GeoId': 'nuts/ES113'}" +"","{'GeoId': 'nuts/ES114'}" +"","{'GeoId': 'nuts/ES12'}" +"","{'GeoId': 'nuts/ES120'}" +"","{'GeoId': 'nuts/ES13'}" +"","{'GeoId': 'nuts/ES130'}" +"","{'GeoId': 'nuts/ES2'}" +"","{'GeoId': 'nuts/ES21'}" +"","{'GeoId': 'nuts/ES211'}" +"","{'GeoId': 'nuts/ES212'}" +"","{'GeoId': 'nuts/ES213'}" +"","{'GeoId': 'nuts/ES22'}" +"","{'GeoId': 'nuts/ES220'}" +"","{'GeoId': 'nuts/ES23'}" +"","{'GeoId': 'nuts/ES230'}" +"","{'GeoId': 'nuts/ES24'}" +"","{'GeoId': 'nuts/ES241'}" +"","{'GeoId': 'nuts/ES242'}" +"","{'GeoId': 'nuts/ES243'}" +"","{'GeoId': 'nuts/ES3'}" +"","{'GeoId': 'nuts/ES30'}" +"","{'GeoId': 'nuts/ES300'}" +"","{'GeoId': 'nuts/ES4'}" +"","{'GeoId': 'nuts/ES41'}" +"","{'GeoId': 'nuts/ES411'}" +"","{'GeoId': 'nuts/ES412'}" +"","{'GeoId': 'nuts/ES413'}" +"","{'GeoId': 'nuts/ES414'}" +"","{'GeoId': 'nuts/ES415'}" +"","{'GeoId': 'nuts/ES416'}" +"","{'GeoId': 'nuts/ES417'}" +"","{'GeoId': 'nuts/ES418'}" +"","{'GeoId': 'nuts/ES419'}" +"","{'GeoId': 'nuts/ES42'}" +"","{'GeoId': 'nuts/ES421'}" +"","{'GeoId': 'nuts/ES422'}" +"","{'GeoId': 'nuts/ES423'}" +"","{'GeoId': 'nuts/ES424'}" +"","{'GeoId': 'nuts/ES425'}" +"","{'GeoId': 'nuts/ES43'}" +"","{'GeoId': 'nuts/ES431'}" +"","{'GeoId': 'nuts/ES432'}" +"","{'GeoId': 'nuts/ES5'}" +"","{'GeoId': 'nuts/ES51'}" +"","{'GeoId': 'nuts/ES511'}" +"","{'GeoId': 'nuts/ES512'}" +"","{'GeoId': 'nuts/ES513'}" +"","{'GeoId': 'nuts/ES514'}" +"","{'GeoId': 'nuts/ES52'}" +"","{'GeoId': 'nuts/ES521'}" +"","{'GeoId': 'nuts/ES522'}" +"","{'GeoId': 'nuts/ES523'}" +"","{'GeoId': 'nuts/ES53'}" +"","{'GeoId': 'nuts/ES531'}" +"","{'GeoId': 'nuts/ES532'}" +"","{'GeoId': 'nuts/ES533'}" +"","{'GeoId': 'nuts/ES6'}" +"","{'GeoId': 'nuts/ES61'}" +"","{'GeoId': 'nuts/ES611'}" +"","{'GeoId': 'nuts/ES612'}" +"","{'GeoId': 'nuts/ES613'}" +"","{'GeoId': 'nuts/ES614'}" +"","{'GeoId': 'nuts/ES615'}" +"","{'GeoId': 'nuts/ES616'}" +"","{'GeoId': 'nuts/ES617'}" +"","{'GeoId': 'nuts/ES618'}" +"","{'GeoId': 'nuts/ES62'}" +"","{'GeoId': 'nuts/ES620'}" +"","{'GeoId': 'nuts/ES63'}" +"","{'GeoId': 'nuts/ES630'}" +"","{'GeoId': 'nuts/ES64'}" +"","{'GeoId': 'nuts/ES640'}" +"","{'GeoId': 'nuts/ES7'}" +"","{'GeoId': 'nuts/ES70'}" +"","{'GeoId': 'nuts/ES704'}" +"","{'GeoId': 'nuts/ES705'}" +"","{'GeoId': 'nuts/ES706'}" +"","{'GeoId': 'nuts/ES707'}" +"","{'GeoId': 'nuts/ES708'}" +"","{'GeoId': 'nuts/ES709'}" +"","{'GeoId': 'nuts/FI1'}" +"","{'GeoId': 'nuts/FI19'}" +"","{'GeoId': 'nuts/FI193'}" +"","{'GeoId': 'nuts/FI194'}" +"","{'GeoId': 'nuts/FI195'}" +"","{'GeoId': 'nuts/FI196'}" +"","{'GeoId': 'nuts/FI197'}" +"","{'GeoId': 'nuts/FI1B'}" +"","{'GeoId': 'nuts/FI1B1'}" +"","{'GeoId': 'nuts/FI1C'}" +"","{'GeoId': 'nuts/FI1C1'}" +"","{'GeoId': 'nuts/FI1C2'}" +"","{'GeoId': 'nuts/FI1C3'}" +"","{'GeoId': 'nuts/FI1C4'}" +"","{'GeoId': 'nuts/FI1C5'}" +"","{'GeoId': 'nuts/FI1D'}" +"","{'GeoId': 'nuts/FI1D1'}" +"","{'GeoId': 'nuts/FI1D2'}" +"","{'GeoId': 'nuts/FI1D3'}" +"","{'GeoId': 'nuts/FI1D5'}" +"","{'GeoId': 'nuts/FI1D7'}" +"","{'GeoId': 'nuts/FI1D8'}" +"","{'GeoId': 'nuts/FI1D9'}" +"","{'GeoId': 'nuts/FI2'}" +"","{'GeoId': 'nuts/FI20'}" +"","{'GeoId': 'nuts/FI200'}" +"","{'GeoId': 'nuts/FR1'}" +"","{'GeoId': 'nuts/FR10'}" +"","{'GeoId': 'nuts/FR101'}" +"","{'GeoId': 'nuts/FR102'}" +"","{'GeoId': 'nuts/FR103'}" +"","{'GeoId': 'nuts/FR104'}" +"","{'GeoId': 'nuts/FR105'}" +"","{'GeoId': 'nuts/FR106'}" +"","{'GeoId': 'nuts/FR107'}" +"","{'GeoId': 'nuts/FR108'}" +"","{'GeoId': 'nuts/FRB'}" +"","{'GeoId': 'nuts/FRB0'}" +"","{'GeoId': 'nuts/FRB01'}" +"","{'GeoId': 'nuts/FRB02'}" +"","{'GeoId': 'nuts/FRB03'}" +"","{'GeoId': 'nuts/FRB04'}" +"","{'GeoId': 'nuts/FRB05'}" +"","{'GeoId': 'nuts/FRB06'}" +"","{'GeoId': 'nuts/FRC'}" +"","{'GeoId': 'nuts/FRC1'}" +"","{'GeoId': 'nuts/FRC11'}" +"","{'GeoId': 'nuts/FRC12'}" +"","{'GeoId': 'nuts/FRC13'}" +"","{'GeoId': 'nuts/FRC14'}" +"","{'GeoId': 'nuts/FRC2'}" +"","{'GeoId': 'nuts/FRC21'}" +"","{'GeoId': 'nuts/FRC22'}" +"","{'GeoId': 'nuts/FRC23'}" +"","{'GeoId': 'nuts/FRC24'}" +"","{'GeoId': 'nuts/FRD'}" +"","{'GeoId': 'nuts/FRD1'}" +"","{'GeoId': 'nuts/FRD11'}" +"","{'GeoId': 'nuts/FRD12'}" +"","{'GeoId': 'nuts/FRD13'}" +"","{'GeoId': 'nuts/FRD2'}" +"","{'GeoId': 'nuts/FRD21'}" +"","{'GeoId': 'nuts/FRD22'}" +"","{'GeoId': 'nuts/FRE'}" +"","{'GeoId': 'nuts/FRE1'}" +"","{'GeoId': 'nuts/FRE11'}" +"","{'GeoId': 'nuts/FRE12'}" +"","{'GeoId': 'nuts/FRE2'}" +"","{'GeoId': 'nuts/FRE21'}" +"","{'GeoId': 'nuts/FRE22'}" +"","{'GeoId': 'nuts/FRE23'}" +"","{'GeoId': 'nuts/FRF'}" +"","{'GeoId': 'nuts/FRF1'}" +"","{'GeoId': 'nuts/FRF11'}" +"","{'GeoId': 'nuts/FRF12'}" +"","{'GeoId': 'nuts/FRF2'}" +"","{'GeoId': 'nuts/FRF21'}" +"","{'GeoId': 'nuts/FRF22'}" +"","{'GeoId': 'nuts/FRF23'}" +"","{'GeoId': 'nuts/FRF24'}" +"","{'GeoId': 'nuts/FRF3'}" +"","{'GeoId': 'nuts/FRF31'}" +"","{'GeoId': 'nuts/FRF32'}" +"","{'GeoId': 'nuts/FRF33'}" +"","{'GeoId': 'nuts/FRF34'}" +"","{'GeoId': 'nuts/FRG'}" +"","{'GeoId': 'nuts/FRG0'}" +"","{'GeoId': 'nuts/FRG01'}" +"","{'GeoId': 'nuts/FRG02'}" +"","{'GeoId': 'nuts/FRG03'}" +"","{'GeoId': 'nuts/FRG04'}" +"","{'GeoId': 'nuts/FRG05'}" +"","{'GeoId': 'nuts/FRH'}" +"","{'GeoId': 'nuts/FRH0'}" +"","{'GeoId': 'nuts/FRH01'}" +"","{'GeoId': 'nuts/FRH02'}" +"","{'GeoId': 'nuts/FRH03'}" +"","{'GeoId': 'nuts/FRH04'}" +"","{'GeoId': 'nuts/FRI'}" +"","{'GeoId': 'nuts/FRI1'}" +"","{'GeoId': 'nuts/FRI11'}" +"","{'GeoId': 'nuts/FRI12'}" +"","{'GeoId': 'nuts/FRI13'}" +"","{'GeoId': 'nuts/FRI14'}" +"","{'GeoId': 'nuts/FRI15'}" +"","{'GeoId': 'nuts/FRI2'}" +"","{'GeoId': 'nuts/FRI21'}" +"","{'GeoId': 'nuts/FRI22'}" +"","{'GeoId': 'nuts/FRI23'}" +"","{'GeoId': 'nuts/FRI3'}" +"","{'GeoId': 'nuts/FRI31'}" +"","{'GeoId': 'nuts/FRI32'}" +"","{'GeoId': 'nuts/FRI33'}" +"","{'GeoId': 'nuts/FRI34'}" +"","{'GeoId': 'nuts/FRJ'}" +"","{'GeoId': 'nuts/FRJ1'}" +"","{'GeoId': 'nuts/FRJ11'}" +"","{'GeoId': 'nuts/FRJ12'}" +"","{'GeoId': 'nuts/FRJ13'}" +"","{'GeoId': 'nuts/FRJ14'}" +"","{'GeoId': 'nuts/FRJ15'}" +"","{'GeoId': 'nuts/FRJ2'}" +"","{'GeoId': 'nuts/FRJ21'}" +"","{'GeoId': 'nuts/FRJ22'}" +"","{'GeoId': 'nuts/FRJ23'}" +"","{'GeoId': 'nuts/FRJ24'}" +"","{'GeoId': 'nuts/FRJ25'}" +"","{'GeoId': 'nuts/FRJ26'}" +"","{'GeoId': 'nuts/FRJ27'}" +"","{'GeoId': 'nuts/FRJ28'}" +"","{'GeoId': 'nuts/FRK'}" +"","{'GeoId': 'nuts/FRK1'}" +"","{'GeoId': 'nuts/FRK11'}" +"","{'GeoId': 'nuts/FRK12'}" +"","{'GeoId': 'nuts/FRK13'}" +"","{'GeoId': 'nuts/FRK14'}" +"","{'GeoId': 'nuts/FRK2'}" +"","{'GeoId': 'nuts/FRK21'}" +"","{'GeoId': 'nuts/FRK22'}" +"","{'GeoId': 'nuts/FRK23'}" +"","{'GeoId': 'nuts/FRK24'}" +"","{'GeoId': 'nuts/FRK25'}" +"","{'GeoId': 'nuts/FRK26'}" +"","{'GeoId': 'nuts/FRK27'}" +"","{'GeoId': 'nuts/FRK28'}" +"","{'GeoId': 'nuts/FRL'}" +"","{'GeoId': 'nuts/FRL0'}" +"","{'GeoId': 'nuts/FRL01'}" +"","{'GeoId': 'nuts/FRL02'}" +"","{'GeoId': 'nuts/FRL03'}" +"","{'GeoId': 'nuts/FRL04'}" +"","{'GeoId': 'nuts/FRL05'}" +"","{'GeoId': 'nuts/FRL06'}" +"","{'GeoId': 'nuts/FRM'}" +"","{'GeoId': 'nuts/FRM0'}" +"","{'GeoId': 'nuts/FRM01'}" +"","{'GeoId': 'nuts/FRM02'}" +"","{'GeoId': 'nuts/FRY'}" +"","{'GeoId': 'nuts/FRY1'}" +"","{'GeoId': 'nuts/FRY10'}" +"","{'GeoId': 'nuts/FRY2'}" +"","{'GeoId': 'nuts/FRY20'}" +"","{'GeoId': 'nuts/FRY3'}" +"","{'GeoId': 'nuts/FRY30'}" +"","{'GeoId': 'nuts/FRY4'}" +"","{'GeoId': 'nuts/FRY40'}" +"","{'GeoId': 'nuts/FRY5'}" +"","{'GeoId': 'nuts/FRY50'}" +"","{'GeoId': 'nuts/HR0'}" +"","{'GeoId': 'nuts/HR02'}" +"","{'GeoId': 'nuts/HR021'}" +"","{'GeoId': 'nuts/HR022'}" +"","{'GeoId': 'nuts/HR023'}" +"","{'GeoId': 'nuts/HR024'}" +"","{'GeoId': 'nuts/HR025'}" +"","{'GeoId': 'nuts/HR026'}" +"","{'GeoId': 'nuts/HR027'}" +"","{'GeoId': 'nuts/HR028'}" +"","{'GeoId': 'nuts/HR03'}" +"","{'GeoId': 'nuts/HR031'}" +"","{'GeoId': 'nuts/HR032'}" +"","{'GeoId': 'nuts/HR033'}" +"","{'GeoId': 'nuts/HR034'}" +"","{'GeoId': 'nuts/HR035'}" +"","{'GeoId': 'nuts/HR036'}" +"","{'GeoId': 'nuts/HR037'}" +"","{'GeoId': 'nuts/HR04'}" +"","{'GeoId': 'nuts/HR041'}" +"","{'GeoId': 'nuts/HR042'}" +"","{'GeoId': 'nuts/HR043'}" +"","{'GeoId': 'nuts/HR044'}" +"","{'GeoId': 'nuts/HR045'}" +"","{'GeoId': 'nuts/HR046'}" +"","{'GeoId': 'nuts/HR047'}" +"","{'GeoId': 'nuts/HR048'}" +"","{'GeoId': 'nuts/HR049'}" +"","{'GeoId': 'nuts/HR04A'}" +"","{'GeoId': 'nuts/HR04B'}" +"","{'GeoId': 'nuts/HR04C'}" +"","{'GeoId': 'nuts/HR04D'}" +"","{'GeoId': 'nuts/HR04E'}" +"","{'GeoId': 'nuts/HR05'}" +"","{'GeoId': 'nuts/HR050'}" +"","{'GeoId': 'nuts/HR06'}" +"","{'GeoId': 'nuts/HR061'}" +"","{'GeoId': 'nuts/HR062'}" +"","{'GeoId': 'nuts/HR063'}" +"","{'GeoId': 'nuts/HR064'}" +"","{'GeoId': 'nuts/HR065'}" +"","{'GeoId': 'nuts/HU1'}" +"","{'GeoId': 'nuts/HU11'}" +"","{'GeoId': 'nuts/HU110'}" +"","{'GeoId': 'nuts/HU12'}" +"","{'GeoId': 'nuts/HU120'}" +"","{'GeoId': 'nuts/HU2'}" +"","{'GeoId': 'nuts/HU21'}" +"","{'GeoId': 'nuts/HU211'}" +"","{'GeoId': 'nuts/HU212'}" +"","{'GeoId': 'nuts/HU213'}" +"","{'GeoId': 'nuts/HU22'}" +"","{'GeoId': 'nuts/HU221'}" +"","{'GeoId': 'nuts/HU222'}" +"","{'GeoId': 'nuts/HU223'}" +"","{'GeoId': 'nuts/HU23'}" +"","{'GeoId': 'nuts/HU231'}" +"","{'GeoId': 'nuts/HU232'}" +"","{'GeoId': 'nuts/HU233'}" +"","{'GeoId': 'nuts/HU3'}" +"","{'GeoId': 'nuts/HU31'}" +"","{'GeoId': 'nuts/HU311'}" +"","{'GeoId': 'nuts/HU312'}" +"","{'GeoId': 'nuts/HU313'}" +"","{'GeoId': 'nuts/HU32'}" +"","{'GeoId': 'nuts/HU321'}" +"","{'GeoId': 'nuts/HU322'}" +"","{'GeoId': 'nuts/HU323'}" +"","{'GeoId': 'nuts/HU33'}" +"","{'GeoId': 'nuts/HU331'}" +"","{'GeoId': 'nuts/HU332'}" +"","{'GeoId': 'nuts/HU333'}" +"","{'GeoId': 'nuts/IE0'}" +"","{'GeoId': 'nuts/IE04'}" +"","{'GeoId': 'nuts/IE041'}" +"","{'GeoId': 'nuts/IE042'}" +"","{'GeoId': 'nuts/IE05'}" +"","{'GeoId': 'nuts/IE051'}" +"","{'GeoId': 'nuts/IE052'}" +"","{'GeoId': 'nuts/IE053'}" +"","{'GeoId': 'nuts/IE06'}" +"","{'GeoId': 'nuts/IE061'}" +"","{'GeoId': 'nuts/IE062'}" +"","{'GeoId': 'nuts/IE063'}" +"","{'GeoId': 'nuts/IS0'}" +"","{'GeoId': 'nuts/IS00'}" +"","{'GeoId': 'nuts/IS001'}" +"","{'GeoId': 'nuts/IS002'}" +"","{'GeoId': 'nuts/ITC'}" +"","{'GeoId': 'nuts/ITC1'}" +"","{'GeoId': 'nuts/ITC11'}" +"","{'GeoId': 'nuts/ITC12'}" +"","{'GeoId': 'nuts/ITC13'}" +"","{'GeoId': 'nuts/ITC14'}" +"","{'GeoId': 'nuts/ITC15'}" +"","{'GeoId': 'nuts/ITC16'}" +"","{'GeoId': 'nuts/ITC17'}" +"","{'GeoId': 'nuts/ITC18'}" +"","{'GeoId': 'nuts/ITC2'}" +"","{'GeoId': 'nuts/ITC20'}" +"","{'GeoId': 'nuts/ITC3'}" +"","{'GeoId': 'nuts/ITC31'}" +"","{'GeoId': 'nuts/ITC32'}" +"","{'GeoId': 'nuts/ITC33'}" +"","{'GeoId': 'nuts/ITC34'}" +"","{'GeoId': 'nuts/ITC4'}" +"","{'GeoId': 'nuts/ITC41'}" +"","{'GeoId': 'nuts/ITC42'}" +"","{'GeoId': 'nuts/ITC43'}" +"","{'GeoId': 'nuts/ITC44'}" +"","{'GeoId': 'nuts/ITC46'}" +"","{'GeoId': 'nuts/ITC47'}" +"","{'GeoId': 'nuts/ITC48'}" +"","{'GeoId': 'nuts/ITC49'}" +"","{'GeoId': 'nuts/ITC4A'}" +"","{'GeoId': 'nuts/ITC4B'}" +"","{'GeoId': 'nuts/ITC4C'}" +"","{'GeoId': 'nuts/ITC4D'}" +"","{'GeoId': 'nuts/ITF'}" +"","{'GeoId': 'nuts/ITF1'}" +"","{'GeoId': 'nuts/ITF11'}" +"","{'GeoId': 'nuts/ITF12'}" +"","{'GeoId': 'nuts/ITF13'}" +"","{'GeoId': 'nuts/ITF14'}" +"","{'GeoId': 'nuts/ITF2'}" +"","{'GeoId': 'nuts/ITF21'}" +"","{'GeoId': 'nuts/ITF22'}" +"","{'GeoId': 'nuts/ITF3'}" +"","{'GeoId': 'nuts/ITF31'}" +"","{'GeoId': 'nuts/ITF32'}" +"","{'GeoId': 'nuts/ITF33'}" +"","{'GeoId': 'nuts/ITF34'}" +"","{'GeoId': 'nuts/ITF35'}" +"","{'GeoId': 'nuts/ITF4'}" +"","{'GeoId': 'nuts/ITF43'}" +"","{'GeoId': 'nuts/ITF44'}" +"","{'GeoId': 'nuts/ITF45'}" +"","{'GeoId': 'nuts/ITF46'}" +"","{'GeoId': 'nuts/ITF47'}" +"","{'GeoId': 'nuts/ITF48'}" +"","{'GeoId': 'nuts/ITF5'}" +"","{'GeoId': 'nuts/ITF51'}" +"","{'GeoId': 'nuts/ITF52'}" +"","{'GeoId': 'nuts/ITF6'}" +"","{'GeoId': 'nuts/ITF61'}" +"","{'GeoId': 'nuts/ITF62'}" +"","{'GeoId': 'nuts/ITF63'}" +"","{'GeoId': 'nuts/ITF64'}" +"","{'GeoId': 'nuts/ITF65'}" +"","{'GeoId': 'nuts/ITG'}" +"","{'GeoId': 'nuts/ITG1'}" +"","{'GeoId': 'nuts/ITG11'}" +"","{'GeoId': 'nuts/ITG12'}" +"","{'GeoId': 'nuts/ITG13'}" +"","{'GeoId': 'nuts/ITG14'}" +"","{'GeoId': 'nuts/ITG15'}" +"","{'GeoId': 'nuts/ITG16'}" +"","{'GeoId': 'nuts/ITG17'}" +"","{'GeoId': 'nuts/ITG18'}" +"","{'GeoId': 'nuts/ITG19'}" +"","{'GeoId': 'nuts/ITG2'}" +"","{'GeoId': 'nuts/ITG25'}" +"","{'GeoId': 'nuts/ITG26'}" +"","{'GeoId': 'nuts/ITG27'}" +"","{'GeoId': 'nuts/ITG28'}" +"","{'GeoId': 'nuts/ITG29'}" +"","{'GeoId': 'nuts/ITG2A'}" +"","{'GeoId': 'nuts/ITG2B'}" +"","{'GeoId': 'nuts/ITG2C'}" +"","{'GeoId': 'nuts/ITG2D'}" +"","{'GeoId': 'nuts/ITG2E'}" +"","{'GeoId': 'nuts/ITG2F'}" +"","{'GeoId': 'nuts/ITG2G'}" +"","{'GeoId': 'nuts/ITG2H'}" +"","{'GeoId': 'nuts/ITH'}" +"","{'GeoId': 'nuts/ITH1'}" +"","{'GeoId': 'nuts/ITH10'}" +"","{'GeoId': 'nuts/ITH2'}" +"","{'GeoId': 'nuts/ITH20'}" +"","{'GeoId': 'nuts/ITH3'}" +"","{'GeoId': 'nuts/ITH31'}" +"","{'GeoId': 'nuts/ITH32'}" +"","{'GeoId': 'nuts/ITH33'}" +"","{'GeoId': 'nuts/ITH34'}" +"","{'GeoId': 'nuts/ITH35'}" +"","{'GeoId': 'nuts/ITH36'}" +"","{'GeoId': 'nuts/ITH37'}" +"","{'GeoId': 'nuts/ITH4'}" +"","{'GeoId': 'nuts/ITH41'}" +"","{'GeoId': 'nuts/ITH42'}" +"","{'GeoId': 'nuts/ITH43'}" +"","{'GeoId': 'nuts/ITH44'}" +"","{'GeoId': 'nuts/ITH5'}" +"","{'GeoId': 'nuts/ITH51'}" +"","{'GeoId': 'nuts/ITH52'}" +"","{'GeoId': 'nuts/ITH53'}" +"","{'GeoId': 'nuts/ITH54'}" +"","{'GeoId': 'nuts/ITH55'}" +"","{'GeoId': 'nuts/ITH56'}" +"","{'GeoId': 'nuts/ITH57'}" +"","{'GeoId': 'nuts/ITH58'}" +"","{'GeoId': 'nuts/ITH59'}" +"","{'GeoId': 'nuts/ITI'}" +"","{'GeoId': 'nuts/ITI1'}" +"","{'GeoId': 'nuts/ITI11'}" +"","{'GeoId': 'nuts/ITI12'}" +"","{'GeoId': 'nuts/ITI13'}" +"","{'GeoId': 'nuts/ITI14'}" +"","{'GeoId': 'nuts/ITI15'}" +"","{'GeoId': 'nuts/ITI16'}" +"","{'GeoId': 'nuts/ITI17'}" +"","{'GeoId': 'nuts/ITI18'}" +"","{'GeoId': 'nuts/ITI19'}" +"","{'GeoId': 'nuts/ITI1A'}" +"","{'GeoId': 'nuts/ITI2'}" +"","{'GeoId': 'nuts/ITI21'}" +"","{'GeoId': 'nuts/ITI22'}" +"","{'GeoId': 'nuts/ITI3'}" +"","{'GeoId': 'nuts/ITI31'}" +"","{'GeoId': 'nuts/ITI32'}" +"","{'GeoId': 'nuts/ITI33'}" +"","{'GeoId': 'nuts/ITI34'}" +"","{'GeoId': 'nuts/ITI35'}" +"","{'GeoId': 'nuts/ITI4'}" +"","{'GeoId': 'nuts/ITI41'}" +"","{'GeoId': 'nuts/ITI42'}" +"","{'GeoId': 'nuts/ITI43'}" +"","{'GeoId': 'nuts/ITI44'}" +"","{'GeoId': 'nuts/ITI45'}" +"","{'GeoId': 'nuts/LI0'}" +"","{'GeoId': 'nuts/LI00'}" +"","{'GeoId': 'nuts/LI000'}" +"","{'GeoId': 'nuts/LT0'}" +"","{'GeoId': 'nuts/LT01'}" +"","{'GeoId': 'nuts/LT011'}" +"","{'GeoId': 'nuts/LT02'}" +"","{'GeoId': 'nuts/LT021'}" +"","{'GeoId': 'nuts/LT022'}" +"","{'GeoId': 'nuts/LT023'}" +"","{'GeoId': 'nuts/LT024'}" +"","{'GeoId': 'nuts/LT025'}" +"","{'GeoId': 'nuts/LT026'}" +"","{'GeoId': 'nuts/LT027'}" +"","{'GeoId': 'nuts/LT028'}" +"","{'GeoId': 'nuts/LT029'}" +"","{'GeoId': 'nuts/LU0'}" +"","{'GeoId': 'nuts/LU00'}" +"","{'GeoId': 'nuts/LU000'}" +"","{'GeoId': 'nuts/LV0'}" +"","{'GeoId': 'nuts/LV00'}" +"","{'GeoId': 'nuts/LV003'}" +"","{'GeoId': 'nuts/LV005'}" +"","{'GeoId': 'nuts/LV006'}" +"","{'GeoId': 'nuts/LV007'}" +"","{'GeoId': 'nuts/LV008'}" +"","{'GeoId': 'nuts/LV009'}" +"","{'GeoId': 'nuts/ME0'}" +"","{'GeoId': 'nuts/ME00'}" +"","{'GeoId': 'nuts/ME000'}" +"","{'GeoId': 'nuts/MK0'}" +"","{'GeoId': 'nuts/MK00'}" +"","{'GeoId': 'nuts/MK001'}" +"","{'GeoId': 'nuts/MK002'}" +"","{'GeoId': 'nuts/MK003'}" +"","{'GeoId': 'nuts/MK004'}" +"","{'GeoId': 'nuts/MK005'}" +"","{'GeoId': 'nuts/MK006'}" +"","{'GeoId': 'nuts/MK007'}" +"","{'GeoId': 'nuts/MK008'}" +"","{'GeoId': 'nuts/MT0'}" +"","{'GeoId': 'nuts/MT00'}" +"","{'GeoId': 'nuts/MT001'}" +"","{'GeoId': 'nuts/MT002'}" +"","{'GeoId': 'nuts/NL1'}" +"","{'GeoId': 'nuts/NL11'}" +"","{'GeoId': 'nuts/NL111'}" +"","{'GeoId': 'nuts/NL112'}" +"","{'GeoId': 'nuts/NL113'}" +"","{'GeoId': 'nuts/NL12'}" +"","{'GeoId': 'nuts/NL124'}" +"","{'GeoId': 'nuts/NL125'}" +"","{'GeoId': 'nuts/NL126'}" +"","{'GeoId': 'nuts/NL13'}" +"","{'GeoId': 'nuts/NL131'}" +"","{'GeoId': 'nuts/NL132'}" +"","{'GeoId': 'nuts/NL133'}" +"","{'GeoId': 'nuts/NL2'}" +"","{'GeoId': 'nuts/NL21'}" +"","{'GeoId': 'nuts/NL211'}" +"","{'GeoId': 'nuts/NL212'}" +"","{'GeoId': 'nuts/NL213'}" +"","{'GeoId': 'nuts/NL22'}" +"","{'GeoId': 'nuts/NL221'}" +"","{'GeoId': 'nuts/NL224'}" +"","{'GeoId': 'nuts/NL225'}" +"","{'GeoId': 'nuts/NL226'}" +"","{'GeoId': 'nuts/NL23'}" +"","{'GeoId': 'nuts/NL230'}" +"","{'GeoId': 'nuts/NL3'}" +"","{'GeoId': 'nuts/NL31'}" +"","{'GeoId': 'nuts/NL310'}" +"","{'GeoId': 'nuts/NL32'}" +"","{'GeoId': 'nuts/NL321'}" +"","{'GeoId': 'nuts/NL323'}" +"","{'GeoId': 'nuts/NL324'}" +"","{'GeoId': 'nuts/NL325'}" +"","{'GeoId': 'nuts/NL327'}" +"","{'GeoId': 'nuts/NL328'}" +"","{'GeoId': 'nuts/NL329'}" +"","{'GeoId': 'nuts/NL33'}" +"","{'GeoId': 'nuts/NL332'}" +"","{'GeoId': 'nuts/NL333'}" +"","{'GeoId': 'nuts/NL337'}" +"","{'GeoId': 'nuts/NL33A'}" +"","{'GeoId': 'nuts/NL33B'}" +"","{'GeoId': 'nuts/NL33C'}" +"","{'GeoId': 'nuts/NL34'}" +"","{'GeoId': 'nuts/NL341'}" +"","{'GeoId': 'nuts/NL342'}" +"","{'GeoId': 'nuts/NL4'}" +"","{'GeoId': 'nuts/NL41'}" +"","{'GeoId': 'nuts/NL411'}" +"","{'GeoId': 'nuts/NL412'}" +"","{'GeoId': 'nuts/NL413'}" +"","{'GeoId': 'nuts/NL414'}" +"","{'GeoId': 'nuts/NL42'}" +"","{'GeoId': 'nuts/NL421'}" +"","{'GeoId': 'nuts/NL422'}" +"","{'GeoId': 'nuts/NL423'}" +"","{'GeoId': 'nuts/NO0'}" +"","{'GeoId': 'nuts/NO01'}" +"","{'GeoId': 'nuts/NO011'}" +"","{'GeoId': 'nuts/NO012'}" +"","{'GeoId': 'nuts/NO02'}" +"","{'GeoId': 'nuts/NO020'}" +"","{'GeoId': 'nuts/NO021'}" +"","{'GeoId': 'nuts/NO022'}" +"","{'GeoId': 'nuts/NO03'}" +"","{'GeoId': 'nuts/NO031'}" +"","{'GeoId': 'nuts/NO032'}" +"","{'GeoId': 'nuts/NO033'}" +"","{'GeoId': 'nuts/NO034'}" +"","{'GeoId': 'nuts/NO04'}" +"","{'GeoId': 'nuts/NO041'}" +"","{'GeoId': 'nuts/NO042'}" +"","{'GeoId': 'nuts/NO043'}" +"","{'GeoId': 'nuts/NO05'}" +"","{'GeoId': 'nuts/NO051'}" +"","{'GeoId': 'nuts/NO052'}" +"","{'GeoId': 'nuts/NO053'}" +"","{'GeoId': 'nuts/NO06'}" +"","{'GeoId': 'nuts/NO060'}" +"","{'GeoId': 'nuts/NO061'}" +"","{'GeoId': 'nuts/NO062'}" +"","{'GeoId': 'nuts/NO07'}" +"","{'GeoId': 'nuts/NO071'}" +"","{'GeoId': 'nuts/NO072'}" +"","{'GeoId': 'nuts/NO073'}" +"","{'GeoId': 'nuts/NO074'}" +"","{'GeoId': 'nuts/NO08'}" +"","{'GeoId': 'nuts/NO081'}" +"","{'GeoId': 'nuts/NO082'}" +"","{'GeoId': 'nuts/NO09'}" +"","{'GeoId': 'nuts/NO091'}" +"","{'GeoId': 'nuts/NO092'}" +"","{'GeoId': 'nuts/NO0A'}" +"","{'GeoId': 'nuts/NO0A1'}" +"","{'GeoId': 'nuts/NO0A2'}" +"","{'GeoId': 'nuts/NO0A3'}" +"","{'GeoId': 'nuts/PL2'}" +"","{'GeoId': 'nuts/PL21'}" +"","{'GeoId': 'nuts/PL213'}" +"","{'GeoId': 'nuts/PL214'}" +"","{'GeoId': 'nuts/PL217'}" +"","{'GeoId': 'nuts/PL218'}" +"","{'GeoId': 'nuts/PL219'}" +"","{'GeoId': 'nuts/PL21A'}" +"","{'GeoId': 'nuts/PL22'}" +"","{'GeoId': 'nuts/PL224'}" +"","{'GeoId': 'nuts/PL225'}" +"","{'GeoId': 'nuts/PL227'}" +"","{'GeoId': 'nuts/PL228'}" +"","{'GeoId': 'nuts/PL229'}" +"","{'GeoId': 'nuts/PL22A'}" +"","{'GeoId': 'nuts/PL22B'}" +"","{'GeoId': 'nuts/PL22C'}" +"","{'GeoId': 'nuts/PL4'}" +"","{'GeoId': 'nuts/PL41'}" +"","{'GeoId': 'nuts/PL411'}" +"","{'GeoId': 'nuts/PL414'}" +"","{'GeoId': 'nuts/PL415'}" +"","{'GeoId': 'nuts/PL416'}" +"","{'GeoId': 'nuts/PL417'}" +"","{'GeoId': 'nuts/PL418'}" +"","{'GeoId': 'nuts/PL42'}" +"","{'GeoId': 'nuts/PL424'}" +"","{'GeoId': 'nuts/PL426'}" +"","{'GeoId': 'nuts/PL427'}" +"","{'GeoId': 'nuts/PL428'}" +"","{'GeoId': 'nuts/PL43'}" +"","{'GeoId': 'nuts/PL431'}" +"","{'GeoId': 'nuts/PL432'}" +"","{'GeoId': 'nuts/PL5'}" +"","{'GeoId': 'nuts/PL51'}" +"","{'GeoId': 'nuts/PL514'}" +"","{'GeoId': 'nuts/PL515'}" +"","{'GeoId': 'nuts/PL516'}" +"","{'GeoId': 'nuts/PL517'}" +"","{'GeoId': 'nuts/PL518'}" +"","{'GeoId': 'nuts/PL52'}" +"","{'GeoId': 'nuts/PL523'}" +"","{'GeoId': 'nuts/PL524'}" +"","{'GeoId': 'nuts/PL6'}" +"","{'GeoId': 'nuts/PL61'}" +"","{'GeoId': 'nuts/PL613'}" +"","{'GeoId': 'nuts/PL616'}" +"","{'GeoId': 'nuts/PL617'}" +"","{'GeoId': 'nuts/PL618'}" +"","{'GeoId': 'nuts/PL619'}" +"","{'GeoId': 'nuts/PL62'}" +"","{'GeoId': 'nuts/PL621'}" +"","{'GeoId': 'nuts/PL622'}" +"","{'GeoId': 'nuts/PL623'}" +"","{'GeoId': 'nuts/PL63'}" +"","{'GeoId': 'nuts/PL633'}" +"","{'GeoId': 'nuts/PL634'}" +"","{'GeoId': 'nuts/PL636'}" +"","{'GeoId': 'nuts/PL637'}" +"","{'GeoId': 'nuts/PL638'}" +"","{'GeoId': 'nuts/PL7'}" +"","{'GeoId': 'nuts/PL71'}" +"","{'GeoId': 'nuts/PL711'}" +"","{'GeoId': 'nuts/PL712'}" +"","{'GeoId': 'nuts/PL713'}" +"","{'GeoId': 'nuts/PL714'}" +"","{'GeoId': 'nuts/PL715'}" +"","{'GeoId': 'nuts/PL72'}" +"","{'GeoId': 'nuts/PL721'}" +"","{'GeoId': 'nuts/PL722'}" +"","{'GeoId': 'nuts/PL8'}" +"","{'GeoId': 'nuts/PL81'}" +"","{'GeoId': 'nuts/PL811'}" +"","{'GeoId': 'nuts/PL812'}" +"","{'GeoId': 'nuts/PL814'}" +"","{'GeoId': 'nuts/PL815'}" +"","{'GeoId': 'nuts/PL82'}" +"","{'GeoId': 'nuts/PL821'}" +"","{'GeoId': 'nuts/PL822'}" +"","{'GeoId': 'nuts/PL823'}" +"","{'GeoId': 'nuts/PL824'}" +"","{'GeoId': 'nuts/PL84'}" +"","{'GeoId': 'nuts/PL841'}" +"","{'GeoId': 'nuts/PL842'}" +"","{'GeoId': 'nuts/PL843'}" +"","{'GeoId': 'nuts/PL9'}" +"","{'GeoId': 'nuts/PL91'}" +"","{'GeoId': 'nuts/PL911'}" +"","{'GeoId': 'nuts/PL912'}" +"","{'GeoId': 'nuts/PL913'}" +"","{'GeoId': 'nuts/PL92'}" +"","{'GeoId': 'nuts/PL921'}" +"","{'GeoId': 'nuts/PL922'}" +"","{'GeoId': 'nuts/PL923'}" +"","{'GeoId': 'nuts/PL924'}" +"","{'GeoId': 'nuts/PL925'}" +"","{'GeoId': 'nuts/PL926'}" +"","{'GeoId': 'nuts/PT1'}" +"","{'GeoId': 'nuts/PT11'}" +"","{'GeoId': 'nuts/PT111'}" +"","{'GeoId': 'nuts/PT112'}" +"","{'GeoId': 'nuts/PT119'}" +"","{'GeoId': 'nuts/PT11A'}" +"","{'GeoId': 'nuts/PT11B'}" +"","{'GeoId': 'nuts/PT11C'}" +"","{'GeoId': 'nuts/PT11D'}" +"","{'GeoId': 'nuts/PT11E'}" +"","{'GeoId': 'nuts/PT15'}" +"","{'GeoId': 'nuts/PT150'}" +"","{'GeoId': 'nuts/PT16'}" +"","{'GeoId': 'nuts/PT16B'}" +"","{'GeoId': 'nuts/PT16D'}" +"","{'GeoId': 'nuts/PT16E'}" +"","{'GeoId': 'nuts/PT16F'}" +"","{'GeoId': 'nuts/PT16G'}" +"","{'GeoId': 'nuts/PT16H'}" +"","{'GeoId': 'nuts/PT16I'}" +"","{'GeoId': 'nuts/PT16J'}" +"","{'GeoId': 'nuts/PT17'}" +"","{'GeoId': 'nuts/PT170'}" +"","{'GeoId': 'nuts/PT18'}" +"","{'GeoId': 'nuts/PT181'}" +"","{'GeoId': 'nuts/PT184'}" +"","{'GeoId': 'nuts/PT185'}" +"","{'GeoId': 'nuts/PT186'}" +"","{'GeoId': 'nuts/PT187'}" +"","{'GeoId': 'nuts/PT2'}" +"","{'GeoId': 'nuts/PT20'}" +"","{'GeoId': 'nuts/PT200'}" +"","{'GeoId': 'nuts/PT3'}" +"","{'GeoId': 'nuts/PT30'}" +"","{'GeoId': 'nuts/PT300'}" +"","{'GeoId': 'nuts/RO1'}" +"","{'GeoId': 'nuts/RO11'}" +"","{'GeoId': 'nuts/RO111'}" +"","{'GeoId': 'nuts/RO112'}" +"","{'GeoId': 'nuts/RO113'}" +"","{'GeoId': 'nuts/RO114'}" +"","{'GeoId': 'nuts/RO115'}" +"","{'GeoId': 'nuts/RO116'}" +"","{'GeoId': 'nuts/RO12'}" +"","{'GeoId': 'nuts/RO121'}" +"","{'GeoId': 'nuts/RO122'}" +"","{'GeoId': 'nuts/RO123'}" +"","{'GeoId': 'nuts/RO124'}" +"","{'GeoId': 'nuts/RO125'}" +"","{'GeoId': 'nuts/RO126'}" +"","{'GeoId': 'nuts/RO2'}" +"","{'GeoId': 'nuts/RO21'}" +"","{'GeoId': 'nuts/RO211'}" +"","{'GeoId': 'nuts/RO212'}" +"","{'GeoId': 'nuts/RO213'}" +"","{'GeoId': 'nuts/RO214'}" +"","{'GeoId': 'nuts/RO215'}" +"","{'GeoId': 'nuts/RO216'}" +"","{'GeoId': 'nuts/RO22'}" +"","{'GeoId': 'nuts/RO221'}" +"","{'GeoId': 'nuts/RO222'}" +"","{'GeoId': 'nuts/RO223'}" +"","{'GeoId': 'nuts/RO224'}" +"","{'GeoId': 'nuts/RO225'}" +"","{'GeoId': 'nuts/RO226'}" +"","{'GeoId': 'nuts/RO3'}" +"","{'GeoId': 'nuts/RO31'}" +"","{'GeoId': 'nuts/RO311'}" +"","{'GeoId': 'nuts/RO312'}" +"","{'GeoId': 'nuts/RO313'}" +"","{'GeoId': 'nuts/RO314'}" +"","{'GeoId': 'nuts/RO315'}" +"","{'GeoId': 'nuts/RO316'}" +"","{'GeoId': 'nuts/RO317'}" +"","{'GeoId': 'nuts/RO32'}" +"","{'GeoId': 'nuts/RO321'}" +"","{'GeoId': 'nuts/RO322'}" +"","{'GeoId': 'nuts/RO4'}" +"","{'GeoId': 'nuts/RO41'}" +"","{'GeoId': 'nuts/RO411'}" +"","{'GeoId': 'nuts/RO412'}" +"","{'GeoId': 'nuts/RO413'}" +"","{'GeoId': 'nuts/RO414'}" +"","{'GeoId': 'nuts/RO415'}" +"","{'GeoId': 'nuts/RO42'}" +"","{'GeoId': 'nuts/RO421'}" +"","{'GeoId': 'nuts/RO422'}" +"","{'GeoId': 'nuts/RO423'}" +"","{'GeoId': 'nuts/RO424'}" +"","{'GeoId': 'nuts/RS1'}" +"","{'GeoId': 'nuts/RS11'}" +"","{'GeoId': 'nuts/RS110'}" +"","{'GeoId': 'nuts/RS12'}" +"","{'GeoId': 'nuts/RS121'}" +"","{'GeoId': 'nuts/RS122'}" +"","{'GeoId': 'nuts/RS123'}" +"","{'GeoId': 'nuts/RS124'}" +"","{'GeoId': 'nuts/RS125'}" +"","{'GeoId': 'nuts/RS126'}" +"","{'GeoId': 'nuts/RS127'}" +"","{'GeoId': 'nuts/RS2'}" +"","{'GeoId': 'nuts/RS21'}" +"","{'GeoId': 'nuts/RS211'}" +"","{'GeoId': 'nuts/RS212'}" +"","{'GeoId': 'nuts/RS213'}" +"","{'GeoId': 'nuts/RS214'}" +"","{'GeoId': 'nuts/RS215'}" +"","{'GeoId': 'nuts/RS216'}" +"","{'GeoId': 'nuts/RS217'}" +"","{'GeoId': 'nuts/RS218'}" +"","{'GeoId': 'nuts/RS22'}" +"","{'GeoId': 'nuts/RS221'}" +"","{'GeoId': 'nuts/RS222'}" +"","{'GeoId': 'nuts/RS223'}" +"","{'GeoId': 'nuts/RS224'}" +"","{'GeoId': 'nuts/RS225'}" +"","{'GeoId': 'nuts/RS226'}" +"","{'GeoId': 'nuts/RS227'}" +"","{'GeoId': 'nuts/RS228'}" +"","{'GeoId': 'nuts/RS229'}" +"","{'GeoId': 'nuts/SE1'}" +"","{'GeoId': 'nuts/SE11'}" +"","{'GeoId': 'nuts/SE110'}" +"","{'GeoId': 'nuts/SE12'}" +"","{'GeoId': 'nuts/SE121'}" +"","{'GeoId': 'nuts/SE122'}" +"","{'GeoId': 'nuts/SE123'}" +"","{'GeoId': 'nuts/SE124'}" +"","{'GeoId': 'nuts/SE125'}" +"","{'GeoId': 'nuts/SE2'}" +"","{'GeoId': 'nuts/SE21'}" +"","{'GeoId': 'nuts/SE211'}" +"","{'GeoId': 'nuts/SE212'}" +"","{'GeoId': 'nuts/SE213'}" +"","{'GeoId': 'nuts/SE214'}" +"","{'GeoId': 'nuts/SE22'}" +"","{'GeoId': 'nuts/SE221'}" +"","{'GeoId': 'nuts/SE224'}" +"","{'GeoId': 'nuts/SE23'}" +"","{'GeoId': 'nuts/SE231'}" +"","{'GeoId': 'nuts/SE232'}" +"","{'GeoId': 'nuts/SE3'}" +"","{'GeoId': 'nuts/SE31'}" +"","{'GeoId': 'nuts/SE311'}" +"","{'GeoId': 'nuts/SE312'}" +"","{'GeoId': 'nuts/SE313'}" +"","{'GeoId': 'nuts/SE32'}" +"","{'GeoId': 'nuts/SE321'}" +"","{'GeoId': 'nuts/SE322'}" +"","{'GeoId': 'nuts/SE33'}" +"","{'GeoId': 'nuts/SE331'}" +"","{'GeoId': 'nuts/SE332'}" +"","{'GeoId': 'nuts/SI0'}" +"","{'GeoId': 'nuts/SI03'}" +"","{'GeoId': 'nuts/SI031'}" +"","{'GeoId': 'nuts/SI032'}" +"","{'GeoId': 'nuts/SI033'}" +"","{'GeoId': 'nuts/SI034'}" +"","{'GeoId': 'nuts/SI035'}" +"","{'GeoId': 'nuts/SI036'}" +"","{'GeoId': 'nuts/SI037'}" +"","{'GeoId': 'nuts/SI038'}" +"","{'GeoId': 'nuts/SI04'}" +"","{'GeoId': 'nuts/SI041'}" +"","{'GeoId': 'nuts/SI042'}" +"","{'GeoId': 'nuts/SI043'}" +"","{'GeoId': 'nuts/SI044'}" +"","{'GeoId': 'nuts/SK0'}" +"","{'GeoId': 'nuts/SK01'}" +"","{'GeoId': 'nuts/SK010'}" +"","{'GeoId': 'nuts/SK02'}" +"","{'GeoId': 'nuts/SK021'}" +"","{'GeoId': 'nuts/SK022'}" +"","{'GeoId': 'nuts/SK023'}" +"","{'GeoId': 'nuts/SK03'}" +"","{'GeoId': 'nuts/SK031'}" +"","{'GeoId': 'nuts/SK032'}" +"","{'GeoId': 'nuts/SK04'}" +"","{'GeoId': 'nuts/SK041'}" +"","{'GeoId': 'nuts/SK042'}" +"","{'GeoId': 'nuts/TR1'}" +"","{'GeoId': 'nuts/TR10'}" +"","{'GeoId': 'nuts/TR100'}" +"","{'GeoId': 'nuts/TR2'}" +"","{'GeoId': 'nuts/TR21'}" +"","{'GeoId': 'nuts/TR211'}" +"","{'GeoId': 'nuts/TR212'}" +"","{'GeoId': 'nuts/TR213'}" +"","{'GeoId': 'nuts/TR22'}" +"","{'GeoId': 'nuts/TR221'}" +"","{'GeoId': 'nuts/TR222'}" +"","{'GeoId': 'nuts/TR3'}" +"","{'GeoId': 'nuts/TR31'}" +"","{'GeoId': 'nuts/TR310'}" +"","{'GeoId': 'nuts/TR32'}" +"","{'GeoId': 'nuts/TR321'}" +"","{'GeoId': 'nuts/TR322'}" +"","{'GeoId': 'nuts/TR323'}" +"","{'GeoId': 'nuts/TR33'}" +"","{'GeoId': 'nuts/TR331'}" +"","{'GeoId': 'nuts/TR332'}" +"","{'GeoId': 'nuts/TR333'}" +"","{'GeoId': 'nuts/TR334'}" +"","{'GeoId': 'nuts/TR4'}" +"","{'GeoId': 'nuts/TR41'}" +"","{'GeoId': 'nuts/TR411'}" +"","{'GeoId': 'nuts/TR412'}" +"","{'GeoId': 'nuts/TR413'}" +"","{'GeoId': 'nuts/TR42'}" +"","{'GeoId': 'nuts/TR421'}" +"","{'GeoId': 'nuts/TR422'}" +"","{'GeoId': 'nuts/TR423'}" +"","{'GeoId': 'nuts/TR424'}" +"","{'GeoId': 'nuts/TR425'}" +"","{'GeoId': 'nuts/TR5'}" +"","{'GeoId': 'nuts/TR51'}" +"","{'GeoId': 'nuts/TR510'}" +"","{'GeoId': 'nuts/TR52'}" +"","{'GeoId': 'nuts/TR521'}" +"","{'GeoId': 'nuts/TR522'}" +"","{'GeoId': 'nuts/TR6'}" +"","{'GeoId': 'nuts/TR61'}" +"","{'GeoId': 'nuts/TR611'}" +"","{'GeoId': 'nuts/TR612'}" +"","{'GeoId': 'nuts/TR613'}" +"","{'GeoId': 'nuts/TR62'}" +"","{'GeoId': 'nuts/TR621'}" +"","{'GeoId': 'nuts/TR622'}" +"","{'GeoId': 'nuts/TR63'}" +"","{'GeoId': 'nuts/TR631'}" +"","{'GeoId': 'nuts/TR632'}" +"","{'GeoId': 'nuts/TR633'}" +"","{'GeoId': 'nuts/TR7'}" +"","{'GeoId': 'nuts/TR71'}" +"","{'GeoId': 'nuts/TR711'}" +"","{'GeoId': 'nuts/TR712'}" +"","{'GeoId': 'nuts/TR713'}" +"","{'GeoId': 'nuts/TR714'}" +"","{'GeoId': 'nuts/TR715'}" +"","{'GeoId': 'nuts/TR72'}" +"","{'GeoId': 'nuts/TR721'}" +"","{'GeoId': 'nuts/TR722'}" +"","{'GeoId': 'nuts/TR723'}" +"","{'GeoId': 'nuts/TR8'}" +"","{'GeoId': 'nuts/TR81'}" +"","{'GeoId': 'nuts/TR811'}" +"","{'GeoId': 'nuts/TR812'}" +"","{'GeoId': 'nuts/TR813'}" +"","{'GeoId': 'nuts/TR82'}" +"","{'GeoId': 'nuts/TR821'}" +"","{'GeoId': 'nuts/TR822'}" +"","{'GeoId': 'nuts/TR823'}" +"","{'GeoId': 'nuts/TR83'}" +"","{'GeoId': 'nuts/TR831'}" +"","{'GeoId': 'nuts/TR832'}" +"","{'GeoId': 'nuts/TR833'}" +"","{'GeoId': 'nuts/TR834'}" +"","{'GeoId': 'nuts/TR9'}" +"","{'GeoId': 'nuts/TR90'}" +"","{'GeoId': 'nuts/TR901'}" +"","{'GeoId': 'nuts/TR902'}" +"","{'GeoId': 'nuts/TR903'}" +"","{'GeoId': 'nuts/TR904'}" +"","{'GeoId': 'nuts/TR905'}" +"","{'GeoId': 'nuts/TR906'}" +"","{'GeoId': 'nuts/TRA'}" +"","{'GeoId': 'nuts/TRA1'}" +"","{'GeoId': 'nuts/TRA11'}" +"","{'GeoId': 'nuts/TRA12'}" +"","{'GeoId': 'nuts/TRA13'}" +"","{'GeoId': 'nuts/TRA2'}" +"","{'GeoId': 'nuts/TRA21'}" +"","{'GeoId': 'nuts/TRA22'}" +"","{'GeoId': 'nuts/TRA23'}" +"","{'GeoId': 'nuts/TRA24'}" +"","{'GeoId': 'nuts/TRB'}" +"","{'GeoId': 'nuts/TRB1'}" +"","{'GeoId': 'nuts/TRB11'}" +"","{'GeoId': 'nuts/TRB12'}" +"","{'GeoId': 'nuts/TRB13'}" +"","{'GeoId': 'nuts/TRB14'}" +"","{'GeoId': 'nuts/TRB2'}" +"","{'GeoId': 'nuts/TRB21'}" +"","{'GeoId': 'nuts/TRB22'}" +"","{'GeoId': 'nuts/TRB23'}" +"","{'GeoId': 'nuts/TRB24'}" +"","{'GeoId': 'nuts/TRC'}" +"","{'GeoId': 'nuts/TRC1'}" +"","{'GeoId': 'nuts/TRC11'}" +"","{'GeoId': 'nuts/TRC12'}" +"","{'GeoId': 'nuts/TRC13'}" +"","{'GeoId': 'nuts/TRC2'}" +"","{'GeoId': 'nuts/TRC21'}" +"","{'GeoId': 'nuts/TRC22'}" +"","{'GeoId': 'nuts/TRC3'}" +"","{'GeoId': 'nuts/TRC31'}" +"","{'GeoId': 'nuts/TRC32'}" +"","{'GeoId': 'nuts/TRC33'}" +"","{'GeoId': 'nuts/TRC34'}" +"","{'GeoId': 'nuts/UKC'}" +"","{'GeoId': 'nuts/UKC1'}" +"","{'GeoId': 'nuts/UKC11'}" +"","{'GeoId': 'nuts/UKC12'}" +"","{'GeoId': 'nuts/UKC13'}" +"","{'GeoId': 'nuts/UKC14'}" +"","{'GeoId': 'nuts/UKC2'}" +"","{'GeoId': 'nuts/UKC21'}" +"","{'GeoId': 'nuts/UKC22'}" +"","{'GeoId': 'nuts/UKC23'}" +"","{'GeoId': 'nuts/UKD'}" +"","{'GeoId': 'nuts/UKD1'}" +"","{'GeoId': 'nuts/UKD11'}" +"","{'GeoId': 'nuts/UKD12'}" +"","{'GeoId': 'nuts/UKD3'}" +"","{'GeoId': 'nuts/UKD33'}" +"","{'GeoId': 'nuts/UKD34'}" +"","{'GeoId': 'nuts/UKD35'}" +"","{'GeoId': 'nuts/UKD36'}" +"","{'GeoId': 'nuts/UKD37'}" +"","{'GeoId': 'nuts/UKD4'}" +"","{'GeoId': 'nuts/UKD41'}" +"","{'GeoId': 'nuts/UKD42'}" +"","{'GeoId': 'nuts/UKD44'}" +"","{'GeoId': 'nuts/UKD45'}" +"","{'GeoId': 'nuts/UKD46'}" +"","{'GeoId': 'nuts/UKD47'}" +"","{'GeoId': 'nuts/UKD6'}" +"","{'GeoId': 'nuts/UKD61'}" +"","{'GeoId': 'nuts/UKD62'}" +"","{'GeoId': 'nuts/UKD63'}" +"","{'GeoId': 'nuts/UKD7'}" +"","{'GeoId': 'nuts/UKD71'}" +"","{'GeoId': 'nuts/UKD72'}" +"","{'GeoId': 'nuts/UKD73'}" +"","{'GeoId': 'nuts/UKD74'}" +"","{'GeoId': 'nuts/UKE'}" +"","{'GeoId': 'nuts/UKE1'}" +"","{'GeoId': 'nuts/UKE11'}" +"","{'GeoId': 'nuts/UKE12'}" +"","{'GeoId': 'nuts/UKE13'}" +"","{'GeoId': 'nuts/UKE2'}" +"","{'GeoId': 'nuts/UKE21'}" +"","{'GeoId': 'nuts/UKE22'}" +"","{'GeoId': 'nuts/UKE3'}" +"","{'GeoId': 'nuts/UKE31'}" +"","{'GeoId': 'nuts/UKE32'}" +"","{'GeoId': 'nuts/UKE4'}" +"","{'GeoId': 'nuts/UKE41'}" +"","{'GeoId': 'nuts/UKE42'}" +"","{'GeoId': 'nuts/UKE44'}" +"","{'GeoId': 'nuts/UKE45'}" +"","{'GeoId': 'nuts/UKF'}" +"","{'GeoId': 'nuts/UKF1'}" +"","{'GeoId': 'nuts/UKF11'}" +"","{'GeoId': 'nuts/UKF12'}" +"","{'GeoId': 'nuts/UKF13'}" +"","{'GeoId': 'nuts/UKF14'}" +"","{'GeoId': 'nuts/UKF15'}" +"","{'GeoId': 'nuts/UKF16'}" +"","{'GeoId': 'nuts/UKF2'}" +"","{'GeoId': 'nuts/UKF21'}" +"","{'GeoId': 'nuts/UKF22'}" +"","{'GeoId': 'nuts/UKF24'}" +"","{'GeoId': 'nuts/UKF25'}" +"","{'GeoId': 'nuts/UKF3'}" +"","{'GeoId': 'nuts/UKF30'}" +"","{'GeoId': 'nuts/UKG'}" +"","{'GeoId': 'nuts/UKG1'}" +"","{'GeoId': 'nuts/UKG11'}" +"","{'GeoId': 'nuts/UKG12'}" +"","{'GeoId': 'nuts/UKG13'}" +"","{'GeoId': 'nuts/UKG2'}" +"","{'GeoId': 'nuts/UKG21'}" +"","{'GeoId': 'nuts/UKG22'}" +"","{'GeoId': 'nuts/UKG23'}" +"","{'GeoId': 'nuts/UKG24'}" +"","{'GeoId': 'nuts/UKG3'}" +"","{'GeoId': 'nuts/UKG31'}" +"","{'GeoId': 'nuts/UKG32'}" +"","{'GeoId': 'nuts/UKG33'}" +"","{'GeoId': 'nuts/UKG36'}" +"","{'GeoId': 'nuts/UKG37'}" +"","{'GeoId': 'nuts/UKG38'}" +"","{'GeoId': 'nuts/UKG39'}" +"","{'GeoId': 'nuts/UKH'}" +"","{'GeoId': 'nuts/UKH1'}" +"","{'GeoId': 'nuts/UKH11'}" +"","{'GeoId': 'nuts/UKH12'}" +"","{'GeoId': 'nuts/UKH14'}" +"","{'GeoId': 'nuts/UKH15'}" +"","{'GeoId': 'nuts/UKH16'}" +"","{'GeoId': 'nuts/UKH17'}" +"","{'GeoId': 'nuts/UKH2'}" +"","{'GeoId': 'nuts/UKH21'}" +"","{'GeoId': 'nuts/UKH23'}" +"","{'GeoId': 'nuts/UKH24'}" +"","{'GeoId': 'nuts/UKH25'}" +"","{'GeoId': 'nuts/UKH3'}" +"","{'GeoId': 'nuts/UKH31'}" +"","{'GeoId': 'nuts/UKH32'}" +"","{'GeoId': 'nuts/UKH34'}" +"","{'GeoId': 'nuts/UKH35'}" +"","{'GeoId': 'nuts/UKH36'}" +"","{'GeoId': 'nuts/UKH37'}" +"","{'GeoId': 'nuts/UKI'}" +"","{'GeoId': 'nuts/UKI3'}" +"","{'GeoId': 'nuts/UKI31'}" +"","{'GeoId': 'nuts/UKI32'}" +"","{'GeoId': 'nuts/UKI33'}" +"","{'GeoId': 'nuts/UKI34'}" +"","{'GeoId': 'nuts/UKI4'}" +"","{'GeoId': 'nuts/UKI41'}" +"","{'GeoId': 'nuts/UKI42'}" +"","{'GeoId': 'nuts/UKI43'}" +"","{'GeoId': 'nuts/UKI44'}" +"","{'GeoId': 'nuts/UKI45'}" +"","{'GeoId': 'nuts/UKI5'}" +"","{'GeoId': 'nuts/UKI51'}" +"","{'GeoId': 'nuts/UKI52'}" +"","{'GeoId': 'nuts/UKI53'}" +"","{'GeoId': 'nuts/UKI54'}" +"","{'GeoId': 'nuts/UKI6'}" +"","{'GeoId': 'nuts/UKI61'}" +"","{'GeoId': 'nuts/UKI62'}" +"","{'GeoId': 'nuts/UKI63'}" +"","{'GeoId': 'nuts/UKI7'}" +"","{'GeoId': 'nuts/UKI71'}" +"","{'GeoId': 'nuts/UKI72'}" +"","{'GeoId': 'nuts/UKI73'}" +"","{'GeoId': 'nuts/UKI74'}" +"","{'GeoId': 'nuts/UKI75'}" +"","{'GeoId': 'nuts/UKJ'}" +"","{'GeoId': 'nuts/UKJ1'}" +"","{'GeoId': 'nuts/UKJ11'}" +"","{'GeoId': 'nuts/UKJ12'}" +"","{'GeoId': 'nuts/UKJ13'}" +"","{'GeoId': 'nuts/UKJ14'}" +"","{'GeoId': 'nuts/UKJ2'}" +"","{'GeoId': 'nuts/UKJ21'}" +"","{'GeoId': 'nuts/UKJ22'}" +"","{'GeoId': 'nuts/UKJ25'}" +"","{'GeoId': 'nuts/UKJ26'}" +"","{'GeoId': 'nuts/UKJ27'}" +"","{'GeoId': 'nuts/UKJ28'}" +"","{'GeoId': 'nuts/UKJ3'}" +"","{'GeoId': 'nuts/UKJ31'}" +"","{'GeoId': 'nuts/UKJ32'}" +"","{'GeoId': 'nuts/UKJ34'}" +"","{'GeoId': 'nuts/UKJ35'}" +"","{'GeoId': 'nuts/UKJ36'}" +"","{'GeoId': 'nuts/UKJ37'}" +"","{'GeoId': 'nuts/UKJ4'}" +"","{'GeoId': 'nuts/UKJ41'}" +"","{'GeoId': 'nuts/UKJ43'}" +"","{'GeoId': 'nuts/UKJ44'}" +"","{'GeoId': 'nuts/UKJ45'}" +"","{'GeoId': 'nuts/UKJ46'}" +"","{'GeoId': 'nuts/UKK'}" +"","{'GeoId': 'nuts/UKK1'}" +"","{'GeoId': 'nuts/UKK11'}" +"","{'GeoId': 'nuts/UKK12'}" +"","{'GeoId': 'nuts/UKK13'}" +"","{'GeoId': 'nuts/UKK14'}" +"","{'GeoId': 'nuts/UKK15'}" +"","{'GeoId': 'nuts/UKK2'}" +"","{'GeoId': 'nuts/UKK21'}" +"","{'GeoId': 'nuts/UKK22'}" +"","{'GeoId': 'nuts/UKK23'}" +"","{'GeoId': 'nuts/UKK3'}" +"","{'GeoId': 'nuts/UKK30'}" +"","{'GeoId': 'nuts/UKK4'}" +"","{'GeoId': 'nuts/UKK41'}" +"","{'GeoId': 'nuts/UKK42'}" +"","{'GeoId': 'nuts/UKK43'}" +"","{'GeoId': 'nuts/UKL'}" +"","{'GeoId': 'nuts/UKL1'}" +"","{'GeoId': 'nuts/UKL11'}" +"","{'GeoId': 'nuts/UKL12'}" +"","{'GeoId': 'nuts/UKL13'}" +"","{'GeoId': 'nuts/UKL14'}" +"","{'GeoId': 'nuts/UKL15'}" +"","{'GeoId': 'nuts/UKL16'}" +"","{'GeoId': 'nuts/UKL17'}" +"","{'GeoId': 'nuts/UKL18'}" +"","{'GeoId': 'nuts/UKL2'}" +"","{'GeoId': 'nuts/UKL21'}" +"","{'GeoId': 'nuts/UKL22'}" +"","{'GeoId': 'nuts/UKL23'}" +"","{'GeoId': 'nuts/UKL24'}" +"","{'GeoId': 'nuts/UKM'}" +"","{'GeoId': 'nuts/UKM5'}" +"","{'GeoId': 'nuts/UKM50'}" +"","{'GeoId': 'nuts/UKM6'}" +"","{'GeoId': 'nuts/UKM61'}" +"","{'GeoId': 'nuts/UKM62'}" +"","{'GeoId': 'nuts/UKM63'}" +"","{'GeoId': 'nuts/UKM64'}" +"","{'GeoId': 'nuts/UKM65'}" +"","{'GeoId': 'nuts/UKM66'}" +"","{'GeoId': 'nuts/UKM7'}" +"","{'GeoId': 'nuts/UKM71'}" +"","{'GeoId': 'nuts/UKM72'}" +"","{'GeoId': 'nuts/UKM73'}" +"","{'GeoId': 'nuts/UKM75'}" +"","{'GeoId': 'nuts/UKM76'}" +"","{'GeoId': 'nuts/UKM77'}" +"","{'GeoId': 'nuts/UKM78'}" +"","{'GeoId': 'nuts/UKM8'}" +"","{'GeoId': 'nuts/UKM81'}" +"","{'GeoId': 'nuts/UKM82'}" +"","{'GeoId': 'nuts/UKM83'}" +"","{'GeoId': 'nuts/UKM84'}" +"","{'GeoId': 'nuts/UKM9'}" +"","{'GeoId': 'nuts/UKM91'}" +"","{'GeoId': 'nuts/UKM92'}" +"","{'GeoId': 'nuts/UKM93'}" +"","{'GeoId': 'nuts/UKM94'}" +"","{'GeoId': 'nuts/UKM95'}" +"","{'GeoId': 'nuts/UKN'}" +"","{'GeoId': 'nuts/UKN0'}" +"","{'GeoId': 'nuts/UKN06'}" +"","{'GeoId': 'nuts/UKN07'}" +"","{'GeoId': 'nuts/UKN08'}" +"","{'GeoId': 'nuts/UKN09'}" +"","{'GeoId': 'nuts/UKN10'}" +"","{'GeoId': 'nuts/UKN11'}" +"","{'GeoId': 'nuts/UKN12'}" +"","{'GeoId': 'nuts/UKN13'}" +"","{'GeoId': 'nuts/UKN14'}" +"","{'GeoId': 'nuts/UKN15'}" +"","{'GeoId': 'nuts/UKN16'}" diff --git a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_summary_report.csv b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_summary_report.csv new file mode 100644 index 0000000000..7a105df1f8 --- /dev/null +++ b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_summary_report.csv @@ -0,0 +1,4 @@ +"StatVar","MeasurementMethods","MinDate","observationPeriods" +"MeanMothersAge_BirthEvent","[EurostatRegionalStatistics]","2013","[]" +"MedianMothersAge_BirthEvent","[EurostatRegionalStatistics]","2013","[]" +"FertilityRate_Person_Female","[EurostatRegionalStatistics]","2013","[]" diff --git a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/validation_config.json b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/validation_config.json index 0fc58021af..23af776817 100644 --- a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/validation_config.json +++ b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/validation_config.json @@ -6,7 +6,22 @@ "description": "Checks that the percentage of deleted points is within the threshold.", "validator": "DELETED_RECORDS_PERCENT", "params": { - "threshold": 0.01 + "threshold": 0.1 + } + }, + { + "rule_id": "check_goldens_output_csv", + "validator": "GOLDENS_CHECK", + "params": { + "golden_files": "golden_data/golden_observations.csv", + "input_files": "Eurostats_NUTS3_FRate_Age.csv" + } + }, + { + "rule_id": "check_goldens_summary_report", + "validator": "GOLDENS_CHECK", + "params": { + "golden_files": "golden_data/golden_summary_report.csv" } } ] From 9a62edd11a0f3bb7a1181442852cb0f119674f22 Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Mon, 25 May 2026 07:58:05 +0000 Subject: [PATCH 02/18] implemented golden checks --- .../fertility_rate_mother_age/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/manifest.json b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/manifest.json index 76cadc3646..9a91a57334 100644 --- a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/manifest.json +++ b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/manifest.json @@ -25,3 +25,4 @@ } ] } + From 0e14b02c6294994489bdc45975cea3a4c581554b Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Mon, 25 May 2026 10:07:44 +0000 Subject: [PATCH 03/18] implemented golden checks --- .../fertility_rate_mother_age/manifest.json | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/manifest.json b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/manifest.json index 9a91a57334..76cadc3646 100644 --- a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/manifest.json +++ b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/manifest.json @@ -25,4 +25,3 @@ } ] } - From 03614e7d36768def0d12988a5d4dbea9e4dfdce8 Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Wed, 27 May 2026 20:25:00 +0000 Subject: [PATCH 04/18] fixed format --- .../golden_data/golden_observations.csv | 4122 ++++++++--------- 1 file changed, 2061 insertions(+), 2061 deletions(-) diff --git a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv index d514ac6fa1..edadb0dc02 100644 --- a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv +++ b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv @@ -1,2061 +1,2061 @@ -"GeoId","value" -"","{'GeoId': 'country/ALB'}" -"","{'GeoId': 'country/AUT'}" -"","{'GeoId': 'country/BEL'}" -"","{'GeoId': 'country/BGR'}" -"","{'GeoId': 'country/CHE'}" -"","{'GeoId': 'country/CYP'}" -"","{'GeoId': 'country/CZE'}" -"","{'GeoId': 'country/DEU'}" -"","{'GeoId': 'country/DNK'}" -"","{'GeoId': 'country/ESP'}" -"","{'GeoId': 'country/EST'}" -"","{'GeoId': 'country/FIN'}" -"","{'GeoId': 'country/FRA'}" -"","{'GeoId': 'country/GBR'}" -"","{'GeoId': 'country/GRC'}" -"","{'GeoId': 'country/HRV'}" -"","{'GeoId': 'country/HUN'}" -"","{'GeoId': 'country/IRL'}" -"","{'GeoId': 'country/ISL'}" -"","{'GeoId': 'country/ITA'}" -"","{'GeoId': 'country/LIE'}" -"","{'GeoId': 'country/LTU'}" -"","{'GeoId': 'country/LUX'}" -"","{'GeoId': 'country/LVA'}" -"","{'GeoId': 'country/MKD'}" -"","{'GeoId': 'country/MLT'}" -"","{'GeoId': 'country/MNE'}" -"","{'GeoId': 'country/NLD'}" -"","{'GeoId': 'country/NOR'}" -"","{'GeoId': 'country/POL'}" -"","{'GeoId': 'country/PRT'}" -"","{'GeoId': 'country/ROU'}" -"","{'GeoId': 'country/SRB'}" -"","{'GeoId': 'country/SVK'}" -"","{'GeoId': 'country/SVN'}" -"","{'GeoId': 'country/SWE'}" -"","{'GeoId': 'country/TUR'}" -"","{'GeoId': 'nuts/AL0'}" -"","{'GeoId': 'nuts/AL01'}" -"","{'GeoId': 'nuts/AL011'}" -"","{'GeoId': 'nuts/AL012'}" -"","{'GeoId': 'nuts/AL013'}" -"","{'GeoId': 'nuts/AL014'}" -"","{'GeoId': 'nuts/AL015'}" -"","{'GeoId': 'nuts/AL02'}" -"","{'GeoId': 'nuts/AL021'}" -"","{'GeoId': 'nuts/AL022'}" -"","{'GeoId': 'nuts/AL03'}" -"","{'GeoId': 'nuts/AL031'}" -"","{'GeoId': 'nuts/AL032'}" -"","{'GeoId': 'nuts/AL033'}" -"","{'GeoId': 'nuts/AL034'}" -"","{'GeoId': 'nuts/AL035'}" -"","{'GeoId': 'nuts/AT1'}" -"","{'GeoId': 'nuts/AT11'}" -"","{'GeoId': 'nuts/AT111'}" -"","{'GeoId': 'nuts/AT112'}" -"","{'GeoId': 'nuts/AT113'}" -"","{'GeoId': 'nuts/AT12'}" -"","{'GeoId': 'nuts/AT121'}" -"","{'GeoId': 'nuts/AT122'}" -"","{'GeoId': 'nuts/AT123'}" -"","{'GeoId': 'nuts/AT124'}" -"","{'GeoId': 'nuts/AT125'}" -"","{'GeoId': 'nuts/AT126'}" -"","{'GeoId': 'nuts/AT127'}" -"","{'GeoId': 'nuts/AT13'}" -"","{'GeoId': 'nuts/AT130'}" -"","{'GeoId': 'nuts/AT2'}" -"","{'GeoId': 'nuts/AT21'}" -"","{'GeoId': 'nuts/AT211'}" -"","{'GeoId': 'nuts/AT212'}" -"","{'GeoId': 'nuts/AT213'}" -"","{'GeoId': 'nuts/AT22'}" -"","{'GeoId': 'nuts/AT221'}" -"","{'GeoId': 'nuts/AT222'}" -"","{'GeoId': 'nuts/AT223'}" -"","{'GeoId': 'nuts/AT224'}" -"","{'GeoId': 'nuts/AT225'}" -"","{'GeoId': 'nuts/AT226'}" -"","{'GeoId': 'nuts/AT3'}" -"","{'GeoId': 'nuts/AT31'}" -"","{'GeoId': 'nuts/AT311'}" -"","{'GeoId': 'nuts/AT312'}" -"","{'GeoId': 'nuts/AT313'}" -"","{'GeoId': 'nuts/AT314'}" -"","{'GeoId': 'nuts/AT315'}" -"","{'GeoId': 'nuts/AT32'}" -"","{'GeoId': 'nuts/AT321'}" -"","{'GeoId': 'nuts/AT322'}" -"","{'GeoId': 'nuts/AT323'}" -"","{'GeoId': 'nuts/AT33'}" -"","{'GeoId': 'nuts/AT331'}" -"","{'GeoId': 'nuts/AT332'}" -"","{'GeoId': 'nuts/AT333'}" -"","{'GeoId': 'nuts/AT334'}" -"","{'GeoId': 'nuts/AT335'}" -"","{'GeoId': 'nuts/AT34'}" -"","{'GeoId': 'nuts/AT341'}" -"","{'GeoId': 'nuts/AT342'}" -"","{'GeoId': 'nuts/BE1'}" -"","{'GeoId': 'nuts/BE10'}" -"","{'GeoId': 'nuts/BE100'}" -"","{'GeoId': 'nuts/BE2'}" -"","{'GeoId': 'nuts/BE21'}" -"","{'GeoId': 'nuts/BE211'}" -"","{'GeoId': 'nuts/BE212'}" -"","{'GeoId': 'nuts/BE213'}" -"","{'GeoId': 'nuts/BE22'}" -"","{'GeoId': 'nuts/BE221'}" -"","{'GeoId': 'nuts/BE222'}" -"","{'GeoId': 'nuts/BE223'}" -"","{'GeoId': 'nuts/BE224'}" -"","{'GeoId': 'nuts/BE225'}" -"","{'GeoId': 'nuts/BE23'}" -"","{'GeoId': 'nuts/BE231'}" -"","{'GeoId': 'nuts/BE232'}" -"","{'GeoId': 'nuts/BE233'}" -"","{'GeoId': 'nuts/BE234'}" -"","{'GeoId': 'nuts/BE235'}" -"","{'GeoId': 'nuts/BE236'}" -"","{'GeoId': 'nuts/BE24'}" -"","{'GeoId': 'nuts/BE241'}" -"","{'GeoId': 'nuts/BE242'}" -"","{'GeoId': 'nuts/BE25'}" -"","{'GeoId': 'nuts/BE251'}" -"","{'GeoId': 'nuts/BE252'}" -"","{'GeoId': 'nuts/BE253'}" -"","{'GeoId': 'nuts/BE254'}" -"","{'GeoId': 'nuts/BE255'}" -"","{'GeoId': 'nuts/BE256'}" -"","{'GeoId': 'nuts/BE257'}" -"","{'GeoId': 'nuts/BE258'}" -"","{'GeoId': 'nuts/BE3'}" -"","{'GeoId': 'nuts/BE31'}" -"","{'GeoId': 'nuts/BE310'}" -"","{'GeoId': 'nuts/BE32'}" -"","{'GeoId': 'nuts/BE321'}" -"","{'GeoId': 'nuts/BE322'}" -"","{'GeoId': 'nuts/BE323'}" -"","{'GeoId': 'nuts/BE324'}" -"","{'GeoId': 'nuts/BE325'}" -"","{'GeoId': 'nuts/BE326'}" -"","{'GeoId': 'nuts/BE327'}" -"","{'GeoId': 'nuts/BE328'}" -"","{'GeoId': 'nuts/BE329'}" -"","{'GeoId': 'nuts/BE32A'}" -"","{'GeoId': 'nuts/BE32B'}" -"","{'GeoId': 'nuts/BE32C'}" -"","{'GeoId': 'nuts/BE32D'}" -"","{'GeoId': 'nuts/BE33'}" -"","{'GeoId': 'nuts/BE331'}" -"","{'GeoId': 'nuts/BE332'}" -"","{'GeoId': 'nuts/BE334'}" -"","{'GeoId': 'nuts/BE335'}" -"","{'GeoId': 'nuts/BE336'}" -"","{'GeoId': 'nuts/BE34'}" -"","{'GeoId': 'nuts/BE341'}" -"","{'GeoId': 'nuts/BE342'}" -"","{'GeoId': 'nuts/BE343'}" -"","{'GeoId': 'nuts/BE344'}" -"","{'GeoId': 'nuts/BE345'}" -"","{'GeoId': 'nuts/BE35'}" -"","{'GeoId': 'nuts/BE351'}" -"","{'GeoId': 'nuts/BE352'}" -"","{'GeoId': 'nuts/BE353'}" -"","{'GeoId': 'nuts/BG3'}" -"","{'GeoId': 'nuts/BG31'}" -"","{'GeoId': 'nuts/BG311'}" -"","{'GeoId': 'nuts/BG312'}" -"","{'GeoId': 'nuts/BG313'}" -"","{'GeoId': 'nuts/BG314'}" -"","{'GeoId': 'nuts/BG315'}" -"","{'GeoId': 'nuts/BG32'}" -"","{'GeoId': 'nuts/BG321'}" -"","{'GeoId': 'nuts/BG322'}" -"","{'GeoId': 'nuts/BG323'}" -"","{'GeoId': 'nuts/BG324'}" -"","{'GeoId': 'nuts/BG325'}" -"","{'GeoId': 'nuts/BG33'}" -"","{'GeoId': 'nuts/BG331'}" -"","{'GeoId': 'nuts/BG332'}" -"","{'GeoId': 'nuts/BG333'}" -"","{'GeoId': 'nuts/BG334'}" -"","{'GeoId': 'nuts/BG34'}" -"","{'GeoId': 'nuts/BG341'}" -"","{'GeoId': 'nuts/BG342'}" -"","{'GeoId': 'nuts/BG343'}" -"","{'GeoId': 'nuts/BG344'}" -"","{'GeoId': 'nuts/BG4'}" -"","{'GeoId': 'nuts/BG41'}" -"","{'GeoId': 'nuts/BG411'}" -"","{'GeoId': 'nuts/BG412'}" -"","{'GeoId': 'nuts/BG413'}" -"","{'GeoId': 'nuts/BG414'}" -"","{'GeoId': 'nuts/BG415'}" -"","{'GeoId': 'nuts/BG42'}" -"","{'GeoId': 'nuts/BG421'}" -"","{'GeoId': 'nuts/BG422'}" -"","{'GeoId': 'nuts/BG423'}" -"","{'GeoId': 'nuts/BG424'}" -"","{'GeoId': 'nuts/BG425'}" -"","{'GeoId': 'nuts/CH0'}" -"","{'GeoId': 'nuts/CH01'}" -"","{'GeoId': 'nuts/CH011'}" -"","{'GeoId': 'nuts/CH012'}" -"","{'GeoId': 'nuts/CH013'}" -"","{'GeoId': 'nuts/CH02'}" -"","{'GeoId': 'nuts/CH021'}" -"","{'GeoId': 'nuts/CH022'}" -"","{'GeoId': 'nuts/CH023'}" -"","{'GeoId': 'nuts/CH024'}" -"","{'GeoId': 'nuts/CH025'}" -"","{'GeoId': 'nuts/CH03'}" -"","{'GeoId': 'nuts/CH031'}" -"","{'GeoId': 'nuts/CH032'}" -"","{'GeoId': 'nuts/CH033'}" -"","{'GeoId': 'nuts/CH04'}" -"","{'GeoId': 'nuts/CH040'}" -"","{'GeoId': 'nuts/CH05'}" -"","{'GeoId': 'nuts/CH051'}" -"","{'GeoId': 'nuts/CH052'}" -"","{'GeoId': 'nuts/CH053'}" -"","{'GeoId': 'nuts/CH055'}" -"","{'GeoId': 'nuts/CH056'}" -"","{'GeoId': 'nuts/CH057'}" -"","{'GeoId': 'nuts/CH06'}" -"","{'GeoId': 'nuts/CH061'}" -"","{'GeoId': 'nuts/CH062'}" -"","{'GeoId': 'nuts/CH063'}" -"","{'GeoId': 'nuts/CH064'}" -"","{'GeoId': 'nuts/CH065'}" -"","{'GeoId': 'nuts/CH066'}" -"","{'GeoId': 'nuts/CH07'}" -"","{'GeoId': 'nuts/CH070'}" -"","{'GeoId': 'nuts/CY0'}" -"","{'GeoId': 'nuts/CY00'}" -"","{'GeoId': 'nuts/CY000'}" -"","{'GeoId': 'nuts/CZ0'}" -"","{'GeoId': 'nuts/CZ01'}" -"","{'GeoId': 'nuts/CZ010'}" -"","{'GeoId': 'nuts/CZ02'}" -"","{'GeoId': 'nuts/CZ020'}" -"","{'GeoId': 'nuts/CZ03'}" -"","{'GeoId': 'nuts/CZ031'}" -"","{'GeoId': 'nuts/CZ032'}" -"","{'GeoId': 'nuts/CZ04'}" -"","{'GeoId': 'nuts/CZ041'}" -"","{'GeoId': 'nuts/CZ042'}" -"","{'GeoId': 'nuts/CZ05'}" -"","{'GeoId': 'nuts/CZ051'}" -"","{'GeoId': 'nuts/CZ052'}" -"","{'GeoId': 'nuts/CZ053'}" -"","{'GeoId': 'nuts/CZ06'}" -"","{'GeoId': 'nuts/CZ063'}" -"","{'GeoId': 'nuts/CZ064'}" -"","{'GeoId': 'nuts/CZ07'}" -"","{'GeoId': 'nuts/CZ071'}" -"","{'GeoId': 'nuts/CZ072'}" -"","{'GeoId': 'nuts/CZ08'}" -"","{'GeoId': 'nuts/CZ080'}" -"","{'GeoId': 'nuts/DE1'}" -"","{'GeoId': 'nuts/DE11'}" -"","{'GeoId': 'nuts/DE111'}" -"","{'GeoId': 'nuts/DE112'}" -"","{'GeoId': 'nuts/DE113'}" -"","{'GeoId': 'nuts/DE114'}" -"","{'GeoId': 'nuts/DE115'}" -"","{'GeoId': 'nuts/DE116'}" -"","{'GeoId': 'nuts/DE117'}" -"","{'GeoId': 'nuts/DE118'}" -"","{'GeoId': 'nuts/DE119'}" -"","{'GeoId': 'nuts/DE11A'}" -"","{'GeoId': 'nuts/DE11B'}" -"","{'GeoId': 'nuts/DE11C'}" -"","{'GeoId': 'nuts/DE11D'}" -"","{'GeoId': 'nuts/DE12'}" -"","{'GeoId': 'nuts/DE121'}" -"","{'GeoId': 'nuts/DE122'}" -"","{'GeoId': 'nuts/DE123'}" -"","{'GeoId': 'nuts/DE124'}" -"","{'GeoId': 'nuts/DE125'}" -"","{'GeoId': 'nuts/DE126'}" -"","{'GeoId': 'nuts/DE127'}" -"","{'GeoId': 'nuts/DE128'}" -"","{'GeoId': 'nuts/DE129'}" -"","{'GeoId': 'nuts/DE12A'}" -"","{'GeoId': 'nuts/DE12B'}" -"","{'GeoId': 'nuts/DE12C'}" -"","{'GeoId': 'nuts/DE13'}" -"","{'GeoId': 'nuts/DE131'}" -"","{'GeoId': 'nuts/DE132'}" -"","{'GeoId': 'nuts/DE133'}" -"","{'GeoId': 'nuts/DE134'}" -"","{'GeoId': 'nuts/DE135'}" -"","{'GeoId': 'nuts/DE136'}" -"","{'GeoId': 'nuts/DE137'}" -"","{'GeoId': 'nuts/DE138'}" -"","{'GeoId': 'nuts/DE139'}" -"","{'GeoId': 'nuts/DE13A'}" -"","{'GeoId': 'nuts/DE14'}" -"","{'GeoId': 'nuts/DE141'}" -"","{'GeoId': 'nuts/DE142'}" -"","{'GeoId': 'nuts/DE143'}" -"","{'GeoId': 'nuts/DE144'}" -"","{'GeoId': 'nuts/DE145'}" -"","{'GeoId': 'nuts/DE146'}" -"","{'GeoId': 'nuts/DE147'}" -"","{'GeoId': 'nuts/DE148'}" -"","{'GeoId': 'nuts/DE149'}" -"","{'GeoId': 'nuts/DE2'}" -"","{'GeoId': 'nuts/DE21'}" -"","{'GeoId': 'nuts/DE211'}" -"","{'GeoId': 'nuts/DE212'}" -"","{'GeoId': 'nuts/DE213'}" -"","{'GeoId': 'nuts/DE214'}" -"","{'GeoId': 'nuts/DE215'}" -"","{'GeoId': 'nuts/DE216'}" -"","{'GeoId': 'nuts/DE217'}" -"","{'GeoId': 'nuts/DE218'}" -"","{'GeoId': 'nuts/DE219'}" -"","{'GeoId': 'nuts/DE21A'}" -"","{'GeoId': 'nuts/DE21B'}" -"","{'GeoId': 'nuts/DE21C'}" -"","{'GeoId': 'nuts/DE21D'}" -"","{'GeoId': 'nuts/DE21E'}" -"","{'GeoId': 'nuts/DE21F'}" -"","{'GeoId': 'nuts/DE21G'}" -"","{'GeoId': 'nuts/DE21H'}" -"","{'GeoId': 'nuts/DE21I'}" -"","{'GeoId': 'nuts/DE21J'}" -"","{'GeoId': 'nuts/DE21K'}" -"","{'GeoId': 'nuts/DE21L'}" -"","{'GeoId': 'nuts/DE21M'}" -"","{'GeoId': 'nuts/DE21N'}" -"","{'GeoId': 'nuts/DE22'}" -"","{'GeoId': 'nuts/DE221'}" -"","{'GeoId': 'nuts/DE222'}" -"","{'GeoId': 'nuts/DE223'}" -"","{'GeoId': 'nuts/DE224'}" -"","{'GeoId': 'nuts/DE225'}" -"","{'GeoId': 'nuts/DE226'}" -"","{'GeoId': 'nuts/DE227'}" -"","{'GeoId': 'nuts/DE228'}" -"","{'GeoId': 'nuts/DE229'}" -"","{'GeoId': 'nuts/DE22A'}" -"","{'GeoId': 'nuts/DE22B'}" -"","{'GeoId': 'nuts/DE22C'}" -"","{'GeoId': 'nuts/DE23'}" -"","{'GeoId': 'nuts/DE231'}" -"","{'GeoId': 'nuts/DE232'}" -"","{'GeoId': 'nuts/DE233'}" -"","{'GeoId': 'nuts/DE234'}" -"","{'GeoId': 'nuts/DE235'}" -"","{'GeoId': 'nuts/DE236'}" -"","{'GeoId': 'nuts/DE237'}" -"","{'GeoId': 'nuts/DE238'}" -"","{'GeoId': 'nuts/DE239'}" -"","{'GeoId': 'nuts/DE23A'}" -"","{'GeoId': 'nuts/DE24'}" -"","{'GeoId': 'nuts/DE241'}" -"","{'GeoId': 'nuts/DE242'}" -"","{'GeoId': 'nuts/DE243'}" -"","{'GeoId': 'nuts/DE244'}" -"","{'GeoId': 'nuts/DE245'}" -"","{'GeoId': 'nuts/DE246'}" -"","{'GeoId': 'nuts/DE247'}" -"","{'GeoId': 'nuts/DE248'}" -"","{'GeoId': 'nuts/DE249'}" -"","{'GeoId': 'nuts/DE24A'}" -"","{'GeoId': 'nuts/DE24B'}" -"","{'GeoId': 'nuts/DE24C'}" -"","{'GeoId': 'nuts/DE24D'}" -"","{'GeoId': 'nuts/DE25'}" -"","{'GeoId': 'nuts/DE251'}" -"","{'GeoId': 'nuts/DE252'}" -"","{'GeoId': 'nuts/DE253'}" -"","{'GeoId': 'nuts/DE254'}" -"","{'GeoId': 'nuts/DE255'}" -"","{'GeoId': 'nuts/DE256'}" -"","{'GeoId': 'nuts/DE257'}" -"","{'GeoId': 'nuts/DE258'}" -"","{'GeoId': 'nuts/DE259'}" -"","{'GeoId': 'nuts/DE25A'}" -"","{'GeoId': 'nuts/DE25B'}" -"","{'GeoId': 'nuts/DE25C'}" -"","{'GeoId': 'nuts/DE26'}" -"","{'GeoId': 'nuts/DE261'}" -"","{'GeoId': 'nuts/DE262'}" -"","{'GeoId': 'nuts/DE263'}" -"","{'GeoId': 'nuts/DE264'}" -"","{'GeoId': 'nuts/DE265'}" -"","{'GeoId': 'nuts/DE266'}" -"","{'GeoId': 'nuts/DE267'}" -"","{'GeoId': 'nuts/DE268'}" -"","{'GeoId': 'nuts/DE269'}" -"","{'GeoId': 'nuts/DE26A'}" -"","{'GeoId': 'nuts/DE26B'}" -"","{'GeoId': 'nuts/DE26C'}" -"","{'GeoId': 'nuts/DE27'}" -"","{'GeoId': 'nuts/DE271'}" -"","{'GeoId': 'nuts/DE272'}" -"","{'GeoId': 'nuts/DE273'}" -"","{'GeoId': 'nuts/DE274'}" -"","{'GeoId': 'nuts/DE275'}" -"","{'GeoId': 'nuts/DE276'}" -"","{'GeoId': 'nuts/DE277'}" -"","{'GeoId': 'nuts/DE278'}" -"","{'GeoId': 'nuts/DE279'}" -"","{'GeoId': 'nuts/DE27A'}" -"","{'GeoId': 'nuts/DE27B'}" -"","{'GeoId': 'nuts/DE27C'}" -"","{'GeoId': 'nuts/DE27D'}" -"","{'GeoId': 'nuts/DE27E'}" -"","{'GeoId': 'nuts/DE3'}" -"","{'GeoId': 'nuts/DE30'}" -"","{'GeoId': 'nuts/DE300'}" -"","{'GeoId': 'nuts/DE4'}" -"","{'GeoId': 'nuts/DE40'}" -"","{'GeoId': 'nuts/DE401'}" -"","{'GeoId': 'nuts/DE402'}" -"","{'GeoId': 'nuts/DE403'}" -"","{'GeoId': 'nuts/DE404'}" -"","{'GeoId': 'nuts/DE405'}" -"","{'GeoId': 'nuts/DE406'}" -"","{'GeoId': 'nuts/DE407'}" -"","{'GeoId': 'nuts/DE408'}" -"","{'GeoId': 'nuts/DE409'}" -"","{'GeoId': 'nuts/DE40A'}" -"","{'GeoId': 'nuts/DE40B'}" -"","{'GeoId': 'nuts/DE40C'}" -"","{'GeoId': 'nuts/DE40D'}" -"","{'GeoId': 'nuts/DE40E'}" -"","{'GeoId': 'nuts/DE40F'}" -"","{'GeoId': 'nuts/DE40G'}" -"","{'GeoId': 'nuts/DE40H'}" -"","{'GeoId': 'nuts/DE40I'}" -"","{'GeoId': 'nuts/DE5'}" -"","{'GeoId': 'nuts/DE50'}" -"","{'GeoId': 'nuts/DE501'}" -"","{'GeoId': 'nuts/DE502'}" -"","{'GeoId': 'nuts/DE6'}" -"","{'GeoId': 'nuts/DE60'}" -"","{'GeoId': 'nuts/DE600'}" -"","{'GeoId': 'nuts/DE7'}" -"","{'GeoId': 'nuts/DE71'}" -"","{'GeoId': 'nuts/DE711'}" -"","{'GeoId': 'nuts/DE712'}" -"","{'GeoId': 'nuts/DE713'}" -"","{'GeoId': 'nuts/DE714'}" -"","{'GeoId': 'nuts/DE715'}" -"","{'GeoId': 'nuts/DE716'}" -"","{'GeoId': 'nuts/DE717'}" -"","{'GeoId': 'nuts/DE718'}" -"","{'GeoId': 'nuts/DE719'}" -"","{'GeoId': 'nuts/DE71A'}" -"","{'GeoId': 'nuts/DE71B'}" -"","{'GeoId': 'nuts/DE71C'}" -"","{'GeoId': 'nuts/DE71D'}" -"","{'GeoId': 'nuts/DE71E'}" -"","{'GeoId': 'nuts/DE72'}" -"","{'GeoId': 'nuts/DE721'}" -"","{'GeoId': 'nuts/DE722'}" -"","{'GeoId': 'nuts/DE723'}" -"","{'GeoId': 'nuts/DE724'}" -"","{'GeoId': 'nuts/DE725'}" -"","{'GeoId': 'nuts/DE73'}" -"","{'GeoId': 'nuts/DE731'}" -"","{'GeoId': 'nuts/DE732'}" -"","{'GeoId': 'nuts/DE733'}" -"","{'GeoId': 'nuts/DE734'}" -"","{'GeoId': 'nuts/DE735'}" -"","{'GeoId': 'nuts/DE736'}" -"","{'GeoId': 'nuts/DE737'}" -"","{'GeoId': 'nuts/DE8'}" -"","{'GeoId': 'nuts/DE80'}" -"","{'GeoId': 'nuts/DE803'}" -"","{'GeoId': 'nuts/DE804'}" -"","{'GeoId': 'nuts/DE80J'}" -"","{'GeoId': 'nuts/DE80K'}" -"","{'GeoId': 'nuts/DE80L'}" -"","{'GeoId': 'nuts/DE80M'}" -"","{'GeoId': 'nuts/DE80N'}" -"","{'GeoId': 'nuts/DE80O'}" -"","{'GeoId': 'nuts/DE9'}" -"","{'GeoId': 'nuts/DE91'}" -"","{'GeoId': 'nuts/DE911'}" -"","{'GeoId': 'nuts/DE912'}" -"","{'GeoId': 'nuts/DE913'}" -"","{'GeoId': 'nuts/DE914'}" -"","{'GeoId': 'nuts/DE916'}" -"","{'GeoId': 'nuts/DE917'}" -"","{'GeoId': 'nuts/DE918'}" -"","{'GeoId': 'nuts/DE91A'}" -"","{'GeoId': 'nuts/DE91B'}" -"","{'GeoId': 'nuts/DE91C'}" -"","{'GeoId': 'nuts/DE92'}" -"","{'GeoId': 'nuts/DE922'}" -"","{'GeoId': 'nuts/DE923'}" -"","{'GeoId': 'nuts/DE925'}" -"","{'GeoId': 'nuts/DE926'}" -"","{'GeoId': 'nuts/DE927'}" -"","{'GeoId': 'nuts/DE928'}" -"","{'GeoId': 'nuts/DE929'}" -"","{'GeoId': 'nuts/DE93'}" -"","{'GeoId': 'nuts/DE931'}" -"","{'GeoId': 'nuts/DE932'}" -"","{'GeoId': 'nuts/DE933'}" -"","{'GeoId': 'nuts/DE934'}" -"","{'GeoId': 'nuts/DE935'}" -"","{'GeoId': 'nuts/DE936'}" -"","{'GeoId': 'nuts/DE937'}" -"","{'GeoId': 'nuts/DE938'}" -"","{'GeoId': 'nuts/DE939'}" -"","{'GeoId': 'nuts/DE93A'}" -"","{'GeoId': 'nuts/DE93B'}" -"","{'GeoId': 'nuts/DE94'}" -"","{'GeoId': 'nuts/DE941'}" -"","{'GeoId': 'nuts/DE942'}" -"","{'GeoId': 'nuts/DE943'}" -"","{'GeoId': 'nuts/DE944'}" -"","{'GeoId': 'nuts/DE945'}" -"","{'GeoId': 'nuts/DE946'}" -"","{'GeoId': 'nuts/DE947'}" -"","{'GeoId': 'nuts/DE948'}" -"","{'GeoId': 'nuts/DE949'}" -"","{'GeoId': 'nuts/DE94A'}" -"","{'GeoId': 'nuts/DE94B'}" -"","{'GeoId': 'nuts/DE94C'}" -"","{'GeoId': 'nuts/DE94D'}" -"","{'GeoId': 'nuts/DE94E'}" -"","{'GeoId': 'nuts/DE94F'}" -"","{'GeoId': 'nuts/DE94G'}" -"","{'GeoId': 'nuts/DE94H'}" -"","{'GeoId': 'nuts/DEA'}" -"","{'GeoId': 'nuts/DEA1'}" -"","{'GeoId': 'nuts/DEA11'}" -"","{'GeoId': 'nuts/DEA12'}" -"","{'GeoId': 'nuts/DEA13'}" -"","{'GeoId': 'nuts/DEA14'}" -"","{'GeoId': 'nuts/DEA15'}" -"","{'GeoId': 'nuts/DEA16'}" -"","{'GeoId': 'nuts/DEA17'}" -"","{'GeoId': 'nuts/DEA18'}" -"","{'GeoId': 'nuts/DEA19'}" -"","{'GeoId': 'nuts/DEA1A'}" -"","{'GeoId': 'nuts/DEA1B'}" -"","{'GeoId': 'nuts/DEA1C'}" -"","{'GeoId': 'nuts/DEA1D'}" -"","{'GeoId': 'nuts/DEA1E'}" -"","{'GeoId': 'nuts/DEA1F'}" -"","{'GeoId': 'nuts/DEA2'}" -"","{'GeoId': 'nuts/DEA22'}" -"","{'GeoId': 'nuts/DEA23'}" -"","{'GeoId': 'nuts/DEA24'}" -"","{'GeoId': 'nuts/DEA26'}" -"","{'GeoId': 'nuts/DEA27'}" -"","{'GeoId': 'nuts/DEA28'}" -"","{'GeoId': 'nuts/DEA29'}" -"","{'GeoId': 'nuts/DEA2A'}" -"","{'GeoId': 'nuts/DEA2B'}" -"","{'GeoId': 'nuts/DEA2C'}" -"","{'GeoId': 'nuts/DEA2D'}" -"","{'GeoId': 'nuts/DEA3'}" -"","{'GeoId': 'nuts/DEA31'}" -"","{'GeoId': 'nuts/DEA32'}" -"","{'GeoId': 'nuts/DEA33'}" -"","{'GeoId': 'nuts/DEA34'}" -"","{'GeoId': 'nuts/DEA35'}" -"","{'GeoId': 'nuts/DEA36'}" -"","{'GeoId': 'nuts/DEA37'}" -"","{'GeoId': 'nuts/DEA38'}" -"","{'GeoId': 'nuts/DEA4'}" -"","{'GeoId': 'nuts/DEA41'}" -"","{'GeoId': 'nuts/DEA42'}" -"","{'GeoId': 'nuts/DEA43'}" -"","{'GeoId': 'nuts/DEA44'}" -"","{'GeoId': 'nuts/DEA45'}" -"","{'GeoId': 'nuts/DEA46'}" -"","{'GeoId': 'nuts/DEA47'}" -"","{'GeoId': 'nuts/DEA5'}" -"","{'GeoId': 'nuts/DEA51'}" -"","{'GeoId': 'nuts/DEA52'}" -"","{'GeoId': 'nuts/DEA53'}" -"","{'GeoId': 'nuts/DEA54'}" -"","{'GeoId': 'nuts/DEA55'}" -"","{'GeoId': 'nuts/DEA56'}" -"","{'GeoId': 'nuts/DEA57'}" -"","{'GeoId': 'nuts/DEA58'}" -"","{'GeoId': 'nuts/DEA59'}" -"","{'GeoId': 'nuts/DEA5A'}" -"","{'GeoId': 'nuts/DEA5B'}" -"","{'GeoId': 'nuts/DEA5C'}" -"","{'GeoId': 'nuts/DEB'}" -"","{'GeoId': 'nuts/DEB1'}" -"","{'GeoId': 'nuts/DEB11'}" -"","{'GeoId': 'nuts/DEB12'}" -"","{'GeoId': 'nuts/DEB13'}" -"","{'GeoId': 'nuts/DEB14'}" -"","{'GeoId': 'nuts/DEB15'}" -"","{'GeoId': 'nuts/DEB17'}" -"","{'GeoId': 'nuts/DEB18'}" -"","{'GeoId': 'nuts/DEB1A'}" -"","{'GeoId': 'nuts/DEB1B'}" -"","{'GeoId': 'nuts/DEB1C'}" -"","{'GeoId': 'nuts/DEB1D'}" -"","{'GeoId': 'nuts/DEB2'}" -"","{'GeoId': 'nuts/DEB21'}" -"","{'GeoId': 'nuts/DEB22'}" -"","{'GeoId': 'nuts/DEB23'}" -"","{'GeoId': 'nuts/DEB24'}" -"","{'GeoId': 'nuts/DEB25'}" -"","{'GeoId': 'nuts/DEB3'}" -"","{'GeoId': 'nuts/DEB31'}" -"","{'GeoId': 'nuts/DEB32'}" -"","{'GeoId': 'nuts/DEB33'}" -"","{'GeoId': 'nuts/DEB34'}" -"","{'GeoId': 'nuts/DEB35'}" -"","{'GeoId': 'nuts/DEB36'}" -"","{'GeoId': 'nuts/DEB37'}" -"","{'GeoId': 'nuts/DEB38'}" -"","{'GeoId': 'nuts/DEB39'}" -"","{'GeoId': 'nuts/DEB3A'}" -"","{'GeoId': 'nuts/DEB3B'}" -"","{'GeoId': 'nuts/DEB3C'}" -"","{'GeoId': 'nuts/DEB3D'}" -"","{'GeoId': 'nuts/DEB3E'}" -"","{'GeoId': 'nuts/DEB3F'}" -"","{'GeoId': 'nuts/DEB3G'}" -"","{'GeoId': 'nuts/DEB3H'}" -"","{'GeoId': 'nuts/DEB3I'}" -"","{'GeoId': 'nuts/DEB3J'}" -"","{'GeoId': 'nuts/DEB3K'}" -"","{'GeoId': 'nuts/DEC'}" -"","{'GeoId': 'nuts/DEC0'}" -"","{'GeoId': 'nuts/DEC01'}" -"","{'GeoId': 'nuts/DEC02'}" -"","{'GeoId': 'nuts/DEC03'}" -"","{'GeoId': 'nuts/DEC04'}" -"","{'GeoId': 'nuts/DEC05'}" -"","{'GeoId': 'nuts/DEC06'}" -"","{'GeoId': 'nuts/DED'}" -"","{'GeoId': 'nuts/DED2'}" -"","{'GeoId': 'nuts/DED21'}" -"","{'GeoId': 'nuts/DED2C'}" -"","{'GeoId': 'nuts/DED2D'}" -"","{'GeoId': 'nuts/DED2E'}" -"","{'GeoId': 'nuts/DED2F'}" -"","{'GeoId': 'nuts/DED4'}" -"","{'GeoId': 'nuts/DED41'}" -"","{'GeoId': 'nuts/DED42'}" -"","{'GeoId': 'nuts/DED43'}" -"","{'GeoId': 'nuts/DED44'}" -"","{'GeoId': 'nuts/DED45'}" -"","{'GeoId': 'nuts/DED5'}" -"","{'GeoId': 'nuts/DED51'}" -"","{'GeoId': 'nuts/DED52'}" -"","{'GeoId': 'nuts/DED53'}" -"","{'GeoId': 'nuts/DEE'}" -"","{'GeoId': 'nuts/DEE0'}" -"","{'GeoId': 'nuts/DEE01'}" -"","{'GeoId': 'nuts/DEE02'}" -"","{'GeoId': 'nuts/DEE03'}" -"","{'GeoId': 'nuts/DEE04'}" -"","{'GeoId': 'nuts/DEE05'}" -"","{'GeoId': 'nuts/DEE06'}" -"","{'GeoId': 'nuts/DEE07'}" -"","{'GeoId': 'nuts/DEE08'}" -"","{'GeoId': 'nuts/DEE09'}" -"","{'GeoId': 'nuts/DEE0A'}" -"","{'GeoId': 'nuts/DEE0B'}" -"","{'GeoId': 'nuts/DEE0C'}" -"","{'GeoId': 'nuts/DEE0D'}" -"","{'GeoId': 'nuts/DEE0E'}" -"","{'GeoId': 'nuts/DEF'}" -"","{'GeoId': 'nuts/DEF0'}" -"","{'GeoId': 'nuts/DEF01'}" -"","{'GeoId': 'nuts/DEF02'}" -"","{'GeoId': 'nuts/DEF03'}" -"","{'GeoId': 'nuts/DEF04'}" -"","{'GeoId': 'nuts/DEF05'}" -"","{'GeoId': 'nuts/DEF06'}" -"","{'GeoId': 'nuts/DEF07'}" -"","{'GeoId': 'nuts/DEF08'}" -"","{'GeoId': 'nuts/DEF09'}" -"","{'GeoId': 'nuts/DEF0A'}" -"","{'GeoId': 'nuts/DEF0B'}" -"","{'GeoId': 'nuts/DEF0C'}" -"","{'GeoId': 'nuts/DEF0D'}" -"","{'GeoId': 'nuts/DEF0E'}" -"","{'GeoId': 'nuts/DEF0F'}" -"","{'GeoId': 'nuts/DEG'}" -"","{'GeoId': 'nuts/DEG0'}" -"","{'GeoId': 'nuts/DEG01'}" -"","{'GeoId': 'nuts/DEG02'}" -"","{'GeoId': 'nuts/DEG03'}" -"","{'GeoId': 'nuts/DEG04'}" -"","{'GeoId': 'nuts/DEG05'}" -"","{'GeoId': 'nuts/DEG06'}" -"","{'GeoId': 'nuts/DEG07'}" -"","{'GeoId': 'nuts/DEG09'}" -"","{'GeoId': 'nuts/DEG0A'}" -"","{'GeoId': 'nuts/DEG0B'}" -"","{'GeoId': 'nuts/DEG0C'}" -"","{'GeoId': 'nuts/DEG0D'}" -"","{'GeoId': 'nuts/DEG0E'}" -"","{'GeoId': 'nuts/DEG0F'}" -"","{'GeoId': 'nuts/DEG0G'}" -"","{'GeoId': 'nuts/DEG0H'}" -"","{'GeoId': 'nuts/DEG0I'}" -"","{'GeoId': 'nuts/DEG0J'}" -"","{'GeoId': 'nuts/DEG0K'}" -"","{'GeoId': 'nuts/DEG0L'}" -"","{'GeoId': 'nuts/DEG0M'}" -"","{'GeoId': 'nuts/DEG0N'}" -"","{'GeoId': 'nuts/DEG0P'}" -"","{'GeoId': 'nuts/DK0'}" -"","{'GeoId': 'nuts/DK01'}" -"","{'GeoId': 'nuts/DK011'}" -"","{'GeoId': 'nuts/DK012'}" -"","{'GeoId': 'nuts/DK013'}" -"","{'GeoId': 'nuts/DK014'}" -"","{'GeoId': 'nuts/DK02'}" -"","{'GeoId': 'nuts/DK021'}" -"","{'GeoId': 'nuts/DK022'}" -"","{'GeoId': 'nuts/DK03'}" -"","{'GeoId': 'nuts/DK031'}" -"","{'GeoId': 'nuts/DK032'}" -"","{'GeoId': 'nuts/DK04'}" -"","{'GeoId': 'nuts/DK041'}" -"","{'GeoId': 'nuts/DK042'}" -"","{'GeoId': 'nuts/DK05'}" -"","{'GeoId': 'nuts/DK050'}" -"","{'GeoId': 'nuts/EE0'}" -"","{'GeoId': 'nuts/EE00'}" -"","{'GeoId': 'nuts/EE001'}" -"","{'GeoId': 'nuts/EE004'}" -"","{'GeoId': 'nuts/EE006'}" -"","{'GeoId': 'nuts/EE007'}" -"","{'GeoId': 'nuts/EE008'}" -"","{'GeoId': 'nuts/EE009'}" -"","{'GeoId': 'nuts/EE00A'}" -"","{'GeoId': 'nuts/EL3'}" -"","{'GeoId': 'nuts/EL30'}" -"","{'GeoId': 'nuts/EL301'}" -"","{'GeoId': 'nuts/EL302'}" -"","{'GeoId': 'nuts/EL303'}" -"","{'GeoId': 'nuts/EL304'}" -"","{'GeoId': 'nuts/EL305'}" -"","{'GeoId': 'nuts/EL306'}" -"","{'GeoId': 'nuts/EL307'}" -"","{'GeoId': 'nuts/EL4'}" -"","{'GeoId': 'nuts/EL41'}" -"","{'GeoId': 'nuts/EL411'}" -"","{'GeoId': 'nuts/EL412'}" -"","{'GeoId': 'nuts/EL413'}" -"","{'GeoId': 'nuts/EL42'}" -"","{'GeoId': 'nuts/EL421'}" -"","{'GeoId': 'nuts/EL422'}" -"","{'GeoId': 'nuts/EL43'}" -"","{'GeoId': 'nuts/EL431'}" -"","{'GeoId': 'nuts/EL432'}" -"","{'GeoId': 'nuts/EL433'}" -"","{'GeoId': 'nuts/EL434'}" -"","{'GeoId': 'nuts/EL5'}" -"","{'GeoId': 'nuts/EL51'}" -"","{'GeoId': 'nuts/EL511'}" -"","{'GeoId': 'nuts/EL512'}" -"","{'GeoId': 'nuts/EL513'}" -"","{'GeoId': 'nuts/EL514'}" -"","{'GeoId': 'nuts/EL515'}" -"","{'GeoId': 'nuts/EL52'}" -"","{'GeoId': 'nuts/EL521'}" -"","{'GeoId': 'nuts/EL522'}" -"","{'GeoId': 'nuts/EL523'}" -"","{'GeoId': 'nuts/EL524'}" -"","{'GeoId': 'nuts/EL525'}" -"","{'GeoId': 'nuts/EL526'}" -"","{'GeoId': 'nuts/EL527'}" -"","{'GeoId': 'nuts/EL53'}" -"","{'GeoId': 'nuts/EL531'}" -"","{'GeoId': 'nuts/EL532'}" -"","{'GeoId': 'nuts/EL533'}" -"","{'GeoId': 'nuts/EL54'}" -"","{'GeoId': 'nuts/EL541'}" -"","{'GeoId': 'nuts/EL542'}" -"","{'GeoId': 'nuts/EL543'}" -"","{'GeoId': 'nuts/EL6'}" -"","{'GeoId': 'nuts/EL61'}" -"","{'GeoId': 'nuts/EL611'}" -"","{'GeoId': 'nuts/EL612'}" -"","{'GeoId': 'nuts/EL613'}" -"","{'GeoId': 'nuts/EL62'}" -"","{'GeoId': 'nuts/EL621'}" -"","{'GeoId': 'nuts/EL622'}" -"","{'GeoId': 'nuts/EL623'}" -"","{'GeoId': 'nuts/EL624'}" -"","{'GeoId': 'nuts/EL63'}" -"","{'GeoId': 'nuts/EL631'}" -"","{'GeoId': 'nuts/EL632'}" -"","{'GeoId': 'nuts/EL633'}" -"","{'GeoId': 'nuts/EL64'}" -"","{'GeoId': 'nuts/EL641'}" -"","{'GeoId': 'nuts/EL642'}" -"","{'GeoId': 'nuts/EL643'}" -"","{'GeoId': 'nuts/EL644'}" -"","{'GeoId': 'nuts/EL645'}" -"","{'GeoId': 'nuts/EL65'}" -"","{'GeoId': 'nuts/EL651'}" -"","{'GeoId': 'nuts/EL652'}" -"","{'GeoId': 'nuts/EL653'}" -"","{'GeoId': 'nuts/ES1'}" -"","{'GeoId': 'nuts/ES11'}" -"","{'GeoId': 'nuts/ES111'}" -"","{'GeoId': 'nuts/ES112'}" -"","{'GeoId': 'nuts/ES113'}" -"","{'GeoId': 'nuts/ES114'}" -"","{'GeoId': 'nuts/ES12'}" -"","{'GeoId': 'nuts/ES120'}" -"","{'GeoId': 'nuts/ES13'}" -"","{'GeoId': 'nuts/ES130'}" -"","{'GeoId': 'nuts/ES2'}" -"","{'GeoId': 'nuts/ES21'}" -"","{'GeoId': 'nuts/ES211'}" -"","{'GeoId': 'nuts/ES212'}" -"","{'GeoId': 'nuts/ES213'}" -"","{'GeoId': 'nuts/ES22'}" -"","{'GeoId': 'nuts/ES220'}" -"","{'GeoId': 'nuts/ES23'}" -"","{'GeoId': 'nuts/ES230'}" -"","{'GeoId': 'nuts/ES24'}" -"","{'GeoId': 'nuts/ES241'}" -"","{'GeoId': 'nuts/ES242'}" -"","{'GeoId': 'nuts/ES243'}" -"","{'GeoId': 'nuts/ES3'}" -"","{'GeoId': 'nuts/ES30'}" -"","{'GeoId': 'nuts/ES300'}" -"","{'GeoId': 'nuts/ES4'}" -"","{'GeoId': 'nuts/ES41'}" -"","{'GeoId': 'nuts/ES411'}" -"","{'GeoId': 'nuts/ES412'}" -"","{'GeoId': 'nuts/ES413'}" -"","{'GeoId': 'nuts/ES414'}" -"","{'GeoId': 'nuts/ES415'}" -"","{'GeoId': 'nuts/ES416'}" -"","{'GeoId': 'nuts/ES417'}" -"","{'GeoId': 'nuts/ES418'}" -"","{'GeoId': 'nuts/ES419'}" -"","{'GeoId': 'nuts/ES42'}" -"","{'GeoId': 'nuts/ES421'}" -"","{'GeoId': 'nuts/ES422'}" -"","{'GeoId': 'nuts/ES423'}" -"","{'GeoId': 'nuts/ES424'}" -"","{'GeoId': 'nuts/ES425'}" -"","{'GeoId': 'nuts/ES43'}" -"","{'GeoId': 'nuts/ES431'}" -"","{'GeoId': 'nuts/ES432'}" -"","{'GeoId': 'nuts/ES5'}" -"","{'GeoId': 'nuts/ES51'}" -"","{'GeoId': 'nuts/ES511'}" -"","{'GeoId': 'nuts/ES512'}" -"","{'GeoId': 'nuts/ES513'}" -"","{'GeoId': 'nuts/ES514'}" -"","{'GeoId': 'nuts/ES52'}" -"","{'GeoId': 'nuts/ES521'}" -"","{'GeoId': 'nuts/ES522'}" -"","{'GeoId': 'nuts/ES523'}" -"","{'GeoId': 'nuts/ES53'}" -"","{'GeoId': 'nuts/ES531'}" -"","{'GeoId': 'nuts/ES532'}" -"","{'GeoId': 'nuts/ES533'}" -"","{'GeoId': 'nuts/ES6'}" -"","{'GeoId': 'nuts/ES61'}" -"","{'GeoId': 'nuts/ES611'}" -"","{'GeoId': 'nuts/ES612'}" -"","{'GeoId': 'nuts/ES613'}" -"","{'GeoId': 'nuts/ES614'}" -"","{'GeoId': 'nuts/ES615'}" -"","{'GeoId': 'nuts/ES616'}" -"","{'GeoId': 'nuts/ES617'}" -"","{'GeoId': 'nuts/ES618'}" -"","{'GeoId': 'nuts/ES62'}" -"","{'GeoId': 'nuts/ES620'}" -"","{'GeoId': 'nuts/ES63'}" -"","{'GeoId': 'nuts/ES630'}" -"","{'GeoId': 'nuts/ES64'}" -"","{'GeoId': 'nuts/ES640'}" -"","{'GeoId': 'nuts/ES7'}" -"","{'GeoId': 'nuts/ES70'}" -"","{'GeoId': 'nuts/ES704'}" -"","{'GeoId': 'nuts/ES705'}" -"","{'GeoId': 'nuts/ES706'}" -"","{'GeoId': 'nuts/ES707'}" -"","{'GeoId': 'nuts/ES708'}" -"","{'GeoId': 'nuts/ES709'}" -"","{'GeoId': 'nuts/FI1'}" -"","{'GeoId': 'nuts/FI19'}" -"","{'GeoId': 'nuts/FI193'}" -"","{'GeoId': 'nuts/FI194'}" -"","{'GeoId': 'nuts/FI195'}" -"","{'GeoId': 'nuts/FI196'}" -"","{'GeoId': 'nuts/FI197'}" -"","{'GeoId': 'nuts/FI1B'}" -"","{'GeoId': 'nuts/FI1B1'}" -"","{'GeoId': 'nuts/FI1C'}" -"","{'GeoId': 'nuts/FI1C1'}" -"","{'GeoId': 'nuts/FI1C2'}" -"","{'GeoId': 'nuts/FI1C3'}" -"","{'GeoId': 'nuts/FI1C4'}" -"","{'GeoId': 'nuts/FI1C5'}" -"","{'GeoId': 'nuts/FI1D'}" -"","{'GeoId': 'nuts/FI1D1'}" -"","{'GeoId': 'nuts/FI1D2'}" -"","{'GeoId': 'nuts/FI1D3'}" -"","{'GeoId': 'nuts/FI1D5'}" -"","{'GeoId': 'nuts/FI1D7'}" -"","{'GeoId': 'nuts/FI1D8'}" -"","{'GeoId': 'nuts/FI1D9'}" -"","{'GeoId': 'nuts/FI2'}" -"","{'GeoId': 'nuts/FI20'}" -"","{'GeoId': 'nuts/FI200'}" -"","{'GeoId': 'nuts/FR1'}" -"","{'GeoId': 'nuts/FR10'}" -"","{'GeoId': 'nuts/FR101'}" -"","{'GeoId': 'nuts/FR102'}" -"","{'GeoId': 'nuts/FR103'}" -"","{'GeoId': 'nuts/FR104'}" -"","{'GeoId': 'nuts/FR105'}" -"","{'GeoId': 'nuts/FR106'}" -"","{'GeoId': 'nuts/FR107'}" -"","{'GeoId': 'nuts/FR108'}" -"","{'GeoId': 'nuts/FRB'}" -"","{'GeoId': 'nuts/FRB0'}" -"","{'GeoId': 'nuts/FRB01'}" -"","{'GeoId': 'nuts/FRB02'}" -"","{'GeoId': 'nuts/FRB03'}" -"","{'GeoId': 'nuts/FRB04'}" -"","{'GeoId': 'nuts/FRB05'}" -"","{'GeoId': 'nuts/FRB06'}" -"","{'GeoId': 'nuts/FRC'}" -"","{'GeoId': 'nuts/FRC1'}" -"","{'GeoId': 'nuts/FRC11'}" -"","{'GeoId': 'nuts/FRC12'}" -"","{'GeoId': 'nuts/FRC13'}" -"","{'GeoId': 'nuts/FRC14'}" -"","{'GeoId': 'nuts/FRC2'}" -"","{'GeoId': 'nuts/FRC21'}" -"","{'GeoId': 'nuts/FRC22'}" -"","{'GeoId': 'nuts/FRC23'}" -"","{'GeoId': 'nuts/FRC24'}" -"","{'GeoId': 'nuts/FRD'}" -"","{'GeoId': 'nuts/FRD1'}" -"","{'GeoId': 'nuts/FRD11'}" -"","{'GeoId': 'nuts/FRD12'}" -"","{'GeoId': 'nuts/FRD13'}" -"","{'GeoId': 'nuts/FRD2'}" -"","{'GeoId': 'nuts/FRD21'}" -"","{'GeoId': 'nuts/FRD22'}" -"","{'GeoId': 'nuts/FRE'}" -"","{'GeoId': 'nuts/FRE1'}" -"","{'GeoId': 'nuts/FRE11'}" -"","{'GeoId': 'nuts/FRE12'}" -"","{'GeoId': 'nuts/FRE2'}" -"","{'GeoId': 'nuts/FRE21'}" -"","{'GeoId': 'nuts/FRE22'}" -"","{'GeoId': 'nuts/FRE23'}" -"","{'GeoId': 'nuts/FRF'}" -"","{'GeoId': 'nuts/FRF1'}" -"","{'GeoId': 'nuts/FRF11'}" -"","{'GeoId': 'nuts/FRF12'}" -"","{'GeoId': 'nuts/FRF2'}" -"","{'GeoId': 'nuts/FRF21'}" -"","{'GeoId': 'nuts/FRF22'}" -"","{'GeoId': 'nuts/FRF23'}" -"","{'GeoId': 'nuts/FRF24'}" -"","{'GeoId': 'nuts/FRF3'}" -"","{'GeoId': 'nuts/FRF31'}" -"","{'GeoId': 'nuts/FRF32'}" -"","{'GeoId': 'nuts/FRF33'}" -"","{'GeoId': 'nuts/FRF34'}" -"","{'GeoId': 'nuts/FRG'}" -"","{'GeoId': 'nuts/FRG0'}" -"","{'GeoId': 'nuts/FRG01'}" -"","{'GeoId': 'nuts/FRG02'}" -"","{'GeoId': 'nuts/FRG03'}" -"","{'GeoId': 'nuts/FRG04'}" -"","{'GeoId': 'nuts/FRG05'}" -"","{'GeoId': 'nuts/FRH'}" -"","{'GeoId': 'nuts/FRH0'}" -"","{'GeoId': 'nuts/FRH01'}" -"","{'GeoId': 'nuts/FRH02'}" -"","{'GeoId': 'nuts/FRH03'}" -"","{'GeoId': 'nuts/FRH04'}" -"","{'GeoId': 'nuts/FRI'}" -"","{'GeoId': 'nuts/FRI1'}" -"","{'GeoId': 'nuts/FRI11'}" -"","{'GeoId': 'nuts/FRI12'}" -"","{'GeoId': 'nuts/FRI13'}" -"","{'GeoId': 'nuts/FRI14'}" -"","{'GeoId': 'nuts/FRI15'}" -"","{'GeoId': 'nuts/FRI2'}" -"","{'GeoId': 'nuts/FRI21'}" -"","{'GeoId': 'nuts/FRI22'}" -"","{'GeoId': 'nuts/FRI23'}" -"","{'GeoId': 'nuts/FRI3'}" -"","{'GeoId': 'nuts/FRI31'}" -"","{'GeoId': 'nuts/FRI32'}" -"","{'GeoId': 'nuts/FRI33'}" -"","{'GeoId': 'nuts/FRI34'}" -"","{'GeoId': 'nuts/FRJ'}" -"","{'GeoId': 'nuts/FRJ1'}" -"","{'GeoId': 'nuts/FRJ11'}" -"","{'GeoId': 'nuts/FRJ12'}" -"","{'GeoId': 'nuts/FRJ13'}" -"","{'GeoId': 'nuts/FRJ14'}" -"","{'GeoId': 'nuts/FRJ15'}" -"","{'GeoId': 'nuts/FRJ2'}" -"","{'GeoId': 'nuts/FRJ21'}" -"","{'GeoId': 'nuts/FRJ22'}" -"","{'GeoId': 'nuts/FRJ23'}" -"","{'GeoId': 'nuts/FRJ24'}" -"","{'GeoId': 'nuts/FRJ25'}" -"","{'GeoId': 'nuts/FRJ26'}" -"","{'GeoId': 'nuts/FRJ27'}" -"","{'GeoId': 'nuts/FRJ28'}" -"","{'GeoId': 'nuts/FRK'}" -"","{'GeoId': 'nuts/FRK1'}" -"","{'GeoId': 'nuts/FRK11'}" -"","{'GeoId': 'nuts/FRK12'}" -"","{'GeoId': 'nuts/FRK13'}" -"","{'GeoId': 'nuts/FRK14'}" -"","{'GeoId': 'nuts/FRK2'}" -"","{'GeoId': 'nuts/FRK21'}" -"","{'GeoId': 'nuts/FRK22'}" -"","{'GeoId': 'nuts/FRK23'}" -"","{'GeoId': 'nuts/FRK24'}" -"","{'GeoId': 'nuts/FRK25'}" -"","{'GeoId': 'nuts/FRK26'}" -"","{'GeoId': 'nuts/FRK27'}" -"","{'GeoId': 'nuts/FRK28'}" -"","{'GeoId': 'nuts/FRL'}" -"","{'GeoId': 'nuts/FRL0'}" -"","{'GeoId': 'nuts/FRL01'}" -"","{'GeoId': 'nuts/FRL02'}" -"","{'GeoId': 'nuts/FRL03'}" -"","{'GeoId': 'nuts/FRL04'}" -"","{'GeoId': 'nuts/FRL05'}" -"","{'GeoId': 'nuts/FRL06'}" -"","{'GeoId': 'nuts/FRM'}" -"","{'GeoId': 'nuts/FRM0'}" -"","{'GeoId': 'nuts/FRM01'}" -"","{'GeoId': 'nuts/FRM02'}" -"","{'GeoId': 'nuts/FRY'}" -"","{'GeoId': 'nuts/FRY1'}" -"","{'GeoId': 'nuts/FRY10'}" -"","{'GeoId': 'nuts/FRY2'}" -"","{'GeoId': 'nuts/FRY20'}" -"","{'GeoId': 'nuts/FRY3'}" -"","{'GeoId': 'nuts/FRY30'}" -"","{'GeoId': 'nuts/FRY4'}" -"","{'GeoId': 'nuts/FRY40'}" -"","{'GeoId': 'nuts/FRY5'}" -"","{'GeoId': 'nuts/FRY50'}" -"","{'GeoId': 'nuts/HR0'}" -"","{'GeoId': 'nuts/HR02'}" -"","{'GeoId': 'nuts/HR021'}" -"","{'GeoId': 'nuts/HR022'}" -"","{'GeoId': 'nuts/HR023'}" -"","{'GeoId': 'nuts/HR024'}" -"","{'GeoId': 'nuts/HR025'}" -"","{'GeoId': 'nuts/HR026'}" -"","{'GeoId': 'nuts/HR027'}" -"","{'GeoId': 'nuts/HR028'}" -"","{'GeoId': 'nuts/HR03'}" -"","{'GeoId': 'nuts/HR031'}" -"","{'GeoId': 'nuts/HR032'}" -"","{'GeoId': 'nuts/HR033'}" -"","{'GeoId': 'nuts/HR034'}" -"","{'GeoId': 'nuts/HR035'}" -"","{'GeoId': 'nuts/HR036'}" -"","{'GeoId': 'nuts/HR037'}" -"","{'GeoId': 'nuts/HR04'}" -"","{'GeoId': 'nuts/HR041'}" -"","{'GeoId': 'nuts/HR042'}" -"","{'GeoId': 'nuts/HR043'}" -"","{'GeoId': 'nuts/HR044'}" -"","{'GeoId': 'nuts/HR045'}" -"","{'GeoId': 'nuts/HR046'}" -"","{'GeoId': 'nuts/HR047'}" -"","{'GeoId': 'nuts/HR048'}" -"","{'GeoId': 'nuts/HR049'}" -"","{'GeoId': 'nuts/HR04A'}" -"","{'GeoId': 'nuts/HR04B'}" -"","{'GeoId': 'nuts/HR04C'}" -"","{'GeoId': 'nuts/HR04D'}" -"","{'GeoId': 'nuts/HR04E'}" -"","{'GeoId': 'nuts/HR05'}" -"","{'GeoId': 'nuts/HR050'}" -"","{'GeoId': 'nuts/HR06'}" -"","{'GeoId': 'nuts/HR061'}" -"","{'GeoId': 'nuts/HR062'}" -"","{'GeoId': 'nuts/HR063'}" -"","{'GeoId': 'nuts/HR064'}" -"","{'GeoId': 'nuts/HR065'}" -"","{'GeoId': 'nuts/HU1'}" -"","{'GeoId': 'nuts/HU11'}" -"","{'GeoId': 'nuts/HU110'}" -"","{'GeoId': 'nuts/HU12'}" -"","{'GeoId': 'nuts/HU120'}" -"","{'GeoId': 'nuts/HU2'}" -"","{'GeoId': 'nuts/HU21'}" -"","{'GeoId': 'nuts/HU211'}" -"","{'GeoId': 'nuts/HU212'}" -"","{'GeoId': 'nuts/HU213'}" -"","{'GeoId': 'nuts/HU22'}" -"","{'GeoId': 'nuts/HU221'}" -"","{'GeoId': 'nuts/HU222'}" -"","{'GeoId': 'nuts/HU223'}" -"","{'GeoId': 'nuts/HU23'}" -"","{'GeoId': 'nuts/HU231'}" -"","{'GeoId': 'nuts/HU232'}" -"","{'GeoId': 'nuts/HU233'}" -"","{'GeoId': 'nuts/HU3'}" -"","{'GeoId': 'nuts/HU31'}" -"","{'GeoId': 'nuts/HU311'}" -"","{'GeoId': 'nuts/HU312'}" -"","{'GeoId': 'nuts/HU313'}" -"","{'GeoId': 'nuts/HU32'}" -"","{'GeoId': 'nuts/HU321'}" -"","{'GeoId': 'nuts/HU322'}" -"","{'GeoId': 'nuts/HU323'}" -"","{'GeoId': 'nuts/HU33'}" -"","{'GeoId': 'nuts/HU331'}" -"","{'GeoId': 'nuts/HU332'}" -"","{'GeoId': 'nuts/HU333'}" -"","{'GeoId': 'nuts/IE0'}" -"","{'GeoId': 'nuts/IE04'}" -"","{'GeoId': 'nuts/IE041'}" -"","{'GeoId': 'nuts/IE042'}" -"","{'GeoId': 'nuts/IE05'}" -"","{'GeoId': 'nuts/IE051'}" -"","{'GeoId': 'nuts/IE052'}" -"","{'GeoId': 'nuts/IE053'}" -"","{'GeoId': 'nuts/IE06'}" -"","{'GeoId': 'nuts/IE061'}" -"","{'GeoId': 'nuts/IE062'}" -"","{'GeoId': 'nuts/IE063'}" -"","{'GeoId': 'nuts/IS0'}" -"","{'GeoId': 'nuts/IS00'}" -"","{'GeoId': 'nuts/IS001'}" -"","{'GeoId': 'nuts/IS002'}" -"","{'GeoId': 'nuts/ITC'}" -"","{'GeoId': 'nuts/ITC1'}" -"","{'GeoId': 'nuts/ITC11'}" -"","{'GeoId': 'nuts/ITC12'}" -"","{'GeoId': 'nuts/ITC13'}" -"","{'GeoId': 'nuts/ITC14'}" -"","{'GeoId': 'nuts/ITC15'}" -"","{'GeoId': 'nuts/ITC16'}" -"","{'GeoId': 'nuts/ITC17'}" -"","{'GeoId': 'nuts/ITC18'}" -"","{'GeoId': 'nuts/ITC2'}" -"","{'GeoId': 'nuts/ITC20'}" -"","{'GeoId': 'nuts/ITC3'}" -"","{'GeoId': 'nuts/ITC31'}" -"","{'GeoId': 'nuts/ITC32'}" -"","{'GeoId': 'nuts/ITC33'}" -"","{'GeoId': 'nuts/ITC34'}" -"","{'GeoId': 'nuts/ITC4'}" -"","{'GeoId': 'nuts/ITC41'}" -"","{'GeoId': 'nuts/ITC42'}" -"","{'GeoId': 'nuts/ITC43'}" -"","{'GeoId': 'nuts/ITC44'}" -"","{'GeoId': 'nuts/ITC46'}" -"","{'GeoId': 'nuts/ITC47'}" -"","{'GeoId': 'nuts/ITC48'}" -"","{'GeoId': 'nuts/ITC49'}" -"","{'GeoId': 'nuts/ITC4A'}" -"","{'GeoId': 'nuts/ITC4B'}" -"","{'GeoId': 'nuts/ITC4C'}" -"","{'GeoId': 'nuts/ITC4D'}" -"","{'GeoId': 'nuts/ITF'}" -"","{'GeoId': 'nuts/ITF1'}" -"","{'GeoId': 'nuts/ITF11'}" -"","{'GeoId': 'nuts/ITF12'}" -"","{'GeoId': 'nuts/ITF13'}" -"","{'GeoId': 'nuts/ITF14'}" -"","{'GeoId': 'nuts/ITF2'}" -"","{'GeoId': 'nuts/ITF21'}" -"","{'GeoId': 'nuts/ITF22'}" -"","{'GeoId': 'nuts/ITF3'}" -"","{'GeoId': 'nuts/ITF31'}" -"","{'GeoId': 'nuts/ITF32'}" -"","{'GeoId': 'nuts/ITF33'}" -"","{'GeoId': 'nuts/ITF34'}" -"","{'GeoId': 'nuts/ITF35'}" -"","{'GeoId': 'nuts/ITF4'}" -"","{'GeoId': 'nuts/ITF43'}" -"","{'GeoId': 'nuts/ITF44'}" -"","{'GeoId': 'nuts/ITF45'}" -"","{'GeoId': 'nuts/ITF46'}" -"","{'GeoId': 'nuts/ITF47'}" -"","{'GeoId': 'nuts/ITF48'}" -"","{'GeoId': 'nuts/ITF5'}" -"","{'GeoId': 'nuts/ITF51'}" -"","{'GeoId': 'nuts/ITF52'}" -"","{'GeoId': 'nuts/ITF6'}" -"","{'GeoId': 'nuts/ITF61'}" -"","{'GeoId': 'nuts/ITF62'}" -"","{'GeoId': 'nuts/ITF63'}" -"","{'GeoId': 'nuts/ITF64'}" -"","{'GeoId': 'nuts/ITF65'}" -"","{'GeoId': 'nuts/ITG'}" -"","{'GeoId': 'nuts/ITG1'}" -"","{'GeoId': 'nuts/ITG11'}" -"","{'GeoId': 'nuts/ITG12'}" -"","{'GeoId': 'nuts/ITG13'}" -"","{'GeoId': 'nuts/ITG14'}" -"","{'GeoId': 'nuts/ITG15'}" -"","{'GeoId': 'nuts/ITG16'}" -"","{'GeoId': 'nuts/ITG17'}" -"","{'GeoId': 'nuts/ITG18'}" -"","{'GeoId': 'nuts/ITG19'}" -"","{'GeoId': 'nuts/ITG2'}" -"","{'GeoId': 'nuts/ITG25'}" -"","{'GeoId': 'nuts/ITG26'}" -"","{'GeoId': 'nuts/ITG27'}" -"","{'GeoId': 'nuts/ITG28'}" -"","{'GeoId': 'nuts/ITG29'}" -"","{'GeoId': 'nuts/ITG2A'}" -"","{'GeoId': 'nuts/ITG2B'}" -"","{'GeoId': 'nuts/ITG2C'}" -"","{'GeoId': 'nuts/ITG2D'}" -"","{'GeoId': 'nuts/ITG2E'}" -"","{'GeoId': 'nuts/ITG2F'}" -"","{'GeoId': 'nuts/ITG2G'}" -"","{'GeoId': 'nuts/ITG2H'}" -"","{'GeoId': 'nuts/ITH'}" -"","{'GeoId': 'nuts/ITH1'}" -"","{'GeoId': 'nuts/ITH10'}" -"","{'GeoId': 'nuts/ITH2'}" -"","{'GeoId': 'nuts/ITH20'}" -"","{'GeoId': 'nuts/ITH3'}" -"","{'GeoId': 'nuts/ITH31'}" -"","{'GeoId': 'nuts/ITH32'}" -"","{'GeoId': 'nuts/ITH33'}" -"","{'GeoId': 'nuts/ITH34'}" -"","{'GeoId': 'nuts/ITH35'}" -"","{'GeoId': 'nuts/ITH36'}" -"","{'GeoId': 'nuts/ITH37'}" -"","{'GeoId': 'nuts/ITH4'}" -"","{'GeoId': 'nuts/ITH41'}" -"","{'GeoId': 'nuts/ITH42'}" -"","{'GeoId': 'nuts/ITH43'}" -"","{'GeoId': 'nuts/ITH44'}" -"","{'GeoId': 'nuts/ITH5'}" -"","{'GeoId': 'nuts/ITH51'}" -"","{'GeoId': 'nuts/ITH52'}" -"","{'GeoId': 'nuts/ITH53'}" -"","{'GeoId': 'nuts/ITH54'}" -"","{'GeoId': 'nuts/ITH55'}" -"","{'GeoId': 'nuts/ITH56'}" -"","{'GeoId': 'nuts/ITH57'}" -"","{'GeoId': 'nuts/ITH58'}" -"","{'GeoId': 'nuts/ITH59'}" -"","{'GeoId': 'nuts/ITI'}" -"","{'GeoId': 'nuts/ITI1'}" -"","{'GeoId': 'nuts/ITI11'}" -"","{'GeoId': 'nuts/ITI12'}" -"","{'GeoId': 'nuts/ITI13'}" -"","{'GeoId': 'nuts/ITI14'}" -"","{'GeoId': 'nuts/ITI15'}" -"","{'GeoId': 'nuts/ITI16'}" -"","{'GeoId': 'nuts/ITI17'}" -"","{'GeoId': 'nuts/ITI18'}" -"","{'GeoId': 'nuts/ITI19'}" -"","{'GeoId': 'nuts/ITI1A'}" -"","{'GeoId': 'nuts/ITI2'}" -"","{'GeoId': 'nuts/ITI21'}" -"","{'GeoId': 'nuts/ITI22'}" -"","{'GeoId': 'nuts/ITI3'}" -"","{'GeoId': 'nuts/ITI31'}" -"","{'GeoId': 'nuts/ITI32'}" -"","{'GeoId': 'nuts/ITI33'}" -"","{'GeoId': 'nuts/ITI34'}" -"","{'GeoId': 'nuts/ITI35'}" -"","{'GeoId': 'nuts/ITI4'}" -"","{'GeoId': 'nuts/ITI41'}" -"","{'GeoId': 'nuts/ITI42'}" -"","{'GeoId': 'nuts/ITI43'}" -"","{'GeoId': 'nuts/ITI44'}" -"","{'GeoId': 'nuts/ITI45'}" -"","{'GeoId': 'nuts/LI0'}" -"","{'GeoId': 'nuts/LI00'}" -"","{'GeoId': 'nuts/LI000'}" -"","{'GeoId': 'nuts/LT0'}" -"","{'GeoId': 'nuts/LT01'}" -"","{'GeoId': 'nuts/LT011'}" -"","{'GeoId': 'nuts/LT02'}" -"","{'GeoId': 'nuts/LT021'}" -"","{'GeoId': 'nuts/LT022'}" -"","{'GeoId': 'nuts/LT023'}" -"","{'GeoId': 'nuts/LT024'}" -"","{'GeoId': 'nuts/LT025'}" -"","{'GeoId': 'nuts/LT026'}" -"","{'GeoId': 'nuts/LT027'}" -"","{'GeoId': 'nuts/LT028'}" -"","{'GeoId': 'nuts/LT029'}" -"","{'GeoId': 'nuts/LU0'}" -"","{'GeoId': 'nuts/LU00'}" -"","{'GeoId': 'nuts/LU000'}" -"","{'GeoId': 'nuts/LV0'}" -"","{'GeoId': 'nuts/LV00'}" -"","{'GeoId': 'nuts/LV003'}" -"","{'GeoId': 'nuts/LV005'}" -"","{'GeoId': 'nuts/LV006'}" -"","{'GeoId': 'nuts/LV007'}" -"","{'GeoId': 'nuts/LV008'}" -"","{'GeoId': 'nuts/LV009'}" -"","{'GeoId': 'nuts/ME0'}" -"","{'GeoId': 'nuts/ME00'}" -"","{'GeoId': 'nuts/ME000'}" -"","{'GeoId': 'nuts/MK0'}" -"","{'GeoId': 'nuts/MK00'}" -"","{'GeoId': 'nuts/MK001'}" -"","{'GeoId': 'nuts/MK002'}" -"","{'GeoId': 'nuts/MK003'}" -"","{'GeoId': 'nuts/MK004'}" -"","{'GeoId': 'nuts/MK005'}" -"","{'GeoId': 'nuts/MK006'}" -"","{'GeoId': 'nuts/MK007'}" -"","{'GeoId': 'nuts/MK008'}" -"","{'GeoId': 'nuts/MT0'}" -"","{'GeoId': 'nuts/MT00'}" -"","{'GeoId': 'nuts/MT001'}" -"","{'GeoId': 'nuts/MT002'}" -"","{'GeoId': 'nuts/NL1'}" -"","{'GeoId': 'nuts/NL11'}" -"","{'GeoId': 'nuts/NL111'}" -"","{'GeoId': 'nuts/NL112'}" -"","{'GeoId': 'nuts/NL113'}" -"","{'GeoId': 'nuts/NL12'}" -"","{'GeoId': 'nuts/NL124'}" -"","{'GeoId': 'nuts/NL125'}" -"","{'GeoId': 'nuts/NL126'}" -"","{'GeoId': 'nuts/NL13'}" -"","{'GeoId': 'nuts/NL131'}" -"","{'GeoId': 'nuts/NL132'}" -"","{'GeoId': 'nuts/NL133'}" -"","{'GeoId': 'nuts/NL2'}" -"","{'GeoId': 'nuts/NL21'}" -"","{'GeoId': 'nuts/NL211'}" -"","{'GeoId': 'nuts/NL212'}" -"","{'GeoId': 'nuts/NL213'}" -"","{'GeoId': 'nuts/NL22'}" -"","{'GeoId': 'nuts/NL221'}" -"","{'GeoId': 'nuts/NL224'}" -"","{'GeoId': 'nuts/NL225'}" -"","{'GeoId': 'nuts/NL226'}" -"","{'GeoId': 'nuts/NL23'}" -"","{'GeoId': 'nuts/NL230'}" -"","{'GeoId': 'nuts/NL3'}" -"","{'GeoId': 'nuts/NL31'}" -"","{'GeoId': 'nuts/NL310'}" -"","{'GeoId': 'nuts/NL32'}" -"","{'GeoId': 'nuts/NL321'}" -"","{'GeoId': 'nuts/NL323'}" -"","{'GeoId': 'nuts/NL324'}" -"","{'GeoId': 'nuts/NL325'}" -"","{'GeoId': 'nuts/NL327'}" -"","{'GeoId': 'nuts/NL328'}" -"","{'GeoId': 'nuts/NL329'}" -"","{'GeoId': 'nuts/NL33'}" -"","{'GeoId': 'nuts/NL332'}" -"","{'GeoId': 'nuts/NL333'}" -"","{'GeoId': 'nuts/NL337'}" -"","{'GeoId': 'nuts/NL33A'}" -"","{'GeoId': 'nuts/NL33B'}" -"","{'GeoId': 'nuts/NL33C'}" -"","{'GeoId': 'nuts/NL34'}" -"","{'GeoId': 'nuts/NL341'}" -"","{'GeoId': 'nuts/NL342'}" -"","{'GeoId': 'nuts/NL4'}" -"","{'GeoId': 'nuts/NL41'}" -"","{'GeoId': 'nuts/NL411'}" -"","{'GeoId': 'nuts/NL412'}" -"","{'GeoId': 'nuts/NL413'}" -"","{'GeoId': 'nuts/NL414'}" -"","{'GeoId': 'nuts/NL42'}" -"","{'GeoId': 'nuts/NL421'}" -"","{'GeoId': 'nuts/NL422'}" -"","{'GeoId': 'nuts/NL423'}" -"","{'GeoId': 'nuts/NO0'}" -"","{'GeoId': 'nuts/NO01'}" -"","{'GeoId': 'nuts/NO011'}" -"","{'GeoId': 'nuts/NO012'}" -"","{'GeoId': 'nuts/NO02'}" -"","{'GeoId': 'nuts/NO020'}" -"","{'GeoId': 'nuts/NO021'}" -"","{'GeoId': 'nuts/NO022'}" -"","{'GeoId': 'nuts/NO03'}" -"","{'GeoId': 'nuts/NO031'}" -"","{'GeoId': 'nuts/NO032'}" -"","{'GeoId': 'nuts/NO033'}" -"","{'GeoId': 'nuts/NO034'}" -"","{'GeoId': 'nuts/NO04'}" -"","{'GeoId': 'nuts/NO041'}" -"","{'GeoId': 'nuts/NO042'}" -"","{'GeoId': 'nuts/NO043'}" -"","{'GeoId': 'nuts/NO05'}" -"","{'GeoId': 'nuts/NO051'}" -"","{'GeoId': 'nuts/NO052'}" -"","{'GeoId': 'nuts/NO053'}" -"","{'GeoId': 'nuts/NO06'}" -"","{'GeoId': 'nuts/NO060'}" -"","{'GeoId': 'nuts/NO061'}" -"","{'GeoId': 'nuts/NO062'}" -"","{'GeoId': 'nuts/NO07'}" -"","{'GeoId': 'nuts/NO071'}" -"","{'GeoId': 'nuts/NO072'}" -"","{'GeoId': 'nuts/NO073'}" -"","{'GeoId': 'nuts/NO074'}" -"","{'GeoId': 'nuts/NO08'}" -"","{'GeoId': 'nuts/NO081'}" -"","{'GeoId': 'nuts/NO082'}" -"","{'GeoId': 'nuts/NO09'}" -"","{'GeoId': 'nuts/NO091'}" -"","{'GeoId': 'nuts/NO092'}" -"","{'GeoId': 'nuts/NO0A'}" -"","{'GeoId': 'nuts/NO0A1'}" -"","{'GeoId': 'nuts/NO0A2'}" -"","{'GeoId': 'nuts/NO0A3'}" -"","{'GeoId': 'nuts/PL2'}" -"","{'GeoId': 'nuts/PL21'}" -"","{'GeoId': 'nuts/PL213'}" -"","{'GeoId': 'nuts/PL214'}" -"","{'GeoId': 'nuts/PL217'}" -"","{'GeoId': 'nuts/PL218'}" -"","{'GeoId': 'nuts/PL219'}" -"","{'GeoId': 'nuts/PL21A'}" -"","{'GeoId': 'nuts/PL22'}" -"","{'GeoId': 'nuts/PL224'}" -"","{'GeoId': 'nuts/PL225'}" -"","{'GeoId': 'nuts/PL227'}" -"","{'GeoId': 'nuts/PL228'}" -"","{'GeoId': 'nuts/PL229'}" -"","{'GeoId': 'nuts/PL22A'}" -"","{'GeoId': 'nuts/PL22B'}" -"","{'GeoId': 'nuts/PL22C'}" -"","{'GeoId': 'nuts/PL4'}" -"","{'GeoId': 'nuts/PL41'}" -"","{'GeoId': 'nuts/PL411'}" -"","{'GeoId': 'nuts/PL414'}" -"","{'GeoId': 'nuts/PL415'}" -"","{'GeoId': 'nuts/PL416'}" -"","{'GeoId': 'nuts/PL417'}" -"","{'GeoId': 'nuts/PL418'}" -"","{'GeoId': 'nuts/PL42'}" -"","{'GeoId': 'nuts/PL424'}" -"","{'GeoId': 'nuts/PL426'}" -"","{'GeoId': 'nuts/PL427'}" -"","{'GeoId': 'nuts/PL428'}" -"","{'GeoId': 'nuts/PL43'}" -"","{'GeoId': 'nuts/PL431'}" -"","{'GeoId': 'nuts/PL432'}" -"","{'GeoId': 'nuts/PL5'}" -"","{'GeoId': 'nuts/PL51'}" -"","{'GeoId': 'nuts/PL514'}" -"","{'GeoId': 'nuts/PL515'}" -"","{'GeoId': 'nuts/PL516'}" -"","{'GeoId': 'nuts/PL517'}" -"","{'GeoId': 'nuts/PL518'}" -"","{'GeoId': 'nuts/PL52'}" -"","{'GeoId': 'nuts/PL523'}" -"","{'GeoId': 'nuts/PL524'}" -"","{'GeoId': 'nuts/PL6'}" -"","{'GeoId': 'nuts/PL61'}" -"","{'GeoId': 'nuts/PL613'}" -"","{'GeoId': 'nuts/PL616'}" -"","{'GeoId': 'nuts/PL617'}" -"","{'GeoId': 'nuts/PL618'}" -"","{'GeoId': 'nuts/PL619'}" -"","{'GeoId': 'nuts/PL62'}" -"","{'GeoId': 'nuts/PL621'}" -"","{'GeoId': 'nuts/PL622'}" -"","{'GeoId': 'nuts/PL623'}" -"","{'GeoId': 'nuts/PL63'}" -"","{'GeoId': 'nuts/PL633'}" -"","{'GeoId': 'nuts/PL634'}" -"","{'GeoId': 'nuts/PL636'}" -"","{'GeoId': 'nuts/PL637'}" -"","{'GeoId': 'nuts/PL638'}" -"","{'GeoId': 'nuts/PL7'}" -"","{'GeoId': 'nuts/PL71'}" -"","{'GeoId': 'nuts/PL711'}" -"","{'GeoId': 'nuts/PL712'}" -"","{'GeoId': 'nuts/PL713'}" -"","{'GeoId': 'nuts/PL714'}" -"","{'GeoId': 'nuts/PL715'}" -"","{'GeoId': 'nuts/PL72'}" -"","{'GeoId': 'nuts/PL721'}" -"","{'GeoId': 'nuts/PL722'}" -"","{'GeoId': 'nuts/PL8'}" -"","{'GeoId': 'nuts/PL81'}" -"","{'GeoId': 'nuts/PL811'}" -"","{'GeoId': 'nuts/PL812'}" -"","{'GeoId': 'nuts/PL814'}" -"","{'GeoId': 'nuts/PL815'}" -"","{'GeoId': 'nuts/PL82'}" -"","{'GeoId': 'nuts/PL821'}" -"","{'GeoId': 'nuts/PL822'}" -"","{'GeoId': 'nuts/PL823'}" -"","{'GeoId': 'nuts/PL824'}" -"","{'GeoId': 'nuts/PL84'}" -"","{'GeoId': 'nuts/PL841'}" -"","{'GeoId': 'nuts/PL842'}" -"","{'GeoId': 'nuts/PL843'}" -"","{'GeoId': 'nuts/PL9'}" -"","{'GeoId': 'nuts/PL91'}" -"","{'GeoId': 'nuts/PL911'}" -"","{'GeoId': 'nuts/PL912'}" -"","{'GeoId': 'nuts/PL913'}" -"","{'GeoId': 'nuts/PL92'}" -"","{'GeoId': 'nuts/PL921'}" -"","{'GeoId': 'nuts/PL922'}" -"","{'GeoId': 'nuts/PL923'}" -"","{'GeoId': 'nuts/PL924'}" -"","{'GeoId': 'nuts/PL925'}" -"","{'GeoId': 'nuts/PL926'}" -"","{'GeoId': 'nuts/PT1'}" -"","{'GeoId': 'nuts/PT11'}" -"","{'GeoId': 'nuts/PT111'}" -"","{'GeoId': 'nuts/PT112'}" -"","{'GeoId': 'nuts/PT119'}" -"","{'GeoId': 'nuts/PT11A'}" -"","{'GeoId': 'nuts/PT11B'}" -"","{'GeoId': 'nuts/PT11C'}" -"","{'GeoId': 'nuts/PT11D'}" -"","{'GeoId': 'nuts/PT11E'}" -"","{'GeoId': 'nuts/PT15'}" -"","{'GeoId': 'nuts/PT150'}" -"","{'GeoId': 'nuts/PT16'}" -"","{'GeoId': 'nuts/PT16B'}" -"","{'GeoId': 'nuts/PT16D'}" -"","{'GeoId': 'nuts/PT16E'}" -"","{'GeoId': 'nuts/PT16F'}" -"","{'GeoId': 'nuts/PT16G'}" -"","{'GeoId': 'nuts/PT16H'}" -"","{'GeoId': 'nuts/PT16I'}" -"","{'GeoId': 'nuts/PT16J'}" -"","{'GeoId': 'nuts/PT17'}" -"","{'GeoId': 'nuts/PT170'}" -"","{'GeoId': 'nuts/PT18'}" -"","{'GeoId': 'nuts/PT181'}" -"","{'GeoId': 'nuts/PT184'}" -"","{'GeoId': 'nuts/PT185'}" -"","{'GeoId': 'nuts/PT186'}" -"","{'GeoId': 'nuts/PT187'}" -"","{'GeoId': 'nuts/PT2'}" -"","{'GeoId': 'nuts/PT20'}" -"","{'GeoId': 'nuts/PT200'}" -"","{'GeoId': 'nuts/PT3'}" -"","{'GeoId': 'nuts/PT30'}" -"","{'GeoId': 'nuts/PT300'}" -"","{'GeoId': 'nuts/RO1'}" -"","{'GeoId': 'nuts/RO11'}" -"","{'GeoId': 'nuts/RO111'}" -"","{'GeoId': 'nuts/RO112'}" -"","{'GeoId': 'nuts/RO113'}" -"","{'GeoId': 'nuts/RO114'}" -"","{'GeoId': 'nuts/RO115'}" -"","{'GeoId': 'nuts/RO116'}" -"","{'GeoId': 'nuts/RO12'}" -"","{'GeoId': 'nuts/RO121'}" -"","{'GeoId': 'nuts/RO122'}" -"","{'GeoId': 'nuts/RO123'}" -"","{'GeoId': 'nuts/RO124'}" -"","{'GeoId': 'nuts/RO125'}" -"","{'GeoId': 'nuts/RO126'}" -"","{'GeoId': 'nuts/RO2'}" -"","{'GeoId': 'nuts/RO21'}" -"","{'GeoId': 'nuts/RO211'}" -"","{'GeoId': 'nuts/RO212'}" -"","{'GeoId': 'nuts/RO213'}" -"","{'GeoId': 'nuts/RO214'}" -"","{'GeoId': 'nuts/RO215'}" -"","{'GeoId': 'nuts/RO216'}" -"","{'GeoId': 'nuts/RO22'}" -"","{'GeoId': 'nuts/RO221'}" -"","{'GeoId': 'nuts/RO222'}" -"","{'GeoId': 'nuts/RO223'}" -"","{'GeoId': 'nuts/RO224'}" -"","{'GeoId': 'nuts/RO225'}" -"","{'GeoId': 'nuts/RO226'}" -"","{'GeoId': 'nuts/RO3'}" -"","{'GeoId': 'nuts/RO31'}" -"","{'GeoId': 'nuts/RO311'}" -"","{'GeoId': 'nuts/RO312'}" -"","{'GeoId': 'nuts/RO313'}" -"","{'GeoId': 'nuts/RO314'}" -"","{'GeoId': 'nuts/RO315'}" -"","{'GeoId': 'nuts/RO316'}" -"","{'GeoId': 'nuts/RO317'}" -"","{'GeoId': 'nuts/RO32'}" -"","{'GeoId': 'nuts/RO321'}" -"","{'GeoId': 'nuts/RO322'}" -"","{'GeoId': 'nuts/RO4'}" -"","{'GeoId': 'nuts/RO41'}" -"","{'GeoId': 'nuts/RO411'}" -"","{'GeoId': 'nuts/RO412'}" -"","{'GeoId': 'nuts/RO413'}" -"","{'GeoId': 'nuts/RO414'}" -"","{'GeoId': 'nuts/RO415'}" -"","{'GeoId': 'nuts/RO42'}" -"","{'GeoId': 'nuts/RO421'}" -"","{'GeoId': 'nuts/RO422'}" -"","{'GeoId': 'nuts/RO423'}" -"","{'GeoId': 'nuts/RO424'}" -"","{'GeoId': 'nuts/RS1'}" -"","{'GeoId': 'nuts/RS11'}" -"","{'GeoId': 'nuts/RS110'}" -"","{'GeoId': 'nuts/RS12'}" -"","{'GeoId': 'nuts/RS121'}" -"","{'GeoId': 'nuts/RS122'}" -"","{'GeoId': 'nuts/RS123'}" -"","{'GeoId': 'nuts/RS124'}" -"","{'GeoId': 'nuts/RS125'}" -"","{'GeoId': 'nuts/RS126'}" -"","{'GeoId': 'nuts/RS127'}" -"","{'GeoId': 'nuts/RS2'}" -"","{'GeoId': 'nuts/RS21'}" -"","{'GeoId': 'nuts/RS211'}" -"","{'GeoId': 'nuts/RS212'}" -"","{'GeoId': 'nuts/RS213'}" -"","{'GeoId': 'nuts/RS214'}" -"","{'GeoId': 'nuts/RS215'}" -"","{'GeoId': 'nuts/RS216'}" -"","{'GeoId': 'nuts/RS217'}" -"","{'GeoId': 'nuts/RS218'}" -"","{'GeoId': 'nuts/RS22'}" -"","{'GeoId': 'nuts/RS221'}" -"","{'GeoId': 'nuts/RS222'}" -"","{'GeoId': 'nuts/RS223'}" -"","{'GeoId': 'nuts/RS224'}" -"","{'GeoId': 'nuts/RS225'}" -"","{'GeoId': 'nuts/RS226'}" -"","{'GeoId': 'nuts/RS227'}" -"","{'GeoId': 'nuts/RS228'}" -"","{'GeoId': 'nuts/RS229'}" -"","{'GeoId': 'nuts/SE1'}" -"","{'GeoId': 'nuts/SE11'}" -"","{'GeoId': 'nuts/SE110'}" -"","{'GeoId': 'nuts/SE12'}" -"","{'GeoId': 'nuts/SE121'}" -"","{'GeoId': 'nuts/SE122'}" -"","{'GeoId': 'nuts/SE123'}" -"","{'GeoId': 'nuts/SE124'}" -"","{'GeoId': 'nuts/SE125'}" -"","{'GeoId': 'nuts/SE2'}" -"","{'GeoId': 'nuts/SE21'}" -"","{'GeoId': 'nuts/SE211'}" -"","{'GeoId': 'nuts/SE212'}" -"","{'GeoId': 'nuts/SE213'}" -"","{'GeoId': 'nuts/SE214'}" -"","{'GeoId': 'nuts/SE22'}" -"","{'GeoId': 'nuts/SE221'}" -"","{'GeoId': 'nuts/SE224'}" -"","{'GeoId': 'nuts/SE23'}" -"","{'GeoId': 'nuts/SE231'}" -"","{'GeoId': 'nuts/SE232'}" -"","{'GeoId': 'nuts/SE3'}" -"","{'GeoId': 'nuts/SE31'}" -"","{'GeoId': 'nuts/SE311'}" -"","{'GeoId': 'nuts/SE312'}" -"","{'GeoId': 'nuts/SE313'}" -"","{'GeoId': 'nuts/SE32'}" -"","{'GeoId': 'nuts/SE321'}" -"","{'GeoId': 'nuts/SE322'}" -"","{'GeoId': 'nuts/SE33'}" -"","{'GeoId': 'nuts/SE331'}" -"","{'GeoId': 'nuts/SE332'}" -"","{'GeoId': 'nuts/SI0'}" -"","{'GeoId': 'nuts/SI03'}" -"","{'GeoId': 'nuts/SI031'}" -"","{'GeoId': 'nuts/SI032'}" -"","{'GeoId': 'nuts/SI033'}" -"","{'GeoId': 'nuts/SI034'}" -"","{'GeoId': 'nuts/SI035'}" -"","{'GeoId': 'nuts/SI036'}" -"","{'GeoId': 'nuts/SI037'}" -"","{'GeoId': 'nuts/SI038'}" -"","{'GeoId': 'nuts/SI04'}" -"","{'GeoId': 'nuts/SI041'}" -"","{'GeoId': 'nuts/SI042'}" -"","{'GeoId': 'nuts/SI043'}" -"","{'GeoId': 'nuts/SI044'}" -"","{'GeoId': 'nuts/SK0'}" -"","{'GeoId': 'nuts/SK01'}" -"","{'GeoId': 'nuts/SK010'}" -"","{'GeoId': 'nuts/SK02'}" -"","{'GeoId': 'nuts/SK021'}" -"","{'GeoId': 'nuts/SK022'}" -"","{'GeoId': 'nuts/SK023'}" -"","{'GeoId': 'nuts/SK03'}" -"","{'GeoId': 'nuts/SK031'}" -"","{'GeoId': 'nuts/SK032'}" -"","{'GeoId': 'nuts/SK04'}" -"","{'GeoId': 'nuts/SK041'}" -"","{'GeoId': 'nuts/SK042'}" -"","{'GeoId': 'nuts/TR1'}" -"","{'GeoId': 'nuts/TR10'}" -"","{'GeoId': 'nuts/TR100'}" -"","{'GeoId': 'nuts/TR2'}" -"","{'GeoId': 'nuts/TR21'}" -"","{'GeoId': 'nuts/TR211'}" -"","{'GeoId': 'nuts/TR212'}" -"","{'GeoId': 'nuts/TR213'}" -"","{'GeoId': 'nuts/TR22'}" -"","{'GeoId': 'nuts/TR221'}" -"","{'GeoId': 'nuts/TR222'}" -"","{'GeoId': 'nuts/TR3'}" -"","{'GeoId': 'nuts/TR31'}" -"","{'GeoId': 'nuts/TR310'}" -"","{'GeoId': 'nuts/TR32'}" -"","{'GeoId': 'nuts/TR321'}" -"","{'GeoId': 'nuts/TR322'}" -"","{'GeoId': 'nuts/TR323'}" -"","{'GeoId': 'nuts/TR33'}" -"","{'GeoId': 'nuts/TR331'}" -"","{'GeoId': 'nuts/TR332'}" -"","{'GeoId': 'nuts/TR333'}" -"","{'GeoId': 'nuts/TR334'}" -"","{'GeoId': 'nuts/TR4'}" -"","{'GeoId': 'nuts/TR41'}" -"","{'GeoId': 'nuts/TR411'}" -"","{'GeoId': 'nuts/TR412'}" -"","{'GeoId': 'nuts/TR413'}" -"","{'GeoId': 'nuts/TR42'}" -"","{'GeoId': 'nuts/TR421'}" -"","{'GeoId': 'nuts/TR422'}" -"","{'GeoId': 'nuts/TR423'}" -"","{'GeoId': 'nuts/TR424'}" -"","{'GeoId': 'nuts/TR425'}" -"","{'GeoId': 'nuts/TR5'}" -"","{'GeoId': 'nuts/TR51'}" -"","{'GeoId': 'nuts/TR510'}" -"","{'GeoId': 'nuts/TR52'}" -"","{'GeoId': 'nuts/TR521'}" -"","{'GeoId': 'nuts/TR522'}" -"","{'GeoId': 'nuts/TR6'}" -"","{'GeoId': 'nuts/TR61'}" -"","{'GeoId': 'nuts/TR611'}" -"","{'GeoId': 'nuts/TR612'}" -"","{'GeoId': 'nuts/TR613'}" -"","{'GeoId': 'nuts/TR62'}" -"","{'GeoId': 'nuts/TR621'}" -"","{'GeoId': 'nuts/TR622'}" -"","{'GeoId': 'nuts/TR63'}" -"","{'GeoId': 'nuts/TR631'}" -"","{'GeoId': 'nuts/TR632'}" -"","{'GeoId': 'nuts/TR633'}" -"","{'GeoId': 'nuts/TR7'}" -"","{'GeoId': 'nuts/TR71'}" -"","{'GeoId': 'nuts/TR711'}" -"","{'GeoId': 'nuts/TR712'}" -"","{'GeoId': 'nuts/TR713'}" -"","{'GeoId': 'nuts/TR714'}" -"","{'GeoId': 'nuts/TR715'}" -"","{'GeoId': 'nuts/TR72'}" -"","{'GeoId': 'nuts/TR721'}" -"","{'GeoId': 'nuts/TR722'}" -"","{'GeoId': 'nuts/TR723'}" -"","{'GeoId': 'nuts/TR8'}" -"","{'GeoId': 'nuts/TR81'}" -"","{'GeoId': 'nuts/TR811'}" -"","{'GeoId': 'nuts/TR812'}" -"","{'GeoId': 'nuts/TR813'}" -"","{'GeoId': 'nuts/TR82'}" -"","{'GeoId': 'nuts/TR821'}" -"","{'GeoId': 'nuts/TR822'}" -"","{'GeoId': 'nuts/TR823'}" -"","{'GeoId': 'nuts/TR83'}" -"","{'GeoId': 'nuts/TR831'}" -"","{'GeoId': 'nuts/TR832'}" -"","{'GeoId': 'nuts/TR833'}" -"","{'GeoId': 'nuts/TR834'}" -"","{'GeoId': 'nuts/TR9'}" -"","{'GeoId': 'nuts/TR90'}" -"","{'GeoId': 'nuts/TR901'}" -"","{'GeoId': 'nuts/TR902'}" -"","{'GeoId': 'nuts/TR903'}" -"","{'GeoId': 'nuts/TR904'}" -"","{'GeoId': 'nuts/TR905'}" -"","{'GeoId': 'nuts/TR906'}" -"","{'GeoId': 'nuts/TRA'}" -"","{'GeoId': 'nuts/TRA1'}" -"","{'GeoId': 'nuts/TRA11'}" -"","{'GeoId': 'nuts/TRA12'}" -"","{'GeoId': 'nuts/TRA13'}" -"","{'GeoId': 'nuts/TRA2'}" -"","{'GeoId': 'nuts/TRA21'}" -"","{'GeoId': 'nuts/TRA22'}" -"","{'GeoId': 'nuts/TRA23'}" -"","{'GeoId': 'nuts/TRA24'}" -"","{'GeoId': 'nuts/TRB'}" -"","{'GeoId': 'nuts/TRB1'}" -"","{'GeoId': 'nuts/TRB11'}" -"","{'GeoId': 'nuts/TRB12'}" -"","{'GeoId': 'nuts/TRB13'}" -"","{'GeoId': 'nuts/TRB14'}" -"","{'GeoId': 'nuts/TRB2'}" -"","{'GeoId': 'nuts/TRB21'}" -"","{'GeoId': 'nuts/TRB22'}" -"","{'GeoId': 'nuts/TRB23'}" -"","{'GeoId': 'nuts/TRB24'}" -"","{'GeoId': 'nuts/TRC'}" -"","{'GeoId': 'nuts/TRC1'}" -"","{'GeoId': 'nuts/TRC11'}" -"","{'GeoId': 'nuts/TRC12'}" -"","{'GeoId': 'nuts/TRC13'}" -"","{'GeoId': 'nuts/TRC2'}" -"","{'GeoId': 'nuts/TRC21'}" -"","{'GeoId': 'nuts/TRC22'}" -"","{'GeoId': 'nuts/TRC3'}" -"","{'GeoId': 'nuts/TRC31'}" -"","{'GeoId': 'nuts/TRC32'}" -"","{'GeoId': 'nuts/TRC33'}" -"","{'GeoId': 'nuts/TRC34'}" -"","{'GeoId': 'nuts/UKC'}" -"","{'GeoId': 'nuts/UKC1'}" -"","{'GeoId': 'nuts/UKC11'}" -"","{'GeoId': 'nuts/UKC12'}" -"","{'GeoId': 'nuts/UKC13'}" -"","{'GeoId': 'nuts/UKC14'}" -"","{'GeoId': 'nuts/UKC2'}" -"","{'GeoId': 'nuts/UKC21'}" -"","{'GeoId': 'nuts/UKC22'}" -"","{'GeoId': 'nuts/UKC23'}" -"","{'GeoId': 'nuts/UKD'}" -"","{'GeoId': 'nuts/UKD1'}" -"","{'GeoId': 'nuts/UKD11'}" -"","{'GeoId': 'nuts/UKD12'}" -"","{'GeoId': 'nuts/UKD3'}" -"","{'GeoId': 'nuts/UKD33'}" -"","{'GeoId': 'nuts/UKD34'}" -"","{'GeoId': 'nuts/UKD35'}" -"","{'GeoId': 'nuts/UKD36'}" -"","{'GeoId': 'nuts/UKD37'}" -"","{'GeoId': 'nuts/UKD4'}" -"","{'GeoId': 'nuts/UKD41'}" -"","{'GeoId': 'nuts/UKD42'}" -"","{'GeoId': 'nuts/UKD44'}" -"","{'GeoId': 'nuts/UKD45'}" -"","{'GeoId': 'nuts/UKD46'}" -"","{'GeoId': 'nuts/UKD47'}" -"","{'GeoId': 'nuts/UKD6'}" -"","{'GeoId': 'nuts/UKD61'}" -"","{'GeoId': 'nuts/UKD62'}" -"","{'GeoId': 'nuts/UKD63'}" -"","{'GeoId': 'nuts/UKD7'}" -"","{'GeoId': 'nuts/UKD71'}" -"","{'GeoId': 'nuts/UKD72'}" -"","{'GeoId': 'nuts/UKD73'}" -"","{'GeoId': 'nuts/UKD74'}" -"","{'GeoId': 'nuts/UKE'}" -"","{'GeoId': 'nuts/UKE1'}" -"","{'GeoId': 'nuts/UKE11'}" -"","{'GeoId': 'nuts/UKE12'}" -"","{'GeoId': 'nuts/UKE13'}" -"","{'GeoId': 'nuts/UKE2'}" -"","{'GeoId': 'nuts/UKE21'}" -"","{'GeoId': 'nuts/UKE22'}" -"","{'GeoId': 'nuts/UKE3'}" -"","{'GeoId': 'nuts/UKE31'}" -"","{'GeoId': 'nuts/UKE32'}" -"","{'GeoId': 'nuts/UKE4'}" -"","{'GeoId': 'nuts/UKE41'}" -"","{'GeoId': 'nuts/UKE42'}" -"","{'GeoId': 'nuts/UKE44'}" -"","{'GeoId': 'nuts/UKE45'}" -"","{'GeoId': 'nuts/UKF'}" -"","{'GeoId': 'nuts/UKF1'}" -"","{'GeoId': 'nuts/UKF11'}" -"","{'GeoId': 'nuts/UKF12'}" -"","{'GeoId': 'nuts/UKF13'}" -"","{'GeoId': 'nuts/UKF14'}" -"","{'GeoId': 'nuts/UKF15'}" -"","{'GeoId': 'nuts/UKF16'}" -"","{'GeoId': 'nuts/UKF2'}" -"","{'GeoId': 'nuts/UKF21'}" -"","{'GeoId': 'nuts/UKF22'}" -"","{'GeoId': 'nuts/UKF24'}" -"","{'GeoId': 'nuts/UKF25'}" -"","{'GeoId': 'nuts/UKF3'}" -"","{'GeoId': 'nuts/UKF30'}" -"","{'GeoId': 'nuts/UKG'}" -"","{'GeoId': 'nuts/UKG1'}" -"","{'GeoId': 'nuts/UKG11'}" -"","{'GeoId': 'nuts/UKG12'}" -"","{'GeoId': 'nuts/UKG13'}" -"","{'GeoId': 'nuts/UKG2'}" -"","{'GeoId': 'nuts/UKG21'}" -"","{'GeoId': 'nuts/UKG22'}" -"","{'GeoId': 'nuts/UKG23'}" -"","{'GeoId': 'nuts/UKG24'}" -"","{'GeoId': 'nuts/UKG3'}" -"","{'GeoId': 'nuts/UKG31'}" -"","{'GeoId': 'nuts/UKG32'}" -"","{'GeoId': 'nuts/UKG33'}" -"","{'GeoId': 'nuts/UKG36'}" -"","{'GeoId': 'nuts/UKG37'}" -"","{'GeoId': 'nuts/UKG38'}" -"","{'GeoId': 'nuts/UKG39'}" -"","{'GeoId': 'nuts/UKH'}" -"","{'GeoId': 'nuts/UKH1'}" -"","{'GeoId': 'nuts/UKH11'}" -"","{'GeoId': 'nuts/UKH12'}" -"","{'GeoId': 'nuts/UKH14'}" -"","{'GeoId': 'nuts/UKH15'}" -"","{'GeoId': 'nuts/UKH16'}" -"","{'GeoId': 'nuts/UKH17'}" -"","{'GeoId': 'nuts/UKH2'}" -"","{'GeoId': 'nuts/UKH21'}" -"","{'GeoId': 'nuts/UKH23'}" -"","{'GeoId': 'nuts/UKH24'}" -"","{'GeoId': 'nuts/UKH25'}" -"","{'GeoId': 'nuts/UKH3'}" -"","{'GeoId': 'nuts/UKH31'}" -"","{'GeoId': 'nuts/UKH32'}" -"","{'GeoId': 'nuts/UKH34'}" -"","{'GeoId': 'nuts/UKH35'}" -"","{'GeoId': 'nuts/UKH36'}" -"","{'GeoId': 'nuts/UKH37'}" -"","{'GeoId': 'nuts/UKI'}" -"","{'GeoId': 'nuts/UKI3'}" -"","{'GeoId': 'nuts/UKI31'}" -"","{'GeoId': 'nuts/UKI32'}" -"","{'GeoId': 'nuts/UKI33'}" -"","{'GeoId': 'nuts/UKI34'}" -"","{'GeoId': 'nuts/UKI4'}" -"","{'GeoId': 'nuts/UKI41'}" -"","{'GeoId': 'nuts/UKI42'}" -"","{'GeoId': 'nuts/UKI43'}" -"","{'GeoId': 'nuts/UKI44'}" -"","{'GeoId': 'nuts/UKI45'}" -"","{'GeoId': 'nuts/UKI5'}" -"","{'GeoId': 'nuts/UKI51'}" -"","{'GeoId': 'nuts/UKI52'}" -"","{'GeoId': 'nuts/UKI53'}" -"","{'GeoId': 'nuts/UKI54'}" -"","{'GeoId': 'nuts/UKI6'}" -"","{'GeoId': 'nuts/UKI61'}" -"","{'GeoId': 'nuts/UKI62'}" -"","{'GeoId': 'nuts/UKI63'}" -"","{'GeoId': 'nuts/UKI7'}" -"","{'GeoId': 'nuts/UKI71'}" -"","{'GeoId': 'nuts/UKI72'}" -"","{'GeoId': 'nuts/UKI73'}" -"","{'GeoId': 'nuts/UKI74'}" -"","{'GeoId': 'nuts/UKI75'}" -"","{'GeoId': 'nuts/UKJ'}" -"","{'GeoId': 'nuts/UKJ1'}" -"","{'GeoId': 'nuts/UKJ11'}" -"","{'GeoId': 'nuts/UKJ12'}" -"","{'GeoId': 'nuts/UKJ13'}" -"","{'GeoId': 'nuts/UKJ14'}" -"","{'GeoId': 'nuts/UKJ2'}" -"","{'GeoId': 'nuts/UKJ21'}" -"","{'GeoId': 'nuts/UKJ22'}" -"","{'GeoId': 'nuts/UKJ25'}" -"","{'GeoId': 'nuts/UKJ26'}" -"","{'GeoId': 'nuts/UKJ27'}" -"","{'GeoId': 'nuts/UKJ28'}" -"","{'GeoId': 'nuts/UKJ3'}" -"","{'GeoId': 'nuts/UKJ31'}" -"","{'GeoId': 'nuts/UKJ32'}" -"","{'GeoId': 'nuts/UKJ34'}" -"","{'GeoId': 'nuts/UKJ35'}" -"","{'GeoId': 'nuts/UKJ36'}" -"","{'GeoId': 'nuts/UKJ37'}" -"","{'GeoId': 'nuts/UKJ4'}" -"","{'GeoId': 'nuts/UKJ41'}" -"","{'GeoId': 'nuts/UKJ43'}" -"","{'GeoId': 'nuts/UKJ44'}" -"","{'GeoId': 'nuts/UKJ45'}" -"","{'GeoId': 'nuts/UKJ46'}" -"","{'GeoId': 'nuts/UKK'}" -"","{'GeoId': 'nuts/UKK1'}" -"","{'GeoId': 'nuts/UKK11'}" -"","{'GeoId': 'nuts/UKK12'}" -"","{'GeoId': 'nuts/UKK13'}" -"","{'GeoId': 'nuts/UKK14'}" -"","{'GeoId': 'nuts/UKK15'}" -"","{'GeoId': 'nuts/UKK2'}" -"","{'GeoId': 'nuts/UKK21'}" -"","{'GeoId': 'nuts/UKK22'}" -"","{'GeoId': 'nuts/UKK23'}" -"","{'GeoId': 'nuts/UKK3'}" -"","{'GeoId': 'nuts/UKK30'}" -"","{'GeoId': 'nuts/UKK4'}" -"","{'GeoId': 'nuts/UKK41'}" -"","{'GeoId': 'nuts/UKK42'}" -"","{'GeoId': 'nuts/UKK43'}" -"","{'GeoId': 'nuts/UKL'}" -"","{'GeoId': 'nuts/UKL1'}" -"","{'GeoId': 'nuts/UKL11'}" -"","{'GeoId': 'nuts/UKL12'}" -"","{'GeoId': 'nuts/UKL13'}" -"","{'GeoId': 'nuts/UKL14'}" -"","{'GeoId': 'nuts/UKL15'}" -"","{'GeoId': 'nuts/UKL16'}" -"","{'GeoId': 'nuts/UKL17'}" -"","{'GeoId': 'nuts/UKL18'}" -"","{'GeoId': 'nuts/UKL2'}" -"","{'GeoId': 'nuts/UKL21'}" -"","{'GeoId': 'nuts/UKL22'}" -"","{'GeoId': 'nuts/UKL23'}" -"","{'GeoId': 'nuts/UKL24'}" -"","{'GeoId': 'nuts/UKM'}" -"","{'GeoId': 'nuts/UKM5'}" -"","{'GeoId': 'nuts/UKM50'}" -"","{'GeoId': 'nuts/UKM6'}" -"","{'GeoId': 'nuts/UKM61'}" -"","{'GeoId': 'nuts/UKM62'}" -"","{'GeoId': 'nuts/UKM63'}" -"","{'GeoId': 'nuts/UKM64'}" -"","{'GeoId': 'nuts/UKM65'}" -"","{'GeoId': 'nuts/UKM66'}" -"","{'GeoId': 'nuts/UKM7'}" -"","{'GeoId': 'nuts/UKM71'}" -"","{'GeoId': 'nuts/UKM72'}" -"","{'GeoId': 'nuts/UKM73'}" -"","{'GeoId': 'nuts/UKM75'}" -"","{'GeoId': 'nuts/UKM76'}" -"","{'GeoId': 'nuts/UKM77'}" -"","{'GeoId': 'nuts/UKM78'}" -"","{'GeoId': 'nuts/UKM8'}" -"","{'GeoId': 'nuts/UKM81'}" -"","{'GeoId': 'nuts/UKM82'}" -"","{'GeoId': 'nuts/UKM83'}" -"","{'GeoId': 'nuts/UKM84'}" -"","{'GeoId': 'nuts/UKM9'}" -"","{'GeoId': 'nuts/UKM91'}" -"","{'GeoId': 'nuts/UKM92'}" -"","{'GeoId': 'nuts/UKM93'}" -"","{'GeoId': 'nuts/UKM94'}" -"","{'GeoId': 'nuts/UKM95'}" -"","{'GeoId': 'nuts/UKN'}" -"","{'GeoId': 'nuts/UKN0'}" -"","{'GeoId': 'nuts/UKN06'}" -"","{'GeoId': 'nuts/UKN07'}" -"","{'GeoId': 'nuts/UKN08'}" -"","{'GeoId': 'nuts/UKN09'}" -"","{'GeoId': 'nuts/UKN10'}" -"","{'GeoId': 'nuts/UKN11'}" -"","{'GeoId': 'nuts/UKN12'}" -"","{'GeoId': 'nuts/UKN13'}" -"","{'GeoId': 'nuts/UKN14'}" -"","{'GeoId': 'nuts/UKN15'}" -"","{'GeoId': 'nuts/UKN16'}" +"GeoId" +"country/ALB" +"country/AUT" +"country/BEL" +"country/BGR" +"country/CHE" +"country/CYP" +"country/CZE" +"country/DEU" +"country/DNK" +"country/ESP" +"country/EST" +"country/FIN" +"country/FRA" +"country/GBR" +"country/GRC" +"country/HRV" +"country/HUN" +"country/IRL" +"country/ISL" +"country/ITA" +"country/LIE" +"country/LTU" +"country/LUX" +"country/LVA" +"country/MKD" +"country/MLT" +"country/MNE" +"country/NLD" +"country/NOR" +"country/POL" +"country/PRT" +"country/ROU" +"country/SRB" +"country/SVK" +"country/SVN" +"country/SWE" +"country/TUR" +"nuts/AL0" +"nuts/AL01" +"nuts/AL011" +"nuts/AL012" +"nuts/AL013" +"nuts/AL014" +"nuts/AL015" +"nuts/AL02" +"nuts/AL021" +"nuts/AL022" +"nuts/AL03" +"nuts/AL031" +"nuts/AL032" +"nuts/AL033" +"nuts/AL034" +"nuts/AL035" +"nuts/AT1" +"nuts/AT11" +"nuts/AT111" +"nuts/AT112" +"nuts/AT113" +"nuts/AT12" +"nuts/AT121" +"nuts/AT122" +"nuts/AT123" +"nuts/AT124" +"nuts/AT125" +"nuts/AT126" +"nuts/AT127" +"nuts/AT13" +"nuts/AT130" +"nuts/AT2" +"nuts/AT21" +"nuts/AT211" +"nuts/AT212" +"nuts/AT213" +"nuts/AT22" +"nuts/AT221" +"nuts/AT222" +"nuts/AT223" +"nuts/AT224" +"nuts/AT225" +"nuts/AT226" +"nuts/AT3" +"nuts/AT31" +"nuts/AT311" +"nuts/AT312" +"nuts/AT313" +"nuts/AT314" +"nuts/AT315" +"nuts/AT32" +"nuts/AT321" +"nuts/AT322" +"nuts/AT323" +"nuts/AT33" +"nuts/AT331" +"nuts/AT332" +"nuts/AT333" +"nuts/AT334" +"nuts/AT335" +"nuts/AT34" +"nuts/AT341" +"nuts/AT342" +"nuts/BE1" +"nuts/BE10" +"nuts/BE100" +"nuts/BE2" +"nuts/BE21" +"nuts/BE211" +"nuts/BE212" +"nuts/BE213" +"nuts/BE22" +"nuts/BE221" +"nuts/BE222" +"nuts/BE223" +"nuts/BE224" +"nuts/BE225" +"nuts/BE23" +"nuts/BE231" +"nuts/BE232" +"nuts/BE233" +"nuts/BE234" +"nuts/BE235" +"nuts/BE236" +"nuts/BE24" +"nuts/BE241" +"nuts/BE242" +"nuts/BE25" +"nuts/BE251" +"nuts/BE252" +"nuts/BE253" +"nuts/BE254" +"nuts/BE255" +"nuts/BE256" +"nuts/BE257" +"nuts/BE258" +"nuts/BE3" +"nuts/BE31" +"nuts/BE310" +"nuts/BE32" +"nuts/BE321" +"nuts/BE322" +"nuts/BE323" +"nuts/BE324" +"nuts/BE325" +"nuts/BE326" +"nuts/BE327" +"nuts/BE328" +"nuts/BE329" +"nuts/BE32A" +"nuts/BE32B" +"nuts/BE32C" +"nuts/BE32D" +"nuts/BE33" +"nuts/BE331" +"nuts/BE332" +"nuts/BE334" +"nuts/BE335" +"nuts/BE336" +"nuts/BE34" +"nuts/BE341" +"nuts/BE342" +"nuts/BE343" +"nuts/BE344" +"nuts/BE345" +"nuts/BE35" +"nuts/BE351" +"nuts/BE352" +"nuts/BE353" +"nuts/BG3" +"nuts/BG31" +"nuts/BG311" +"nuts/BG312" +"nuts/BG313" +"nuts/BG314" +"nuts/BG315" +"nuts/BG32" +"nuts/BG321" +"nuts/BG322" +"nuts/BG323" +"nuts/BG324" +"nuts/BG325" +"nuts/BG33" +"nuts/BG331" +"nuts/BG332" +"nuts/BG333" +"nuts/BG334" +"nuts/BG34" +"nuts/BG341" +"nuts/BG342" +"nuts/BG343" +"nuts/BG344" +"nuts/BG4" +"nuts/BG41" +"nuts/BG411" +"nuts/BG412" +"nuts/BG413" +"nuts/BG414" +"nuts/BG415" +"nuts/BG42" +"nuts/BG421" +"nuts/BG422" +"nuts/BG423" +"nuts/BG424" +"nuts/BG425" +"nuts/CH0" +"nuts/CH01" +"nuts/CH011" +"nuts/CH012" +"nuts/CH013" +"nuts/CH02" +"nuts/CH021" +"nuts/CH022" +"nuts/CH023" +"nuts/CH024" +"nuts/CH025" +"nuts/CH03" +"nuts/CH031" +"nuts/CH032" +"nuts/CH033" +"nuts/CH04" +"nuts/CH040" +"nuts/CH05" +"nuts/CH051" +"nuts/CH052" +"nuts/CH053" +"nuts/CH055" +"nuts/CH056" +"nuts/CH057" +"nuts/CH06" +"nuts/CH061" +"nuts/CH062" +"nuts/CH063" +"nuts/CH064" +"nuts/CH065" +"nuts/CH066" +"nuts/CH07" +"nuts/CH070" +"nuts/CY0" +"nuts/CY00" +"nuts/CY000" +"nuts/CZ0" +"nuts/CZ01" +"nuts/CZ010" +"nuts/CZ02" +"nuts/CZ020" +"nuts/CZ03" +"nuts/CZ031" +"nuts/CZ032" +"nuts/CZ04" +"nuts/CZ041" +"nuts/CZ042" +"nuts/CZ05" +"nuts/CZ051" +"nuts/CZ052" +"nuts/CZ053" +"nuts/CZ06" +"nuts/CZ063" +"nuts/CZ064" +"nuts/CZ07" +"nuts/CZ071" +"nuts/CZ072" +"nuts/CZ08" +"nuts/CZ080" +"nuts/DE1" +"nuts/DE11" +"nuts/DE111" +"nuts/DE112" +"nuts/DE113" +"nuts/DE114" +"nuts/DE115" +"nuts/DE116" +"nuts/DE117" +"nuts/DE118" +"nuts/DE119" +"nuts/DE11A" +"nuts/DE11B" +"nuts/DE11C" +"nuts/DE11D" +"nuts/DE12" +"nuts/DE121" +"nuts/DE122" +"nuts/DE123" +"nuts/DE124" +"nuts/DE125" +"nuts/DE126" +"nuts/DE127" +"nuts/DE128" +"nuts/DE129" +"nuts/DE12A" +"nuts/DE12B" +"nuts/DE12C" +"nuts/DE13" +"nuts/DE131" +"nuts/DE132" +"nuts/DE133" +"nuts/DE134" +"nuts/DE135" +"nuts/DE136" +"nuts/DE137" +"nuts/DE138" +"nuts/DE139" +"nuts/DE13A" +"nuts/DE14" +"nuts/DE141" +"nuts/DE142" +"nuts/DE143" +"nuts/DE144" +"nuts/DE145" +"nuts/DE146" +"nuts/DE147" +"nuts/DE148" +"nuts/DE149" +"nuts/DE2" +"nuts/DE21" +"nuts/DE211" +"nuts/DE212" +"nuts/DE213" +"nuts/DE214" +"nuts/DE215" +"nuts/DE216" +"nuts/DE217" +"nuts/DE218" +"nuts/DE219" +"nuts/DE21A" +"nuts/DE21B" +"nuts/DE21C" +"nuts/DE21D" +"nuts/DE21E" +"nuts/DE21F" +"nuts/DE21G" +"nuts/DE21H" +"nuts/DE21I" +"nuts/DE21J" +"nuts/DE21K" +"nuts/DE21L" +"nuts/DE21M" +"nuts/DE21N" +"nuts/DE22" +"nuts/DE221" +"nuts/DE222" +"nuts/DE223" +"nuts/DE224" +"nuts/DE225" +"nuts/DE226" +"nuts/DE227" +"nuts/DE228" +"nuts/DE229" +"nuts/DE22A" +"nuts/DE22B" +"nuts/DE22C" +"nuts/DE23" +"nuts/DE231" +"nuts/DE232" +"nuts/DE233" +"nuts/DE234" +"nuts/DE235" +"nuts/DE236" +"nuts/DE237" +"nuts/DE238" +"nuts/DE239" +"nuts/DE23A" +"nuts/DE24" +"nuts/DE241" +"nuts/DE242" +"nuts/DE243" +"nuts/DE244" +"nuts/DE245" +"nuts/DE246" +"nuts/DE247" +"nuts/DE248" +"nuts/DE249" +"nuts/DE24A" +"nuts/DE24B" +"nuts/DE24C" +"nuts/DE24D" +"nuts/DE25" +"nuts/DE251" +"nuts/DE252" +"nuts/DE253" +"nuts/DE254" +"nuts/DE255" +"nuts/DE256" +"nuts/DE257" +"nuts/DE258" +"nuts/DE259" +"nuts/DE25A" +"nuts/DE25B" +"nuts/DE25C" +"nuts/DE26" +"nuts/DE261" +"nuts/DE262" +"nuts/DE263" +"nuts/DE264" +"nuts/DE265" +"nuts/DE266" +"nuts/DE267" +"nuts/DE268" +"nuts/DE269" +"nuts/DE26A" +"nuts/DE26B" +"nuts/DE26C" +"nuts/DE27" +"nuts/DE271" +"nuts/DE272" +"nuts/DE273" +"nuts/DE274" +"nuts/DE275" +"nuts/DE276" +"nuts/DE277" +"nuts/DE278" +"nuts/DE279" +"nuts/DE27A" +"nuts/DE27B" +"nuts/DE27C" +"nuts/DE27D" +"nuts/DE27E" +"nuts/DE3" +"nuts/DE30" +"nuts/DE300" +"nuts/DE4" +"nuts/DE40" +"nuts/DE401" +"nuts/DE402" +"nuts/DE403" +"nuts/DE404" +"nuts/DE405" +"nuts/DE406" +"nuts/DE407" +"nuts/DE408" +"nuts/DE409" +"nuts/DE40A" +"nuts/DE40B" +"nuts/DE40C" +"nuts/DE40D" +"nuts/DE40E" +"nuts/DE40F" +"nuts/DE40G" +"nuts/DE40H" +"nuts/DE40I" +"nuts/DE5" +"nuts/DE50" +"nuts/DE501" +"nuts/DE502" +"nuts/DE6" +"nuts/DE60" +"nuts/DE600" +"nuts/DE7" +"nuts/DE71" +"nuts/DE711" +"nuts/DE712" +"nuts/DE713" +"nuts/DE714" +"nuts/DE715" +"nuts/DE716" +"nuts/DE717" +"nuts/DE718" +"nuts/DE719" +"nuts/DE71A" +"nuts/DE71B" +"nuts/DE71C" +"nuts/DE71D" +"nuts/DE71E" +"nuts/DE72" +"nuts/DE721" +"nuts/DE722" +"nuts/DE723" +"nuts/DE724" +"nuts/DE725" +"nuts/DE73" +"nuts/DE731" +"nuts/DE732" +"nuts/DE733" +"nuts/DE734" +"nuts/DE735" +"nuts/DE736" +"nuts/DE737" +"nuts/DE8" +"nuts/DE80" +"nuts/DE803" +"nuts/DE804" +"nuts/DE80J" +"nuts/DE80K" +"nuts/DE80L" +"nuts/DE80M" +"nuts/DE80N" +"nuts/DE80O" +"nuts/DE9" +"nuts/DE91" +"nuts/DE911" +"nuts/DE912" +"nuts/DE913" +"nuts/DE914" +"nuts/DE916" +"nuts/DE917" +"nuts/DE918" +"nuts/DE91A" +"nuts/DE91B" +"nuts/DE91C" +"nuts/DE92" +"nuts/DE922" +"nuts/DE923" +"nuts/DE925" +"nuts/DE926" +"nuts/DE927" +"nuts/DE928" +"nuts/DE929" +"nuts/DE93" +"nuts/DE931" +"nuts/DE932" +"nuts/DE933" +"nuts/DE934" +"nuts/DE935" +"nuts/DE936" +"nuts/DE937" +"nuts/DE938" +"nuts/DE939" +"nuts/DE93A" +"nuts/DE93B" +"nuts/DE94" +"nuts/DE941" +"nuts/DE942" +"nuts/DE943" +"nuts/DE944" +"nuts/DE945" +"nuts/DE946" +"nuts/DE947" +"nuts/DE948" +"nuts/DE949" +"nuts/DE94A" +"nuts/DE94B" +"nuts/DE94C" +"nuts/DE94D" +"nuts/DE94E" +"nuts/DE94F" +"nuts/DE94G" +"nuts/DE94H" +"nuts/DEA" +"nuts/DEA1" +"nuts/DEA11" +"nuts/DEA12" +"nuts/DEA13" +"nuts/DEA14" +"nuts/DEA15" +"nuts/DEA16" +"nuts/DEA17" +"nuts/DEA18" +"nuts/DEA19" +"nuts/DEA1A" +"nuts/DEA1B" +"nuts/DEA1C" +"nuts/DEA1D" +"nuts/DEA1E" +"nuts/DEA1F" +"nuts/DEA2" +"nuts/DEA22" +"nuts/DEA23" +"nuts/DEA24" +"nuts/DEA26" +"nuts/DEA27" +"nuts/DEA28" +"nuts/DEA29" +"nuts/DEA2A" +"nuts/DEA2B" +"nuts/DEA2C" +"nuts/DEA2D" +"nuts/DEA3" +"nuts/DEA31" +"nuts/DEA32" +"nuts/DEA33" +"nuts/DEA34" +"nuts/DEA35" +"nuts/DEA36" +"nuts/DEA37" +"nuts/DEA38" +"nuts/DEA4" +"nuts/DEA41" +"nuts/DEA42" +"nuts/DEA43" +"nuts/DEA44" +"nuts/DEA45" +"nuts/DEA46" +"nuts/DEA47" +"nuts/DEA5" +"nuts/DEA51" +"nuts/DEA52" +"nuts/DEA53" +"nuts/DEA54" +"nuts/DEA55" +"nuts/DEA56" +"nuts/DEA57" +"nuts/DEA58" +"nuts/DEA59" +"nuts/DEA5A" +"nuts/DEA5B" +"nuts/DEA5C" +"nuts/DEB" +"nuts/DEB1" +"nuts/DEB11" +"nuts/DEB12" +"nuts/DEB13" +"nuts/DEB14" +"nuts/DEB15" +"nuts/DEB17" +"nuts/DEB18" +"nuts/DEB1A" +"nuts/DEB1B" +"nuts/DEB1C" +"nuts/DEB1D" +"nuts/DEB2" +"nuts/DEB21" +"nuts/DEB22" +"nuts/DEB23" +"nuts/DEB24" +"nuts/DEB25" +"nuts/DEB3" +"nuts/DEB31" +"nuts/DEB32" +"nuts/DEB33" +"nuts/DEB34" +"nuts/DEB35" +"nuts/DEB36" +"nuts/DEB37" +"nuts/DEB38" +"nuts/DEB39" +"nuts/DEB3A" +"nuts/DEB3B" +"nuts/DEB3C" +"nuts/DEB3D" +"nuts/DEB3E" +"nuts/DEB3F" +"nuts/DEB3G" +"nuts/DEB3H" +"nuts/DEB3I" +"nuts/DEB3J" +"nuts/DEB3K" +"nuts/DEC" +"nuts/DEC0" +"nuts/DEC01" +"nuts/DEC02" +"nuts/DEC03" +"nuts/DEC04" +"nuts/DEC05" +"nuts/DEC06" +"nuts/DED" +"nuts/DED2" +"nuts/DED21" +"nuts/DED2C" +"nuts/DED2D" +"nuts/DED2E" +"nuts/DED2F" +"nuts/DED4" +"nuts/DED41" +"nuts/DED42" +"nuts/DED43" +"nuts/DED44" +"nuts/DED45" +"nuts/DED5" +"nuts/DED51" +"nuts/DED52" +"nuts/DED53" +"nuts/DEE" +"nuts/DEE0" +"nuts/DEE01" +"nuts/DEE02" +"nuts/DEE03" +"nuts/DEE04" +"nuts/DEE05" +"nuts/DEE06" +"nuts/DEE07" +"nuts/DEE08" +"nuts/DEE09" +"nuts/DEE0A" +"nuts/DEE0B" +"nuts/DEE0C" +"nuts/DEE0D" +"nuts/DEE0E" +"nuts/DEF" +"nuts/DEF0" +"nuts/DEF01" +"nuts/DEF02" +"nuts/DEF03" +"nuts/DEF04" +"nuts/DEF05" +"nuts/DEF06" +"nuts/DEF07" +"nuts/DEF08" +"nuts/DEF09" +"nuts/DEF0A" +"nuts/DEF0B" +"nuts/DEF0C" +"nuts/DEF0D" +"nuts/DEF0E" +"nuts/DEF0F" +"nuts/DEG" +"nuts/DEG0" +"nuts/DEG01" +"nuts/DEG02" +"nuts/DEG03" +"nuts/DEG04" +"nuts/DEG05" +"nuts/DEG06" +"nuts/DEG07" +"nuts/DEG09" +"nuts/DEG0A" +"nuts/DEG0B" +"nuts/DEG0C" +"nuts/DEG0D" +"nuts/DEG0E" +"nuts/DEG0F" +"nuts/DEG0G" +"nuts/DEG0H" +"nuts/DEG0I" +"nuts/DEG0J" +"nuts/DEG0K" +"nuts/DEG0L" +"nuts/DEG0M" +"nuts/DEG0N" +"nuts/DEG0P" +"nuts/DK0" +"nuts/DK01" +"nuts/DK011" +"nuts/DK012" +"nuts/DK013" +"nuts/DK014" +"nuts/DK02" +"nuts/DK021" +"nuts/DK022" +"nuts/DK03" +"nuts/DK031" +"nuts/DK032" +"nuts/DK04" +"nuts/DK041" +"nuts/DK042" +"nuts/DK05" +"nuts/DK050" +"nuts/EE0" +"nuts/EE00" +"nuts/EE001" +"nuts/EE004" +"nuts/EE006" +"nuts/EE007" +"nuts/EE008" +"nuts/EE009" +"nuts/EE00A" +"nuts/EL3" +"nuts/EL30" +"nuts/EL301" +"nuts/EL302" +"nuts/EL303" +"nuts/EL304" +"nuts/EL305" +"nuts/EL306" +"nuts/EL307" +"nuts/EL4" +"nuts/EL41" +"nuts/EL411" +"nuts/EL412" +"nuts/EL413" +"nuts/EL42" +"nuts/EL421" +"nuts/EL422" +"nuts/EL43" +"nuts/EL431" +"nuts/EL432" +"nuts/EL433" +"nuts/EL434" +"nuts/EL5" +"nuts/EL51" +"nuts/EL511" +"nuts/EL512" +"nuts/EL513" +"nuts/EL514" +"nuts/EL515" +"nuts/EL52" +"nuts/EL521" +"nuts/EL522" +"nuts/EL523" +"nuts/EL524" +"nuts/EL525" +"nuts/EL526" +"nuts/EL527" +"nuts/EL53" +"nuts/EL531" +"nuts/EL532" +"nuts/EL533" +"nuts/EL54" +"nuts/EL541" +"nuts/EL542" +"nuts/EL543" +"nuts/EL6" +"nuts/EL61" +"nuts/EL611" +"nuts/EL612" +"nuts/EL613" +"nuts/EL62" +"nuts/EL621" +"nuts/EL622" +"nuts/EL623" +"nuts/EL624" +"nuts/EL63" +"nuts/EL631" +"nuts/EL632" +"nuts/EL633" +"nuts/EL64" +"nuts/EL641" +"nuts/EL642" +"nuts/EL643" +"nuts/EL644" +"nuts/EL645" +"nuts/EL65" +"nuts/EL651" +"nuts/EL652" +"nuts/EL653" +"nuts/ES1" +"nuts/ES11" +"nuts/ES111" +"nuts/ES112" +"nuts/ES113" +"nuts/ES114" +"nuts/ES12" +"nuts/ES120" +"nuts/ES13" +"nuts/ES130" +"nuts/ES2" +"nuts/ES21" +"nuts/ES211" +"nuts/ES212" +"nuts/ES213" +"nuts/ES22" +"nuts/ES220" +"nuts/ES23" +"nuts/ES230" +"nuts/ES24" +"nuts/ES241" +"nuts/ES242" +"nuts/ES243" +"nuts/ES3" +"nuts/ES30" +"nuts/ES300" +"nuts/ES4" +"nuts/ES41" +"nuts/ES411" +"nuts/ES412" +"nuts/ES413" +"nuts/ES414" +"nuts/ES415" +"nuts/ES416" +"nuts/ES417" +"nuts/ES418" +"nuts/ES419" +"nuts/ES42" +"nuts/ES421" +"nuts/ES422" +"nuts/ES423" +"nuts/ES424" +"nuts/ES425" +"nuts/ES43" +"nuts/ES431" +"nuts/ES432" +"nuts/ES5" +"nuts/ES51" +"nuts/ES511" +"nuts/ES512" +"nuts/ES513" +"nuts/ES514" +"nuts/ES52" +"nuts/ES521" +"nuts/ES522" +"nuts/ES523" +"nuts/ES53" +"nuts/ES531" +"nuts/ES532" +"nuts/ES533" +"nuts/ES6" +"nuts/ES61" +"nuts/ES611" +"nuts/ES612" +"nuts/ES613" +"nuts/ES614" +"nuts/ES615" +"nuts/ES616" +"nuts/ES617" +"nuts/ES618" +"nuts/ES62" +"nuts/ES620" +"nuts/ES63" +"nuts/ES630" +"nuts/ES64" +"nuts/ES640" +"nuts/ES7" +"nuts/ES70" +"nuts/ES704" +"nuts/ES705" +"nuts/ES706" +"nuts/ES707" +"nuts/ES708" +"nuts/ES709" +"nuts/FI1" +"nuts/FI19" +"nuts/FI193" +"nuts/FI194" +"nuts/FI195" +"nuts/FI196" +"nuts/FI197" +"nuts/FI1B" +"nuts/FI1B1" +"nuts/FI1C" +"nuts/FI1C1" +"nuts/FI1C2" +"nuts/FI1C3" +"nuts/FI1C4" +"nuts/FI1C5" +"nuts/FI1D" +"nuts/FI1D1" +"nuts/FI1D2" +"nuts/FI1D3" +"nuts/FI1D5" +"nuts/FI1D7" +"nuts/FI1D8" +"nuts/FI1D9" +"nuts/FI2" +"nuts/FI20" +"nuts/FI200" +"nuts/FR1" +"nuts/FR10" +"nuts/FR101" +"nuts/FR102" +"nuts/FR103" +"nuts/FR104" +"nuts/FR105" +"nuts/FR106" +"nuts/FR107" +"nuts/FR108" +"nuts/FRB" +"nuts/FRB0" +"nuts/FRB01" +"nuts/FRB02" +"nuts/FRB03" +"nuts/FRB04" +"nuts/FRB05" +"nuts/FRB06" +"nuts/FRC" +"nuts/FRC1" +"nuts/FRC11" +"nuts/FRC12" +"nuts/FRC13" +"nuts/FRC14" +"nuts/FRC2" +"nuts/FRC21" +"nuts/FRC22" +"nuts/FRC23" +"nuts/FRC24" +"nuts/FRD" +"nuts/FRD1" +"nuts/FRD11" +"nuts/FRD12" +"nuts/FRD13" +"nuts/FRD2" +"nuts/FRD21" +"nuts/FRD22" +"nuts/FRE" +"nuts/FRE1" +"nuts/FRE11" +"nuts/FRE12" +"nuts/FRE2" +"nuts/FRE21" +"nuts/FRE22" +"nuts/FRE23" +"nuts/FRF" +"nuts/FRF1" +"nuts/FRF11" +"nuts/FRF12" +"nuts/FRF2" +"nuts/FRF21" +"nuts/FRF22" +"nuts/FRF23" +"nuts/FRF24" +"nuts/FRF3" +"nuts/FRF31" +"nuts/FRF32" +"nuts/FRF33" +"nuts/FRF34" +"nuts/FRG" +"nuts/FRG0" +"nuts/FRG01" +"nuts/FRG02" +"nuts/FRG03" +"nuts/FRG04" +"nuts/FRG05" +"nuts/FRH" +"nuts/FRH0" +"nuts/FRH01" +"nuts/FRH02" +"nuts/FRH03" +"nuts/FRH04" +"nuts/FRI" +"nuts/FRI1" +"nuts/FRI11" +"nuts/FRI12" +"nuts/FRI13" +"nuts/FRI14" +"nuts/FRI15" +"nuts/FRI2" +"nuts/FRI21" +"nuts/FRI22" +"nuts/FRI23" +"nuts/FRI3" +"nuts/FRI31" +"nuts/FRI32" +"nuts/FRI33" +"nuts/FRI34" +"nuts/FRJ" +"nuts/FRJ1" +"nuts/FRJ11" +"nuts/FRJ12" +"nuts/FRJ13" +"nuts/FRJ14" +"nuts/FRJ15" +"nuts/FRJ2" +"nuts/FRJ21" +"nuts/FRJ22" +"nuts/FRJ23" +"nuts/FRJ24" +"nuts/FRJ25" +"nuts/FRJ26" +"nuts/FRJ27" +"nuts/FRJ28" +"nuts/FRK" +"nuts/FRK1" +"nuts/FRK11" +"nuts/FRK12" +"nuts/FRK13" +"nuts/FRK14" +"nuts/FRK2" +"nuts/FRK21" +"nuts/FRK22" +"nuts/FRK23" +"nuts/FRK24" +"nuts/FRK25" +"nuts/FRK26" +"nuts/FRK27" +"nuts/FRK28" +"nuts/FRL" +"nuts/FRL0" +"nuts/FRL01" +"nuts/FRL02" +"nuts/FRL03" +"nuts/FRL04" +"nuts/FRL05" +"nuts/FRL06" +"nuts/FRM" +"nuts/FRM0" +"nuts/FRM01" +"nuts/FRM02" +"nuts/FRY" +"nuts/FRY1" +"nuts/FRY10" +"nuts/FRY2" +"nuts/FRY20" +"nuts/FRY3" +"nuts/FRY30" +"nuts/FRY4" +"nuts/FRY40" +"nuts/FRY5" +"nuts/FRY50" +"nuts/HR0" +"nuts/HR02" +"nuts/HR021" +"nuts/HR022" +"nuts/HR023" +"nuts/HR024" +"nuts/HR025" +"nuts/HR026" +"nuts/HR027" +"nuts/HR028" +"nuts/HR03" +"nuts/HR031" +"nuts/HR032" +"nuts/HR033" +"nuts/HR034" +"nuts/HR035" +"nuts/HR036" +"nuts/HR037" +"nuts/HR04" +"nuts/HR041" +"nuts/HR042" +"nuts/HR043" +"nuts/HR044" +"nuts/HR045" +"nuts/HR046" +"nuts/HR047" +"nuts/HR048" +"nuts/HR049" +"nuts/HR04A" +"nuts/HR04B" +"nuts/HR04C" +"nuts/HR04D" +"nuts/HR04E" +"nuts/HR05" +"nuts/HR050" +"nuts/HR06" +"nuts/HR061" +"nuts/HR062" +"nuts/HR063" +"nuts/HR064" +"nuts/HR065" +"nuts/HU1" +"nuts/HU11" +"nuts/HU110" +"nuts/HU12" +"nuts/HU120" +"nuts/HU2" +"nuts/HU21" +"nuts/HU211" +"nuts/HU212" +"nuts/HU213" +"nuts/HU22" +"nuts/HU221" +"nuts/HU222" +"nuts/HU223" +"nuts/HU23" +"nuts/HU231" +"nuts/HU232" +"nuts/HU233" +"nuts/HU3" +"nuts/HU31" +"nuts/HU311" +"nuts/HU312" +"nuts/HU313" +"nuts/HU32" +"nuts/HU321" +"nuts/HU322" +"nuts/HU323" +"nuts/HU33" +"nuts/HU331" +"nuts/HU332" +"nuts/HU333" +"nuts/IE0" +"nuts/IE04" +"nuts/IE041" +"nuts/IE042" +"nuts/IE05" +"nuts/IE051" +"nuts/IE052" +"nuts/IE053" +"nuts/IE06" +"nuts/IE061" +"nuts/IE062" +"nuts/IE063" +"nuts/IS0" +"nuts/IS00" +"nuts/IS001" +"nuts/IS002" +"nuts/ITC" +"nuts/ITC1" +"nuts/ITC11" +"nuts/ITC12" +"nuts/ITC13" +"nuts/ITC14" +"nuts/ITC15" +"nuts/ITC16" +"nuts/ITC17" +"nuts/ITC18" +"nuts/ITC2" +"nuts/ITC20" +"nuts/ITC3" +"nuts/ITC31" +"nuts/ITC32" +"nuts/ITC33" +"nuts/ITC34" +"nuts/ITC4" +"nuts/ITC41" +"nuts/ITC42" +"nuts/ITC43" +"nuts/ITC44" +"nuts/ITC46" +"nuts/ITC47" +"nuts/ITC48" +"nuts/ITC49" +"nuts/ITC4A" +"nuts/ITC4B" +"nuts/ITC4C" +"nuts/ITC4D" +"nuts/ITF" +"nuts/ITF1" +"nuts/ITF11" +"nuts/ITF12" +"nuts/ITF13" +"nuts/ITF14" +"nuts/ITF2" +"nuts/ITF21" +"nuts/ITF22" +"nuts/ITF3" +"nuts/ITF31" +"nuts/ITF32" +"nuts/ITF33" +"nuts/ITF34" +"nuts/ITF35" +"nuts/ITF4" +"nuts/ITF43" +"nuts/ITF44" +"nuts/ITF45" +"nuts/ITF46" +"nuts/ITF47" +"nuts/ITF48" +"nuts/ITF5" +"nuts/ITF51" +"nuts/ITF52" +"nuts/ITF6" +"nuts/ITF61" +"nuts/ITF62" +"nuts/ITF63" +"nuts/ITF64" +"nuts/ITF65" +"nuts/ITG" +"nuts/ITG1" +"nuts/ITG11" +"nuts/ITG12" +"nuts/ITG13" +"nuts/ITG14" +"nuts/ITG15" +"nuts/ITG16" +"nuts/ITG17" +"nuts/ITG18" +"nuts/ITG19" +"nuts/ITG2" +"nuts/ITG25" +"nuts/ITG26" +"nuts/ITG27" +"nuts/ITG28" +"nuts/ITG29" +"nuts/ITG2A" +"nuts/ITG2B" +"nuts/ITG2C" +"nuts/ITG2D" +"nuts/ITG2E" +"nuts/ITG2F" +"nuts/ITG2G" +"nuts/ITG2H" +"nuts/ITH" +"nuts/ITH1" +"nuts/ITH10" +"nuts/ITH2" +"nuts/ITH20" +"nuts/ITH3" +"nuts/ITH31" +"nuts/ITH32" +"nuts/ITH33" +"nuts/ITH34" +"nuts/ITH35" +"nuts/ITH36" +"nuts/ITH37" +"nuts/ITH4" +"nuts/ITH41" +"nuts/ITH42" +"nuts/ITH43" +"nuts/ITH44" +"nuts/ITH5" +"nuts/ITH51" +"nuts/ITH52" +"nuts/ITH53" +"nuts/ITH54" +"nuts/ITH55" +"nuts/ITH56" +"nuts/ITH57" +"nuts/ITH58" +"nuts/ITH59" +"nuts/ITI" +"nuts/ITI1" +"nuts/ITI11" +"nuts/ITI12" +"nuts/ITI13" +"nuts/ITI14" +"nuts/ITI15" +"nuts/ITI16" +"nuts/ITI17" +"nuts/ITI18" +"nuts/ITI19" +"nuts/ITI1A" +"nuts/ITI2" +"nuts/ITI21" +"nuts/ITI22" +"nuts/ITI3" +"nuts/ITI31" +"nuts/ITI32" +"nuts/ITI33" +"nuts/ITI34" +"nuts/ITI35" +"nuts/ITI4" +"nuts/ITI41" +"nuts/ITI42" +"nuts/ITI43" +"nuts/ITI44" +"nuts/ITI45" +"nuts/LI0" +"nuts/LI00" +"nuts/LI000" +"nuts/LT0" +"nuts/LT01" +"nuts/LT011" +"nuts/LT02" +"nuts/LT021" +"nuts/LT022" +"nuts/LT023" +"nuts/LT024" +"nuts/LT025" +"nuts/LT026" +"nuts/LT027" +"nuts/LT028" +"nuts/LT029" +"nuts/LU0" +"nuts/LU00" +"nuts/LU000" +"nuts/LV0" +"nuts/LV00" +"nuts/LV003" +"nuts/LV005" +"nuts/LV006" +"nuts/LV007" +"nuts/LV008" +"nuts/LV009" +"nuts/ME0" +"nuts/ME00" +"nuts/ME000" +"nuts/MK0" +"nuts/MK00" +"nuts/MK001" +"nuts/MK002" +"nuts/MK003" +"nuts/MK004" +"nuts/MK005" +"nuts/MK006" +"nuts/MK007" +"nuts/MK008" +"nuts/MT0" +"nuts/MT00" +"nuts/MT001" +"nuts/MT002" +"nuts/NL1" +"nuts/NL11" +"nuts/NL111" +"nuts/NL112" +"nuts/NL113" +"nuts/NL12" +"nuts/NL124" +"nuts/NL125" +"nuts/NL126" +"nuts/NL13" +"nuts/NL131" +"nuts/NL132" +"nuts/NL133" +"nuts/NL2" +"nuts/NL21" +"nuts/NL211" +"nuts/NL212" +"nuts/NL213" +"nuts/NL22" +"nuts/NL221" +"nuts/NL224" +"nuts/NL225" +"nuts/NL226" +"nuts/NL23" +"nuts/NL230" +"nuts/NL3" +"nuts/NL31" +"nuts/NL310" +"nuts/NL32" +"nuts/NL321" +"nuts/NL323" +"nuts/NL324" +"nuts/NL325" +"nuts/NL327" +"nuts/NL328" +"nuts/NL329" +"nuts/NL33" +"nuts/NL332" +"nuts/NL333" +"nuts/NL337" +"nuts/NL33A" +"nuts/NL33B" +"nuts/NL33C" +"nuts/NL34" +"nuts/NL341" +"nuts/NL342" +"nuts/NL4" +"nuts/NL41" +"nuts/NL411" +"nuts/NL412" +"nuts/NL413" +"nuts/NL414" +"nuts/NL42" +"nuts/NL421" +"nuts/NL422" +"nuts/NL423" +"nuts/NO0" +"nuts/NO01" +"nuts/NO011" +"nuts/NO012" +"nuts/NO02" +"nuts/NO020" +"nuts/NO021" +"nuts/NO022" +"nuts/NO03" +"nuts/NO031" +"nuts/NO032" +"nuts/NO033" +"nuts/NO034" +"nuts/NO04" +"nuts/NO041" +"nuts/NO042" +"nuts/NO043" +"nuts/NO05" +"nuts/NO051" +"nuts/NO052" +"nuts/NO053" +"nuts/NO06" +"nuts/NO060" +"nuts/NO061" +"nuts/NO062" +"nuts/NO07" +"nuts/NO071" +"nuts/NO072" +"nuts/NO073" +"nuts/NO074" +"nuts/NO08" +"nuts/NO081" +"nuts/NO082" +"nuts/NO09" +"nuts/NO091" +"nuts/NO092" +"nuts/NO0A" +"nuts/NO0A1" +"nuts/NO0A2" +"nuts/NO0A3" +"nuts/PL2" +"nuts/PL21" +"nuts/PL213" +"nuts/PL214" +"nuts/PL217" +"nuts/PL218" +"nuts/PL219" +"nuts/PL21A" +"nuts/PL22" +"nuts/PL224" +"nuts/PL225" +"nuts/PL227" +"nuts/PL228" +"nuts/PL229" +"nuts/PL22A" +"nuts/PL22B" +"nuts/PL22C" +"nuts/PL4" +"nuts/PL41" +"nuts/PL411" +"nuts/PL414" +"nuts/PL415" +"nuts/PL416" +"nuts/PL417" +"nuts/PL418" +"nuts/PL42" +"nuts/PL424" +"nuts/PL426" +"nuts/PL427" +"nuts/PL428" +"nuts/PL43" +"nuts/PL431" +"nuts/PL432" +"nuts/PL5" +"nuts/PL51" +"nuts/PL514" +"nuts/PL515" +"nuts/PL516" +"nuts/PL517" +"nuts/PL518" +"nuts/PL52" +"nuts/PL523" +"nuts/PL524" +"nuts/PL6" +"nuts/PL61" +"nuts/PL613" +"nuts/PL616" +"nuts/PL617" +"nuts/PL618" +"nuts/PL619" +"nuts/PL62" +"nuts/PL621" +"nuts/PL622" +"nuts/PL623" +"nuts/PL63" +"nuts/PL633" +"nuts/PL634" +"nuts/PL636" +"nuts/PL637" +"nuts/PL638" +"nuts/PL7" +"nuts/PL71" +"nuts/PL711" +"nuts/PL712" +"nuts/PL713" +"nuts/PL714" +"nuts/PL715" +"nuts/PL72" +"nuts/PL721" +"nuts/PL722" +"nuts/PL8" +"nuts/PL81" +"nuts/PL811" +"nuts/PL812" +"nuts/PL814" +"nuts/PL815" +"nuts/PL82" +"nuts/PL821" +"nuts/PL822" +"nuts/PL823" +"nuts/PL824" +"nuts/PL84" +"nuts/PL841" +"nuts/PL842" +"nuts/PL843" +"nuts/PL9" +"nuts/PL91" +"nuts/PL911" +"nuts/PL912" +"nuts/PL913" +"nuts/PL92" +"nuts/PL921" +"nuts/PL922" +"nuts/PL923" +"nuts/PL924" +"nuts/PL925" +"nuts/PL926" +"nuts/PT1" +"nuts/PT11" +"nuts/PT111" +"nuts/PT112" +"nuts/PT119" +"nuts/PT11A" +"nuts/PT11B" +"nuts/PT11C" +"nuts/PT11D" +"nuts/PT11E" +"nuts/PT15" +"nuts/PT150" +"nuts/PT16" +"nuts/PT16B" +"nuts/PT16D" +"nuts/PT16E" +"nuts/PT16F" +"nuts/PT16G" +"nuts/PT16H" +"nuts/PT16I" +"nuts/PT16J" +"nuts/PT17" +"nuts/PT170" +"nuts/PT18" +"nuts/PT181" +"nuts/PT184" +"nuts/PT185" +"nuts/PT186" +"nuts/PT187" +"nuts/PT2" +"nuts/PT20" +"nuts/PT200" +"nuts/PT3" +"nuts/PT30" +"nuts/PT300" +"nuts/RO1" +"nuts/RO11" +"nuts/RO111" +"nuts/RO112" +"nuts/RO113" +"nuts/RO114" +"nuts/RO115" +"nuts/RO116" +"nuts/RO12" +"nuts/RO121" +"nuts/RO122" +"nuts/RO123" +"nuts/RO124" +"nuts/RO125" +"nuts/RO126" +"nuts/RO2" +"nuts/RO21" +"nuts/RO211" +"nuts/RO212" +"nuts/RO213" +"nuts/RO214" +"nuts/RO215" +"nuts/RO216" +"nuts/RO22" +"nuts/RO221" +"nuts/RO222" +"nuts/RO223" +"nuts/RO224" +"nuts/RO225" +"nuts/RO226" +"nuts/RO3" +"nuts/RO31" +"nuts/RO311" +"nuts/RO312" +"nuts/RO313" +"nuts/RO314" +"nuts/RO315" +"nuts/RO316" +"nuts/RO317" +"nuts/RO32" +"nuts/RO321" +"nuts/RO322" +"nuts/RO4" +"nuts/RO41" +"nuts/RO411" +"nuts/RO412" +"nuts/RO413" +"nuts/RO414" +"nuts/RO415" +"nuts/RO42" +"nuts/RO421" +"nuts/RO422" +"nuts/RO423" +"nuts/RO424" +"nuts/RS1" +"nuts/RS11" +"nuts/RS110" +"nuts/RS12" +"nuts/RS121" +"nuts/RS122" +"nuts/RS123" +"nuts/RS124" +"nuts/RS125" +"nuts/RS126" +"nuts/RS127" +"nuts/RS2" +"nuts/RS21" +"nuts/RS211" +"nuts/RS212" +"nuts/RS213" +"nuts/RS214" +"nuts/RS215" +"nuts/RS216" +"nuts/RS217" +"nuts/RS218" +"nuts/RS22" +"nuts/RS221" +"nuts/RS222" +"nuts/RS223" +"nuts/RS224" +"nuts/RS225" +"nuts/RS226" +"nuts/RS227" +"nuts/RS228" +"nuts/RS229" +"nuts/SE1" +"nuts/SE11" +"nuts/SE110" +"nuts/SE12" +"nuts/SE121" +"nuts/SE122" +"nuts/SE123" +"nuts/SE124" +"nuts/SE125" +"nuts/SE2" +"nuts/SE21" +"nuts/SE211" +"nuts/SE212" +"nuts/SE213" +"nuts/SE214" +"nuts/SE22" +"nuts/SE221" +"nuts/SE224" +"nuts/SE23" +"nuts/SE231" +"nuts/SE232" +"nuts/SE3" +"nuts/SE31" +"nuts/SE311" +"nuts/SE312" +"nuts/SE313" +"nuts/SE32" +"nuts/SE321" +"nuts/SE322" +"nuts/SE33" +"nuts/SE331" +"nuts/SE332" +"nuts/SI0" +"nuts/SI03" +"nuts/SI031" +"nuts/SI032" +"nuts/SI033" +"nuts/SI034" +"nuts/SI035" +"nuts/SI036" +"nuts/SI037" +"nuts/SI038" +"nuts/SI04" +"nuts/SI041" +"nuts/SI042" +"nuts/SI043" +"nuts/SI044" +"nuts/SK0" +"nuts/SK01" +"nuts/SK010" +"nuts/SK02" +"nuts/SK021" +"nuts/SK022" +"nuts/SK023" +"nuts/SK03" +"nuts/SK031" +"nuts/SK032" +"nuts/SK04" +"nuts/SK041" +"nuts/SK042" +"nuts/TR1" +"nuts/TR10" +"nuts/TR100" +"nuts/TR2" +"nuts/TR21" +"nuts/TR211" +"nuts/TR212" +"nuts/TR213" +"nuts/TR22" +"nuts/TR221" +"nuts/TR222" +"nuts/TR3" +"nuts/TR31" +"nuts/TR310" +"nuts/TR32" +"nuts/TR321" +"nuts/TR322" +"nuts/TR323" +"nuts/TR33" +"nuts/TR331" +"nuts/TR332" +"nuts/TR333" +"nuts/TR334" +"nuts/TR4" +"nuts/TR41" +"nuts/TR411" +"nuts/TR412" +"nuts/TR413" +"nuts/TR42" +"nuts/TR421" +"nuts/TR422" +"nuts/TR423" +"nuts/TR424" +"nuts/TR425" +"nuts/TR5" +"nuts/TR51" +"nuts/TR510" +"nuts/TR52" +"nuts/TR521" +"nuts/TR522" +"nuts/TR6" +"nuts/TR61" +"nuts/TR611" +"nuts/TR612" +"nuts/TR613" +"nuts/TR62" +"nuts/TR621" +"nuts/TR622" +"nuts/TR63" +"nuts/TR631" +"nuts/TR632" +"nuts/TR633" +"nuts/TR7" +"nuts/TR71" +"nuts/TR711" +"nuts/TR712" +"nuts/TR713" +"nuts/TR714" +"nuts/TR715" +"nuts/TR72" +"nuts/TR721" +"nuts/TR722" +"nuts/TR723" +"nuts/TR8" +"nuts/TR81" +"nuts/TR811" +"nuts/TR812" +"nuts/TR813" +"nuts/TR82" +"nuts/TR821" +"nuts/TR822" +"nuts/TR823" +"nuts/TR83" +"nuts/TR831" +"nuts/TR832" +"nuts/TR833" +"nuts/TR834" +"nuts/TR9" +"nuts/TR90" +"nuts/TR901" +"nuts/TR902" +"nuts/TR903" +"nuts/TR904" +"nuts/TR905" +"nuts/TR906" +"nuts/TRA" +"nuts/TRA1" +"nuts/TRA11" +"nuts/TRA12" +"nuts/TRA13" +"nuts/TRA2" +"nuts/TRA21" +"nuts/TRA22" +"nuts/TRA23" +"nuts/TRA24" +"nuts/TRB" +"nuts/TRB1" +"nuts/TRB11" +"nuts/TRB12" +"nuts/TRB13" +"nuts/TRB14" +"nuts/TRB2" +"nuts/TRB21" +"nuts/TRB22" +"nuts/TRB23" +"nuts/TRB24" +"nuts/TRC" +"nuts/TRC1" +"nuts/TRC11" +"nuts/TRC12" +"nuts/TRC13" +"nuts/TRC2" +"nuts/TRC21" +"nuts/TRC22" +"nuts/TRC3" +"nuts/TRC31" +"nuts/TRC32" +"nuts/TRC33" +"nuts/TRC34" +"nuts/UKC" +"nuts/UKC1" +"nuts/UKC11" +"nuts/UKC12" +"nuts/UKC13" +"nuts/UKC14" +"nuts/UKC2" +"nuts/UKC21" +"nuts/UKC22" +"nuts/UKC23" +"nuts/UKD" +"nuts/UKD1" +"nuts/UKD11" +"nuts/UKD12" +"nuts/UKD3" +"nuts/UKD33" +"nuts/UKD34" +"nuts/UKD35" +"nuts/UKD36" +"nuts/UKD37" +"nuts/UKD4" +"nuts/UKD41" +"nuts/UKD42" +"nuts/UKD44" +"nuts/UKD45" +"nuts/UKD46" +"nuts/UKD47" +"nuts/UKD6" +"nuts/UKD61" +"nuts/UKD62" +"nuts/UKD63" +"nuts/UKD7" +"nuts/UKD71" +"nuts/UKD72" +"nuts/UKD73" +"nuts/UKD74" +"nuts/UKE" +"nuts/UKE1" +"nuts/UKE11" +"nuts/UKE12" +"nuts/UKE13" +"nuts/UKE2" +"nuts/UKE21" +"nuts/UKE22" +"nuts/UKE3" +"nuts/UKE31" +"nuts/UKE32" +"nuts/UKE4" +"nuts/UKE41" +"nuts/UKE42" +"nuts/UKE44" +"nuts/UKE45" +"nuts/UKF" +"nuts/UKF1" +"nuts/UKF11" +"nuts/UKF12" +"nuts/UKF13" +"nuts/UKF14" +"nuts/UKF15" +"nuts/UKF16" +"nuts/UKF2" +"nuts/UKF21" +"nuts/UKF22" +"nuts/UKF24" +"nuts/UKF25" +"nuts/UKF3" +"nuts/UKF30" +"nuts/UKG" +"nuts/UKG1" +"nuts/UKG11" +"nuts/UKG12" +"nuts/UKG13" +"nuts/UKG2" +"nuts/UKG21" +"nuts/UKG22" +"nuts/UKG23" +"nuts/UKG24" +"nuts/UKG3" +"nuts/UKG31" +"nuts/UKG32" +"nuts/UKG33" +"nuts/UKG36" +"nuts/UKG37" +"nuts/UKG38" +"nuts/UKG39" +"nuts/UKH" +"nuts/UKH1" +"nuts/UKH11" +"nuts/UKH12" +"nuts/UKH14" +"nuts/UKH15" +"nuts/UKH16" +"nuts/UKH17" +"nuts/UKH2" +"nuts/UKH21" +"nuts/UKH23" +"nuts/UKH24" +"nuts/UKH25" +"nuts/UKH3" +"nuts/UKH31" +"nuts/UKH32" +"nuts/UKH34" +"nuts/UKH35" +"nuts/UKH36" +"nuts/UKH37" +"nuts/UKI" +"nuts/UKI3" +"nuts/UKI31" +"nuts/UKI32" +"nuts/UKI33" +"nuts/UKI34" +"nuts/UKI4" +"nuts/UKI41" +"nuts/UKI42" +"nuts/UKI43" +"nuts/UKI44" +"nuts/UKI45" +"nuts/UKI5" +"nuts/UKI51" +"nuts/UKI52" +"nuts/UKI53" +"nuts/UKI54" +"nuts/UKI6" +"nuts/UKI61" +"nuts/UKI62" +"nuts/UKI63" +"nuts/UKI7" +"nuts/UKI71" +"nuts/UKI72" +"nuts/UKI73" +"nuts/UKI74" +"nuts/UKI75" +"nuts/UKJ" +"nuts/UKJ1" +"nuts/UKJ11" +"nuts/UKJ12" +"nuts/UKJ13" +"nuts/UKJ14" +"nuts/UKJ2" +"nuts/UKJ21" +"nuts/UKJ22" +"nuts/UKJ25" +"nuts/UKJ26" +"nuts/UKJ27" +"nuts/UKJ28" +"nuts/UKJ3" +"nuts/UKJ31" +"nuts/UKJ32" +"nuts/UKJ34" +"nuts/UKJ35" +"nuts/UKJ36" +"nuts/UKJ37" +"nuts/UKJ4" +"nuts/UKJ41" +"nuts/UKJ43" +"nuts/UKJ44" +"nuts/UKJ45" +"nuts/UKJ46" +"nuts/UKK" +"nuts/UKK1" +"nuts/UKK11" +"nuts/UKK12" +"nuts/UKK13" +"nuts/UKK14" +"nuts/UKK15" +"nuts/UKK2" +"nuts/UKK21" +"nuts/UKK22" +"nuts/UKK23" +"nuts/UKK3" +"nuts/UKK30" +"nuts/UKK4" +"nuts/UKK41" +"nuts/UKK42" +"nuts/UKK43" +"nuts/UKL" +"nuts/UKL1" +"nuts/UKL11" +"nuts/UKL12" +"nuts/UKL13" +"nuts/UKL14" +"nuts/UKL15" +"nuts/UKL16" +"nuts/UKL17" +"nuts/UKL18" +"nuts/UKL2" +"nuts/UKL21" +"nuts/UKL22" +"nuts/UKL23" +"nuts/UKL24" +"nuts/UKM" +"nuts/UKM5" +"nuts/UKM50" +"nuts/UKM6" +"nuts/UKM61" +"nuts/UKM62" +"nuts/UKM63" +"nuts/UKM64" +"nuts/UKM65" +"nuts/UKM66" +"nuts/UKM7" +"nuts/UKM71" +"nuts/UKM72" +"nuts/UKM73" +"nuts/UKM75" +"nuts/UKM76" +"nuts/UKM77" +"nuts/UKM78" +"nuts/UKM8" +"nuts/UKM81" +"nuts/UKM82" +"nuts/UKM83" +"nuts/UKM84" +"nuts/UKM9" +"nuts/UKM91" +"nuts/UKM92" +"nuts/UKM93" +"nuts/UKM94" +"nuts/UKM95" +"nuts/UKN" +"nuts/UKN0" +"nuts/UKN06" +"nuts/UKN07" +"nuts/UKN08" +"nuts/UKN09" +"nuts/UKN10" +"nuts/UKN11" +"nuts/UKN12" +"nuts/UKN13" +"nuts/UKN14" +"nuts/UKN15" +"nuts/UKN16" From bfdb63f8f47309d293ab38e6112679ca5d2d9c89 Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Fri, 5 Jun 2026 09:05:46 +0000 Subject: [PATCH 05/18] testing --- tools/import_validation/runner.py | 44 ++++++++++++++++++++ tools/import_validation/validator_goldens.py | 21 +++++++--- 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index f1364518e6..9f9ddfaebc 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -41,6 +41,8 @@ class ValidationRunner: def __init__(self, validation_config_path: str, differ_output: str, stats_summary: str, lint_report: str, validation_output: str): + self.validation_config_path = validation_config_path + self.stats_summary = stats_summary self.config = ValidationConfig(validation_config_path) self.validation_output = validation_output self.validator = Validator() @@ -212,6 +214,48 @@ def run_validations(self) -> tuple[bool, list[ValidationResult]]: if output_dir: rule_params.setdefault('output_path', output_dir) + # Resolve paths relative to the directory of the validation config. + if 'summary_report' in rule.get('rule_id', ''): + # Helper to find a base directory containing target_sub_path by walking up + def find_base_dir(start_path: str, target_sub_path: str): + if not start_path: + return None + curr = os.path.abspath(start_path) + for _ in range(10): # limit to 10 levels up + if os.path.exists(os.path.join(curr, target_sub_path)): + return curr + parent = os.path.dirname(curr) + if parent == curr: + break + curr = parent + return None + + config_dir = None + # Walk up from validation_config_path, self.stats_summary, or CWD to find where 'golden_data' lives + for start in [self.validation_config_path, self.stats_summary, os.getcwd()]: + config_dir = find_base_dir(start, 'golden_data') + if config_dir: + break + + if not config_dir: + config_dir = os.path.dirname(os.path.abspath(self.validation_config_path)) + + print(f"DEBUG: Found summary_report rule: '{rule.get('rule_id')}'") + print(f"DEBUG: Config directory resolved to: '{config_dir}'") + for path_key in ['golden_files', 'input_files']: + if path_key in rule_params: + val = rule_params[path_key] + print(f"DEBUG: Before resolve '{path_key}': '{val}'") + if isinstance(val, str): + if val and not os.path.isabs(val) and not val.startswith('gs://') and not val.startswith('http://') and not val.startswith('https://'): + rule_params[path_key] = os.path.join(config_dir, val) + elif isinstance(val, list): + rule_params[path_key] = [ + os.path.join(config_dir, item) if isinstance(item, str) and item and not os.path.isabs(item) and not item.startswith('gs://') and not item.startswith('http://') and not item.startswith('https://') else item + for item in val + ] + print(f"DEBUG: After resolve '{path_key}': '{rule_params[path_key]}'") + if validator_name == 'SQL_VALIDATOR': result = validation_func(self.data_sources['stats'], self.data_sources['differ'], diff --git a/tools/import_validation/validator_goldens.py b/tools/import_validation/validator_goldens.py index 7b19b783fe..916cd2f43c 100644 --- a/tools/import_validation/validator_goldens.py +++ b/tools/import_validation/validator_goldens.py @@ -71,6 +71,7 @@ import os import sys import tempfile +import csv from absl import app from absl import flags @@ -298,7 +299,8 @@ def load_nodes_from_file(files: str) -> dict: file_nodes = file_util.file_load_csv_dict(input_file, key_index=True) for node in file_nodes.values(): - nodes[len(nodes)] = node + cleaned_node = {k.strip(): v for k, v in node.items() if k is not None and isinstance(k, str) and k.strip() != ''} + nodes[len(nodes)] = cleaned_node else: # For MCF or JSON, we assume nodes are already keyed by DCID. file_nodes = mcf_file_util.load_mcf_nodes(input_file) @@ -379,7 +381,9 @@ def generate_goldens(input_files: str, for k, node in input_nodes.items(): match = False for col, vals in must_include_values.items(): - if node.get(col) in vals: + val = node.get(col) + if val in vals or mcf_file_util.strip_namespace( + val) in vals: match = True break if match: @@ -440,9 +444,16 @@ def generate_goldens(input_files: str, if golden_nodes and output_file: logging.info(f'Writing {len(golden_nodes)} goldens to {output_file}') if file_util.file_is_csv(output_file): - file_util.file_write_csv_dict(golden_nodes, - output_file, - key_column_name=None) + with file_util.FileIO(output_file, mode='w') as csvfile: + columns = sorted( + list(set().union( + *(node.keys() for node in golden_nodes.values())))) + writer = csv.DictWriter(csvfile, + fieldnames=columns, + quoting=csv.QUOTE_NONNUMERIC) + writer.writeheader() + for node in golden_nodes.values(): + writer.writerow(node) else: mcf_file_util.write_mcf_nodes([golden_nodes], output_file) From b446f71cf54cfbfb3d009e3ba26c7b406751768b Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Mon, 8 Jun 2026 05:53:10 +0000 Subject: [PATCH 06/18] modified code --- .../golden_data/golden_summary_report.csv | 8 +- tools/import_validation/runner.py | 4 +- tools/import_validation/validation_config.py | 631 +++++++++++++++--- 3 files changed, 532 insertions(+), 111 deletions(-) diff --git a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_summary_report.csv b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_summary_report.csv index 7a105df1f8..0b3627f554 100644 --- a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_summary_report.csv +++ b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_summary_report.csv @@ -1,4 +1,4 @@ -"StatVar","MeasurementMethods","MinDate","observationPeriods" -"MeanMothersAge_BirthEvent","[EurostatRegionalStatistics]","2013","[]" -"MedianMothersAge_BirthEvent","[EurostatRegionalStatistics]","2013","[]" -"FertilityRate_Person_Female","[EurostatRegionalStatistics]","2013","[]" +"MeasurementMethods","MinDate","NumPlaces","ScalingFactors","StatVar","Units","observationPeriods" +"[EurostatRegionalStatistics]","2013","2122","[]","MeanMothersAge_BirthEvent","[Year]","[]" +"[EurostatRegionalStatistics]","2013","2122","[]","MedianMothersAge_BirthEvent","[Year]","[]" +"[EurostatRegionalStatistics]","2013","2122","[]","FertilityRate_Person_Female","[]","[]" diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index 9f9ddfaebc..066a750bb0 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -215,7 +215,7 @@ def run_validations(self) -> tuple[bool, list[ValidationResult]]: rule_params.setdefault('output_path', output_dir) # Resolve paths relative to the directory of the validation config. - if 'summary_report' in rule.get('rule_id', ''): + if validator_name == 'GOLDENS_CHECK': # Helper to find a base directory containing target_sub_path by walking up def find_base_dir(start_path: str, target_sub_path: str): if not start_path: @@ -240,7 +240,7 @@ def find_base_dir(start_path: str, target_sub_path: str): if not config_dir: config_dir = os.path.dirname(os.path.abspath(self.validation_config_path)) - print(f"DEBUG: Found summary_report rule: '{rule.get('rule_id')}'") + print(f"DEBUG: Found GOLDENS_CHECK rule: '{rule.get('rule_id')}'") print(f"DEBUG: Config directory resolved to: '{config_dir}'") for path_key in ['golden_files', 'input_files']: if path_key in rule_params: diff --git a/tools/import_validation/validation_config.py b/tools/import_validation/validation_config.py index 2522148fd7..9fe04aa83b 100644 --- a/tools/import_validation/validation_config.py +++ b/tools/import_validation/validation_config.py @@ -1,131 +1,552 @@ -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # -# Licensed under the Apache License, Version 2.0 (the "License"); +# Licensed under the Apache License, Version 2.0 (the 'License'); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, +# distributed under the License is distributed on an 'AS IS' BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -"""This module defines the Config class, which is responsible for loading and -parsing the main validation configuration file. +"""Utility functions to validate data with golden sets. -The configuration file is expected to be in JSON format and defines the set of -validation rules to be executed, along with any shared definitions for data -scopes or variable sets. +This module provides tools to compare sets of nodes (e.g., from CSV or MCF files) +against a "golden" set of expected nodes. It supports flexible matching based on +configurable property sets and handles normalization of values (like stripping +namespaces from DCIDs). + +Example Use Case: Validating StatVarObservations +------------------------------------------------ +You can use this to ensure that your import contains expected observations. + +1. Validate based on variableMeasured and observationAbout: + Config: {'goldens_key_property': ['variableMeasured', 'observationAbout']} + This will check that for every golden observation, an input observation exists + with the same StatVar and Place, regardless of the value or time. + +2. Validate based on a combination of metadata: + Config: { + 'goldens_key_property': [ + 'variableMeasured', 'unit', 'scalingFactor', 'measurementMethod' + ] + } + This ensures that the specific measurement metadata combinations defined in + your goldens are present in the input nodes. + +Usage: + python3 validator_goldens.py \ + --validate_goldens_input=output/observations.csv \ + --validate_goldens=goldens/expected_obs.mcf \ + --goldens_key_property=variableMeasured,observationAbout + + # To generate goldens from input: + python3 validator_goldens.py \ + --validate_goldens_input=output/observations.csv \ + --generate_goldens_property_sets="variableMeasured|observationAbout,observationDate,variableMeasured|unit|scalingFactor|observationPeriod|measurementMethod" \ + --generate_goldens=goldens_data/generated_goldens.csv + + # To generate goldens using a sample of input nodes: + python3 validator_goldens.py \ + --validate_goldens_input=output/observations.csv \ + --goldens_sample_rows=100 \ + --generate_goldens_property_sets="variableMeasured|observationAbout" \ + --generate_goldens=goldens_data/generated_goldens.csv + + # To generate goldens capturing every unique value in every column: + python3 validator_goldens.py \ + --validate_goldens_input=output/observations.mcf \ + --goldens_sampler_exhaustive \ + --generate_goldens=goldens_data/generated_goldens.mcf + + # To generate goldens ensuring prominent DCIDs are included if present: + python3 validator_goldens.py \ + --validate_goldens_input=output/observations.csv \ + --goldens_must_include="variableMeasured:selected_svs.txt,observationAbout:selected_places.txt" \ + --generate_goldens=goldens_data/generated_goldens.csv """ -import copy -import json import os -from typing import Any, Dict, List +import sys +import tempfile +from absl import app +from absl import flags from absl import logging -from omegaconf import OmegaConf - - -def _load_json_config(path: str) -> Dict[str, Any]: - """Loads a JSON config if present.""" - with open(path, encoding='utf-8') as f: - return json.load(f) - - -def _merge_rules(base_rules: List[Dict[str, Any]], - override_rules: List[Dict[str, Any]]) -> List[Dict[str, Any]]: - """Merges rules keyed by rule_id; override deep merges into base.""" - merged: Dict[str, Dict[str, Any]] = {} - for rule in base_rules + override_rules: - rule_id = rule.get('rule_id') - if rule_id: - if rule_id in merged: - base_cfg = OmegaConf.create(merged[rule_id]) - override_cfg = OmegaConf.create(rule) - merged_cfg = OmegaConf.merge(base_cfg, override_cfg) - merged[rule_id] = OmegaConf.to_object(merged_cfg) - else: - merged[rule_id] = copy.deepcopy(rule) - return list(merged.values()) - - -def _merge_definitions(base_defs: Dict[str, Any], - override_defs: Dict[str, Any]) -> Dict[str, Any]: - """Merges definitions dictionaries using OmegaConf deep merge.""" - base_cfg = OmegaConf.create(base_defs or {}) - override_cfg = OmegaConf.create(override_defs or {}) - merged = OmegaConf.merge(base_cfg, override_cfg) - return OmegaConf.to_object(merged) - - -def _merge_configs(base_config: Dict[str, Any], - override_config: Dict[str, Any]) -> Dict[str, Any]: - """Merges base and override configs.""" - merged_schema_version = override_config.get( - "schema_version", base_config.get("schema_version", "1.0")) - merged_definitions = _merge_definitions( - base_config.get("definitions", {}), - override_config.get("definitions", {})) - merged_rules = _merge_rules(base_config.get("rules", []), - override_config.get("rules", [])) + +_SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(_SCRIPT_DIR) +sys.path.append(os.path.dirname(_SCRIPT_DIR)) +_DATA_DIR = os.path.dirname(os.path.dirname(_SCRIPT_DIR)) +sys.path.append(_DATA_DIR) +sys.path.append(os.path.join(_DATA_DIR, 'util')) +sys.path.append(os.path.join(_DATA_DIR, 'tools', 'statvar_importer')) + +import file_util +import mcf_file_util +import data_sampler + +from counters import Counters +from mcf_diff import fingerprint_node + +flags.DEFINE_list('validate_goldens_input', None, + 'List of files to be compared against goldens.') +flags.DEFINE_list('validate_goldens', None, + 'List of golden files to be compared against') +flags.DEFINE_string('generate_goldens', None, + 'Golden file to be generated from the input.') +flags.DEFINE_string('validate_goldens_output', None, + 'Output file with missing goldens') +flags.DEFINE_list('goldens_key_property', [], + 'Properties in golden nodes to be compared.') +flags.DEFINE_list('goldens_ignore_property', ['value'], + 'Properties in golden nodes to be ignored.') +flags.DEFINE_list( + 'generate_goldens_property_sets', [], + 'List of property sets to generate goldens for. ' + 'Each set is a pipe (|) separated list of properties. ' + 'Example: "variableMeasured|observationAbout,observationDate"') +flags.DEFINE_integer( + 'goldens_sample_rows', 0, + 'Number of input rows to sample for generating goldens. ' + 'If 0, all rows are used.') +flags.DEFINE_boolean( + 'goldens_sampler_exhaustive', False, + 'If True, uses exhaustive sampling to capture every ' + 'unique value in the input nodes.') +flags.DEFINE_list( + 'goldens_must_include', [], + 'List of "column:file" pairs containing values (e.g. prominent DCIDs) ' + 'that MUST be included in the generated goldens if they appear ' + 'in the input data. ' + 'Example: "variableMeasured:website/tools/nl/embeddings/input/base/sheets_svs.csv,observationAbout:places.txt"' +) +flags.DEFINE_string('goldens_ignore_comments', '#', + 'Prefix for comments to be ignored in the golden set.') + +_FLAGS = flags.FLAGS + + +def get_validator_goldens_config() -> dict: + """Returns a dictionary of config parameters for MCF diff from flags. + + The config includes properties to ignore and properties to use as keys + for matching nodes, derived from command-line flags. + """ + if not _FLAGS.is_parsed(): + _FLAGS.mark_as_parsed() return { - "schema_version": merged_schema_version, - "definitions": merged_definitions, - "rules": merged_rules, + 'goldens_ignore_property': _FLAGS.goldens_ignore_property, + 'goldens_key_property': _FLAGS.goldens_key_property, + 'goldens_must_include': _FLAGS.goldens_must_include, + 'goldens_ignore_comments': _FLAGS.goldens_ignore_comments, + + # config options for data_sampler when generating goldens + 'sampler_output_rows': _FLAGS.goldens_sample_rows, + 'sampler_exhaustive': _FLAGS.goldens_sampler_exhaustive, + 'sampler_column_keys': _FLAGS.goldens_must_include, } -def _merge_config_files(base_path: str, override_path: str) -> Dict[str, Any]: - """Returns merged config dict from base and optional override files.""" - base_config = _load_json_config(base_path) - override_config = _load_json_config(override_path) - return _merge_configs(base_config, override_config) +def _is_commented_node(fingerprint: str, comment_char: str = '#') -> bool: + """Returns True if the node fingerprint is commented. + Args: + fingerprint: string fingerprint of the node of the form 'prop=value;...' -def merge_and_save_config(base_path: str, override_path: str, - output_dir: str) -> str: - """Merges configs, saves to output_dir, and enables detailed logging.""" - logging.info('Merging validation configs: base=%s override=%s', base_path, - override_path) - merged_config = _merge_config_files(base_path, override_path) - os.makedirs(output_dir, exist_ok=True) - merged_path = os.path.join(output_dir, 'merged_validation_config.json') - with open(merged_path, 'w', encoding='utf-8') as tmp_file: - json.dump(merged_config, tmp_file, ensure_ascii=False, indent=2) - logging.info('Merged validation config saved to %s', merged_path) - logging.info('Merged validation config content: %s', - json.dumps(merged_config, ensure_ascii=False)) - return merged_path + Returns: + True if any property or value is commented. + """ + if not comment_char: + return False + if fingerprint.startswith( + comment_char + ) or f';{comment_char}' in fingerprint or f'={comment_char}' in fingerprint: + return True + return False -class ValidationConfig: +# Compare nodes in a dictionary to nodes in a golden set +def validator_compare_nodes(input_nodes: dict, + golden_nodes: dict, + config: dict = None, + counters: Counters = None) -> list: + """Returns a summary of the differences in the input and golden nodes. + + It only compares the properties defined in the golden nodes against the + corresponding properties in the input_nodes. + + Args: + input_nodes: dictionary of nodes which are dictionary of property:values. + { : { : ,,,}, : { : ..} + golden_nodes: dictionary of key to expected nodes with property:values. + These nodes may have fewer properties than input_nodes. + config: dictionary of config parameters such as ignore lists and + normalization settings. + counters: Output counters for tracking match statistics. + + Returns: + A list of fingerprints for golden nodes that were not matched in the input. """ - A class to handle the loading and parsing of the validation configuration. + + if counters is None: + counters = Counters() + + if config is None: + config = get_validator_goldens_config() + + # Extract configuration parameters with defaults. + ignore_props = config.get('goldens_ignore_property', {}) + comment_char = config.get('goldens_ignore_comments', '#') + golden_key_props = set(config.get('goldens_key_property', {})) + key_delimiter = config.get('golden_key_delimiter', '|') + + # Step 1: Group golden nodes by their set of properties. + # Goldens may have a subset of the input node properties and would match + # any input node that contains all the golden property:values. + # Different golden nodes might specify different subsets of properties to match on. + golden_key_sets = {} + golden_matches = dict() + logging.debug(f'Extracting properties for {len(golden_nodes)} goldens') + for node_key, node in golden_nodes.items(): + node_props = set() + for prop in node.keys(): + if not prop: + continue + if comment_char and prop.startswith(comment_char): + continue + if prop in ignore_props: + continue + if golden_key_props and prop not in golden_key_props: + continue + node_props.add(prop) + + if not node_props: + counters.add_counter('validate-goldens-commented', 1) + continue + # Use the joined sorted property names as a key for the group. + node_props_key = key_delimiter.join(sorted(list(node_props))) + golden_key_sets[node_props_key] = node_props + + # Initialize match count for the golden node to 0. + key = fingerprint_node(node, compare_props=node_props) + golden_matches.setdefault(key, {'node': node, 'matches': 0}) + + logging.info( + f'Comparing {len(input_nodes)} nodes against {len(golden_matches)} goldens in {len(golden_key_sets)} sets using properties: {golden_key_sets.keys()}' + ) + counters.add_counter('validate-goldens-sets', len(golden_key_sets)) + counters.add_counter('validate-goldens-inputs', len(input_nodes)) + counters.add_counter('validate-goldens-expected', len(golden_matches)) + + # Step 2: Match each input node with the golden fingerprints. + # An input node may match more than one golden node with different + # set of property:values. + for node in input_nodes.values(): + # An input node might match different golden "shapes" (sets of properties). + for node_key_props in golden_key_sets.values(): + key = fingerprint_node(node, + compare_props=node_key_props, + ignore_props=ignore_props) + if key in golden_matches: + golden_matches[key]['matches'] += 1 + counters.add_counter('validate-goldens-input-matched', 1) + + # Step 3: Identify which golden fingerprints had no corresponding input nodes. + missing_goldens = [] + for key, node_counts in golden_matches.items(): + count = node_counts.get('matches', 0) + if count > 0: + # This key got matches. + counters.add_counter('validate-goldens-matched', 1) + else: + if _is_commented_node(key, comment_char): + # No matches for this key. Ignore commented keys. + counters.add_counter('validate-goldens-ignored', 1) + else: + missing_goldens.append(node_counts.get('node')) + counters.add_counter('validate-goldens-missing', 1) + + if missing_goldens: + logging.error( + f'Missing {len(missing_goldens)} among {len(golden_nodes)} goldens in {len(input_nodes)} input nodes.' + ) + logging.debug(f'Missing goldens: {missing_goldens}') + else: + logging.info( + f'Goldens match successful: {len(golden_nodes)} goldens matched {len(input_nodes)} inputs' + ) + + return missing_goldens + + +def load_nodes_from_file(files: str) -> dict: + """Returns a dictionary of nodes loaded from the files. + + Supports CSV and MCF formats. + - CSV files: Each row is loaded as a node. + - MCF files: Each node is loaded based on its DCID. """ + nodes = {} + input_files = file_util.file_get_matching(files) + for input_file in input_files: + if file_util.file_is_csv(input_file): + # For CSV, we treat each row as a dictionary of column:value. + # Nodes are keyed by their index in the combined loaded set. + file_nodes = file_util.file_load_csv_dict(input_file, + key_index=True) + # Check if any loaded node has None as a key, indicating an incorrect delimiter + # was auto-detected (e.g. splitting 'dcid:Earth' on colon ':') + has_delimiter_error = False + for node in file_nodes.values(): + if None in node: + has_delimiter_error = True + break + + if has_delimiter_error: + import csv + with file_util.FileIO(input_file) as csvfile: + rawdata = csvfile.read() + if isinstance(rawdata, bytes): + encoding = file_util.file_get_encoding(input_file) + data_str = rawdata.decode(encoding) + else: + data_str = rawdata + reader = csv.DictReader(data_str.splitlines(), delimiter=',') + file_nodes = {} + for row in reader: + file_nodes[len(file_nodes)] = dict(row) + + for node in file_nodes.values(): + # Clean up None/empty keys and strip whitespace from headers/keys to ensure robust parsing + cleaned_node = {k.strip(): v for k, v in node.items() if k is not None and isinstance(k, str) and k.strip() != ''} + nodes[len(nodes)] = cleaned_node + else: + # For MCF or JSON, we assume nodes are already keyed by DCID. + file_nodes = mcf_file_util.load_mcf_nodes(input_file) + for dcid, node in file_nodes.items(): + # Ensure the dcid is present in the node dictionary itself. + if 'dcid' not in node: + node['dcid'] = mcf_file_util.strip_namespace(dcid) + mcf_file_util.add_mcf_node(node, nodes) + + logging.info(f'Loaded {len(nodes)} nodes from {input_files}') + return nodes + + +def generate_goldens(input_files: str, + property_sets: list, + output_file: str = None, + config: dict = None, + counters: Counters = None) -> dict: + """Generates a set of unique golden nodes from input files. + + For each input node and each property set in property_sets, it extracts + the values for those properties and creates a unique golden node. + If sampling is requested, a representative sample of input nodes is used + as the basis for generating the golden nodes. + + Args: + input_files: Glob pattern or list of input data files. + property_sets: List of sets/lists of properties to extract. + Example: [{'variableMeasured'}, {'observationAbout', 'variableMeasured'}] + output_file: Path to write the generated goldens to (MCF format). + config: Configuration for normalization and sampling. + counters: Output counters. + + Returns: + A dictionary of unique golden nodes keyed by their fingerprints. + """ + if counters is None: + counters = Counters() + + if config is None: + config = get_validator_goldens_config() + + # Apply sampling if requested. + sampler_rows = config.get('sampler_output_rows', 0) + exhaustive = config.get('sampler_exhaustive', False) + must_include_values = data_sampler.load_column_keys( + config.get('sampler_column_keys', [])) + if must_include_values: + for col, vals in must_include_values.items(): + counters.add_counter(f'generate-goldens-include-{col}', len(vals)) + if sampler_rows > 0 or exhaustive: + logging.info( + f'Sampling rows from {input_files} (exhaustive={exhaustive}, rows={sampler_rows})' + ) + if exhaustive: + config['sampler_column_regex'] = '.*' + + # Generate a representative sample with unique values across columns. + with tempfile.NamedTemporaryFile(mode='w+t', suffix='.csv', + delete=True) as sampled_file: + sampler = data_sampler.DataSampler(config_dict=config, + counters=counters) + sampler.sample_csv_file(input_files, output_file=sampled_file.name) + input_nodes = load_nodes_from_file(sampled_file.name) + logging.info( + f'Using sampled file: {sampled_file} with {len(input_nodes)} nodes' + ) + counters.add_counter(f'generate-goldens-sampled-nodes', + len(input_nodes)) + else: + input_nodes = load_nodes_from_file(input_files) + counters.add_counter('generate-goldens-input-nodes', len(input_nodes)) + + # If not sampling, but must_include_values are provided, use them as a filter + # to focus goldens on prominent DCIDs if requested. + if must_include_values: + filtered_nodes = {} + for k, node in input_nodes.items(): + match = False + for col, vals in must_include_values.items(): + if node.get(col) in vals: + match = True + break + if match: + filtered_nodes[k] = node + + logging.info( + f'Filtered {len(input_nodes)} nodes down to {len(filtered_nodes)} matching prominent DCIDs.' + ) + input_nodes = filtered_nodes + counters.add_counter('generate-goldens-filtered-nodes', + len(filtered_nodes)) + + ignore_props = set(config.get('goldens_ignore_property', [])) + + golden_nodes = {} + for node in input_nodes.values(): + # If no property sets are provided, use all properties in the current node + # except those that are explicitly ignored. + effective_property_sets = property_sets + if not effective_property_sets: + node_props = set(node.keys()) - ignore_props + if node_props: + effective_property_sets = [node_props] + else: + continue + + for props in effective_property_sets: + # Create a dictionary for this specific property set from the input node. + golden_node = {} + has_all_props = True + for prop in props: + + if prop in node: + golden_node[prop] = node[prop] + else: + # If a node is missing one of the properties in a set, + # we skip this combination. + has_all_props = False + break + + if not has_all_props or not golden_node: + continue + + # Generate a unique key for this golden node shape. + key = fingerprint_node(golden_node, compare_props=props) + + if key not in golden_nodes: + golden_nodes[key] = golden_node + counters.add_counter('generate-goldens-unique', 1) + + counters.add_counter('generate-goldens-processed', 1) + + logging.info( + f'Generated {len(golden_nodes)} unique goldens from {len(input_nodes)} input nodes.' + ) + counters.add_counter('generated-golden-output', len(golden_nodes)) + + if golden_nodes and output_file: + logging.info(f'Writing {len(golden_nodes)} goldens to {output_file}') + if file_util.file_is_csv(output_file): + file_util.file_write_csv_dict(golden_nodes, + output_file, + key_column_name=None) + else: + mcf_file_util.write_mcf_nodes([golden_nodes], output_file) + + return golden_nodes + + +def validate_goldens(inputs: str | dict, + golden_files: str, + output_file: str = None, + config: dict = None, + counters: Counters = None) -> list: + """Validate records in the input files against goldens. + + This is the high-level entry point for comparing two sets of files. + + Args: + inputs: Glob pattern for list of input data files or + dictionary of input nodes. + golden_files: Glob pattern or list of golden data files. + output_file: Path to write missing goldens to. + config: Validation configuration. + counters: Counters for tracking progress and results. + """ + if config is None: + config = get_validator_goldens_config() + + # Load all nodes from input and golden files. + if isinstance(inputs, dict): + input_nodes = inputs + else: + input_nodes = load_nodes_from_file(inputs) + golden_files_list = file_util.file_get_matching(golden_files) + golden_nodes = load_nodes_from_file(golden_files_list) + + # Run the core comparison logic. + missing_goldens = validator_compare_nodes(input_nodes, golden_nodes, config, + counters) + + # Optionally write out the missing golden nodes for debugging. + if missing_goldens and output_file: + if output_file.endswith('/') or os.path.isdir(output_file): + # Append a default filename if only a directory was provided. + output_file = os.path.join( + output_file, + 'goldens_missing_' + os.path.basename(golden_files_list[0])) + logging.info( + f'Writing {len(missing_goldens)} missing goldens to {output_file}') + if file_util.file_is_csv(output_file): + file_util.file_write_csv_dict(dict(enumerate(missing_goldens)), + output_file) + else: + mcf_file_util.write_mcf_nodes(dict(enumerate(missing_goldens)), + output_file) + return missing_goldens + + +def main(_): + """Main entry point for the validator script.""" + logging.set_verbosity(2) + counters = Counters() + + if _FLAGS.generate_goldens: + # Generation Mode + property_sets = [] + for p_set_str in _FLAGS.generate_goldens_property_sets: + property_sets.append(set(p_set_str.split('|'))) + + generate_goldens(_FLAGS.validate_goldens_input, + property_sets, + output_file=_FLAGS.generate_goldens, + config=get_validator_goldens_config(), + counters=counters) + if _FLAGS.validate_goldens: + # Validation Mode + validate_goldens(_FLAGS.validate_goldens_input, + _FLAGS.validate_goldens, + output_file=_FLAGS.validate_goldens_output, + config=get_validator_goldens_config(), + counters=counters) + - def __init__(self, config_path: str): - self.config = _load_json_config(config_path) - - self.schema_version: str = self.config.get("schema_version", "1.0") - self.definitions: Dict[str, Any] = self.config.get("definitions", {}) - self.rules: List[Dict[str, Any]] = self.config.get("rules", []) - - def get_scope(self, scope_ref: str) -> Dict[str, Any]: - """ - Retrieves a named scope from the definitions. - """ - if not scope_ref.startswith('@'): - return {} - scope_name = scope_ref[1:] - return self.definitions.get("scopes", {}).get(scope_name, {}) - - def get_variable_set(self, var_set_ref: str) -> Dict[str, Any]: - """ - Retrieves a named variable set from the definitions. - """ - if not var_set_ref.startswith('@'): - return {} - var_set_name = var_set_ref[1:] - return self.definitions.get("variable_sets", {}).get(var_set_name, {}) +if __name__ == '__main__': + app.run(main) From 0467ef83fd91d7ae5fa751eb82d56eb7ab4bb56c Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Mon, 8 Jun 2026 06:09:28 +0000 Subject: [PATCH 07/18] Revert validation_config.py changes and update validator_goldens.py --- tools/import_validation/validation_config.py | 631 +++---------------- tools/import_validation/validator_goldens.py | 41 +- 2 files changed, 132 insertions(+), 540 deletions(-) diff --git a/tools/import_validation/validation_config.py b/tools/import_validation/validation_config.py index 9fe04aa83b..2522148fd7 100644 --- a/tools/import_validation/validation_config.py +++ b/tools/import_validation/validation_config.py @@ -1,552 +1,131 @@ -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # -# Licensed under the Apache License, Version 2.0 (the 'License'); +# Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an 'AS IS' BASIS, +# distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -"""Utility functions to validate data with golden sets. +"""This module defines the Config class, which is responsible for loading and +parsing the main validation configuration file. -This module provides tools to compare sets of nodes (e.g., from CSV or MCF files) -against a "golden" set of expected nodes. It supports flexible matching based on -configurable property sets and handles normalization of values (like stripping -namespaces from DCIDs). - -Example Use Case: Validating StatVarObservations ------------------------------------------------- -You can use this to ensure that your import contains expected observations. - -1. Validate based on variableMeasured and observationAbout: - Config: {'goldens_key_property': ['variableMeasured', 'observationAbout']} - This will check that for every golden observation, an input observation exists - with the same StatVar and Place, regardless of the value or time. - -2. Validate based on a combination of metadata: - Config: { - 'goldens_key_property': [ - 'variableMeasured', 'unit', 'scalingFactor', 'measurementMethod' - ] - } - This ensures that the specific measurement metadata combinations defined in - your goldens are present in the input nodes. - -Usage: - python3 validator_goldens.py \ - --validate_goldens_input=output/observations.csv \ - --validate_goldens=goldens/expected_obs.mcf \ - --goldens_key_property=variableMeasured,observationAbout - - # To generate goldens from input: - python3 validator_goldens.py \ - --validate_goldens_input=output/observations.csv \ - --generate_goldens_property_sets="variableMeasured|observationAbout,observationDate,variableMeasured|unit|scalingFactor|observationPeriod|measurementMethod" \ - --generate_goldens=goldens_data/generated_goldens.csv - - # To generate goldens using a sample of input nodes: - python3 validator_goldens.py \ - --validate_goldens_input=output/observations.csv \ - --goldens_sample_rows=100 \ - --generate_goldens_property_sets="variableMeasured|observationAbout" \ - --generate_goldens=goldens_data/generated_goldens.csv - - # To generate goldens capturing every unique value in every column: - python3 validator_goldens.py \ - --validate_goldens_input=output/observations.mcf \ - --goldens_sampler_exhaustive \ - --generate_goldens=goldens_data/generated_goldens.mcf - - # To generate goldens ensuring prominent DCIDs are included if present: - python3 validator_goldens.py \ - --validate_goldens_input=output/observations.csv \ - --goldens_must_include="variableMeasured:selected_svs.txt,observationAbout:selected_places.txt" \ - --generate_goldens=goldens_data/generated_goldens.csv +The configuration file is expected to be in JSON format and defines the set of +validation rules to be executed, along with any shared definitions for data +scopes or variable sets. """ +import copy +import json import os -import sys -import tempfile +from typing import Any, Dict, List -from absl import app -from absl import flags from absl import logging - -_SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) -sys.path.append(_SCRIPT_DIR) -sys.path.append(os.path.dirname(_SCRIPT_DIR)) -_DATA_DIR = os.path.dirname(os.path.dirname(_SCRIPT_DIR)) -sys.path.append(_DATA_DIR) -sys.path.append(os.path.join(_DATA_DIR, 'util')) -sys.path.append(os.path.join(_DATA_DIR, 'tools', 'statvar_importer')) - -import file_util -import mcf_file_util -import data_sampler - -from counters import Counters -from mcf_diff import fingerprint_node - -flags.DEFINE_list('validate_goldens_input', None, - 'List of files to be compared against goldens.') -flags.DEFINE_list('validate_goldens', None, - 'List of golden files to be compared against') -flags.DEFINE_string('generate_goldens', None, - 'Golden file to be generated from the input.') -flags.DEFINE_string('validate_goldens_output', None, - 'Output file with missing goldens') -flags.DEFINE_list('goldens_key_property', [], - 'Properties in golden nodes to be compared.') -flags.DEFINE_list('goldens_ignore_property', ['value'], - 'Properties in golden nodes to be ignored.') -flags.DEFINE_list( - 'generate_goldens_property_sets', [], - 'List of property sets to generate goldens for. ' - 'Each set is a pipe (|) separated list of properties. ' - 'Example: "variableMeasured|observationAbout,observationDate"') -flags.DEFINE_integer( - 'goldens_sample_rows', 0, - 'Number of input rows to sample for generating goldens. ' - 'If 0, all rows are used.') -flags.DEFINE_boolean( - 'goldens_sampler_exhaustive', False, - 'If True, uses exhaustive sampling to capture every ' - 'unique value in the input nodes.') -flags.DEFINE_list( - 'goldens_must_include', [], - 'List of "column:file" pairs containing values (e.g. prominent DCIDs) ' - 'that MUST be included in the generated goldens if they appear ' - 'in the input data. ' - 'Example: "variableMeasured:website/tools/nl/embeddings/input/base/sheets_svs.csv,observationAbout:places.txt"' -) -flags.DEFINE_string('goldens_ignore_comments', '#', - 'Prefix for comments to be ignored in the golden set.') - -_FLAGS = flags.FLAGS - - -def get_validator_goldens_config() -> dict: - """Returns a dictionary of config parameters for MCF diff from flags. - - The config includes properties to ignore and properties to use as keys - for matching nodes, derived from command-line flags. - """ - if not _FLAGS.is_parsed(): - _FLAGS.mark_as_parsed() +from omegaconf import OmegaConf + + +def _load_json_config(path: str) -> Dict[str, Any]: + """Loads a JSON config if present.""" + with open(path, encoding='utf-8') as f: + return json.load(f) + + +def _merge_rules(base_rules: List[Dict[str, Any]], + override_rules: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + """Merges rules keyed by rule_id; override deep merges into base.""" + merged: Dict[str, Dict[str, Any]] = {} + for rule in base_rules + override_rules: + rule_id = rule.get('rule_id') + if rule_id: + if rule_id in merged: + base_cfg = OmegaConf.create(merged[rule_id]) + override_cfg = OmegaConf.create(rule) + merged_cfg = OmegaConf.merge(base_cfg, override_cfg) + merged[rule_id] = OmegaConf.to_object(merged_cfg) + else: + merged[rule_id] = copy.deepcopy(rule) + return list(merged.values()) + + +def _merge_definitions(base_defs: Dict[str, Any], + override_defs: Dict[str, Any]) -> Dict[str, Any]: + """Merges definitions dictionaries using OmegaConf deep merge.""" + base_cfg = OmegaConf.create(base_defs or {}) + override_cfg = OmegaConf.create(override_defs or {}) + merged = OmegaConf.merge(base_cfg, override_cfg) + return OmegaConf.to_object(merged) + + +def _merge_configs(base_config: Dict[str, Any], + override_config: Dict[str, Any]) -> Dict[str, Any]: + """Merges base and override configs.""" + merged_schema_version = override_config.get( + "schema_version", base_config.get("schema_version", "1.0")) + merged_definitions = _merge_definitions( + base_config.get("definitions", {}), + override_config.get("definitions", {})) + merged_rules = _merge_rules(base_config.get("rules", []), + override_config.get("rules", [])) return { - 'goldens_ignore_property': _FLAGS.goldens_ignore_property, - 'goldens_key_property': _FLAGS.goldens_key_property, - 'goldens_must_include': _FLAGS.goldens_must_include, - 'goldens_ignore_comments': _FLAGS.goldens_ignore_comments, - - # config options for data_sampler when generating goldens - 'sampler_output_rows': _FLAGS.goldens_sample_rows, - 'sampler_exhaustive': _FLAGS.goldens_sampler_exhaustive, - 'sampler_column_keys': _FLAGS.goldens_must_include, + "schema_version": merged_schema_version, + "definitions": merged_definitions, + "rules": merged_rules, } -def _is_commented_node(fingerprint: str, comment_char: str = '#') -> bool: - """Returns True if the node fingerprint is commented. +def _merge_config_files(base_path: str, override_path: str) -> Dict[str, Any]: + """Returns merged config dict from base and optional override files.""" + base_config = _load_json_config(base_path) + override_config = _load_json_config(override_path) + return _merge_configs(base_config, override_config) - Args: - fingerprint: string fingerprint of the node of the form 'prop=value;...' - Returns: - True if any property or value is commented. - """ - if not comment_char: - return False - if fingerprint.startswith( - comment_char - ) or f';{comment_char}' in fingerprint or f'={comment_char}' in fingerprint: - return True - return False +def merge_and_save_config(base_path: str, override_path: str, + output_dir: str) -> str: + """Merges configs, saves to output_dir, and enables detailed logging.""" + logging.info('Merging validation configs: base=%s override=%s', base_path, + override_path) + merged_config = _merge_config_files(base_path, override_path) + os.makedirs(output_dir, exist_ok=True) + merged_path = os.path.join(output_dir, 'merged_validation_config.json') + with open(merged_path, 'w', encoding='utf-8') as tmp_file: + json.dump(merged_config, tmp_file, ensure_ascii=False, indent=2) + logging.info('Merged validation config saved to %s', merged_path) + logging.info('Merged validation config content: %s', + json.dumps(merged_config, ensure_ascii=False)) + return merged_path -# Compare nodes in a dictionary to nodes in a golden set -def validator_compare_nodes(input_nodes: dict, - golden_nodes: dict, - config: dict = None, - counters: Counters = None) -> list: - """Returns a summary of the differences in the input and golden nodes. - - It only compares the properties defined in the golden nodes against the - corresponding properties in the input_nodes. - - Args: - input_nodes: dictionary of nodes which are dictionary of property:values. - { : { : ,,,}, : { : ..} - golden_nodes: dictionary of key to expected nodes with property:values. - These nodes may have fewer properties than input_nodes. - config: dictionary of config parameters such as ignore lists and - normalization settings. - counters: Output counters for tracking match statistics. - - Returns: - A list of fingerprints for golden nodes that were not matched in the input. +class ValidationConfig: """ - - if counters is None: - counters = Counters() - - if config is None: - config = get_validator_goldens_config() - - # Extract configuration parameters with defaults. - ignore_props = config.get('goldens_ignore_property', {}) - comment_char = config.get('goldens_ignore_comments', '#') - golden_key_props = set(config.get('goldens_key_property', {})) - key_delimiter = config.get('golden_key_delimiter', '|') - - # Step 1: Group golden nodes by their set of properties. - # Goldens may have a subset of the input node properties and would match - # any input node that contains all the golden property:values. - # Different golden nodes might specify different subsets of properties to match on. - golden_key_sets = {} - golden_matches = dict() - logging.debug(f'Extracting properties for {len(golden_nodes)} goldens') - for node_key, node in golden_nodes.items(): - node_props = set() - for prop in node.keys(): - if not prop: - continue - if comment_char and prop.startswith(comment_char): - continue - if prop in ignore_props: - continue - if golden_key_props and prop not in golden_key_props: - continue - node_props.add(prop) - - if not node_props: - counters.add_counter('validate-goldens-commented', 1) - continue - # Use the joined sorted property names as a key for the group. - node_props_key = key_delimiter.join(sorted(list(node_props))) - golden_key_sets[node_props_key] = node_props - - # Initialize match count for the golden node to 0. - key = fingerprint_node(node, compare_props=node_props) - golden_matches.setdefault(key, {'node': node, 'matches': 0}) - - logging.info( - f'Comparing {len(input_nodes)} nodes against {len(golden_matches)} goldens in {len(golden_key_sets)} sets using properties: {golden_key_sets.keys()}' - ) - counters.add_counter('validate-goldens-sets', len(golden_key_sets)) - counters.add_counter('validate-goldens-inputs', len(input_nodes)) - counters.add_counter('validate-goldens-expected', len(golden_matches)) - - # Step 2: Match each input node with the golden fingerprints. - # An input node may match more than one golden node with different - # set of property:values. - for node in input_nodes.values(): - # An input node might match different golden "shapes" (sets of properties). - for node_key_props in golden_key_sets.values(): - key = fingerprint_node(node, - compare_props=node_key_props, - ignore_props=ignore_props) - if key in golden_matches: - golden_matches[key]['matches'] += 1 - counters.add_counter('validate-goldens-input-matched', 1) - - # Step 3: Identify which golden fingerprints had no corresponding input nodes. - missing_goldens = [] - for key, node_counts in golden_matches.items(): - count = node_counts.get('matches', 0) - if count > 0: - # This key got matches. - counters.add_counter('validate-goldens-matched', 1) - else: - if _is_commented_node(key, comment_char): - # No matches for this key. Ignore commented keys. - counters.add_counter('validate-goldens-ignored', 1) - else: - missing_goldens.append(node_counts.get('node')) - counters.add_counter('validate-goldens-missing', 1) - - if missing_goldens: - logging.error( - f'Missing {len(missing_goldens)} among {len(golden_nodes)} goldens in {len(input_nodes)} input nodes.' - ) - logging.debug(f'Missing goldens: {missing_goldens}') - else: - logging.info( - f'Goldens match successful: {len(golden_nodes)} goldens matched {len(input_nodes)} inputs' - ) - - return missing_goldens - - -def load_nodes_from_file(files: str) -> dict: - """Returns a dictionary of nodes loaded from the files. - - Supports CSV and MCF formats. - - CSV files: Each row is loaded as a node. - - MCF files: Each node is loaded based on its DCID. + A class to handle the loading and parsing of the validation configuration. """ - nodes = {} - input_files = file_util.file_get_matching(files) - for input_file in input_files: - if file_util.file_is_csv(input_file): - # For CSV, we treat each row as a dictionary of column:value. - # Nodes are keyed by their index in the combined loaded set. - file_nodes = file_util.file_load_csv_dict(input_file, - key_index=True) - # Check if any loaded node has None as a key, indicating an incorrect delimiter - # was auto-detected (e.g. splitting 'dcid:Earth' on colon ':') - has_delimiter_error = False - for node in file_nodes.values(): - if None in node: - has_delimiter_error = True - break - - if has_delimiter_error: - import csv - with file_util.FileIO(input_file) as csvfile: - rawdata = csvfile.read() - if isinstance(rawdata, bytes): - encoding = file_util.file_get_encoding(input_file) - data_str = rawdata.decode(encoding) - else: - data_str = rawdata - reader = csv.DictReader(data_str.splitlines(), delimiter=',') - file_nodes = {} - for row in reader: - file_nodes[len(file_nodes)] = dict(row) - - for node in file_nodes.values(): - # Clean up None/empty keys and strip whitespace from headers/keys to ensure robust parsing - cleaned_node = {k.strip(): v for k, v in node.items() if k is not None and isinstance(k, str) and k.strip() != ''} - nodes[len(nodes)] = cleaned_node - else: - # For MCF or JSON, we assume nodes are already keyed by DCID. - file_nodes = mcf_file_util.load_mcf_nodes(input_file) - for dcid, node in file_nodes.items(): - # Ensure the dcid is present in the node dictionary itself. - if 'dcid' not in node: - node['dcid'] = mcf_file_util.strip_namespace(dcid) - mcf_file_util.add_mcf_node(node, nodes) - - logging.info(f'Loaded {len(nodes)} nodes from {input_files}') - return nodes - - -def generate_goldens(input_files: str, - property_sets: list, - output_file: str = None, - config: dict = None, - counters: Counters = None) -> dict: - """Generates a set of unique golden nodes from input files. - - For each input node and each property set in property_sets, it extracts - the values for those properties and creates a unique golden node. - If sampling is requested, a representative sample of input nodes is used - as the basis for generating the golden nodes. - - Args: - input_files: Glob pattern or list of input data files. - property_sets: List of sets/lists of properties to extract. - Example: [{'variableMeasured'}, {'observationAbout', 'variableMeasured'}] - output_file: Path to write the generated goldens to (MCF format). - config: Configuration for normalization and sampling. - counters: Output counters. - - Returns: - A dictionary of unique golden nodes keyed by their fingerprints. - """ - if counters is None: - counters = Counters() - - if config is None: - config = get_validator_goldens_config() - - # Apply sampling if requested. - sampler_rows = config.get('sampler_output_rows', 0) - exhaustive = config.get('sampler_exhaustive', False) - must_include_values = data_sampler.load_column_keys( - config.get('sampler_column_keys', [])) - if must_include_values: - for col, vals in must_include_values.items(): - counters.add_counter(f'generate-goldens-include-{col}', len(vals)) - if sampler_rows > 0 or exhaustive: - logging.info( - f'Sampling rows from {input_files} (exhaustive={exhaustive}, rows={sampler_rows})' - ) - if exhaustive: - config['sampler_column_regex'] = '.*' - - # Generate a representative sample with unique values across columns. - with tempfile.NamedTemporaryFile(mode='w+t', suffix='.csv', - delete=True) as sampled_file: - sampler = data_sampler.DataSampler(config_dict=config, - counters=counters) - sampler.sample_csv_file(input_files, output_file=sampled_file.name) - input_nodes = load_nodes_from_file(sampled_file.name) - logging.info( - f'Using sampled file: {sampled_file} with {len(input_nodes)} nodes' - ) - counters.add_counter(f'generate-goldens-sampled-nodes', - len(input_nodes)) - else: - input_nodes = load_nodes_from_file(input_files) - counters.add_counter('generate-goldens-input-nodes', len(input_nodes)) - - # If not sampling, but must_include_values are provided, use them as a filter - # to focus goldens on prominent DCIDs if requested. - if must_include_values: - filtered_nodes = {} - for k, node in input_nodes.items(): - match = False - for col, vals in must_include_values.items(): - if node.get(col) in vals: - match = True - break - if match: - filtered_nodes[k] = node - - logging.info( - f'Filtered {len(input_nodes)} nodes down to {len(filtered_nodes)} matching prominent DCIDs.' - ) - input_nodes = filtered_nodes - counters.add_counter('generate-goldens-filtered-nodes', - len(filtered_nodes)) - - ignore_props = set(config.get('goldens_ignore_property', [])) - - golden_nodes = {} - for node in input_nodes.values(): - # If no property sets are provided, use all properties in the current node - # except those that are explicitly ignored. - effective_property_sets = property_sets - if not effective_property_sets: - node_props = set(node.keys()) - ignore_props - if node_props: - effective_property_sets = [node_props] - else: - continue - - for props in effective_property_sets: - # Create a dictionary for this specific property set from the input node. - golden_node = {} - has_all_props = True - for prop in props: - - if prop in node: - golden_node[prop] = node[prop] - else: - # If a node is missing one of the properties in a set, - # we skip this combination. - has_all_props = False - break - - if not has_all_props or not golden_node: - continue - - # Generate a unique key for this golden node shape. - key = fingerprint_node(golden_node, compare_props=props) - - if key not in golden_nodes: - golden_nodes[key] = golden_node - counters.add_counter('generate-goldens-unique', 1) - - counters.add_counter('generate-goldens-processed', 1) - - logging.info( - f'Generated {len(golden_nodes)} unique goldens from {len(input_nodes)} input nodes.' - ) - counters.add_counter('generated-golden-output', len(golden_nodes)) - - if golden_nodes and output_file: - logging.info(f'Writing {len(golden_nodes)} goldens to {output_file}') - if file_util.file_is_csv(output_file): - file_util.file_write_csv_dict(golden_nodes, - output_file, - key_column_name=None) - else: - mcf_file_util.write_mcf_nodes([golden_nodes], output_file) - - return golden_nodes - - -def validate_goldens(inputs: str | dict, - golden_files: str, - output_file: str = None, - config: dict = None, - counters: Counters = None) -> list: - """Validate records in the input files against goldens. - - This is the high-level entry point for comparing two sets of files. - - Args: - inputs: Glob pattern for list of input data files or - dictionary of input nodes. - golden_files: Glob pattern or list of golden data files. - output_file: Path to write missing goldens to. - config: Validation configuration. - counters: Counters for tracking progress and results. - """ - if config is None: - config = get_validator_goldens_config() - - # Load all nodes from input and golden files. - if isinstance(inputs, dict): - input_nodes = inputs - else: - input_nodes = load_nodes_from_file(inputs) - golden_files_list = file_util.file_get_matching(golden_files) - golden_nodes = load_nodes_from_file(golden_files_list) - - # Run the core comparison logic. - missing_goldens = validator_compare_nodes(input_nodes, golden_nodes, config, - counters) - - # Optionally write out the missing golden nodes for debugging. - if missing_goldens and output_file: - if output_file.endswith('/') or os.path.isdir(output_file): - # Append a default filename if only a directory was provided. - output_file = os.path.join( - output_file, - 'goldens_missing_' + os.path.basename(golden_files_list[0])) - logging.info( - f'Writing {len(missing_goldens)} missing goldens to {output_file}') - if file_util.file_is_csv(output_file): - file_util.file_write_csv_dict(dict(enumerate(missing_goldens)), - output_file) - else: - mcf_file_util.write_mcf_nodes(dict(enumerate(missing_goldens)), - output_file) - return missing_goldens - - -def main(_): - """Main entry point for the validator script.""" - logging.set_verbosity(2) - counters = Counters() - - if _FLAGS.generate_goldens: - # Generation Mode - property_sets = [] - for p_set_str in _FLAGS.generate_goldens_property_sets: - property_sets.append(set(p_set_str.split('|'))) - - generate_goldens(_FLAGS.validate_goldens_input, - property_sets, - output_file=_FLAGS.generate_goldens, - config=get_validator_goldens_config(), - counters=counters) - if _FLAGS.validate_goldens: - # Validation Mode - validate_goldens(_FLAGS.validate_goldens_input, - _FLAGS.validate_goldens, - output_file=_FLAGS.validate_goldens_output, - config=get_validator_goldens_config(), - counters=counters) - -if __name__ == '__main__': - app.run(main) + def __init__(self, config_path: str): + self.config = _load_json_config(config_path) + + self.schema_version: str = self.config.get("schema_version", "1.0") + self.definitions: Dict[str, Any] = self.config.get("definitions", {}) + self.rules: List[Dict[str, Any]] = self.config.get("rules", []) + + def get_scope(self, scope_ref: str) -> Dict[str, Any]: + """ + Retrieves a named scope from the definitions. + """ + if not scope_ref.startswith('@'): + return {} + scope_name = scope_ref[1:] + return self.definitions.get("scopes", {}).get(scope_name, {}) + + def get_variable_set(self, var_set_ref: str) -> Dict[str, Any]: + """ + Retrieves a named variable set from the definitions. + """ + if not var_set_ref.startswith('@'): + return {} + var_set_name = var_set_ref[1:] + return self.definitions.get("variable_sets", {}).get(var_set_name, {}) diff --git a/tools/import_validation/validator_goldens.py b/tools/import_validation/validator_goldens.py index 916cd2f43c..9fe04aa83b 100644 --- a/tools/import_validation/validator_goldens.py +++ b/tools/import_validation/validator_goldens.py @@ -71,7 +71,6 @@ import os import sys import tempfile -import csv from absl import app from absl import flags @@ -298,7 +297,30 @@ def load_nodes_from_file(files: str) -> dict: # Nodes are keyed by their index in the combined loaded set. file_nodes = file_util.file_load_csv_dict(input_file, key_index=True) + # Check if any loaded node has None as a key, indicating an incorrect delimiter + # was auto-detected (e.g. splitting 'dcid:Earth' on colon ':') + has_delimiter_error = False for node in file_nodes.values(): + if None in node: + has_delimiter_error = True + break + + if has_delimiter_error: + import csv + with file_util.FileIO(input_file) as csvfile: + rawdata = csvfile.read() + if isinstance(rawdata, bytes): + encoding = file_util.file_get_encoding(input_file) + data_str = rawdata.decode(encoding) + else: + data_str = rawdata + reader = csv.DictReader(data_str.splitlines(), delimiter=',') + file_nodes = {} + for row in reader: + file_nodes[len(file_nodes)] = dict(row) + + for node in file_nodes.values(): + # Clean up None/empty keys and strip whitespace from headers/keys to ensure robust parsing cleaned_node = {k.strip(): v for k, v in node.items() if k is not None and isinstance(k, str) and k.strip() != ''} nodes[len(nodes)] = cleaned_node else: @@ -381,9 +403,7 @@ def generate_goldens(input_files: str, for k, node in input_nodes.items(): match = False for col, vals in must_include_values.items(): - val = node.get(col) - if val in vals or mcf_file_util.strip_namespace( - val) in vals: + if node.get(col) in vals: match = True break if match: @@ -444,16 +464,9 @@ def generate_goldens(input_files: str, if golden_nodes and output_file: logging.info(f'Writing {len(golden_nodes)} goldens to {output_file}') if file_util.file_is_csv(output_file): - with file_util.FileIO(output_file, mode='w') as csvfile: - columns = sorted( - list(set().union( - *(node.keys() for node in golden_nodes.values())))) - writer = csv.DictWriter(csvfile, - fieldnames=columns, - quoting=csv.QUOTE_NONNUMERIC) - writer.writeheader() - for node in golden_nodes.values(): - writer.writerow(node) + file_util.file_write_csv_dict(golden_nodes, + output_file, + key_column_name=None) else: mcf_file_util.write_mcf_nodes([golden_nodes], output_file) From b57b3b94e24dc2331a82fd4552fe665fae28993d Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Mon, 8 Jun 2026 09:07:23 +0000 Subject: [PATCH 08/18] testing --- tools/import_validation/runner.py | 81 +++++++++++++------- tools/import_validation/validator_goldens.py | 19 +++-- 2 files changed, 68 insertions(+), 32 deletions(-) diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index 066a750bb0..2acbf38bc9 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -14,6 +14,7 @@ """Module for the ValidationRunner class.""" import os +import logging from absl import app from absl import flags from absl import logging @@ -34,6 +35,30 @@ _FLAGS = flags.FLAGS +def _is_relative_local(path_val: str) -> bool: + """Checks if a path is a relative, local file path.""" + if not isinstance(path_val, str) or not path_val: + return False + return (not os.path.isabs(path_val) and not path_val.startswith('gs://') and + not path_val.startswith('http://') and + not path_val.startswith('https://')) + + +def _find_base_dir(start_path: str, target_sub_path: str) -> str | None: + """Helper to find a base directory containing target_sub_path by walking up.""" + if not start_path: + return None + curr = os.path.abspath(start_path) + for _ in range(10): # limit to 10 levels up + if os.path.exists(os.path.join(curr, target_sub_path)): + return curr + parent = os.path.dirname(curr) + if parent == curr: + break + curr = parent + return None + + class ValidationRunner: """ Orchestrates the validation process based on the new schema. @@ -216,45 +241,47 @@ def run_validations(self) -> tuple[bool, list[ValidationResult]]: # Resolve paths relative to the directory of the validation config. if validator_name == 'GOLDENS_CHECK': - # Helper to find a base directory containing target_sub_path by walking up - def find_base_dir(start_path: str, target_sub_path: str): - if not start_path: - return None - curr = os.path.abspath(start_path) - for _ in range(10): # limit to 10 levels up - if os.path.exists(os.path.join(curr, target_sub_path)): - return curr - parent = os.path.dirname(curr) - if parent == curr: - break - curr = parent - return None - config_dir = None # Walk up from validation_config_path, self.stats_summary, or CWD to find where 'golden_data' lives - for start in [self.validation_config_path, self.stats_summary, os.getcwd()]: - config_dir = find_base_dir(start, 'golden_data') + for start in [ + self.validation_config_path, self.stats_summary, + os.getcwd() + ]: + config_dir = _find_base_dir(start, 'golden_data') if config_dir: break if not config_dir: - config_dir = os.path.dirname(os.path.abspath(self.validation_config_path)) - - print(f"DEBUG: Found GOLDENS_CHECK rule: '{rule.get('rule_id')}'") - print(f"DEBUG: Config directory resolved to: '{config_dir}'") - for path_key in ['golden_files', 'input_files']: - if path_key in rule_params: + config_dir = os.path.dirname( + os.path.abspath(self.validation_config_path)) + + print( + f"DEBUG: Found GOLDENS_CHECK rule: '{rule.get('rule_id')}'" + ) + print( + f"DEBUG: Config directory resolved to: '{config_dir}'") + for path_key in list(rule_params.keys()): + # Check any key in rule_params that equals 'golden_files' or 'input_files' or ends with '_file' or '_files' + if path_key in ( + 'golden_files', 'input_files' + ) or path_key.endswith('_file') or path_key.endswith( + '_files'): val = rule_params[path_key] - print(f"DEBUG: Before resolve '{path_key}': '{val}'") + print( + f"DEBUG: Before resolve '{path_key}': '{val}'") if isinstance(val, str): - if val and not os.path.isabs(val) and not val.startswith('gs://') and not val.startswith('http://') and not val.startswith('https://'): - rule_params[path_key] = os.path.join(config_dir, val) + if _is_relative_local(val): + rule_params[path_key] = os.path.join( + config_dir, val) elif isinstance(val, list): rule_params[path_key] = [ - os.path.join(config_dir, item) if isinstance(item, str) and item and not os.path.isabs(item) and not item.startswith('gs://') and not item.startswith('http://') and not item.startswith('https://') else item + os.path.join(config_dir, item) + if _is_relative_local(item) else item for item in val ] - print(f"DEBUG: After resolve '{path_key}': '{rule_params[path_key]}'") + print( + f"DEBUG: After resolve '{path_key}': '{rule_params[path_key]}'" + ) if validator_name == 'SQL_VALIDATOR': result = validation_func(self.data_sources['stats'], diff --git a/tools/import_validation/validator_goldens.py b/tools/import_validation/validator_goldens.py index 9fe04aa83b..c6f3efe599 100644 --- a/tools/import_validation/validator_goldens.py +++ b/tools/import_validation/validator_goldens.py @@ -68,6 +68,7 @@ --generate_goldens=goldens_data/generated_goldens.csv """ +import csv import os import sys import tempfile @@ -314,22 +315,30 @@ def load_nodes_from_file(files: str) -> dict: data_str = rawdata.decode(encoding) else: data_str = rawdata - reader = csv.DictReader(data_str.splitlines(), delimiter=',') + reader = csv.DictReader(data_str.splitlines(), + delimiter=',') file_nodes = {} for row in reader: file_nodes[len(file_nodes)] = dict(row) for node in file_nodes.values(): - # Clean up None/empty keys and strip whitespace from headers/keys to ensure robust parsing - cleaned_node = {k.strip(): v for k, v in node.items() if k is not None and isinstance(k, str) and k.strip() != ''} + # Clean up None/empty keys and strip whitespace from headers/keys and values to ensure robust parsing + cleaned_node = { + k.strip(): (v.strip() if isinstance(v, str) else v) + for k, v in node.items() + if k is not None and isinstance(k, str) and k.strip() != '' + } nodes[len(nodes)] = cleaned_node else: # For MCF or JSON, we assume nodes are already keyed by DCID. file_nodes = mcf_file_util.load_mcf_nodes(input_file) for dcid, node in file_nodes.items(): - # Ensure the dcid is present in the node dictionary itself. + # Ensure the dcid is present in the node dictionary itself with a null-safe check. if 'dcid' not in node: - node['dcid'] = mcf_file_util.strip_namespace(dcid) + if dcid and isinstance(dcid, str): + node['dcid'] = mcf_file_util.strip_namespace(dcid) + else: + node['dcid'] = '' mcf_file_util.add_mcf_node(node, nodes) logging.info(f'Loaded {len(nodes)} nodes from {input_files}') From da4bdf4f97da9c4f3980d0e40a9c851b2664657d Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Tue, 9 Jun 2026 08:57:58 +0000 Subject: [PATCH 09/18] testing --- tools/import_validation/runner.py | 41 +++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index 2acbf38bc9..37ce44a5a6 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -36,16 +36,41 @@ def _is_relative_local(path_val: str) -> bool: - """Checks if a path is a relative, local file path.""" + """Checks if a path is a relative, local file path. + + This function identifies path strings that represent local relative files + (e.g., 'golden_data/un_wpp.csv') as opposed to absolute paths. It filters + out non-strings, empty strings, and absolute local paths. + + Args: + path_val: The file path string to evaluate. + + Returns: + True if the path represents a relative, local file path; False otherwise. + """ if not isinstance(path_val, str) or not path_val: return False - return (not os.path.isabs(path_val) and not path_val.startswith('gs://') and - not path_val.startswith('http://') and - not path_val.startswith('https://')) + return not os.path.isabs(path_val) def _find_base_dir(start_path: str, target_sub_path: str) -> str | None: - """Helper to find a base directory containing target_sub_path by walking up.""" + """Helper to find a base directory containing a target sub-path by walking up. + + Starting from the absolute directory of `start_path`, this function recursively + checks if `target_sub_path` exists in the current folder. If not, it walks up the + parent directory tree up to 10 levels. This is crucial for resolving paths relative + to import-specific golden directories when tests/validation are run from + different working directories (such as the repository root in CI/CD). + + Args: + start_path: The file or directory path to start the upward search from. + target_sub_path: The name of the subdirectory or file (e.g., 'golden_data') + to search for within the parent tree. + + Returns: + The absolute path of the directory containing `target_sub_path` if found, + or None if the root was reached or the 10-level limit was exceeded. + """ if not start_path: return None curr = os.path.abspath(start_path) @@ -263,9 +288,9 @@ def run_validations(self) -> tuple[bool, list[ValidationResult]]: for path_key in list(rule_params.keys()): # Check any key in rule_params that equals 'golden_files' or 'input_files' or ends with '_file' or '_files' if path_key in ( - 'golden_files', 'input_files' - ) or path_key.endswith('_file') or path_key.endswith( - '_files'): + 'golden_files', + 'input_files') or path_key.endswith( + '_file') or path_key.endswith('_files'): val = rule_params[path_key] print( f"DEBUG: Before resolve '{path_key}': '{val}'") From 9b40a8944e637e0faf501ff669a4778970c04ac0 Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Tue, 9 Jun 2026 09:57:06 +0000 Subject: [PATCH 10/18] testing --- tools/import_validation/runner.py | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index 37ce44a5a6..51d3149214 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -54,33 +54,28 @@ def _is_relative_local(path_val: str) -> bool: def _find_base_dir(start_path: str, target_sub_path: str) -> str | None: - """Helper to find a base directory containing a target sub-path by walking up. + """Helper to find a base directory containing a target sub-path. - Starting from the absolute directory of `start_path`, this function recursively - checks if `target_sub_path` exists in the current folder. If not, it walks up the - parent directory tree up to 10 levels. This is crucial for resolving paths relative - to import-specific golden directories when tests/validation are run from - different working directories (such as the repository root in CI/CD). + Since the validation config and other files are co-located in the same + directory as the golden data, this function checks the directory of start_path + (or start_path itself if it's already a directory) for target_sub_path immediately. Args: - start_path: The file or directory path to start the upward search from. + start_path: The file or directory path to check. target_sub_path: The name of the subdirectory or file (e.g., 'golden_data') - to search for within the parent tree. + to search for within the directory. Returns: The absolute path of the directory containing `target_sub_path` if found, - or None if the root was reached or the 10-level limit was exceeded. + or None otherwise. """ if not start_path: return None curr = os.path.abspath(start_path) - for _ in range(10): # limit to 10 levels up - if os.path.exists(os.path.join(curr, target_sub_path)): - return curr - parent = os.path.dirname(curr) - if parent == curr: - break - curr = parent + if os.path.isfile(curr): + curr = os.path.dirname(curr) + if os.path.exists(os.path.join(curr, target_sub_path)): + return curr return None From 57d622491bf7d7da310542db2f1d73fe3a289b3c Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Tue, 9 Jun 2026 16:13:44 +0000 Subject: [PATCH 11/18] testing --- tools/import_validation/runner.py | 27 +++++---- tools/import_validation/validator_goldens.py | 59 +++++++------------- 2 files changed, 36 insertions(+), 50 deletions(-) diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index 51d3149214..921e981ba6 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -54,28 +54,33 @@ def _is_relative_local(path_val: str) -> bool: def _find_base_dir(start_path: str, target_sub_path: str) -> str | None: - """Helper to find a base directory containing a target sub-path. + """Helper to find a base directory containing a target sub-path by walking up. - Since the validation config and other files are co-located in the same - directory as the golden data, this function checks the directory of start_path - (or start_path itself if it's already a directory) for target_sub_path immediately. + Starting from the absolute directory of `start_path`, this function recursively + checks if `target_sub_path` exists in the current folder. If not, it walks up the + parent directory tree up to 10 levels. This is crucial for resolving paths relative + to import-specific golden directories when tests/validation are run from + different working directories (such as the repository root in CI/CD). Args: - start_path: The file or directory path to check. + start_path: The file or directory path to start the upward search from. target_sub_path: The name of the subdirectory or file (e.g., 'golden_data') - to search for within the directory. + to search for within the parent tree. Returns: The absolute path of the directory containing `target_sub_path` if found, - or None otherwise. + or None if the root was reached or the 10-level limit was exceeded. """ if not start_path: return None curr = os.path.abspath(start_path) - if os.path.isfile(curr): - curr = os.path.dirname(curr) - if os.path.exists(os.path.join(curr, target_sub_path)): - return curr + for _ in range(5): # limit to 10 levels up + if os.path.exists(os.path.join(curr, target_sub_path)): + return curr + parent = os.path.dirname(curr) + if parent == curr: + break + curr = parent return None diff --git a/tools/import_validation/validator_goldens.py b/tools/import_validation/validator_goldens.py index c6f3efe599..4f8d8b8b32 100644 --- a/tools/import_validation/validator_goldens.py +++ b/tools/import_validation/validator_goldens.py @@ -298,53 +298,20 @@ def load_nodes_from_file(files: str) -> dict: # Nodes are keyed by their index in the combined loaded set. file_nodes = file_util.file_load_csv_dict(input_file, key_index=True) - # Check if any loaded node has None as a key, indicating an incorrect delimiter - # was auto-detected (e.g. splitting 'dcid:Earth' on colon ':') - has_delimiter_error = False for node in file_nodes.values(): - if None in node: - has_delimiter_error = True - break - - if has_delimiter_error: - import csv - with file_util.FileIO(input_file) as csvfile: - rawdata = csvfile.read() - if isinstance(rawdata, bytes): - encoding = file_util.file_get_encoding(input_file) - data_str = rawdata.decode(encoding) - else: - data_str = rawdata - reader = csv.DictReader(data_str.splitlines(), - delimiter=',') - file_nodes = {} - for row in reader: - file_nodes[len(file_nodes)] = dict(row) - - for node in file_nodes.values(): - # Clean up None/empty keys and strip whitespace from headers/keys and values to ensure robust parsing - cleaned_node = { - k.strip(): (v.strip() if isinstance(v, str) else v) - for k, v in node.items() - if k is not None and isinstance(k, str) and k.strip() != '' - } - nodes[len(nodes)] = cleaned_node + nodes[len(nodes)] = node else: # For MCF or JSON, we assume nodes are already keyed by DCID. file_nodes = mcf_file_util.load_mcf_nodes(input_file) for dcid, node in file_nodes.items(): - # Ensure the dcid is present in the node dictionary itself with a null-safe check. + # Ensure the dcid is present in the node dictionary itself. if 'dcid' not in node: - if dcid and isinstance(dcid, str): - node['dcid'] = mcf_file_util.strip_namespace(dcid) - else: - node['dcid'] = '' + node['dcid'] = mcf_file_util.strip_namespace(dcid) mcf_file_util.add_mcf_node(node, nodes) logging.info(f'Loaded {len(nodes)} nodes from {input_files}') return nodes - def generate_goldens(input_files: str, property_sets: list, output_file: str = None, @@ -473,9 +440,23 @@ def generate_goldens(input_files: str, if golden_nodes and output_file: logging.info(f'Writing {len(golden_nodes)} goldens to {output_file}') if file_util.file_is_csv(output_file): - file_util.file_write_csv_dict(golden_nodes, - output_file, - key_column_name=None) + headers = [] + for node in golden_nodes.values(): + for prop in node.keys(): + if prop not in headers: + headers.append(prop) + with file_util.FileIO(output_file, mode='w') as csvfile: + writer = csv.DictWriter( + csvfile, + fieldnames=headers, + escapechar='\\', + extrasaction='ignore', + quotechar='"', + quoting=csv.QUOTE_NONNUMERIC, + ) + writer.writeheader() + for node in golden_nodes.values(): + writer.writerow(node) else: mcf_file_util.write_mcf_nodes([golden_nodes], output_file) From 60aa7acc8af5f2520a0601fa5cc6baa2de95f65c Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Tue, 9 Jun 2026 17:16:39 +0000 Subject: [PATCH 12/18] testing --- tools/import_validation/runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index 921e981ba6..37ce44a5a6 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -74,7 +74,7 @@ def _find_base_dir(start_path: str, target_sub_path: str) -> str | None: if not start_path: return None curr = os.path.abspath(start_path) - for _ in range(5): # limit to 10 levels up + for _ in range(10): # limit to 10 levels up if os.path.exists(os.path.join(curr, target_sub_path)): return curr parent = os.path.dirname(curr) From 2c47b6938ec587053f077836d98ffba66420e07e Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Wed, 10 Jun 2026 12:40:07 +0000 Subject: [PATCH 13/18] Remove golden_observations.csv from tracking --- .../golden_data/golden_observations.csv | 2061 ----------------- 1 file changed, 2061 deletions(-) delete mode 100644 scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv diff --git a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv deleted file mode 100644 index edadb0dc02..0000000000 --- a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/golden_data/golden_observations.csv +++ /dev/null @@ -1,2061 +0,0 @@ -"GeoId" -"country/ALB" -"country/AUT" -"country/BEL" -"country/BGR" -"country/CHE" -"country/CYP" -"country/CZE" -"country/DEU" -"country/DNK" -"country/ESP" -"country/EST" -"country/FIN" -"country/FRA" -"country/GBR" -"country/GRC" -"country/HRV" -"country/HUN" -"country/IRL" -"country/ISL" -"country/ITA" -"country/LIE" -"country/LTU" -"country/LUX" -"country/LVA" -"country/MKD" -"country/MLT" -"country/MNE" -"country/NLD" -"country/NOR" -"country/POL" -"country/PRT" -"country/ROU" -"country/SRB" -"country/SVK" -"country/SVN" -"country/SWE" -"country/TUR" -"nuts/AL0" -"nuts/AL01" -"nuts/AL011" -"nuts/AL012" -"nuts/AL013" -"nuts/AL014" -"nuts/AL015" -"nuts/AL02" -"nuts/AL021" -"nuts/AL022" -"nuts/AL03" -"nuts/AL031" -"nuts/AL032" -"nuts/AL033" -"nuts/AL034" -"nuts/AL035" -"nuts/AT1" -"nuts/AT11" -"nuts/AT111" -"nuts/AT112" -"nuts/AT113" -"nuts/AT12" -"nuts/AT121" -"nuts/AT122" -"nuts/AT123" -"nuts/AT124" -"nuts/AT125" -"nuts/AT126" -"nuts/AT127" -"nuts/AT13" -"nuts/AT130" -"nuts/AT2" -"nuts/AT21" -"nuts/AT211" -"nuts/AT212" -"nuts/AT213" -"nuts/AT22" -"nuts/AT221" -"nuts/AT222" -"nuts/AT223" -"nuts/AT224" -"nuts/AT225" -"nuts/AT226" -"nuts/AT3" -"nuts/AT31" -"nuts/AT311" -"nuts/AT312" -"nuts/AT313" -"nuts/AT314" -"nuts/AT315" -"nuts/AT32" -"nuts/AT321" -"nuts/AT322" -"nuts/AT323" -"nuts/AT33" -"nuts/AT331" -"nuts/AT332" -"nuts/AT333" -"nuts/AT334" -"nuts/AT335" -"nuts/AT34" -"nuts/AT341" -"nuts/AT342" -"nuts/BE1" -"nuts/BE10" -"nuts/BE100" -"nuts/BE2" -"nuts/BE21" -"nuts/BE211" -"nuts/BE212" -"nuts/BE213" -"nuts/BE22" -"nuts/BE221" -"nuts/BE222" -"nuts/BE223" -"nuts/BE224" -"nuts/BE225" -"nuts/BE23" -"nuts/BE231" -"nuts/BE232" -"nuts/BE233" -"nuts/BE234" -"nuts/BE235" -"nuts/BE236" -"nuts/BE24" -"nuts/BE241" -"nuts/BE242" -"nuts/BE25" -"nuts/BE251" -"nuts/BE252" -"nuts/BE253" -"nuts/BE254" -"nuts/BE255" -"nuts/BE256" -"nuts/BE257" -"nuts/BE258" -"nuts/BE3" -"nuts/BE31" -"nuts/BE310" -"nuts/BE32" -"nuts/BE321" -"nuts/BE322" -"nuts/BE323" -"nuts/BE324" -"nuts/BE325" -"nuts/BE326" -"nuts/BE327" -"nuts/BE328" -"nuts/BE329" -"nuts/BE32A" -"nuts/BE32B" -"nuts/BE32C" -"nuts/BE32D" -"nuts/BE33" -"nuts/BE331" -"nuts/BE332" -"nuts/BE334" -"nuts/BE335" -"nuts/BE336" -"nuts/BE34" -"nuts/BE341" -"nuts/BE342" -"nuts/BE343" -"nuts/BE344" -"nuts/BE345" -"nuts/BE35" -"nuts/BE351" -"nuts/BE352" -"nuts/BE353" -"nuts/BG3" -"nuts/BG31" -"nuts/BG311" -"nuts/BG312" -"nuts/BG313" -"nuts/BG314" -"nuts/BG315" -"nuts/BG32" -"nuts/BG321" -"nuts/BG322" -"nuts/BG323" -"nuts/BG324" -"nuts/BG325" -"nuts/BG33" -"nuts/BG331" -"nuts/BG332" -"nuts/BG333" -"nuts/BG334" -"nuts/BG34" -"nuts/BG341" -"nuts/BG342" -"nuts/BG343" -"nuts/BG344" -"nuts/BG4" -"nuts/BG41" -"nuts/BG411" -"nuts/BG412" -"nuts/BG413" -"nuts/BG414" -"nuts/BG415" -"nuts/BG42" -"nuts/BG421" -"nuts/BG422" -"nuts/BG423" -"nuts/BG424" -"nuts/BG425" -"nuts/CH0" -"nuts/CH01" -"nuts/CH011" -"nuts/CH012" -"nuts/CH013" -"nuts/CH02" -"nuts/CH021" -"nuts/CH022" -"nuts/CH023" -"nuts/CH024" -"nuts/CH025" -"nuts/CH03" -"nuts/CH031" -"nuts/CH032" -"nuts/CH033" -"nuts/CH04" -"nuts/CH040" -"nuts/CH05" -"nuts/CH051" -"nuts/CH052" -"nuts/CH053" -"nuts/CH055" -"nuts/CH056" -"nuts/CH057" -"nuts/CH06" -"nuts/CH061" -"nuts/CH062" -"nuts/CH063" -"nuts/CH064" -"nuts/CH065" -"nuts/CH066" -"nuts/CH07" -"nuts/CH070" -"nuts/CY0" -"nuts/CY00" -"nuts/CY000" -"nuts/CZ0" -"nuts/CZ01" -"nuts/CZ010" -"nuts/CZ02" -"nuts/CZ020" -"nuts/CZ03" -"nuts/CZ031" -"nuts/CZ032" -"nuts/CZ04" -"nuts/CZ041" -"nuts/CZ042" -"nuts/CZ05" -"nuts/CZ051" -"nuts/CZ052" -"nuts/CZ053" -"nuts/CZ06" -"nuts/CZ063" -"nuts/CZ064" -"nuts/CZ07" -"nuts/CZ071" -"nuts/CZ072" -"nuts/CZ08" -"nuts/CZ080" -"nuts/DE1" -"nuts/DE11" -"nuts/DE111" -"nuts/DE112" -"nuts/DE113" -"nuts/DE114" -"nuts/DE115" -"nuts/DE116" -"nuts/DE117" -"nuts/DE118" -"nuts/DE119" -"nuts/DE11A" -"nuts/DE11B" -"nuts/DE11C" -"nuts/DE11D" -"nuts/DE12" -"nuts/DE121" -"nuts/DE122" -"nuts/DE123" -"nuts/DE124" -"nuts/DE125" -"nuts/DE126" -"nuts/DE127" -"nuts/DE128" -"nuts/DE129" -"nuts/DE12A" -"nuts/DE12B" -"nuts/DE12C" -"nuts/DE13" -"nuts/DE131" -"nuts/DE132" -"nuts/DE133" -"nuts/DE134" -"nuts/DE135" -"nuts/DE136" -"nuts/DE137" -"nuts/DE138" -"nuts/DE139" -"nuts/DE13A" -"nuts/DE14" -"nuts/DE141" -"nuts/DE142" -"nuts/DE143" -"nuts/DE144" -"nuts/DE145" -"nuts/DE146" -"nuts/DE147" -"nuts/DE148" -"nuts/DE149" -"nuts/DE2" -"nuts/DE21" -"nuts/DE211" -"nuts/DE212" -"nuts/DE213" -"nuts/DE214" -"nuts/DE215" -"nuts/DE216" -"nuts/DE217" -"nuts/DE218" -"nuts/DE219" -"nuts/DE21A" -"nuts/DE21B" -"nuts/DE21C" -"nuts/DE21D" -"nuts/DE21E" -"nuts/DE21F" -"nuts/DE21G" -"nuts/DE21H" -"nuts/DE21I" -"nuts/DE21J" -"nuts/DE21K" -"nuts/DE21L" -"nuts/DE21M" -"nuts/DE21N" -"nuts/DE22" -"nuts/DE221" -"nuts/DE222" -"nuts/DE223" -"nuts/DE224" -"nuts/DE225" -"nuts/DE226" -"nuts/DE227" -"nuts/DE228" -"nuts/DE229" -"nuts/DE22A" -"nuts/DE22B" -"nuts/DE22C" -"nuts/DE23" -"nuts/DE231" -"nuts/DE232" -"nuts/DE233" -"nuts/DE234" -"nuts/DE235" -"nuts/DE236" -"nuts/DE237" -"nuts/DE238" -"nuts/DE239" -"nuts/DE23A" -"nuts/DE24" -"nuts/DE241" -"nuts/DE242" -"nuts/DE243" -"nuts/DE244" -"nuts/DE245" -"nuts/DE246" -"nuts/DE247" -"nuts/DE248" -"nuts/DE249" -"nuts/DE24A" -"nuts/DE24B" -"nuts/DE24C" -"nuts/DE24D" -"nuts/DE25" -"nuts/DE251" -"nuts/DE252" -"nuts/DE253" -"nuts/DE254" -"nuts/DE255" -"nuts/DE256" -"nuts/DE257" -"nuts/DE258" -"nuts/DE259" -"nuts/DE25A" -"nuts/DE25B" -"nuts/DE25C" -"nuts/DE26" -"nuts/DE261" -"nuts/DE262" -"nuts/DE263" -"nuts/DE264" -"nuts/DE265" -"nuts/DE266" -"nuts/DE267" -"nuts/DE268" -"nuts/DE269" -"nuts/DE26A" -"nuts/DE26B" -"nuts/DE26C" -"nuts/DE27" -"nuts/DE271" -"nuts/DE272" -"nuts/DE273" -"nuts/DE274" -"nuts/DE275" -"nuts/DE276" -"nuts/DE277" -"nuts/DE278" -"nuts/DE279" -"nuts/DE27A" -"nuts/DE27B" -"nuts/DE27C" -"nuts/DE27D" -"nuts/DE27E" -"nuts/DE3" -"nuts/DE30" -"nuts/DE300" -"nuts/DE4" -"nuts/DE40" -"nuts/DE401" -"nuts/DE402" -"nuts/DE403" -"nuts/DE404" -"nuts/DE405" -"nuts/DE406" -"nuts/DE407" -"nuts/DE408" -"nuts/DE409" -"nuts/DE40A" -"nuts/DE40B" -"nuts/DE40C" -"nuts/DE40D" -"nuts/DE40E" -"nuts/DE40F" -"nuts/DE40G" -"nuts/DE40H" -"nuts/DE40I" -"nuts/DE5" -"nuts/DE50" -"nuts/DE501" -"nuts/DE502" -"nuts/DE6" -"nuts/DE60" -"nuts/DE600" -"nuts/DE7" -"nuts/DE71" -"nuts/DE711" -"nuts/DE712" -"nuts/DE713" -"nuts/DE714" -"nuts/DE715" -"nuts/DE716" -"nuts/DE717" -"nuts/DE718" -"nuts/DE719" -"nuts/DE71A" -"nuts/DE71B" -"nuts/DE71C" -"nuts/DE71D" -"nuts/DE71E" -"nuts/DE72" -"nuts/DE721" -"nuts/DE722" -"nuts/DE723" -"nuts/DE724" -"nuts/DE725" -"nuts/DE73" -"nuts/DE731" -"nuts/DE732" -"nuts/DE733" -"nuts/DE734" -"nuts/DE735" -"nuts/DE736" -"nuts/DE737" -"nuts/DE8" -"nuts/DE80" -"nuts/DE803" -"nuts/DE804" -"nuts/DE80J" -"nuts/DE80K" -"nuts/DE80L" -"nuts/DE80M" -"nuts/DE80N" -"nuts/DE80O" -"nuts/DE9" -"nuts/DE91" -"nuts/DE911" -"nuts/DE912" -"nuts/DE913" -"nuts/DE914" -"nuts/DE916" -"nuts/DE917" -"nuts/DE918" -"nuts/DE91A" -"nuts/DE91B" -"nuts/DE91C" -"nuts/DE92" -"nuts/DE922" -"nuts/DE923" -"nuts/DE925" -"nuts/DE926" -"nuts/DE927" -"nuts/DE928" -"nuts/DE929" -"nuts/DE93" -"nuts/DE931" -"nuts/DE932" -"nuts/DE933" -"nuts/DE934" -"nuts/DE935" -"nuts/DE936" -"nuts/DE937" -"nuts/DE938" -"nuts/DE939" -"nuts/DE93A" -"nuts/DE93B" -"nuts/DE94" -"nuts/DE941" -"nuts/DE942" -"nuts/DE943" -"nuts/DE944" -"nuts/DE945" -"nuts/DE946" -"nuts/DE947" -"nuts/DE948" -"nuts/DE949" -"nuts/DE94A" -"nuts/DE94B" -"nuts/DE94C" -"nuts/DE94D" -"nuts/DE94E" -"nuts/DE94F" -"nuts/DE94G" -"nuts/DE94H" -"nuts/DEA" -"nuts/DEA1" -"nuts/DEA11" -"nuts/DEA12" -"nuts/DEA13" -"nuts/DEA14" -"nuts/DEA15" -"nuts/DEA16" -"nuts/DEA17" -"nuts/DEA18" -"nuts/DEA19" -"nuts/DEA1A" -"nuts/DEA1B" -"nuts/DEA1C" -"nuts/DEA1D" -"nuts/DEA1E" -"nuts/DEA1F" -"nuts/DEA2" -"nuts/DEA22" -"nuts/DEA23" -"nuts/DEA24" -"nuts/DEA26" -"nuts/DEA27" -"nuts/DEA28" -"nuts/DEA29" -"nuts/DEA2A" -"nuts/DEA2B" -"nuts/DEA2C" -"nuts/DEA2D" -"nuts/DEA3" -"nuts/DEA31" -"nuts/DEA32" -"nuts/DEA33" -"nuts/DEA34" -"nuts/DEA35" -"nuts/DEA36" -"nuts/DEA37" -"nuts/DEA38" -"nuts/DEA4" -"nuts/DEA41" -"nuts/DEA42" -"nuts/DEA43" -"nuts/DEA44" -"nuts/DEA45" -"nuts/DEA46" -"nuts/DEA47" -"nuts/DEA5" -"nuts/DEA51" -"nuts/DEA52" -"nuts/DEA53" -"nuts/DEA54" -"nuts/DEA55" -"nuts/DEA56" -"nuts/DEA57" -"nuts/DEA58" -"nuts/DEA59" -"nuts/DEA5A" -"nuts/DEA5B" -"nuts/DEA5C" -"nuts/DEB" -"nuts/DEB1" -"nuts/DEB11" -"nuts/DEB12" -"nuts/DEB13" -"nuts/DEB14" -"nuts/DEB15" -"nuts/DEB17" -"nuts/DEB18" -"nuts/DEB1A" -"nuts/DEB1B" -"nuts/DEB1C" -"nuts/DEB1D" -"nuts/DEB2" -"nuts/DEB21" -"nuts/DEB22" -"nuts/DEB23" -"nuts/DEB24" -"nuts/DEB25" -"nuts/DEB3" -"nuts/DEB31" -"nuts/DEB32" -"nuts/DEB33" -"nuts/DEB34" -"nuts/DEB35" -"nuts/DEB36" -"nuts/DEB37" -"nuts/DEB38" -"nuts/DEB39" -"nuts/DEB3A" -"nuts/DEB3B" -"nuts/DEB3C" -"nuts/DEB3D" -"nuts/DEB3E" -"nuts/DEB3F" -"nuts/DEB3G" -"nuts/DEB3H" -"nuts/DEB3I" -"nuts/DEB3J" -"nuts/DEB3K" -"nuts/DEC" -"nuts/DEC0" -"nuts/DEC01" -"nuts/DEC02" -"nuts/DEC03" -"nuts/DEC04" -"nuts/DEC05" -"nuts/DEC06" -"nuts/DED" -"nuts/DED2" -"nuts/DED21" -"nuts/DED2C" -"nuts/DED2D" -"nuts/DED2E" -"nuts/DED2F" -"nuts/DED4" -"nuts/DED41" -"nuts/DED42" -"nuts/DED43" -"nuts/DED44" -"nuts/DED45" -"nuts/DED5" -"nuts/DED51" -"nuts/DED52" -"nuts/DED53" -"nuts/DEE" -"nuts/DEE0" -"nuts/DEE01" -"nuts/DEE02" -"nuts/DEE03" -"nuts/DEE04" -"nuts/DEE05" -"nuts/DEE06" -"nuts/DEE07" -"nuts/DEE08" -"nuts/DEE09" -"nuts/DEE0A" -"nuts/DEE0B" -"nuts/DEE0C" -"nuts/DEE0D" -"nuts/DEE0E" -"nuts/DEF" -"nuts/DEF0" -"nuts/DEF01" -"nuts/DEF02" -"nuts/DEF03" -"nuts/DEF04" -"nuts/DEF05" -"nuts/DEF06" -"nuts/DEF07" -"nuts/DEF08" -"nuts/DEF09" -"nuts/DEF0A" -"nuts/DEF0B" -"nuts/DEF0C" -"nuts/DEF0D" -"nuts/DEF0E" -"nuts/DEF0F" -"nuts/DEG" -"nuts/DEG0" -"nuts/DEG01" -"nuts/DEG02" -"nuts/DEG03" -"nuts/DEG04" -"nuts/DEG05" -"nuts/DEG06" -"nuts/DEG07" -"nuts/DEG09" -"nuts/DEG0A" -"nuts/DEG0B" -"nuts/DEG0C" -"nuts/DEG0D" -"nuts/DEG0E" -"nuts/DEG0F" -"nuts/DEG0G" -"nuts/DEG0H" -"nuts/DEG0I" -"nuts/DEG0J" -"nuts/DEG0K" -"nuts/DEG0L" -"nuts/DEG0M" -"nuts/DEG0N" -"nuts/DEG0P" -"nuts/DK0" -"nuts/DK01" -"nuts/DK011" -"nuts/DK012" -"nuts/DK013" -"nuts/DK014" -"nuts/DK02" -"nuts/DK021" -"nuts/DK022" -"nuts/DK03" -"nuts/DK031" -"nuts/DK032" -"nuts/DK04" -"nuts/DK041" -"nuts/DK042" -"nuts/DK05" -"nuts/DK050" -"nuts/EE0" -"nuts/EE00" -"nuts/EE001" -"nuts/EE004" -"nuts/EE006" -"nuts/EE007" -"nuts/EE008" -"nuts/EE009" -"nuts/EE00A" -"nuts/EL3" -"nuts/EL30" -"nuts/EL301" -"nuts/EL302" -"nuts/EL303" -"nuts/EL304" -"nuts/EL305" -"nuts/EL306" -"nuts/EL307" -"nuts/EL4" -"nuts/EL41" -"nuts/EL411" -"nuts/EL412" -"nuts/EL413" -"nuts/EL42" -"nuts/EL421" -"nuts/EL422" -"nuts/EL43" -"nuts/EL431" -"nuts/EL432" -"nuts/EL433" -"nuts/EL434" -"nuts/EL5" -"nuts/EL51" -"nuts/EL511" -"nuts/EL512" -"nuts/EL513" -"nuts/EL514" -"nuts/EL515" -"nuts/EL52" -"nuts/EL521" -"nuts/EL522" -"nuts/EL523" -"nuts/EL524" -"nuts/EL525" -"nuts/EL526" -"nuts/EL527" -"nuts/EL53" -"nuts/EL531" -"nuts/EL532" -"nuts/EL533" -"nuts/EL54" -"nuts/EL541" -"nuts/EL542" -"nuts/EL543" -"nuts/EL6" -"nuts/EL61" -"nuts/EL611" -"nuts/EL612" -"nuts/EL613" -"nuts/EL62" -"nuts/EL621" -"nuts/EL622" -"nuts/EL623" -"nuts/EL624" -"nuts/EL63" -"nuts/EL631" -"nuts/EL632" -"nuts/EL633" -"nuts/EL64" -"nuts/EL641" -"nuts/EL642" -"nuts/EL643" -"nuts/EL644" -"nuts/EL645" -"nuts/EL65" -"nuts/EL651" -"nuts/EL652" -"nuts/EL653" -"nuts/ES1" -"nuts/ES11" -"nuts/ES111" -"nuts/ES112" -"nuts/ES113" -"nuts/ES114" -"nuts/ES12" -"nuts/ES120" -"nuts/ES13" -"nuts/ES130" -"nuts/ES2" -"nuts/ES21" -"nuts/ES211" -"nuts/ES212" -"nuts/ES213" -"nuts/ES22" -"nuts/ES220" -"nuts/ES23" -"nuts/ES230" -"nuts/ES24" -"nuts/ES241" -"nuts/ES242" -"nuts/ES243" -"nuts/ES3" -"nuts/ES30" -"nuts/ES300" -"nuts/ES4" -"nuts/ES41" -"nuts/ES411" -"nuts/ES412" -"nuts/ES413" -"nuts/ES414" -"nuts/ES415" -"nuts/ES416" -"nuts/ES417" -"nuts/ES418" -"nuts/ES419" -"nuts/ES42" -"nuts/ES421" -"nuts/ES422" -"nuts/ES423" -"nuts/ES424" -"nuts/ES425" -"nuts/ES43" -"nuts/ES431" -"nuts/ES432" -"nuts/ES5" -"nuts/ES51" -"nuts/ES511" -"nuts/ES512" -"nuts/ES513" -"nuts/ES514" -"nuts/ES52" -"nuts/ES521" -"nuts/ES522" -"nuts/ES523" -"nuts/ES53" -"nuts/ES531" -"nuts/ES532" -"nuts/ES533" -"nuts/ES6" -"nuts/ES61" -"nuts/ES611" -"nuts/ES612" -"nuts/ES613" -"nuts/ES614" -"nuts/ES615" -"nuts/ES616" -"nuts/ES617" -"nuts/ES618" -"nuts/ES62" -"nuts/ES620" -"nuts/ES63" -"nuts/ES630" -"nuts/ES64" -"nuts/ES640" -"nuts/ES7" -"nuts/ES70" -"nuts/ES704" -"nuts/ES705" -"nuts/ES706" -"nuts/ES707" -"nuts/ES708" -"nuts/ES709" -"nuts/FI1" -"nuts/FI19" -"nuts/FI193" -"nuts/FI194" -"nuts/FI195" -"nuts/FI196" -"nuts/FI197" -"nuts/FI1B" -"nuts/FI1B1" -"nuts/FI1C" -"nuts/FI1C1" -"nuts/FI1C2" -"nuts/FI1C3" -"nuts/FI1C4" -"nuts/FI1C5" -"nuts/FI1D" -"nuts/FI1D1" -"nuts/FI1D2" -"nuts/FI1D3" -"nuts/FI1D5" -"nuts/FI1D7" -"nuts/FI1D8" -"nuts/FI1D9" -"nuts/FI2" -"nuts/FI20" -"nuts/FI200" -"nuts/FR1" -"nuts/FR10" -"nuts/FR101" -"nuts/FR102" -"nuts/FR103" -"nuts/FR104" -"nuts/FR105" -"nuts/FR106" -"nuts/FR107" -"nuts/FR108" -"nuts/FRB" -"nuts/FRB0" -"nuts/FRB01" -"nuts/FRB02" -"nuts/FRB03" -"nuts/FRB04" -"nuts/FRB05" -"nuts/FRB06" -"nuts/FRC" -"nuts/FRC1" -"nuts/FRC11" -"nuts/FRC12" -"nuts/FRC13" -"nuts/FRC14" -"nuts/FRC2" -"nuts/FRC21" -"nuts/FRC22" -"nuts/FRC23" -"nuts/FRC24" -"nuts/FRD" -"nuts/FRD1" -"nuts/FRD11" -"nuts/FRD12" -"nuts/FRD13" -"nuts/FRD2" -"nuts/FRD21" -"nuts/FRD22" -"nuts/FRE" -"nuts/FRE1" -"nuts/FRE11" -"nuts/FRE12" -"nuts/FRE2" -"nuts/FRE21" -"nuts/FRE22" -"nuts/FRE23" -"nuts/FRF" -"nuts/FRF1" -"nuts/FRF11" -"nuts/FRF12" -"nuts/FRF2" -"nuts/FRF21" -"nuts/FRF22" -"nuts/FRF23" -"nuts/FRF24" -"nuts/FRF3" -"nuts/FRF31" -"nuts/FRF32" -"nuts/FRF33" -"nuts/FRF34" -"nuts/FRG" -"nuts/FRG0" -"nuts/FRG01" -"nuts/FRG02" -"nuts/FRG03" -"nuts/FRG04" -"nuts/FRG05" -"nuts/FRH" -"nuts/FRH0" -"nuts/FRH01" -"nuts/FRH02" -"nuts/FRH03" -"nuts/FRH04" -"nuts/FRI" -"nuts/FRI1" -"nuts/FRI11" -"nuts/FRI12" -"nuts/FRI13" -"nuts/FRI14" -"nuts/FRI15" -"nuts/FRI2" -"nuts/FRI21" -"nuts/FRI22" -"nuts/FRI23" -"nuts/FRI3" -"nuts/FRI31" -"nuts/FRI32" -"nuts/FRI33" -"nuts/FRI34" -"nuts/FRJ" -"nuts/FRJ1" -"nuts/FRJ11" -"nuts/FRJ12" -"nuts/FRJ13" -"nuts/FRJ14" -"nuts/FRJ15" -"nuts/FRJ2" -"nuts/FRJ21" -"nuts/FRJ22" -"nuts/FRJ23" -"nuts/FRJ24" -"nuts/FRJ25" -"nuts/FRJ26" -"nuts/FRJ27" -"nuts/FRJ28" -"nuts/FRK" -"nuts/FRK1" -"nuts/FRK11" -"nuts/FRK12" -"nuts/FRK13" -"nuts/FRK14" -"nuts/FRK2" -"nuts/FRK21" -"nuts/FRK22" -"nuts/FRK23" -"nuts/FRK24" -"nuts/FRK25" -"nuts/FRK26" -"nuts/FRK27" -"nuts/FRK28" -"nuts/FRL" -"nuts/FRL0" -"nuts/FRL01" -"nuts/FRL02" -"nuts/FRL03" -"nuts/FRL04" -"nuts/FRL05" -"nuts/FRL06" -"nuts/FRM" -"nuts/FRM0" -"nuts/FRM01" -"nuts/FRM02" -"nuts/FRY" -"nuts/FRY1" -"nuts/FRY10" -"nuts/FRY2" -"nuts/FRY20" -"nuts/FRY3" -"nuts/FRY30" -"nuts/FRY4" -"nuts/FRY40" -"nuts/FRY5" -"nuts/FRY50" -"nuts/HR0" -"nuts/HR02" -"nuts/HR021" -"nuts/HR022" -"nuts/HR023" -"nuts/HR024" -"nuts/HR025" -"nuts/HR026" -"nuts/HR027" -"nuts/HR028" -"nuts/HR03" -"nuts/HR031" -"nuts/HR032" -"nuts/HR033" -"nuts/HR034" -"nuts/HR035" -"nuts/HR036" -"nuts/HR037" -"nuts/HR04" -"nuts/HR041" -"nuts/HR042" -"nuts/HR043" -"nuts/HR044" -"nuts/HR045" -"nuts/HR046" -"nuts/HR047" -"nuts/HR048" -"nuts/HR049" -"nuts/HR04A" -"nuts/HR04B" -"nuts/HR04C" -"nuts/HR04D" -"nuts/HR04E" -"nuts/HR05" -"nuts/HR050" -"nuts/HR06" -"nuts/HR061" -"nuts/HR062" -"nuts/HR063" -"nuts/HR064" -"nuts/HR065" -"nuts/HU1" -"nuts/HU11" -"nuts/HU110" -"nuts/HU12" -"nuts/HU120" -"nuts/HU2" -"nuts/HU21" -"nuts/HU211" -"nuts/HU212" -"nuts/HU213" -"nuts/HU22" -"nuts/HU221" -"nuts/HU222" -"nuts/HU223" -"nuts/HU23" -"nuts/HU231" -"nuts/HU232" -"nuts/HU233" -"nuts/HU3" -"nuts/HU31" -"nuts/HU311" -"nuts/HU312" -"nuts/HU313" -"nuts/HU32" -"nuts/HU321" -"nuts/HU322" -"nuts/HU323" -"nuts/HU33" -"nuts/HU331" -"nuts/HU332" -"nuts/HU333" -"nuts/IE0" -"nuts/IE04" -"nuts/IE041" -"nuts/IE042" -"nuts/IE05" -"nuts/IE051" -"nuts/IE052" -"nuts/IE053" -"nuts/IE06" -"nuts/IE061" -"nuts/IE062" -"nuts/IE063" -"nuts/IS0" -"nuts/IS00" -"nuts/IS001" -"nuts/IS002" -"nuts/ITC" -"nuts/ITC1" -"nuts/ITC11" -"nuts/ITC12" -"nuts/ITC13" -"nuts/ITC14" -"nuts/ITC15" -"nuts/ITC16" -"nuts/ITC17" -"nuts/ITC18" -"nuts/ITC2" -"nuts/ITC20" -"nuts/ITC3" -"nuts/ITC31" -"nuts/ITC32" -"nuts/ITC33" -"nuts/ITC34" -"nuts/ITC4" -"nuts/ITC41" -"nuts/ITC42" -"nuts/ITC43" -"nuts/ITC44" -"nuts/ITC46" -"nuts/ITC47" -"nuts/ITC48" -"nuts/ITC49" -"nuts/ITC4A" -"nuts/ITC4B" -"nuts/ITC4C" -"nuts/ITC4D" -"nuts/ITF" -"nuts/ITF1" -"nuts/ITF11" -"nuts/ITF12" -"nuts/ITF13" -"nuts/ITF14" -"nuts/ITF2" -"nuts/ITF21" -"nuts/ITF22" -"nuts/ITF3" -"nuts/ITF31" -"nuts/ITF32" -"nuts/ITF33" -"nuts/ITF34" -"nuts/ITF35" -"nuts/ITF4" -"nuts/ITF43" -"nuts/ITF44" -"nuts/ITF45" -"nuts/ITF46" -"nuts/ITF47" -"nuts/ITF48" -"nuts/ITF5" -"nuts/ITF51" -"nuts/ITF52" -"nuts/ITF6" -"nuts/ITF61" -"nuts/ITF62" -"nuts/ITF63" -"nuts/ITF64" -"nuts/ITF65" -"nuts/ITG" -"nuts/ITG1" -"nuts/ITG11" -"nuts/ITG12" -"nuts/ITG13" -"nuts/ITG14" -"nuts/ITG15" -"nuts/ITG16" -"nuts/ITG17" -"nuts/ITG18" -"nuts/ITG19" -"nuts/ITG2" -"nuts/ITG25" -"nuts/ITG26" -"nuts/ITG27" -"nuts/ITG28" -"nuts/ITG29" -"nuts/ITG2A" -"nuts/ITG2B" -"nuts/ITG2C" -"nuts/ITG2D" -"nuts/ITG2E" -"nuts/ITG2F" -"nuts/ITG2G" -"nuts/ITG2H" -"nuts/ITH" -"nuts/ITH1" -"nuts/ITH10" -"nuts/ITH2" -"nuts/ITH20" -"nuts/ITH3" -"nuts/ITH31" -"nuts/ITH32" -"nuts/ITH33" -"nuts/ITH34" -"nuts/ITH35" -"nuts/ITH36" -"nuts/ITH37" -"nuts/ITH4" -"nuts/ITH41" -"nuts/ITH42" -"nuts/ITH43" -"nuts/ITH44" -"nuts/ITH5" -"nuts/ITH51" -"nuts/ITH52" -"nuts/ITH53" -"nuts/ITH54" -"nuts/ITH55" -"nuts/ITH56" -"nuts/ITH57" -"nuts/ITH58" -"nuts/ITH59" -"nuts/ITI" -"nuts/ITI1" -"nuts/ITI11" -"nuts/ITI12" -"nuts/ITI13" -"nuts/ITI14" -"nuts/ITI15" -"nuts/ITI16" -"nuts/ITI17" -"nuts/ITI18" -"nuts/ITI19" -"nuts/ITI1A" -"nuts/ITI2" -"nuts/ITI21" -"nuts/ITI22" -"nuts/ITI3" -"nuts/ITI31" -"nuts/ITI32" -"nuts/ITI33" -"nuts/ITI34" -"nuts/ITI35" -"nuts/ITI4" -"nuts/ITI41" -"nuts/ITI42" -"nuts/ITI43" -"nuts/ITI44" -"nuts/ITI45" -"nuts/LI0" -"nuts/LI00" -"nuts/LI000" -"nuts/LT0" -"nuts/LT01" -"nuts/LT011" -"nuts/LT02" -"nuts/LT021" -"nuts/LT022" -"nuts/LT023" -"nuts/LT024" -"nuts/LT025" -"nuts/LT026" -"nuts/LT027" -"nuts/LT028" -"nuts/LT029" -"nuts/LU0" -"nuts/LU00" -"nuts/LU000" -"nuts/LV0" -"nuts/LV00" -"nuts/LV003" -"nuts/LV005" -"nuts/LV006" -"nuts/LV007" -"nuts/LV008" -"nuts/LV009" -"nuts/ME0" -"nuts/ME00" -"nuts/ME000" -"nuts/MK0" -"nuts/MK00" -"nuts/MK001" -"nuts/MK002" -"nuts/MK003" -"nuts/MK004" -"nuts/MK005" -"nuts/MK006" -"nuts/MK007" -"nuts/MK008" -"nuts/MT0" -"nuts/MT00" -"nuts/MT001" -"nuts/MT002" -"nuts/NL1" -"nuts/NL11" -"nuts/NL111" -"nuts/NL112" -"nuts/NL113" -"nuts/NL12" -"nuts/NL124" -"nuts/NL125" -"nuts/NL126" -"nuts/NL13" -"nuts/NL131" -"nuts/NL132" -"nuts/NL133" -"nuts/NL2" -"nuts/NL21" -"nuts/NL211" -"nuts/NL212" -"nuts/NL213" -"nuts/NL22" -"nuts/NL221" -"nuts/NL224" -"nuts/NL225" -"nuts/NL226" -"nuts/NL23" -"nuts/NL230" -"nuts/NL3" -"nuts/NL31" -"nuts/NL310" -"nuts/NL32" -"nuts/NL321" -"nuts/NL323" -"nuts/NL324" -"nuts/NL325" -"nuts/NL327" -"nuts/NL328" -"nuts/NL329" -"nuts/NL33" -"nuts/NL332" -"nuts/NL333" -"nuts/NL337" -"nuts/NL33A" -"nuts/NL33B" -"nuts/NL33C" -"nuts/NL34" -"nuts/NL341" -"nuts/NL342" -"nuts/NL4" -"nuts/NL41" -"nuts/NL411" -"nuts/NL412" -"nuts/NL413" -"nuts/NL414" -"nuts/NL42" -"nuts/NL421" -"nuts/NL422" -"nuts/NL423" -"nuts/NO0" -"nuts/NO01" -"nuts/NO011" -"nuts/NO012" -"nuts/NO02" -"nuts/NO020" -"nuts/NO021" -"nuts/NO022" -"nuts/NO03" -"nuts/NO031" -"nuts/NO032" -"nuts/NO033" -"nuts/NO034" -"nuts/NO04" -"nuts/NO041" -"nuts/NO042" -"nuts/NO043" -"nuts/NO05" -"nuts/NO051" -"nuts/NO052" -"nuts/NO053" -"nuts/NO06" -"nuts/NO060" -"nuts/NO061" -"nuts/NO062" -"nuts/NO07" -"nuts/NO071" -"nuts/NO072" -"nuts/NO073" -"nuts/NO074" -"nuts/NO08" -"nuts/NO081" -"nuts/NO082" -"nuts/NO09" -"nuts/NO091" -"nuts/NO092" -"nuts/NO0A" -"nuts/NO0A1" -"nuts/NO0A2" -"nuts/NO0A3" -"nuts/PL2" -"nuts/PL21" -"nuts/PL213" -"nuts/PL214" -"nuts/PL217" -"nuts/PL218" -"nuts/PL219" -"nuts/PL21A" -"nuts/PL22" -"nuts/PL224" -"nuts/PL225" -"nuts/PL227" -"nuts/PL228" -"nuts/PL229" -"nuts/PL22A" -"nuts/PL22B" -"nuts/PL22C" -"nuts/PL4" -"nuts/PL41" -"nuts/PL411" -"nuts/PL414" -"nuts/PL415" -"nuts/PL416" -"nuts/PL417" -"nuts/PL418" -"nuts/PL42" -"nuts/PL424" -"nuts/PL426" -"nuts/PL427" -"nuts/PL428" -"nuts/PL43" -"nuts/PL431" -"nuts/PL432" -"nuts/PL5" -"nuts/PL51" -"nuts/PL514" -"nuts/PL515" -"nuts/PL516" -"nuts/PL517" -"nuts/PL518" -"nuts/PL52" -"nuts/PL523" -"nuts/PL524" -"nuts/PL6" -"nuts/PL61" -"nuts/PL613" -"nuts/PL616" -"nuts/PL617" -"nuts/PL618" -"nuts/PL619" -"nuts/PL62" -"nuts/PL621" -"nuts/PL622" -"nuts/PL623" -"nuts/PL63" -"nuts/PL633" -"nuts/PL634" -"nuts/PL636" -"nuts/PL637" -"nuts/PL638" -"nuts/PL7" -"nuts/PL71" -"nuts/PL711" -"nuts/PL712" -"nuts/PL713" -"nuts/PL714" -"nuts/PL715" -"nuts/PL72" -"nuts/PL721" -"nuts/PL722" -"nuts/PL8" -"nuts/PL81" -"nuts/PL811" -"nuts/PL812" -"nuts/PL814" -"nuts/PL815" -"nuts/PL82" -"nuts/PL821" -"nuts/PL822" -"nuts/PL823" -"nuts/PL824" -"nuts/PL84" -"nuts/PL841" -"nuts/PL842" -"nuts/PL843" -"nuts/PL9" -"nuts/PL91" -"nuts/PL911" -"nuts/PL912" -"nuts/PL913" -"nuts/PL92" -"nuts/PL921" -"nuts/PL922" -"nuts/PL923" -"nuts/PL924" -"nuts/PL925" -"nuts/PL926" -"nuts/PT1" -"nuts/PT11" -"nuts/PT111" -"nuts/PT112" -"nuts/PT119" -"nuts/PT11A" -"nuts/PT11B" -"nuts/PT11C" -"nuts/PT11D" -"nuts/PT11E" -"nuts/PT15" -"nuts/PT150" -"nuts/PT16" -"nuts/PT16B" -"nuts/PT16D" -"nuts/PT16E" -"nuts/PT16F" -"nuts/PT16G" -"nuts/PT16H" -"nuts/PT16I" -"nuts/PT16J" -"nuts/PT17" -"nuts/PT170" -"nuts/PT18" -"nuts/PT181" -"nuts/PT184" -"nuts/PT185" -"nuts/PT186" -"nuts/PT187" -"nuts/PT2" -"nuts/PT20" -"nuts/PT200" -"nuts/PT3" -"nuts/PT30" -"nuts/PT300" -"nuts/RO1" -"nuts/RO11" -"nuts/RO111" -"nuts/RO112" -"nuts/RO113" -"nuts/RO114" -"nuts/RO115" -"nuts/RO116" -"nuts/RO12" -"nuts/RO121" -"nuts/RO122" -"nuts/RO123" -"nuts/RO124" -"nuts/RO125" -"nuts/RO126" -"nuts/RO2" -"nuts/RO21" -"nuts/RO211" -"nuts/RO212" -"nuts/RO213" -"nuts/RO214" -"nuts/RO215" -"nuts/RO216" -"nuts/RO22" -"nuts/RO221" -"nuts/RO222" -"nuts/RO223" -"nuts/RO224" -"nuts/RO225" -"nuts/RO226" -"nuts/RO3" -"nuts/RO31" -"nuts/RO311" -"nuts/RO312" -"nuts/RO313" -"nuts/RO314" -"nuts/RO315" -"nuts/RO316" -"nuts/RO317" -"nuts/RO32" -"nuts/RO321" -"nuts/RO322" -"nuts/RO4" -"nuts/RO41" -"nuts/RO411" -"nuts/RO412" -"nuts/RO413" -"nuts/RO414" -"nuts/RO415" -"nuts/RO42" -"nuts/RO421" -"nuts/RO422" -"nuts/RO423" -"nuts/RO424" -"nuts/RS1" -"nuts/RS11" -"nuts/RS110" -"nuts/RS12" -"nuts/RS121" -"nuts/RS122" -"nuts/RS123" -"nuts/RS124" -"nuts/RS125" -"nuts/RS126" -"nuts/RS127" -"nuts/RS2" -"nuts/RS21" -"nuts/RS211" -"nuts/RS212" -"nuts/RS213" -"nuts/RS214" -"nuts/RS215" -"nuts/RS216" -"nuts/RS217" -"nuts/RS218" -"nuts/RS22" -"nuts/RS221" -"nuts/RS222" -"nuts/RS223" -"nuts/RS224" -"nuts/RS225" -"nuts/RS226" -"nuts/RS227" -"nuts/RS228" -"nuts/RS229" -"nuts/SE1" -"nuts/SE11" -"nuts/SE110" -"nuts/SE12" -"nuts/SE121" -"nuts/SE122" -"nuts/SE123" -"nuts/SE124" -"nuts/SE125" -"nuts/SE2" -"nuts/SE21" -"nuts/SE211" -"nuts/SE212" -"nuts/SE213" -"nuts/SE214" -"nuts/SE22" -"nuts/SE221" -"nuts/SE224" -"nuts/SE23" -"nuts/SE231" -"nuts/SE232" -"nuts/SE3" -"nuts/SE31" -"nuts/SE311" -"nuts/SE312" -"nuts/SE313" -"nuts/SE32" -"nuts/SE321" -"nuts/SE322" -"nuts/SE33" -"nuts/SE331" -"nuts/SE332" -"nuts/SI0" -"nuts/SI03" -"nuts/SI031" -"nuts/SI032" -"nuts/SI033" -"nuts/SI034" -"nuts/SI035" -"nuts/SI036" -"nuts/SI037" -"nuts/SI038" -"nuts/SI04" -"nuts/SI041" -"nuts/SI042" -"nuts/SI043" -"nuts/SI044" -"nuts/SK0" -"nuts/SK01" -"nuts/SK010" -"nuts/SK02" -"nuts/SK021" -"nuts/SK022" -"nuts/SK023" -"nuts/SK03" -"nuts/SK031" -"nuts/SK032" -"nuts/SK04" -"nuts/SK041" -"nuts/SK042" -"nuts/TR1" -"nuts/TR10" -"nuts/TR100" -"nuts/TR2" -"nuts/TR21" -"nuts/TR211" -"nuts/TR212" -"nuts/TR213" -"nuts/TR22" -"nuts/TR221" -"nuts/TR222" -"nuts/TR3" -"nuts/TR31" -"nuts/TR310" -"nuts/TR32" -"nuts/TR321" -"nuts/TR322" -"nuts/TR323" -"nuts/TR33" -"nuts/TR331" -"nuts/TR332" -"nuts/TR333" -"nuts/TR334" -"nuts/TR4" -"nuts/TR41" -"nuts/TR411" -"nuts/TR412" -"nuts/TR413" -"nuts/TR42" -"nuts/TR421" -"nuts/TR422" -"nuts/TR423" -"nuts/TR424" -"nuts/TR425" -"nuts/TR5" -"nuts/TR51" -"nuts/TR510" -"nuts/TR52" -"nuts/TR521" -"nuts/TR522" -"nuts/TR6" -"nuts/TR61" -"nuts/TR611" -"nuts/TR612" -"nuts/TR613" -"nuts/TR62" -"nuts/TR621" -"nuts/TR622" -"nuts/TR63" -"nuts/TR631" -"nuts/TR632" -"nuts/TR633" -"nuts/TR7" -"nuts/TR71" -"nuts/TR711" -"nuts/TR712" -"nuts/TR713" -"nuts/TR714" -"nuts/TR715" -"nuts/TR72" -"nuts/TR721" -"nuts/TR722" -"nuts/TR723" -"nuts/TR8" -"nuts/TR81" -"nuts/TR811" -"nuts/TR812" -"nuts/TR813" -"nuts/TR82" -"nuts/TR821" -"nuts/TR822" -"nuts/TR823" -"nuts/TR83" -"nuts/TR831" -"nuts/TR832" -"nuts/TR833" -"nuts/TR834" -"nuts/TR9" -"nuts/TR90" -"nuts/TR901" -"nuts/TR902" -"nuts/TR903" -"nuts/TR904" -"nuts/TR905" -"nuts/TR906" -"nuts/TRA" -"nuts/TRA1" -"nuts/TRA11" -"nuts/TRA12" -"nuts/TRA13" -"nuts/TRA2" -"nuts/TRA21" -"nuts/TRA22" -"nuts/TRA23" -"nuts/TRA24" -"nuts/TRB" -"nuts/TRB1" -"nuts/TRB11" -"nuts/TRB12" -"nuts/TRB13" -"nuts/TRB14" -"nuts/TRB2" -"nuts/TRB21" -"nuts/TRB22" -"nuts/TRB23" -"nuts/TRB24" -"nuts/TRC" -"nuts/TRC1" -"nuts/TRC11" -"nuts/TRC12" -"nuts/TRC13" -"nuts/TRC2" -"nuts/TRC21" -"nuts/TRC22" -"nuts/TRC3" -"nuts/TRC31" -"nuts/TRC32" -"nuts/TRC33" -"nuts/TRC34" -"nuts/UKC" -"nuts/UKC1" -"nuts/UKC11" -"nuts/UKC12" -"nuts/UKC13" -"nuts/UKC14" -"nuts/UKC2" -"nuts/UKC21" -"nuts/UKC22" -"nuts/UKC23" -"nuts/UKD" -"nuts/UKD1" -"nuts/UKD11" -"nuts/UKD12" -"nuts/UKD3" -"nuts/UKD33" -"nuts/UKD34" -"nuts/UKD35" -"nuts/UKD36" -"nuts/UKD37" -"nuts/UKD4" -"nuts/UKD41" -"nuts/UKD42" -"nuts/UKD44" -"nuts/UKD45" -"nuts/UKD46" -"nuts/UKD47" -"nuts/UKD6" -"nuts/UKD61" -"nuts/UKD62" -"nuts/UKD63" -"nuts/UKD7" -"nuts/UKD71" -"nuts/UKD72" -"nuts/UKD73" -"nuts/UKD74" -"nuts/UKE" -"nuts/UKE1" -"nuts/UKE11" -"nuts/UKE12" -"nuts/UKE13" -"nuts/UKE2" -"nuts/UKE21" -"nuts/UKE22" -"nuts/UKE3" -"nuts/UKE31" -"nuts/UKE32" -"nuts/UKE4" -"nuts/UKE41" -"nuts/UKE42" -"nuts/UKE44" -"nuts/UKE45" -"nuts/UKF" -"nuts/UKF1" -"nuts/UKF11" -"nuts/UKF12" -"nuts/UKF13" -"nuts/UKF14" -"nuts/UKF15" -"nuts/UKF16" -"nuts/UKF2" -"nuts/UKF21" -"nuts/UKF22" -"nuts/UKF24" -"nuts/UKF25" -"nuts/UKF3" -"nuts/UKF30" -"nuts/UKG" -"nuts/UKG1" -"nuts/UKG11" -"nuts/UKG12" -"nuts/UKG13" -"nuts/UKG2" -"nuts/UKG21" -"nuts/UKG22" -"nuts/UKG23" -"nuts/UKG24" -"nuts/UKG3" -"nuts/UKG31" -"nuts/UKG32" -"nuts/UKG33" -"nuts/UKG36" -"nuts/UKG37" -"nuts/UKG38" -"nuts/UKG39" -"nuts/UKH" -"nuts/UKH1" -"nuts/UKH11" -"nuts/UKH12" -"nuts/UKH14" -"nuts/UKH15" -"nuts/UKH16" -"nuts/UKH17" -"nuts/UKH2" -"nuts/UKH21" -"nuts/UKH23" -"nuts/UKH24" -"nuts/UKH25" -"nuts/UKH3" -"nuts/UKH31" -"nuts/UKH32" -"nuts/UKH34" -"nuts/UKH35" -"nuts/UKH36" -"nuts/UKH37" -"nuts/UKI" -"nuts/UKI3" -"nuts/UKI31" -"nuts/UKI32" -"nuts/UKI33" -"nuts/UKI34" -"nuts/UKI4" -"nuts/UKI41" -"nuts/UKI42" -"nuts/UKI43" -"nuts/UKI44" -"nuts/UKI45" -"nuts/UKI5" -"nuts/UKI51" -"nuts/UKI52" -"nuts/UKI53" -"nuts/UKI54" -"nuts/UKI6" -"nuts/UKI61" -"nuts/UKI62" -"nuts/UKI63" -"nuts/UKI7" -"nuts/UKI71" -"nuts/UKI72" -"nuts/UKI73" -"nuts/UKI74" -"nuts/UKI75" -"nuts/UKJ" -"nuts/UKJ1" -"nuts/UKJ11" -"nuts/UKJ12" -"nuts/UKJ13" -"nuts/UKJ14" -"nuts/UKJ2" -"nuts/UKJ21" -"nuts/UKJ22" -"nuts/UKJ25" -"nuts/UKJ26" -"nuts/UKJ27" -"nuts/UKJ28" -"nuts/UKJ3" -"nuts/UKJ31" -"nuts/UKJ32" -"nuts/UKJ34" -"nuts/UKJ35" -"nuts/UKJ36" -"nuts/UKJ37" -"nuts/UKJ4" -"nuts/UKJ41" -"nuts/UKJ43" -"nuts/UKJ44" -"nuts/UKJ45" -"nuts/UKJ46" -"nuts/UKK" -"nuts/UKK1" -"nuts/UKK11" -"nuts/UKK12" -"nuts/UKK13" -"nuts/UKK14" -"nuts/UKK15" -"nuts/UKK2" -"nuts/UKK21" -"nuts/UKK22" -"nuts/UKK23" -"nuts/UKK3" -"nuts/UKK30" -"nuts/UKK4" -"nuts/UKK41" -"nuts/UKK42" -"nuts/UKK43" -"nuts/UKL" -"nuts/UKL1" -"nuts/UKL11" -"nuts/UKL12" -"nuts/UKL13" -"nuts/UKL14" -"nuts/UKL15" -"nuts/UKL16" -"nuts/UKL17" -"nuts/UKL18" -"nuts/UKL2" -"nuts/UKL21" -"nuts/UKL22" -"nuts/UKL23" -"nuts/UKL24" -"nuts/UKM" -"nuts/UKM5" -"nuts/UKM50" -"nuts/UKM6" -"nuts/UKM61" -"nuts/UKM62" -"nuts/UKM63" -"nuts/UKM64" -"nuts/UKM65" -"nuts/UKM66" -"nuts/UKM7" -"nuts/UKM71" -"nuts/UKM72" -"nuts/UKM73" -"nuts/UKM75" -"nuts/UKM76" -"nuts/UKM77" -"nuts/UKM78" -"nuts/UKM8" -"nuts/UKM81" -"nuts/UKM82" -"nuts/UKM83" -"nuts/UKM84" -"nuts/UKM9" -"nuts/UKM91" -"nuts/UKM92" -"nuts/UKM93" -"nuts/UKM94" -"nuts/UKM95" -"nuts/UKN" -"nuts/UKN0" -"nuts/UKN06" -"nuts/UKN07" -"nuts/UKN08" -"nuts/UKN09" -"nuts/UKN10" -"nuts/UKN11" -"nuts/UKN12" -"nuts/UKN13" -"nuts/UKN14" -"nuts/UKN15" -"nuts/UKN16" From 92012ced3e1744995b8cf17a1ad1d1981820bbcc Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Wed, 10 Jun 2026 12:48:59 +0000 Subject: [PATCH 14/18] testing --- .../fertility_rate_mother_age/validation_config.json | 8 -------- tools/import_validation/runner.py | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/validation_config.json b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/validation_config.json index 23af776817..a4d71bf128 100644 --- a/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/validation_config.json +++ b/scripts/eurostat/regional_statistics_by_nuts/fertility_rate_mother_age/validation_config.json @@ -9,14 +9,6 @@ "threshold": 0.1 } }, - { - "rule_id": "check_goldens_output_csv", - "validator": "GOLDENS_CHECK", - "params": { - "golden_files": "golden_data/golden_observations.csv", - "input_files": "Eurostats_NUTS3_FRate_Age.csv" - } - }, { "rule_id": "check_goldens_summary_report", "validator": "GOLDENS_CHECK", diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index 37ce44a5a6..777336a165 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -74,7 +74,7 @@ def _find_base_dir(start_path: str, target_sub_path: str) -> str | None: if not start_path: return None curr = os.path.abspath(start_path) - for _ in range(10): # limit to 10 levels up + for _ in range(8): # limit to 10 levels up if os.path.exists(os.path.join(curr, target_sub_path)): return curr parent = os.path.dirname(curr) From b9ed4e9aef5496728a51c2c4aa4d8b73638c8c91 Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Sun, 14 Jun 2026 16:30:01 +0000 Subject: [PATCH 15/18] Revert changes to runner.py and validator_goldens.py --- tools/import_validation/runner.py | 96 -------------------- tools/import_validation/validator_goldens.py | 22 +---- 2 files changed, 4 insertions(+), 114 deletions(-) diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index 777336a165..f1364518e6 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -14,7 +14,6 @@ """Module for the ValidationRunner class.""" import os -import logging from absl import app from absl import flags from absl import logging @@ -35,55 +34,6 @@ _FLAGS = flags.FLAGS -def _is_relative_local(path_val: str) -> bool: - """Checks if a path is a relative, local file path. - - This function identifies path strings that represent local relative files - (e.g., 'golden_data/un_wpp.csv') as opposed to absolute paths. It filters - out non-strings, empty strings, and absolute local paths. - - Args: - path_val: The file path string to evaluate. - - Returns: - True if the path represents a relative, local file path; False otherwise. - """ - if not isinstance(path_val, str) or not path_val: - return False - return not os.path.isabs(path_val) - - -def _find_base_dir(start_path: str, target_sub_path: str) -> str | None: - """Helper to find a base directory containing a target sub-path by walking up. - - Starting from the absolute directory of `start_path`, this function recursively - checks if `target_sub_path` exists in the current folder. If not, it walks up the - parent directory tree up to 10 levels. This is crucial for resolving paths relative - to import-specific golden directories when tests/validation are run from - different working directories (such as the repository root in CI/CD). - - Args: - start_path: The file or directory path to start the upward search from. - target_sub_path: The name of the subdirectory or file (e.g., 'golden_data') - to search for within the parent tree. - - Returns: - The absolute path of the directory containing `target_sub_path` if found, - or None if the root was reached or the 10-level limit was exceeded. - """ - if not start_path: - return None - curr = os.path.abspath(start_path) - for _ in range(8): # limit to 10 levels up - if os.path.exists(os.path.join(curr, target_sub_path)): - return curr - parent = os.path.dirname(curr) - if parent == curr: - break - curr = parent - return None - - class ValidationRunner: """ Orchestrates the validation process based on the new schema. @@ -91,8 +41,6 @@ class ValidationRunner: def __init__(self, validation_config_path: str, differ_output: str, stats_summary: str, lint_report: str, validation_output: str): - self.validation_config_path = validation_config_path - self.stats_summary = stats_summary self.config = ValidationConfig(validation_config_path) self.validation_output = validation_output self.validator = Validator() @@ -264,50 +212,6 @@ def run_validations(self) -> tuple[bool, list[ValidationResult]]: if output_dir: rule_params.setdefault('output_path', output_dir) - # Resolve paths relative to the directory of the validation config. - if validator_name == 'GOLDENS_CHECK': - config_dir = None - # Walk up from validation_config_path, self.stats_summary, or CWD to find where 'golden_data' lives - for start in [ - self.validation_config_path, self.stats_summary, - os.getcwd() - ]: - config_dir = _find_base_dir(start, 'golden_data') - if config_dir: - break - - if not config_dir: - config_dir = os.path.dirname( - os.path.abspath(self.validation_config_path)) - - print( - f"DEBUG: Found GOLDENS_CHECK rule: '{rule.get('rule_id')}'" - ) - print( - f"DEBUG: Config directory resolved to: '{config_dir}'") - for path_key in list(rule_params.keys()): - # Check any key in rule_params that equals 'golden_files' or 'input_files' or ends with '_file' or '_files' - if path_key in ( - 'golden_files', - 'input_files') or path_key.endswith( - '_file') or path_key.endswith('_files'): - val = rule_params[path_key] - print( - f"DEBUG: Before resolve '{path_key}': '{val}'") - if isinstance(val, str): - if _is_relative_local(val): - rule_params[path_key] = os.path.join( - config_dir, val) - elif isinstance(val, list): - rule_params[path_key] = [ - os.path.join(config_dir, item) - if _is_relative_local(item) else item - for item in val - ] - print( - f"DEBUG: After resolve '{path_key}': '{rule_params[path_key]}'" - ) - if validator_name == 'SQL_VALIDATOR': result = validation_func(self.data_sources['stats'], self.data_sources['differ'], diff --git a/tools/import_validation/validator_goldens.py b/tools/import_validation/validator_goldens.py index 4f8d8b8b32..7b19b783fe 100644 --- a/tools/import_validation/validator_goldens.py +++ b/tools/import_validation/validator_goldens.py @@ -68,7 +68,6 @@ --generate_goldens=goldens_data/generated_goldens.csv """ -import csv import os import sys import tempfile @@ -312,6 +311,7 @@ def load_nodes_from_file(files: str) -> dict: logging.info(f'Loaded {len(nodes)} nodes from {input_files}') return nodes + def generate_goldens(input_files: str, property_sets: list, output_file: str = None, @@ -440,23 +440,9 @@ def generate_goldens(input_files: str, if golden_nodes and output_file: logging.info(f'Writing {len(golden_nodes)} goldens to {output_file}') if file_util.file_is_csv(output_file): - headers = [] - for node in golden_nodes.values(): - for prop in node.keys(): - if prop not in headers: - headers.append(prop) - with file_util.FileIO(output_file, mode='w') as csvfile: - writer = csv.DictWriter( - csvfile, - fieldnames=headers, - escapechar='\\', - extrasaction='ignore', - quotechar='"', - quoting=csv.QUOTE_NONNUMERIC, - ) - writer.writeheader() - for node in golden_nodes.values(): - writer.writerow(node) + file_util.file_write_csv_dict(golden_nodes, + output_file, + key_column_name=None) else: mcf_file_util.write_mcf_nodes([golden_nodes], output_file) From ee5ab93491f814704692a131e5b7b42e15cf3548 Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Mon, 15 Jun 2026 08:16:30 +0000 Subject: [PATCH 16/18] testing --- tools/import_validation/runner.py | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index f1364518e6..f1ceb756fa 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -41,6 +41,8 @@ class ValidationRunner: def __init__(self, validation_config_path: str, differ_output: str, stats_summary: str, lint_report: str, validation_output: str): + self.validation_config_path = validation_config_path + self.stats_summary = stats_summary self.config = ValidationConfig(validation_config_path) self.validation_output = validation_output self.validator = Validator() @@ -212,6 +214,47 @@ def run_validations(self) -> tuple[bool, list[ValidationResult]]: if output_dir: rule_params.setdefault('output_path', output_dir) + # Resolve paths relative to the directory of the validation config. + if validator_name == 'GOLDENS_CHECK': + config_dir = os.path.dirname( + os.path.abspath(self.validation_config_path)) + # In batch jobs, the config file may be nested deeply in the import directory. + # We walk up to find where the manifest.json or golden_data folder is situated. + curr = config_dir + while curr and curr != os.path.dirname(curr): + if os.path.exists(os.path.join(curr, 'manifest.json')) or os.path.exists(os.path.join(curr, 'golden_data')): + config_dir = curr + break + curr = os.path.dirname(curr) + + print( + f"DEBUG: Found GOLDENS_CHECK rule: '{rule.get('rule_id')}'" + ) + print( + f"DEBUG: Config directory resolved to: '{config_dir}'") + for path_key in list(rule_params.keys()): + # Check any key in rule_params that equals 'golden_files' or 'input_files' or ends with '_file' or '_files' + if path_key in ( + 'golden_files', + 'input_files') or path_key.endswith( + '_file') or path_key.endswith('_files'): + val = rule_params[path_key] + print( + f"DEBUG: Before resolve '{path_key}': '{val}'") + if isinstance(val, str): + if val and not os.path.isabs(val): + rule_params[path_key] = os.path.join( + config_dir, val) + elif isinstance(val, list): + rule_params[path_key] = [ + os.path.join(config_dir, item) + if isinstance(item, str) and item and not os.path.isabs(item) else item + for item in val + ] + print( + f"DEBUG: After resolve '{path_key}': '{rule_params[path_key]}'" + ) + if validator_name == 'SQL_VALIDATOR': result = validation_func(self.data_sources['stats'], self.data_sources['differ'], From 559c8b67a2a8ef5b72a30230bfd1dfcd779b565c Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Mon, 15 Jun 2026 09:40:20 +0000 Subject: [PATCH 17/18] testing --- tools/import_validation/runner.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index f1ceb756fa..a852ff812d 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -218,11 +218,10 @@ def run_validations(self) -> tuple[bool, list[ValidationResult]]: if validator_name == 'GOLDENS_CHECK': config_dir = os.path.dirname( os.path.abspath(self.validation_config_path)) - # In batch jobs, the config file may be nested deeply in the import directory. - # We walk up to find where the manifest.json or golden_data folder is situated. + # We walk up to find where the golden_data folder is situated. curr = config_dir while curr and curr != os.path.dirname(curr): - if os.path.exists(os.path.join(curr, 'manifest.json')) or os.path.exists(os.path.join(curr, 'golden_data')): + if os.path.exists(os.path.join(curr, 'golden_data')): config_dir = curr break curr = os.path.dirname(curr) From a16ae7773942b443d3c1dc2bb6849883afc78a08 Mon Sep 17 00:00:00 2001 From: Nivedita Singh Date: Mon, 15 Jun 2026 13:22:02 +0000 Subject: [PATCH 18/18] Revert changes to runner.py to remove them from PR --- tools/import_validation/runner.py | 42 ------------------------------- 1 file changed, 42 deletions(-) diff --git a/tools/import_validation/runner.py b/tools/import_validation/runner.py index a852ff812d..f1364518e6 100644 --- a/tools/import_validation/runner.py +++ b/tools/import_validation/runner.py @@ -41,8 +41,6 @@ class ValidationRunner: def __init__(self, validation_config_path: str, differ_output: str, stats_summary: str, lint_report: str, validation_output: str): - self.validation_config_path = validation_config_path - self.stats_summary = stats_summary self.config = ValidationConfig(validation_config_path) self.validation_output = validation_output self.validator = Validator() @@ -214,46 +212,6 @@ def run_validations(self) -> tuple[bool, list[ValidationResult]]: if output_dir: rule_params.setdefault('output_path', output_dir) - # Resolve paths relative to the directory of the validation config. - if validator_name == 'GOLDENS_CHECK': - config_dir = os.path.dirname( - os.path.abspath(self.validation_config_path)) - # We walk up to find where the golden_data folder is situated. - curr = config_dir - while curr and curr != os.path.dirname(curr): - if os.path.exists(os.path.join(curr, 'golden_data')): - config_dir = curr - break - curr = os.path.dirname(curr) - - print( - f"DEBUG: Found GOLDENS_CHECK rule: '{rule.get('rule_id')}'" - ) - print( - f"DEBUG: Config directory resolved to: '{config_dir}'") - for path_key in list(rule_params.keys()): - # Check any key in rule_params that equals 'golden_files' or 'input_files' or ends with '_file' or '_files' - if path_key in ( - 'golden_files', - 'input_files') or path_key.endswith( - '_file') or path_key.endswith('_files'): - val = rule_params[path_key] - print( - f"DEBUG: Before resolve '{path_key}': '{val}'") - if isinstance(val, str): - if val and not os.path.isabs(val): - rule_params[path_key] = os.path.join( - config_dir, val) - elif isinstance(val, list): - rule_params[path_key] = [ - os.path.join(config_dir, item) - if isinstance(item, str) and item and not os.path.isabs(item) else item - for item in val - ] - print( - f"DEBUG: After resolve '{path_key}': '{rule_params[path_key]}'" - ) - if validator_name == 'SQL_VALIDATOR': result = validation_func(self.data_sources['stats'], self.data_sources['differ'],