├── fast_flights ├── py.typed ├── primp.py ├── cookies.proto ├── search.py ├── schema.py ├── __init__.py ├── filter.py ├── flights.proto ├── local_playwright.py ├── bright_data_fetch.py ├── cookies_impl.py ├── cookies_pb2.py ├── fallback_playwright.py ├── flights_pb2.py ├── primp.pyi ├── core.py ├── flights_impl.py └── decoder.py ├── .gitignore ├── setup.py ├── Pipfile ├── test.py ├── docs ├── local.md ├── fallbacks.md ├── airports.md ├── filters.md └── index.md ├── .github └── workflows │ ├── ci.yml │ └── python-publish.yml ├── enums ├── generate_enums.py └── _generated_enum.py ├── test_jsdata.py ├── LICENSE ├── pyproject.toml ├── mkdocs.yml ├── test_bright_data.py ├── example.py └── README.md /fast_flights/py.typed: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/__pycache__/ 2 | /main.py 3 | .ruff/ 4 | .idea 5 | .venv 6 | .ipynb_checkpoints/ 7 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | 3 | if __name__ == "__main__": 4 | setup() 5 | 6 | # testing 7 | -------------------------------------------------------------------------------- /fast_flights/primp.py: -------------------------------------------------------------------------------- 1 | from primp import Client # type: ignore 2 | 3 | 4 | class Response: ... 5 | 6 | 7 | __all__ = ["Client", "Response"] 8 | -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | url = "https://pypi.org/simple" 3 | verify_ssl = true 4 | name = "pypi" 5 | 6 | [packages] 7 | 8 | [dev-packages] 9 | 10 | [requires] 11 | python_version = "3.12" 12 | python_full_version = "3.12.8" 13 | -------------------------------------------------------------------------------- /fast_flights/cookies.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | message Information { 4 | string gws = 2; // gws_YYYYMMDD-0_RC2 5 | string locale = 3; // e.g., de, en... 6 | } 7 | 8 | message Datetime { 9 | uint32 timestamp = 1; // e.g., 1692144000 10 | } 11 | 12 | message SOCS { 13 | Information info = 2; 14 | Datetime datetime = 3; 15 | } -------------------------------------------------------------------------------- /fast_flights/search.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | from ._generated_enum import Airport 3 | 4 | 5 | def search_airport(query: str) -> List[Airport]: 6 | """Search for airports. 7 | 8 | Args: 9 | query (str): The query. 10 | 11 | Returns: 12 | list[Airport]: A list of airports (enum `Airports`). 13 | """ 14 | return [ 15 | ref 16 | for aname, ref in Airport.__members__.items() 17 | if query.lower() in aname.lower() 18 | ] 19 | -------------------------------------------------------------------------------- /fast_flights/schema.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from dataclasses import dataclass 4 | from typing import List, Literal, Optional 5 | 6 | 7 | @dataclass 8 | class Result: 9 | current_price: Literal["low", "typical", "high"] 10 | flights: List[Flight] 11 | 12 | 13 | @dataclass 14 | class Flight: 15 | is_best: bool 16 | name: str 17 | departure: str 18 | arrival: str 19 | arrival_time_ahead: str 20 | duration: str 21 | stops: int 22 | delay: Optional[str] 23 | price: str 24 | -------------------------------------------------------------------------------- /fast_flights/__init__.py: -------------------------------------------------------------------------------- 1 | from .cookies_impl import Cookies 2 | from .core import get_flights_from_filter, get_flights 3 | from .filter import create_filter 4 | from .flights_impl import Airport, FlightData, Passengers, TFSData 5 | from .schema import Flight, Result 6 | from .search import search_airport 7 | 8 | __all__ = [ 9 | "Airport", 10 | "TFSData", 11 | "create_filter", 12 | "FlightData", 13 | "Passengers", 14 | "get_flights_from_filter", 15 | "Result", 16 | "Flight", 17 | "search_airport", 18 | "Cookies", 19 | "get_flights", 20 | ] 21 | -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | from fast_flights import create_filter, get_flights_from_filter, FlightData, Passengers 2 | 3 | filter = create_filter( 4 | flight_data=[ 5 | # Include more if it's not a one-way trip 6 | FlightData( 7 | date="2025-07-01", # Date of departure 8 | from_airport="TPE", # Departure (airport) 9 | to_airport="MYJ", # Arrival (airport) 10 | ) 11 | ], 12 | trip="one-way", # Trip type 13 | passengers=Passengers(adults=2, children=1, infants_in_seat=0, infants_on_lap=0), # Passengers 14 | seat="economy", # Seat type 15 | max_stops=1, # Maximum number of stops 16 | ) 17 | print(filter.as_b64().decode("utf-8")) 18 | print(get_flights_from_filter(filter, mode="common")) 19 | -------------------------------------------------------------------------------- /docs/local.md: -------------------------------------------------------------------------------- 1 | # Local Playwright 2 | 3 | In case the Playwright serverless functions are down or you prefer not to use them, you can run the Playwright server locally and request against that. 4 | 5 | 1. Install this package with the dependencies needed for Playwright: 6 | 7 | ```bash 8 | pip install fast-flights[local] 9 | ``` 10 | 11 | 2. Install the Playwright browser: 12 | 13 | ```bash 14 | python -m playwright install chromium # or `python -m playwright install` if you want to install all browsers 15 | ``` 16 | 17 | 3. Now you can use the `fetch_mode="local"` parameter in `get_flights`: 18 | 19 | ```python 20 | get_flights( 21 | ..., 22 | fetch_mode="local" # common/fallback/force-fallback/local 23 | ) 24 | 25 | # ...or: 26 | 27 | get_fights_from_filter( 28 | filter, 29 | mode="local" # common/fallback/force-fallback/local 30 | ) 31 | ``` 32 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci 2 | on: 3 | push: 4 | branches: 5 | - master 6 | - main 7 | permissions: 8 | contents: write 9 | jobs: 10 | deploy: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - name: Configure Git Credentials 15 | run: | 16 | git config user.name github-actions[bot] 17 | git config user.email 41898282+github-actions[bot]@users.noreply.github.com 18 | - uses: actions/setup-python@v5 19 | with: 20 | python-version: 3.x 21 | - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV 22 | - uses: actions/cache@v4 23 | with: 24 | key: mkdocs-material-${{ env.cache_id }} 25 | path: .cache 26 | restore-keys: | 27 | mkdocs-material- 28 | - run: pip install mkdocs-material mkdocs-static-i18n 29 | - run: mkdocs gh-deploy --force 30 | -------------------------------------------------------------------------------- /docs/fallbacks.md: -------------------------------------------------------------------------------- 1 | # Fallbacks 2 | Just in case anything goes wrong, we've added falbacks extending Playwright serverless functions: 3 | 4 | ```python 5 | get_flights( 6 | ..., 7 | fetch_mode="fallback" # common/fallback/force-fallback 8 | ) 9 | 10 | # ...or: 11 | 12 | get_fights_from_filter( 13 | filter, 14 | mode="fallback" # common/fallback/force-fallback 15 | ) 16 | ``` 17 | 18 | There are a few modes for fallbacks: 19 | 20 | - `common` – This uses the standard scraping process. 21 | - `fallback` – Enables a fallback support if the standard process fails. 22 | - `force-fallback` – Forces using the fallback. 23 | 24 | Some flight request data are displayed upon client request, meaning it's not possible for traditional web scraping. Therefore, if we used [Playwright](https://try.playwright.tech), which uses Chromium (a browser), and fetched the inner HTML, we could make the original scraper work again! Magic :sparkles: 25 | -------------------------------------------------------------------------------- /enums/generate_enums.py: -------------------------------------------------------------------------------- 1 | # i forgot how to use pandas lol 2 | 3 | with open("./airports.csv", "r", encoding="utf-8") as file: 4 | lines = file.readlines()[1:] 5 | 6 | t = """from enum import Enum 7 | 8 | class Airport(Enum): 9 | """ 10 | 11 | for line in lines: 12 | columns = line.split(",") 13 | name = "_".join( 14 | columns[2] 15 | .replace("-", " ") 16 | .replace(".", " ") 17 | .replace("/", " ") 18 | .replace("'", "") 19 | .replace("(", " ") 20 | .replace(")", " ") 21 | .replace("–", " ") 22 | .split() 23 | ).upper() 24 | 25 | if "AIRPORT" not in name: 26 | continue 27 | 28 | if name in t: 29 | continue 30 | 31 | generated = " " * 4 + name + " = '" + columns[0] + "'\n" 32 | t += generated 33 | print(generated[:-1]) 34 | 35 | 36 | with open("./_generated_enum.py", "wb") as f: 37 | f.write(t.encode("utf-8")) 38 | -------------------------------------------------------------------------------- /docs/airports.md: -------------------------------------------------------------------------------- 1 | # Airports 2 | 3 | To search for an airport, you could use the `search_airports()` API: 4 | 5 | ```python 6 | airport = search_airports("taipei")[0] 7 | airport 8 | # Airport.TAIPEI_SONGSHAN_AIRPORT 9 | ``` 10 | 11 | If you're unfamiliar with those 3-letter airport codes (such as "MYJ" for Matsuyama, "TPE" for Taipei, "LAX" for Los Angeles, etc.), you could pass in an `Airport` enum to a `FlightData` object: 12 | 13 | ```python 14 | taipei = search_airports("taipei")[0] 15 | los = search_airports("los angeles")[0] 16 | 17 | filter = create_filter( 18 | flight_data=[ 19 | FlightData( 20 | date="2025-01-01", 21 | from_airport=taipei, 22 | to_airport=los 23 | ) 24 | ], 25 | ... 26 | ) 27 | ``` 28 | 29 | I love airports. Navigating them was like an adventure when I was a kid. I really thought that airports have everything in them, I even drew an entire airport containing (almost) a city at this point... naively. 30 | -------------------------------------------------------------------------------- /fast_flights/filter.py: -------------------------------------------------------------------------------- 1 | from typing import Literal, List, Optional 2 | from .flights_impl import FlightData, Passengers, TFSData 3 | 4 | def create_filter( 5 | *, 6 | flight_data: List[FlightData], 7 | trip: Literal["round-trip", "one-way", "multi-city"], 8 | passengers: Passengers, 9 | seat: Literal["economy", "premium-economy", "business", "first"], 10 | max_stops: Optional[int] = None, 11 | ) -> TFSData: 12 | """Create a filter. (``?tfs=``) 13 | 14 | Args: 15 | flight_data (list[FlightData]): Flight data as a list. 16 | trip ("one-way" | "round-trip" | "multi-city"): Trip type. 17 | passengers (Passengers): Passengers. 18 | seat ("economy" | "premium-economy" | "business" | "first"): Seat. 19 | max_stops (int, optional): Maximum number of stops. Defaults to None. 20 | """ 21 | for fd in flight_data: 22 | fd.max_stops = max_stops 23 | 24 | return TFSData.from_interface( 25 | flight_data=flight_data, trip=trip, passengers=passengers, seat=seat 26 | ) 27 | -------------------------------------------------------------------------------- /fast_flights/flights.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | message Airport { 4 | string airport = 2; 5 | } 6 | 7 | message FlightData { 8 | string date = 2; 9 | Airport from_flight = 13; 10 | Airport to_flight = 14; 11 | optional int32 max_stops = 5; 12 | repeated string airlines = 6; 13 | } 14 | 15 | enum Seat { 16 | UNKNOWN_SEAT = 0; 17 | ECONOMY = 1; 18 | PREMIUM_ECONOMY = 2; 19 | BUSINESS = 3; 20 | FIRST = 4; 21 | } 22 | 23 | enum Trip { 24 | UNKNOWN_TRIP = 0; 25 | ROUND_TRIP = 1; 26 | ONE_WAY = 2; 27 | MULTI_CITY = 3; // not implemented 28 | } 29 | 30 | enum Passenger { 31 | UNKNOWN_PASSENGER = 0; 32 | ADULT = 1; 33 | CHILD = 2; 34 | INFANT_IN_SEAT = 3; 35 | INFANT_ON_LAP = 4; 36 | } 37 | 38 | message Info { 39 | repeated FlightData data = 3; 40 | Seat seat = 9; 41 | repeated Passenger passengers = 8; 42 | Trip trip = 19; 43 | } 44 | 45 | message Price { 46 | int32 price = 1; 47 | string currency = 3; 48 | } 49 | 50 | message ItinerarySummary { 51 | string flights = 2; 52 | Price price = 3; 53 | } 54 | -------------------------------------------------------------------------------- /test_jsdata.py: -------------------------------------------------------------------------------- 1 | from fast_flights import FlightData, Passengers, create_filter, get_flights_from_filter 2 | 3 | # Create a new filter 4 | filter = create_filter( 5 | flight_data=[ 6 | # Include more if it's not a one-way trip 7 | FlightData( 8 | date="2025-10-04", # Date of departure 9 | from_airport="SJC", 10 | to_airport="LAS" 11 | ), 12 | # ... include more for round trips 13 | ], 14 | trip="one-way", # Trip (round-trip, one-way) 15 | seat="economy", # Seat (economy, premium-economy, business or first) 16 | passengers=Passengers( 17 | adults=1, 18 | children=1, 19 | infants_in_seat=0, 20 | infants_on_lap=0 21 | ), 22 | ) 23 | 24 | # Get flights with a filter 25 | result = get_flights_from_filter(filter, data_source='js') 26 | 27 | if result is not None: 28 | print('Best:') 29 | for flight in result.best: 30 | print(flight) 31 | print() 32 | print('Others:') 33 | for flight in result.other: 34 | print(flight) 35 | print() 36 | -------------------------------------------------------------------------------- /fast_flights/local_playwright.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | import asyncio 3 | from playwright.async_api import async_playwright 4 | 5 | async def fetch_with_playwright(url: str) -> str: 6 | async with async_playwright() as p: 7 | browser = await p.chromium.launch() 8 | page = await browser.new_page() 9 | await page.goto(url, wait_until="networkidle") 10 | if page.url.startswith("https://consent.google.com"): 11 | await page.click('text="Accept all"') 12 | 13 | await page.wait_for_selector('[role="main"]', timeout=30000) 14 | body = await page.evaluate( 15 | "() => document.querySelector('[role=\"main\"]').innerHTML" 16 | ) 17 | await browser.close() 18 | return body 19 | 20 | def local_playwright_fetch(params: dict) -> Any: 21 | url = "https://www.google.com/travel/flights?" + "&".join(f"{k}={v}" for k, v in params.items()) 22 | body = asyncio.run(fetch_with_playwright(url)) 23 | 24 | class DummyResponse: 25 | status_code = 200 26 | text = body 27 | text_markdown = body 28 | 29 | return DummyResponse 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 fast-flights Contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["flit_core >=3.2,<4"] 3 | build-backend = "flit_core.buildapi" 4 | 5 | [project] 6 | name = "fast-flights" 7 | version = "2.2" 8 | description = "The fast, robust, strongly-typed Google Flights scraper (API) implemented in Python." 9 | keywords = ["flights", "google", "google-flights", "scraper", "protobuf", "travel", "trip", "passengers", "airport"] 10 | authors = [ 11 | { name = "AWeirdDev", email = "aweirdscratcher@gmail.com" }, 12 | ] 13 | license = { file = "LICENSE" } 14 | readme = "README.md" 15 | classifiers = [ 16 | "Programming Language :: Python :: 3", 17 | "License :: OSI Approved :: MIT License", 18 | "Operating System :: OS Independent", 19 | ] 20 | requires-python = ">=3.8" 21 | dependencies = [ 22 | "primp", 23 | "protobuf>=5.27.0", 24 | "selectolax", 25 | ] 26 | 27 | [project.optional-dependencies] 28 | local = [ 29 | "playwright" 30 | ] 31 | 32 | [project.urls] 33 | "Source" = "https://github.com/AWeirdDev/flights" 34 | "Issues" = "https://github.com/AWeirdDev/flights/issues" 35 | "Documentation" = "https://aweirddev.github.io/flights/" 36 | 37 | [tool.setuptools] 38 | packages = [ 39 | "fast_flights" 40 | ] 41 | 42 | [tool.pyright] 43 | pythonVersion = '3.8' 44 | 45 | [dependency-groups] 46 | dev = [ 47 | "ipykernel>=6.29.5", 48 | "pip>=25.0.1", 49 | ] 50 | -------------------------------------------------------------------------------- /fast_flights/bright_data_fetch.py: -------------------------------------------------------------------------------- 1 | import os 2 | from typing import Any 3 | from .primp import Client 4 | 5 | 6 | def bright_data_fetch(params: dict) -> Any: 7 | # Read environment variables with defaults 8 | api_url = os.environ.get("BRIGHT_DATA_API_URL", "https://api.brightdata.com/request") 9 | api_key = os.environ.get("BRIGHT_DATA_API_KEY") # Required, no default 10 | zone = os.environ.get("BRIGHT_DATA_SERP_ZONE", "serp_api1") 11 | 12 | if not api_key: 13 | raise ValueError("BRIGHT_DATA_API_KEY environment variable is required") 14 | 15 | # Construct Google Flights URL 16 | url = "https://www.google.com/travel/flights?" + "&".join(f"{k}={v}" for k, v in params.items()) 17 | 18 | # Make request to Bright Data (no impersonation needed - Bright Data handles it) 19 | client = Client(verify=False) 20 | res = client.post( 21 | api_url, 22 | headers={ 23 | "Content-Type": "application/json", 24 | "Authorization": f"Bearer {api_key}" 25 | }, 26 | json={"url": url, "zone": zone} 27 | ) 28 | 29 | assert res.status_code == 200, f"{res.status_code} Result: {res.text}" 30 | 31 | # Return DummyResponse with HTML content 32 | class DummyResponse: 33 | status_code = 200 34 | text = res.text # Bright Data returns raw HTML 35 | text_markdown = text 36 | 37 | return DummyResponse -------------------------------------------------------------------------------- /fast_flights/cookies_impl.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import time 3 | import datetime as datetimelib 4 | 5 | from .cookies_pb2 import SOCS, Information, Datetime # type: ignore 6 | 7 | 8 | class Cookies: 9 | def __init__( 10 | self, 11 | *, 12 | gws: str, 13 | locale: str, 14 | timestamp: int, 15 | ): 16 | self.gws = gws 17 | self.locale = locale 18 | self.timestamp = timestamp 19 | 20 | def pb(self) -> SOCS: # type: ignore 21 | # Info 22 | info = Information() 23 | info.gws = self.gws 24 | info.locale = self.locale 25 | 26 | # Datetime 27 | datetime = Datetime() 28 | datetime.timestamp = self.timestamp 29 | 30 | # SOCS (main) 31 | socs = SOCS(info=info, datetime=datetime) 32 | return socs 33 | 34 | def to_string(self) -> bytes: 35 | return self.pb().SerializeToString() 36 | 37 | def as_b64(self) -> bytes: 38 | return base64.b64encode(self.to_string()) 39 | 40 | def to_dict(self) -> dict: 41 | return {"CONSENT": "PENDING+987", "SOCS": self.as_b64().decode("utf-8")} 42 | 43 | @staticmethod 44 | def new(*, locale: str = "en") -> "Cookies": 45 | return Cookies( 46 | gws=f"gws_{datetimelib.datetime.now().strftime('%Y%m%d')}-0_RC2", 47 | locale=locale, 48 | timestamp=int(time.time()), 49 | ) 50 | -------------------------------------------------------------------------------- /fast_flights/cookies_pb2.py: -------------------------------------------------------------------------------- 1 | # type: ignore 2 | # ruff: noqa 3 | 4 | # -*- coding: utf-8 -*- 5 | # Generated by the protocol buffer compiler. DO NOT EDIT! 6 | # source: cookies.proto 7 | """Generated protocol buffer code.""" 8 | 9 | from google.protobuf.internal import builder as _builder 10 | from google.protobuf import descriptor as _descriptor 11 | from google.protobuf import descriptor_pool as _descriptor_pool 12 | from google.protobuf import symbol_database as _symbol_database 13 | # @@protoc_insertion_point(imports) 14 | 15 | _sym_db = _symbol_database.Default() 16 | 17 | 18 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( 19 | b'\n\rcookies.proto"*\n\x0bInformation\x12\x0b\n\x03gws\x18\x02 \x01(\t\x12\x0e\n\x06locale\x18\x03 \x01(\t"\x1d\n\x08\x44\x61tetime\x12\x11\n\ttimestamp\x18\x01 \x01(\r"?\n\x04SOCS\x12\x1a\n\x04info\x18\x02 \x01(\x0b\x32\x0c.Information\x12\x1b\n\x08\x64\x61tetime\x18\x03 \x01(\x0b\x32\t.Datetimeb\x06proto3' 20 | ) 21 | 22 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) 23 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "cookies_pb2", globals()) 24 | if _descriptor._USE_C_DESCRIPTORS == False: 25 | DESCRIPTOR._options = None 26 | _INFORMATION._serialized_start = 17 27 | _INFORMATION._serialized_end = 59 28 | _DATETIME._serialized_start = 61 29 | _DATETIME._serialized_end = 90 30 | _SOCS._serialized_start = 92 31 | _SOCS._serialized_end = 155 32 | # @@protoc_insertion_point(module_scope) 33 | -------------------------------------------------------------------------------- /fast_flights/fallback_playwright.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | 3 | from .primp import Client 4 | 5 | CODE = """\ 6 | import asyncio 7 | import sys 8 | from playwright.async_api import async_playwright 9 | 10 | async def main(): 11 | async with async_playwright() as p: 12 | browser = await p.chromium.launch() 13 | page = await browser.new_page() 14 | await page.goto("%s") 15 | locator = page.locator('.eQ35Ce') 16 | await locator.wait_for() 17 | body = await page.evaluate( 18 | \"\"\"() => { 19 | return document.querySelector('[role="main"]').innerHTML 20 | }\"\"\" 21 | ) 22 | await browser.close() 23 | sys.stdout.write(body) 24 | 25 | asyncio.run(main()) 26 | """ 27 | 28 | 29 | def fallback_playwright_fetch(params: dict) -> Any: 30 | client = Client(impersonate="chrome_100", verify=False) 31 | 32 | res = client.post( 33 | "https://try.playwright.tech/service/control/run", 34 | json={ 35 | "code": CODE 36 | % ( 37 | "https://www.google.com/travel/flights" 38 | + "?" 39 | + "&".join(f"{k}={v}" for k, v in params.items()) 40 | ), 41 | "language": "python", 42 | }, 43 | ) 44 | assert res.status_code == 200, f"{res.status_code} Result: {res.text_markdown}" 45 | import json 46 | 47 | class DummyResponse: 48 | status_code = 200 49 | text = json.loads(res.text)["output"] 50 | text_markdown = text 51 | 52 | return DummyResponse 53 | -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: Flights 2 | site_url: https://github.com/AWeirdDev/flights 3 | repo_url: https://github.com/AWeirdDev/flights 4 | theme: 5 | name: material 6 | icon: 7 | logo: material/airplane 8 | font: 9 | text: Inter 10 | code: Roboto Mono 11 | heading: Inter Tight 12 | palette: 13 | - scheme: default 14 | toggle: 15 | icon: material/brightness-7 16 | name: Switch to dark mode 17 | - scheme: slate 18 | media: "(prefers-color-scheme: dark)" 19 | toggle: 20 | icon: material/brightness-4 21 | name: Switch to light mode 22 | features: 23 | - content.code.copy 24 | - content.code.annotate 25 | plugins: 26 | - search 27 | - offline 28 | - i18n: 29 | docs_structure: suffix 30 | languages: 31 | - locale: en 32 | default: true 33 | name: English 34 | build: true 35 | - locale: zh-TW 36 | name: 繁體中文 37 | build: true 38 | extra: 39 | generator: false 40 | social: 41 | - icon: fontawesome/brands/github 42 | link: https://github.com/AWeirdDev 43 | name: AWeirdDev on GitHub 44 | alternate: 45 | - name: English 46 | link: / 47 | lang: en 48 | - name: 繁體中文 49 | link: /zh-tw/ 50 | lang: zh-TW 51 | copyright: "© 2024 AWeirdDev" 52 | markdown_extensions: 53 | - attr_list 54 | - pymdownx.emoji: 55 | emoji_index: !!python/name:material.extensions.emoji.twemoji 56 | emoji_generator: !!python/name:material.extensions.emoji.to_svg 57 | - pymdownx.highlight: 58 | anchor_linenums: true 59 | - pymdownx.superfences 60 | -------------------------------------------------------------------------------- /.github/workflows/python-publish.yml: -------------------------------------------------------------------------------- 1 | # This workflow will upload a Python Package to PyPI when a release is created 2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries 3 | 4 | # This workflow uses actions that are not certified by GitHub. 5 | # They are provided by a third-party and are governed by 6 | # separate terms of service, privacy policy, and support 7 | # documentation. 8 | 9 | name: Upload Python Package 10 | 11 | on: 12 | release: 13 | types: [published] 14 | 15 | permissions: 16 | contents: read 17 | 18 | jobs: 19 | release-build: 20 | runs-on: ubuntu-latest 21 | 22 | steps: 23 | - uses: actions/checkout@v4 24 | 25 | - uses: actions/setup-python@v5 26 | with: 27 | python-version: "3.x" 28 | 29 | - name: Build release distributions 30 | run: | 31 | # NOTE: put your own distribution build steps here. 32 | python -m pip install build 33 | python -m build 34 | 35 | - name: Upload distributions 36 | uses: actions/upload-artifact@v4 37 | with: 38 | name: release-dists 39 | path: dist/ 40 | 41 | pypi-publish: 42 | runs-on: ubuntu-latest 43 | needs: 44 | - release-build 45 | permissions: 46 | # IMPORTANT: this permission is mandatory for trusted publishing 47 | id-token: write 48 | 49 | # Dedicated environments with protections for publishing are strongly recommended. 50 | # For more information, see: https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules 51 | environment: 52 | name: pypi 53 | # OPTIONAL: uncomment and update to include your PyPI project URL in the deployment status: 54 | # url: https://pypi.org/p/YOURPROJECT 55 | # 56 | # ALTERNATIVE: if your GitHub Release name is the PyPI project version string 57 | # ALTERNATIVE: exactly, uncomment the following line instead: 58 | # url: https://pypi.org/project/YOURPROJECT/${{ github.event.release.name }} 59 | 60 | steps: 61 | - name: Retrieve release distributions 62 | uses: actions/download-artifact@v4 63 | with: 64 | name: release-dists 65 | path: dist/ 66 | 67 | - name: Publish release distributions to PyPI 68 | uses: pypa/gh-action-pypi-publish@release/v1 69 | with: 70 | packages-dir: dist/ 71 | -------------------------------------------------------------------------------- /test_bright_data.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """ 3 | Test file for Bright Data integration with fast-flights 4 | Requires BRIGHT_DATA_API_KEY environment variable to be set 5 | """ 6 | 7 | import os 8 | from fast_flights import create_filter, get_flights_from_filter, FlightData, Passengers 9 | 10 | # Check for required environment variable 11 | if not os.environ.get("BRIGHT_DATA_API_KEY"): 12 | print("Error: BRIGHT_DATA_API_KEY environment variable is required") 13 | print("Usage: export BRIGHT_DATA_API_KEY='your-api-key'") 14 | print("\nOptional environment variables:") 15 | print(" BRIGHT_DATA_API_URL (defaults to: https://api.brightdata.com/request)") 16 | print(" BRIGHT_DATA_SERP_ZONE (defaults to: serp_api1)") 17 | exit(1) 18 | 19 | # Create a filter for testing 20 | filter = create_filter( 21 | flight_data=[ 22 | FlightData( 23 | date="2025-08-06", 24 | from_airport="JFK", # New York 25 | to_airport="LAX", # Los Angeles 26 | ), 27 | FlightData( 28 | date="2025-08-10", 29 | from_airport="LAX", 30 | to_airport="JFK", 31 | ) 32 | ], 33 | trip="round-trip", 34 | passengers=Passengers(adults=1, children=0, infants_in_seat=0, infants_on_lap=0), 35 | seat="economy", 36 | max_stops=None, # Any number of stops 37 | ) 38 | 39 | print("Testing Bright Data integration...") 40 | print(f"Filter URL: https://www.google.com/travel/flights?tfs={filter.as_b64().decode('utf-8')}") 41 | print(f"Using Bright Data API URL: {os.environ.get('BRIGHT_DATA_API_URL', 'https://api.brightdata.com/request')}") 42 | print(f"Using zone: {os.environ.get('BRIGHT_DATA_SERP_ZONE', 'serp_api1')}") 43 | print("-" * 80) 44 | 45 | try: 46 | # Get flights using Bright Data mode 47 | result = get_flights_from_filter(filter, mode="bright-data") 48 | 49 | print(f"Current price: {result.current_price}") 50 | print(f"Found {len(result.flights)} flights\n") 51 | 52 | # Display flight results 53 | for i, flight in enumerate(result.flights, 1): 54 | print(f"Flight {i}:") 55 | print(f" Airline: {flight.name}") 56 | print(f" Departure: {flight.departure}") 57 | print(f" Arrival: {flight.arrival}") 58 | print(f" Duration: {flight.duration}") 59 | print(f" Stops: {flight.stops}") 60 | print(f" Price: {flight.price}") 61 | if flight.delay: 62 | print(f" Delay: {flight.delay}") 63 | if flight.is_best: 64 | print(" ⭐ Best flight") 65 | print() 66 | 67 | except Exception as e: 68 | print(f"Error occurred: {type(e).__name__}: {e}") 69 | import traceback 70 | traceback.print_exc() -------------------------------------------------------------------------------- /fast_flights/flights_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # NO CHECKED-IN PROTOBUF GENCODE 4 | # source: flights.proto 5 | # Protobuf Python Version: 6.30.2 6 | """Generated protocol buffer code.""" 7 | from google.protobuf import descriptor as _descriptor 8 | from google.protobuf import descriptor_pool as _descriptor_pool 9 | from google.protobuf import runtime_version as _runtime_version 10 | from google.protobuf import symbol_database as _symbol_database 11 | from google.protobuf.internal import builder as _builder 12 | _runtime_version.ValidateProtobufRuntimeVersion( 13 | _runtime_version.Domain.PUBLIC, 14 | 6, 15 | 30, 16 | 2, 17 | '', 18 | 'flights.proto' 19 | ) 20 | # @@protoc_insertion_point(imports) 21 | 22 | _sym_db = _symbol_database.Default() 23 | 24 | 25 | 26 | 27 | DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rflights.proto\"\x1a\n\x07\x41irport\x12\x0f\n\x07\x61irport\x18\x02 \x01(\t\"|\n\nFlightData\x12\x0c\n\x04\x64\x61te\x18\x02 \x01(\t\x12\x1d\n\x0b\x66rom_flight\x18\r \x01(\x0b\x32\x08.Airport\x12\x1b\n\tto_flight\x18\x0e \x01(\x0b\x32\x08.Airport\x12\x16\n\tmax_stops\x18\x05 \x01(\x05H\x00\x88\x01\x01\x42\x0c\n\n_max_stops\"k\n\x04Info\x12\x19\n\x04\x64\x61ta\x18\x03 \x03(\x0b\x32\x0b.FlightData\x12\x13\n\x04seat\x18\t \x01(\x0e\x32\x05.Seat\x12\x1e\n\npassengers\x18\x08 \x03(\x0e\x32\n.Passenger\x12\x13\n\x04trip\x18\x13 \x01(\x0e\x32\x05.Trip\"(\n\x05Price\x12\r\n\x05price\x18\x01 \x01(\x05\x12\x10\n\x08\x63urrency\x18\x03 \x01(\t\":\n\x10ItinerarySummary\x12\x0f\n\x07\x66lights\x18\x02 \x01(\t\x12\x15\n\x05price\x18\x03 \x01(\x0b\x32\x06.Price*S\n\x04Seat\x12\x10\n\x0cUNKNOWN_SEAT\x10\x00\x12\x0b\n\x07\x45\x43ONOMY\x10\x01\x12\x13\n\x0fPREMIUM_ECONOMY\x10\x02\x12\x0c\n\x08\x42USINESS\x10\x03\x12\t\n\x05\x46IRST\x10\x04*E\n\x04Trip\x12\x10\n\x0cUNKNOWN_TRIP\x10\x00\x12\x0e\n\nROUND_TRIP\x10\x01\x12\x0b\n\x07ONE_WAY\x10\x02\x12\x0e\n\nMULTI_CITY\x10\x03*_\n\tPassenger\x12\x15\n\x11UNKNOWN_PASSENGER\x10\x00\x12\t\n\x05\x41\x44ULT\x10\x01\x12\t\n\x05\x43HILD\x10\x02\x12\x12\n\x0eINFANT_IN_SEAT\x10\x03\x12\x11\n\rINFANT_ON_LAP\x10\x04\x62\x06proto3') 28 | 29 | _globals = globals() 30 | _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) 31 | _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flights_pb2', _globals) 32 | if not _descriptor._USE_C_DESCRIPTORS: 33 | DESCRIPTOR._loaded_options = None 34 | _globals['_SEAT']._serialized_start=382 35 | _globals['_SEAT']._serialized_end=465 36 | _globals['_TRIP']._serialized_start=467 37 | _globals['_TRIP']._serialized_end=536 38 | _globals['_PASSENGER']._serialized_start=538 39 | _globals['_PASSENGER']._serialized_end=633 40 | _globals['_AIRPORT']._serialized_start=17 41 | _globals['_AIRPORT']._serialized_end=43 42 | _globals['_FLIGHTDATA']._serialized_start=45 43 | _globals['_FLIGHTDATA']._serialized_end=169 44 | _globals['_INFO']._serialized_start=171 45 | _globals['_INFO']._serialized_end=278 46 | _globals['_PRICE']._serialized_start=280 47 | _globals['_PRICE']._serialized_end=320 48 | _globals['_ITINERARYSUMMARY']._serialized_start=322 49 | _globals['_ITINERARYSUMMARY']._serialized_end=380 50 | # @@protoc_insertion_point(module_scope) 51 | -------------------------------------------------------------------------------- /docs/filters.md: -------------------------------------------------------------------------------- 1 | # :material-filter: Filters 2 | Filters are used to generate the `tfs` query parameter. In short, you make queries with filters. 3 | 4 | With the new API, there's no need to use the `create_filter()` function, as you can use `get_flights()` and add the filter parameters directly. 5 | 6 | ```python 7 | get_flights(..., fetch_mode="fallback") 8 | 9 | # is equivalent to: 10 | 11 | filter = create_filter(...) 12 | get_flights_from_filter(filter, mode="fallback") 13 | ``` 14 | 15 | ## FlightData 16 | This specifies the general flight data: the date, departure & arrival airport, and the maximum number of stops (untested). 17 | 18 | ```python 19 | data = FlightData( 20 | date="2025-01-01", 21 | from_airport="TPE", 22 | to_airport="MYJ", 23 | airlines=["DL", "AA", "STAR_ALLIANCE"], # optional 24 | max_stops=10 # optional 25 | ) 26 | ``` 27 | 28 | Note that for `round-trip` trips, you'll need to specify more than one `FlightData` object for the `flight_data` parameter. 29 | 30 | The values in `airlines` has to be a valid 2 letter IATA airline code, case insensitive. They can also be one of `SKYTEAM`, `STAR_ALLIANCE` or `ONEWORLD`. Note that the server side currently ignores the `airlines` parameter added to the `FlightData`s of all the flights which is not the first flight. In other words, if you have two `FlightData`s for a `round-trip` trip: JFK-MIA and MIA-JFK, and you add `airlines` parameter to both `FlightData`s, only the first `airlines` will be considered for the whole search. So technically `airlines` could be a better fit as a parameter for `TFSData` but adding to `FlightData` is the correct usage because if the backend changes and brings more flexibility to filter with different airlines for different flight segments in the future, which it should, this will come in handy. 31 | 32 | ## Trip 33 | Either one of: 34 | 35 | - `round-trip` 36 | - `one-way` 37 | - :material-alert: `multi-city` (unimplemented) 38 | 39 | ...can be used. 40 | 41 | If you're using `round-trip`, see [FlightData](#flightdata). 42 | 43 | ## Seat 44 | Now it's time to see who's the people who got $$$ dollar signs in their names. Either one of: 45 | 46 | - `economy` 47 | - `premium-economy` 48 | - `business` 49 | - `first` 50 | 51 | ...can be used, sorted from the least to the most expensive. 52 | 53 | ## Passengers 54 | A family trip? No problem. Just tell us how many adults, children & infants are there. 55 | 56 | There are some checks made, though: 57 | 58 | - The sum of `adults`, `children`, `infants_in_seat` and `infants_on_lap` must not exceed `9`. 59 | - You must have at least one adult per infant on lap (which frankly, is easy to forget). 60 | 61 | ```python 62 | passengers = Passengers( 63 | adults=2, 64 | children=1, 65 | infants_in_seat=0, 66 | infants_on_lap=0 67 | ) 68 | ``` 69 | 70 | ## Example 71 | Here's a simple example on how to create a filter: 72 | 73 | ```python 74 | filter: TFSData = create_filter( 75 | flight_data=[ 76 | FlightData( 77 | date="2025-01-01", 78 | from_airport="TPE", 79 | to_airport="MYJ", 80 | ) 81 | ], 82 | trip="round-trip", 83 | passengers=Passengers(adults=2, children=1, infants_in_seat=0, infants_on_lap=0), 84 | seat="economy", 85 | max_stops=1, 86 | ) 87 | 88 | filter.as_b64() # Base64-encoded (bytes) 89 | filter.to_string() # Serialize to string 90 | ``` 91 | -------------------------------------------------------------------------------- /example.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import json 3 | from fast_flights import FlightData, Passengers, create_filter, get_flights_from_filter 4 | 5 | def flight_to_dict(flight): 6 | return { 7 | "is_best": getattr(flight, 'is_best', None), 8 | "name": getattr(flight, 'name', None), 9 | "departure": getattr(flight, 'departure', None), 10 | "arrival": getattr(flight, 'arrival', None), 11 | "arrival_time_ahead": getattr(flight, 'arrival_time_ahead', None), 12 | "duration": getattr(flight, 'duration', None), 13 | "stops": getattr(flight, 'stops', None), 14 | "delay": getattr(flight, 'delay', None), 15 | "price": getattr(flight, 'price', None), 16 | } 17 | 18 | def result_to_dict(result): 19 | return { 20 | "current_price": getattr(result, 'current_price', None), 21 | "flights": [flight_to_dict(flight) for flight in getattr(result, 'flights', [])] 22 | } 23 | 24 | def main(): 25 | # Argument parser for command-line input 26 | parser = argparse.ArgumentParser(description="Flight Price Finder") 27 | parser.add_argument('--origin', required=True, help="Origin airport code") 28 | parser.add_argument('--destination', required=True, help="Destination airport code") 29 | parser.add_argument('--depart_date', required=True, help="Beginning trip date (YYYY-MM-DD)") 30 | parser.add_argument('--return_date', required=True, help="Ending trip date (YYYY-MM-DD)") 31 | parser.add_argument('--adults', type=int, default=1, help="Number of adult passengers") 32 | parser.add_argument('--type', type=str, default="economy", help="Fare class (economy, premium-economy, business or first)") 33 | parser.add_argument('--max_stops', type=int, help="Maximum number of stops (optional, [0|1|2])") 34 | parser.add_argument('--fetch_mode', type=str, default="common", help="Fetch mode: common, fallback, force-fallback, local, bright-data") 35 | 36 | 37 | args = parser.parse_args() 38 | 39 | # Create a new filter 40 | filter = create_filter( 41 | flight_data=[ 42 | FlightData( 43 | date=args.depart_date, # Date of departure for outbound flight 44 | from_airport=args.origin, 45 | to_airport=args.destination 46 | ), 47 | FlightData( 48 | date=args.return_date, # Date of departure for return flight 49 | from_airport=args.destination, 50 | to_airport=args.origin 51 | ), 52 | ], 53 | trip="round-trip", # Trip (round-trip, one-way) 54 | seat=args.type, # Seat (economy, premium-economy, business or first) 55 | passengers=Passengers( 56 | adults=args.adults, 57 | children=0, 58 | infants_in_seat=0, 59 | infants_on_lap=0 60 | ), 61 | max_stops=args.max_stops 62 | ) 63 | 64 | b64 = filter.as_b64().decode('utf-8') 65 | print( 66 | "https://www.google.com/travel/flights?tfs=%s" % b64 67 | ) 68 | 69 | # Get flights with the filter 70 | result = get_flights_from_filter(filter, 71 | mode=args.fetch_mode 72 | ) 73 | 74 | try: 75 | # Manually convert the result to a dictionary before serialization 76 | result_dict = result_to_dict(result) 77 | print(json.dumps(result_dict, indent=4)) 78 | except TypeError as e: 79 | print("Serialization to JSON failed. Raw result output:") 80 | print(result) 81 | print("Error details:", str(e)) 82 | 83 | # Print price information 84 | print("The price is currently", result.current_price) 85 | 86 | if __name__ == "__main__": 87 | main() 88 | -------------------------------------------------------------------------------- /fast_flights/primp.pyi: -------------------------------------------------------------------------------- 1 | from typing import Any, Dict, Optional, Tuple 2 | 3 | class Client: 4 | """Initializes an HTTP client that can impersonate web browsers. 5 | 6 | Args: 7 | auth (tuple, optional): A tuple containing the username and password for basic authentication. Default is None. 8 | auth_bearer (str, optional): Bearer token for authentication. Default is None. 9 | params (dict, optional): Default query parameters to include in all requests. Default is None. 10 | headers (dict, optional): Default headers to send with requests. If `impersonate` is set, this will be ignored. 11 | cookies (dict, optional): - An optional map of cookies to send with requests as the `Cookie` header. 12 | timeout (float, optional): HTTP request timeout in seconds. Default is 30. 13 | cookie_store (bool, optional): Enable a persistent cookie store. Received cookies will be preserved and included 14 | in additional requests. Default is True. 15 | referer (bool, optional): Enable or disable automatic setting of the `Referer` header. Default is True. 16 | proxy (str, optional): Proxy URL for HTTP requests. Example: "socks5://127.0.0.1:9150". Default is None. 17 | impersonate (str, optional): Entity to impersonate. Example: "chrome_124". Default is None. 18 | Chrome: "chrome_100","chrome_101","chrome_104","chrome_105","chrome_106","chrome_107","chrome_108", 19 | "chrome_109","chrome_114","chrome_116","chrome_117","chrome_118","chrome_119","chrome_120", 20 | "chrome_123","chrome_124","chrome_126","chrome_127","chrome_128" 21 | Safari: "safari_ios_16.5","safari_ios_17.2","safari_ios_17.4.1","safari_15.3","safari_15.5","safari_15.6.1", 22 | "safari_16","safari_16.5","safari_17.0","safari_17.2.1","safari_17.4.1","safari_17.5" 23 | OkHttp: "okhttp_3.9","okhttp_3.11","okhttp_3.13","okhttp_3.14","okhttp_4.9","okhttp_4.10","okhttp_5" 24 | Edge: "edge_101","edge_122","edge_127" 25 | follow_redirects (bool, optional): Whether to follow redirects. Default is True. 26 | max_redirects (int, optional): Maximum redirects to follow. Default 20. Applies if `follow_redirects` is True. 27 | verify (bool, optional): Verify SSL certificates. Default is True. 28 | ca_cert_file (str, optional): Path to CA certificate store. Default is None. 29 | http1 (bool, optional): Use only HTTP/1.1. Default is None. 30 | http2 (bool, optional): Use only HTTP/2. Default is None. 31 | 32 | """ 33 | 34 | def __init__( 35 | self, 36 | auth: Optional[Tuple[str, Optional[str]]] = None, 37 | auth_bearer: Optional[str] = None, 38 | params: Optional[Dict[str, str]] = None, 39 | headers: Optional[Dict[str, str]] = None, 40 | cookies: Optional[Dict[str, str]] = None, 41 | timeout: Optional[float] = 30, 42 | cookie_store: Optional[bool] = True, 43 | referer: Optional[bool] = True, 44 | proxy: Optional[str] = None, 45 | impersonate: Optional[str] = None, 46 | follow_redirects: Optional[bool] = True, 47 | max_redirects: Optional[int] = 20, 48 | verify: Optional[bool] = True, 49 | ca_cert_file: Optional[str] = None, 50 | http1: Optional[bool] = None, 51 | http2: Optional[bool] = None, 52 | ): ... 53 | def get( 54 | self, 55 | url: str, 56 | params: Optional[Dict[str, str]] = None, 57 | headers: Optional[Dict[str, str]] = None, 58 | cookies: Optional[Dict[str, str]] = None, 59 | auth: Optional[Tuple[str, Optional[str]]] = None, 60 | auth_bearer: Optional[str] = None, 61 | timeout: Optional[float] = 30, 62 | ) -> "Response": 63 | """Performs a GET request to the specified URL. 64 | 65 | Args: 66 | url (str): The URL to which the request will be made. 67 | params (Optional[Dict[str, str]]): A map of query parameters to append to the URL. Default is None. 68 | headers (Optional[Dict[str, str]]): A map of HTTP headers to send with the request. Default is None. 69 | cookies (Optional[Dict[str, str]]): - An optional map of cookies to send with requests as the `Cookie` header. 70 | auth (Optional[Tuple[str, Optional[str]]]): A tuple containing the username and an optional password 71 | for basic authentication. Default is None. 72 | auth_bearer (Optional[str]): A string representing the bearer token for bearer token authentication. Default is None. 73 | timeout (Optional[float]): The timeout for the request in seconds. Default is 30. 74 | 75 | """ 76 | 77 | def post( 78 | self, 79 | url: str, 80 | params: Optional[Dict[str, str]] = None, 81 | headers: Optional[Dict[str, str]] = None, 82 | cookies: Optional[Dict[str, str]] = None, 83 | content: Optional[bytes] = None, 84 | data: Optional[Dict[str, str]] = None, 85 | json: Any = None, 86 | files: Optional[Dict[str, bytes]] = None, 87 | auth: Optional[Tuple[str, Optional[str]]] = None, 88 | auth_bearer: Optional[str] = None, 89 | timeout: Optional[float] = 30, 90 | ): 91 | """Performs a POST request to the specified URL. 92 | 93 | Args: 94 | url (str): The URL to which the request will be made. 95 | params (Optional[Dict[str, str]]): A map of query parameters to append to the URL. Default is None. 96 | headers (Optional[Dict[str, str]]): A map of HTTP headers to send with the request. Default is None. 97 | cookies (Optional[Dict[str, str]]): - An optional map of cookies to send with requests as the `Cookie` header. 98 | content (Optional[bytes]): The content to send in the request body as bytes. Default is None. 99 | data (Optional[Dict[str, str]]): The form data to send in the request body. Default is None. 100 | json (Any): A JSON serializable object to send in the request body. Default is None. 101 | files (Optional[Dict[str, bytes]]): A map of file fields to file contents to be sent as multipart/form-data. Default is None. 102 | auth (Optional[Tuple[str, Optional[str]]]): A tuple containing the username and an optional password 103 | for basic authentication. Default is None. 104 | auth_bearer (Optional[str]): A string representing the bearer token for bearer token authentication. Default is None. 105 | timeout (Optional[float]): The timeout for the request in seconds. Default is 30. 106 | """ 107 | 108 | class Response: 109 | content: str 110 | cookies: Dict[str, str] 111 | headers: Dict[str, str] 112 | status_code: int 113 | text: str 114 | text_markdown: str 115 | text_plain: str 116 | text_rich: str 117 | url: str 118 | -------------------------------------------------------------------------------- /fast_flights/core.py: -------------------------------------------------------------------------------- 1 | import re 2 | import json 3 | from typing import List, Literal, Optional, Union, overload 4 | 5 | from selectolax.lexbor import LexborHTMLParser, LexborNode 6 | 7 | from .decoder import DecodedResult, ResultDecoder 8 | from .schema import Flight, Result 9 | from .flights_impl import FlightData, Passengers 10 | from .filter import TFSData 11 | from .fallback_playwright import fallback_playwright_fetch 12 | from .bright_data_fetch import bright_data_fetch 13 | from .primp import Client, Response 14 | 15 | 16 | DataSource = Literal['html', 'js'] 17 | 18 | def fetch(params: dict) -> Response: 19 | client = Client(impersonate="chrome_126", verify=False) 20 | res = client.get("https://www.google.com/travel/flights", params=params) 21 | assert res.status_code == 200, f"{res.status_code} Result: {res.text_markdown}" 22 | return res 23 | 24 | @overload 25 | def get_flights_from_filter( 26 | filter: TFSData, 27 | currency: str = "", 28 | *, 29 | mode: Literal["common", "fallback", "force-fallback", "local", "bright-data"] = "common", 30 | data_source: Literal['js'] = ..., 31 | ) -> Union[DecodedResult, None]: ... 32 | 33 | @overload 34 | def get_flights_from_filter( 35 | filter: TFSData, 36 | currency: str = "", 37 | *, 38 | mode: Literal["common", "fallback", "force-fallback", "local", "bright-data"] = "common", 39 | data_source: Literal['html'], 40 | ) -> Result: ... 41 | 42 | def get_flights_from_filter( 43 | filter: TFSData, 44 | currency: str = "", 45 | *, 46 | mode: Literal["common", "fallback", "force-fallback", "local", "bright-data"] = "common", 47 | data_source: DataSource = 'html', 48 | ) -> Union[Result, DecodedResult, None]: 49 | data = filter.as_b64() 50 | 51 | params = { 52 | "tfs": data.decode("utf-8"), 53 | "hl": "en", 54 | "tfu": "EgQIABABIgA", 55 | "curr": currency, 56 | } 57 | 58 | if mode in {"common", "fallback"}: 59 | try: 60 | res = fetch(params) 61 | except AssertionError as e: 62 | if mode == "fallback": 63 | res = fallback_playwright_fetch(params) 64 | else: 65 | raise e 66 | 67 | elif mode == "local": 68 | from .local_playwright import local_playwright_fetch 69 | 70 | res = local_playwright_fetch(params) 71 | 72 | elif mode == "bright-data": 73 | res = bright_data_fetch(params) 74 | 75 | else: 76 | res = fallback_playwright_fetch(params) 77 | 78 | try: 79 | return parse_response(res, data_source) 80 | except RuntimeError as e: 81 | if mode == "fallback": 82 | return get_flights_from_filter(filter, mode="force-fallback") 83 | raise e 84 | 85 | 86 | def get_flights( 87 | *, 88 | flight_data: List[FlightData], 89 | trip: Literal["round-trip", "one-way", "multi-city"], 90 | passengers: Passengers, 91 | seat: Literal["economy", "premium-economy", "business", "first"], 92 | fetch_mode: Literal["common", "fallback", "force-fallback", "local", "bright-data"] = "common", 93 | max_stops: Optional[int] = None, 94 | data_source: DataSource = 'html', 95 | ) -> Union[Result, DecodedResult, None]: 96 | return get_flights_from_filter( 97 | TFSData.from_interface( 98 | flight_data=flight_data, 99 | trip=trip, 100 | passengers=passengers, 101 | seat=seat, 102 | max_stops=max_stops, 103 | ), 104 | mode=fetch_mode, 105 | data_source=data_source, 106 | ) 107 | 108 | 109 | def parse_response( 110 | r: Response, 111 | data_source: DataSource, 112 | *, 113 | dangerously_allow_looping_last_item: bool = False, 114 | ) -> Union[Result, DecodedResult, None]: 115 | class _blank: 116 | def text(self, *_, **__): 117 | return "" 118 | 119 | def iter(self): 120 | return [] 121 | 122 | blank = _blank() 123 | 124 | def safe(n: Optional[LexborNode]): 125 | return n or blank 126 | 127 | parser = LexborHTMLParser(r.text) 128 | 129 | if data_source == 'js': 130 | script = parser.css_first(r'script.ds\:1').text() 131 | 132 | match = re.search(r'^.*?\{.*?data:(\[.*\]).*\}', script) 133 | assert match, 'Malformed js data, cannot find script data' 134 | data = json.loads(match.group(1)) 135 | return ResultDecoder.decode(data) if data is not None else None 136 | 137 | flights = [] 138 | 139 | for i, fl in enumerate(parser.css('div[jsname="IWWDBc"], div[jsname="YdtKid"]')): 140 | is_best_flight = i == 0 141 | 142 | for item in fl.css("ul.Rk10dc li")[ 143 | : (None if dangerously_allow_looping_last_item or i == 0 else -1) 144 | ]: 145 | # Flight name 146 | name = safe(item.css_first("div.sSHqwe.tPgKwe.ogfYpf span")).text( 147 | strip=True 148 | ) 149 | 150 | # Get departure & arrival time 151 | dp_ar_node = item.css("span.mv1WYe div") 152 | try: 153 | departure_time = dp_ar_node[0].text(strip=True) 154 | arrival_time = dp_ar_node[1].text(strip=True) 155 | except IndexError: 156 | # sometimes this is not present 157 | departure_time = "" 158 | arrival_time = "" 159 | 160 | # Get arrival time ahead 161 | time_ahead = safe(item.css_first("span.bOzv6")).text() 162 | 163 | # Get duration 164 | duration = safe(item.css_first("li div.Ak5kof div")).text() 165 | 166 | # Get flight stops 167 | stops = safe(item.css_first(".BbR8Ec .ogfYpf")).text() 168 | 169 | # Get delay 170 | delay = safe(item.css_first(".GsCCve")).text() or None 171 | 172 | # Get prices 173 | price = safe(item.css_first(".YMlIz.FpEdX")).text() or "0" 174 | 175 | # Stops formatting 176 | try: 177 | stops_fmt = 0 if stops == "Nonstop" else int(stops.split(" ", 1)[0]) 178 | except ValueError: 179 | stops_fmt = "Unknown" 180 | 181 | flights.append( 182 | { 183 | "is_best": is_best_flight, 184 | "name": name, 185 | "departure": " ".join(departure_time.split()), 186 | "arrival": " ".join(arrival_time.split()), 187 | "arrival_time_ahead": time_ahead, 188 | "duration": duration, 189 | "stops": stops_fmt, 190 | "delay": delay, 191 | "price": price.replace(",", ""), 192 | } 193 | ) 194 | 195 | current_price = safe(parser.css_first("span.gOatQ")).text() 196 | if not flights: 197 | raise RuntimeError("No flights found:\n{}".format(r.text_markdown)) 198 | 199 | return Result(current_price=current_price, flights=[Flight(**fl) for fl in flights]) # type: ignore 200 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # :material-airplane-search: Fast Flights 2 | A fast, robust Google Flights scraper (API) for Python. (Probably) 3 | 4 | `fast-flights` uses Base64-encoded [Protobuf](https://developers.google.com/protocol-buffers) strings to generate the **`tfs` query parameter**, which stores all the information for a lookup request. We then parse the HTML content and extract the info we need using `selectolax`. 5 | 6 | ```sh 7 | pip install fast-flights 8 | ``` 9 | 10 | ## Getting started 11 | Here's `fast-flights` in 3 steps: 12 | 13 | 1. **Import** the package 14 | 2. Add the **filters** 15 | 3. **Search** for flights 16 | 17 | How simple is that? (...and beginner-friendly, too!) 18 | 19 | ```python 20 | from fast_flights import FlightData, Passengers, Result, get_flights 21 | 22 | result: Result = get_flights( 23 | flight_data=[ 24 | FlightData(date="2025-01-01", from_airport="TPE", to_airport="MYJ")# (1)! 25 | ], 26 | trip="one-way",# (2)! 27 | seat="economy",# (3)! 28 | passengers=Passengers(adults=2, children=1, infants_in_seat=0, infants_on_lap=0),# (4)! 29 | fetch_mode="fallback",#(5)! 30 | ) 31 | 32 | print(result) 33 | ``` 34 | 35 | 1. :material-airport: This specifies the (desired) date of departure for the outbound flight. Make sure to change the date! 36 | 2. :fontawesome-solid-person-walking-luggage: This specifies the trip type (`round-trip` or `one-way`). Note that `multi-city` is **not yet** supported. Note that if you're having a `round-trip`, you need to add more than one item of flight data (in other words, 2+). 37 | 3. :material-seat: Money-spending time! This specifies the seat type, which is `economy`, `premium-economy`, `business`, or `first`. 38 | 4. :fontawesome-solid-people-line: Nice interface, eh? This specifies the number of a specific passenger type. 39 | 5. :fontawesome-solid-person-falling: Sometimes, the data is built on demand on the client-side, while the core of `fast-flights` is built around scrapers from the ground up. We support fallbacks that run Playwright serverless functions to fetch for us instead. You could either specify `common` (default), `fallback` (recommended), or `force-fallback` (100% serverless Playwright). You do not need to install Playwright in order for this to work. 40 | 41 | ## How it's made 42 | 43 | The other day, I was making a chat-interface-based trip recommendation app and wanted to add a feature that can search for flights available for booking. My personal choice is definitely [Google Flights](https://flights.google.com) since Google always has the best and most organized data on the web. Therefore, I searched for APIs on Google. 44 | 45 | > 🔎 **Search**
46 | > google flights api 47 | 48 | The results? Bad. It seems like they discontinued this service and it now lives in the Graveyard of Google. 49 | 50 | > 🧏‍♂️ duffel.com
51 | > Google Flights API: How did it work & what happened to it? 52 | > 53 | > The Google Flights API offered developers access to aggregated airline data, including flight times, availability, and prices. Over a decade ago, Google announced the acquisition of ITA Software Inc. which it used to develop its API. **However, in 2018, Google ended access to the public-facing API and now only offers access through the QPX enterprise product**. 54 | 55 | That's awful! I've also looked for free alternatives but their rate limits and pricing are just 😬 (not a good fit/deal for everyone). 56 | 57 |
58 | 59 | However, Google Flights has their UI – [flights.google.com](https://flights.google.com). So, maybe I could just use Developer Tools to log the requests made and just replicate all of that? Undoubtedly not! Their requests are just full of numbers and unreadable text, so that's not the solution. 60 | 61 | Perhaps, we could scrape it? I mean, Google allowed many companies like [Serpapi](https://google.com/search?q=serpapi) to scrape their web just pretending like nothing happened... So let's scrape our own. 62 | 63 | > 🔎 **Search**
64 | > google flights api scraper pypi 65 | 66 | Excluding the ones that are not active, I came across [hugoglvs/google-flights-scraper](https://pypi.org/project/google-flights-scraper) on Pypi. I thought to myself: "aint no way this is the solution!" 67 | 68 | I checked hugoglvs's code on [GitHub](https://github.com/hugoglvs/google-flights-scraper), and I immediately detected "playwright," my worst enemy. One word can describe it well: slow. Two words? Extremely slow. What's more, it doesn't even run on the **🗻 Edge** because of configuration errors, missing libraries... etc. I could just reverse [try.playwright.tech](https://try.playwright.tech) and use a better environment, but that's just too risky if they added Cloudflare as an additional security barrier 😳. 69 | 70 | Life tells me to never give up. Let's just take a look at their URL params... 71 | 72 | ```markdown 73 | https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI0LTA1LTI4agcIARIDVFBFcgcIARIDTVlKGh4SCjIwMjQtMDUtMzBqBwgBEgNNWUpyBwgBEgNUUEVAAUgBcAGCAQsI____________AZgBAQ&hl=en 74 | ``` 75 | 76 | | Param | Content | My past understanding | 77 | |-------|---------|-----------------------| 78 | | hl | en | Sets the language. | 79 | | tfs | CBwQAhoeEgoyMDI0LTA1LTI4agcIARID… | What is this???? 🤮🤮 | 80 | 81 | I removed the `?tfs=` parameter and found out that this is the control of our request! And it looks so base64-y. 82 | 83 | If we decode it to raw text, we can still see the dates, but we're not quite there — there's too much unwanted Unicode text. 84 | 85 | Or maybe it's some kind of a **data-storing method** Google uses? What if it's something like JSON? Let's look it up. 86 | 87 | > 🔎 **Search**
88 | > google's json alternative 89 | 90 | > 🐣 **Result**
91 | > Solution: The Power of **Protocol Buffers** 92 | > 93 | > LinkedIn turned to Protocol Buffers, often referred to as **protobuf**, a binary serialization format developed by Google. The key advantage of Protocol Buffers is its efficiency, compactness, and speed, making it significantly faster than JSON for serialization and deserialization. 94 | 95 | Gotcha, Protobuf! Let's feed it to an online decoder and see how it does: 96 | 97 | > 🔎 **Search**
98 | > protobuf decoder 99 | 100 | > 🐣 **Result**
101 | > [protobuf-decoder.netlify.app](https://protobuf-decoder.netlify.app) 102 | 103 | I then pasted the Base64-encoded string to the decoder and no way! It DID return valid data! 104 | 105 | ![annotated, Protobuf Decoder screenshot](https://github.com/AWeirdDev/flights/assets/90096971/77dfb097-f961-4494-be88-3640763dbc8c) 106 | 107 | I immediately recognized the values — that's my data, that's my query! 108 | 109 | So, I wrote some simple Protobuf code to decode the data. 110 | 111 | ```protobuf 112 | syntax = "proto3" 113 | 114 | message Airport { 115 | string name = 2; 116 | } 117 | 118 | message FlightInfo { 119 | string date = 2; 120 | Airport dep_airport = 13; 121 | Airport arr_airport = 14; 122 | } 123 | 124 | message GoogleSucks { 125 | repeated FlightInfo = 3; 126 | } 127 | ``` 128 | 129 | It works! Now, I won't consider myself an "experienced Protobuf developer" but rather a complete beginner. 130 | 131 | I have no idea what I wrote but... it worked! And here it is, `fast-flights`. 132 | 133 | 134 | ## Contributing 135 | 136 | Feel free to contribute! Though I won't be online that often, I'll try my best to answer all the whats, hows & WTFs. 137 | 138 | :heart: Acknowledgements: 139 | 140 | - @d2x made their first contribution in #7 141 | - @PTruscott made their first contribution in #19 142 | - @artiom-matvei made their first contribution in #20 143 | - @esalonico fixed v2.0 currency issues in #25 144 | - @NickJLange helped add a LICENSE file in #38 145 | - @Lim0H (#39) and @andreaiorio (#41) fixed `primp` client issues. 146 | - @kiinami (#43) added local Playwright support 147 | 148 | -------------------------------------------------------------------------------- /fast_flights/flights_impl.py: -------------------------------------------------------------------------------- 1 | """Typed implementation of flights_pb2.py""" 2 | 3 | import base64 4 | from dataclasses import dataclass 5 | from typing import Any, List, Optional, TYPE_CHECKING, Literal, Union 6 | 7 | from . import flights_pb2 as PB 8 | from ._generated_enum import Airport 9 | 10 | if TYPE_CHECKING: 11 | PB: Any 12 | 13 | AIRLINE_ALLIANCES = ["SKYTEAM", "STAR_ALLIANCE", "ONEWORLD"] 14 | 15 | class FlightData: 16 | """Represents flight data. 17 | 18 | Args: 19 | date (str): Date. 20 | from_airport (str): Departure (airport). Where from? 21 | to_airport (str): Arrival (airport). Where to? 22 | max_stops (int, optional): Maximum number of stops. Default is None. 23 | airlines (List[str], optional): Airlines this flight should be taken with. Default is None. 24 | """ 25 | 26 | __slots__ = ("date", "from_airport", "to_airport", "max_stops", "airlines") 27 | date: str 28 | from_airport: str 29 | to_airport: str 30 | max_stops: Optional[int] 31 | airlines: Optional[List[str]] 32 | 33 | def __init__( 34 | self, 35 | *, 36 | date: str, 37 | from_airport: Union[Airport, str], 38 | to_airport: Union[Airport, str], 39 | max_stops: Optional[int] = None, 40 | airlines: Optional[List[str]] = None, 41 | ): 42 | self.date = date 43 | self.from_airport = ( 44 | from_airport.value if isinstance(from_airport, Airport) else from_airport 45 | ) 46 | self.to_airport = ( 47 | to_airport.value if isinstance(to_airport, Airport) else to_airport 48 | ) 49 | self.max_stops = max_stops 50 | # TODO: All the list of airlines should technically be added to ._generated_enum like Airports 51 | # but I don't know how to find the comprehensive list of airlines now. 52 | if airlines is not None: 53 | self.airlines = [] 54 | for airline in airlines: 55 | airline = airline.upper() 56 | if not (len(airline) == 2 or airline in AIRLINE_ALLIANCES): 57 | raise ValueError( 58 | f"Invalid airline code: {airline}. " 59 | f"Airline codes should be 2 characters long or in the list of airline alliances: {AIRLINE_ALLIANCES}" 60 | ) 61 | self.airlines.append(airline) 62 | else: 63 | # make it consistent with self.max_stops and set it to None 64 | self.airlines = None 65 | 66 | def attach(self, info: PB.Info) -> None: # type: ignore 67 | data = info.data.add() 68 | data.date = self.date 69 | data.from_flight.airport = self.from_airport 70 | data.to_flight.airport = self.to_airport 71 | if self.max_stops is not None: 72 | data.max_stops = self.max_stops 73 | if self.airlines is not None: 74 | data.airlines.extend(self.airlines) 75 | 76 | def __repr__(self) -> str: 77 | return ( 78 | f"FlightData(date={self.date!r}, " 79 | f"from_airport={self.from_airport}, " 80 | f"to_airport={self.to_airport}, " 81 | f"max_stops={self.max_stops}, " 82 | f"airlines={self.airlines}" 83 | ) 84 | 85 | 86 | class Passengers: 87 | def __init__( 88 | self, 89 | *, 90 | adults: int = 0, 91 | children: int = 0, 92 | infants_in_seat: int = 0, 93 | infants_on_lap: int = 0, 94 | ): 95 | assert ( 96 | sum((adults, children, infants_in_seat, infants_on_lap)) <= 9 97 | ), "Too many passengers (> 9)" 98 | assert ( 99 | infants_on_lap <= adults 100 | ), "You must have at least one adult per infant on lap" 101 | 102 | self.pb = [] 103 | self.pb += [PB.Passenger.ADULT for _ in range(adults)] 104 | self.pb += [PB.Passenger.CHILD for _ in range(children)] 105 | self.pb += [PB.Passenger.INFANT_IN_SEAT for _ in range(infants_in_seat)] 106 | self.pb += [PB.Passenger.INFANT_ON_LAP for _ in range(infants_on_lap)] 107 | 108 | self._data = (adults, children, infants_in_seat, infants_on_lap) 109 | 110 | def attach(self, info: PB.Info) -> None: # type: ignore 111 | for p in self.pb: 112 | info.passengers.append(p) 113 | 114 | def __repr__(self) -> str: 115 | return f"Passengers({self._data})" 116 | 117 | 118 | class TFSData: 119 | """``?tfs=`` data. (internal) 120 | 121 | Use `TFSData.from_interface` instead. 122 | """ 123 | 124 | def __init__( 125 | self, 126 | *, 127 | flight_data: List[FlightData], 128 | seat: PB.Seat, # type: ignore 129 | trip: PB.Trip, # type: ignore 130 | passengers: Passengers, 131 | max_stops: Optional[int] = None, # Add max_stops to the constructor 132 | ): 133 | self.flight_data = flight_data 134 | self.seat = seat 135 | self.trip = trip 136 | self.passengers = passengers 137 | self.max_stops = max_stops # Store max_stops 138 | 139 | def pb(self) -> PB.Info: # type: ignore 140 | info = PB.Info() 141 | info.seat = self.seat 142 | info.trip = self.trip 143 | 144 | self.passengers.attach(info) 145 | 146 | for fd in self.flight_data: 147 | fd.attach(info) 148 | 149 | # If max_stops is set, attach it to all flight data entries 150 | if self.max_stops is not None: 151 | for flight in info.data: 152 | flight.max_stops = self.max_stops 153 | 154 | return info 155 | 156 | def to_string(self) -> bytes: 157 | return self.pb().SerializeToString() 158 | 159 | def as_b64(self) -> bytes: 160 | return base64.b64encode(self.to_string()) 161 | 162 | @staticmethod 163 | def from_interface( 164 | *, 165 | flight_data: List[FlightData], 166 | trip: Literal["round-trip", "one-way", "multi-city"], 167 | passengers: Passengers, 168 | seat: Literal["economy", "premium-economy", "business", "first"], 169 | max_stops: Optional[int] = None, # Add max_stops to the method signature 170 | ): 171 | """Use ``?tfs=`` from an interface. 172 | 173 | Args: 174 | flight_data (list[FlightData]): Flight data as a list. 175 | trip ("one-way" | "round-trip" | "multi-city"): Trip type. 176 | passengers (Passengers): Passengers. 177 | seat ("economy" | "premium-economy" | "business" | "first"): Seat. 178 | max_stops (int, optional): Maximum number of stops. 179 | """ 180 | trip_t = { 181 | "round-trip": PB.Trip.ROUND_TRIP, 182 | "one-way": PB.Trip.ONE_WAY, 183 | "multi-city": PB.Trip.MULTI_CITY, 184 | }[trip] 185 | seat_t = { 186 | "economy": PB.Seat.ECONOMY, 187 | "premium-economy": PB.Seat.PREMIUM_ECONOMY, 188 | "business": PB.Seat.BUSINESS, 189 | "first": PB.Seat.FIRST, 190 | }[seat] 191 | 192 | return TFSData( 193 | flight_data=flight_data, 194 | seat=seat_t, 195 | trip=trip_t, 196 | passengers=passengers, 197 | max_stops=max_stops # Pass max_stops into TFSData 198 | ) 199 | 200 | def __repr__(self) -> str: 201 | return f"TFSData(flight_data={self.flight_data!r}, max_stops={self.max_stops!r})" 202 | 203 | @dataclass 204 | class ItinerarySummary: 205 | flights: str 206 | price: int 207 | currency: str 208 | 209 | @classmethod 210 | def from_b64(cls, b64_string: str) -> 'ItinerarySummary': 211 | raw = base64.b64decode(b64_string) 212 | pb = PB.ItinerarySummary() 213 | pb.ParseFromString(raw) 214 | return cls(pb.flights, pb.price.price / 100, pb.price.currency) 215 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Try out the dev version: [**Pypi (`3.0rc0`)**](https://pypi.org/project/fast-flights/3.0rc0/) 2 | 3 |


4 |
5 | 6 | # ✈️ fast-flights 7 | 8 | The fast and strongly-typed Google Flights scraper (API) implemented in Python. Based on Base64-encoded Protobuf string. 9 | 10 | [**Documentation**](https://aweirddev.github.io/flights) • [Issues](https://github.com/AWeirdDev/flights/issues) • [PyPi](https://pypi.org/project/fast-flights) 11 | 12 | ```haskell 13 | $ pip install fast-flights 14 | ``` 15 | 16 |
17 | 18 | ## Basics 19 | **TL;DR**: To use `fast-flights`, you'll first create a filter (for `?tfs=`) to perform a request. 20 | Then, add `flight_data`, `trip`, `seat`, `passengers` to use the API directly. 21 | 22 | ```python 23 | from fast_flights import FlightData, Passengers, Result, get_flights 24 | 25 | result: Result = get_flights( 26 | flight_data=[ 27 | FlightData(date="2025-01-01", from_airport="TPE", to_airport="MYJ") 28 | ], 29 | trip="one-way", 30 | seat="economy", 31 | passengers=Passengers(adults=2, children=1, infants_in_seat=0, infants_on_lap=0), 32 | fetch_mode="fallback", 33 | ) 34 | 35 | print(result) 36 | 37 | # The price is currently... low/typical/high 38 | print("The price is currently", result.current_price) 39 | ``` 40 | 41 | **Properties & usage for `Result`**: 42 | 43 | ```python 44 | result.current_price 45 | 46 | # Get the first flight 47 | flight = result.flights[0] 48 | 49 | flight.is_best 50 | flight.name 51 | flight.departure 52 | flight.arrival 53 | flight.arrival_time_ahead 54 | flight.duration 55 | flight.stops 56 | flight.delay? # may not be present 57 | flight.price 58 | ``` 59 | 60 | **Useless enums**: Additionally, you can use the `Airport` enum to search for airports in code (as you type)! See `_generated_enum.py` in source. 61 | 62 | ```python 63 | Airport.TAIPEI 64 | ╭─────────────────────────────────╮ 65 | │ TAIPEI_SONGSHAN_AIRPORT │ 66 | │ TAPACHULA_INTERNATIONAL_AIRPORT │ 67 | │ TAMPA_INTERNATIONAL_AIRPORT │ 68 | ╰─────────────────────────────────╯ 69 | ``` 70 | 71 | ## What's new 72 | - `v2.0` – New (much more succinct) API, fallback support for Playwright serverless functions, and [documentation](https://aweirddev.github.io/flights)! 73 | - `v2.2` - Now supports **local playwright** for sending requests. 74 | 75 | ## Cookies & consent 76 | The EU region is a bit tricky to solve for now, but the fallback support should be able to handle it. 77 | 78 | ## Contributing 79 | Contributing is welcomed! I probably won't work on this project unless there's a need for a major update, but boy howdy do I love pull requests. 80 | 81 | *** 82 | 83 | ## How it's made 84 | 85 | The other day, I was making a chat-interface-based trip recommendation app and wanted to add a feature that can search for flights available for booking. My personal choice is definitely [Google Flights](https://flights.google.com) since Google always has the best and most organized data on the web. Therefore, I searched for APIs on Google. 86 | 87 | > 🔎 **Search**
88 | > google flights api 89 | 90 | The results? Bad. It seems like they discontinued this service and it now lives in the Graveyard of Google. 91 | 92 | > 🧏‍♂️ duffel.com
93 | > Google Flights API: How did it work & what happened to it? 94 | > 95 | > The Google Flights API offered developers access to aggregated airline data, including flight times, availability, and prices. Over a decade ago, Google announced the acquisition of ITA Software Inc. which it used to develop its API. **However, in 2018, Google ended access to the public-facing API and now only offers access through the QPX enterprise product**. 96 | 97 | That's awful! I've also looked for free alternatives but their rate limits and pricing are just 😬 (not a good fit/deal for everyone). 98 | 99 |
100 | 101 | However, Google Flights has their UI – [flights.google.com](https://flights.google.com). So, maybe I could just use Developer Tools to log the requests made and just replicate all of that? Undoubtedly not! Their requests are just full of numbers and unreadable text, so that's not the solution. 102 | 103 | Perhaps, we could scrape it? I mean, Google allowed many companies like [Serpapi](https://google.com/search?q=serpapi) to scrape their web just pretending like nothing happened... So let's scrape our own. 104 | 105 | > 🔎 **Search**
106 | > google flights ~~api~~ scraper pypi 107 | 108 | Excluding the ones that are not active, I came across [hugoglvs/google-flights-scraper](https://pypi.org/project/google-flights-scraper) on Pypi. I thought to myself: "aint no way this is the solution!" 109 | 110 | I checked hugoglvs's code on [GitHub](https://github.com/hugoglvs/google-flights-scraper), and I immediately detected "playwright," my worst enemy. One word can describe it well: slow. Two words? Extremely slow. What's more, it doesn't even run on the **🗻 Edge** because of configuration errors, missing libraries... etc. I could just reverse [try.playwright.tech](https://try.playwright.tech) and use a better environment, but that's just too risky if they added Cloudflare as an additional security barrier 😳. 111 | 112 | Life tells me to never give up. Let's just take a look at their URL params... 113 | 114 | ```markdown 115 | https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI0LTA1LTI4agcIARIDVFBFcgcIARIDTVlKGh4SCjIwMjQtMDUtMzBqBwgBEgNNWUpyBwgBEgNUUEVAAUgBcAGCAQsI____________AZgBAQ&hl=en 116 | ``` 117 | 118 | | Param | Content | My past understanding | 119 | |-------|---------|-----------------------| 120 | | hl | en | Sets the language. | 121 | | tfs | CBwQAhoeEgoyMDI0LTA1LTI4agcIARID… | What is this???? 🤮🤮 | 122 | 123 | I removed the `?tfs=` parameter and found out that this is the control of our request! And it looks so base64-y. 124 | 125 | If we decode it to raw text, we can still see the dates, but we're not quite there — there's too much unwanted Unicode text. 126 | 127 | Or maybe it's some kind of a **data-storing method** Google uses? What if it's something like JSON? Let's look it up. 128 | 129 | > 🔎 **Search**
130 | > google's json alternative 131 | 132 | > 🐣 **Result**
133 | > Solution: The Power of **Protocol Buffers** 134 | > 135 | > LinkedIn turned to Protocol Buffers, often referred to as **protobuf**, a binary serialization format developed by Google. The key advantage of Protocol Buffers is its efficiency, compactness, and speed, making it significantly faster than JSON for serialization and deserialization. 136 | 137 | Gotcha, Protobuf! Let's feed it to an online decoder and see how it does: 138 | 139 | > 🔎 **Search**
140 | > protobuf decoder 141 | 142 | > 🐣 **Result**
143 | > [protobuf-decoder.netlify.app](https://protobuf-decoder.netlify.app) 144 | 145 | I then pasted the Base64-encoded string to the decoder and no way! It DID return valid data! 146 | 147 | ![annotated, Protobuf Decoder screenshot](https://github.com/AWeirdDev/flights/assets/90096971/77dfb097-f961-4494-be88-3640763dbc8c) 148 | 149 | I immediately recognized the values — that's my data, that's my query! 150 | 151 | So, I wrote some simple Protobuf code to decode the data. 152 | 153 | ```protobuf 154 | syntax = "proto3" 155 | 156 | message Airport { 157 | string name = 2; 158 | } 159 | 160 | message FlightInfo { 161 | string date = 2; 162 | Airport dep_airport = 13; 163 | Airport arr_airport = 14; 164 | } 165 | 166 | message GoogleSucks { 167 | repeated FlightInfo = 3; 168 | } 169 | ``` 170 | 171 | It works! Now, I won't consider myself an "experienced Protobuf developer" but rather a complete beginner. 172 | 173 | I have no idea what I wrote but... it worked! And here it is, `fast-flights`. 174 | 175 | *** 176 | 177 |
178 | 179 | (c) 2024-2025 AWeirdDev, and other awesome people 180 | 181 |
182 | -------------------------------------------------------------------------------- /fast_flights/decoder.py: -------------------------------------------------------------------------------- 1 | import abc 2 | from collections.abc import Callable, Mapping 3 | from dataclasses import dataclass 4 | from typing import Any, List, Generic, Optional, Sequence, TypeVar, Union, Tuple 5 | from typing_extensions import TypeAlias, override 6 | 7 | from .flights_impl import ItinerarySummary 8 | 9 | DecodePath: TypeAlias = List[int] 10 | NLBaseType: TypeAlias = Union[int, str, None, Sequence['NLBaseType']] 11 | 12 | # N(ested)L(ist)Data, this class allows indexing using a path, and as an int to make 13 | # traversal easier within the nested list data 14 | @dataclass 15 | class NLData(Sequence[NLBaseType]): 16 | data: List[NLBaseType] 17 | 18 | def __getitem__(self, decode_path: Union[int, DecodePath]) -> NLBaseType: 19 | if isinstance(decode_path, int): 20 | return self.data[decode_path] 21 | it = self.data 22 | for index in decode_path: 23 | assert isinstance(it, list), f'Found non list type while trying to decode {decode_path}' 24 | assert index < len(it), f'Trying to traverse to index out of range when decoding {decode_path}' 25 | it = it[index] 26 | return it 27 | 28 | @override 29 | def __len__(self) -> int: 30 | return len(self.data) 31 | 32 | # DecoderKey is used to specify the path to a field from a decoder class 33 | V = TypeVar('V') 34 | @dataclass 35 | class DecoderKey(Generic[V]): 36 | decode_path: DecodePath 37 | decoder: Optional[Callable[[NLData], V]] = None 38 | 39 | def decode(self, root: NLData) -> Union[NLBaseType, V]: 40 | data = root[self.decode_path] 41 | if isinstance(data, list) and self.decoder: 42 | assert self.decoder is not None, f'decoder should be provided in order to further decode NLData instances' 43 | return self.decoder(NLData(data)) 44 | return data 45 | 46 | # Decoder is used to aggregate all fields and their paths 47 | class Decoder(abc.ABC): 48 | @classmethod 49 | def decode_el(cls, el: NLData) -> Mapping[str, Any]: 50 | decoded: Mapping[str, Any] = {} 51 | for field_name, key_decoder in vars(cls).items(): 52 | if isinstance(key_decoder, DecoderKey): 53 | value = key_decoder.decode(el) 54 | decoded[field_name.lower()] = value 55 | return decoded 56 | 57 | @classmethod 58 | def decode(cls, root: Union[list, NLData]) -> ...: 59 | ... 60 | 61 | 62 | # Type Aliases 63 | AirlineCode: TypeAlias = str 64 | AirlineName: TypeAlias = str 65 | AirportCode: TypeAlias = str 66 | AirportName: TypeAlias = str 67 | ProtobufStr: TypeAlias = str 68 | Minute: TypeAlias = int 69 | 70 | @dataclass 71 | class Codeshare: 72 | airline_code: AirlineCode 73 | flight_number: int 74 | airline_name: AirlineName 75 | 76 | @dataclass 77 | class Flight: 78 | airline: AirlineCode 79 | airline_name: AirlineName 80 | flight_number: str 81 | operator: str 82 | codeshares: List[Codeshare] 83 | aircraft: str 84 | departure_airport: AirportCode 85 | departure_airport_name: AirportName 86 | arrival_airport: AirportCode 87 | arrival_airport_name: AirportName 88 | # some_enum: int 89 | # some_enum: int 90 | departure_date: Tuple[int, int, int] 91 | arrival_date: Tuple[int, int, int] 92 | departure_time: Tuple[int, int] 93 | arrival_time: Tuple[int, int] 94 | travel_time: int 95 | seat_pitch_short: str 96 | # seat_pitch_long: str 97 | 98 | @dataclass 99 | class Layover: 100 | minutes: Minute 101 | departure_airport: AirportCode 102 | departure_airport_name: AirportName 103 | departure_airport_city: AirportName 104 | arrival_airport: AirportCode 105 | arrival_airport_name: AirportName 106 | arrival_airport_city: AirportName 107 | 108 | @dataclass 109 | class Itinerary: 110 | airline_code: AirlineCode 111 | airline_names: List[AirlineName] 112 | flights: List[Flight] 113 | layovers: List[Layover] 114 | travel_time: int 115 | departure_airport: AirportCode 116 | arrival_airport: AirportCode 117 | departure_date: Tuple[int, int, int] 118 | arrival_date: Tuple[int, int, int] 119 | departure_time: Tuple[int, int] 120 | arrival_time: Tuple[int, int] 121 | itinerary_summary: ItinerarySummary 122 | 123 | @dataclass 124 | class DecodedResult: 125 | # raw unparsed data 126 | raw: list 127 | 128 | best: List[Itinerary] 129 | other: List[Itinerary] 130 | 131 | # airport_details: Any 132 | # unknown_1: Any 133 | 134 | class CodeshareDecoder(Decoder): 135 | AIRLINE_CODE: DecoderKey[AirlineCode] = DecoderKey([0]) 136 | FLIGHT_NUMBER: DecoderKey[str] = DecoderKey([1]) 137 | AIRLINE_NAME: DecoderKey[List[AirlineName]] = DecoderKey([3]) 138 | 139 | @classmethod 140 | @override 141 | def decode(cls, root: Union[list, NLData]) -> List[Codeshare]: 142 | return [Codeshare(**cls.decode_el(NLData(el))) for el in root] 143 | 144 | class FlightDecoder(Decoder): 145 | OPERATOR: DecoderKey[AirlineName] = DecoderKey([2]) 146 | DEPARTURE_AIRPORT: DecoderKey[AirportCode] = DecoderKey([3]) 147 | DEPARTURE_AIRPORT_NAME: DecoderKey[AirportName] = DecoderKey([4]) 148 | ARRIVAL_AIRPORT: DecoderKey[AirportCode] = DecoderKey([5]) 149 | ARRIVAL_AIRPORT_NAME: DecoderKey[AirportName] = DecoderKey([6]) 150 | # SOME_ENUM: DecoderKey[int] = DecoderKey([7]) 151 | # SOME_ENUM: DecoderKey[int] = DecoderKey([9]) 152 | DEPARTURE_TIME: DecoderKey[Tuple[int, int]] = DecoderKey([8]) 153 | ARRIVAL_TIME: DecoderKey[Tuple[int, int]] = DecoderKey([10]) 154 | TRAVEL_TIME: DecoderKey[int] = DecoderKey([11]) 155 | SEAT_PITCH_SHORT: DecoderKey[str] = DecoderKey([14]) 156 | AIRCRAFT: DecoderKey[str] = DecoderKey([17]) 157 | DEPARTURE_DATE: DecoderKey[Tuple[int, int, int]] = DecoderKey([20]) 158 | ARRIVAL_DATE: DecoderKey[Tuple[int, int, int]] = DecoderKey([21]) 159 | AIRLINE: DecoderKey[AirlineCode] = DecoderKey([22, 0]) 160 | AIRLINE_NAME: DecoderKey[AirlineName] = DecoderKey([22, 3]) 161 | FLIGHT_NUMBER: DecoderKey[str] = DecoderKey([22, 1]) 162 | # SEAT_PITCH_LONG: DecoderKey[str] = DecoderKey([30]) 163 | CODESHARES: DecoderKey[List[Codeshare]] = DecoderKey([15], CodeshareDecoder.decode) 164 | 165 | @classmethod 166 | @override 167 | def decode(cls, root: Union[list, NLData]) -> List[Flight]: 168 | return [Flight(**cls.decode_el(NLData(el))) for el in root] 169 | 170 | class LayoverDecoder(Decoder): 171 | MINUTES: DecoderKey[int] = DecoderKey([0]) 172 | DEPARTURE_AIRPORT: DecoderKey[AirportCode] = DecoderKey([1]) 173 | DEPARTURE_AIRPORT_NAME: DecoderKey[AirportName] = DecoderKey([4]) 174 | DEPARTURE_AIRPORT_CITY: DecoderKey[AirportName] = DecoderKey([5]) 175 | ARRIVAL_AIRPORT: DecoderKey[AirportCode] = DecoderKey([2]) 176 | ARRIVAL_AIRPORT_NAME: DecoderKey[AirportName] = DecoderKey([6]) 177 | ARRIVAL_AIRPORT_CITY: DecoderKey[AirportName] = DecoderKey([7]) 178 | 179 | @classmethod 180 | @override 181 | def decode(cls, root: Union[list, NLData]) -> List[Layover]: 182 | return [Layover(**cls.decode_el(NLData(el))) for el in root] 183 | 184 | class ItineraryDecoder(Decoder): 185 | AIRLINE_CODE: DecoderKey[AirlineCode] = DecoderKey([0, 0]) 186 | AIRLINE_NAMES: DecoderKey[List[AirlineName]] = DecoderKey([0, 1]) 187 | FLIGHTS: DecoderKey[List[Flight]] = DecoderKey([0, 2], FlightDecoder.decode) 188 | DEPARTURE_AIRPORT: DecoderKey[AirportCode] = DecoderKey([0, 3]) 189 | DEPARTURE_DATE: DecoderKey[Tuple[int, int, int]] = DecoderKey([0, 4]) 190 | DEPARTURE_TIME: DecoderKey[Tuple[int, int]] = DecoderKey([0, 5]) 191 | ARRIVAL_AIRPORT: DecoderKey[AirportCode] = DecoderKey([0, 6]) 192 | ARRIVAL_DATE: DecoderKey[Tuple[int, int, int]] = DecoderKey([0, 7]) 193 | ARRIVAL_TIME: DecoderKey[Tuple[int, int]] = DecoderKey([0, 8]) 194 | TRAVEL_TIME: DecoderKey[int] = DecoderKey([0, 9]) 195 | # UNKNOWN: DecoderKey[int] = DecoderKey([0, 10]) 196 | LAYOVERS: DecoderKey[List[Layover]] = DecoderKey([0, 13], LayoverDecoder.decode) 197 | # first field of protobuf is the same as [0, 4] on the root? seems like 0,4 is for tracking 198 | # contains a summary of the flight numbers and the price (as a fixed point sint) 199 | ITINERARY_SUMMARY: DecoderKey[ItinerarySummary] = DecoderKey([1], lambda data: ItinerarySummary.from_b64(data[1])) 200 | # contains Flight(s), the price, and a few more 201 | # FLIGHTS_PROTOBUF: DecoderKey[ProtobufStr] = DecoderKey([8]) 202 | # some struct containing emissions info 203 | # EMISSIONS: DecoderKey[Emissions] = DecoderKey([22]) 204 | 205 | @classmethod 206 | @override 207 | def decode(cls, root: Union[list, NLData]) -> List[Itinerary]: 208 | return [Itinerary(**cls.decode_el(NLData(el))) for el in root] 209 | 210 | 211 | class ResultDecoder(Decoder): 212 | # UNKNOWN_1: DecoderKey[Any] = DecoderKey([0]) 213 | # AIRPORT_DETAILS: DecoderKey[Any] = DecoderKey([1]) 214 | BEST: DecoderKey[List[Itinerary]] = DecoderKey([2, 0], ItineraryDecoder.decode) 215 | OTHER: DecoderKey[List[Itinerary]] = DecoderKey([3, 0], ItineraryDecoder.decode) 216 | 217 | @classmethod 218 | @override 219 | def decode(cls, root: Union[list, NLData]) -> DecodedResult: 220 | assert isinstance(root, list), 'Root data must be list type' 221 | return DecodedResult(**cls.decode_el(NLData(root)), raw=root) 222 | -------------------------------------------------------------------------------- /enums/_generated_enum.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class Airport(Enum): 5 | EUROAIRPORT_BASEL_MULHOUSE_FREIBURG_AIRPORT = "EAP" 6 | LIANYUNGANG_AIRPORT = "LYG" 7 | ALDERNEY_AIRPORT = "ACI" 8 | FALEOLO_AIRPORT = "APW" 9 | LINYI_AIRPORT = "LYI" 10 | JOSE_MARIA_CORDOVA_INTERNATIONAL_AIRPORT = "MDE" 11 | ANTÔNIO_RIBEIRO_NOGUEIRA_JR_STATE_AIRPORT = "JTN" 12 | MADIVARU_AIRPORT = "LMV" 13 | LAZARO_CARDENAS_AIRPORT = "LZC" 14 | RODRIGUEZ_BALLON_INTERNATIONAL_AIRPORT = "AQP" 15 | TAIYUAN_YAOCHENG_AIRPORT = "TYC" 16 | LIUZHOU_AIRPORT = "LZH" 17 | MANTA_AIRPORT = "MEC" 18 | DAZHOU_JINYA_AIRPORT = "DZH" 19 | BERENICE_INTERNATIONAL_AIRPORT = "EES" 20 | KUKËS_INTERNATIONAL_AIRPORT = "KFZ" 21 | PEDRO_TEIXEIRA_CASTELO_AIRPORT = "JTA" 22 | UYYALAWADA_NARASIMHA_REDDY_AIRPORT = "KJB" 23 | EZHOU_HUAHU_AIRPORT = "EHU" 24 | FUZULI_INTERNATIONAL_AIRPORT = "FZL" 25 | SANGIA_NIBANDERA_AIRPORT = "KXB" 26 | ANGRA_DOS_REIS_AIRPORT = "GDR" 27 | BEIDAHUANG_GENERAL_AIRPORT = "HLJ" 28 | CHENGDU_HUAIZHOU_AIRPORT = "HZU" 29 | LORENZO_AIRPORT = "MXQ" 30 | AMPARA_KONDAVATTAVAN_TANK_AIRPORT = "AFK" 31 | SÃO_PAULO_CATARINA_EXECUTIVE_AIRPORT = "JHF" 32 | BILLUND_AIRPORT = "BLL" 33 | WALFRIDO_SALMITO_DE_ALMEIDA_AIRPORT = "JSB" 34 | ELEFTHERIOS_VENIZELOS_INTERNATIONAL_AIRPORT = "ATH" 35 | ALEKSANDROVSK_SAKHALINSKIY_AIRPORT = "UHS" 36 | MEHAMN_AIRPORT = "MEH" 37 | TULLAMARINE_AIRPORT = "MEL" 38 | MEMPHIS_INTERNATIONAL_AIRPORT = "MEM" 39 | MBS_INTERNATIONAL_AIRPORT = "MBS" 40 | WILKES_BARRE_SCRANTON_INTERNATIONAL_AIRPORT = "AVP" 41 | DOHA_INTERNATIONAL_AIRPORT = "DIA" 42 | GANJA_INTERNATIONAL_AIRPORT = "GNJ" 43 | SUIFENHE_DONGNING_AIRPORT = "HSF" 44 | AL_BARDAWIL_INTERNATIONAL_AIRPORT = "RDL" 45 | NEW_VACARIA_AIRPORT = "VCC" 46 | MALACCA_INTERNATIONAL_AIRPORT = "MKZ" 47 | GONDIA_AIRPORT = "GDB" 48 | MALE_INTERNATIONAL_AIRPORT = "MLE" 49 | ANQING_TIANZHUSHAN_AIRPORT = "AQG" 50 | ST_HUBERT_AIRPORT = "YHU" 51 | ISLAND_LAKE_AIRPORT = "YIV" 52 | AEROPORTO_DE_CRATEUS_AIRPORT = "JCS" 53 | QAISUMAH_AIRPORT = "AQI" 54 | KUUJJUARAPIK_AIRPORT = "YGW" 55 | KING_HUSSEIN_INTERNATIONAL_AIRPORT = "AQJ" 56 | ABDUL_RACHMAN_SALEH_AIRPORT = "MLG" 57 | LIVINGSTONE_AIRPORT = "LVI" 58 | CATOCA_AIRPORT = "CTV" 59 | MUDANJIANG_AIRPORT = "MDG" 60 | BRIGADEIRO_FIRMINO_AYRES_AIRPORT = "JPO" 61 | NAGIB_DEMACHKI_AIRPORT = "JPE" 62 | PARATY_AIRPORT = "JPY" 63 | NIAGARA_DISTRICT_AIRPORT = "YCM" 64 | DIGBY_ISLAND_AIRPORT = "YPR" 65 | YELLOWSTONE_REGIONAL_AIRPORT = "COD" 66 | HUSEIN_SASTRANEGARA_AIRPORT = "BDO" 67 | DARA_SAKOR_INTERNATIONAL_AIRPORT = "DSY" 68 | VADODARA_AIRPORT = "BDQ" 69 | NEWARK_LIBERTY_INTERNATIONAL_AIRPORT = "EWR" 70 | SANIKILUAQ_AIRPORT = "YSK" 71 | PEMBROKE_AND_AREA_AIRPORT = "YTA" 72 | TASIUJUAQ_AIRPORT = "YTQ" 73 | DHAALU_AIRPORT = "DDD" 74 | YUTIAN_WANFANG_AIRPORT = "YTW" 75 | COCHIN_INTERNATIONAL_AIRPORT = "COK" 76 | JIANDE_QIANDAOHU_AIRPORT = "JDE" 77 | MATSU_BEIGAN_AIRPORT = "MFK" 78 | DARBHANGA_AIRPORT = "DBR" 79 | DODGE_CITY_MUNICIPAL_AIRPORT = "DDC" 80 | ROGUE_VALLEY_INTERNATIONAL_MEDFORD_AIRPORT = "MFR" 81 | EL_ALTO_INTERNATIONAL_AIRPORT = "LPB" 82 | KAPUSKASING_AIRPORT = "YYU" 83 | MOULAY_ALI_CHERIF_AIRPORT = "ERH" 84 | ERIE_INTERNATIONAL_AIRPORT = "ERI" 85 | EREN_HOT_AIRPORT = "ERL" 86 | EXETER_INTERNATIONAL_AIRPORT = "EXT" 87 | TERNEY_AIRPORT = "NEI" 88 | LIUPANSHUI_YUEZHAO_AIRPORT = "LPF" 89 | ELIWANA_AIRPORT = "WHB" 90 | LAMPANG_AIRPORT = "LPT" 91 | GODS_RIVER_AIRPORT = "ZGI" 92 | SANDSPIT_AIRPORT = "YZP" 93 | PORT_HARDY_AIRPORT = "YZT" 94 | SACHIGO_LAKE_AIRPORT = "ZPB" 95 | MOI_INTERNATIONAL_AIRPORT = "MBA" 96 | MYEIK_AIRPORT = "MGZ" 97 | MASHHAD_INTERNATIONAL_AIRPORT = "MHD" 98 | ULAWA_AIRPORT = "RNA" 99 | EL_YOPAL_AIRPORT = "EYP" 100 | KEY_WEST_INTERNATIONAL_AIRPORT = "EYW" 101 | MINISTRO_PISTARINI_AIRPORT = "EZE" 102 | CHENZHOU_BEIHU_AIRPORT = "HCZ" 103 | DUMAGUETE_AIRPORT = "DGT" 104 | LUNGI_INTERNATIONAL_AIRPORT = "FNA" 105 | SAWYER_INTERNATIONAL_AIRPORT = "MQT" 106 | MANNHEIM_AIRPORT = "MHG" 107 | MARSH_HARBOUR_INTERNATIONAL_AIRPORT = "MHH" 108 | MANHATTAN_MUNICIPAL_AIRPORT = "MHK" 109 | MARIEHAMN_AIRPORT = "MHQ" 110 | LORD_HOWE_ISLAND_AIRPORT = "LDH" 111 | GRAN_CANARIA_AIRPORT = "LPA" 112 | LINKOPING_CITY_AIRPORT = "LPI" 113 | MADEIRA_AIRPORT = "FNC" 114 | FUNADHOO_AIRPORT = "FND" 115 | ADDIS_ABABA_BOLE_INTERNATIONAL_AIRPORT = "ADD" 116 | EASTERN_WV_REGIONAL_AIRPORT_SHEPHERD_FIELD = "MRB" 117 | MISSOULA_INTERNATIONAL_AIRPORT = "MSO" 118 | MINNEAPOLIS_ST_PAUL_INTERNATIONAL_AIRPORT = "MSP" 119 | MINSK_NATIONAL_AIRPORT = "MSQ" 120 | LIPETSK_AIRPORT = "LPK" 121 | NORWAY_HOUSE_AIRPORT = "YNE" 122 | LIEPAYA_AIRPORT = "LPX" 123 | LOUDES_AIRPORT = "LPY" 124 | COCA_AIRPORT = "OCC" 125 | GLENEGEDALE_AIRPORT = "ILY" 126 | MAKU_INTERNATIONAL_AIRPORT = "IMQ" 127 | FELIX_HOUPHOUET_BOIGNY_AIRPORT = "ABJ" 128 | LILABARI_AIRPORT = "IXI" 129 | LANN_BIHOUE_AIRPORT = "LRT" 130 | SATWARI_AIRPORT = "IXJ" 131 | KING_FAHD_INTERNATIONAL_AIRPORT = "DMM" 132 | HILO_INTERNATIONAL_AIRPORT = "ITO" 133 | AGARTALA_AIRPORT = "IXA" 134 | BAGDOGRA_AIRPORT = "IXB" 135 | CHANDIGARH_AIRPORT = "IXC" 136 | BAMRAULI_AIRPORT = "IXD" 137 | MANGALORE_AIRPORT = "IXE" 138 | MALIKUS_SALEH_AIRPORT = "LSW" 139 | MADURAI_AIRPORT = "IXM" 140 | ALTAY_AIRPORT = "AAT" 141 | ASABA_INTERNATIONAL_AIRPORT = "ABB" 142 | LOSINJ_AIRPORT = "LSZ" 143 | LA_FLORIDA_AIRPORT = "LSC" 144 | BIRSA_MUNDA_AIRPORT = "IXR" 145 | CHIKKALTHANA_AIRPORT = "IXU" 146 | LA_CROSSE_REGIONAL_AIRPORT = "LSE" 147 | JOSEFA_CAMEJO_AIRPORT = "LSP" 148 | DRESDEN_INTERNATIONAL_AIRPORT = "DRS" 149 | PORT_BLAIR_AIRPORT = "IXZ" 150 | GOVARDHANPUR_AIRPORT = "JGA" 151 | JIAGEDAQI_AIRPORT = "JGD" 152 | LAUNCESTON_AIRPORT = "LST" 153 | LISMORE_AIRPORT = "LSY" 154 | BUBUNG_AIRPORT = "LUW" 155 | SITIA_AIRPORT = "JSH" 156 | SKIATHOS_AIRPORT = "JSI" 157 | WESTMORELAND_COUNTY_AIRPORT = "LBE" 158 | JAMESTOWN_AIRPORT = "JHW" 159 | CHIOS_AIRPORT = "JKH" 160 | KALYMNOS_ISLAND_NATIONAL_AIRPORT = "JKL" 161 | JANAKPUR_AIRPORT = "JKR" 162 | CITY_OF_DERRY_AIRPORT = "LDY" 163 | BAURU_AIRPORT = "BAU" 164 | LEIPZIG_HALLE_AIRPORT = "LEJ" 165 | LAFAYETTE_REGIONAL_AIRPORT = "LFT" 166 | AGATTI_ISLAND_AIRPORT = "AGX" 167 | LUANG_NAMTHA_AIRPORT = "LXG" 168 | DONETSK_INTERNATIONAL_AIRPORT = "DOK" 169 | DUSSELDORF_INTERNATIONAL_AIRPORT = "DUS" 170 | NOTTINGHAM_AIRPORT = "NQT" 171 | MOHE_AIRPORT = "OHE" 172 | NOVOSTROYKA_AIRPORT = "OHH" 173 | LUXOR_INTERNATIONAL_AIRPORT = "LXR" 174 | LIMNOS_AIRPORT = "LXS" 175 | LOME_AIRPORT = "LFW" 176 | LAGUARDIA_AIRPORT = "LGA" 177 | LONG_BEACH_AIRPORT = "LGB" 178 | LIEGE_AIRPORT = "LGG" 179 | DEADMANS_CAY_AIRPORT = "LGI" 180 | LANGKAWI_INTERNATIONAL_AIRPORT = "LGK" 181 | SILAMPARI_AIRPORT = "LLJ" 182 | BUA_AIRPORT = "LLO" 183 | ASPEN_AIRPORT = "ASE" 184 | SILVIO_PETTIROSSI_INTERNATIONAL_AIRPORT = "ASU" 185 | ATMAUTLUAK_AIRPORT = "ATT" 186 | HELSINKI_VANTAA_AIRPORT = "HEL" 187 | NORTH_BAY_AIRPORT = "BRR" 188 | LILONGWE_INTERNATIONAL_AIRPORT = "LLW" 189 | PENSACOLA_INTERNATIONAL_AIRPORT = "PNS" 190 | LIVERPOOL_JOHN_LENNON_AIRPORT = "LPL" 191 | AVIGNON_CAUMONT_AIRPORT = "AVN" 192 | LUANG_PRABANG_INTERNATIONAL_AIRPORT = "LPQ" 193 | SANAA_INTERNATIONAL_AIRPORT = "SAH" 194 | EL_SALVADOR_INTERNATIONAL_AIRPORT = "SAL" 195 | SAN_DIEGO_INTERNATIONAL_AIRPORT = "SAN" 196 | ITAUBA_AIRPORT = "AUB" 197 | MARECHAL_CUNHA_MACHADO_INTERNATIONAL_AIRPORT = "SLZ" 198 | SACRAMENTO_INTERNATIONAL_AIRPORT = "SMF" 199 | LAREDO_INTERNATIONAL_AIRPORT = "LRD" 200 | AVALON_AIRPORT = "AVV" 201 | AHWAZ_AIRPORT = "AWZ" 202 | HELSINGE_AIRPORT = "SOO" 203 | LAMBERT_ST_LOUIS_INTERNATIONAL_AIRPORT = "STL" 204 | ST_PAUL_DOWNTOWN_AIRPORT = "STP" 205 | CYRIL_E_KING_AIRPORT = "STT" 206 | SURAT_GUJARAT_AIRPORT = "STV" 207 | HENRY_E_ROHLSEN_AIRPORT = "STX" 208 | JUANDA_INTERNATIONAL_AIRPORT = "SUB" 209 | LAMEZIA_TERME_INTERNATIONAL_AIRPORT = "SUF" 210 | SURIGAO_AIRPORT = "SUG" 211 | LANGTOU_AIRPORT = "DDG" 212 | FAISALABAD_AIRPORT = "LYP" 213 | SAMSUN_CARSAMBA_AIRPORT = "SZF" 214 | SHENZHEN_BAOAN_INTERNATIONAL_AIRPORT = "SZX" 215 | LYON_SAINT_EXUPERY_INTERNATIONAL_AIRPORT = "LYS" 216 | DEMOKRITOS_AIRPORT = "AXD" 217 | ANDIZHAN_AIRPORT = "AZN" 218 | KALAMAZOO_BATTLE_CREEK_INTERNATIONAL_AIRPORT = "AZO" 219 | PUER_SIMAO_AIRPORT = "SYM" 220 | GOLOVIN_AIRPORT = "GLV" 221 | LUZHOU_LANTIAN_AIRPORT = "LZO" 222 | GUSTAVUS_AIRPORT = "GST" 223 | NYINGCHI_MAINLING_AIRPORT = "LZY" 224 | SANGSTER_INTERNATIONAL_AIRPORT = "MBJ" 225 | BLACKER_AIRPORT = "MBL" 226 | E_CORTISSOZ_AIRPORT = "BAQ" 227 | AIRPORT_CHAFEI_AMSEI = "BAT" 228 | BACOLOD_SILAY_INTERNATIONAL_AIRPORT = "BCD" 229 | LITTLE_CAYMAN_AIRPORT = "LYB" 230 | LYCKSELE_AIRPORT = "LYC" 231 | CHENNAI_AIRPORT = "MAA" 232 | KOYUK_AIRPORT = "KKA" 233 | HOLY_CROSS_AIRPORT = "HCR" 234 | KETCHIKAN_INTERNATIONAL_AIRPORT = "KTN" 235 | KALTAG_AIRPORT = "KAL" 236 | HOMER_AIRPORT = "HOM" 237 | HOOPER_BAY_AIRPORT = "HPB" 238 | HUSLIA_AIRPORT = "HSL" 239 | KING_SALMON_AIRPORT = "AKN" 240 | BRADLEY_INTERNATIONAL_AIRPORT = "BDL" 241 | BHADRAPUR_AIRPORT = "BDP" 242 | BELGRAD_NIKOLA_TESLA_AIRPORT = "BEG" 243 | MEADOWS_FIELD_AIRPORT = "BFL" 244 | BRAM_FISCHER_INTERNATIONAL_AIRPORT = "BFN" 245 | BELFAST_INTERNATIONAL_AIRPORT = "BFS" 246 | BOB_BAKER_MEMORIAL_AIRPORT = "IAN" 247 | SHAGELUK_AIRPORT = "SHX" 248 | NOME_AIRPORT = "OME" 249 | TOKSOOK_BAY_AIRPORT = "OOK" 250 | ST_MICHAEL_AIRPORT = "SMK" 251 | PLATINUM_AIRPORT = "PTU" 252 | MCALLEN_INTERNATIONAL_AIRPORT = "MFE" 253 | SVALBARD_AIRPORT = "LYR" 254 | RALPH_WIEN_MEMORIAL_AIRPORT = "OTZ" 255 | AARHUS_AIRPORT = "AAR" 256 | ACAPULCO_INTERNATIONAL_AIRPORT = "ACA" 257 | ALTENRHEIN_AIRPORT = "ACH" 258 | XINGYI_AIRPORT = "ACX" 259 | BURI_RAM_AIRPORT = "BFV" 260 | PALONEGRO_INTERNATIONAL_AIRPORT = "BGA" 261 | SUMBURGH_AIRPORT = "LSI" 262 | RUBY_AIRPORT = "RBY" 263 | ABERDEEN_INTERNATIONAL_AIRPORT = "ABZ" 264 | SAINT_MARYS_AIRPORT = "KSM" 265 | FORT_YUKON_AIRPORT = "FYU" 266 | GWINNETT_COUNTY_AIRPORT = "LZU" 267 | MASBATE_AIRPORT = "MBT" 268 | MARIBOR_INTERNATIONAL_AIRPORT = "MBX" 269 | ZABOL_AIRPORT = "ACZ" 270 | SOCHI_INTERNATIONAL_AIRPORT = "AER" 271 | VIGRA_ALESUND_AIRPORT = "AES" 272 | ALGHERO_FERTILIA_AIRPORT = "AHO" 273 | AIZAWL_AIRPORT = "AJL" 274 | HABIB_BOURGUIBA_INTERNATIONAL_AIRPORT = "MIR" 275 | PRUDHOE_BAY_DEADHORSE_AIRPORT = "SCC" 276 | ELMIRA_CORNING_REGIONAL_AIRPORT = "ELM" 277 | KAMUSI_AIRPORT = "KUY" 278 | ASAHIKAWA_AIRPORT = "AKJ" 279 | HAMILTON_ISLAND_AIRPORT = "HTI" 280 | AUCKLAND_AIRPORT = "AKL" 281 | MANCHESTER_BOSTON_REGIONAL_AIRPORT = "MHT" 282 | KJAERSTAD_AIRPORT = "MJF" 283 | GREATER_BINGHAMTON_AIRPORT = "BGM" 284 | BELAYA_GORA_AIRPORT = "BGN" 285 | BERGEN_AIRPORT = "BGO" 286 | MITIGA_TRIPOLI_AIRPORT = "MJI" 287 | POND_INLET_AIRPORT = "YIO" 288 | MIAMI_INTERNATIONAL_AIRPORT = "MIA" 289 | GUERNSEY_AIRPORT = "GCI" 290 | TRIESTE_FRIULI_VENEZIA_GIULIA_AIRPORT = "TRS" 291 | LIBREVILLE_AIRPORT = "LBV" 292 | TRIVANDRUM_INTERNATIONAL_AIRPORT = "TRV" 293 | TIRUCHIRAPALLI_INTERNATIONAL_AIRPORT = "TRZ" 294 | TAIPEI_SONGSHAN_AIRPORT = "TSA" 295 | ASTANA_NURSULTAN_INTERNATIONAL_AIRPORT = "TSE" 296 | TABUBIL_AIRPORT = "TBG" 297 | ALTA_AIRPORT = "ALF" 298 | ALBANY_AIRPORT = "ALH" 299 | BEIRA_AIRPORT = "BEW" 300 | BAGHDAD_INTERNATIONAL_AIRPORT = "BGW" 301 | MOUNT_ISA_AIRPORT = "ISA" 302 | LONGREACH_AIRPORT = "LRE" 303 | BAMAKO_SENOU_INTERNATIONAL_AIRPORT = "BKO" 304 | MANUEL_CRESCENCIO_REJON_INTERNATIONAL_AIRPORT = "MID" 305 | KAYSERI_AIRPORT = "ASR" 306 | ANYANG_AIRPORT = "AYN" 307 | WOODBOURNE_AIRPORT = "BHE" 308 | RUDRA_MATA_AIRPORT = "BHJ" 309 | BIRMINGHAM_SHUTTLESWORTH_INTERNATIONAL_AIRPORT = "BHM" 310 | BROKEN_HILL_AIRPORT = "BHQ" 311 | BHAVNAGAR_AIRPORT = "BHU" 312 | MCKELLAR_AIRPORT = "MKL" 313 | BASTIA_PORETTA_AIRPORT = "BIA" 314 | SCHEFFERVILLE_AIRPORT = "YKL" 315 | RENDANI_AIRPORT = "MKW" 316 | KANGIRSUK_AIRPORT = "YKG" 317 | MACKAY_AIRPORT = "MKY" 318 | GJOA_HAVEN_AIRPORT = "YHK" 319 | BATSFJORD_AIRPORT = "BJF" 320 | BEMIDJI_AIRPORT = "BJI" 321 | QUAD_CITY_INTERNATIONAL_AIRPORT = "MLI" 322 | MELILLA_AIRPORT = "MLN" 323 | MILOS_AIRPORT = "MLO" 324 | NINOY_AQUINO_INTERNATIONAL_AIRPORT = "MNL" 325 | BAHRAIN_INTERNATIONAL_AIRPORT = "BAH" 326 | BAOTOU_AIRPORT = "BAV" 327 | BARNAUL_GHERMAN_TITOV_INTERNATIONAL_AIRPORT = "BAX" 328 | YUNDUM_INTERNATIONAL_AIRPORT = "BJL" 329 | BAHJA_AIRPORT = "BJQ" 330 | MILAS_BODRUM_AIRPORT = "BJV" 331 | STURDEE_VALLEY_AIRPORT = "YTC" 332 | MAASTRICHT_AACHEN_AIRPORT = "MST" 333 | GATINEAU_AIRPORT = "YND" 334 | INEDBIRENNE_AIRPORT = "DJG" 335 | AALBORG_AIRPORT = "AAL" 336 | NATUASHISH_AIRPORT = "YNP" 337 | LOUIS_ARMSTRONG_NEW_ORLEANS_INTERNATIONAL_AIRPORT = "MSY" 338 | WHITEHORSE_AIRPORT = "YXY" 339 | FLORIDA_KEYS_MARATHON_AIRPORT = "MTH" 340 | MONTROSE_REGIONAL_AIRPORT = "MTJ" 341 | PHUNG_DUC_AIRPORT = "BMV" 342 | NASHVILLE_INTERNATIONAL_AIRPORT = "BNA" 343 | BANDAR_ABBAS_INTERNATIONAL_AIRPORT = "BND" 344 | JOMO_KENYATTA_INTERNATIONAL_AIRPORT = "NBO" 345 | MAAFARU_INTERNATIONAL_AIRPORT = "NMF" 346 | CHANGBAISHAN_AIRPORT = "NBS" 347 | COTE_DAZUR_AIRPORT = "NCE" 348 | KIRKWALL_AIRPORT = "KOI" 349 | BRINDISI_SALENTO_AIRPORT = "BDS" 350 | BARDUFOSS_AIRPORT = "BDU" 351 | BENBECULA_AIRPORT = "BEB" 352 | RAFAEL_HERNANDEZ_AIRPORT = "BQN" 353 | BEAUVAIS_TILLE_AIRPORT = "BVA" 354 | BOA_VISTA_AIRPORT = "BVB" 355 | LAROCHE_AIRPORT = "BVE" 356 | RANKIN_INLET_AIRPORT = "YRT" 357 | BANGOR_INTERNATIONAL_AIRPORT = "BGR" 358 | BHAIRAWA_AIRPORT = "BWA" 359 | LAS_BRUJAS_AIRPORT = "BWW" 360 | MERIMBULA_AIRPORT = "MIM" 361 | NOTO_AIRPORT = "NTQ" 362 | BAIKONUR_KRAYNIY_AIRPORT = "BXY" 363 | ALBERT_BRAY_AIRPORT = "BYF" 364 | BELTSY_AIRPORT = "BZY" 365 | KASANE_AIRPORT = "BBK" 366 | KOTA_KINABALU_INTERNATIONAL_AIRPORT = "BKI" 367 | BURKE_LAKEFRONT_AIRPORT = "BKL" 368 | GUANAJUATO_INTERNATIONAL_AIRPORT = "BJX" 369 | BALKANABAT_AIRPORT = "BKN" 370 | CENTRAL_ILLINOIS_REGIONAL_AIRPORT = "BMI" 371 | CABINDA_AIRPORT = "CAB" 372 | MORELIA_AIRPORT = "MLM" 373 | CASCAVEL_AIRPORT = "CAC" 374 | BARTOLOMEU_LISANDRO_AIRPORT = "CAW" 375 | J_WILSTERMAN_AIRPORT = "CBB" 376 | CAMBRIDGE_AIRPORT = "CBG" 377 | JARDINES_DEL_REY_AIRPORT = "CCC" 378 | CARCASSONNE_AIRPORT = "CCF" 379 | COCOS_ISLANDS_AIRPORT = "CCK" 380 | DAWSON_CITY_AIRPORT = "YDA" 381 | ZWEIBRUECKEN_AIRPORT = "ZQW" 382 | TOKUA_AIRPORT = "RAB" 383 | ROROS_AIRPORT = "RRS" 384 | BALLINA_BYRON_AIRPORT = "BNK" 385 | BRONNOYSUND_AIRPORT_BRONNOY = "BNN" 386 | BRAMBLE_AIRPORT = "MNI" 387 | MONROE_REGIONAL_AIRPORT = "MLU" 388 | DURHAM_TEES_VALLEY_AIRPORT = "MME" 389 | SAINT_HELENA_AIRPORT = "ASI" 390 | BENIN_CITY_AIRPORT = "BNI" 391 | PORTO_SEGURO_AIRPORT = "BPS" 392 | BANGDA_AIRPORT = "BPX" 393 | MAMMOTH_LAKES_AIRPORT = "MMH" 394 | MURMANSK_AIRPORT = "MMK" 395 | MORRISTOWN_MUNICIPAL_AIRPORT = "MMU" 396 | MALMO_AIRPORT = "MMX" 397 | PENANG_INTERNATIONAL_AIRPORT = "PEN" 398 | BISKRA_AIRPORT = "BSK" 399 | MACEIO_ZUMBI_DOS_PALMARES_INTERNATIONAL_AIRPORT = "MCZ" 400 | NETAJI_SUBHAS_CHANDRA_BOSE_AIRPORT = "CCU" 401 | ADRAR_AIRPORT = "AZR" 402 | BLAGOVESCHENSK_AIRPORT = "BQS" 403 | BREST_AIRPORT = "BQT" 404 | BARREIRAS_AIRPORT = "BRA" 405 | BRASILIA_INTERNATIONAL_AIRPORT = "BSB" 406 | KIRAKIRA_AIRPORT = "IRA" 407 | BACHA_KHAN_INTERNATIONAL_AIRPORT = "PEW" 408 | PENZA_AIRPORT = "PEZ" 409 | PHILADELPHIA_INTERNATIONAL_AIRPORT = "PHL" 410 | PARKES_AIRPORT = "PKE" 411 | PAKSE_AIRPORT = "PKZ" 412 | AIN_EL_BEY_AIRPORT = "CZL" 413 | RESOLUTE_BAY_AIRPORT = "YRB" 414 | BELLA_COOLA_AIRPORT = "QBC" 415 | LANZAROTE_AIRPORT = "ACE" 416 | CHEREPOVETS_AIRPORT = "CEE" 417 | HAWARDEN_AIRPORT = "CEG" 418 | PRINCE_MOHAMMAD_BIN_ABDULAZIZ_INTERNATIONAL_AIRPORT = "MED" 419 | SULTAN_MAHMUD_BADARUDDIN_II_AIRPORT = "PLM" 420 | EMMET_COUNTY_AIRPORT = "PLN" 421 | PORT_LINCOLN_AIRPORT = "PLO" 422 | PROVIDENCIALES_INTERNATIONAL_AIRPORT = "PLS" 423 | MUTIARA_AIRPORT = "PLW" 424 | PORT_ELIZABETH_INTERNATIONAL_AIRPORT = "PLZ" 425 | EL_TEPUAL_AIRPORT = "PMC" 426 | PALMA_DE_MALLORCA_AIRPORT = "PMI" 427 | PHNOM_PENH_INTERNATIONAL_AIRPORT = "PNH" 428 | POHNPEI_AIRPORT = "PNI" 429 | BISBEE_MUNICIPAL_AIRPORT = "BSQ" 430 | KEISAH_AIRPORT = "KEA" 431 | ANGLING_LAKE_AIRPORT = "YAX" 432 | BASCO_AIRPORT = "BSO" 433 | CRESTON_VALLEY_AIRPORT = "CFQ" 434 | CARPIQUET_AIRPORT = "CFR" 435 | BENITO_JUAREZ_INTERNATIONAL_AIRPORT = "MEX" 436 | SALGADO_FILHO_INTERNATIONAL_AIRPORT = "POA" 437 | TAHITI_FAAA_AIRPORT = "PPT" 438 | WONDERBOOM_AIRPORT = "PRY" 439 | PISA_INTERNATIONAL_AIRPORT = "PSA" 440 | TRI_CITIES_AIRPORT = "PSC" 441 | IQALUIT_AIRPORT = "YFB" 442 | PRINCE_SAID_IBRAHIM_INTERNATONAL_AIRPORT = "HAH" 443 | THEODORE_FRANCIS_GREEN_MEMORIAL_STATE_AIRPORT = "PVD" 444 | SHANGHAI_PUDONG_INTERNATIONAL_AIRPORT = "PVG" 445 | PORTO_VELHO_INTERNATIONAL_AIRPORT = "PVH" 446 | BERENS_RIVER_AIRPORT = "YBV" 447 | MOBILE_REGIONAL_AIRPORT = "MOB" 448 | LES_SALINES_AIRPORT = "AAE" 449 | ARAXA_AIRPORT = "AAX" 450 | ABAKAN_AIRPORT = "ABA" 451 | SULTAN_ISKANDAR_MUDA_INTERNATIONAL_AIRPORT = "BTJ" 452 | BATON_ROUGE_METROPOLITAN_AIRPORT = "BTR" 453 | BURLINGTON_INTERNATIONAL_AIRPORT = "BTV" 454 | MARECHAL_RONDON_INTERNATIONAL_AIRPORT = "CGB" 455 | MONTES_CLAROS_AIRPORT = "MOC" 456 | KINGSTON_NORMAN_ROGERS_AIRPORT = "YGK" 457 | MOLDE_AIRPORT_ARO = "MOL" 458 | DRYDEN_REGIONAL_AIRPORT = "YHD" 459 | EAST_FORK_AIRPORT = "EFO" 460 | MORONDAVA_AIRPORT = "MOQ" 461 | MINOT_INTERNATIONAL_AIRPORT = "MOT" 462 | MORANBAH_AIRPORT = "MOV" 463 | BORACAY_AIRPORT = "MPH" 464 | ADANA_AIRPORT = "ADA" 465 | ADIYAMAN_AIRPORT = "ADF" 466 | GUSTAVO_ROJAS_PINILLA_AIRPORT = "ADZ" 467 | BRUNEI_INTERNATIONAL_AIRPORT = "BWN" 468 | SAO_PAULO_CONGONHAS_AIRPORT = "CGH" 469 | MONTPELLIER_MEDITERRANEE_AIRPORT = "MPL" 470 | BURNIE_WYNYARD_AIRPORT = "BWT" 471 | PLEIKU_AIRPORT = "PXU" 472 | WILLIAMS_LAKE_AIRPORT = "YWL" 473 | AKWA_IBOM_AIRPORT = "QUO" 474 | FOOTNER_LAKE_AIRPORT = "YOJ" 475 | CAGLIARI_ELMAS_AIRPORT = "CAG" 476 | MAKALE_AIRPORT = "MQX" 477 | MISURATA_AIRPORT = "MRA" 478 | CANBERRA_AIRPORT = "CBR" 479 | CATUMBELA_AIRPORT = "CBT" 480 | CHANGCHUN_LONGJIA_INTERNATIONAL_AIRPORT = "CGQ" 481 | CAMPO_GRANDE_INTERNATIONAL_AIRPORT = "CGR" 482 | JORGE_NEWBERY_AIRPORT = "AEP" 483 | SAN_RAFAEL_AIRPORT = "AFA" 484 | AUGSBURG_AIRPORT = "AGB" 485 | LA_GARENNE_AIRPORT = "AGF" 486 | ALEJO_GARCIA_AIRPORT = "AGT" 487 | AGUASCALIENTS_INTERNATIONAL_AIRPORT = "AGU" 488 | LAGUINDINGAN_INTERNATIONAL_AIRPORT = "CGY" 489 | THUNDER_BAY_INTERNATIONAL_AIRPORT = "YQT" 490 | CABLE_AIRPORT = "CCB" 491 | GORNO_ALTAYSK_AIRPORT = "RGK" 492 | CRANE_COUNTY_AIRPORT = "CCG" 493 | CALICUT_INTERNATIONAL_AIRPORT = "CCJ" 494 | MORO_AIRPORT = "MXH" 495 | MACTAN_CEBU_INTERNATIONAL_AIRPORT = "CEB" 496 | DEL_NORTE_COUNTY_REGIONAL_AIRPORT = "CEC" 497 | CHIANG_RAI_INTERNATIONAL_AIRPORT = "CEI" 498 | AJACCIO_NAPOLEON_BONAPARTE_AIRPORT = "AJA" 499 | JOUF_AIRPORT = "AJF" 500 | AGRI_AIRPORT = "AJI" 501 | IN_AMENAS_AIRPORT = "IAM" 502 | MUS_AIRPORT = "MSR" 503 | YANGON_INTERNATIONAL_AIRPORT = "RGN" 504 | ANGELHOLM_HELSINGBORG_AIRPORT = "AGH" 505 | MOSHOESHOE_INTERNATIONAL_AIRPORT = "MSU" 506 | CAPE_GIRARDEAU_AIRPORT = "CGI" 507 | SOEKARNO_HATTA_INTERNATIONAL_AIRPORT = "CGK" 508 | SHAH_AMANAT_INTERNATIONAL_AIRPORT = "CGP" 509 | CHATTANOOGA_AIRPORT = "CHA" 510 | CHARLESTON_INTERNATIONAL_AIRPORT = "CHS" 511 | CIAMPINO_G_B_PASTINE_INTERNATIONAL_AIRPORT = "CIA" 512 | THE_EASTERN_IOWA_AIRPORT = "CID" 513 | E_BELTRAM_AIRPORT = "CIJ" 514 | AKSU_AIRPORT = "AKU" 515 | AKTYUBINSK_AIRPORT = "AKX" 516 | ALMATY_AIRPORT = "ALA" 517 | AHMEDABAD_AIRPORT = "AMD" 518 | AMSTERDAM_AIRPORT_SCHIPHOL = "AMS" 519 | ILULISSAT_AIRPORT = "JAV" 520 | YURI_GAGARIN_AIRPORT = "MSZ" 521 | DAHL_CREEK_AIRPORT = "DCK" 522 | CHRISTCHURCH_INTERNATIONAL_AIRPORT = "CHC" 523 | EGILSSTADIR_AIRPORT = "EGS" 524 | CHAOYANG_AIRPORT = "CHG" 525 | V_C_BIRD_INTERNATIONAL_AIRPORT = "ANU" 526 | ANSHAN_TENGAO_AIRPORT = "AOG" 527 | SHYMKENT_AIRPORT = "CIT" 528 | CORNEL_RUIZ_AIRPORT = "CIX" 529 | CAJAMARCA_AIRPORT = "CJA" 530 | CHEDDI_JAGAN_INTERNATIONAL_AIRPORT = "GEO" 531 | BAYANNUR_TIANJITAI_AIRPORT = "RLK" 532 | SANTA_ANA_AIRPORT = "NNB" 533 | COIMBATORE_INTERNATIONAL_AIRPORT = "CJB" 534 | EL_LOA_AIRPORT = "CJC" 535 | CHEONGJU_AIRPORT = "CJJ" 536 | BENEDUM_AIRPORT = "CKB" 537 | CHONGQING_JIANGBEI_INTERNATIONAL_AIRPORT = "CKG" 538 | CHOKURDAH_AIRPORT = "CKH" 539 | APARTADO_AIRPORT = "APO" 540 | QUICHE_AIRPORT = "AQB" 541 | TOREMBI_AIRPORT = "TCJ" 542 | NAMPULA_AIRPORT = "APL" 543 | CONAKRY_AIRPORT = "CKY" 544 | MAPUTO_INTERNATIONAL_AIRPORT = "MPM" 545 | CANAKKALE_AIRPORT = "CKZ" 546 | MCCLELLAN_PALOMAR_AIRPORT = "CLD" 547 | ALFONSO_B_ARAGON_AIRPORT = "CLO" 548 | ALOR_ISLAND_AIRPORT = "ARD" 549 | WATERTOWN_AIRPORT = "ART" 550 | ASTRAKHAN_AIRPORT = "ASF" 551 | COLIMA_AIRPORT = "CLQ" 552 | SANDAKAN_AIRPORT = "SDK" 553 | SAINTE_CATHERINE_AIRPORT = "CLY" 554 | CIUDAD_DEL_CARMEN_AIRPORT = "CME" 555 | JOHN_GLENN_COLUMBUS_INTERNATIONAL_AIRPORT = "CMH" 556 | ALTAMIRA_AIRPORT = "ATM" 557 | NOUMERATE_AIRPORT = "GHA" 558 | MONTAUK_AIRPORT = "MTP" 559 | JOAO_SUASSUNA_AIRPORT = "CPV" 560 | YEAGER_AIRPORT = "CRW" 561 | LOS_GARZONES_AIRPORT = "MTR" 562 | JOSE_TADEO_MONAGAS_INTERNATIONAL_AIRPORT = "MUN" 563 | GWADAR_AIRPORT = "GWD" 564 | AUGUSTA_AIRPORT = "AUG" 565 | AURILLAC_AIRPORT = "AUR" 566 | ARAGUAINA_AIRPORT = "AUX" 567 | AN_SHUN_HUANG_GUO_SHU_AIRPORT = "AVA" 568 | MOHAMED_V_INTERNATIONAL_AIRPORT = "CMN" 569 | IGN_AGRAMONTE_INTERNATIONAL_AIRPORT = "CMW" 570 | KOGALNICEANU_AIRPORT = "CND" 571 | GWALIOR_AIRPORT = "GWL" 572 | GAZIPASA_AIRPORT = "GZP" 573 | GAZIANTEP_AIRPORT = "GZT" 574 | HANIMAADHOO_AIRPORT = "HAQ" 575 | GOTEBORG_LANDVETTER_AIRPORT = "GOT" 576 | YAMPA_VALLEY_AIRPORT = "HDN" 577 | HAT_YAI_INTERNATIONAL_AIRPORT = "HDY" 578 | WABUSH_AIRPORT = "YWK" 579 | HERAT_INTERNATIONAL_AIRPORT = "HEA" 580 | HERAKLION_AIRPORT = "HER" 581 | MULTAN_AIRPORT = "MUX" 582 | MUSOMA_AIRPORT = "MUZ" 583 | EL_EDEN_AIRPORT = "AXM" 584 | SPRINGPOINT_AIRPORT = "AXP" 585 | YANAMILLA_AIRPORT = "AYP" 586 | BATA_AIRPORT = "BSG" 587 | CARRASCO_INTERNATIONAL_AIRPORT = "MVD" 588 | SATU_MARE_INTERNATIONAL_AIRPORT = "SUJ" 589 | DOUALA_AIRPORT = "DLA" 590 | SAULT_STE_MARIE_AIRPORT = "SSM" 591 | MAKHACHKALA_AIRPORT = "MCX" 592 | SUNSHINE_COAST_AIRPORT = "MCY" 593 | SAM_RATULANGI_INTERNATIONAL_AIRPORT = "MDC" 594 | MPANDA_AIRPORT = "MOW" 595 | SHIJIAZHUANG_LUANCHENG_AIRPORT = "LCT" 596 | WILLIAMSON_COUNTY_AIRPORT = "MWA" 597 | CAMBA_PUNTA_AIRPORT = "CNQ" 598 | TSTC_WACO_AIRPORT = "CNW" 599 | YAZD_AIRPORT = "AZD" 600 | BATMAN_AIRPORT = "BAL" 601 | DARU_AIRPORT = "DAU" 602 | FLIN_FLON_AIRPORT = "YFO" 603 | GOLENIOW_AIRPORT = "SZZ" 604 | QUANZHOU_JINJIANG_INTERNATIONAL_AIRPORT = "JJN" 605 | JACKSONVILLE_INTERNATIONAL_AIRPORT = "JAX" 606 | LA_ISABELA_INTERNATIONAL_AIRPORT = "JBQ" 607 | JERSEY_AIRPORT = "JER" 608 | JOHN_F_KENNEDY_INTERNATIONAL_AIRPORT = "JFK" 609 | KENNETH_KAUNDA_INTERNATIONAL_AIRPORT = "LUN" 610 | AXAMO_AIRPORT = "JKG" 611 | HARRISBURG_INTERNATIONAL_AIRPORT = "MDT" 612 | CHICAGO_MIDWAY_INTERNATIONAL_AIRPORT = "MDW" 613 | EL_PLUMERILLO_INTERNATIONAL_AIRPORT = "MDZ" 614 | EL_TARI_AIRPORT = "KOE" 615 | KAGOSHIMA_AIRPORT = "KOJ" 616 | KRUUNUPYY_AIRPORT = "KOK" 617 | LAKE_CHARLES_REGIONAL_AIRPORT = "LCH" 618 | ESSENDON_AIRPORT = "MEB" 619 | BENSON_MUNICIPAL_AIRPORT = "BBB" 620 | INGENIERO_AERONAUTICO_AMBROSIO_L_V_TARAVELLA_INTERNATIONAL_AIRPORT = "COR" 621 | COLORADO_SPRINGS_AIRPORT = "COS" 622 | COLUMBIA_REGIONAL_AIRPORT = "COU" 623 | A_N_R_ROBINSON_INTERNATIONAL_AIRPORT = "TAB" 624 | DAEGU_INTERNATIONAL_AIRPORT = "TAE" 625 | TANNA_AIRPORT = "TAH" 626 | TAKAMATSU_AIRPORT = "TAK" 627 | TAMPICO_INTERNATIONAL_AIRPORT = "TAM" 628 | STATESBORO_BULLOCH_COUNTY_AIRPORT = "TBR" 629 | TBILISI_INTERNATIONAL_AIRPORT = "TBS" 630 | TABRIZ_AIRPORT = "TBZ" 631 | RICKENBACKER_INTERNATIONAL_AIRPORT = "LCK" 632 | LIANCHENG_AIRPORT = "LCX" 633 | CHAPELCO_AIRPORT = "CPC" 634 | CAMPECHE_INTERNATIONAL_AIRPORT = "CPE" 635 | COPENHAGEN_AIRPORT = "CPH" 636 | CHAMONATE_AIRPORT = "CPO" 637 | BACAU_AIRPORT = "BCM" 638 | CASPER_NATRONA_COUNTY_INTERNATIONAL_AIRPORT = "CPR" 639 | ST_LOUIS_DOWNTOWN_AIRPORT = "CPS" 640 | CAPE_TOWN_INTERNATIONAL_AIRPORT = "CPT" 641 | ABADAN_AIRPORT = "ABD" 642 | GODS_LAKE_NARROWS_AIRPORT = "YGO" 643 | AL_AQIQ_AIRPORT = "ABT" 644 | NNAMDI_AZIKIWE_INTERNATIONAL_AIRPORT = "ABV" 645 | ALBURY_AIRPORT = "ABX" 646 | RICK_HUSBAND_AMARILLO_INTERNATIONAL_AIRPORT = "AMA" 647 | TONGREN_AIRPORT = "TEN" 648 | BENJAMIN_RIVERA_NORIEGA_AIRPORT = "CPX" 649 | HOSEA_KUTAKO_INTERNATIONAL_AIRPORT = "WDH" 650 | GENERAL_E_MOSCONI_INTERNATIONAL_AIRPORT = "CRD" 651 | BRADFORD_AIRPORT = "BFD" 652 | MAUN_AIRPORT = "MUB" 653 | ADELAIDE_AIRPORT = "ADL" 654 | ARDABIL_AIRPORT = "ADU" 655 | BOEING_FIELD_INTERNATIONAL_AIRPORT = "BFI" 656 | TONGLIAO_AIRPORT = "TGO" 657 | PODKAMENNAYA_TUNGUSKA_AIRPORT = "TGP" 658 | TANGA_AIRPORT = "TGT" 659 | TONCONTIN_AIRPORT = "TGU" 660 | TERESINA_AIRPORT = "THE" 661 | SUKHOTHAI_AIRPORT = "THS" 662 | TIMIKA_AIRPORT = "TIM" 663 | BIJIE_AIRPORT = "BFJ" 664 | MBEYA_AIRPORT = "MBI" 665 | MACAPA_INTERNATIONAL_AIRPORT = "MCP" 666 | MINERAL_WELLS_AIRPORT = "MWL" 667 | MUAN_INTERNATIONAL_AIRPORT = "MWX" 668 | MWANZA_AIRPORT = "MWZ" 669 | MEXICALI_AIRPORT = "MXL" 670 | MILANO_MALPENSA_AIRPORT = "MXP" 671 | BUFFALO_MUNICIPAL_AIRPORT = "BFK" 672 | BRAGANCA_AIRPORT = "BGC" 673 | BANGUI_AIRPORT = "BGF" 674 | MOGADISHU_INTERNATIONAL_AIRPORT = "MGQ" 675 | TRIPOLI_INTERNATIONAL_AIRPORT = "TIP" 676 | TIRUPATI_AIRPORT = "TIR" 677 | TIMARU_AIRPORT = "TIU" 678 | TIVAT_AIRPORT = "TIV" 679 | ROSHCHINO_INTERNATIONAL_AIRPORT = "TJM" 680 | MERZIFON_AIRPORT = "MZH" 681 | SIERRA_MAESTRA_AIRPORT = "MZO" 682 | MORUYA_AIRPORT = "MYA" 683 | MALINDI_AIRPORT = "MYD" 684 | MAZAR_I_SHARIF_AIRPORT = "MZR" 685 | BAR_HARBOR_AIRPORT = "BHB" 686 | BISHA_AIRPORT = "BHH" 687 | COMANDANTE_AIRPORT = "BHI" 688 | BUKHARA_AIRPORT = "BHK" 689 | RAJA_BHOJ_AIRPORT = "BHO" 690 | RAGLAN_AIRPORT = "BHS" 691 | BAHAWALPUR_AIRPORT = "BHV" 692 | CHEBOKSARY_AIRPORT = "CSY" 693 | ARVIDSJAUR_AIRPORT = "AJR" 694 | ARACAJU_AIRPORT = "AJU" 695 | CATAMARCA_AIRPORT = "CTC" 696 | TAMWORTH_AIRPORT = "TMW" 697 | JINAN_YAOQIANG_INTERNATIONAL_AIRPORT = "TNA" 698 | TANGIER_IBN_BATTOUTA_AIRPORT = "TNG" 699 | TAINAN_AIRPORT = "TNN" 700 | COATEPEQUE_AIRPORT = "CTF" 701 | CHETUMAL_AIRPORT = "CTM" 702 | COOKTOWN_AIRPORT = "CTN" 703 | CHENGDU_SHUANGLIU_INTERNATIONAL_AIRPORT = "CTU" 704 | BIARRITZ_ANGLET_BAYONNE_AIRPORT = "BIQ" 705 | BIRATNAGAR_AIRPORT = "BIR" 706 | MARISCAL_LAMAR_INTERNATIONAL_AIRPORT = "CUE" 707 | PANAMA_PACIFICO_AIRPORT = "BLB" 708 | BAJAWA_SOA_AIRPORT = "BJW" 709 | BADAJOZ_AIRPORT = "BJZ" 710 | MARANGGO_AIRPORT = "TQQ" 711 | FRANCISCO_SARABIA_INTERNATIONAL_AIRPORT = "TRC" 712 | TRONDHEIM_AIRPORT_VAERNES = "TRD" 713 | TRI_CITIES_REGIONAL_AIRPORT = "TRI" 714 | TURIN_AIRPORT = "TRN" 715 | TAREE_AIRPORT = "TRO" 716 | MONMOUTH_EXECUTIVE_AIRPORT = "BLM" 717 | QUEEN_ALIA_INTERNATIONAL_AIRPORT = "AMM" 718 | PATTIMURA_AIRPORT = "AMQ" 719 | ADAM_AIRPORT = "AOM" 720 | CLOVIS_MUNICIPAL_AIRPORT = "CVN" 721 | MATSUYAMA_AIRPORT = "MYJ" 722 | MYRTLE_BEACH_INTERNATIONAL_AIRPORT = "MYR" 723 | MTWARA_AIRPORT = "MYW" 724 | MIRI_AIRPORT = "MYY" 725 | LA_NUBIA_AIRPORT = "MZL" 726 | CERRO_MORENO_INTERNATIONAL_AIRPORT = "ANF" 727 | GUGLIELMO_MARCONI_AIRPORT = "BLQ" 728 | SKUKUZA_AIRPORT = "SZK" 729 | SAO_GONCALO_DO_AMARANTE_GOVERNADOR_ALUIZIO_ALVES_INTL_AIRPORT = "NAT" 730 | ANDENES_AIRPORT = "ANX" 731 | ANCONA_FALCONARA_AIRPORT = "AOI" 732 | MAZATLAN_INTERNATIONAL_AIRPORT = "MZT" 733 | SULTAN_MUHAMMAD_SALAHUDDIN_AIRPORT = "BMU" 734 | DR_BABASAHEB_AMBEDKAR_INTERNATIONAL_AIRPORT = "NAG" 735 | NAKHICHEVAN_AIRPORT = "NAJ" 736 | NAPLES_INTERNATIONAL_AIRPORT = "NAP" 737 | CHURCHILL_AIRPORT = "YYQ" 738 | TREVISO_AIRPORT = "TSF" 739 | TSUSHIMA_AIRPORT = "TSJ" 740 | TIMISOARA_TRAIAN_VUIA_INTERNATIONAL_AIRPORT = "TSR" 741 | TRANG_AIRPORT = "TST" 742 | NAPLES_MUNICIPAL_AIRPORT = "APF" 743 | ALPENA_COUNTY_REGIONAL_AIRPORT = "APN" 744 | BRISBANE_AIRPORT = "BNE" 745 | BORDEAUX_AIRPORT = "BOD" 746 | NARATHIWAT_AIRPORT = "NAW" 747 | BOURGAS_AIRPORT = "BOJ" 748 | FLAMINGO_INTERNATIONAL_AIRPORT = "BON" 749 | ALTOONA_AIRPORT = "AOO" 750 | ALFEREZ_FAP_ALFREDO_VLADIMIR_SARA_BAUER_AIRPORT = "AOP" 751 | SULTAN_ABDUL_HALIM_AIRPORT = "AOR" 752 | CARNARVON_AIRPORT = "CVQ" 753 | COVENTRY_AIRPORT = "CVT" 754 | GOROKA_AIRPORT = "GKA" 755 | BEIJING_NANYUAN_AIRPORT = "NAY" 756 | BEGISHEVO_AIRPORT = "NBC" 757 | ENFIDHA_HAMMAMET_INTERNATIONAL_AIRPORT = "NBE" 758 | NERYUNGRI_AIRPORT = "NER" 759 | NEWCASTLE_AIRPORT = "NEV" 760 | TALAGI_AIRPORT = "ARH" 761 | ARMIDALE_AIRPORT = "ARM" 762 | STOCKHOLM_ARLANDA_AIRPORT = "ARN" 763 | ARACATUBA_AIRPORT = "ARU" 764 | ASHGABAT_AIRPORT = "ASB" 765 | TOWNSVILLE_AIRPORT = "TSV" 766 | BOLE_AIRPORT = "BPL" 767 | SULTAN_AJI_MUHAMAD_SULAIMAN_AIRPORT = "BPN" 768 | JEFFERSON_COUNTY_AIRPORT = "BPT" 769 | NEWCASTLE_INTERNATIONAL_AIRPORT = "NCL" 770 | NUKUS_AIRPORT = "NCU" 771 | NDJAMENA_AIRPORT = "NDJ" 772 | NADOR_INTERNATIONAL_AIRPORT = "NDR" 773 | SRI_GURU_RAM_DASS_JEE_INTERNATIONAL_AIRPORT = "ATQ" 774 | OUTAGAMIE_COUNTY_REGIONAL_AIRPORT = "ATW" 775 | ARAUCA_AIRPORT = "AUC" 776 | AUSTIN_BERGSTROM_INTERNATIONAL_AIRPORT = "AUS" 777 | CHILEKA_AIRPORT = "BLZ" 778 | SAN_CARLOS_DE_BARILOCHE_INTERNATIONAL_AIRPORT = "BRC" 779 | ASHEVILLE_REGIONAL_AIRPORT = "AVL" 780 | PALESE_AIRPORT = "BRI" 781 | BURLINGTON_AIRPORT = "BRL" 782 | SOUTH_PADRE_ISLAND_INTERNATIONAL_AIRPORT = "BRO" 783 | SAO_JOSE_DO_RIO_PRETO_AIRPORT = "SJP" 784 | LUIS_MUNOZ_MARIN_INTERNATIONAL_AIRPORT = "SJU" 785 | SAN_LUIS_POTOSI_AIRPORT = "SLP" 786 | AKITA_AIRPORT = "AXT" 787 | ANTALYA_AIRPORT = "AYT" 788 | MENDI_AIRPORT = "MDU" 789 | PHOENIX_MESA_GATEWAY_AIRPORT = "AZA" 790 | TETERBORO_AIRPORT = "TEB" 791 | TAITUNG_AIRPORT = "TTT" 792 | TUGUEGARAO_AIRPORT = "TUG" 793 | TURAIF_AIRPORT = "TUI" 794 | TULSA_INTERNATIONAL_AIRPORT = "TUL" 795 | BASRA_INTERNATIONAL_AIRPORT = "BSR" 796 | BRIGADEIRO_EDUARDO_GOMES_AIRPORT = "NVM" 797 | BRATSK_AIRPORT = "BTK" 798 | BUTTE_AIRPORT = "BTM" 799 | BINTULU_AIRPORT = "BTU" 800 | CAMOPI_AIRPORT = "OYC" 801 | ZAPOROZHYE_AIRPORT = "OZH" 802 | AIN_BEIDA_AIRPORT = "OGX" 803 | BIJU_PATNAIK_INTERNATIONAL_AIRPORT = "BBI" 804 | BARCELONA_EL_PRAT_AIRPORT = "BCN" 805 | BUNDABERG_AIRPORT = "BDB" 806 | SYAMSUDIN_NOOR_INTERNATIONAL_AIRPORT = "BDJ" 807 | TUNIS_CARTHAGE_INTERNATIONAL_AIRPORT = "TUN" 808 | TAUPO_AIRPORT = "TUO" 809 | TUPELO_REGIONAL_AIRPORT = "TUP" 810 | TUCSON_INTERNATIONAL_AIRPORT = "TUS" 811 | CHERRY_CAPITAL_AIRPORT = "TVC" 812 | THIEF_RIVER_FALLS_REGIONAL_AIRPORT = "TVF" 813 | THOMASVILLE_MUNICIPAL_AIRPORT = "TVI" 814 | TANGSHAN_SANNUHE_AIRPORT = "TVS" 815 | VLADIKAVKAZ_AIRPORT = "OGZ" 816 | BHATINDA_AIRPORT = "BUP" 817 | MUARA_BUNGO_AIRPORT = "BUU" 818 | BEJAIA_AIRPORT = "BJA" 819 | OHRID_AIRPORT = "OHD" 820 | ONTARIO_INTERNATIONAL_AIRPORT = "ONT" 821 | GOLD_COAST_AIRPORT = "OOL" 822 | OPA_LOCKA_EXECUTIVE_AIRPORT = "OPF" 823 | ARE_OSTERSUND_AIRPORT = "OSD" 824 | POINTE_NOIRE_AIRPORT = "PNR" 825 | NIGHTMUTE_AIRPORT = "NME" 826 | POINT_HOPE_AIRPORT = "PHO" 827 | AKUREYRI_AIRPORT = "AEY" 828 | AGADIR_AL_MASSIRA_AIRPORT = "AGA" 829 | VAL_DE_CANS_INTERNATIONAL_AIRPORT = "BEL" 830 | BREST_BRETAGNE_AIRPORT = "BES" 831 | BEIRUT_RAFIC_HARIRI_INTERNATIONAL_AIRPORT = "BEY" 832 | WESTERN_NEBRASKA_REGIONAL_AIRPORT = "BFF" 833 | BINGOL_AIRPORT = "BGG" 834 | TORSBY_AIRPORT = "TYF" 835 | TAIYUAN_WUSU_INTERNATIONAL_AIRPORT = "TYN" 836 | TYLER_POUNDS_REGIONAL_AIRPORT = "TYR" 837 | MCGHEE_TYSON_AIRPORT = "TYS" 838 | TRABZON_AIRPORT = "TZX" 839 | MAHARANA_PRATAP_AIRPORT = "UDR" 840 | BEVERLY_MUNICIPAL_AIRPORT = "BVY" 841 | BALTIMORE_WASH_INTERNATIONAL_THURGOOD_MARSHALL_AIRPORT = "BWI" 842 | NUIQSUT_AIRPORT = "NUI" 843 | NANTONG_XINGDONG_AIRPORT = "NTG" 844 | NYAGAN_AIRPORT = "NYA" 845 | NADYM_AIRPORT = "NYM" 846 | BATNA_AIRPORT = "BLJ" 847 | AIRPORT_CMDT_GUSTAVO_KRAEMER = "BGX" 848 | ORIO_AL_SERIO_INTERNATIONAL_AIRPORT = "BGY" 849 | KAVIENG_AIRPORT = "KVG" 850 | STOCKHOLM_SKAVSTA_AIRPORT = "NYO" 851 | NYURBA_AIRPORT = "NYR" 852 | GEORGE_BEST_BELFAST_CITY_AIRPORT = "BHD" 853 | NAY_PYI_TAW_AIRPORT = "NYT" 854 | QUETTA_AIRPORT = "UET" 855 | OBAN_AIRPORT = "OBN" 856 | TOKACHI_OBIHIRO_AIRPORT = "OBO" 857 | UFA_INTERNATIONAL_AIRPORT = "UFA" 858 | CORISCO_INTERNATIONAL_AIRPORT = "OCS" 859 | URGENCH_AIRPORT = "UGC" 860 | EL_CARANO_AIRPORT = "UIB" 861 | UST_KAMENOGORSK_AIRPORT = "UKK" 862 | KAHULUI_AIRPORT = "OGG" 863 | OGLE_AIRPORT = "OGL" 864 | OGDENSBURG_AIRPORT = "OGS" 865 | OSLO_AIRPORT_GARDERMOEN = "OSL" 866 | MOSNOV_AIRPORT = "OSR" 867 | OSH_AIRPORT = "OSS" 868 | OSTEND_BRUGES_INTERNATIONAL_AIRPORT = "OST" 869 | HOUARI_BOUMEDIENE_AIRPORT = "ALG" 870 | ANTWERP_INTERNATIONAL_AIRPORT = "ANR" 871 | MOKMER_AIRPORT = "BIK" 872 | BILLINGS_LOGAN_INTERNATIONAL_AIRPORT = "BIL" 873 | BILBAO_AIRPORT = "BIO" 874 | BISMARCK_AIRPORT = "BIS" 875 | UST_KUT_AIRPORT = "UKX" 876 | LENSK_AIRPORT = "ULK" 877 | BONITO_AIRPORT = "BYO" 878 | UMEA_AIRPORT = "UME" 879 | URAJ_AIRPORT = "URJ" 880 | OUAGADOUGOU_INTERNATIONAL_AIRPORT = "OUA" 881 | BRYANSK_INTERNATIONAL_AIRPORT = "BZK" 882 | BEZIERS_VIAS_AIRPORT = "BZR" 883 | SURAT_THANI_AIRPORT = "URT" 884 | ASTURIAS_AIRPORT = "OVD" 885 | PADERBORN_LIPPSTADT_AIRPORT = "PAD" 886 | SKIVE_AIRPORT = "SQW" 887 | PAGADIAN_AIRPORT = "PAG" 888 | FATMAWATI_SOEKARNO_AIRPORT = "BKS" 889 | BARKLEY_REGIONAL_AIRPORT = "PAH" 890 | TOUSSAINT_LOUVERTURE_INTERNATIONAL_AIRPORT = "PAP" 891 | MATECANA_INTERNATIONAL_AIRPORT = "PEI" 892 | BECKLEY_AIRPORT = "BKW" 893 | NSIMALEN_AIRPORT = "NSI" 894 | PANTELLERIA_AIRPORT = "PNL" 895 | PUNE_AIRPORT = "PNQ" 896 | MERCEDITA_AIRPORT = "PSE" 897 | GENERAL_JOSE_ANTONIO_ANZOATEGUI_INTERNATIONAL_AIRPORT = "BLA" 898 | GURAYAT_AIRPORT = "URY" 899 | PALM_SPRINGS_INTERNATIONAL_AIRPORT = "PSP" 900 | ABRUZZO_AIRPORT = "PSR" 901 | POSADAS_AIRPORT = "PSS" 902 | PUTUSSIBAU_AIRPORT = "PSU" 903 | BELLINGHAM_INTERNATIONAL_AIRPORT = "BLI" 904 | BLACKPOOL_AIRPORT = "BLK" 905 | KEMPEGOWDA_INTERNATIONAL_AIRPORT = "BLR" 906 | BROMMA_AIRPORT = "BMA" 907 | NIZHNEVARTOVSK_AIRPORT = "NJC" 908 | AL_NAJAF_INTERNATIONAL_AIRPORT = "NJF" 909 | NORWICH_INTERNATIONAL_AIRPORT = "NWI" 910 | XOXOCOTLAN_AIRPORT = "OAX" 911 | VAN_FERIT_MELEN_AIRPORT = "VAN" 912 | VARNA_AIRPORT = "VAR" 913 | ORANJEMUND_AIRPORT = "OMD" 914 | BANJA_LUKA_AIRPORT = "BNX" 915 | NOGLIKI_AIRPORT = "NGK" 916 | EL_DORADO_INTERNATIONAL_AIRPORT = "BOG" 917 | CHHATRAPATI_SHIVAJI_INTERNATIONAL_AIRPORT = "BOM" 918 | BODO_AIRPORT = "BOO" 919 | NIAMEY_AIRPORT = "NIM" 920 | TURANY_AIRPORT = "BRQ" 921 | PAPA_WESTRAY_AIRPORT = "PPW" 922 | NENJIAN_MELGEN_AIRPORT = "NJJ" 923 | VENICE_MARCO_POLO_AIRPORT = "VCE" 924 | NANJING_LUKOU_INTERNATIONAL_AIRPORT = "NKG" 925 | NAGOYA_AIRPORT = "NKM" 926 | NAKHON_PHANOM_AIRPORT = "NKP" 927 | QUETZALCOATL_INTERNATIONAL_AIRPORT = "NLD" 928 | BRISTOL_AIRPORT = "BRS" 929 | NINGLANG_LUGUHU_AIRPORT = "NLH" 930 | CHARIF_AL_IDRISSI_AIRPORT = "AHU" 931 | CROW_WING_COUNTY_AIRPORT = "BRD" 932 | BREMEN_AIRPORT = "BRE" 933 | BARQUISIMETO_AIRPORT = "BRM" 934 | NORFOLK_ISLAND_AIRPORT = "NLK" 935 | BERN_AIRPORT = "BRN" 936 | BRUSSELS_AIRPORT = "BRU" 937 | BAOSHAN_AIRPORT = "BSD" 938 | NELSPRUIT_AIRPORT = "NLP" 939 | NALATI_AIRPORT = "NLT" 940 | IRELAND_WEST_AIRPORT_KNOCK = "NOC" 941 | FASCENE_AIRPORT = "NOS" 942 | TONTOUTA_AIRPORT = "NOU" 943 | DALA_AIRPORT = "BLE" 944 | NEW_PLYMOUTH_AIRPORT = "NPL" 945 | NEWQUAY_CORNWALL_AIRPORT = "NQY" 946 | NOW_SHAHR_AIRPORT = "NSH" 947 | NELSON_AIRPORT = "NSN" 948 | BUDAPEST_FERENC_LISZT_INTERNATIONAL_AIRPORT = "BUD" 949 | BUFFALO_NIAGARA_INTERNATIONAL_AIRPORT = "BUF" 950 | NOTODDEN_AIRPORT = "NTB" 951 | BULAWAYO_AIRPORT = "BUQ" 952 | BOB_HOPE_AIRPORT = "BUR" 953 | BATUMI_AIRPORT = "BUS" 954 | BATHPALATHANG_AIRPORT = "BUT" 955 | BERLEVAG_AIRPORT = "BVG" 956 | KUNGSANGEN_AIRPORT = "NRK" 957 | BYDGOSZCZ_AIRPORT = "BZG" 958 | WEEZE_AIRPORT = "NRN" 959 | NARITA_INTERNATIONAL_AIRPORT = "NRT" 960 | AEROPUERTO_DEL_NORTE_INTERNATIONAL_AIRPORT = "NTR" 961 | PILANESBERG_INTERNATIONAL_AIRPORT = "NTY" 962 | NAKHON_SI_THAMMARAT_AIRPORT = "NST" 963 | NANTES_ATLANTIQUE_AIRPORT = "NTE" 964 | NORSUP_AIRPORT = "NUS" 965 | NAVEGANTES_AIRPORT = "NVT" 966 | BARISAL_AIRPORT = "BZL" 967 | BENI_MELLAL_AIRPORT = "BEM" 968 | BOURNEMOUTH_AIRPORT = "BOH" 969 | BUTUAN_AIRPORT = "BXU" 970 | BOZEMAN_YELLOWSTONE_INTERNATIONAL_AIRPORT = "BZN" 971 | AWANG_AIRPORT = "CBO" 972 | VILNIUS_INTERNATIONAL_AIRPORT = "VNO" 973 | CALABAR_AIRPORT = "CBQ" 974 | LAL_BAHADUR_SHASTRI_INTERNATIONAL_AIRPORT = "VNS" 975 | MONYWAR_AIRPORT = "NYW" 976 | AKRON_CANTON_AIRPORT = "CAK" 977 | MACHRIHANISH_AIRPORT = "CAL" 978 | CAP_HAITIEN_AIRPORT = "CAP" 979 | FELIX_EBOUE_AIRPORT = "CAY" 980 | COLOGNE_BONN_AIRPORT = "CGN" 981 | ORDU_GIRESUN_AIRPORT = "OGU" 982 | DESTIN_FORT_WALTON_BEACH_AIRPORT = "VPS" 983 | CARRIEL_SUR_AIRPORT = "CCP" 984 | CEDAR_CITY_AIRPORT = "CDC" 985 | WOLF_POINT_INTERNATIONAL_AIRPORT = "OLF" 986 | OLARE_AIRPORT = "OLG" 987 | SOHAR_AIRPORT = "OHS" 988 | OITA_AIRPORT = "OIT" 989 | CHADRON_AIRPORT = "CDR" 990 | NAHA_AIRPORT = "OKA" 991 | SIMON_BOLIVAR_INTERNATIONAL_AIRPORT = "CCS" 992 | OKADAMA_AIRPORT = "OKD" 993 | OKAYAMA_AIRPORT = "OKJ" 994 | OLBIA_COSTA_SMERALDA_AIRPORT = "OLB" 995 | SNOWY_MOUNTAINS_AIRPORT = "OOM" 996 | CABO_FRIO_INTERNATIONAL_AIRPORT = "CFB" 997 | URMIA_AIRPORT = "OMH" 998 | MOSTAR_AIRPORT = "OMO" 999 | ORADEA_AIRPORT = "OMR" 1000 | OMSK_AIRPORT = "OMS" 1001 | ONDANGWA_AIRPORT = "OND" 1002 | ODATE_NOSHIRO_AIRPORT = "ONJ" 1003 | OLENYOK_AIRPORT = "ONK" 1004 | CHELYABINSK_INTERNATIONAL_AIRPORT = "CEK" 1005 | ONTARIO_MUNICIPAL_AIRPORT = "ONO" 1006 | CIUDAD_OBREGON_AIRPORT = "CEN" 1007 | ONSLOW_AIRPORT = "ONS" 1008 | OSTAFYEVO_INTERNATIONAL_BUSINESS_AIRPORT = "OSF" 1009 | OSIJEK_AIRPORT = "OSI" 1010 | OL_SEKI_AIRPORT = "OSJ" 1011 | MONTEZUMA_COUNTY_AIRPORT = "CEZ" 1012 | CARLOS_ROVIROSA_PEREZ_INTERNATIONAL_AIRPORT = "VSA" 1013 | LES_ANGADES_AIRPORT = "OUD" 1014 | OULU_AIRPORT = "OUL" 1015 | DONEGAL_AIRPORT = "CFN" 1016 | NOVOSIBIRSK_TOLMACHEVO_AIRPORT = "OVB" 1017 | SOVETSKY_AIRPORT = "OVS" 1018 | DAVIESS_COUNTY_AIRPORT = "OWB" 1019 | LABO_AIRPORT = "OZC" 1020 | ZAGORA_AIRPORT = "OZG" 1021 | CLERMONT_FERRAND_AUVERGNE_AIRPORT = "CFE" 1022 | COFFS_HARBOUR_AIRPORT = "CFS" 1023 | MARCOS_A_GELABERT_INTERNATIONAL_AIRPORT = "PAC" 1024 | JAIME_GONZALEZ_AIRPORT = "CFG" 1025 | OUARZAZATE_AIRPORT = "OZZ" 1026 | PAULO_AFONSO_AIRPORT = "PAV" 1027 | CHLEF_INTERNATIONAL_AIRPORT = "CFK" 1028 | IOANNIS_KAPODISTRIAS_AIRPORT = "CFU" 1029 | CHANGDE_AIRPORT = "CGD" 1030 | NOUADHIBOU_AIRPORT = "NDB" 1031 | ES_SENIA_AIRPORT = "ORN" 1032 | CHICO_MUNICIPAL_AIRPORT = "CIC" 1033 | PAROS_AIRPORT = "PAS" 1034 | JAY_PRAKASH_NARAYAN_INTERNATIONAL_AIRPORT = "PAT" 1035 | ALEXANDER_BAY_AIRPORT = "ALJ" 1036 | CAPITAN_ROLDEN_AIRPORT = "PCL" 1037 | PALM_BEACH_INTERNATIONAL_AIRPORT = "PBI" 1038 | ZANDERIJ_INTERNATIONAL_AIRPORT = "PBM" 1039 | PLETTENBERG_BAY_AIRPORT = "PBZ" 1040 | CHARLOTTESVILLE_ALBEMARLE_AIRPORT = "CHO" 1041 | PRAIRIE_DU_CHIEN_MUNICIPAL_AIRPORT = "PCD" 1042 | PERTH_AIRPORT = "PER" 1043 | CHANIA_INTERNATIONAL_AIRPORT = "CHQ" 1044 | PETROZAVODSK_AIRPORT = "PES" 1045 | CHANGZHI_AIRPORT = "CIH" 1046 | COMISO_AIRPORT = "CIY" 1047 | FEDERAL_AIRPORT = "PET" 1048 | WICK_AIRPORT = "WIC" 1049 | MINANGKABAU_INTERNATIONAL_AIRPORT = "PDG" 1050 | JOAO_PAULO_II_AIRPORT = "PDL" 1051 | CHUMPHON_AIRPORT = "CJM" 1052 | ABRAHAM_GONZALEZ_INTERNATIONAL_AIRPORT = "CJS" 1053 | EASTERN_OREGON_REGIONAL_AIRPORT = "PDT" 1054 | PORTLAND_INTERNATIONAL_AIRPORT = "PDX" 1055 | PECHORA_AIRPORT = "PEX" 1056 | ALAMARVDASHT_AIRPORT = "PGU" 1057 | PERIGUEUX_AIRPORT = "PGX" 1058 | COMTE_ANTONIO_AMILTON_BERALDO_AIRPORT = "PGZ" 1059 | CLEVELAND_HOPKINS_INTERNATIONAL_AIRPORT = "CLE" 1060 | PASSO_FUNDO_AIRPORT = "PFB" 1061 | PAPHOS_INTERNATIONAL_AIRPORT = "PFO" 1062 | AVRAM_IANCU_CLUJ_INTERNATIONAL_AIRPORT = "CLJ" 1063 | EASTERWOOD_AIRPORT = "CLL" 1064 | PANTNAGAR_AIRPORT = "PGH" 1065 | DEPATI_AMIR_AIRPORT = "PGK" 1066 | BULI_AIRPORT = "PGQ" 1067 | HOUGHTON_COUNTY_AIRPORT = "CMX" 1068 | TANCREDO_NEVES_INTERNATIONAL_AIRPORT = "CNF" 1069 | PITT_GREENVILLE_AIRPORT = "PGV" 1070 | PORT_HARCOURT_INTERNATIONAL_AIRPORT = "PHC" 1071 | NEWPORT_NEWS_WILLIAMSBURG_INTERNATIONAL_AIRPORT = "PHF" 1072 | PHITSANULOK_AIRPORT = "PHS" 1073 | WOOD_COUNTY_AIRPORT = "PKB" 1074 | PETROPAVLOVSK_KAMCHATSKY_AIRPORT = "PKC" 1075 | KANNUR_INTERNATIONAL_AIRPORT = "CNN" 1076 | PHALABORWA_AIRPORT = "PHW" 1077 | PHOENIX_SKY_HARBOR_INTERNATIONAL_AIRPORT = "PHX" 1078 | PEORIA_INTERNATIONAL_AIRPORT = "PIA" 1079 | MAYA_MAYA_AIRPORT = "BZV" 1080 | WILLARD_UNIVERSITY_AIRPORT = "CMI" 1081 | CAIRNS_AIRPORT = "CNS" 1082 | CHIANG_MAI_INTERNATIONAL_AIRPORT = "CNX" 1083 | SEGE_AIRPORT = "EGM" 1084 | HATTIESBURG_LAUREL_REGIONAL_AIRPORT = "PIB" 1085 | ST_PETERSBURG_CLEARWATER_INTERNATIONAL_AIRPORT = "PIE" 1086 | POCATELLO_REGIONAL_AIRPORT = "PIH" 1087 | PIERRE_REGIONAL_AIRPORT = "PIR" 1088 | BELO_HORIZONTE_AIRPORT = "PLU" 1089 | CHARLEROI_BRUSSELS_SOUTH_AIRPORT = "CRL" 1090 | RABIL_AIRPORT = "BVC" 1091 | CRAIOVA_AIRPORT = "CRA" 1092 | WAWI_AIRPORT = "PMA" 1093 | GRAND_STRAND_AIRPORT = "CRE" 1094 | LA_PALMDALE_REGIONAL_AIRPORT = "PMD" 1095 | NORTHERN_ROCKIES_REGIONAL_AIRPORT = "YYE" 1096 | PENTICTON_AIRPORT = "YYF" 1097 | CHARLOTTETOWN_AIRPORT = "YYG" 1098 | VICTORIA_INTERNATIONAL_AIRPORT = "YYJ" 1099 | SUPADIO_INTERNATIONAL_AIRPORT = "PNK" 1100 | JACKSONS_INTERNATIONAL_AIRPORT = "POM" 1101 | ARBA_MINTCH_AIRPORT = "AMH" 1102 | MAWELLA_LAGOON_AIRPORT = "DIW" 1103 | PETROLINA_INTERNATIONAL_AIRPORT = "PNZ" 1104 | CATANIA_FONTANAROSSA_AIRPORT = "CTA" 1105 | ZHANGYE_GANZHOU_AIRPORT = "YZY" 1106 | ZADAR_AIRPORT = "ZAD" 1107 | ZAGREB_INTERNATIONAL_AIRPORT = "ZAG" 1108 | ZAMBOANGA_INTERNATIONAL_AIRPORT = "ZAM" 1109 | ALZINTAN_AIRPORT = "ZIS" 1110 | RAFAEL_NUNEZ_INTERNATIONAL_AIRPORT = "CTG" 1111 | KANGIQSUALUJJUAQ_AIRPORT = "XGR" 1112 | CULIACAN_INTERNATIONAL_AIRPORT = "CUL" 1113 | CANCUN_INTERNATIONAL_AIRPORT = "CUN" 1114 | PORI_AIRPORT = "POR" 1115 | PHU_QUOC_AIRPORT = "PQC" 1116 | CURACAO_INTERNATIONAL_AIRPORT = "CUR" 1117 | GEN_FIERRO_VILLALOBOS_AIRPORT = "CUU" 1118 | PRESQUE_ISLE_MUNICIPAL_AIRPORT = "PQI" 1119 | PIARCO_INTERNATIONAL_AIRPORT = "POS" 1120 | POZNAN_AIRPORT = "POZ" 1121 | ALEJANDRO_VELASCO_ASTETE_INTERNATIONAL_AIRPORT = "CUZ" 1122 | CINCINNATI_NORTHERN_KENTUCKY_AIRPORT = "CVG" 1123 | PETROPAVLOVSK_AIRPORT = "PPK" 1124 | GUILLERMO_LEON_VALENCIA_AIRPORT = "PPN" 1125 | PARAPARAUMU_AIRPORT = "PPQ" 1126 | PUERTO_PRINCESA_INTERNATIONAL_AIRPORT = "PPS" 1127 | GENERAL_MARIANO_MATAMOROS_AIRPORT = "CVJ" 1128 | CIUDAD_VICTORIA_AIRPORT = "CVM" 1129 | PALESTINE_MUNICIPALCIPAL_AIRPORT = "PSN" 1130 | CANO_AIRPORT = "PSO" 1131 | CHRISTMAS_ISLAND_AIRPORT = "CXI" 1132 | HUGO_CANTERGIANI_REGIONAL_AIRPORT = "CXJ" 1133 | CAM_RANH_INTERNATIONAL_AIRPORT = "CXR" 1134 | AXUM_AIRPORT = "AXU" 1135 | CENTRAL_WISCONSIN_AIRPORT = "CWA" 1136 | AFONSO_PENA_INTERNATIONAL_AIRPORT = "CWB" 1137 | CHERNIVTSI_INTERNATIONAL_AIRPORT = "CWC" 1138 | CANGYUAN_WASHAN_AIRPORT = "CWJ" 1139 | CARDIFF_AIRPORT = "CWL" 1140 | COCHISE_COUNTY_AIRPORT = "CWX" 1141 | COXS_BAZAR_AIRPORT = "CXB" 1142 | CHITINA_AIRPORT = "CXC" 1143 | CHOISEUL_BAY_AIRPORT = "CHY" 1144 | PILOT_STATION_AIRPORT = "PQS" 1145 | KUGLUKTUK_AIRPORT = "YCO" 1146 | CHIAYI_AIRPORT = "CYI" 1147 | TOBOLSK_REMEZOV_AIRPORT = "RMZ" 1148 | COMTE_ROLIM_ADOLFO_AMARO_STATE_AIRPORT = "QDV" 1149 | KEYSTONE_AIRPORT = "QKS" 1150 | SINDHUDURG_AIRPORT = "SDW" 1151 | CAYO_LARGO_DEL_SUR_AIRPORT = "CYO" 1152 | CALBAYOG_AIRPORT = "CYP" 1153 | RAMON_VILLEDA_MORALES_INTERNATIONAL_AIRPORT = "SAP" 1154 | CHERSKIY_AIRPORT = "CYX" 1155 | ORLANDO_SANFORD_INTERNATIONAL_AIRPORT = "SFB" 1156 | CAUAYAN_AIRPORT = "CYZ" 1157 | TRI_TOWNSHIP_AIRPORT = "SFY" 1158 | SURGUT_AIRPORT = "SGC" 1159 | SPRINGFIELD_BRANSON_NATIONAL_AIRPORT = "SGF" 1160 | TAN_SON_NHAT_INTERNATIONAL_AIRPORT = "SGN" 1161 | THESSALONIKI_INTERNATIONAL_AIRPORT = "SKG" 1162 | STOKMARKNES_SKAGEN_AIRPORT = "SKN" 1163 | GEORGE_F_L_CHARLES_AIRPORT = "SLU" 1164 | SALEKHARD_AIRPORT = "SLY" 1165 | SOFIA_AIRPORT = "SOF" 1166 | SOGNDAL_AIRPORT = "SOG" 1167 | SORKJOSEN_AIRPORT = "SOJ" 1168 | CHUATHBALUK_AIRPORT = "CHU" 1169 | COZUMEL_AIRPORT = "CZM" 1170 | CAMPO_INTERNACIONAL_AIRPORT = "CZS" 1171 | COROZAL_AIRPORT = "CZU" 1172 | AKTION_AIRPORT = "PVK" 1173 | PIKE_COUNTY_AIRPORT = "PVL" 1174 | CHANGZHOU_AIRPORT = "CZX" 1175 | INUVIK_MIKE_ZUBKO_AIRPORT = "YEV" 1176 | PROVO_AIRPORT = "PVU" 1177 | PEVEK_AIRPORT = "PWE" 1178 | DAYTONA_BEACH_INTERNATIONAL_AIRPORT = "DAB" 1179 | CHICAGO_EXECUTIVE_AIRPORT = "PWK" 1180 | HAZRAT_SHAHJALAL_INTERNATIONAL_AIRPORT = "DAC" 1181 | PAVLODAR_AIRPORT = "PWQ" 1182 | DA_NANG_INTERNATIONAL_AIRPORT = "DAD" 1183 | MAZAMET_AIRPORT = "DCM" 1184 | DAOCHENG_YADING_AIRPORT = "DCY" 1185 | PORTO_SANTO_AIRPORT = "PXO" 1186 | SHACHE_AIRPORT = "QSZ" 1187 | BIG_BEAR_CITY_AIRPORT = "RBF" 1188 | COTONOU_AIRPORT = "COO" 1189 | AUPALUK_AIRPORT = "YPJ" 1190 | RAIATEA_AIRPORT = "RFP" 1191 | ONEIDA_COUNTY_AIRPORT = "RHI" 1192 | RHODES_AIRPORT = "RHO" 1193 | DAMASCUS_INTERNATIONAL_AIRPORT = "DAM" 1194 | KALLINGE_AIRPORT = "RNB" 1195 | RIJEKA_AIRPORT = "RJK" 1196 | DATONG_AIRPORT = "DAT" 1197 | ENRIQUE_MALEK_AIRPORT = "DAV" 1198 | DAZHOU_HESHI_AIRPORT = "DAX" 1199 | JAMES_M_COX_DAYTON_INTERNATIONAL_AIRPORT = "DAY" 1200 | DEBRECEN_AIRPORT = "DEB" 1201 | DEZFUL_AIRPORT = "DEF" 1202 | AGONCILLO_AIRPORT = "RJL" 1203 | MARINDA_AIRPORT = "RJM" 1204 | WASKAGANISH_AIRPORT = "YKQ" 1205 | DUBBO_CITY_REGIONAL_AIRPORT = "DBO" 1206 | DUBUQUE_MUNICIPAL_AIRPORT = "DBQ" 1207 | DUBROVNIK_AIRPORT = "DBV" 1208 | POSTVILLE_AIRPORT = "YSO" 1209 | KNOX_COUNTY_REGIONAL_AIRPORT = "RKD" 1210 | ROSKILDE_AIRPORT = "RKE" 1211 | ROCK_SPRINGS_SWEETWATER_COUNTY_AIRPORT = "RKS" 1212 | RAS_AL_KHAIMAH_INTERNATIONAL_AIRPORT = "RKT" 1213 | LAAGE_AIRPORT = "RLG" 1214 | RENNES_AIRPORT = "RNS" 1215 | ROBERTS_INTERNATIONAL_AIRPORT = "ROB" 1216 | ROI_ET_AIRPORT = "ROI" 1217 | ROCKHAMPTON_AIRPORT = "ROK" 1218 | MAAVAARULAA_AIRPORT = "RUL" 1219 | REUNION_ROLAND_GARROS_AIRPORT = "RUN" 1220 | ROVANIEMI_AIRPORT = "RVN" 1221 | RZESZOW_INTERNATIONAL_AIRPORT = "RZE" 1222 | DECATUR_AIRPORT = "DEC" 1223 | DEHRA_DUN_AIRPORT = "DED" 1224 | MENDELEYEVO_AIRPORT = "DEE" 1225 | INDIRA_GANDHI_INTERNATIONAL_AIRPORT = "DEL" 1226 | FORT_CHIPEWYAN_AIRPORT = "YPY" 1227 | DENVER_INTERNATIONAL_AIRPORT = "DEN" 1228 | DALLAS_FORT_WORTH_INTERNATIONAL_AIRPORT = "DFW" 1229 | GUADALUPE_VICTORIA_AIRPORT = "DGO" 1230 | SAN_ANTONIO_INTERNATIONAL_AIRPORT = "SAT" 1231 | SABIHA_GOKCEN_INTERNATIONAL_AIRPORT = "SAW" 1232 | SANTA_BARBARA_MUNICIPAL_AIRPORT = "SBA" 1233 | SCOTTSDALE_AIRPORT = "SCF" 1234 | ENSHEIM_AIRPORT = "SCN" 1235 | SANTIAGO_DE_COMPOSTELA_AIRPORT = "SCQ" 1236 | SCANDINAVIAN_MOUNTAINS_AIRPORT = "SCR" 1237 | ANTONIO_MACEO_AIRPORT = "SCU" 1238 | SUCEAVA_AIRPORT = "SCV" 1239 | NORTHWEST_REGIONAL_AIRPORT = "YXT" 1240 | GAGGAL_AIRPORT = "DHM" 1241 | SUNDSVALL_TIMRA_AIRPORT = "SDL" 1242 | DOTHAN_REGIONAL_AIRPORT = "DHN" 1243 | LAS_AMERICAS_INTERNATIONAL_AIRPORT = "SDQ" 1244 | DIBRUGARH_AIRPORT = "DIB" 1245 | NORTH_PEACE_REGIONAL_AIRPORT = "YXJ" 1246 | DIQING_SHANGRI_LA_AIRPORT = "DIG" 1247 | DICKINSON_REGIONAL_AIRPORT = "DIK" 1248 | COMORO_AIRPORT = "DIL" 1249 | DIEN_BIEN_AIRPORT = "DIN" 1250 | DIU_AIRPORT = "DIU" 1251 | DIYARBAKIR_AIRPORT = "DIY" 1252 | SULTAN_THAHA_AIRPORT = "DJB" 1253 | JAMBYL_AIRPORT = "DMB" 1254 | MOSCOW_DOMODEDOVO_AIRPORT = "DME" 1255 | DON_MUEANG_INTERNATIONAL_AIRPORT = "DMK" 1256 | FOND_DU_LAC_AIRPORT = "ZFD" 1257 | BELLA_BELLA_AIRPORT = "ZEL" 1258 | SANTANDER_AIRPORT = "SDR" 1259 | SANTOS_DUMONT_AIRPORT = "SDU" 1260 | SEATTLE_TACOMA_INTERNATIONAL_AIRPORT = "SEA" 1261 | SREDNEKOLYMSK_AIRPORT = "SEK" 1262 | LONDON_SOUTHEND_AIRPORT = "SEN" 1263 | ROBERT_L_BRADSHAW_INTERNATIONAL_AIRPORT = "SKB" 1264 | SAMARKAND_AIRPORT = "SKD" 1265 | QAARSUT_AIRPORT = "JQA" 1266 | SENTANI_AIRPORT = "DJJ" 1267 | LEOPOLD_SEDAR_SENGHOR_INTERNATIONAL_AIRPORT = "DKR" 1268 | SANTO_PEKOA_INTERNATIONAL_AIRPORT = "SON" 1269 | MIRAMARE_AIRPORT = "RMI" 1270 | TAICHUNG_INTERNATIONAL_AIRPORT = "RMQ" 1271 | DOLE_JURA_AIRPORT = "DLE" 1272 | DULUTH_INTERNATIONAL_AIRPORT = "DLH" 1273 | BORNHOLM_AIRPORT = "RNN" 1274 | RENO_TAHOE_INTERNATIONAL_AIRPORT = "RNO" 1275 | LIEN_KHUONG_AIRPORT = "DLI" 1276 | UNIVERSITY_PARK_AIRPORT = "SCE" 1277 | DALAMAN_AIRPORT = "DLM" 1278 | DALNERECHENSK_AIRPORT = "DLR" 1279 | COLUMBIA_GORGE_REGIONAL_THE_DALLES_MUNICIPAL_AIRPORT = "DLS" 1280 | DALI_AIRPORT = "DLU" 1281 | SEYCHELLES_INTERNATIONAL_AIRPORT = "SEZ" 1282 | THE_PAU_PYRENEES_INTERNATIONAL_AIRPORT = "PUF" 1283 | POINTE_A_PITRE_INTERNATIONAL_AIRPORT = "PTP" 1284 | ATKINSON_MUNICIPAL_AIRPORT = "PTS" 1285 | TOCUMEN_INTERNATIONAL_AIRPORT = "PTY" 1286 | PUEBLO_MEMORIAL_AIRPORT = "PUB" 1287 | PUNTA_CANA_INTERNATIONAL_AIRPORT = "PUJ" 1288 | GIMHAE_INTERNATIONAL_AIRPORT = "PUS" 1289 | DIMAPUR_AIRPORT = "DMU" 1290 | DALLAS_NORTH_AIRPORT = "DNE" 1291 | DNEPROPETROVSK_INTERNATIONAL_AIRPORT = "DNK" 1292 | ATUNG_BUNGSU_AIRPORT = "PXA" 1293 | BAHAR_DAR_AIRPORT = "BJR" 1294 | PLEURTUIT_AIRPORT = "DNR" 1295 | SAMOS_AIRPORT = "SMI" 1296 | PUERTO_ESCONDIDO_AIRPORT = "PXM" 1297 | GANGTOK_PAKYONG_AIRPORT = "PYG" 1298 | ABA_TENNA_D_YILMA_AIRPORT = "DIR" 1299 | MELITA_AIRPORT = "DJE" 1300 | CARDAK_AIRPORT = "DNZ" 1301 | HAMAD_INTERNATIONAL_AIRPORT = "DOH" 1302 | SAINT_GATIEN_AIRPORT = "DOL" 1303 | PORT_SUDAN_AIRPORT = "PZU" 1304 | LAQUILA_PRETURO_AIRPORT = "QAQ" 1305 | DOURADOS_AIRPORT = "DOU" 1306 | DONGYING_AIRPORT = "DOY" 1307 | DUPAGE_AIRPORT = "DPA" 1308 | IGLOOLIK_AIRPORT = "YGT" 1309 | ASOSA_AIRPORT = "ASO" 1310 | DUNDEE_AIRPORT = "DND" 1311 | DIPOLOG_AIRPORT = "DPL" 1312 | NGURAH_RAI_INTERNATIONAL_AIRPORT = "DPS" 1313 | DAQING_SHI_AIRPORT = "DQA" 1314 | DURANGO_LA_PLATA_COUNTY_AIRPORT = "DRO" 1315 | DEL_RIO_INTERNATIONAL_AIRPORT = "DRT" 1316 | DHARAVANDHOO_AIRPORT = "DRV" 1317 | DARWIN_INTERNATIONAL_AIRPORT = "DRW" 1318 | DONCASTER_SHEFFIELD_AIRPORT = "DSA" 1319 | DES_MOINES_INTERNATIONAL_AIRPORT = "DSM" 1320 | ORDOS_EJIN_HORO_AIRPORT = "DSN" 1321 | BLAISE_DIAGNE_INTERNATIONAL_AIRPORT = "DSS" 1322 | PAI_AIRPORT = "PYY" 1323 | PIETERMARITZBURG_AIRPORT = "PZB" 1324 | MANUEL_CARLOS_PIAR_GUAYANA_AIRPORT = "PZO" 1325 | BUJUMBURA_INTERNATIONAL_AIRPORT = "BJM" 1326 | SISINGAMANGARAJA_XII_INTERNATIONAL_AIRPORT = "DTB" 1327 | DORTMUND_AIRPORT = "DTM" 1328 | WUDALIANCHI_DEDU_AIRPORT = "DTU" 1329 | KING_SHAKA_INTERNATIONAL_AIRPORT = "DUR" 1330 | DEVILS_LAKE_AIRPORT = "DVL" 1331 | FRANCISCO_BANGOY_INTL_AIRPORT = "DVO" 1332 | SALE_AIRPORT = "RBA" 1333 | ARAR_AIRPORT = "RAE" 1334 | ROSEBURG_MUNICIPAL_AIRPORT = "RBG" 1335 | NELSON_MANDELA_INTERNATIONAL_AIRPORT = "RAI" 1336 | MENARA_AIRPORT = "RAK" 1337 | RAPID_CITY_REGIONAL_AIRPORT = "RAP" 1338 | RAROTONGA_AIRPORT = "RAR" 1339 | RASHT_AIRPORT = "RAS" 1340 | EL_ARISH_INTERNATIONAL_AIRPORT = "AAC" 1341 | NEERLERIT_INAAT_AIRPORT = "CNP" 1342 | RADOM_AIRPORT = "RDO" 1343 | MARCILLAC_AIRPORT = "RDZ" 1344 | DETROIT_METROPOLITAN_WAYNE_COUNTY_AIRPORT = "DTW" 1345 | DUBLIN_AIRPORT = "DUB" 1346 | DUNEDIN_INTERNATIONAL_AIRPORT = "DUD" 1347 | RICHARDS_BAY_AIRPORT = "RCB" 1348 | RIOHACHA_AIRPORT = "RCH" 1349 | REDDING_MUNICIPAL_AIRPORT = "RDD" 1350 | ROBERTS_FIELD_REDMOND_MUNICIPAL_AIRPORT = "RDM" 1351 | KAZI_NAZRUL_ISLAM_AIRPORT = "RDP" 1352 | PHOENIX_DEER_VALLEY_AIRPORT = "DVT" 1353 | DAWADMI_AIRPORT = "DWD" 1354 | RALEIGH_DURHAM_INTERNATIONAL_AIRPORT = "RDU" 1355 | GUARARAPES_GILBERTO_FREYRE_INTERNATIONAL_AIRPORT = "REC" 1356 | CHICAGO_ROCKFORD_INTERNATIONAL_AIRPORT = "RFD" 1357 | RIO_GRANDE_AIRPORT = "RGA" 1358 | RIO_HONDO_AIRPORT = "RHD" 1359 | ASSIUT_AIRPORT = "ATZ" 1360 | CAIRO_INTERNATIONAL_AIRPORT = "CAI" 1361 | DANBURY_MUNICIPAL_AIRPORT = "DXR" 1362 | ANADYR_AIRPORT = "DYR" 1363 | DUSHANBE_AIRPORT = "DYU" 1364 | DZAOUDZI_AIRPORT = "DZA" 1365 | ZHEZHAZGAN_AIRPORT = "DZN" 1366 | KEARNEY_REGIONAL_AIRPORT = "EAR" 1367 | SAN_SEBASTIAN_AIRPORT = "EAS" 1368 | EAU_CLAIRE_AIRPORT = "EAU" 1369 | MARINA_DI_CAMPO_AIRPORT = "EBA" 1370 | GIRUA_AIRPORT = "PNP" 1371 | SANTA_MARIA_AIRPORT = "RIA" 1372 | GEN_BUECH_AIRPORT = "RIB" 1373 | RAJAHMUNDRY_AIRPORT = "RJA" 1374 | RAJSHAHI_AIRPORT = "RJH" 1375 | ASWAN_AIRPORT = "ASW" 1376 | ESBJERG_AIRPORT = "EBJ" 1377 | ERBIL_INTERNATIONAL_AIRPORT = "EBL" 1378 | REYKJAVIK_INTERNATIONAL_AIRPORT = "RKV" 1379 | ROCKWOOD_MUNICIPAL_AIRPORT = "RKW" 1380 | BOUTHEON_AIRPORT = "EBU" 1381 | COSTA_ESMERALDA_AIRPORT = "ECI" 1382 | ERCAN_AIRPORT = "ECN" 1383 | NORTH_RONALDSAY_AIRPORT = "NRL" 1384 | RODRIGUES_ISLAND_AIRPORT = "RRG" 1385 | ROTA_AIRPORT = "ROP" 1386 | AIRAI_AIRPORT = "ROR" 1387 | PLATOV_INTERNATIONAL_AIRPORT = "ROV" 1388 | ASMARA_INTERNATIONAL_AIRPORT = "ASM" 1389 | JACAREPAGUÁ_AIRPORT = "RRJ" 1390 | SWAMI_VIVEKANANDA_AIRPORT = "RPR" 1391 | RUOQIANG_LOULAN_AIRPORT = "RQA" 1392 | SOUTH_ELEUTHERA_AIRPORT = "RSD" 1393 | KING_KHALED_INTERNATIONAL_AIRPORT = "RUH" 1394 | SARATOV_TSENTRALNY_AIRPORT = "RTW" 1395 | EDINBURGH_AIRPORT = "EDI" 1396 | ELDORET_AIRPORT = "EDL" 1397 | BALIKESIR_KOCA_SEYIT_AIRPORT = "EDO" 1398 | LODWAR_AIRPORT = "LOK" 1399 | RUTLAND_AIRPORT = "RUT" 1400 | RIO_VERDE_AIRPORT = "RVD" 1401 | ROSTOV_AIRPORT = "RVI" 1402 | BOUNDARY_BAY_AIRPORT = "YDT" 1403 | RYUMSJOEN_AIRPORT = "RVK" 1404 | EDAY_AIRPORT = "EOI" 1405 | KEFALLINIA_AIRPORT = "EFL" 1406 | J_YRAUSQUIN_AIRPORT = "SAB" 1407 | SACRAMENTO_EXECUTIVE_AIRPORT = "SAC" 1408 | ROUMANIERES_AIRPORT = "EGC" 1409 | SAVANNAH_HILTON_HEAD_AIRPORT = "SAV" 1410 | EAGLE_COUNTY_AIRPORT = "EGE" 1411 | BELGOROD_AIRPORT = "EGO" 1412 | EINDHOVEN_AIRPORT = "EIN" 1413 | VARIGUIES_AIRPORT = "EJA" 1414 | WEDJH_AIRPORT = "EJH" 1415 | MADANG_AIRPORT = "MAG" 1416 | PINE_ISLAND_AIRPORT = "DUF" 1417 | STOCKTON_AIRPORT = "SCK" 1418 | SYKTYVKAR_AIRPORT = "SCW" 1419 | AKTAU_INTERNATIONAL_AIRPORT = "SCO" 1420 | SAN_CRISTOBAL_AIRPORT = "SCY" 1421 | DOV_HOZ_AIRPORT = "SDV" 1422 | RICHLAND_MUNICIPAL_AIRPORT = "SDY" 1423 | EJIN_BANNER_TAOLAI_AIRPORT = "EJN" 1424 | SEBRING_REGIONAL_AIRPORT = "SEF" 1425 | ELKO_AIRPORT = "EKO" 1426 | SHAKHTYORSK_AIRPORT = "EKS" 1427 | ELCHO_ISLAND_AIRPORT = "ELC" 1428 | SOUTH_ARKANSAS_REGIONAL_AIRPORT = "ELD" 1429 | EL_GOLEA_AIRPORT = "ELG" 1430 | EL_PASO_INTERNATIONAL_AIRPORT = "ELP" 1431 | PRINCE_NAYEF_BIN_ABDULAZIZ_REGIONAL_AIRPORT = "ELQ" 1432 | EAST_LONDON_AIRPORT = "ELS" 1433 | SFAX_EL_MAOU_AIRPORT = "SFA" 1434 | SONDERBORG_AIRPORT = "SGD" 1435 | SIEGERLAND_AIRPORT = "SGE" 1436 | SARGODHA_AIRPORT = "SGI" 1437 | GUEMAR_AIRPORT = "ELU" 1438 | EAST_MIDLANDS_AIRPORT = "EMA" 1439 | EMERALD_AIRPORT = "EMD" 1440 | KENAI_MUNICIPAL_AIRPORT = "ENA" 1441 | H_HASAN_AROEBOESMAN_AIRPORT = "ENE" 1442 | ENSHI_AIRPORT = "ENH" 1443 | ENUGU_AIRPORT = "ENU" 1444 | ERSHILIPU_AIRPORT = "ENY" 1445 | SAINT_GEORGE_MUNICIPAL_AIRPORT = "SGU" 1446 | SINOP_AIRPORT = "SIC" 1447 | LA_GRANDE_AIRPORT = "YGL" 1448 | KENOSHA_REGIONAL_AIRPORT = "ENW" 1449 | ENRIQUE_OLAYA_HERRERA_AIRPORT = "EOH" 1450 | ESPERANCE_AIRPORT = "EPR" 1451 | ESQUEL_AIRPORT = "EQS" 1452 | ERZINCAN_AIRPORT = "ERC" 1453 | ERFURT_AIRPORT = "ERF" 1454 | ERBOGACHEN_AIRPORT = "ERG" 1455 | EROS_AIRPORT = "ERS" 1456 | FES_SAISS_AIRPORT = "FEZ" 1457 | NDJILI_AIRPORT = "FIH" 1458 | GURNEY_AIRPORT = "GUR" 1459 | CHANGI_INTERNATIONAL_AIRPORT = "SIN" 1460 | SHANGHAI_HONGQIAO_INTERNATIONAL_AIRPORT = "SHA" 1461 | SISHEN_AIRPORT = "SIS" 1462 | NAKASHIBETSU_AIRPORT = "SHB" 1463 | SHIHEZI_HUAYUAN_AIRPORT = "SHF" 1464 | SHUNGNAK_AIRPORT = "SHG" 1465 | SHIRAHAMA_AIRPORT = "SHM" 1466 | ERZURUM_AIRPORT = "ERZ" 1467 | ESENBOGA_INTERNATIONAL_AIRPORT = "ESB" 1468 | SHREVEPORT_REGIONAL_AIRPORT = "SHV" 1469 | DELTA_COUNTY_AIRPORT = "ESC" 1470 | SHARURAH_AIRPORT = "SHW" 1471 | AMILCAR_CABRAL_INTERNATIONAL_AIRPORT = "SID" 1472 | ELISTA_AIRPORT = "ESL" 1473 | ESMERALDAS_AIRPORT = "ESM" 1474 | ESSAOUIRA_AIRPORT = "ESU" 1475 | EUGENE_AIRPORT = "EUG" 1476 | FRANKFURT_AIRPORT = "FRA" 1477 | FERA_ISLAND_AIRPORT = "FRE" 1478 | PITUFFIK_AIRPORT = "THU" 1479 | SAO_JORGE_ISLAND_AIRPORT = "SJZ" 1480 | SKOPJE_ALEXANDER_THE_GREAT_AIRPORT = "SKP" 1481 | SVETLAYA_AIRPORT = "ETL" 1482 | CORONEL_ARTILLERIA_VICTOR_LARREA_AIRPORT = "ETR" 1483 | METZ_NANCY_LORRAINE_AIRPORT = "ETZ" 1484 | SIALKOT_AIRPORT = "SKT" 1485 | SKIROS_AIRPORT = "SKU" 1486 | SARANSK_AIRPORT = "SKX" 1487 | TAKORADI_AIRPORT = "TKD" 1488 | HASSAN_I_AIRPORT = "EUN" 1489 | F_D_ROOSEVELT_AIRPORT = "EUX" 1490 | HARSTAD_NARVIK_AIRPORT_EVENES = "EVE" 1491 | SVEG_AIRPORT = "EVG" 1492 | PLAN_DE_GUADALUPE_INTERNATIONAL_AIRPORT = "SLW" 1493 | VILA_DO_PORTO_AIRPORT = "SMA" 1494 | H_ASAN_AIRPORT = "SMQ" 1495 | SAKON_NAKHON_AIRPORT = "SNO" 1496 | ZVARTNOTS_INTERNATIONAL_AIRPORT = "EVN" 1497 | EVANSVILLE_REGIONAL_AIRPORT = "EVV" 1498 | NEW_BEDFORD_AIRPORT = "EWB" 1499 | COASTAL_CAROLINA_REGIONAL_AIRPORT = "EWN" 1500 | BELOYARSKY_AIRPORT = "EYK" 1501 | FLORA_AIRPORT = "FRO" 1502 | SAINT_PIERRE_AIRPORT = "FSP" 1503 | FORT_LAUDERDALE_EXECUTIVE_AIRPORT = "FXE" 1504 | LOKPRIYA_GOPINATH_BORDOLOI_INTERNATIONAL_AIRPORT = "GAU" 1505 | GORGON_AIRPORT = "GBT" 1506 | EBON_AIRPORT = "EBO" 1507 | THANDWE_AIRPORT = "SNW" 1508 | KOTOKA_INTERNATIONAL_AIRPORT = "ACC" 1509 | MONTOIR_AIRPORT = "SNR" 1510 | SANTA_CLARA_AIRPORT = "SNU" 1511 | ADI_SUMARMO_INTERNATIONAL_AIRPORT = "SOC" 1512 | ELAZIG_AIRPORT = "EZS" 1513 | RED_LAKE_AIRPORT = "YRL" 1514 | VAGAR_AIRPORT = "FAE" 1515 | SAIPAN_INTERNATIONAL_AIRPORT = "SPN" 1516 | HECTOR_INTERNATIONAL_AIRPORT = "FAR" 1517 | FRESNO_YOSEMITE_INTERNATIONAL_AIRPORT = "FAT" 1518 | FAYETTEVILLE_REGIONAL_AIRPORT = "FAY" 1519 | FAIZABAD_AIRPORT = "FBD" 1520 | LUBUMBASHI_INTERNATIONAL_AIRPORT = "FBM" 1521 | QAANAAQ_AIRPORT = "NAQ" 1522 | SPLIT_AIRPORT = "SPU" 1523 | SHANGRAO_SANQINGSHAN_AIRPORT = "SQD" 1524 | SANMING_SHAXIAN_AIRPORT = "SQJ" 1525 | STANSTED_AIRPORT = "STN" 1526 | SAIDPUR_AIRPORT = "SPD" 1527 | HOUSTON_GULF_AIRPORT = "SPX" 1528 | GLACIER_PARK_INTERNATIONAL_AIRPORT = "FCA" 1529 | LEONARDO_DA_VINCI_FIUMICINO_AIRPORT = "FCO" 1530 | BRINGELAND_AIRPORT = "FDE" 1531 | MARTINIQUE_AIME_CESAIRE_INTERNATIONAL_AIRPORT = "FDF" 1532 | FRIEDRICHSHAFEN_AIRPORT = "FDH" 1533 | CAMPBELL_COUNTY_AIRPORT = "GCC" 1534 | GENERAL_SANTOS_INTERNATIONAL_AIRPORT = "GES" 1535 | SORONG_AIRPORT = "SQG" 1536 | KANGIQSUJUAQ_AIRPORT = "YWB" 1537 | FERGANA_AIRPORT = "FEG" 1538 | SIAULIAI_INTERNATIONAL_AIRPORT = "SQQ" 1539 | FERNANDO_DE_NORONHA_AIRPORT = "FEN" 1540 | ACHMAD_YANI_INTERNATIONAL_AIRPORT = "SRG" 1541 | STORD_AIRPORT = "SRP" 1542 | DASHTE_NAZ_AIRPORT = "SRY" 1543 | TEMINDUNG_AIRPORT = "SRI" 1544 | FAGALI_I_AIRPORT = "FGI" 1545 | MALABO_AIRPORT = "SSG" 1546 | SEQUIM_VALLEY_AIRPORT = "SQV" 1547 | MAKKOVIK_AIRPORT = "YMN" 1548 | SARASOTA_BRADENTON_INTERNATIONAL_AIRPORT = "SRQ" 1549 | DEPUTADO_LUIS_EDUARDO_MAGALHAES_INTERNATIONAL_AIRPORT = "SSA" 1550 | SHARM_EL_SHEIKH_AIRPORT = "SSH" 1551 | STOKKA_AIRPORT = "SSJ" 1552 | SANTAREM_MAESTRO_WILSON_FONSECA_AIRPORT = "STM" 1553 | BANGOKA_INTERNATIONAL_AIRPORT = "FKI" 1554 | VENANGO_REGIONAL_AIRPORT = "FKL" 1555 | FAK_FAK_AIRPORT = "FKQ" 1556 | FUKUSHIMA_AIRPORT = "FKS" 1557 | CAPITOLIO_AIRPORT = "FLA" 1558 | FLAGSTAFF_PULLIAM_AIRPORT = "FLG" 1559 | HERCILIO_LUZ_INTERNATIONAL_AIRPORT = "FLN" 1560 | FLORENCE_AIRPORT = "FLO" 1561 | FIRENZE_PERETOLA_AIRPORT = "FLR" 1562 | GERALDTON_AIRPORT = "GET" 1563 | GALLIVARE_AIRPORT = "GEV" 1564 | SONOMA_COUNTY_AIRPORT = "STS" 1565 | STUTTGART_AIRPORT = "STR" 1566 | STAVROPOL_AIRPORT = "STW" 1567 | HELLE_AIRPORT = "SVJ" 1568 | FLINDERS_ISLAND_AIRPORT = "FLS" 1569 | FERDINAND_LUMBAN_TOBING_AIRPORT = "FLZ" 1570 | EL_PUCU_AIRPORT = "FMA" 1571 | KOLTSOVO_INTERNATIONAL_AIRPORT = "SVX" 1572 | KALEMIE_AIRPORT = "FMI" 1573 | MEMMINGEN_ALLGAU_AIRPORT = "FMM" 1574 | FOUR_CORNERS_REGIONAL_AIRPORT = "FMN" 1575 | MUNSTER_OSNABRUCK_INTERNATIONAL_AIRPORT = "FMO" 1576 | GARONS_AIRPORT = "FNI" 1577 | PYONGYANG_SUNAN_INTERNATIONAL_AIRPORT = "FNJ" 1578 | GRIFFITH_AIRPORT = "GFF" 1579 | GRAND_FORKS_INTERNATIONAL_AIRPORT = "GFK" 1580 | GRAFTON_AIRPORT = "GFN" 1581 | FRIEDMAN_MEMORIAL_AIRPORT = "SUN" 1582 | NAUSORI_AIRPORT = "SUV" 1583 | RICHARD_I_BONG_AIRPORT = "SUW" 1584 | SIOUX_GATEWAY_AIRPORT = "SUX" 1585 | SAVOONGA_AIRPORT = "SVA" 1586 | GRANT_COUNTY_AIRPORT = "SVC" 1587 | STAVANGER_AIRPORT_SOLA = "SVG" 1588 | BISHOP_INTERNATIONAL_AIRPORT = "FNT" 1589 | SAVONLINNA_AIRPORT = "SVL" 1590 | SHEREMETYEVO_INTERNATIONAL_AIRPORT = "SVO" 1591 | FORT_DODGE_AIRPORT = "FOD" 1592 | SCHONEFELD_AIRPORT = "SXF" 1593 | SAUMLAKI_OLILIT_AIRPORT = "SXK" 1594 | SRINAGAR_INTERNATIONAL_AIRPORT = "SXR" 1595 | FORTUNA_AIRPORT = "FON" 1596 | PINTO_MARTINS_AIRPORT = "FOR" 1597 | GRAND_BAHAMA_INTERNATIONAL_AIRPORT = "FPO" 1598 | STRONSAY_AIRPORT = "SOY" 1599 | EL_FASHER_AIRPORT = "ELF" 1600 | SANTA_ELENA_AIRPORT = "FRS" 1601 | MANAS_INTERNATIONAL_AIRPORT = "FRU" 1602 | FRANCISTOWN_AIRPORT = "FRW" 1603 | SUD_CORSE_AIRPORT = "FSC" 1604 | SIOUX_FALLS_REGIONAL_AIRPORT_JOE_FOSS_FIELD = "FSD" 1605 | FORT_SMITH_REGIONAL_AIRPORT = "FSM" 1606 | TOFINO_AIRPORT = "YAZ" 1607 | CAMPBELL_RIVER_AIRPORT = "YBL" 1608 | OUVEA_AIRPORT = "UVE" 1609 | HEWANORRA_AIRPORT = "UVF" 1610 | VILLA_INTERNATIONAL_AIRPORT_MAAMIGILI = "VAM" 1611 | SIVAS_AIRPORT = "VAS" 1612 | LUPEPAUU_AIRPORT = "VAV" 1613 | MANDALAY_CHANMYATHAZI_AIRPORT = "VBC" 1614 | BOKPYIN_AIRPORT = "VBP" 1615 | MONTICHIARI_AIRPORT = "VBS" 1616 | VISBY_AIRPORT = "VBY" 1617 | GENEINA_AIRPORT = "EGN" 1618 | SHIZUOKA_AIRPORT = "FSZ" 1619 | MARILLAC_AIRPORT = "FTU" 1620 | FUERTEVENTURA_AIRPORT = "FUE" 1621 | FUYANG_AIRPORT = "FUG" 1622 | FUKUE_AIRPORT = "FUJ" 1623 | FUKUOKA_AIRPORT = "FUK" 1624 | VIRACOPOS_AIRPORT = "VCP" 1625 | DONG_HOI_AIRPORT = "VDH" 1626 | VADSO_AIRPORT = "VDS" 1627 | FUNAFUTI_ATOL_INTERNATIONAL_AIRPORT = "FUN" 1628 | FUOSHAN_AIRPORT = "FUO" 1629 | FORT_WAYNE_INTERNATIONAL_AIRPORT = "FWA" 1630 | VIJAYAWADA_AIRPORT = "VGA" 1631 | VOLOGDA_AIRPORT = "VGD" 1632 | VIGO_AIRPORT = "VGO" 1633 | VIRGIN_GORDA_AIRPORT = "VIJ" 1634 | DAKHLA_AIRPORT = "VIL" 1635 | VALDOSTA_REGIONAL_AIRPORT = "VLD" 1636 | VALLADOLID_AIRPORT = "VLL" 1637 | ARTURO_MICHELENA_INTERNATIONAL_AIRPORT = "VLN" 1638 | ANGLESEY_AIRPORT = "VLY" 1639 | FUYUN_KOKTOKAY_AIRPORT = "FYN" 1640 | JUNMACHI_AIRPORT = "GAJ" 1641 | GAMBELL_AIRPORT = "GAM" 1642 | GAN_SEENU_AIRPORT = "GAN" 1643 | GAYA_AIRPORT = "GAY" 1644 | GABALA_INTERNATIONAL_AIRPORT = "GBB" 1645 | SIR_SERETSE_KHAMA_INTERNATIONAL_AIRPORT = "GBE" 1646 | GREGG_COUNTY_AIRPORT = "GGG" 1647 | VAN_NUYS_AIRPORT = "VNY" 1648 | VOLGOGRAD_INTERNATIONAL_AIRPORT = "VOG" 1649 | VORONEZH_AIRPORT = "VOZ" 1650 | VERO_BEACH_MUNICIPAL_AIRPORT = "VRB" 1651 | VIRAC_AIRPORT = "VRC" 1652 | WATTAY_INTERNATIONAL_AIRPORT = "VTE" 1653 | VALLEDUPAR_AIRPORT = "VUP" 1654 | VIRU_VIRU_INTERNATIONAL_AIRPORT = "VVI" 1655 | LICHINGA_AIRPORT = "VXC" 1656 | CESARIA_EVORA_INTERNATIONAL_AIRPORT = "VXE" 1657 | VAXJO_AIRPORT = "VXO" 1658 | WUHU_XUANZHOU_AIRPORT = "WHA" 1659 | WHAKATANE_AIRPORT = "WHK" 1660 | WALTER_J_KOLADZA_AIRPORT = "GBR" 1661 | GARDEN_CITY_MUNICIPAL_AIRPORT = "GCK" 1662 | ZUNYI_MAOTAI_AIRPORT = "WMT" 1663 | OWEN_ROBERTS_INTERNATIONAL_AIRPORT = "GCM" 1664 | MATAHORA_AIRPORT = "WNI" 1665 | GODE_IDDIDOLE_AIRPORT = "GDE" 1666 | DON_MIGUEL_HIDAL_Y_COSTILLA_INTERNATIONAL_AIRPORT = "GDL" 1667 | GDANSK_LECH_WALESA_AIRPORT = "GDN" 1668 | KAKAMEGA_AIRPORT = "GGM" 1669 | WAPENAMANDA_AIRPORT = "WBM" 1670 | WUHAI_AIRPORT = "WUA" 1671 | MURRIN_MURRIN_AIRPORT = "WUI" 1672 | XINZHOU_WUTAISHAN_AIRPORT = "WUT" 1673 | SUNAN_SHUOFANG_INTERNATIONAL_AIRPORT = "WUX" 1674 | GONDAR_AIRPORT = "GDQ" 1675 | DAWSON_COMMUNITY_AIRPORT = "GDV" 1676 | BORAM_AIRPORT = "WWK" 1677 | NEW_CHITOSE_AIRPORT = "CTS" 1678 | CAMILO_DAZA_INTERNATIONAL_AIRPORT = "CUC" 1679 | LEVALDIGI_AIRPORT = "CUF" 1680 | WANXIAN_AIRPORT = "WXN" 1681 | MAGADAN_AIRPORT = "GDX" 1682 | WHYALLA_AIRPORT = "WYA" 1683 | WUNNUMMIN_LAKE_AIRPORT = "WNN" 1684 | GELENDZIK_AIRPORT = "GDZ" 1685 | NOUMEA_MAGENTA_AIRPORT = "GEA" 1686 | SPOKANE_INTERNATIONAL_AIRPORT = "GEG" 1687 | EXUMA_INTERNATIONAL_AIRPORT = "GGT" 1688 | GLASGOW_INTERNATIONAL_AIRPORT = "GGW" 1689 | SAGUENAY_BAGOTVILLE_AIRPORT = "YBG" 1690 | OVDA_AIRPORT = "VDA" 1691 | HIERRO_AIRPORT = "VDE" 1692 | VANIMO_AIRPORT = "VAI" 1693 | VITORIA_DA_CONQUISTA_AIRPORT = "VDC" 1694 | VILHELMINA_AIRPORT = "VHM" 1695 | VINH_AIRPORT = "VII" 1696 | HAVRYSHIVKA_VINNYTSIA_INTERNATIONAL_AIRPORT = "VIN" 1697 | VITORIA_AIRPORT = "VIT" 1698 | VIENNA_INTERNATIONAL_AIRPORT = "VIE" 1699 | VNUKOVO_AIRPORT = "VKO" 1700 | VORKUTA_AIRPORT = "VKT" 1701 | VILANCULOS_AIRPORT = "VNX" 1702 | OSLO_GARDERMOEN_AIRPORT = "GEN" 1703 | CAMBRIDGE_BAY_AIRPORT = "YCB" 1704 | VASTERAS_HASSLO_AIRPORT = "VST" 1705 | VISHAKHAPATNAM_AIRPORT = "VTZ" 1706 | LA_VANGUARDIA_AIRPORT = "VVC" 1707 | ILLIZI_AIRPORT = "VVZ" 1708 | VERONA_VILLAFRANCA_AIRPORT = "VRN" 1709 | VELIKIJ_USTYUG_AIRPORT = "VUS" 1710 | VLADIVOSTOK_INTERNATIONAL_AIRPORT = "VVO" 1711 | DEER_LAKE_REGIONAL_AIRPORT = "YDF" 1712 | CAROSUE_DAM_AIRPORT = "WCD" 1713 | NADZAB_AIRPORT = "LAE" 1714 | WAINGAPU_AIRPORT = "WGP" 1715 | WEIHAI_INTERNATIONAL_AIRPORT = "WEH" 1716 | WEIPA_AIRPORT = "WEI" 1717 | WAGGA_WAGGA_AIRPORT = "WGA" 1718 | LONDOLOZI_AIRPORT = "LDZ" 1719 | ARUSHA_AIRPORT = "ARK" 1720 | KILWA_MASOKO_AIRPORT = "KIY" 1721 | WILSON_AIRPORT = "WIL" 1722 | WINTON_AIRPORT = "WIN" 1723 | QUEENSTOWN_AIRPORT = "ZQN" 1724 | BUKOBA_AIRPORT = "BKZ" 1725 | ZHANGJIAKOU_NINGYUAN_AIRPORT = "ZQZ" 1726 | JULIUS_NYERERE_INTERNATIONAL_AIRPORT = "DAR" 1727 | WELLINGTON_INTERNATIONAL_AIRPORT = "WLG" 1728 | WEST_ANGELAS_AIRPORT = "WLP" 1729 | WALLIS_ISLAND_AIRPORT = "WLS" 1730 | DODOMA_AIRPORT = "DOD" 1731 | LAESO_AIRPORT = "BYR" 1732 | DE_KOOY_DEN_HELDER_AIRPORT = "DHR" 1733 | NANAIMO_AIRPORT = "YCD" 1734 | WARSAW_MODLIN_AIRPORT = "WMI" 1735 | WHITE_MOUNTAIN_AIRPORT = "WMO" 1736 | LONDON_CITY_AIRPORT = "LCY" 1737 | WENSHAN_PUZHEHEI_AIRPORT = "WNH" 1738 | WAMENA_AIRPORT = "WMX" 1739 | CHONGQING_WUSHAN_AIRPORT = "WSK" 1740 | PIEDMONT_TRIAD_INTERNATIONAL_AIRPORT = "GSO" 1741 | GREENVILLE_SPARTANBURG_INTERNATIONAL_AIRPORT = "GSP" 1742 | WROCLAW_AIRPORT = "WRO" 1743 | SARATOV_GAGARIN_AIRPORT = "GSV" 1744 | BIRJAND_AIRPORT = "XBJ" 1745 | TACHILEK_AIRPORT = "THL" 1746 | MEHRABAD_INTERNATIONAL_AIRPORT = "THR" 1747 | XILINHOT_AIRPORT = "XIL" 1748 | XIANYANG_INTERNATIONAL_AIRPORT = "XIY" 1749 | ENTEBBE_INTERNATIONAL_AIRPORT = "EBB" 1750 | NORTH_FRONT_AIRPORT = "GIB" 1751 | GALEAO_ANTONIO_CARLOS_JOBIM_INTERNATIONAL_AIRPORT = "GIG" 1752 | GILGIT_AIRPORT = "GIL" 1753 | GISBORNE_AIRPORT = "GIS" 1754 | GOLDEN_TRIANGLE_REGIONAL_AIRPORT = "GTR" 1755 | LA_AURORA_INTERNATIONAL_AIRPORT = "GUA" 1756 | GUNNISON_AIRPORT = "GUC" 1757 | HARUN_THOHIR_AIRPORT = "BXW" 1758 | BEMOLANGA_AIRPORT = "BZM" 1759 | JAZAN_REGIONAL_AIRPORT = "GIZ" 1760 | JIJEL_FERHAT_ABBAS_AIRPORT = "GJL" 1761 | XIAMEN_GAOQI_INTERNATIONAL_AIRPORT = "XMN" 1762 | GRAND_JUNCTION_REGIONAL_AIRPORT = "GJT" 1763 | XINING_CAOJIABAO_AIRPORT = "XNN" 1764 | WESTERLAND_SYLT_AIRPORT = "GWT" 1765 | KLANTEN_AIRPORT = "GLL" 1766 | GOULIMIME_AIRPORT = "GLN" 1767 | GELEPHU_AIRPORT = "GLU" 1768 | GANNAN_XIAHE_AIRPORT = "GXH" 1769 | GAMBELA_AIRPORT = "GMB" 1770 | GOMEL_AIRPORT = "GME" 1771 | GOMBE_LAWANTI_INTERNATIONAL_AIRPORT = "GMO" 1772 | GIMPO_INTERNATIONAL_AIRPORT = "GMP" 1773 | GOLOG_MAQIN_AIRPORT = "GMQ" 1774 | LA_GOMERA_AIRPORT = "GMZ" 1775 | GRODNO_AIRPORT = "GNA" 1776 | GRENOBLE_ISERE_AIRPORT = "GNB" 1777 | MAURICE_BISHOP_INTERNATIONAL_AIRPORT = "GND" 1778 | HALMSTAD_AIRPORT = "HAD" 1779 | KUUJJUAQ_AIRPORT = "YVP" 1780 | HECHI_JINCHENGJIANG_AIRPORT = "HCJ" 1781 | GABÈS_MATMATA_INTERNATIONAL_AIRPORT = "GAE" 1782 | GAINESVILLE_REGIONAL_AIRPORT = "GNV" 1783 | GENOA_CRISTOFORO_COLOMBO_AIRPORT = "GOA" 1784 | NUUK_AIRPORT = "GOH" 1785 | DABOLIM_AIRPORT = "GOI" 1786 | NIZHNY_NOVGOROD_INTERNATIONAL_AIRPORT = "GOJ" 1787 | GOMA_AIRPORT = "GOM" 1788 | GORAKHPUR_AIRPORT = "GOP" 1789 | GOLMUD_AIRPORT = "GOQ" 1790 | GAROUA_AIRPORT = "GOU" 1791 | ARAXOS_AIRPORT = "GPA" 1792 | BALTRA_AIRPORT = "GPS" 1793 | GULFPORT_BILOXI_INTERNATIONAL_AIRPORT = "GPT" 1794 | FRANKFURT_HAHN_AIRPORT = "HHN" 1795 | AUSTIN_STRAUBEL_INTERNATIONAL_AIRPORT = "GRB" 1796 | GRAND_ISLAND_AIRPORT = "GRI" 1797 | GEORGE_AIRPORT = "GRJ" 1798 | GIRONA_COSTA_BRAVA_AIRPORT = "GRO" 1799 | EELDE_AIRPORT = "GRQ" 1800 | GERALD_R_FORD_INTERNATIONAL_AIRPORT = "GRR" 1801 | SAO_PAULO_GUARULHOS_INTERNATIONAL_AIRPORT = "GRU" 1802 | GROZNYY_AIRPORT = "GRV" 1803 | GRACIOSA_ISLAND_AIRPORT = "GRW" 1804 | GRANADA_AIRPORT = "GRX" 1805 | GRAZ_AIRPORT = "GRZ" 1806 | GOTHENBURG_CITY_AIRPORT = "GSE" 1807 | GREAT_FALLS_INTERNATIONAL_AIRPORT = "GTF" 1808 | TOLOTIO_AIRPORT = "GTO" 1809 | A_B_WON_PAT_INTERNATIONAL_AIRPORT = "GUM" 1810 | ATYRAU_AIRPORT = "GUW" 1811 | GENEVE_AIRPORT = "GVA" 1812 | GOVERNADOR_VALADARES_AIRPORT = "GVR" 1813 | HORTA_AIRPORT = "HOR" 1814 | HOVDEN_AIRPORT = "HOV" 1815 | HOMALIN_AIRPORT = "HOX" 1816 | GUAYARAMERIN_AIRPORT = "GYA" 1817 | HEYDAR_ALIYEV_INTERNATIONAL_AIRPORT = "GYD" 1818 | JOSE_JOAQUIN_DE_OLMEDO_AIRPORT = "GYE" 1819 | MAGAN_AIRPORT = "GYG" 1820 | SANTA_GENOVEVA_AIRPORT = "GYN" 1821 | GUANG_YUAN_AIRPORT = "GYS" 1822 | GUYUAN_LIUPANSHAN_AIRPORT = "GYU" 1823 | GAZA_YASER_ARAFAT_INTERNATIONAL_AIRPORT = "GZA" 1824 | GARZE_GESAR_AIRPORT = "GZG" 1825 | KHARKOV_AIRPORT = "HRK" 1826 | VALLEY_INTERNATIONAL_AIRPORT = "HRL" 1827 | GIZO_AIRPORT = "GZO" 1828 | HASVIK_AIRPORT = "HAA" 1829 | HATANGA_AIRPORT = "HTG" 1830 | HOTAN_AIRPORT = "HTN" 1831 | TRI_STATE_MILTON_AIRPORT = "HTS" 1832 | HUATUGOU_AIRPORT = "HTT" 1833 | HANNOVER_AIRPORT = "HAJ" 1834 | HAMBURG_AIRPORT = "HAM" 1835 | NOI_BAI_INTERNATIONAL_AIRPORT = "HAN" 1836 | GRAND_CANYON_BAR_10_AIRPORT = "GCT" 1837 | SAN_FERNANDO_AIRPORT = "RPU" 1838 | BAZHONG_ENYANG_AIRPORT = "BZX" 1839 | CONKLIN_LEISMER_AIRPORT = "CFM" 1840 | AR_HORQIN_AIRPORT = "AEQ" 1841 | HONGYUAN_AIRPORT = "AHJ" 1842 | GASTÃO_MESQUITA_AIRPORT = "GGH" 1843 | BAILING_AIRPORT = "BKV" 1844 | HAIL_AIRPORT = "HAS" 1845 | BOVANENKOVO_AIRPORT = "BVJ" 1846 | HAUGESUND_AIRPORT = "HAU" 1847 | JOSE_MARTI_INTERNATIONAL_AIRPORT = "HAV" 1848 | HOBART_INTERNATIONAL_AIRPORT = "HBA" 1849 | BORG_EL_ARAB_AIRPORT = "HBE" 1850 | HAYWARD_EXECUTIVE_AIRPORT = "HWD" 1851 | KARARA_AIRPORT = "KQR" 1852 | DEQING_MOGANSHAN_AIRPORT = "DEQ" 1853 | PRESIDENT_OBIANG_NGUEMA_INTERNATIONAL_AIRPORT = "GEM" 1854 | GUAÍRA_AIRPORT = "GGJ" 1855 | GRUYERE_MINE_AIRPORT = "GYZ" 1856 | HUBLI_AIRPORT = "HBX" 1857 | HERINGSDORF_AIRPORT = "HDF" 1858 | HANDAN_AIRPORT = "HDG" 1859 | DELINGHA_AIRPORT = "HXD" 1860 | NURSULTAN_NAZARBAYEV_INTERNATIONAL_AIRPORT = "NQZ" 1861 | TANJUNG_API_AIRPORT = "OJU" 1862 | DANFENG_AIRPORT = "DFA" 1863 | BERINGIN_AIRPORT = "GXA" 1864 | QILIAN_AIRPORT = "HBQ" 1865 | KULHUDHUFFUSHI_AIRPORT = "HDK" 1866 | HAMADAN_AIRPORT = "HDM" 1867 | HOEDSPRUIT_AIRPORT = "HDS" 1868 | HOHHOT_BAITA_INTERNATIONAL_AIRPORT = "HET" 1869 | HENGDIAN_AIRPORT = "HEW" 1870 | HAIFA_AIRPORT = "HFA" 1871 | HAGFORS_AIRPORT = "HFS" 1872 | HAMMERFEST_AIRPORT = "HFT" 1873 | HIGUEROTE_AIRPORT = "HGE" 1874 | NOP_GOLIAT_AIRPORT = "DEX" 1875 | ROBERT_BOB_CURTIS_MEMORIAL_AIRPORT = "ORV" 1876 | HORN_ISLAND_AIRPORT = "HID" 1877 | WOODGREEN_AIRPORT = "WOG" 1878 | MELAK_AIRPORT = "GHS" 1879 | DAYRESTAN_AIRPORT = "GSM" 1880 | BERLIN_BRANDENBURG_AIRPORT = "BER" 1881 | BIRMINGHAM_INTERNATIONAL_AIRPORT = "BHX" 1882 | CHERAW_MUNI_LYNCH_BELLINGER_FLD_AIRPORT = "CQW" 1883 | WODGINA_AIRPORT = "GYB" 1884 | MAE_HONG_SON_AIRPORT = "HGN" 1885 | KORHOGO_AIRPORT = "HGO" 1886 | WASH_COUNTY_REGIONAL_AIRPORT = "HGR" 1887 | MOUNT_HAGEN_AIRPORT = "HGU" 1888 | MUSCAT_INTERNATIONAL_AIRPORT = "MCT" 1889 | COOPERSTOWN_WESTVILLE_AIRPORT = "COP" 1890 | CENTRAL_JERSEY_REGIONAL_AIRPORT = "JVI" 1891 | HUA_HIN_AIRPORT = "HHQ" 1892 | HUAIAN_LIANSHUI_AIRPORT = "HIA" 1893 | CHISHOLM_AIRPORT = "HIB" 1894 | HIROSHIMA_AIRPORT = "HIJ" 1895 | SACHEON_AIRPORT = "HIN" 1896 | HONIARA_INTERNATIONAL_AIRPORT = "HIR" 1897 | ZHIJIANG_AIRPORT = "HJJ" 1898 | KHAJURAHO_AIRPORT = "HJR" 1899 | HAKODATE_AIRPORT = "HKD" 1900 | LEHIGH_VALLEY_INTERNATIONAL_AIRPORT = "ABE" 1901 | HONG_KONG_INTERNATIONAL_AIRPORT = "HKG" 1902 | HOSKINS_AIRPORT = "HKN" 1903 | ABILENE_REGIONAL_AIRPORT = "ABI" 1904 | LANSERIA_INTERNATIONAL_AIRPORT = "HLA" 1905 | HULUNBUIR_HAILAR_AIRPORT = "HLD" 1906 | ABERDEEN_MUNICIPAL_AIRPORT = "ABR" 1907 | SOUTHWEST_GEORGIA_REGIONAL_AIRPORT = "ABY" 1908 | NANTUCKET_MEMORIAL_AIRPORT = "ACK" 1909 | ULANHOT_AIRPORT = "HLH" 1910 | OTTAWA_MACDONALD_CARTIER_INTERNATIONAL_AIRPORT = "YOW" 1911 | WACO_MUNICIPAL_AIRPORT = "ACT" 1912 | ARCATA_EUREKA_AIRPORT = "ACV" 1913 | ATLANTIC_CITY_INTERNATIONAL_AIRPORT = "ACY" 1914 | ARDMORE_MUNICIPAL_AIRPORT = "ADM" 1915 | ADDISON_AIRPORT = "ADS" 1916 | ADAREIL_AIRPORT = "AEE" 1917 | HELENA_REGIONAL_AIRPORT = "HLN" 1918 | ALEXANDRIA_INTERNATIONAL_AIRPORT = "AEX" 1919 | SIIRT_AIRPORT = "SXZ" 1920 | FORT_WORTH_ALLIANCE_AIRPORT = "AFW" 1921 | ALLEGHENY_COUNTY_AIRPORT = "AGC" 1922 | AUGUSTA_REGIONAL_AIRPORT = "AGS" 1923 | FUAAMOTU_INTERNATIONAL_AIRPORT = "TBU" 1924 | COLORADO_PLAINS_REGIONAL_AIRPORT = "AKO" 1925 | ALBANY_INTERNATIONAL_AIRPORT = "ALB" 1926 | TRAT_AIRPORT = "TDX" 1927 | HALIM_PERDANAKUSUMA_AIRPORT = "HLP" 1928 | HAMILTON_INTERNATIONAL_AIRPORT = "HLZ" 1929 | KHANTY_MANSIYSK_AIRPORT = "HMA" 1930 | MUBARAK_INTERNATIONAL_AIRPORT = "HMB" 1931 | OUED_IRARA_AIRPORT = "HME" 1932 | HAMI_AIRPORT = "HMI" 1933 | GEN_PESQUEIRA_GARCIA_AIRPORT = "HMO" 1934 | HAMAR_AIRPORT = "HMR" 1935 | HEMAVAN_AIRPORT = "HMV" 1936 | DEVI_AHILYA_BAI_HOLKAR_AIRPORT = "IDR" 1937 | SEOSAN_AIRPORT = "HMY" 1938 | HANAMAKI_AIRPORT = "HNA" 1939 | HANEDA_AIRPORT = "HND" 1940 | HONOLULU_INTERNATIONAL_AIRPORT = "HNL" 1941 | HENGYANG_NANYUE_AIRPORT = "HNY" 1942 | LEA_COUNTY_AIRPORT = "HOB" 1943 | HODEIDAH_AIRPORT = "HOD" 1944 | AL_AHSA_AIRPORT = "HOF" 1945 | FRANK_PAIS_AIRPORT = "HOG" 1946 | SHENNONGJIA_HONGPING_AIRPORT = "HPG" 1947 | CAT_BI_INTERNATIONAL_AIRPORT = "HPH" 1948 | WESTCHESTER_COUNTY_AIRPORT = "HPN" 1949 | BAYTOWN_AIRPORT = "HPY" 1950 | HARARE_INTERNATIONAL_AIRPORT = "HRE" 1951 | HOARAFUSHI_AIRPORT = "HRF" 1952 | HURGHADA_INTERNATIONAL_AIRPORT = "HRG" 1953 | BOONE_COUNTY_AIRPORT = "HRO" 1954 | IZHEVSK_AIRPORT = "IJK" 1955 | HARRISMITH_AIRPORT = "HRS" 1956 | HAZRET_SULTAN_INTERNATIONAL_AIRPORT = "HSA" 1957 | SAGA_AIRPORT = "HSG" 1958 | SHANGJIE_AIRPORT = "HSJ" 1959 | PUTUOSHAN_AIRPORT = "HSN" 1960 | HUNTSVILLE_INTERNATIONAL_AIRPORT = "HSV" 1961 | CHITA_AIRPORT = "HTA" 1962 | HATAY_AIRPORT = "HTY" 1963 | HUMACAO_AIRPORT = "HUC" 1964 | HUMERA_AIRPORT = "HUE" 1965 | HUAHINE_AIRPORT = "HUH" 1966 | PHU_BAI_INTERNATIONAL_AIRPORT = "HUI" 1967 | HOLINGOL_HUOLINHE_AIRPORT = "HUO" 1968 | HUANUCO_AIRPORT = "HUU" 1969 | HUATULCO_AIRPORT = "HUX" 1970 | HUMBERSIDE_AIRPORT = "HUY" 1971 | HUIZHOU_AIRPORT = "HUZ" 1972 | HERVEY_BAY_AIRPORT = "HVB" 1973 | KHOVD_AIRPORT = "HVD" 1974 | VALAN_AIRPORT = "HVG" 1975 | NEW_HAVEN_AIRPORT = "HVN" 1976 | HAVRE_CITY_COUNTY_AIRPORT = "HVR" 1977 | BARNSTABLE_MUNICIPAL_AIRPORT = "HYA" 1978 | RAJIV_GANDHI_INTERNATIONAL_AIRPORT = "HYD" 1979 | LUQIAO_AIRPORT = "HYN" 1980 | HAYS_MUNICIPAL_AIRPORT = "HYS" 1981 | ESTABLECIMIENTO_EL_ARAZA_AIRPORT = "HZA" 1982 | HANZHONG_AIRPORT = "HZG" 1983 | LIPING_AIRPORT = "HZH" 1984 | IGARKA_AIRPORT = "IAA" 1985 | WASHINGTON_DULLES_INTERNATIONAL_AIRPORT = "IAD" 1986 | NIAGARA_FALLS_INTERNATIONAL_AIRPORT = "IAG" 1987 | TUNOSHNA_AIRPORT = "IAR" 1988 | IASI_AIRPORT = "IAS" 1989 | IBADAN_AIRPORT = "IBA" 1990 | IBAGUE_AIRPORT = "IBE" 1991 | HARGEISA_AIRPORT = "HGA" 1992 | IRON_BRIDGE_MINE_AIRPORT = "IBM" 1993 | IBARAKI_AIRPORT = "IBR" 1994 | IBIZA_AIRPORT = "IBZ" 1995 | ANDRÉS_MIGUEL_SALAZAR_MARCANO_AIRPORT = "ICC" 1996 | WICHITA_DWIGHT_D_EISENHOWER_NATIONAL_AIRPORT = "ICT" 1997 | IDAHO_FALLS_REGIONAL_AIRPORT = "IDA" 1998 | DJIBOUTI_AMBOULI_INTERNATIONAL_AIRPORT = "JIB" 1999 | NDIANA_COUNTY_AIRPORT_JIMMY_STEWART_FIELD = "IDI" 2000 | ZIELONA_GORA_BABIMOST_AIRPORT = "IEG" 2001 | KYIV_INTERNATIONAL_AIRPORT = "IEV" 2002 | ISAFJORDUR_AIRPORT = "IFJ" 2003 | ISFAHAN_INTERNATIONAL_AIRPORT = "IFN" 2004 | IVANO_FRANKOVSK_AIRPORT = "IFO" 2005 | NAXOS_AIRPORT = "JNX" 2006 | LAUGHLIN_BULLHEAD_INTERNATIONAL_AIRPORT = "IFP" 2007 | JOINVILLE_LAURO_CARNEIRO_DE_LOYOLA_AIRPORT = "JOI" 2008 | IFURU_AIRPORT = "IFU" 2009 | INAGUA_AIRPORT = "IGA" 2010 | IGIUGIG_AIRPORT = "IGG" 2011 | JI_PARANA_AIRPORT = "JPR" 2012 | JAQUE_AIRPORT = "JQE" 2013 | JOENSUU_AIRPORT = "JOE" 2014 | ADISUTJIPTO_INTERNATIONAL_AIRPORT = "JOG" 2015 | JURUTI_AIRPORT = "JRT" 2016 | YOSHKAR_OLA_AIRPORT = "JOK" 2017 | JOS_AIRPORT = "JOS" 2018 | PRESIDENTE_CASTRO_PINTO_INTERNATIONAL_AIRPORT = "JPA" 2019 | JHARSUGUDA_AIRPORT = "JRG" 2020 | ROWRIAH_AIRPORT = "JRH" 2021 | KILIMANJARO_INTERNATIONAL_AIRPORT = "JRO" 2022 | MAGAS_AIRPORT = "IGT" 2023 | CATARATAS_INTERNATIONAL_AIRPORT = "IGU" 2024 | ASTYPALAIA_AIRPORT = "JTY" 2025 | SYROS_ISLAND_AIRPORT = "JSY" 2026 | SANTORINI_INTERNATIONAL_AIRPORT = "JTR" 2027 | ILAAM_AIRPORT = "IIL" 2028 | CHIZHOU_JIUHUASHAN_AIRPORT = "JUH" 2029 | J_BATISTA_BOS_FILHO_AIRPORT = "IJU" 2030 | EL_CADILLAL_AIRPORT = "JUJ" 2031 | IMAM_KHOMEINI_INTERNATIONAL_AIRPORT = "IKA" 2032 | QUZHOU_AIRPORT = "JUZ" 2033 | TIKSI_AIRPORT = "IKS" 2034 | IRKUTSK_INTERNATIONAL_AIRPORT = "IKT" 2035 | ISSYK_KUL_INTERNATIONAL_AIRPORT = "IKU" 2036 | JESSORE_AIRPORT = "JSR" 2037 | CAMBRIA_COUNTY_AIRPORT = "JST" 2038 | KAMESHLY_AIRPORT = "KAC" 2039 | KADUNA_AIRPORT = "KAD" 2040 | BAURU_AREALVA_AIRPORT = "JTC" 2041 | JUBA_INTERNATIONAL_AIRPORT = "JUB" 2042 | JULIACA_AIRPORT = "JUL" 2043 | JYVASKYLA_AIRPORT = "JYV" 2044 | JIUZHAI_HUANGLONG_AIRPORT = "JZH" 2045 | KASAMA_AIRPORT = "KAA" 2046 | KAJAANI_AIRPORT = "KAJ" 2047 | MALLAM_AMINU_KANO_INTERNATIONAL_AIRPORT = "KAN" 2048 | KUUSAMO_AIRPORT = "KAO" 2049 | LLEIDA_ALGUAIRE_AIRPORT = "ILD" 2050 | KABUL_INTERNATIONAL_AIRPORT = "KBL" 2051 | BORYSPIL_INTERNATIONAL_AIRPORT = "KBP" 2052 | SULTAN_ISMAIL_PETRA_AIRPORT = "KBR" 2053 | KRABI_AIRPORT = "KBV" 2054 | KUCHING_INTERNATIONAL_AIRPORT = "KCH" 2055 | GUSTI_SYAMSIR_ALAM_AIRPORT = "KBU" 2056 | ILIAMNA_AIRPORT = "ILI" 2057 | KUQA_AIRPORT = "KCA" 2058 | WILMINGTON_INTERNATIONAL_AIRPORT = "ILM" 2059 | MANDURRIAO_AIRPORT = "ILO" 2060 | ILE_DES_PINS_AIRPORT = "ILP" 2061 | ILORIN_INTERNATIONAL_AIRPORT = "ILR" 2062 | ILOPANGO_INTERNATIONAL_AIRPORT = "ILS" 2063 | IMPHAL_MUNICIPAL_AIRPORT = "IMF" 2064 | IMPERATRIZ_AIRPORT = "IMP" 2065 | KIRENSK_AIRPORT = "KCK" 2066 | KAHRAMANMARAS_AIRPORT = "KCM" 2067 | CENGIZ_TOPEL_AIRPORT = "KCO" 2068 | KOCHI_RYOMA_AIRPORT = "KCZ" 2069 | WATERLOO_AIRPORT = "ALO" 2070 | KANDAHAR_AIRPORT = "KDH" 2071 | INTA_AIRPORT = "INA" 2072 | KEFLAVIK_INTERNATIONAL_AIRPORT = "KEF" 2073 | SKARDU_AIRPORT = "KDU" 2074 | KEMEROVO_AIRPORT = "KEJ" 2075 | POLGOLLA_RESERVOIR_AIRPORT = "KDZ" 2076 | KEMI_TORNIO_AIRPORT = "KEM" 2077 | KARDLA_AIRPORT = "KDL" 2078 | YINCHUAN_HEDONG_INTERNATIONAL_AIRPORT = "INC" 2079 | INDIANAPOLIS_INTERNATIONAL_AIRPORT = "IND" 2080 | INHAMBANE_AIRPORT = "INH" 2081 | NIS_CONSTANTINE_THE_GREAT_AIRPORT = "INI" 2082 | INNSBRUCK_AIRPORT = "INN" 2083 | SMITH_REYNOLDS_AIRPORT = "INT" 2084 | INVERNESS_AIRPORT = "INV" 2085 | NEPALGANJ_AIRPORT = "KEP" 2086 | KERMAN_AIRPORT = "KER" 2087 | IN_SALAH_AIRPORT = "INZ" 2088 | IOANNINA_AIRPORT = "IOA" 2089 | ISLE_OF_MAN_AIRPORT = "IOM" 2090 | KOGALYM_INTERNATIONAL_AIRPORT = "KGP" 2091 | ILHEUS_BAHIA_JORGE_AMADO_AIRPORT = "IOS" 2092 | MATAVERI_INTERNATIONAL_AIRPORT = "IPC" 2093 | IPOH_AIRPORT = "IPH" 2094 | SAN_LUIS_AIRPORT = "IPI" 2095 | KHERSON_INTERNATIONAL_AIRPORT = "KHE" 2096 | KASHI_AIRPORT = "KHG" 2097 | KASTAMONU_AIRPORT = "KFS" 2098 | KHRABROVO_AIRPORT = "KGD" 2099 | KARAGANDA_AIRPORT = "KGF" 2100 | KALGOORLIE_AIRPORT = "KGI" 2101 | KIGALI_INTERNATIONAL_AIRPORT = "KGL" 2102 | KOS_AIRPORT = "KGS" 2103 | KAOHSIUNG_INTERNATIONAL_AIRPORT = "KHH" 2104 | JINNAH_INTERNATIONAL_AIRPORT = "KHI" 2105 | NANCHANG_CHANGBEI_INTERNATIONAL_AIRPORT = "KHN" 2106 | USIMINAS_AIRPORT = "IPN" 2107 | LYCOMING_COUNTY_AIRPORT = "IPT" 2108 | SAN_ISIDRO_DE_EL_GENERAL_AIRPORT = "IPZ" 2109 | QINGYANG_AIRPORT = "IQN" 2110 | KISUMU_AIRPORT = "KIS" 2111 | DIEGO_ARACENA_INTERNATIONAL_AIRPORT = "IQQ" 2112 | KITHIRA_AIRPORT = "KIT" 2113 | KANSAI_INTERNATIONAL_AIRPORT = "KIX" 2114 | KERTAJATI_INTERNATIONAL_AIRPORT = "KJT" 2115 | C_F_SECADA_VIGNETTA_INTERNATIONAL_AIRPORT = "IQT" 2116 | YEMELYANOVO_AIRPORT = "KJA" 2117 | NDULI_AIRPORT = "IRI" 2118 | KANASI_AIRPORT = "KJI" 2119 | LA_RIOJA_AIRPORT = "IRJ" 2120 | KIRKSVILLE_MUNICIPAL_AIRPORT = "IRK" 2121 | BLANGPIDIE_AIRPORT = "KJX" 2122 | KHASAB_AIRPORT = "KHS" 2123 | KHABAROVSK_AIRPORT = "KHV" 2124 | KRISTIANSTAD_AIRPORT = "KID" 2125 | KISH_INTERNATIONAL_AIRPORT = "KIH" 2126 | NIIGATA_AIRPORT = "KIJ" 2127 | KIMBERLEY_AIRPORT = "KIM" 2128 | KERRY_COUNTY_AIRPORT = "KIR" 2129 | CHISINAU_INTERNATIONAL_AIRPORT = "KIV" 2130 | KAILI_HUANGPING_AIRPORT = "KJH" 2131 | KHON_KAEN_AIRPORT = "KKC" 2132 | KERIKERI_AIRPORT = "KKE" 2133 | KITAKYUSHU_AIRPORT = "KKJ" 2134 | KIRKENES_AIRPORT_HOEYBUKTMOEN = "KKN" 2135 | KASHAN_AIRPORT = "KKS" 2136 | ISLAMABAD_INTERNATIONAL_AIRPORT = "ISB" 2137 | GRABTSEVO_AIRPORT = "KLF" 2138 | KALIBO_INTERNATIONAL_AIRPORT = "KLO" 2139 | KLAGENFURT_AIRPORT = "KLU" 2140 | KARLOVY_VARY_AIRPORT = "KLV" 2141 | KALAMATA_AIRPORT = "KLX" 2142 | KUNMING_CHANGSHUI_INTERNATIONAL_AIRPORT = "KMG" 2143 | MIYAZAKI_AIRPORT = "KMI" 2144 | KALMAR_OLAND_AIRPORT = "KLR" 2145 | KUMAMOTO_AIRPORT = "KMJ" 2146 | KALABO_AIRPORT = "KLB" 2147 | ISPARTA_SULEYMAN_DEMIREL_AIRPORT = "ISE" 2148 | PAINUSHIMA_ISHIGAKI_AIRPORT = "ISG" 2149 | ISCHIA_AIRPORT = "ISH" 2150 | GANDHINAGAR_AIRPORT = "ISK" 2151 | LONG_ISLAND_MACARTHUR_AIRPORT = "ISP" 2152 | ISTANBUL_NEW_AIRPORT = "IST" 2153 | SULAIMANIYAH_INTERNATIONAL_AIRPORT = "ISU" 2154 | KOMATSU_AIRPORT = "KMQ" 2155 | KUMASI_AIRPORT = "KMS" 2156 | KALEMYO_AIRPORT = "KMV" 2157 | KAIMANA_AIRPORT = "KNG" 2158 | KUALA_NAMU_INTERNATIONAL_AIRPORT = "KNO" 2159 | KING_ISLAND_AIRPORT = "KNS" 2160 | KINMEN_AIRPORT = "KNH" 2161 | KANPUR_AIRPORT = "KNU" 2162 | ITHACA_TOMPKINS_REGIONAL_AIRPORT = "ITH" 2163 | ITAMI_AIRPORT = "ITM" 2164 | HANAN_AIRPORT = "IUE" 2165 | INVERCARGILL_AIRPORT = "IVC" 2166 | IVALO_AIRPORT = "IVL" 2167 | IVANOVO_YUZHNY_AIRPORT = "IWA" 2168 | GOGEBIC_COUNTY_AIRPORT = "IWD" 2169 | SIHANOUK_INTERNATIONAL_AIRPORT = "KOS" 2170 | KOKSHETAU_AIRPORT = "KOV" 2171 | POHANG_AIRPORT = "KPO" 2172 | KEPERVEYEM_AIRPORT = "KPW" 2173 | KISHANGARH_AIRPORT = "KQH" 2174 | QURGHONTEPPA_INTERNATIONAL_AIRPORT = "KQT" 2175 | KRAMFORS_AIRPORT = "KRF" 2176 | KIRUNA_AIRPORT = "KRN" 2177 | HAGI_IWAMI_AIRPORT = "IWJ" 2178 | IWAKUNI_KINTAIKYO_AIRPORT = "IWK" 2179 | BELGAUM_AIRPORT = "IXG" 2180 | KUMBHIRGRAM_AIRPORT = "IXS" 2181 | ZONA_DA_MATA_REGIONAL_AIRPORT = "IZA" 2182 | ITZEHOE_HUNGRIGER_WOLF_AIRPORT = "IZE" 2183 | IZUMO_AIRPORT = "IZO" 2184 | JACKSON_HOLE_AIRPORT = "JAC" 2185 | J_PAUL_II_INTERNATIONAL_AIRPORT_KRAKOW_BALICE = "KRK" 2186 | KORLA_AIRPORT = "KRL" 2187 | JAIPUR_AIRPORT = "JAI" 2188 | JACMEL_REGIONAL_AIRPORT = "JAK" 2189 | JACKSON_EVERS_INTERNATIONAL_AIRPORT = "JAN" 2190 | JAUJA_AIRPORT = "JAU" 2191 | KURGAN_AIRPORT = "KRO" 2192 | KRASNODAR_INTERNATIONAL_AIRPORT = "KRR" 2193 | KERMANSHAH_AIRPORT = "KSH" 2194 | NOTOHADINEGORO_AIRPORT = "JBB" 2195 | TURKMANBASHI_AIRPORT = "KRW" 2196 | KARLSTAD_AIRPORT = "KSD" 2197 | KASOS_ISLAND_AIRPORT = "KSJ" 2198 | JONESBORO_AIRPORT = "JBR" 2199 | KASSALA_AIRPORT = "KSL" 2200 | ARISTOTELES_AIRPORT = "KSO" 2201 | KARSHI_AIRPORT = "KSQ" 2202 | KARS_AIRPORT = "KSY" 2203 | NEW_CENTURY_AIRCENTER_AIRPORT = "JCI" 2204 | KETAPANG_AIRPORT = "KTG" 2205 | KARUP_AIRPORT = "KRP" 2206 | KRISTIANSAND_AIRPORT = "KRS" 2207 | KHARTOUM_INTERNATIONAL_AIRPORT = "KRT" 2208 | KOSRAE_AIRPORT = "KSA" 2209 | BARCA_AIRPORT = "KSC" 2210 | KASESE_AIRPORT = "KSE" 2211 | KASSEL_CALDEN_AIRPORT = "KSF" 2212 | KOSTANAY_AIRPORT = "KSN" 2213 | KRISTIANSUND_AIRPORT_KVERNBERGET = "KSU" 2214 | KOTLAS_AIRPORT = "KSZ" 2215 | KARRATHA_AIRPORT = "KTA" 2216 | KERTEH_AIRPORT = "KTE" 2217 | KITALE_AIRPORT = "KTL" 2218 | JODHPUR_AIRPORT = "JDH" 2219 | KAUNAS_AIRPORT = "KUN" 2220 | ORLANDO_BEZERRA_DE_MENEZES_AIRPORT = "JDO" 2221 | KUTAISI_INTERNATIONAL_AIRPORT = "KUT" 2222 | BHUNTAR_AIRPORT = "KUU" 2223 | GUNSAN_AIRPORT = "KUV" 2224 | GYANDZHA_AIRPORT = "KVD" 2225 | KIROVSK_AIRPORT = "KVK" 2226 | JINGDEZHEN_AIRPORT = "JDZ" 2227 | KING_ABDULAZIZ_INTERNATIONAL_AIRPORT = "JED" 2228 | KWAJALEIN_AIRPORT = "KWA" 2229 | KITTILA_AIRPORT = "KTT" 2230 | KATOWICE_INTERNATIONAL_AIRPORT = "KTW" 2231 | SULTAN_HAJI_AHMAD_SHAH_AIRPORT = "KUA" 2232 | KUDAT_AIRPORT = "KUD" 2233 | KURUMOCH_INTERNATIONAL_AIRPORT = "KUF" 2234 | KUSHIRO_AIRPORT = "KUH" 2235 | KUALA_LUMPUR_INTERNATIONAL_AIRPORT = "KUL" 2236 | KUOPIO_AIRPORT = "KUO" 2237 | KULUSUK_AIRPORT = "KUS" 2238 | KAVALA_INTERNATIONAL_AIRPORT = "KVA" 2239 | MORAVA_AIRPORT = "KVO" 2240 | KIROV_AIRPORT = "KVX" 2241 | GUIYANG_LONGDONGBAO_INTERNATIONAL_AIRPORT = "KWE" 2242 | GWANGJU_AIRPORT = "KWJ" 2243 | GUILIN_LIANGJIANG_INTERNATIONAL_AIRPORT = "KWL" 2244 | KHURBA_AIRPORT = "KXK" 2245 | KONYA_AIRPORT = "KYA" 2246 | PHILIPPOS_AIRPORT = "KZI" 2247 | KONDINSKOYE_AIRPORT = "KXD" 2248 | KAZAN_INTERNATIONAL_AIRPORT = "KZN" 2249 | KZYL_ORDA_AIRPORT = "KZO" 2250 | KUWAIT_INTERNATIONAL_AIRPORT = "KWI" 2251 | AASIAAT_AIRPORT = "JEG" 2252 | JEKI_AIRPORT = "JEK" 2253 | PAAMIUT_AIRPORT = "JFR" 2254 | KYZYL_AIRPORT = "KYZ" 2255 | JIAYUGUAN_AIRPORT = "JGN" 2256 | JIAN_JING_GANG_SHAN_AIRPORT = "JGS" 2257 | SENAI_AIRPORT = "JHB" 2258 | XISHUANGBANNA_GASA_AIRPORT = "JHG" 2259 | KAPALUA_AIRPORT = "JHM" 2260 | SISIMIUT_AIRPORT = "JHS" 2261 | JINCHUAN_AIRPORT = "JIC" 2262 | KASTELLORIZO_AIRPORT = "KZS" 2263 | QUATRO_DE_FEVEREIRO_AIRPORT = "LAD" 2264 | SERVEL_AIRPORT = "LAI" 2265 | CORREIA_PINTO_AIRPORT = "LAJ" 2266 | JIGIGA_AIRPORT = "JIJ" 2267 | LEON_AIRPORT = "LAP" 2268 | LA_BRAQ_AIRPORT = "LAQ" 2269 | KOMODO_AIRPORT = "LBJ" 2270 | IKARIA_AIRPORT = "JIK" 2271 | JIMMA_AIRPORT = "JIM" 2272 | LEEDS_BRADFORD_INTERNATIONAL_AIRPORT = "LBA" 2273 | CAPITAL_REGION_INTERNATIONAL_AIRPORT = "LAN" 2274 | LAOAG_AIRPORT = "LAO" 2275 | QIANJIANG_WULINGSHAN_AIRPORT = "JIQ" 2276 | LIBERAL_MUNICIPAL_AIRPORT = "LBL" 2277 | LAWTON_FORT_SILL_REGIONAL_AIRPORT = "LAW" 2278 | LOS_ANGELES_INTERNATIONAL_AIRPORT = "LAX" 2279 | KHUJAND_AIRPORT = "LBD" 2280 | JAGUARUNA_REGIONAL_AIRPORT = "JJG" 2281 | MULIKA_LODGE_AIRPORT = "JJM" 2282 | LARNACA_INTERNATIONAL_AIRPORT = "LCA" 2283 | GOLOSON_INTERNATIONAL_AIRPORT = "LCE" 2284 | A_CORUNA_AIRPORT = "LCG" 2285 | LODZ_LUBLINEK_AIRPORT = "LCJ" 2286 | LONDRINA_AIRPORT = "LDB" 2287 | TARBES_OSSUN_LOURDES_AIRPORT = "LDE" 2288 | JOPLIN_AIRPORT = "JLN" 2289 | JABALPUR_AIRPORT = "JLR" 2290 | LANCANG_JINGMAI_AIRPORT = "JMJ" 2291 | MIKONOS_AIRPORT = "JMK" 2292 | LEBANON_REGIONAL_AIRPORT = "LEB" 2293 | CORONEL_HORACIO_DE_MATTOS_AIRPORT = "LEC" 2294 | ALMERIA_AIRPORT = "LEI" 2295 | GEN_A_V_COBO_AIRPORT = "LET" 2296 | BLUE_GRASS_AIRPORT = "LEX" 2297 | LANPING_FENG_HUA_AIRPORT = "LFH" 2298 | LAMERD_AIRPORT = "LFM" 2299 | LINFEN_QIAOLI_AIRPORT = "LFQ" 2300 | LA_FRIA_AIRPORT = "LFR" 2301 | PULKOVO_AIRPORT = "LED" 2302 | O_R_TAMBO_INTERNATIONAL_AIRPORT = "JNB" 2303 | JINING_AIRPORT = "JNG" 2304 | LAGO_AGRIO_AIRPORT = "LGQ" 2305 | MILANO_LINATE_AIRPORT = "LIN" 2306 | ALAMOSA_MUNICIPAL_AIRPORT = "ALS" 2307 | LIFOU_AIRPORT = "LIF" 2308 | BELLEGARDE_AIRPORT = "LIG" 2309 | BILL_AND_HILLARY_CLINTON_NATIONAL_AIRPORT = "LIT" 2310 | LEGASPI_AIRPORT = "LGP" 2311 | LONDON_GATWICK_AIRPORT = "LGW" 2312 | ALLAMA_IQBAL_INTERNATIONAL_AIRPORT = "LHE" 2313 | LONDON_HEATHROW_AIRPORT = "LHR" 2314 | LIHUE_AIRPORT = "LIH" 2315 | LILLE_AIRPORT = "LIL" 2316 | JORGE_CHAVEZ_INTERNATIONAL_AIRPORT = "LIM" 2317 | LIMON_INTERNATIONAL_AIRPORT = "LIO" 2318 | LIBERIA_AIRPORT = "LIR" 2319 | LISBON_PORTELA_AIRPORT = "LIS" 2320 | LOIKAW_AIRPORT = "LIW" 2321 | GEWAYENTA_AIRPORT = "LKA" 2322 | LANKARAN_INTERNATIONAL_AIRPORT = "LLK" 2323 | LAKE_MANYARA_AIRPORT = "LKY" 2324 | LIBO_COUNTY_LIBO_CITY_AIRPORT = "LLB" 2325 | LIJIANG_AIRPORT = "LJG" 2326 | LALIBELA_AIRPORT = "LLI" 2327 | LJUBLJANA_JOZE_PUCNIK_AIRPORT = "LJU" 2328 | BANAK_AIRPORT = "LKL" 2329 | LÜLIANG_AIRPORT = "LLV" 2330 | LEKNES_AIRPORT = "LKN" 2331 | CHAUDHARY_CHARAN_SINGH_INTERNATIONAL_AIRPORT = "LKO" 2332 | LULEA_AIRPORT = "LLA" 2333 | CAGAYAN_NORTH_INTERNATIONAL_AIRPORT = "LLC" 2334 | LINGLING_AIRPORT = "LLF" 2335 | WALLA_WALLA_AIRPORT = "ALW" 2336 | LIMBANG_AIRPORT = "LMN" 2337 | ROBERT_ATTY_BESSING_AIRPORT = "LNU" 2338 | LINCANG_AIRPORT = "LNJ" 2339 | LONGNAN_CHENGZHOU_AIRPORT = "LNL" 2340 | LANCASTER_AIRPORT = "LNS" 2341 | LANAI_AIRPORT = "LNY" 2342 | LAMPEDUSA_AIRPORT = "LMP" 2343 | CRATER_LAKE_KLAMATH_REGIONAL_AIRPORT = "LMT" 2344 | LINZ_AIRPORT = "LNZ" 2345 | LOEI_AIRPORT = "LOE" 2346 | CIUDAD_DE_CATAMAYO_AIRPORT = "LOH" 2347 | LMEKRAREG_AIRPORT = "LOO" 2348 | LOMBOK_INTERNATIONAL_AIRPORT = "LOP" 2349 | MURTALA_MUHAMMED_INTERNATIONAL_AIRPORT = "LOS" 2350 | BOWMAN_FIELD_AIRPORT = "LOU" 2351 | LOS_TABLONES_AIRPORT = "LOX" 2352 | LALEU_AIRPORT = "LRH" 2353 | LA_ROMANA_AIRPORT = "LRM" 2354 | LEROS_AIRPORT = "LRS" 2355 | LONDON_LUTON_AIRPORT = "LTN" 2356 | LORETO_AIRPORT = "LTO" 2357 | COTAPAXI_INTERNATIONAL_AIRPORT = "LTX" 2358 | LUDERITZ_AIRPORT = "LUD" 2359 | LUGANO_AIRPORT = "LUG" 2360 | LUDHIANA_SAHNEWAL_AIRPORT = "LUH" 2361 | CINCINNATI_MUNICIPAL_LUNKEN_AIRPORT = "LUK" 2362 | LUXEMBOURG_AIRPORT = "LUX" 2363 | GREENBRIER_VALLEY_AIRPORT = "LWB" 2364 | LENINAKAN_AIRPORT = "LWN" 2365 | LVIV_INTERNATIONAL_AIRPORT = "LWO" 2366 | LEWISTON_NEZ_PERCE_COUNTY_REGIONAL_AIRPORT = "LWS" 2367 | LAWAS_AIRPORT = "LWY" 2368 | LHASA_GONGGAR_AIRPORT = "LXA" 2369 | MENORCA_AIRPORT = "MAH" 2370 | AMATA_KABUA_INTERNATIONAL_AIRPORT = "MAJ" 2371 | MANCHESTER_AIRPORT = "MAN" 2372 | MAE_SOT_AIRPORT = "MAQ" 2373 | LA_CHINITA_AIRPORT = "MAR" 2374 | MOMOTE_AIRPORT = "MAS" 2375 | ADOLFO_SUAREZ_MADRID_BARAJAS_AIRPORT = "MAD" 2376 | MONBETSU_AIRPORT = "MBE" 2377 | EUGENIO_M_DE_HOSTOS_AIRPORT = "MAZ" 2378 | MMABATHO_INTERNATIONAL_AIRPORT = "MBD" 2379 | CENTENNIAL_AIRPORT = "APA" 2380 | HARTSFIELD_JACKSON_ATLANTA_INTERNATIONAL_AIRPORT = "ATL" 2381 | MOBILE_DOWNTOWN_AIRPORT = "BFM" 2382 | BERLIN_MUNICIPAL_AIRPORT = "BML" 2383 | COLUMBIA_METROPOLITAN_AIRPORT = "CAE" 2384 | CHIPPEWA_COUNTY_AIRPORT = "CIU" 2385 | CHARLOTTE_DOUGLAS_INTERNATIONAL_AIRPORT = "CLT" 2386 | CORPUS_CHRISTI_INTERNATIONAL_AIRPORT = "CRP" 2387 | COLUMBUS_AIRPORT = "CSG" 2388 | RONALD_REAGAN_NATIONAL_AIRPORT = "DCA" 2389 | MARA_LODGES_AIRPORT = "MRE" 2390 | KICHWA_TEMBO_AIRPORT = "KTJ" 2391 | FLYING_CLOUD_AIRPORT = "FCM" 2392 | FORT_LAUDERDALE_HOLLYWOOD_INTERNATIONAL_AIRPORT = "FLL" 2393 | FRIDAY_HARBOR_AIRPORT = "FRD" 2394 | GRAYLING_AIRPORT = "KGX" 2395 | WILLIAM_P_HOBBY_AIRPORT = "HOU" 2396 | GEORGE_BUSH_INTERCONTINENTAL_AIRPORT = "IAH" 2397 | IMPERIAL_COUNTY_AIRPORT = "IPL" 2398 | SLOULIN_FIELD_INTERNATIONAL_AIRPORT = "ISN" 2399 | MCCARRAN_INTERNATIONAL_AIRPORT = "LAS" 2400 | LUBBOCK_PRESTON_SMITH_INTERNATIONAL_AIRPORT = "LBB" 2401 | LOMPOC_AIRPORT = "LPC" 2402 | MIDLAND_INTERNATIONAL_AIRPORT = "MAF" 2403 | MERCED_MUNICIPAL_AIRPORT = "MCE" 2404 | MONTGOMERY_REGIONAL_AIRPORT = "MGM" 2405 | MATHER_AIRPORT = "MHR" 2406 | MARTHAS_VINEYARD_AIRPORT = "MVY" 2407 | WILL_ROGERS_WORLD_AIRPORT = "OKC" 2408 | ORCAS_ISLAND_AIRPORT = "ESD" 2409 | GREATER_ROCHESTER_INTERNATIONAL_AIRPORT = "ROC" 2410 | SEVILLE_AIRPORT = "SVQ" 2411 | RUIDOSO_SIERRA_BLANCA_REGIONAL_AIRPORT = "RUI" 2412 | TONOPAH_AIRPORT = "TPH" 2413 | JEREZ_AIRPORT = "XRY" 2414 | MALAGA_AIRPORT = "AGP" 2415 | ALICANTE_ELCHE_AIRPORT = "ALC" 2416 | ANGERS_MARCE_AIRPORT = "ANE" 2417 | EUROAIRPORT_SWISS = "BSL" 2418 | CHARLES_DE_GAULLE_AIRPORT = "CDG" 2419 | STRASBOURG_AIRPORT = "SXB" 2420 | HYERES_AIRPORT = "TLN" 2421 | KARPATHOS_AIRPORT = "AOK" 2422 | PICO_ISLAND_AIRPORT = "PIX" 2423 | CORVO_ISLAND_AZORES_AIRPORT = "CVU" 2424 | PARDUBICE_AIRPORT = "PED" 2425 | EILAT_AIRPORT = "ETH" 2426 | RAMON_AIRPORT = "ETM" 2427 | FARO_AIRPORT = "FAO" 2428 | SANTA_CRUZ_AIRPORT = "FLW" 2429 | W_A_MOZART_SALZBURG_AIRPORT = "SZG" 2430 | LUBLIN_AIRPORT = "LUZ" 2431 | ZAFER_AIRPORT = "KZR" 2432 | SINOP_AIRPORT_TURKEY = "NOP" 2433 | IZMIR_ADNAN_MENDERES_AIRPORT = "ADB" 2434 | SANLIURFA_GAP_AIRPORT = "GNY" 2435 | ISTANBUL_ATATURK_AIRPORT = "ISL" 2436 | BRATISLAVA_AIRPORT = "BTS" 2437 | NORMAN_MANLEY_INTERNATIONAL_AIRPORT = "KIN" 2438 | CIUDAD_CONSTITUCIÓN_AIRPORT = "CUA" 2439 | LOS_CANOS_AIRPORT = "GAO" 2440 | RAFAEL_CABRERA_AIRPORT = "GER" 2441 | GOLFITO_AIRPORT = "GLF" 2442 | LYNDEN_PINDLING_INTERNATIONAL_AIRPORT = "NAS" 2443 | MAYAGUANA_AIRPORT = "MYG" 2444 | BIMINI_INTERNATIONAL_AIRPORT = "BIM" 2445 | CROOKED_ISLAND_AIRPORT = "CRI" 2446 | CHARLES_KIRKCONNEL_INTERNATIONAL_AIRPORT = "CYB" 2447 | NORTH_ELEUTHERA_INTERNATIONAL_AIRPORT = "ELH" 2448 | GOVERNORS_HARBOUR_AIRPORT = "GHB" 2449 | KANDAVU_AIRPORT = "KDV" 2450 | LABASA_AIRPORT = "LBS" 2451 | LAKEBA_AIRPORT = "LKB" 2452 | AITUTAKI_AIRPORT = "AIT" 2453 | PHILIP_S_W_GOLDSON_INTERNATIONAL_AIRPORT = "BZE" 2454 | NADI_INTERNATIONAL_AIRPORT = "NAN" 2455 | SAVUSAVU_AIRPORT = "SVU" 2456 | FAKARAVA_AIRPORT = "FAV" 2457 | TIKEHAU_ATOLL_AIRPORT = "TIH" 2458 | KAUKURA_ATOLL_AIRPORT = "KKR" 2459 | KAUEHI_AIRPORT = "KHZ" 2460 | ARUTUA_AIRPORT = "AXR" 2461 | HIVA_OA_AIRPORT = "AUQ" 2462 | MOTU_MUTE_AIRPORT = "BOB" 2463 | NUKU_HIVA_AIRPORT = "NHV" 2464 | FUTUNA_AIRPORT = "FTA" 2465 | RANGIROA_AIRPORT = "RGI" 2466 | BAUERFIELD_AIRPORT = "VLI" 2467 | MOUNT_COOK_AIRPORT = "MON" 2468 | HOKITIKA_AIRPORT = "HKK" 2469 | ABHA_REGIONAL_AIRPORT = "AHB" 2470 | BUSHEHR_AIRPORT = "BUZ" 2471 | SIR_BANI_YAS_ISLAND_AIRPORT = "XSB" 2472 | SHARJAH_INTERNATIONAL_AIRPORT = "SHJ" 2473 | SALALAH_INTERNATIONAL_AIRPORT = "SLL" 2474 | AL_AIN_AIRPORT = "AAN" 2475 | MARKA_INTERNATIONAL_AIRPORT = "ADJ" 2476 | ABU_DHABI_INTERNATIONAL_AIRPORT = "AUH" 2477 | BHAGATANWALA_AIRPORT = "BHW" 2478 | DERA_GHAZI_KHAN_AIRPORT = "DEA" 2479 | AL_DHAFRA_MILITARY_AIRPORT = "DHF" 2480 | DUQM_INTERNATIONAL_AIRPORT = "DQM" 2481 | DUBAI_WORLD_CENTRAL_AL_MAKTOUM_INTERNATIONAL_AIRPORT = "DWC" 2482 | DUBAI_AIRPORT = "DXB" 2483 | WILEY_POST_WILL_ROGERS_MEMORIAL_AIRPORT = "BRW" 2484 | BARTER_ISLAND_AIRPORT = "BTI" 2485 | COLD_BAY_AIRPORT = "CDB" 2486 | MUDHOLE_SMITH_AIRPORT = "CDV" 2487 | KODIAK_BENNY_BENSON_STATE_AIRPORT = "ADQ" 2488 | BETHEL_AIRPORT = "BET" 2489 | BUCKLAND_AIRPORT = "BKC" 2490 | KONGIGANAK_AIRPORT = "KKH" 2491 | MARSHALL_DON_HUNTER_SR_AIRPORT = "MLL" 2492 | DILLINGHAM_AIRPORT = "DLG" 2493 | DEERING_AIRPORT = "DRG" 2494 | EMMONAK_AIRPORT = "EMK" 2495 | UNALASKA_AIRPORT = "DUT" 2496 | JUNEAU_INTERNATIONAL_AIRPORT = "JNU" 2497 | MCGRATH_AIRPORT = "MCG" 2498 | MOUNTAIN_VILLAGE_AIRPORT = "MOU" 2499 | KWIGILLINGOK_AIRPORT = "KWK" 2500 | KLAWOCK_AIRPORT = "KLW" 2501 | WALES_AIRPORT = "WAA" 2502 | AMBLER_AIRPORT = "ABL" 2503 | EGEGIK_AIRPORT = "EGX" 2504 | FAIRBANKS_INTERNATIONAL_AIRPORT = "FAI" 2505 | EDWARD_G_PITKA_SR_AIRPORT = "GAL" 2506 | HAINES_MUNICIPAL_AIRPORT = "HNS" 2507 | KALSKAG_MUNICIPAL_AIRPORT = "KLG" 2508 | HUGHES_MUNICIPAL_AIRPORT = "HUS" 2509 | HOONAH_AIRPORT = "HNH" 2510 | NULATO_AIRPORT = "NUL" 2511 | KOBUK_WIEN_AIRPORT = "OBU" 2512 | UNALAKLEET_AIRPORT = "UNK" 2513 | PETERSBURG_MUNICIPAL_AIRPORT = "PSG" 2514 | KWINHAGAK_AIRPORT = "KWN" 2515 | SHISHMAREF_AIRPORT = "SHH" 2516 | SAINT_PAUL_ISLAND_AIRPORT = "SNP" 2517 | TED_STEVENS_ANCHORAGE_INTERNATIONAL_AIRPORT = "ANC" 2518 | ANIAK_AIRPORT = "ANI" 2519 | ANVIK_AIRPORT = "ANV" 2520 | ATQASUK_EDWARD_BURNELL_SR_MEMORIAL_AIRPORT = "ATK" 2521 | ALAKANUK_AIRPORT = "AUK" 2522 | SITKA_AIRPORT = "SIT" 2523 | TELLER_AIRPORT = "TLA" 2524 | SELAWIK_AIRPORT = "WLK" 2525 | KIVALINA_AIRPORT = "KVL" 2526 | KASIGLUK_AIRPORT = "KUK" 2527 | KOTLIK_AIRPORT = "KOT" 2528 | BREVIG_MISSION_AIRPORT = "KTS" 2529 | KOYUKUK_AIRPORT = "KYU" 2530 | KOKHANOK_AIRPORT = "KNK" 2531 | KWETHLUK_AIRPORT = "KWT" 2532 | AWABA_AIRPORT = "AWB" 2533 | SHAKTOOLIK_AIRPORT = "SKK" 2534 | CHEVAK_AIRPORT = "VAK" 2535 | ELIM_AIRPORT = "ELI" 2536 | WRANGELL_AIRPORT = "WRG" 2537 | YAKUTAT_AIRPORT = "YAK" 2538 | KONA_INTERNATIONAL_AIRPORT_AT_KEAHOLE = "KOA" 2539 | DEW_STATION_AIRPORT = "PIZ" 2540 | MATSU_NANGAN_AIRPORT = "LZN" 2541 | MAGONG_AIRPORT = "MZG" 2542 | HUALIEN_AIRPORT = "HUN" 2543 | YAKUSHIMA_AIRPORT = "KUM" 2544 | NAGASAKI_AIRPORT = "NGS" 2545 | AOMORI_AIRPORT = "AOJ" 2546 | AMAMI_AIRPORT = "ASJ" 2547 | HACHIJO_JIMA_AIRPORT = "HAC" 2548 | MIYAKO_AIRPORT = "MMY" 2549 | YEOSU_AIRPORT = "RSU" 2550 | KING_MSWATI_III_INTERNATIONAL_AIRPORT = "SHO" 2551 | JEJU_INTERNATIONAL_AIRPORT = "CJU" 2552 | INCHEON_INTERNATIONAL_AIRPORT = "ICN" 2553 | BUSUANGA_AIRPORT = "USU" 2554 | EL_CALAFATE_AIRPORT = "FTE" 2555 | CATARATAS_DEL_IGUAZU_INTERNATIONAL_AIRPORT = "IGR" 2556 | MALVINAS_ARGENTINAS_INTERNATIONAL_AIRPORT = "USH" 2557 | MAR_DEL_PLATA_AIRPORT = "MDQ" 2558 | RIO_GALLEGOS_INTERNACIONAL_AIRPORT = "RGL" 2559 | ALTA_FLORESTA_AIRPORT = "AFL" 2560 | CARAJAS_AIRPORT = "CKS" 2561 | EDUARDO_GOMES_INTERNATIONAL_AIRPORT = "MAO" 2562 | CORUMBA_INTERNACIONAL_AIRPORT = "CMG" 2563 | MARABA_AIRPORT = "MAB" 2564 | PALMAS_AIRPORT = "PMW" 2565 | CHACALLUTA_AIRPORT = "ARI" 2566 | TENIENTE_VIDAL_AIRPORT = "BBA" 2567 | VILHENA_AIRPORT = "BVH" 2568 | PAMPA_GUANACO_AIRPORT = "DPB" 2569 | MOCOPULLI_AIRPORT = "MHC" 2570 | COPOSA_AIRPORT = "CPP" 2571 | PRES_IBANEZ_AIRPORT = "PUQ" 2572 | ARTURO_MERINO_BENITEZ_AIRPORT = "SCL" 2573 | TEMUCO_MAQUEHUE_AIRPORT = "PZS" 2574 | PUERTO_ASIS_AIRPORT = "PUU" 2575 | GUAPI_AIRPORT = "GPI" 2576 | PUERTO_CARRENO_AIRPORT = "PCR" 2577 | SHUMBA_AIRPORT = "JAE" 2578 | CANARANA_AIRPORT = "CQA" 2579 | FAZENDA_TUCUNARE_AIRPORT = "AZL" 2580 | GRANTLEY_ADAMS_INTERNATIONAL_AIRPORT = "BGI" 2581 | CANEFIELD_AIRPORT = "DCF" 2582 | MELVILLE_HALL_AIRPORT = "DOM" 2583 | TULUKSAK_AIRPORT = "TLT" 2584 | REINA_BEATRIX_INTERNATIONAL_AIRPORT = "AUA" 2585 | CLAYTON_J_LLOYD_INTERNATIONAL_AIRPORT = "AXA" 2586 | TERRANCE_B_LETTSOME_INTERNATIONAL_AIRPORT = "EIS" 2587 | L_F_WADE_INTERNATIONAL_AIRPORT = "BDA" 2588 | MARKOVO_AIRPORT = "KVM" 2589 | ENTERPRISE_MUNI_AIRPORT = "EDN" 2590 | ANAPA_AIRPORT = "AAQ" 2591 | KOGGALA_AIRPORT = "KCT" 2592 | MATTALA_RAJAPAKSA_INTERNATIONAL_AIRPORT = "HRI" 2593 | MACAU_INTERNATIONAL_AIRPORT = "MFM" 2594 | TRIBHUVAN_INTERNATIONAL_AIRPORT = "KTM" 2595 | BHARATPUR_AIRPORT = "BHR" 2596 | BAJURA_AIRPORT = "BJU" 2597 | TUMLING_TAR_AIRPORT = "TMI" 2598 | SUVARNABHUMI_AIRPORT = "BKK" 2599 | KOODDOO_AIRPORT = "GKK" 2600 | NYAUNG_U_AIRPORT = "NYU" 2601 | HEHO_AIRPORT = "HEH" 2602 | PHUKET_INTERNATIONAL_AIRPORT = "HKT" 2603 | KENG_TUNG_AIRPORT = "KET" 2604 | KYAUKPYU_AIRPORT = "KYP" 2605 | KAWTHAUNG_AIRPORT = "KAW" 2606 | CIVIL_AIRPORT = "AKY" 2607 | MANDALAY_INTERNATIONAL_AIRPORT = "MDL" 2608 | MOPAH_AIRPORT = "MKQ" 2609 | KALIMARAU_AIRPORT = "BEJ" 2610 | LANGGUR_AIRPORT = "LUV" 2611 | DOBO_AIRPORT = "DOB" 2612 | HALUOLEO_AIRPORT = "KDI" 2613 | MUKAH_AIRPORT = "MKM" 2614 | LAHAD_DATU_AIRPORT = "LDU" 2615 | LABUAN_AIRPORT = "LBU" 2616 | BARIO_AIRPORT = "BBN" 2617 | BAUBAU_AIRPORT = "BUW" 2618 | MARUDI_AIRPORT = "MUR" 2619 | MULU_AIRPORT = "MZV" 2620 | STEBBINS_AIRPORT = "WBB" 2621 | HANG_NADIM_INTERNATIONAL_AIRPORT = "BTH" 2622 | LETUNG_AIRPORT = "LMU" 2623 | GUNUNGSITOLI_AIRPORT = "GNS" 2624 | SULTAN_SYARIF_KASIM_II_INTERNATIONAL_AIRPORT = "PKU" 2625 | PANGKOR_AIRPORT = "PKG" 2626 | HALIWEN_AIRPORT = "ABU" 2627 | ARRABURY_AIRPORT = "AAB" 2628 | BLACKALL_AIRPORT = "BKQ" 2629 | ALICE_SPRINGS_AIRPORT = "ASP" 2630 | CHARLEVILLE_AIRPORT = "CTL" 2631 | AUSTRAL_DOWNS_AIRPORT = "AWP" 2632 | CONNELLAN_AIRPORT = "AYQ" 2633 | BARCALDINE_AIRPORT = "BCI" 2634 | BROOME_AIRPORT = "BME" 2635 | WHITSUNDAY_COAST_AIRPORT = "PPP" 2636 | NIFTY_AIRPORT = "NIF" 2637 | BARIMUNYA_AIRPORT = "BYP" 2638 | CEDUNA_AIRPORT = "CED" 2639 | CLONCURRY_AIRPORT = "CNJ" 2640 | COOBER_PEDY_AIRPORT = "CPD" 2641 | COONDEWANNA_AIRPORT = "CJF" 2642 | DOOMADGEE_AIRPORT = "DMD" 2643 | DEVONPORT_AIRPORT = "DPO" 2644 | FORREST_RIVER_AIRPORT = "FVR" 2645 | GINBATA_AIRPORT = "GBW" 2646 | GLADSTONE_AIRPORT = "GLT" 2647 | ALYANGULA_AIRPORT = "GTE" 2648 | GEORGETOWN_AIRPORT = "GTT" 2649 | BALLERA_AIRPORT = "BBL" 2650 | KARUMBA_AIRPORT = "KRB" 2651 | KINGSCOTE_AIRPORT = "KGC" 2652 | MORNINGTON_AIRPORT = "ONG" 2653 | MANINGRIDA_AIRPORT = "MNG" 2654 | MCARTHUR_RIVER_AIRPORT = "MCV" 2655 | NORTHERN_PENINSULA_AIRPORT = "ABM" 2656 | KUNUNURRA_AIRPORT = "KNX" 2657 | NHULUNBUY_AIRPORT = "GOV" 2658 | LEARMONTH_AIRPORT = "LEA" 2659 | NORMANTON_AIRPORT = "NTN" 2660 | OLYMPIC_DAM_AIRPORT = "OLP" 2661 | PARABURDOO_AIRPORT = "PBO" 2662 | PORT_MACQUARIE_AIRPORT = "PQQ" 2663 | PORT_HEDLAND_INTERNATIONAL_AIRPORT = "PHE" 2664 | TREPELL_AIRPORT = "TQP" 2665 | ROMA_AIRPORT = "RMA" 2666 | SYDNEY_KINGSFORD_SMITH_AIRPORT = "SYD" 2667 | THE_MONUMENT_AIRPORT = "PHQ" 2668 | TELFER_AIRPORT = "TEF" 2669 | BEIJING_CAPITAL_INTERNATIONAL_AIRPORT = "PEK" 2670 | BEIHAI_FUCHENG_AIRPORT = "BHY" 2671 | SHIJIAZHUANG_DAGUOCUN_AIRPORT = "SJW" 2672 | QINHUANGDAO_BEIDAIHE_AIRPORT = "BPE" 2673 | GUANGZHOU_BAIYUN_INTERNATIONAL_AIRPORT = "CAN" 2674 | TIANJIN_BINHAI_INTERNATIONAL_AIRPORT = "TSN" 2675 | DELMA_ISLAND_AIRPORT = "ZDY" 2676 | CHIFENG_AIRPORT = "CIF" 2677 | CHANGSHA_HUANGHUA_AIRPORT = "CSX" 2678 | ZHANGJIAJIE_HEHUA_AIRPORT = "DYG" 2679 | LUOYANG_BEIJIAO_AIRPORT = "LYA" 2680 | NANNING_AIRPORT = "NNG" 2681 | SANYA_PHOENIX_INTERNATIONAL_AIRPORT = "SYX" 2682 | ZHONGWEI_AIRPORT = "ZHY" 2683 | NANYANG_AIRPORT = "NNY" 2684 | ZHENGZHOU_XINZHENG_AIRPORT = "CGO" 2685 | XIAN_XIGUAN_AIRPORT = "SIA" 2686 | DUNHUANG_AIRPORT = "DNH" 2687 | HAIKOU_AIRPORT = "HAK" 2688 | JIEYANG_CHAOSHAN_AIRPORT = "SWA" 2689 | WUHAN_TIANHE_INTERNATIONAL_AIRPORT = "WUH" 2690 | LANZHOU_ZHONGCHUAN_INTERNATIONAL_AIRPORT = "LHW" 2691 | DEHONG_MANGSHI_AIRPORT = "LUM" 2692 | QINGDAO_LIUTING_INTERNATIONAL_AIRPORT = "TAO" 2693 | CHINGGIS_KHAAN_INTERNATIONAL_AIRPORT = "ULN" 2694 | CHANGLE_INTERNATIONAL_AIRPORT = "FOC" 2695 | HEFEI_XINQIAO_AIRPORT = "HFE" 2696 | HANGZHOU_XIAOSHAN_INTERNATIONAL_AIRPORT = "HGH" 2697 | URUMQI_DIWOPU_INTERNATIONAL_AIRPORT = "URC" 2698 | QIEMO_AIRPORT = "IQM" 2699 | KANGDING_AIRPORT = "KGT" 2700 | KARAMAY_AIRPORT = "KRY" 2701 | YUSHU_BATANG_AIRPORT = "YUS" 2702 | YANJI_CHAOYANGCHUAN_AIRPORT = "YNJ" 2703 | KANSAS_CITY_INTERNATIONAL_AIRPORT = "MCI" 2704 | ORLANDO_INTERNATIONAL_AIRPORT = "MCO" 2705 | JIANSANJIANG_SHIDI_AIRPORT = "JSJ" 2706 | YICHUN_SHI_AIRPORT = "LDS" 2707 | LIAONING_PROVINCE_AIRPORT = "JNZ" 2708 | JIXI_AIRPORT = "JXA" 2709 | DALIAN_ZHOUSHUIZI_INTERNATIONAL_AIRPORT = "DLC" 2710 | FUYUAN_DONGJI_AIRPORT = "FYJ" 2711 | HEIHE_AIRPORT = "HEK" 2712 | HARBIN_TAIPING_INTERNATIONAL_AIRPORT = "HRB" 2713 | JIAMUSI_AIRPORT = "JMU" 2714 | MC_COOK_AIRPORT = "MCK" 2715 | MASON_CITY_AIRPORT = "MCW" 2716 | AUGUSTO_C_SANDINO_INTERNATIONAL_AIRPORT = "MGA" 2717 | MOUNT_GAMBIER_AIRPORT = "MGB" 2718 | MICHIGAN_CITY_AIRPORT = "MGC" 2719 | MARGATE_AIRPORT = "MGH" 2720 | MORGANTOWN_AIRPORT = "MGW" 2721 | DAYTON_WRIGHT_BROTHERS_AIRPORT = "MGY" 2722 | MILDENHALL_AIRPORT = "MHZ" 2723 | MALEO_AIRPORT = "MOH" 2724 | MIANYANG_NANJIAO_AIRPORT = "MIG" 2725 | DR_GASTAO_VIDIGAL_AIRPORT = "MII" 2726 | MYTILENE_INTERNATIONAL_AIRPORT = "MJT" 2727 | TAMPA_PADANG_AIRPORT = "MJU" 2728 | MURCIA_SAN_JAVIER_AIRPORT = "MJV" 2729 | MIRNYJ_AIRPORT = "MJZ" 2730 | CHARLES_B_WHEELER_DOWNTOWN_AIRPORT = "MKC" 2731 | GENERAL_MITCHELL_INTERNATIONAL_AIRPORT = "MKE" 2732 | MUSKEGON_AIRPORT = "MKG" 2733 | MOLOKAI_AIRPORT = "MKK" 2734 | MALTA_INTERNATIONAL_AIRPORT = "MLA" 2735 | ORLANDO_MELBOURNE_INTERNATIONAL_AIRPORT = "MLB" 2736 | MALATYA_AIRPORT = "MLX" 2737 | MALMÖ_BULLTOFTA_AIRPORT = "MMA" 2738 | MEMANBETSU_AIRPORT = "MMB" 2739 | MATSUMOTO_AIRPORT = "MMJ" 2740 | WAI_OTI_AIRPORT = "MOF" 2741 | MANASSAS_REGIONAL_AIRPORT_HARRY_P_DAVIS_FIELD = "MNZ" 2742 | MODESTO_MUNICIPAL_AIRPORT = "MOD" 2743 | TEMAE_AIRPORT = "MOZ" 2744 | MIQUELON_AIRPORT = "MQC" 2745 | MAGNITOGORSK_AIRPORT = "MQF" 2746 | MILDURA_AIRPORT = "MQL" 2747 | MARDIN_AIRPORT = "MQM" 2748 | MO_I_RANA_AIRPORT = "MQN" 2749 | KRUGER_MPUMALANGA_INTERNATIONAL_AIRPORT = "MQP" 2750 | MARSEILLE_PROVENCE_AIRPORT = "MRS" 2751 | SIR_SEEWOOSAGUR_RAMGOOLAM_INTERNATIONAL_AIRPORT = "MRU" 2752 | MINERALNYE_VODY_AIRPORT = "MRV" 2753 | MONTEREY_REGIONAL_AIRPORT = "MRY" 2754 | MOREE_AIRPORT = "MRZ" 2755 | NORTHWEST_ALABAMA_REGIONAL_AIRPORT = "MSL" 2756 | DANE_COUNTY_REGIONAL_AIRPORT = "MSN" 2757 | MAHSHAHR_AIRPORT = "MRX" 2758 | MINATITLAN_AIRPORT = "MTT" 2759 | GEN_MARIANO_ESCOBEDO_AIRPORT = "MTY" 2760 | FRANZ_JOSEF_STRAUSS_AIRPORT = "MUC" 2761 | MORA_AIRPORT = "MXX" 2762 | MEI_XIAN_AIRPORT = "MXZ" 2763 | MARY_AIRPORT = "MYP" 2764 | MYITKYINA_AIRPORT = "MYT" 2765 | MAYOR_PNP_NANCY_FLORE_AIRPORT = "MZA" 2766 | NALCHIK_AIRPORT = "NAL" 2767 | NANCHONG_AIRPORT = "NAO" 2768 | QIQIHAR_AIRPORT = "NDG" 2769 | NINGBO_AIRPORT = "NGB" 2770 | CHUBU_CENTRAIR_INTERNATIONAL_AIRPORT = "NGO" 2771 | NAMANGAN_AIRPORT = "NMA" 2772 | SIMON_MWANSA_KAPWEPWE_INTERNATIONAL_AIRPORT = "NLA" 2773 | NOUAKCHOTT_INTERNATIONAL_AIRPORT = "NKC" 2774 | NORDEN_NORDDEICH_AIRPORT = "NOD" 2775 | NARYAN_MAR_AIRPORT = "NNM" 2776 | NUNUKAN_AIRPORT = "NNX" 2777 | NOJABRXSK_AIRPORT = "NOJ" 2778 | NOVOKUZNETSK_AIRPORT = "NOZ" 2779 | HAWKES_BAY_AIRPORT = "NPE" 2780 | PRESIDENTE_PERON_INTERNATIONAL_AIRPORT = "NQN" 2781 | NORILSK_AIRPORT = "NSK" 2782 | NUREMBERG_AIRPORT = "NUE" 2783 | NEOM_AIRPORT = "NUM" 2784 | NOVY_URENGOY_AIRPORT = "NUX" 2785 | BENITO_SALAS_AIRPORT = "NVA" 2786 | NAVOI_AIRPORT = "NVI" 2787 | MARIA_REICHE_NEUMAN_AIRPORT = "NZC" 2788 | MANZHOULI_AIRPORT = "NZH" 2789 | ZHALANTUN_CHENGJISIHAN_AIRPORT = "NZL" 2790 | ORANGE_AIRPORT = "OAG" 2791 | ALBERT_J_ELLIS_AIRPORT = "OAJ" 2792 | METROPOLITAN_OAKLAND_INTERNATIONAL_AIRPORT = "OAK" 2793 | CACOAL_AIRPORT = "OAL" 2794 | GARRETT_COUNTY_AIRPORT = "ODM" 2795 | LONG_SERIDAN_AIRPORT = "ODN" 2796 | BODAYBO_AIRPORT = "ODO" 2797 | ODESSA_INTERNATIONAL_AIRPORT = "ODS" 2798 | OUDOMXAY_AIRPORT = "ODY" 2799 | ORNSKOLDSVIK_AIRPORT = "OER" 2800 | OKUSHIRI_AIRPORT = "OIR" 2801 | OLIVE_BRANCH_AIRPORT = "OLV" 2802 | OLKIOMBO_AIRPORT = "OLX" 2803 | OLOKMINSK_AIRPORT = "OLZ" 2804 | OREBRO_BOFORS_AIRPORT = "ORB" 2805 | OHARE_INTERNATIONAL_AIRPORT = "ORD" 2806 | NORFOLK_INTERNATIONAL_AIRPORT = "ORF" 2807 | WORCESTER_REGIONAL_AIRPORT = "ORH" 2808 | CORK_AIRPORT = "ORK" 2809 | PARIS_ORLY_AIRPORT = "ORY" 2810 | NAMSOS_AIRPORT = "OSY" 2811 | SOUTHWEST_OREGON_REGIONAL_AIRPORT = "OTH" 2812 | BUCHAREST_HENRI_COANDA_INTERNATIONAL_AIRPORT = "OTP" 2813 | CENTRAL_MAINE_AIRPORT_OF_NORRIDGEWOCK = "OWK" 2814 | OSVALDO_VIEIRA_AIRPORT = "OXB" 2815 | PLATTSBURGH_INTERNATIONAL_AIRPORT = "PBG" 2816 | EL_TAJIN_NATIONAL_AIRPORT = "PAZ" 2817 | HUEJOTSINGO_AIRPORT = "PBC" 2818 | PARO_AIRPORT = "PBH" 2819 | DEKALB_PEACHTREE_AIRPORT = "PDK" 2820 | PUERTO_MALDONADO_AIRPORT = "PEM" 2821 | PEDASÍ_AIRPORT = "PDM" 2822 | CAPITAN_DE_CORBETA_CARLOS_A_CURBELO_INTERNATIONAL_AIRPORT = "PDP" 2823 | PIEDRAS_NEGRAS_INTERNATIONAL_AIRPORT = "PDS" 2824 | PLOVDIV_AIRPORT = "PDV" 2825 | PERM_INTERNATIONAL_AIRPORT = "PEE" 2826 | SANT_EGIDIO_AIRPORT = "PEG" 2827 | CHARLOTTE_COUNTY_AIRPORT = "PGD" 2828 | LLABANERE_AIRPORT = "PGF" 2829 | GLASGOW_PRESTWICK_AIRPORT = "PIK" 2830 | PITTSBURGH_INTERNATIONAL_AIRPORT = "PIT" 2831 | CAPITAN_FAP_RENAN_ELIAS_OLIVERA_AIRPORT = "PIO" 2832 | POITIERS_BIARD_AIRPORT = "PIS" 2833 | CAP_FAP_GUILLERMO_CONCHA_IBERICO_INTERNATIONAL_AIRPORT = "PIU" 2834 | PAJALA_AIRPORT = "PJA" 2835 | ISKANDAR_AIRPORT = "PKN" 2836 | POKHARA_AIRPORT = "PKR" 2837 | PSKOV_AIRPORT = "PKV" 2838 | BEIJING_DAXING_INTERNATIONAL_AIRPORT = "PKX" 2839 | TJILIK_RIWUT_AIRPORT = "PKY" 2840 | PALANGA_INTERNATIONAL_AIRPORT = "PLQ" 2841 | SEMIPALATINSK_AIRPORT = "PLX" 2842 | PARMA_AIRPORT = "PMF" 2843 | PALM_ISLAND_AIRPORT = "PMK" 2844 | FALCONE_BORSELLINO_AIRPORT = "PMO" 2845 | PALMERSTON_NORTH_AIRPORT = "PMR" 2846 | SANTIAGO_MARINO_INTERNATIONAL_AIRPORT = "PMV" 2847 | PAMPLONA_AIRPORT = "PNA" 2848 | PEMBA_AIRPORT = "POL" 2849 | PAGO_PAGO_INTERNATIONAL_AIRPORT = "PPG" 2850 | LA_UNION_AIRPORT = "POP" 2851 | A_DE_BARROS_AIRPORT = "PPB" 2852 | GENERAL_JUSTO_JOSE_DE_URQUIZA_AIRPORT = "PRA" 2853 | PRESCOTT_AIRPORT = "PRC" 2854 | VACLAV_HAVEL_AIRPORT_PRAGUE = "PRG" 2855 | PRASLIN_ISLAND_AIRPORT = "PRI" 2856 | PORTIMAO_AIRPORT = "PRM" 2857 | PRISTINA_INTERNATIONAL_AIRPORT = "PRN" 2858 | PHRAE_AIRPORT = "PRH" 2859 | DINWIDDIE_COUNTY_AIRPORT = "PTB" 2860 | POLOKWANE_AIRPORT = "PTG" 2861 | MOSCOW_REGIONAL_AIRPORT = "PUW" 2862 | PROVINCETOWN_AIRPORT = "PVC" 2863 | GUSTAVO_DIAZ_ORDAZ_INTERNATIONAL_AIRPORT = "PVR" 2864 | POLYARNYJ_AIRPORT = "PYJ" 2865 | SAM_MBAKWE_INTERNATIONAL_AIRPORT = "QOW" 2866 | LUBLIN_RADAWIEC_AIRPORT = "QLU" 2867 | LEIRIA_GANDARA_AIRPORT = "QLR" 2868 | QUERETARO_INTERCONTINENTAL_AIRPORT = "QRO" 2869 | SETIF_AIRPORT = "QSF" 2870 | RAFHA_AIRPORT = "RAH" 2871 | DR_LEITE_LOPES_STATE_AIRPORT = "RAO" 2872 | PRES_MEDICI_AIRPORT = "RBR" 2873 | TITO_MENNITI_AIRPORT = "REG" 2874 | TRELEW_AIRPORT = "REL" 2875 | ORENBURG_AIRPORT = "REN" 2876 | SIEM_REAP_INTERNATIONAL_AIRPORT = "REP" 2877 | RESISTENCIA_AIRPORT = "RES" 2878 | STOLPORT_AIRPORT = "RET" 2879 | REUS_AIRPORT = "REU" 2880 | GEN_LUCIO_BLANCO_INTERNATIONAL_AIRPORT = "REX" 2881 | RICHMOND_INTERNATIONAL_AIRPORT_BYRD_FIELD = "RIC" 2882 | RICHMOND_MUNICIPALCIPAL_AIRPORT = "RID" 2883 | SCARLETT_MARTÍNEZ_INTERNATIONAL_AIRPORT = "RIH" 2884 | RISHIRI_AIRPORT = "RIS" 2885 | RIVERTON_AIRPORT = "RIW" 2886 | RIGA_INTERNATIONAL_AIRPORT = "RIX" 2887 | MARSA_ALAM_INTERNATIONAL_AIRPORT = "RMF" 2888 | NEW_RICHMOND_MUNICIPAL_AIRPORT = "RNH" 2889 | YORON_AIRPORT = "RNJ" 2890 | ROANOKE_BLACKSBURG_REGIONAL_AIRPORT = "ROA" 2891 | RONDONOPOLIS_AIRPORT = "ROO" 2892 | MERRILL_MUNICIPAL_AIRPORT = "RRL" 2893 | FISHERTON_AIRPORT = "ROS" 2894 | ROTORUA_INTERNATIONAL_AIRPORT = "ROT" 2895 | SANTA_ROSA_AIRPORT = "RSA" 2896 | ROSEAU_MUNICIPAL_AIRPORT = "ROX" 2897 | SOUTHWEST_FLORIDA_INTERNATIONAL_AIRPORT = "RSW" 2898 | ROATAN_AIRPORT = "RTB" 2899 | ROTTERDAM_THE_HAGUE_AIRPORT = "RTM" 2900 | ROXAS_CITY_AIRPORT = "RXS" 2901 | RAHIM_YAR_KHAN_AIRPORT = "RYK" 2902 | MOSS_AIRPORT = "RYG" 2903 | ROYAL_AIRPORT = "RYL" 2904 | CLR_AIRPORT = "RZP" 2905 | ST_BARTHELEMY_AIRPORT = "SBH" 2906 | SAN_LUIS_COUNTY_REGIONAL_AIRPORT = "SBP" 2907 | SIBU_AIRPORT = "SBW" 2908 | WICOMICO_REGIONAL_AIRPORT = "SBY" 2909 | SIBIU_AIRPORT = "SBZ" 2910 | LUBANGO_AIRPORT = "SDD" 2911 | SANTIAGO_DEL_ESTERO_AIRPORT = "SDE" 2912 | SANANDAJ_AIRPORT = "SDG" 2913 | SENDAI_AIRPORT = "SDJ" 2914 | LOUISVILLE_INTERNATIONAL_AIRPORT = "SDF" 2915 | SANDANE_AIRPORT = "SDN" 2916 | SAND_POINT_MUNICIPAL_AIRPORT = "SDP" 2917 | KANGERLUSSUAQ_AIRPORT = "SFJ" 2918 | SANTA_FE_AIRPORT = "SFN" 2919 | SAN_FRANCISCO_INTERNATIONAL_AIRPORT = "SFO" 2920 | SKELLEFTEA_AIRPORT = "SFT" 2921 | SHENANDOAH_VALLEY_AIRPORT = "SHD" 2922 | SHENYANG_TAOXIAN_INTERNATIONAL_AIRPORT = "SHE" 2923 | SIMFEROPOL_INTERNATIONAL_AIRPORT = "SIP" 2924 | SHILLONG_AIRPORT = "SHL" 2925 | NORMAN_Y_MINETA_SAN_JOSE_INTERNATIONAL_AIRPORT = "SJC" 2926 | SARAJEVO_INTERNATIONAL_AIRPORT = "SJJ" 2927 | JUAN_SANTAMARIA_INTERNATIONAL_AIRPORT = "SJO" 2928 | LOS_CABOS_INTERNATIONAL_AIRPORT = "SJD" 2929 | SAN_ANGELO_REGIONAL_AIRPORT = "SJT" 2930 | SUKKUR_AIRPORT = "SKZ" 2931 | STORM_LAKE_MUNICIPAL_AIRPORT = "SLB" 2932 | SALT_LAKE_CITY_INTERNATIONAL_AIRPORT = "SLC" 2933 | ADIRONDACK_AIRPORT = "SLK" 2934 | MATACAN_AIRPORT = "SLM" 2935 | SALINA_REGIONAL_AIRPORT = "SLN" 2936 | MARTIN_MIGUEL_DE_GUEMES_INTERNATIONAL_AIRPORT = "SLA" 2937 | SANTA_MARIA_PUBLIC_AIRPORT = "SMX" 2938 | JOHN_WAYNE_AIRPORT = "SNA" 2939 | GENERAL_ULPIANO_PAEZ_AIRPORT = "SNC" 2940 | SHANNON_AIRPORT = "SNN" 2941 | SOUTHAMPTON_AIRPORT = "SOU" 2942 | SHOW_LOW_AIRPORT = "SOW" 2943 | LA_PALMA_AIRPORT = "SPC" 2944 | JUANA_AZURDUY_DE_PADILLA_INTERNATIONAL_AIRPORT = "SRE" 2945 | SAMSUN_SAMAIR_AIRPORT = "SSX" 2946 | STAUNING_VESTJYLLANDS_AIRPORT = "STA" 2947 | ST_GEORGE_ISLAND_AIRPORT = "STG" 2948 | CIBAO_INTERNATIONAL_AIRPORT = "STI" 2949 | SAKKYRYR_AIRPORT = "SUK" 2950 | SUMTER_MUNICIPAL_AIRPORT = "SUM" 2951 | SPIRIT_OF_ST_LOUIS_AIRPORT = "SUS" 2952 | STEWART_INTERNATIONAL_AIRPORT = "SWF" 2953 | ARGYLE_INTERNATIONAL_AIRPORT = "SVD" 2954 | SWANSEA_AIRPORT = "SWS" 2955 | SULTAN_MUHAMMAD_KAHARUDDIN_III_AIRPORT = "SWQ" 2956 | SEVERO_EVENSK_AIRPORT = "SWV" 2957 | STREZHEVOY_AIRPORT = "SWT" 2958 | PRINCESS_JULIANA_INTERNATIONAL_AIRPORT = "SXM" 2959 | STORNOWAY_AIRPORT = "SYY" 2960 | SHIRAZ_INTERNATIONAL_AIRPORT = "SYZ" 2961 | SOYO_AIRPORT = "SZA" 2962 | SULTAN_ABDUL_AZIZ_SHAH_AIRPORT = "SZB" 2963 | SEMERA_AIRPORT = "SZE" 2964 | SHONAI_AIRPORT = "SYO" 2965 | PARCHIM_AIRPORT = "SZW" 2966 | OLSZTYN_MAZURY_AIRPORT = "SZY" 2967 | HANCOCK_INTERNATIONAL_AIRPORT = "SYR" 2968 | D_Z_ROMUALDEZ_AIRPORT = "TAC" 2969 | TAPACHULA_INTERNATIONAL_AIRPORT = "TAP" 2970 | POPRAD_TATRY_AIRPORT = "TAT" 2971 | TAU_ISLAND_AIRPORT = "TAV" 2972 | TUY_HOA_AIRPORT = "TBB" 2973 | TABORA_AIRPORT = "TBO" 2974 | CAPITAN_FAP_PEDRO_CANGA_RODRIGUEZ_AIRPORT = "TBP" 2975 | TABATINGA_INTERNATIONAL_AIRPORT = "TBT" 2976 | TARTU_AIRPORT = "TAY" 2977 | TAMBOV_DONSKOYE_AIRPORT = "TBW" 2978 | TAMBELAN_AIRPORT = "TBX" 2979 | TREASURE_CAY_AIRPORT = "TCB" 2980 | TINBOLI_AIRPORT = "TCK" 2981 | TACNA_AIRPORT = "TCQ" 2982 | TUTICORIN_AIRPORT = "TCR" 2983 | TENGCHONG_TUOFENG_AIRPORT = "TCZ" 2984 | TENIENTE_JORGE_HENRICH_ARAUZ_AIRPORT = "TDD" 2985 | CHEIKH_LARBI_TEBESSI_AIRPORT = "TEE" 2986 | MATUNDO_AIRPORT = "TET" 2987 | TERUEL_AIRPORT = "TEV" 2988 | TEZPUR_AIRPORT = "TEZ" 2989 | TENERIFE_NORTH_AIRPORT = "TFN" 2990 | TENERIFE_SOUTH_AIRPORT = "TFS" 2991 | MUHAMMAD_TAUFIQ_KIEMAS_AIRPORT = "TFY" 2992 | TANJUNG_MANIS_AIRPORT = "TGC" 2993 | PODGORICA_AIRPORT = "TGD" 2994 | SULTAN_MAHMUD_AIRPORT = "TGG" 2995 | TEFE_AIRPORT = "TFF" 2996 | CHENGDU_TIANFU_INTERNATIONAL_AIRPORT = "TFU" 2997 | TOUGGOURT_AIRPORT = "TGR" 2998 | ANGEL_ALBINO_CORZO_INTERNATIONAL_AIRPORT = "TGZ" 2999 | BAI_THUONG_AIRPORT = "THD" 3000 | TROLLHATTAN_AIRPORT = "THN" 3001 | YORK_AIRPORT = "THV" 3002 | TURUKHANSK_AIRPORT = "THX" 3003 | TIRANA_INTERNATIONAL_AIRPORT = "TIA" 3004 | TAIF_AIRPORT = "TIF" 3005 | TIJUANA_AIRPORT = "TIJ" 3006 | TINDOUF_AIRPORT = "TIN" 3007 | CAPITAN_ORIEL_LEA_PLAZA_AIRPORT = "TJA" 3008 | TRÊS_LAGOAS_AIRPORT = "TJL" 3009 | BULUTUMBANG_AIRPORT = "TJQ" 3010 | KULYAB_AIRPORT = "TJU" 3011 | TALLINN_AIRPORT = "TLL" 3012 | TOULOUSE_BLAGNAC_AIRPORT = "TLS" 3013 | TOLUCA_INTERNATIONAL_AIRPORT = "TLC" 3014 | RADIN_INTEN_II_AIRPORT = "TKG" 3015 | CHUUK_INTERNATIONAL_AIRPORT = "TKK" 3016 | TAMBOLAKA_AIRPORT = "TMC" 3017 | KIGOMA_AIRPORT = "TKQ" 3018 | GABRIEL_VARGAS_SANTOS_AIRPORT = "TME" 3019 | TOKUSHIMA_AWAODORI_AIRPORT = "TKS" 3020 | TURKU_AIRPORT = "TKU" 3021 | TALLAHASSEE_INTERNATIONAL_AIRPORT = "TLH" 3022 | ZENATA_AIRPORT = "TLM" 3023 | TURPAN_JIAOHE_AIRPORT = "TLQ" 3024 | BEN_GURION_INTERNATIONAL_AIRPORT = "TLV" 3025 | PLASTUN_AIRPORT = "TLY" 3026 | THIMARAFUSHI_AIRPORT = "TMF" 3027 | TERMEZ_AIRPORT = "TMJ" 3028 | TAMALE_AIRPORT = "TML" 3029 | TAMPERE_PIRKKALA_AIRPORT = "TMP" 3030 | AGUENAR_HADJ_BEY_AKHAMOK_AIRPORT = "TMR" 3031 | SAO_TOME_ISLAND_AIRPORT = "TMS" 3032 | TAMBOR_AIRPORT = "TMU" 3033 | TIMIMOUN_AIRPORT = "TMX" 3034 | TORRANCE_AIRPORT = "TOA" 3035 | TOZEUR_AIRPORT = "TOE" 3036 | TONGHUA_SANYUANPU_AIRPORT = "TNH" 3037 | KIDJANG_AIRPORT = "TNJ" 3038 | ANTANANARIVO_AIRPORT = "TNR" 3039 | NEWTON_MUNICIPAL_AIRPORT = "TNU" 3040 | TOMSK_AIRPORT = "TOF" 3041 | TROY_MUNICIPAL_AIRPORT = "TOI" 3042 | TORRINGTON_MUNICIPAL_AIRPORT = "TOR" 3043 | CAD_FAP_GUILLERMO_DEL_CASTILLO_PAREDES_AIRPORT = "TPP" 3044 | TEPIC_AIRPORT = "TPQ" 3045 | TOLEDO_EXPRESS_AIRPORT = "TOL" 3046 | TROMSO_LANGNES_AIRPORT = "TOS" 3047 | TOYAMA_AIRPORT = "TOY" 3048 | TAMPA_INTERNATIONAL_AIRPORT = "TPA" 3049 | TAIWAN_TAOYUAN_INTERNATIONAL_AIRPORT = "TPE" 3050 | TRAPANI_BIRGI_AIRPORT = "TPS" 3051 | TIREE_AIRPORT = "TRE" 3052 | TORP_SANDEFJORD_AIRPORT = "TRF" 3053 | TAURANGA_CITY_AIRPORT = "TRG" 3054 | JUWATA_INTERNATIONAL_AIRPORT = "TRK" 3055 | TRUJILLO_AIRPORT = "TRU" 3056 | BONRIKI_AIRPORT = "TRW" 3057 | TAN_TAN_AIRPORT = "TTA" 3058 | TOTTORI_AIRPORT = "TTJ" 3059 | VAL_DE_LOIRE_AIRPORT = "TUF" 3060 | TABUK_REGIONAL_AIRPORT = "TUU" 3061 | MATEI_AIRPORT = "TVU" 3062 | TRENTON_MERCER_AIRPORT = "TTN" 3063 | BRITTON_MUNICIPAL_AIRPORT = "TTO" 3064 | BABULLAH_AIRPORT = "TTE" 3065 | TURBAT_AIRPORT = "TUK" 3066 | DAWE_AIRPORT = "TVY" 3067 | TUMXUK_TANGWANGCHENG_AIRPORT = "TWC" 3068 | MAGIC_VALLEY_REGIONAL_AIRPORT = "TWF" 3069 | TAWAU_AIRPORT = "TWU" 3070 | TEIXEIRA_DE_FREITAS_AIRPORT = "TXF" 3071 | TEXARKANA_MUNICIPAL_AIRPORT = "TXK" 3072 | REMBELE_AIRPORT = "TXE" 3073 | TEGEL_AIRPORT = "TXL" 3074 | CAPTAIN_FAP_VICTOR_MONTES_ARIAS_AIRPORT = "TYL" 3075 | HUANGSHAN_TUNXI_INTERNATIONAL_AIRPORT = "TXN" 3076 | TUZLA_INTERNATIONAL_AIRPORT = "TZL" 3077 | NARSARSUAQ_AIRPORT = "UAK" 3078 | TYNDA_AIRPORT = "TYD" 3079 | SAN_JUAN_AIRPORT = "UAQ" 3080 | UBERABA_AIRPORT = "UBA" 3081 | YAMAGUCHI_UBE_AIRPORT = "UBJ" 3082 | NEW_ULAANBAATAR_INTERNATIONAL_AIRPORT = "UBN" 3083 | UBON_RATCHATHANI_INTERNATIONAL_AIRPORT = "UBP" 3084 | UKHTA_AIRPORT = "UCT" 3085 | UBERLANDIA_TEN_CEL_AV_CESAR_BOMBONATO_AIRPORT = "UDI" 3086 | QUELIMANE_AIRPORT = "UEL" 3087 | KUME_JIMA_AIRPORT = "UEO" 3088 | PHU_CAT_AIRPORT = "UIH" 3089 | ULANQAB_JINING_AIRPORT = "UCB" 3090 | QUINCY_MUNICIPAL_AIRPORT = "UIN" 3091 | MARISCAL_SUCRE_INTERNATIONAL_AIRPORT = "UIO" 3092 | PLUGUFFAN_AIRPORT = "UIP" 3093 | UKUNDA_AIRPORT = "UKA" 3094 | PRINCE_ABDUL_MAJEED_BIN_ABDULAZIZ_AIRPORT = "ULH" 3095 | ULYANOVSK_VOSTOCHNY_AIRPORT = "ULY" 3096 | KOBE_AIRPORT = "UKB" 3097 | WAUKON_MUNICIPAL_AIRPORT = "UKN" 3098 | MENA_INTERMOUNTAIN_MUNICIPAL_AIRPORT = "UMZ" 3099 | RANONG_AIRPORT = "UNN" 3100 | LICENCIADO_Y_GENERAL_IGNACIO_LOPEZ_RAYON_AIRPORT = "UPN" 3101 | RUBEN_BERTA_AIRPORT = "URG" 3102 | URALSK_AIRPORT = "URA" 3103 | SULTAN_HASANUDDIN_INTERNATIONAL_AIRPORT = "UPG" 3104 | KURESSAARE_AIRPORT = "URE" 3105 | KURSK_VOSTOCHNY_AIRPORT = "URS" 3106 | YUZHNO_SAKHALINSK_AIRPORT = "UUS" 3107 | UNION_COUNTY_AIRPORT = "USC" 3108 | CONCORD_PADGETT_REGIONAL_AIRPORT = "USA" 3109 | USINSK_AIRPORT = "USK" 3110 | UNIÃO_DA_VITÓRIA_AIRPORT = "UVI" 3111 | KOH_SAMUI_AIRPORT = "USM" 3112 | YULIN_YUYANG_AIRPORT = "UYN" 3113 | ST_AUGUSTINE_AIRPORT = "UST" 3114 | ULSAN_AIRPORT = "USN" 3115 | UST_NERA_AIRPORT = "USR" 3116 | TUNICA_MUNICIPALCIPAL_AIRPORT = "UTM" 3117 | UTAPAO_AIRPORT = "UTP" 3118 | UMTATA_AIRPORT = "UTT" 3119 | UDON_THANI_INTERNATIONAL_AIRPORT = "UTH" 3120 | UPINGTON_AIRPORT = "UTN" 3121 | BUGULMA_AIRPORT = "UUA" 3122 | ULAN_UDE_AIRPORT = "UUD" 3123 | CHU_LAI_INTERNATIONAL_AIRPORT = "VCL" 3124 | URZHAR_AIRPORT = "UZR" 3125 | MAJOR_BRIGADEIRO_TROMPOWSKY_AIRPORT = "VAG" 3126 | VAASA_AIRPORT = "VAA" 3127 | VARDOE_AIRPORT = "VAW" 3128 | CAN_THO_AIRPORT = "VCA" 3129 | VALCHETA_AIRPORT = "VCF" 3130 | VIDALIA_MUNICIPAL_AIRPORT = "VDI" 3131 | GOBERNADOR_EDGARDO_CASTELLO_AIRPORT = "VDM" 3132 | VALDEZ_MUNICIPAL_AIRPORT = "VDZ" 3133 | VERNAL_REGIONAL_AIRPORT = "VEL" 3134 | VERACRUZ_INTERNATIONAL_AIRPORT = "VER" 3135 | TIOGA_MUNICIPAL_AIRPORT = "VEX" 3136 | VICTORIA_FALLS_AIRPORT = "VFA" 3137 | RACH_GIA_AIRPORT = "VKG" 3138 | EURICO_DE_AGUIAR_SALLES_AIRPORT = "VIX" 3139 | CHIMOIO_AIRPORT = "VPY" 3140 | ANTONIO_RIVERA_RODRIGUEZ_AIRPORT = "VQS" 3141 | JUAN_GUALBERTO_GOMEZ_AIRPORT = "VRA" 3142 | VILA_REAL_AIRPORT = "VRL" 3143 | VISEU_AIRPORT = "VSE" 3144 | WADI_AD_DAWASIR_AIRPORT = "WAE" 3145 | WANGANUI_AIRPORT = "WAG" 3146 | FREDERIC_CHOPIN_AIRPORT = "WAW" 3147 | SHIYAN_WUDANGSHAN_AIRPORT = "WDS" 3148 | WEASUA_AIRPORT = "WES" 3149 | WEIFANG_AIRPORT = "WEF" 3150 | WAJIR_AIRPORT = "WJR" 3151 | HOKKAIDO_AIRPORT = "WKJ" 3152 | WONJU_AIRPORT = "WJU" 3153 | WAIKOLOA_AIRPORT = "WKL" 3154 | MILES_AIRPORT = "WLE" 3155 | NAGA_AIRPORT = "WNP" 3156 | WENZHOU_LONGWAN_INTERNATIONAL_AIRPORT = "WNZ" 3157 | WHANGAREI_AIRPORT = "WRE" 3158 | WINDARLING_AIRPORT = "WRN" 3159 | WESTPORT_AIRPORT = "WSZ" 3160 | ROOIKOP_AIRPORT = "WVB" 3161 | TOOWOOMBA_WELLCAMP_AIRPORT = "WTB" 3162 | WUYISHAN_AIRPORT = "WUS" 3163 | CHAPECO_AIRPORT = "XAP" 3164 | CORON_AIRPORT = "XCN" 3165 | CHALONS_VATRY_AIRPORT = "XCR" 3166 | YELLOWSTONE_AIRPORT = "WYS" 3167 | XINYANG_MINGGANG_AIRPORT = "XAI" 3168 | LAKE_GENEVA_AIRE_ESTATES_AIRPORT = "XES" 3169 | HAMBURG_FINKENWERDER_AIRPORT = "XFW" 3170 | XIANGYANG_AIRPORT = "XFN" 3171 | XICHANG_AIRPORT = "XIC" 3172 | MANGLA_AIRPORT = "XJM" 3173 | XIENG_KHOUANG_AIRPORT = "XKH" 3174 | NASIRIYAH_AIRPORT = "XNH" 3175 | QUEPOS_AIRPORT = "XQP" 3176 | XINBARAG_YOUQI_BAOGEDE_AIRPORT = "XRQ" 3177 | XUZHOU_GUANYIN_AIRPORT = "XUZ" 3178 | WILLISTON_BASIN_INTERNATIONAL_AIRPORT = "XWA" 3179 | YENISEHIR_AIRPORT = "YEI" 3180 | FORT_FRANCES_MUNICIPAL_AIRPORT = "YAG" 3181 | YAOUNDE_AIRPORT = "YAO" 3182 | YAP_INTERNATIONAL_AIRPORT = "YAP" 3183 | YIBIN_CAIBA_AIRPORT = "YBP" 3184 | BRANDON_MUNICIPAL_AIRPORT = "YBR" 3185 | BAIE_COMEAU_AIRPORT = "YBC" 3186 | CASTLEGAR_AIRPORT = "YCG" 3187 | YUNCHENG_AIRPORT = "YCU" 3188 | CHILLIWACK_MUNICIPALCIPAL_AIRPORT = "YCW" 3189 | INDUSTRIAL_AIRPORT = "YDC" 3190 | EDMONTON_INTERNATIONAL_AIRPORT = "YEG" 3191 | YINCHUAN_HELANSHAN_AIRPORT = "YEH" 3192 | FREDERICTON_INTERNATIONAL_AIRPORT = "YFC" 3193 | MIHO_AIRPORT = "YGJ" 3194 | MICHEL_POULIOT_GASPE_AIRPORT = "YGP" 3195 | HALIFAX_STANFIELD_INTERNATIONAL_AIRPORT = "YHZ" 3196 | YOGYAKARTA_INTERNATIONAL_AIRPORT = "YIA" 3197 | YICHUN_MINGYUESHAN_AIRPORT = "YIC" 3198 | YICHANG_SANXIA_AIRPORT = "YIH" 3199 | YINING_AIRPORT = "YIN" 3200 | WILLOW_RUN_AIRPORT = "YIP" 3201 | YIWU_AIRPORT = "YIW" 3202 | HAMILTON_AIRPORT = "YHM" 3203 | JASPER_AIRPORT = "YJA" 3204 | ARXAN_YIERSHI_AIRPORT = "YIE" 3205 | KAMLOOPS_AIRPORT = "YKA" 3206 | REGION_OF_WATERLOO_INTERNATIONAL_AIRPORT = "YKF" 3207 | YINGKOU_LANQI_AIRPORT = "YKH" 3208 | HAKKARI_YÜKSEKOVA_AIRPORT = "YKO" 3209 | YAKUTSK_AIRPORT = "YKS" 3210 | YEVLAKH_AIRPORT = "YLV" 3211 | KELOWNA_INTERNATIONAL_AIRPORT = "YLW" 3212 | FORT_MCMURRAY_INTERNATIONAL_AIRPORT = "YMM" 3213 | MOOSE_JAW_AIR_VICE_MARSHAL_C_M_MCEWEN_AIRPORT = "YMJ" 3214 | YANBU_AIRPORT = "YNB" 3215 | CHIBOUGAMAU_AIRPORT = "YMT" 3216 | YANCHENG_NANYANG_INTERNATIONAL_AIRPORT = "YNZ" 3217 | MIRABEL_INTERNATIONAL_AIRPORT = "YMX" 3218 | NEMISCAU_AIRPORT = "YNS" 3219 | YANTAI_LAISHAN_INTERNATIONAL_AIRPORT = "YNT" 3220 | YANGYANG_AIRPORT = "YNY" 3221 | YONGPHULLA_AIRPORT = "YON" 3222 | WAWA_AIRPORT = "YXZ" 3223 | QUEBEC_CITY_JEAN_LESAGE_INTERNATIONAL_AIRPORT = "YQB" 3224 | RED_DEER_REGIONAL_AIRPORT = "YQF" 3225 | KENORA_AIRPORT = "YQK" 3226 | LETHBRIDGE_AIRPORT = "YQL" 3227 | WINDSOR_INTERNATIONAL_AIRPORT = "YQG" 3228 | GREATER_MONCTON_INTERNATIONAL_AIRPORT = "YQM" 3229 | SYDNEY_AIRPORT = "YQY" 3230 | COMOX_AIRPORT = "YQQ" 3231 | REGINA_INTERNATIONAL_AIRPORT = "YQR" 3232 | GRANDE_PRAIRIE_AIRPORT = "YQU" 3233 | GANDER_INTERNATIONAL_AIRPORT = "YQX" 3234 | QUESNEL_AIRPORT = "YQZ" 3235 | FORT_SMITH_AIRPORT = "YSM" 3236 | SUDBURY_AIRPORT = "YSB" 3237 | SAINT_JOHN_AIRPORT = "YSJ" 3238 | TIMMINS_VICTOR_M_POWER_AIRPORT = "YTS" 3239 | YANGZHOU_TAIZHOU_AIRPORT = "YTY" 3240 | MONTREAL_PIERRE_ELLIOTT_TRUDEAU_INTERNATIONAL_AIRPORT = "YUL" 3241 | YUMA_INTERNATIONAL_AIRPORT = "YUM" 3242 | ROUYN_NORANDA_AIRPORT = "YUY" 3243 | VERNON_REGIONAL_AIRPORT = "YVE" 3244 | VAL_DOR_AIRPORT = "YVO" 3245 | VANCOUVER_INTERNATIONAL_AIRPORT = "YVR" 3246 | TORONTO_CITY_CENTRE_AIRPORT = "YTZ" 3247 | WIARTON_KEPPEL_AIRPORT = "YVV" 3248 | WINNIPEG_JAMES_ARMSTRONG_RICHARDSON_INTERNATIONAL_AIRPORT = "YWG" 3249 | CANADIAN_ROCKIES_INTERNATIONAL_AIRPORT = "YXC" 3250 | SASKATOON_INTERNATIONAL_AIRPORT = "YXE" 3251 | MEDICINE_HAT_REGIONAL_AIRPORT = "YXH" 3252 | SIOUX_LOOKOUT_AIRPORT = "YXL" 3253 | EDMONTON_CITY_CENTRE_BLATCHFORD_FIELD_AIRPORT = "YXD" 3254 | PANGNIRTUNG_AIRPORT = "YXP" 3255 | PRINCE_GEORGE_AIRPORT = "YXS" 3256 | LONDON_INTERNATIONAL_AIRPORT = "YXU" 3257 | ABBOTSFORD_AIRPORT = "YXX" 3258 | VICTORIA_INNER_HARBOUR_AIRPORT = "YWH" 3259 | JACK_GARLAND_AIRPORT = "YYB" 3260 | CALGARY_INTERNATIONAL_AIRPORT = "YYC" 3261 | GOOSE_BAY_AIRPORT = "YYR" 3262 | SMITHERS_AIRPORT = "YYD" 3263 | PEARSON_INTERNATIONAL_AIRPORT = "YYZ" 3264 | TRAIL_REGIONAL_AIRPORT = "YZZ" 3265 | ZAHEDAN_AIRPORT = "ZAH" 3266 | PICHOY_AIRPORT = "ZAL" 3267 | ST_JOHNS_INTERNATIONAL_AIRPORT = "YYT" 3268 | BATHURST_AIRPORT = "ZBF" 3269 | MONT_JOLI_AIRPORT = "YYY" 3270 | CHAH_BAHAR_AIRPORT = "ZBR" 3271 | YELLOWKNIFE_AIRPORT = "YZF" 3272 | SARNIA_AIRPORT = "YZR" 3273 | CORAL_HARBOUR_AIRPORT = "YZS" 3274 | SEPT_ILES_AIRPORT = "YZV" 3275 | ZHAOTONG_AIRPORT = "ZAT" 3276 | ZARAGOZA_AIRPORT = "ZAZ" 3277 | LA_CALERA_AIRPORT = "ZCL" 3278 | TEMUCO_AIRPORT = "ZCO" 3279 | IXTAPA_ZIHUATANEJO_INTERNACIONAL_AIRPORT = "ZIH" 3280 | ZHIGANSK_AIRPORT = "ZIX" 3281 | ZYRYANKA_AIRPORT = "ZKP" 3282 | ZHANJIANG_AIRPORT = "ZHA" 3283 | ZHUKOVSKY_INTERNATIONAL_AIRPORT = "ZIA" 3284 | MANZANILLO_AIRPORT = "ZLO" 3285 | SOUTH_CARIBOO_REGIONAL_AIRPORT = "ZMH" 3286 | ZALINGEI_AIRPORT = "ZLX" 3287 | NEWMAN_AIRPORT = "ZNE" 3288 | ZANZIBAR_INTERNATIONAL_AIRPORT = "ZNZ" 3289 | CANAL_BAJO_AIRPORT = "ZOS" 3290 | MASSET_AIRPORT = "ZMT" 3291 | ROUND_LAKE_AIRPORT = "ZRJ" 3292 | ZAKINTHOS_AIRPORT = "ZTH" 3293 | ZHITOMIR_AIRPORT = "ZTR" 3294 | ZURICH_AIRPORT = "ZRH" 3295 | SAN_SALVADOR_AIRPORT = "ZSA" 3296 | SHAMATTAWA_AIRPORT = "ZTM" 3297 | ZHUHAI_JINWAN_AIRPORT = "ZUH" 3298 | ZUNYI_XINZHOU_AIRPORT = "ZYI" 3299 | TASHKURGAN_AIRPORT = "HQL" 3300 | ALAER_TALIMU_AIRPORT = "ACF" 3301 | BUSSELLTON_REGIONAL_AIRPORT = "BQB" 3302 | ZANGILAN_INTERNATIONAL_AIRPORT = "ZZE" 3303 | YALA_BETONG_INTERNATIONAL_AIRPORT = "BTZ" 3304 | SHIGATSE_TINGRI_AIRPORT = "DDR" 3305 | SÃO_RAIMUNDO_NONATO_AIRPORT = "NSR" 3306 | SALINÓPOLIS_AIRPORT = "OPP" 3307 | RIZE_ARTVIN_AIRPORT = "RZV" 3308 | MUYNAK_AIRPORT = "MOK" 3309 | LANGZHONG_AIRPORT = "LZG" 3310 | DEOGHAR_INTERNATIONAL_AIRPORT = "DGH" 3311 | GARANHUNS_AIRPORT = "QGP" 3312 | LAVRAS_AIRPORT = "VRZ" 3313 | DR_FRANCISCO_TOMÉ_DA_FROTA_AIRPORT = "QIG" 3314 | MOPA_AIRPORT = "GOX" 3315 | OTOG_FRONT_BANNER_OLJOQ_AIRPORT = "OTQ" 3316 | --------------------------------------------------------------------------------