local p = {}
local format = mw.ustring.format
local frame = mw.getCurrentFrame()
local getArgs = require('Module:Arguments').getArgs
local function country(args)
local state = args.state or args.province
local country
local countryModule = mw.loadData("Module:Road data/countrymask")
local country = args.country or countryModule[state]
return country
end
local function state(args)
local state = args.state or args.province
local country = country(args)
return frame:expandTemplate ({title='Country name', args = { country .. "-" .. state}})
end
local function state2(args)
local state = args.state2 or args.province2
local country = country(args)
return frame:expandTemplate ({title='Country name', args = { country .. "-" .. state}})
end
local function spain(args)
local province = args.province or args.community
local communities = {
["AL"] = "AN",
["CA"] = "AN",
["CO"] = "AN",
["GR"] = "AN",
["H"] = "AN",
["J"] = "AN",
["MA"] = "AN",
["SE"] = "AN",
["HU"] = "AR",
["TE"] = "AR",
["Z"] = "AR",
["O"] = "AS",
["S"] = "CB",
["AV"] = "CL",
["BU"] = "CL",
["LE"] = "CL",
["P"] = "CL",
["SA"] = "CL",
["SG"] = "CL",
["SO"] = "CL",
["VA"] = "CL",
["ZA"] = "CL",
["AB"] = "CM",
["CR"] = "CM",
["CU"] = "CM",
["GU"] = "CM",
["TO"] = "CM",
["GC"] = "CN",
["TF"] = "CN",
["B"] = "CT",
["GI"] = "CT",
["L"] = "CT",
["T"] = "CT",
["BA"] = "EX",
["CC"] = "EX",
["C"] = "GA",
["LU"] = "GA",
["OR"] = "GA",
["PO"] = "GA",
["PM"] = "IB",
["MU"] = "MC",
["M"] = "MD",
["NA"] = "NC",
["VI"] = "PV",
["BI"] = "PV",
["SS"] = "PV",
["LO"] = "RI",
["A"] = "VC",
["CS"] = "VC",
["V"] = "VC",
}
local comm = communities[province]
local data = frame:expandTemplate ({title='Flagg', args = { "xx", frame:expandTemplate ({title='Country name', args = { "ESP-" .. comm}}) } })
return data
end
local function constituent(args)
local loc = country(args)
if loc == "GBR" then
return nil
else
local labels = {
["ENG"] = "Constituent country",
["NIR"] = "Constituent country",
["SCT"] = "Constituent country",
["WLS"] = "Constituent country",
["NLD"] = "Constituent country",
["ABW"] = "Constituent country",
["CUW"] = "Constituent country",
["SXM"] = "Constituent country",
["GGY"] = "Crown dependency",
["IMN"] = "Crown dependency",
["JEY"] = "Crown dependency",
["AIA"] = "Overseas territory",
["BMU"] = "Overseas territory",
["IOT"] = "Overseas territory",
["VGB"] = "Overseas territory",
["CYM"] = "Overseas territory",
["FLK"] = "Overseas territory",
["GIB"] = "Overseas territory",
["MSR"] = "Overseas territory",
["PCN"] = "Overseas territory",
["SHN"] = "Overseas territory",
["SGS"] = "Overseas territory",
["TCA"] = "Overseas territory",
}
local label = labels[loc]
local countryname = frame:expandTemplate ({title='Country name', args = { country(args)}})
local data = frame:expandTemplate ({title='Flagg', args = { "xx", countryname, nodata = 1 }})
return label, data
end
end
local function location(args)
local infobox_args = {}
infobox_args['title'] = 'Location'
infobox_args['bodystyle'] = 'display:inline-table;'
infobox_args['child'] = 'yes'
infobox_args['decat'] = 'yes'
------------- EUROPE & ASIA --------------
if country(args) == "EUR" or country(args) == "ASIA" then
infobox_args['label1'] = 'Countries'
infobox_args['data1'] = args.countries
------------- ÅLAND --------------
elseif country(args) == "ALA" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Finland]]"
infobox_args['label2'] = 'Autonomous region'
infobox_args['data2'] = "[[Åland]]"
------------- AUSTRALIA --------------
elseif country(args) == "AUS" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Australia]]"
local function lga(args)
local labels = {
SA = "[[Local government areas of South Australia|LGA(s)]]",
VIC = "[[Local government in Victoria|LGA(s)]]",
NSW = "[[Local government areas of New South Wales|LGA(s)]]",
QLD = "[[Local government areas of Queensland|LGA(s)]]",
NT = "[[Local government areas of the Northern Territory|LGA(s)]]",
WA = "[[Local government areas of Western Australia|LGA(s)]]",
TAS = "[[Local government areas of Tasmania|LGA(s)]]",
ACT = "District(s)"
}
local state = args.state or ''
local label = labels[state] or "[[Local government in Australia|LGA(s)]]"
return label, args.lga
end
local function locations(args)
local labels = {
highway = "Major settlements",
["rural road"] = "Major settlements",
freeway = "Major suburbs",
["city highway"] = "Major suburbs",
road = "Major suburbs",
street = "Suburb"
}
local type = args.type or ''
local label = labels[type] or "Primary<br>destinations"
return label, args.locations
end
if args.state then
if args.state == "NT" or args.state == "ACT" or args.state == "JBT" then
infobox_args['label2'] = 'Territory'
else
infobox_args['label2'] = 'State'
end
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
else
infobox_args['label2'] = 'States'
infobox_args['data2'] = args.states
end
infobox_args['label3'], infobox_args['data3'] = lga(args)
infobox_args['label4'], infobox_args['data4'] = locations(args)
------------- BRAZIL --------------
elseif country(args) == "BRA" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Brazil]]"
if args.state then
if args.state == "DF" then
infobox_args['label2'] = 'Federal district'
else
infobox_args['label2'] = 'State'
end
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
else
infobox_args['label2'] = 'States'
infobox_args['data2'] = args.states
end
------------- CANADA --------------
elseif country(args) == "CAN" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Canada]]"
if args.province then
if args.province == "YK" or args.province == "NT" or args.province == "NU" then
infobox_args['label2'] = 'Territory'
else
infobox_args['label2'] = 'Province'
end
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
else
infobox_args['label2'] = 'Provinces'
infobox_args['data2'] = args.provinces
end
if args.province == 'AB' then
infobox_args['label3'] = "Specialized and rural municipalities"
infobox_args['data3'] = args.rural_municipalities
infobox_args['label4'] = "Special areas"
infobox_args['data4'] = args.areas
infobox_args['label5'] = "Improvement districts"
infobox_args['data5'] = args.districts
elseif args.province == 'BC' then
infobox_args['label3'] = "Regional districts"
infobox_args['data3'] = args.districts or args.rural_municipalities
elseif args.province == 'MB' or args.province == 'SK' then
infobox_args['label3'] = "Rural municipalities"
infobox_args['data3'] = args.rural_municipalities
elseif args.province == 'NB' or args.province == 'PE' then
infobox_args['label3'] = "Counties"
infobox_args['data3'] = args.counties
infobox_args['label4'] = "Parishes"
infobox_args['data4'] = args.parishes
infobox_args['label5'] = "Communities"
infobox_args['data5'] = args.communities
elseif args.province == 'NS' then
infobox_args['label3'] = "Counties"
infobox_args['data3'] = args.counties
elseif args.province == 'ON' then
infobox_args['label3'] = "Municipalities"
infobox_args['data3'] = args.rural_municipalities
infobox_args['label4'] = "Counties"
infobox_args['data4'] = args.counties
infobox_args['label5'] = "Regions"
infobox_args['data5'] = args.regions
infobox_args['label6'] = "Districts"
infobox_args['data6'] = args.districts
infobox_args['label7'] = "Divisions"
infobox_args['data7'] = args.divisions
elseif args.province == 'QC' then
infobox_args['label3'] = "Regional county municipalities"
infobox_args['data3'] = args.rural_municipalities
infobox_args['label4'] = "Equivalent territories"
infobox_args['data4'] = args.territories
elseif args.province == 'NT' or args.province == 'NU' then
infobox_args['label3'] = "Regions"
infobox_args['data3'] = args.regions
end
------------- CHINA --------------
elseif country(args) == "CHN" or country(args) == "HKG" or country(args) == "MAC" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[China]]"
if country(args) == "HKG" then
infobox_args['label2'] = 'Special administrative region'
infobox_args['data2'] = "[[Hong Kong]]"
infobox_args['label3'] = 'Districts'
infobox_args['data3'] = args.districts
elseif country(args) == "MAC" then
infobox_args['label2'] = 'Special administrative region'
infobox_args['data2'] = "[[Macau]]"
else
if args.province then
infobox_args['label2'] = 'Province'
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
infobox_args['label3'] = 'Counties'
infobox_args['data3'] = args.counties
else
infobox_args['label2'] = 'Provinces'
infobox_args['data2'] = args.provinces
infobox_args['label3'] = 'Autonomous regions'
infobox_args['data3'] = args.regions
end
end
------------- FRANCE --------------
elseif country(args) == "FRA" or country(args) == "GUF" or country(args) == "GLP" or country(args) == "MTQ" or country(args) == "MYT" or country(args) == "REU" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[France]]"
if country(args) == "GUF" then
infobox_args['label2'] = 'Overseas region'
infobox_args['data2'] = "[[French Guiana]]"
infobox_args['label3'] = 'Department'
infobox_args['data3'] = "[[Guyane]]"
elseif country(args) == "GLP" then
infobox_args['label2'] = 'Overseas region and department'
infobox_args['data2'] = "[[Guadeloupe]]"
elseif country(args) == "MTQ" then
infobox_args['label2'] = 'Overseas region and department'
infobox_args['data2'] = "[[Martinique]]"
elseif country(args) == "MYT" then
infobox_args['label2'] = 'Overseas region and department'
infobox_args['data2'] = "[[Mayotte]]"
elseif country(args) == "REU" then
infobox_args['label2'] = 'Overseas region'
infobox_args['data2'] = "[[Réunion]]"
infobox_args['label3'] = 'Department'
infobox_args['data3'] = "[[La Réunion]]"
else
infobox_args['label2'] = 'Regions'
infobox_args['data2'] = args.regions
infobox_args['label3'] = 'Departments'
infobox_args['data3'] = args.departments
end
------------ GEORGIA -------------
elseif country(args) == "GEO" then
infobox_args['data1'] = "[[Georgia (country)|Georgia]]"
------------- INDIA --------------
elseif country(args) == "IND" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[India]]"
infobox_args['label4'] = 'Districts'
infobox_args['data4'] = args.districts
if args.state then
if args.state == "AN" or args.state == 'CH' or args.state == 'DH' or args.state == 'DL' or args.state == 'JK' or args.state == 'LA' or args.state == 'LD' or args.state == 'PY' then
infobox_args['label2'] = 'Union territory'
else
infobox_args['label2'] = 'State'
end
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
else
infobox_args['label2'] = 'States'
infobox_args['data2'] = args.states
infobox_args['label3'] = 'Union territories'
infobox_args['data3'] = args.territories
end
------------- MEXICO --------------
elseif country(args) == "MEX" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Mexico]]"
if args.state then
if args.state == "CMX" then
infobox_args['label2'] = 'Autonomous city'
else
infobox_args['label2'] = 'State'
end
if args.state == "CHH" then
infobox_args['data2'] = '[[Chihuahua (state)|Chihuahua]]'
elseif args.state == "HID" then
infobox_args['data2'] = '[[Hidalgo (state)|Hidalgo]]'
elseif args.state == "MEX" then
infobox_args['data2'] = '[[State of Mexico|México]]'
else
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
end
infobox_args['label3'] = 'Municipalities'
infobox_args['data3'] = args.counties or args.municipalities
else
infobox_args['label2'] = 'States'
infobox_args['data2'] = args.states
infobox_args['label3'] = 'Municipalities'
infobox_args['data3'] = args.counties or args.municipalities
end
------------- NETHERLANDS --------------
elseif country(args) == "NLD" or country(args) == "ABW" or country(args) == "CUW" or country(args) == "SXM"then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Kingdom of the Netherlands]]"
infobox_args['label2'], infobox_args['data2'] = constituent(args)
if country(args) == "NLD" then
infobox_args['label3'] = 'Provinces'
infobox_args['data3'] = args.provinces
end
------------- RUSSIA --------------
elseif country(args) == "RUS" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Russia]]"
infobox_args['label2'] = 'Oblasts'
infobox_args['data2'] = args.oblasts
infobox_args['label3'] = 'Republics'
infobox_args['data3'] = args.republics
infobox_args['label4'] = 'Autonomous okrugs'
infobox_args['data4'] = args.okrugs
infobox_args['label5'] = 'Krais'
infobox_args['data5'] = args.krais
infobox_args['label6'] = 'Federal cities'
infobox_args['data6'] = args.federal_cities
------------- SPAIN --------------
elseif country(args) == "ESP" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[Spain]]"
local province = args.province
if province and province ~= '' then
infobox_args['label2'] = 'Autonomous<br>community'
infobox_args['data2'] = spain(args)
if province == "O" or province == "S" or province == "PM" or province == "LO" or province == "M" or province == "MU" or province == "NA" then
return nil
else
infobox_args['label3'] = 'Province'
infobox_args['data3'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
end
elseif args.community then
infobox_args['label2'] = 'Autonomous<br>community'
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , frame:expandTemplate ({title='country name', args = {"ESP-" .. args.community} }) } })
infobox_args['label3'] = 'Provinces'
infobox_args['data3'] = args.provinces
else
infobox_args['label2'] = 'Autonomous<br>communities'
infobox_args['data2'] = args.communities
infobox_args['label3'] = 'Provinces'
infobox_args['data3'] = args.provinces
end
------------- UNITED KINGDOM --------------
elseif country(args) == "GBR" or country(args) == "ENG" or country(args) == "NIR" or country(args) == "SCT" or country(args) == "WLS" or
country(args) == "GGY" or country(args) == "IMN" or country(args) == "JEY" or country(args) == "AIA" or country(args) == "BMU" or
country(args) == "IOT" or country(args) == "VGB" or country(args) == "CYM" or country(args) == "FLK" or country(args) == "GIB" or
country(args) == "MSR" or country(args) == "PCN" or country(args) == "SHN" or country(args) == "SGS" or country(args) == "TCA" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[United Kingdom]]"
infobox_args['label2'], infobox_args['data2'] = constituent(args)
if country(args) ~= "ENG" then
infobox_args['label5'] = 'Counties'
infobox_args['data5'] = args.counties
end
if country(args) == "ENG" then
infobox_args['label3'] = 'Administrative areas'
infobox_args['data3'] = args.areas
infobox_args['label4'] = 'Counties'
infobox_args['data4'] = args.counties
infobox_args['label5'] = 'Boroughs'
infobox_args['data5'] = args.boroughs
elseif country(args) == "NIR" then
infobox_args['label3'] = 'Districts'
infobox_args['data3'] = args.districts
elseif country(args) == "SCT" then
infobox_args['label3'] = 'Council areas'
infobox_args['data3'] = args.areas
elseif country(args) == "WLS" then
infobox_args['label3'] = 'Counties'
infobox_args['data3'] = args.counties
infobox_args['label4'] = 'County boroughs'
infobox_args['data4'] = args.boroughs
elseif country(args) == "GGY" or country(args) == "JEY" or country(args) == "BMU" or country(args) == "MSR" then
infobox_args['label3'] = 'Parishes'
infobox_args['data3'] = args.parishes
elseif country(args) == "IMN" then
infobox_args['label3'] = 'Sheadings'
infobox_args['data3'] = args.sheadings
elseif country(args) == "AIA" or country(args) == "VGB" or country(args) == "CYM" or country(args) == "TCA" then
infobox_args['label3'] = 'Districts'
infobox_args['data3'] = args.districts
elseif country(args) == "SHN" then
infobox_args['label3'] = 'Island'
infobox_args['data3'] = args.island
end
------------- UNITED STATES --------------
elseif country(args) == "USA" then
infobox_args['label1'] = 'Country'
infobox_args['data1'] = "[[United States]]"
local function county(args)
local state = args.state
local stateName = frame:expandTemplate ({title='Country name', args = { "USA-" .. state}})
local country = country(args)
local countyName = args.county or args.parish or args.borough or args.municipality
local county
if state == 'LA' then
county = 'Parish'
elseif state == 'AK' then
county = 'Borough'
elseif state == 'PR' then
county = 'Municipality'
else
county = 'County'
end
return string.format("[[%s %s, %s|%s]]", countyName, county, stateName, countyName)
end
if args.state2 then
infobox_args['label2'] = 'States'
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args) }}) .. ", " .. frame:expandTemplate ({title='Flagg', args = {"xx" , state2(args) }})
elseif args.state then
if args.state == "AS" or args.state == "GU" or args.state == "MP" or args.state == "PR" or args.state == "VI" then
infobox_args['label2'] = 'Territory'
elseif args.state == "DC" then
infobox_args['label2'] = 'Federal district'
else
infobox_args['label2'] = 'State'
end
if args.state == "GA" then
infobox_args['data2'] = '[[Georgia (U.S. state)|Georgia]]'
elseif args.state == "WA" then
infobox_args['data2'] = '[[Washington (state)|Washington]]'
elseif args.state == "NY" then
infobox_args['data2'] = '[[New York (state)|New York]]'
else
infobox_args['data2'] = frame:expandTemplate ({title='Flagg', args = {"xx" , state(args), nodata = 1 }})
end
else
infobox_args['label2'] = 'States'
infobox_args['data2'] = args.states
end
if args.county then
infobox_args['label3'] = 'County'
infobox_args['data3'] = county(args)
else
infobox_args['label3'] = 'Counties'
infobox_args['data3'] = args.counties
end
if args.parish then
infobox_args['label4'] = 'Parish'
infobox_args['data4'] = county(args)
else
infobox_args['label4'] = 'Parishes'
infobox_args['data4'] = args.parishes
end
if args.borough then
infobox_args['label5'] = 'Borough'
infobox_args['data5'] = county(args)
else
infobox_args['label5'] = 'Boroughs'
infobox_args['data5'] = args.boroughs
end
if args.municipality then
infobox_args['label6'] = 'Municipality'
infobox_args['data6'] = county(args)
else
infobox_args['label6'] = 'Municipalities'
infobox_args['data6'] = args.municipalities
end
if args.indep_city then
infobox_args['label6'] = 'Independent city'
infobox_args['data6'] = args.indep_city
else
infobox_args['label7'] = 'Independent cities'
infobox_args['data7'] = args.indep_cities
end
else
------------- ALL OTHER COUNTRIES --------------
if country(args) ~= nil then
local countryname = frame:expandTemplate ({title='Country name', args = { country(args)}})
infobox_args['label1'] = 'Country'
infobox_args['data1'] = frame:expandTemplate ({title='Flagg', args = { "xx", countryname, nodata = 1 }})
else
infobox_args['label1'] = 'Countries'
infobox_args['data1'] = args.countries
end
infobox_args['label2'] = 'Island'
infobox_args['data2'] = args.island
infobox_args['label3'] = 'Communities'
infobox_args['data3'] = args.communities
infobox_args['label4'] = 'Regions'
infobox_args['data4'] = args.regions
infobox_args['label5'] = 'Provinces'
infobox_args['data5'] = args.provinces
infobox_args['label6'] = 'States'
infobox_args['data6'] = args.states
infobox_args['label7'] = 'Governorates'
infobox_args['data7'] = args.governorates
infobox_args['label8'] = 'Counties'
infobox_args['data8'] = args.counties
infobox_args['label9'] = 'Departments'
infobox_args['data9'] = args.departments
infobox_args['label10'] = 'Cantons'
infobox_args['data10'] = args.cantons
infobox_args['label11'] = 'Prefectures'
infobox_args['data11'] = args.prefectures
infobox_args['label12'] = 'Divisions'
infobox_args['data12'] = args.divisions
infobox_args['label13'] = 'Oblasts'
infobox_args['data13'] = args.oblasts
infobox_args['label14'] = 'Districts'
infobox_args['data14'] = args.districts
infobox_args['label15'] = 'Parishes'
infobox_args['data15'] = args.parishes
infobox_args['label16'] = 'Communes'
infobox_args['data16'] = args.communes
infobox_args['label17'] = 'Territories'
infobox_args['data17'] = args.territories
infobox_args['label18'] = args.label1
infobox_args['data18'] = args.location1
infobox_args['label19'] = args.label2
infobox_args['data19'] = args.location2
infobox_args['label20'] = args.label3
infobox_args['data20'] = args.location3
infobox_args['label21'] = args.label4
infobox_args['data21'] = args.location4
infobox_args['label22'] = args.label5
infobox_args['data22'] = args.location5
infobox_args['label23'] = 'Subregions'
infobox_args['data23'] = args.subregions
infobox_args['label24'] = 'Subcounties'
infobox_args['data24'] = args.subcounties
infobox_args['label25'] = 'Subprefectures'
infobox_args['data25'] = args.subprefectures
end
if country(args) ~= "USA" then
infobox_args['label26'] = 'Municipalities'
infobox_args['data26'] = args.municipalities
infobox_args['label27'] = 'Major cities'
infobox_args['data27'] = args.cities
infobox_args['label28'] = 'Towns'
infobox_args['data28'] = args.towns
infobox_args['label29'] = 'Villages'
infobox_args['data29'] = args.villages
if country(args) == "GBR" or country(args) == "ENG" or country(args) == "NIR" or country(args) == "SCT" or country(args) == "WLS" or
country(args) == "GGY" or country(args) == "IMN" or country(args) == "JEY" or country(args) == "AIA" or country(args) == "BMU" or
country(args) == "IOT" or country(args) == "VGB" or country(args) == "CYM" or country(args) == "FLK" or country(args) == "GIB" or
country(args) == "MSR" or country(args) == "PCN" or country(args) == "SHN" or country(args) == "SGS" or country(args) == "TCA" then
infobox_args['label30'] = '[[Primary status|Primary<br>destinations]]'
infobox_args['data30'] = args.destinations
else
infobox_args['label30'] = 'Primary<br>destinations'
infobox_args['data30'] = args.destinations
end
end
return frame:expandTemplate ({title='Infobox', args = infobox_args})
end
local function params(args)
if country(args) or args.areas or args.borough or args.boroughs or args.cantons or args.cities or args.communes or args.communities or args.counties or
args.countries or args.county or args.departments or args.destinations or args.districts or args.divisions or args.federal_cities or args.governorates or
args.indep_city or args.indep_cities or args.island or args.krais or args.label1 or args.label2 or args.label3 or args.label4 or args.label5 or args.lga or
args.location1 or args.location2 or args.location3 or args.location4 or args.location5 or args.locations or args.municipalities or args.municipality or
args.oblasts or args.okrugs or args.parish or args.parishes or args.prefectures or args.provinces or args.regions or args.republics or args.rural_municipalities or
args.sheadings or args.states or args.subcounties or args.subprefectures or args.subregions or args.territories or args.towns or args.villages then
return true
else
return false
end
end
function p.location(frame)
local args = getArgs(frame)
if params(args) == false then
return nil
else
return location(args)
end
end
return p