From cbce8b9575696c6a6eacd70d2c7370af3ba44c02 Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Sat, 02 Feb 2019 22:39:47 +0000
Subject: [PATCH] Support for buses on departures page

---
 common.js                |    5 
 stops/index.php          |   86 ++
 stops/populate_db.php    |   18 
 map.html                 |    4 
 stops/stops.php          | 1848 ++++++++++++++++++++++++++++++++++++++++++++++-----
 lang_pl.js               |    2 
 stops/common.php         |    2 
 index.js                 |   66 +
 map.js                   |    4 
 stops/download_stops.php |   30 
 lang_en.js               |    2 
 index.html               |    6 
 stops.php                |    2 
 stops/stops.db           |    0 
 14 files changed, 1,822 insertions(+), 253 deletions(-)

diff --git a/common.js b/common.js
index 11b7528..fe88f82 100644
--- a/common.js
+++ b/common.js
@@ -1,3 +1,8 @@
+//var ttss_trams_base = 'http://www.ttss.krakow.pl/internetservice';
+var ttss_trams_base = 'proxy_tram.php';
+//var ttss_buses_base = 'http://91.223.13.70/internetservice';
+var ttss_buses_base = 'proxy_bus.php';
+
 // Special directions
 var special_directions = {
 	'Zajezdnia Nowa Huta' : 'ZH',
diff --git a/index.html b/index.html
index 778e1f3..6334568 100644
--- a/index.html
+++ b/index.html
@@ -134,8 +134,8 @@
 			</div>
 		</div>
 		<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cqB8txI/8aZajjp4Bqd+V6D5IgvKT" crossorigin="anonymous"></script>
-		<script type="text/javascript" src="lang_pl.js" id="lang_script"></script>
-		<script type="text/javascript" src="common.js"></script>
-		<script type="text/javascript" src="index.js"></script>
+		<script type="text/javascript" src="lang_pl.js?v3" id="lang_script"></script>
+		<script type="text/javascript" src="common.js?v4"></script>
+		<script type="text/javascript" src="index.js?v2"></script>
 	</body>
 </html>
diff --git a/index.js b/index.js
index 8780766..ece01b3 100644
--- a/index.js
+++ b/index.js
@@ -1,5 +1,3 @@
-//var ttss_base = 'http://www.ttss.krakow.pl/internetservice';
-var ttss_base = '/proxy.php';
 var ttss_refresh = 20000; // 20 seconds
 
 var page_title = document.getElementsByTagName('title')[0];
@@ -85,16 +83,27 @@
 	if(times_xhr) times_xhr.abort();
 	
 	console.log('loadTimes(' + stopId + ')');
+	
+	loading_start();
+	
+	var url = ttss_trams_base;
+	var stop = stopId.substr(1);
+	var prefix = 't';
+	if(stopId.startsWith('b')) {
+		url = ttss_buses_base;
+		stop = stopId.substr(1);
+		prefix = 'b';
+	}
+	
 	stop_id = stopId;
 	
 	ignore_hashchange = true;
 	window.location.hash = '#!' + language + stopId;
 	refresh_button.removeAttribute('disabled');
 	
-	loading_start();
 	times_xhr = $.get(
-		ttss_base + '/services/passageInfo/stopPassages/stop'
-			+ '?stop=' + encodeURIComponent(stopId)
+		url + '/services/passageInfo/stopPassages/stop'
+			+ '?stop=' + encodeURIComponent(stop)
 			+ '&mode=departure'
 	).done(function(data) {
 		setText(times_stop_name, data.stopName);
@@ -111,7 +120,7 @@
 			var tr = document.createElement('tr');
 			addCellWithText(tr, data.old[i].patternText);
 			var dir_cell = addCellWithText(tr, data.old[i].direction);
-			var vehicle = parseVehicle(data.old[i].vehicleId);
+			var vehicle = parseVehicle(prefix + data.old[i].vehicleId);
 			dir_cell.appendChild(displayVehicle(vehicle));
 			addCellWithText(tr, (vehicle ? vehicle.num : '')).className = 'vehicleData';
 			var status = parseStatus(data.old[i]);
@@ -121,7 +130,7 @@
 			tr.className = 'active';
 			tr.addEventListener('click', function(tripId, vehicleInfo) {
 				return function(){ loadRoute(tripId, vehicleInfo); }
-			}(data.old[i].tripId, vehicle));
+			}(prefix + data.old[i].tripId, vehicle));
 			times_table.appendChild(tr);
 		}
 		
@@ -129,7 +138,7 @@
 			var tr = document.createElement('tr');
 			addCellWithText(tr, data.actual[i].patternText);
 			var dir_cell = addCellWithText(tr, data.actual[i].direction);
-			var vehicle = parseVehicle(data.actual[i].vehicleId);
+			var vehicle = parseVehicle(prefix + data.actual[i].vehicleId);
 			dir_cell.appendChild(displayVehicle(vehicle));
 			addCellWithText(tr, (vehicle ? vehicle.num : '')).className = 'vehicleData';
 			var status = parseStatus(data.actual[i]);
@@ -151,7 +160,7 @@
 			
 			tr.addEventListener('click', function(tripId, vehicleInfo) {
 				return function(){ loadRoute(tripId, vehicleInfo); }
-			}(data.actual[i].tripId, vehicle));
+			}(prefix + data.actual[i].tripId, vehicle));
 			times_table.appendChild(tr);
 		}
 		
@@ -179,13 +188,23 @@
 	if(vehicleInfo === undefined) vehicleInfo = route_vehicle_info;
 	
 	console.log('loadRoute(' + tripId + ')');
+	
+	var url = ttss_trams_base;
+	var trip = tripId.substr(1);
+	var prefix = 't';
+	if(tripId.startsWith('b')) {
+		url = ttss_buses_base;
+		trip = tripId.substr(1);
+		prefix = 'b';
+	}
+	
 	route_id = tripId;
 	route_vehicle_info = vehicleInfo;
 	
 	if(route_xhr) route_xhr.abort();
 	route_xhr = $.get(
-		ttss_base + '/services/tripInfo/tripPassages'
-			+ '?tripId=' + encodeURIComponent(tripId)
+		url + '/services/tripInfo/tripPassages'
+			+ '?tripId=' + encodeURIComponent(trip)
 			+ '&mode=departure'
 	).done(function(data) {
 		if(!data.routeName || !data.directionText || data.old.length + data.actual.length == 0) {
@@ -212,7 +231,7 @@
 			addCellWithText(tr, data.old[i].stop_seq_num + '. ' + data.old[i].stop.name);
 			
 			tr.className = 'active';
-			tr.addEventListener('click', function(stopId){ return function(){ loadTimes(stopId); } }(data.old[i].stop.shortName) );
+			tr.addEventListener('click', function(stopId){ return function(){ loadTimes(stopId); } }(prefix + data.old[i].stop.shortName) );
 			route_table.appendChild(tr);
 		}
 		
@@ -224,7 +243,7 @@
 			if(data.actual[i].status == 'STOPPING') {
 				tr.className = 'success';
 			}
-			tr.addEventListener('click', function(stopId){ return function(){ loadTimes(stopId); } }(data.actual[i].stop.shortName) );
+			tr.addEventListener('click', function(stopId){ return function(){ loadTimes(stopId); } }(prefix + data.actual[i].stop.shortName) );
 			route_table.appendChild(tr);
 		}
 	}).fail(fail_ajax);
@@ -326,13 +345,22 @@
 	}
 	
 	if(window.location.hash.match(/^#![0-9]+$/)) {
-		loadTimes(parseInt(window.location.hash.substr(2)));
+		loadTimes('t' + window.location.hash.substr(2));
+	} else if(window.location.hash.match(/^#![bt][0-9]+$/)) {
+		loadTimes(window.location.hash.substr(2));
 	} else if(window.location.hash.match(/^#![a-z]{2}[0-9]*$/)) {
-		var stop = parseInt(window.location.hash.substr(4));
+		var stop = 't' + window.location.hash.substr(4);
 		if(stop) stop_id = stop;
 		
 		if(!change_language(window.location.hash.substr(2, 2))) {
-			loadTimes(parseInt(window.location.hash.substr(2)));
+			loadTimes(stop);
+		}
+	} else if(window.location.hash.match(/^#![a-z]{2}[bt][0-9]*$/)) {
+		var stop = window.location.hash.substr(4);
+		if(stop) stop_id = stop;
+		
+		if(!change_language(window.location.hash.substr(2, 2))) {
+			loadTimes(stop);
 		}
 	}
 }
@@ -341,15 +369,13 @@
 	if(stop_name_autocomplete_xhr) stop_name_autocomplete_xhr.abort();
 	
 	stop_name_autocomplete_xhr = $.get(
-		'stops.php?query=' + encodeURIComponent(stop_name.value)
+		'stops/?query=' + encodeURIComponent(stop_name.value)
 	).done(function(data) {
 		deleteChildren(stop_name_autocomplete);
 		for(var i = 0, il = data.length; i < il; i++) {
-			if(data[i].type != 'stop') continue;
-			if(data[i].id > 6000) continue;
 			var opt = document.createElement('option');
 			opt.value = data[i].id;
-			setText(opt, data[i].name);
+			setText(opt, data[i].id.substr(0,1) == 'b' ? lang.select_stop_bus.replace('$stop', data[i].name) : lang.select_stop_tram.replace('$stop', data[i].name));
 			stop_name_autocomplete.appendChild(opt);
 		}
 		
diff --git a/lang_en.js b/lang_en.js
index 0449c2e..745a92e 100644
--- a/lang_en.js
+++ b/lang_en.js
@@ -8,6 +8,8 @@
 	jquery_not_loaded: 'Required JavaScript jQuery library failed to load. You may try refreshing the page.',
 	enter_stop_name_to_begin: 'Enter the stop name to begin.',
 	select_stop_click_go: 'Select the stop and click "Go".',
+	select_stop_tram: '$stop (tram)',
+	select_stop_bus: '$stop (bus)',
 	stop_name_placeholder: 'Stop name',
 	go_button: 'Go',
 	refresh_button: '\u27f3 Refresh',
diff --git a/lang_pl.js b/lang_pl.js
index dfc4857..c3f58cf 100644
--- a/lang_pl.js
+++ b/lang_pl.js
@@ -8,6 +8,8 @@
 	jquery_not_loaded: 'Wymagana biblioteka jQuery nie została poprawnie załadowana. Spróbuj odświeżyć stronę.',
 	enter_stop_name_to_begin: 'Zacznij wpisywać nazwę przystanku.',
 	select_stop_click_go: 'Wyierz przystanek i kliknij "Dalej".',
+	select_stop_tram: '$stop (tramwaj)',
+	select_stop_bus: '$stop (autobus)',
 	stop_name_placeholder: 'Nazwa przystanku',
 	go_button: 'Dalej',
 	refresh_button: '\u27f3 Odśwież',
diff --git a/map.html b/map.html
index f5d7704..38583fe 100644
--- a/map.html
+++ b/map.html
@@ -16,8 +16,8 @@
 <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cqB8txI/8aZajjp4Bqd+V6D5IgvKT" crossorigin="anonymous"></script>
 <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList"></script>
 <script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v5.3.0/build/ol.js" integrity="sha384-iQkGyyH4ioz3m+maM3s9MX1Oq67mACa4B9Z3ovUv3Sv37LJ96fx3WnZfLoiC3Wfl" crossorigin="anonymous"></script>
-<script tyle="text/javascript" src="lang_pl.js?v2" id="lang_script"></script>
-<script tyle="text/javascript" src="common.js?v3"></script>
+<script tyle="text/javascript" src="lang_pl.js?v3" id="lang_script"></script>
+<script tyle="text/javascript" src="common.js?v4"></script>
 <script tyle="text/javascript" src="map.js?v6"></script>
 </body>
 </html>
diff --git a/map.js b/map.js
index 9914c46..9d4bfc3 100644
--- a/map.js
+++ b/map.js
@@ -1,7 +1,3 @@
-//var ttss_trams_base = 'http://www.ttss.krakow.pl/internetservice';
-var ttss_trams_base = 'proxy_tram.php';
-//var ttss_buses_base = 'http://91.223.13.70/internetservice';
-var ttss_buses_base = 'proxy_bus.php';
 var ttss_refresh = 10000; // 10 seconds
 var ttss_position_type = 'CORRECTED';
 
diff --git a/stops.php b/stops.php
index 48d36b2..16eab82 100644
--- a/stops.php
+++ b/stops.php
@@ -12,7 +12,7 @@
 	$pdo = new PDO('sqlite:stops/stops.db', NULL, NULL, array(
 		PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
 	));
-	$st = $pdo->prepare('SELECT DISTINCT id FROM stop_search WHERE word LIKE ?');
+	$st = $pdo->prepare('SELECT DISTINCT id FROM stop_search WHERE word LIKE ? AND id LIKE \'t%\'');
 	
 	// Split stop name into words
 	$words = split_stop_name($_GET['query']);
diff --git a/stops/common.php b/stops/common.php
index 0d6c3cf..54fdfdd 100644
--- a/stops/common.php
+++ b/stops/common.php
@@ -13,5 +13,5 @@
 	}
 	unset($word);
 	
-	return $words;
+	return array_values($words);
 }
diff --git a/stops/download_stops.php b/stops/download_stops.php
index f0aef8a..4c689b6 100644
--- a/stops/download_stops.php
+++ b/stops/download_stops.php
@@ -1,18 +1,30 @@
 <?php
 if(php_sapi_name() !== 'cli') die();
 
-$json = file_get_contents('http://www.ttss.krakow.pl/internetservice/geoserviceDispatcher/services/stopinfo/stops?left=-648000000&bottom=-324000000&right=648000000&top=324000000');
-$elements = json_decode($json, 1);
-foreach($elements['stops'] as $element) {
-	if($element['category'] == 'other') continue;
-	$stops[$element['shortName']] = $element['name'];
+function fetchStops($url) {
+	$json = file_get_contents($url);
+	$elements = json_decode($json, 1);
+	$stops = [];
+	foreach($elements['stops'] as $element) {
+		if($element['category'] == 'other') continue;
+		$stops[$element['shortName']] = $element['name'];
+	}
+	asort($stops);
+	return $stops;
 }
 
-asort($stops);
+function printStops($stops, $prefix) {
+	foreach($stops as $id => $stop) {
+		echo '  \''.$prefix.str_pad($id."'", 5, ' ', STR_PAD_RIGHT).' => '.var_export($stop, TRUE).','."\n";
+	}
+}
+
+$stops_tram = fetchStops('http://www.ttss.krakow.pl/internetservice/geoserviceDispatcher/services/stopinfo/stops?left=-648000000&bottom=-324000000&right=648000000&top=324000000');
+$stops_bus = fetchStops('http://91.223.13.70/internetservice/geoserviceDispatcher/services/stopinfo/stops?left=-648000000&bottom=-324000000&right=648000000&top=324000000');
 
 echo '<?php'."\n";
 echo '$stops = array ('."\n";
-foreach($stops as $id => $stop) {
-	echo '  '.str_pad($id, 4, ' ', STR_PAD_RIGHT).' => '.var_export($stop, TRUE).','."\n";
-}
+printStops($stops_tram, 't');
+echo "\n";
+printStops($stops_bus, 'b');
 echo ');'."\n";
diff --git a/stops/index.php b/stops/index.php
new file mode 100644
index 0000000..5795afa
--- /dev/null
+++ b/stops/index.php
@@ -0,0 +1,86 @@
+<?php
+include('common.php');
+include('stops.php');
+
+try {
+	// Reject invalid input
+	if(!isset($_GET['query'])) throw new UnexpectedValueException();
+	if(empty($_GET['query'])) throw new UnexpectedValueException();
+	if(strlen($_GET['query']) > 50) throw new UnexpectedValueException();
+	
+	// Split stop name into words
+	$words = split_stop_name($_GET['query']);
+	$find_ondemand = in_array('nz', $words);
+	
+	// Initialize a DB connection and a query
+	$pdo = new PDO('sqlite:stops.db', NULL, NULL, array(
+		PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
+	));
+	$st = $pdo->prepare('SELECT DISTINCT id FROM stop_search WHERE word LIKE ?'.($find_ondemand ? '' : ' AND word != \'nz\'').' ORDER BY id DESC');
+	
+	// Find matching stops (their IDs)
+	$ids = NULL;
+	foreach($words as $word) {
+		if(empty($word)) continue;
+		
+		// Find stop IDs with names matching the word
+		$st->execute(array($word.'%'));
+		$results = $st->fetchAll(PDO::FETCH_COLUMN);
+		$st->closeCursor();
+		
+		if(is_array($ids)) {
+			// Merge results with list for previous words
+			$ids = array_intersect($ids, $results);
+		} else {
+			// First search - initialize results list
+			$ids = $results;
+		}
+		
+		// No results will be found
+		if(count($ids) == 0) break;
+	}
+	
+	// Close a DB connection
+	unset($st, $pdo);
+	
+	// No query was executed - return empty list
+	if(!is_array($ids)) throw new UnexpectedValueException();
+	
+	// Build a structure for the UI
+	$stop_list = [];
+	$query_lower = mb_strtolower($_GET['query'], 'UTF-8');
+	foreach($ids as $id) {
+		similar_text(
+			$query_lower,
+			mb_strtolower($stops[$id], 'UTF-8'),
+			$percent
+		);
+		// -5 due to UTF-8
+		if(substr($stops[$id], -5) == '(nż)' && !$find_ondemand) {
+			$percent /= 2;
+		}
+		$stop_list[] = [
+			'id' => $id,
+			'name' => $stops[$id],
+			'type' => 'stop',
+			'relevance' => $percent,
+		];
+	}
+	
+	// Sort stops by relevance
+	usort($stop_list, function($a, $b) {
+		$rel = $b['relevance'] - $a['relevance'];
+		if($rel == 0) return strcasecmp($a['name'], $b['name']);
+		return $rel;
+	});
+	
+	// Return JSON
+	header('Content-Type: application/json');
+	echo json_encode($stop_list);
+} catch(UnexpectedValueException $e) {
+	header('Content-Type: application/json');
+	echo '[]';
+} catch(Exception $e) {
+	header('HTTP/1.1 503 Service Unavailable');
+	echo $e->getMessage();
+}
diff --git a/stops/populate_db.php b/stops/populate_db.php
index 3364d2d..845ec95 100644
--- a/stops/populate_db.php
+++ b/stops/populate_db.php
@@ -9,17 +9,21 @@
 $pdo->query('DROP TABLE IF EXISTS stop_search');
 $pdo->query('CREATE TABLE stop_search (
 	word VARCHAR(60),
-	id INT
+	id VARCHAR(255)
 )');
+
+function processStops($st, $stops) {
+	foreach($stops as $id => $name) {
+		foreach(split_stop_name($name) as $word) {
+			$st->execute([$word, $id]);
+			$st->closeCursor();
+		}
+	}
+}
 
 $pdo->beginTransaction();
 $st = $pdo->prepare('INSERT INTO stop_search (word, id) VALUES (?, ?)');
-foreach($stops as $id => $name) {
-	foreach(split_stop_name($name) as $word) {
-		$st->execute(array($word, $id));
-		$st->closeCursor();
-	}
-}
+processStops($st, $stops);
 $pdo->commit();
 
 $pdo->query('CREATE INDEX stop_search_word ON stop_search (word COLLATE NOCASE)');
diff --git a/stops/stops.db b/stops/stops.db
index e4d6b7d..4a03e55 100644
--- a/stops/stops.db
+++ b/stops/stops.db
Binary files differ
diff --git a/stops/stops.php b/stops/stops.php
index 42ff022..432b200 100644
--- a/stops/stops.php
+++ b/stops/stops.php
@@ -1,209 +1,1645 @@
 <?php
 $stops = array (
-  113  => 'AWF',
-  462  => 'Agencja Kraków Wschód',
-# 134  => 'Balicka Wiadukt', # nowa nazwa # 136  => 'Bronowice Wiadukt',
-  449  => 'Bardosa',
-# 75   => 'Basztowa LOT', # nowa nazwa # 3032 => 'Stary Kleparz',
-  78   => 'Batorego',
-  130  => 'Białucha',
-  867  => 'Bieńczycka',
-  630  => 'Bieżanowska',
-  84   => 'Biprostal',
-  461  => 'Blokowa',
-# 2798 => 'Boisko Kabel', # dawny tymczasowy
-  747  => 'Borek Fałęcki',
-  824  => 'Borek Fałęcki I',
-  612  => 'Borsucza',
-  451  => 'Brama nr 4',
-  453  => 'Brama nr 5',
-  61   => 'Bratysławska',
-  89   => 'Bronowice',
-  135  => 'Bronowice Małe',
-  136  => 'Bronowice Wiadukt',
-  613  => 'Brożka',
-  409  => 'Centralna',
-  3039 => 'Centrum Kongresowe ICE',
-  2691 => 'Chmieleniec',
-  87   => 'Cichy Kącik',
-  3037 => 'Cienista',
-# 2549 => 'Cmentarz Grębałów Zachód', # nowa nazwa # 2685 => 'Jarzębiny',
-  621  => 'Cmentarz Podgórski',
-  124  => 'Cmentarz Rakowicki',
-# 318  => 'Cracovia', # nowa nazwa # 3141 => 'Muzeum Narodowe',
-  129  => 'Cystersów',
-  3038 => 'Czerwone Maki P+R',
-  407  => 'Czyżyny',
-  392  => 'DH Wanda',
-  915  => 'Dajwór', # nieczynny - linia muzealna
-  435  => 'Darwina',
-  632  => 'Dauna',
-  388  => 'Dunikowskiego',
-  623  => 'Dworcowa',
-# 131  => 'Dworzec Główny', # nowa nazwa # 3242 => 'Teatr Słowackiego',
-  1173 => 'Dworzec Główny Tunel',
-# 8567 => 'Dworzec Główny Tunel', # duplikat # 1173 => 'Dworzec Główny Tunel',
-  2608 => 'Dworzec Główny Zachód',
-  2870 => 'Dworzec Płaszów Estakada',
-  70   => 'Dworzec Towarowy',
-# 6685 => 'Dworzec Towarowy', # duplikat # 70   => 'Dworzec Towarowy',
-  370  => 'Dąbie',
-  464  => 'Elektromontaż',
-  368  => 'Fabryczna',
-  322  => 'Filharmonia',
-  1051 => 'Fort Mogiła',
-  367  => 'Francesco Nullo',
-  560  => 'Gromadzka',
-# 585  => 'Grota Roweckiego', # nowa nazwa # 2687 => 'Grota-Roweckiego',
-  2687 => 'Grota-Roweckiego',
-  1049 => 'Głowackiego',
-  363  => 'Hala Targowa',
-# 6990 => 'Hala Targowa', # duplikat # 363  => 'Hala Targowa',
-  2685 => 'Jarzębiny',
-  452  => 'Jeżynowa',
-  319  => 'Jubilat',
-  624  => 'Kabel',
-  2690 => 'Kampus UJ',
-  576  => 'Kapelanka',
-  429  => 'Klasztorna',
-  382  => 'Kleeberga',
-  946  => 'Klimeckiego',
-  584  => 'Kobierzyńska',
-# 401  => 'Kocmyrzowska', # nowa nazwa # 3037 => 'Cienista',
-  457  => 'Koksochemia',
-  459  => 'Kombinat',
-  313  => 'Komorowskiego',
-  450  => 'Kopiec Wandy',
-# 2536 => 'Kordylewskiego', # nowa nazwa # 2859 => 'Teatr Variété',
-  571  => 'Korona',
-# 2803 => 'Kraków Arena Al. Pokoju', # nowa nazwa # 2871 => 'TAURON Arena Kraków Al. Pokoju',
-# 959  => 'Kraków Plaza', # nowa nazwa # 3033 => 'Plaza',
-  63   => 'Krowodrza Górka',
-# 7612 => 'Krowodrza Górka', # duplikat # 63   => 'Krowodrza Górka',
-  567  => 'Kuklińskiego',
-# 744  => 'Kurdwanów', # nowa nazwa # 3176 => 'Kurdwanów P+R',
-  3176 => 'Kurdwanów P+R',
-# 7389 => 'Kurdwanów pętla', # nowa nazwa # 744  => 'Kurdwanów',
-# 2537 => 'Lema', # nowa nazwa # 2803 => 'Kraków Arena Al. Pokoju'
-  569  => 'Limanowskiego',
-  2686 => 'Lipińskiego',
-  561  => 'Lipska',
-  126  => 'Lubicz',
-  930  => 'M1 Al. Pokoju',
-  1263 => 'Mały Płaszów',
-  454  => 'Meksyk',
-  362  => 'Miodowa',
-# 6989 => 'Miodowa', # duplikat # 362  => 'Miodowa',
-  375  => 'Mistrzejowice',
-  2538 => 'Miśnieńska',
-# 574  => 'Most Grunwaldzki', # nowa nazwa # 3039 => 'Centrum Kongresowe ICE',
-  460  => 'Mrozowa',
-  2726 => 'Muzeum Inżynierii Miejskiej', # nieczynny - linia muzealna
-  2811 => 'Muzeum Lotnictwa',
-  3141 => 'Muzeum Narodowe',
-  2688 => 'Norymberska',
-# 372  => 'Nowohucka', # nowa nazwa # 3041 => 'Rondo 308. Dywizjonu',
-  715  => 'Nowosądecka',
-# 2580 => 'Nowy Bieżanów', # nowa nazwa # 3175 => 'Nowy Bieżanów P+R',
-  3175 => 'Nowy Bieżanów P+R',
-  71   => 'Nowy Kleparz',
-  2582 => 'Nowy Prokocim',
-  369  => 'Ofiar Dąbia',
-  823  => 'Oleandry',
-  361  => 'Orzeszkowej',
-  413  => 'Os.Kolorowe',
-  424  => 'Os.Na Skarpie',
-  378  => 'Os.Piastów',
-  418  => 'Os.Zgody',
-  377  => 'Os.Złotego Wieku',
-  466  => 'PH',
-  614  => 'PT',
-  960  => 'Park Jordana',
-  716  => 'Piaski Nowe',
-  379  => 'Piasta Kołodzieja',
-  570  => 'Plac Bohaterów Getta',
-# 7207 => 'Plac Bohaterów Getta', # duplikat # 570  => 'Plac Bohaterów Getta',
-# 414  => 'Plac Centralny', # nowa nazwa # 2744 => 'Plac Centralny im. R.Reagana',
-  2744 => 'Plac Centralny im. R.Reagana',
-  79   => 'Plac Inwalidów',
-  360  => 'Plac Wolnica',
-  1360 => 'Plac Wszystkich Świętych',
-  3033 => 'Plaza',
-  458  => 'Pleszów',
-  357  => 'Poczta Główna',
-  3158 => 'Podgórze SKA',
-  73   => 'Politechnika',
-# 6689 => 'Politechnika', # duplikat # 73   => 'Politechnika',
-# 568  => 'Powstańców Wielkopolskich', # nowa nazwa # 3158 => 'Podgórze SKA',
-# 7204 => 'Powstańców Wielkopolskich', # duplikat # 568  => 'Powstańców Wielkopolskich',
-  637  => 'Prokocim',
-# 7279 => 'Prokocim', # duplikat # 637  => 'Prokocim',
-  682  => 'Prokocim Szpital',
-# 69   => 'Prądnicka', # nowa nazwa # 3036 => 'Szpital Narutowicza',
-# 6684 => 'Prądnicka', # duplikat # 69   => 'Prądnicka',
-  72   => 'Pędzichów',
-  128  => 'Rakowicka',
-  320  => 'Reymana',
-  3041 => 'Rondo 308. Dywizjonu',
-  408  => 'Rondo Czyżyńskie',
-  365  => 'Rondo Grzegórzeckie',
-# 6992 => 'Rondo Grzegórzeckie', # duplikat # 365  => 'Rondo Grzegórzeckie',
-  2539 => 'Rondo Hipokratesa',
-# 419  => 'Rondo Kocmyrzowskie', # nowa nazwa # 2745 => 'Rondo Kocmyrzowskie im. Ks. Gorzelanego',
-  2745 => 'Rondo Kocmyrzowskie im. Ks. Gorzelanego',
-  610  => 'Rondo Matecznego',
-  125  => 'Rondo Mogilskie',
-# 6747 => 'Rondo Mogilskie', # duplikat # 125  => 'Rondo Mogilskie',
-  383  => 'Rondo Piastowskie',
-# 587  => 'Rostworowskiego', # nowa nazwa # 589  => 'Ruczaj',
-  589  => 'Ruczaj',
-# 586  => 'Ruczaj I', # nowa nazwa # 585  => 'Grota Roweckiego',
-  1262 => 'Rzebika',
-  611  => 'Rzemieślnicza',
-  311  => 'Salwator',
-  615  => 'Sanktuarium Bożego Miłosierdzia',
-  572  => 'Smolki',
-  746  => 'Solvay',
-  358  => 'Starowiślna',
-# 6985 => 'Starowiślna', # duplikat # 358  => 'Starowiślna',
-  3032 => 'Stary Kleparz',
-  112  => 'Stella-Sawickiego',
-  359  => 'Stradom',
-  423  => 'Struga',
-  2548 => 'Suche Stawy',
-  3036 => 'Szpital Narutowicza',
-  575  => 'Szwedzka',
-  577  => 'Słomiana',
-  2871 => 'TAURON Arena Kraków Al. Pokoju',
-  3040 => 'TAURON Arena Kraków Wieczysta',
-  77   => 'Teatr Bagatela',
-  420  => 'Teatr Ludowy',
-  3242 => 'Teatr Słowackiego',
-  2859 => 'Teatr Variété',
-  681  => 'Teligi',
-  127  => 'Uniwersytet Ekonomiczny',
-  321  => 'Uniwersytet Jagielloński',
-  88   => 'Uniwersytet Pedagogiczny',
-  83   => 'Urzędnicza',
-  463  => 'Walcownia',
-  325  => 'Wawel',
-  2543 => 'Wańkowicza',
-  133  => 'Wesele',
-  434  => 'Wiadukty',
-# 114  => 'Wieczysta', # nowa nazwa # 3040 => 'TAURON Arena Kraków Wieczysta',
-  718  => 'Witosa',
-# 7362 => 'Witosa', # duplikat # 718  => 'Witosa',
-  634  => 'Wlotowa',
-  442  => 'Wzgórza Krzesławickie',
-  1154 => 'Zabłocie',
-  465  => 'Zajezdnia Nowa Huta',
-  679  => 'Ćwiklińskiej',
-  922  => 'Łagiewniki',
-# 7584 => 'Łagiewniki', # duplikat # 922  => 'Łagiewniki',
-  2821 => 'Łagiewniki ZUS',
-# 324  => 'Św. Gertrudy', # duplikat # 2741 => 'Św.Gertrudy',
-# 364  => 'Św. Wawrzyńca', # duplikat # 2742 => 'Św.Wawrzyńca',
-# 8508 => 'Św. Wawrzyńca', # duplikat # 364  => 'Św. Wawrzyńca',
-  2741 => 'Św.Gertrudy',
-  2742 => 'Św.Wawrzyńca',
+  't113'  => 'AWF',
+  't462'  => 'Agencja Kraków Wschód',
+# 't134'  => 'Balicka Wiadukt', # nowa nazwa # 't136'  => 'Bronowice Wiadukt',
+  't449'  => 'Bardosa',
+# 't75'   => 'Basztowa LOT', # nowa nazwa # 't3032' => 'Stary Kleparz',
+  't78'   => 'Batorego',
+  't130'  => 'Białucha',
+  't867'  => 'Bieńczycka',
+  't630'  => 'Bieżanowska',
+  't84'   => 'Biprostal',
+  't461'  => 'Blokowa',
+# 't2798' => 'Boisko Kabel', # dawny tymczasowy
+  't747'  => 'Borek Fałęcki',
+  't824'  => 'Borek Fałęcki I',
+  't612'  => 'Borsucza',
+  't451'  => 'Brama nr 4',
+  't453'  => 'Brama nr 5',
+  't61'   => 'Bratysławska',
+  't89'   => 'Bronowice',
+  't135'  => 'Bronowice Małe',
+  't136'  => 'Bronowice Wiadukt',
+  't613'  => 'Brożka',
+  't409'  => 'Centralna',
+  't3039' => 'Centrum Kongresowe ICE',
+  't2691' => 'Chmieleniec',
+  't87'   => 'Cichy Kącik',
+  't3037' => 'Cienista',
+# 't2549' => 'Cmentarz Grębałów Zachód', # nowa nazwa # 't2685' => 'Jarzębiny',
+  't621'  => 'Cmentarz Podgórski',
+  't124'  => 'Cmentarz Rakowicki',
+# 't318'  => 'Cracovia', # nowa nazwa # 't3141' => 'Muzeum Narodowe',
+  't129'  => 'Cystersów',
+  't3038' => 'Czerwone Maki P+R',
+  't407'  => 'Czyżyny',
+  't392'  => 'DH Wanda',
+  't915'  => 'Dajwór', # nieczynny - linia muzealna
+  't435'  => 'Darwina',
+  't632'  => 'Dauna',
+  't388'  => 'Dunikowskiego',
+  't623'  => 'Dworcowa',
+# 't131'  => 'Dworzec Główny', # nowa nazwa # 't3242' => 'Teatr Słowackiego',
+  't1173' => 'Dworzec Główny Tunel',
+# 't8567' => 'Dworzec Główny Tunel', # duplikat # 't1173' => 'Dworzec Główny Tunel',
+  't2608' => 'Dworzec Główny Zachód',
+  't2870' => 'Dworzec Płaszów Estakada',
+  't70'   => 'Dworzec Towarowy',
+# 't6685' => 'Dworzec Towarowy', # duplikat # 't70'   => 'Dworzec Towarowy',
+  't370'  => 'Dąbie',
+  't464'  => 'Elektromontaż',
+  't368'  => 'Fabryczna',
+  't322'  => 'Filharmonia',
+  't1051' => 'Fort Mogiła',
+  't367'  => 'Francesco Nullo',
+  't560'  => 'Gromadzka',
+# 't585'  => 'Grota Roweckiego', # nowa nazwa # 't2687' => 'Grota-Roweckiego',
+  't2687' => 'Grota-Roweckiego',
+  't1049' => 'Głowackiego',
+  't363'  => 'Hala Targowa',
+# 't6990' => 'Hala Targowa', # duplikat # 't363'  => 'Hala Targowa',
+  't2685' => 'Jarzębiny',
+  't452'  => 'Jeżynowa',
+  't319'  => 'Jubilat',
+  't624'  => 'Kabel',
+  't2690' => 'Kampus UJ',
+  't576'  => 'Kapelanka',
+  't429'  => 'Klasztorna',
+  't382'  => 'Kleeberga',
+  't946'  => 'Klimeckiego',
+  't584'  => 'Kobierzyńska',
+# 't401'  => 'Kocmyrzowska', # nowa nazwa # 't3037' => 'Cienista',
+  't457'  => 'Koksochemia',
+  't459'  => 'Kombinat',
+  't313'  => 'Komorowskiego',
+  't450'  => 'Kopiec Wandy',
+# 't2536' => 'Kordylewskiego', # nowa nazwa # 't2859' => 'Teatr Variété',
+  't571'  => 'Korona',
+# 't2803' => 'Kraków Arena Al. Pokoju', # nowa nazwa # 't2871' => 'TAURON Arena Kraków Al. Pokoju',
+# 't959'  => 'Kraków Plaza', # nowa nazwa # 't3033' => 'Plaza',
+  't63'   => 'Krowodrza Górka',
+# 't7612' => 'Krowodrza Górka', # duplikat # 't63'   => 'Krowodrza Górka',
+  't567'  => 'Kuklińskiego',
+# 't744'  => 'Kurdwanów', # nowa nazwa # 't3176' => 'Kurdwanów P+R',
+  't3176' => 'Kurdwanów P+R',
+# 't7389' => 'Kurdwanów pętla', # nowa nazwa # 't744'  => 'Kurdwanów',
+# 't2537' => 'Lema', # nowa nazwa # 't2803' => 'Kraków Arena Al. Pokoju'
+  't569'  => 'Limanowskiego',
+  't2686' => 'Lipińskiego',
+  't561'  => 'Lipska',
+  't126'  => 'Lubicz',
+  't930'  => 'M1 Al. Pokoju',
+  't1263' => 'Mały Płaszów',
+  't454'  => 'Meksyk',
+  't362'  => 'Miodowa',
+# 't6989' => 'Miodowa', # duplikat # 't362'  => 'Miodowa',
+  't375'  => 'Mistrzejowice',
+  't2538' => 'Miśnieńska',
+# 't574'  => 'Most Grunwaldzki', # nowa nazwa # 't3039' => 'Centrum Kongresowe ICE',
+  't460'  => 'Mrozowa',
+  't2726' => 'Muzeum Inżynierii Miejskiej', # nieczynny - linia muzealna
+  't2811' => 'Muzeum Lotnictwa',
+  't3141' => 'Muzeum Narodowe',
+  't2688' => 'Norymberska',
+# 't372'  => 'Nowohucka', # nowa nazwa # 't3041' => 'Rondo 't308'. Dywizjonu',
+  't715'  => 'Nowosądecka',
+# 't2580' => 'Nowy Bieżanów', # nowa nazwa # 't3175' => 'Nowy Bieżanów P+R',
+  't3175' => 'Nowy Bieżanów P+R',
+  't71'   => 'Nowy Kleparz',
+  't2582' => 'Nowy Prokocim',
+  't369'  => 'Ofiar Dąbia',
+  't823'  => 'Oleandry',
+  't361'  => 'Orzeszkowej',
+  't413'  => 'Os.Kolorowe',
+  't424'  => 'Os.Na Skarpie',
+  't378'  => 'Os.Piastów',
+  't418'  => 'Os.Zgody',
+  't377'  => 'Os.Złotego Wieku',
+  't466'  => 'PH',
+  't614'  => 'PT',
+  't960'  => 'Park Jordana',
+  't716'  => 'Piaski Nowe',
+  't379'  => 'Piasta Kołodzieja',
+  't570'  => 'Plac Bohaterów Getta',
+# 't7207' => 'Plac Bohaterów Getta', # duplikat # 't570'  => 'Plac Bohaterów Getta',
+# 't414'  => 'Plac Centralny', # nowa nazwa # 't2744' => 'Plac Centralny im. R.Reagana',
+  't2744' => 'Plac Centralny im. R.Reagana',
+  't79'   => 'Plac Inwalidów',
+  't360'  => 'Plac Wolnica',
+  't1360' => 'Plac Wszystkich Świętych',
+  't3033' => 'Plaza',
+  't458'  => 'Pleszów',
+  't357'  => 'Poczta Główna',
+  't3158' => 'Podgórze SKA',
+  't73'   => 'Politechnika',
+# 't6689' => 'Politechnika', # duplikat # 't73'   => 'Politechnika',
+# 't568'  => 'Powstańców Wielkopolskich', # nowa nazwa # 't3158' => 'Podgórze SKA',
+# 't7204' => 'Powstańców Wielkopolskich', # duplikat # 't568'  => 'Powstańców Wielkopolskich',
+  't637'  => 'Prokocim',
+# 't7279' => 'Prokocim', # duplikat # 't637'  => 'Prokocim',
+  't682'  => 'Prokocim Szpital',
+# 't69'   => 'Prądnicka', # nowa nazwa # 't3036' => 'Szpital Narutowicza',
+# 't6684' => 'Prądnicka', # duplikat # 't69'   => 'Prądnicka',
+  't72'   => 'Pędzichów',
+  't128'  => 'Rakowicka',
+  't320'  => 'Reymana',
+  't3041' => 'Rondo 308. Dywizjonu',
+  't408'  => 'Rondo Czyżyńskie',
+  't365'  => 'Rondo Grzegórzeckie',
+# 't6992' => 'Rondo Grzegórzeckie', # duplikat # 't365'  => 'Rondo Grzegórzeckie',
+  't2539' => 'Rondo Hipokratesa',
+# 't419'  => 'Rondo Kocmyrzowskie', # nowa nazwa # 't2745' => 'Rondo Kocmyrzowskie im. Ks. Gorzelanego',
+  't2745' => 'Rondo Kocmyrzowskie im. Ks. Gorzelanego',
+  't610'  => 'Rondo Matecznego',
+  't125'  => 'Rondo Mogilskie',
+# 't6747' => 'Rondo Mogilskie', # duplikat # 't125'  => 'Rondo Mogilskie',
+  't383'  => 'Rondo Piastowskie',
+# 't587'  => 'Rostworowskiego', # nowa nazwa # 't589'  => 'Ruczaj',
+  't589'  => 'Ruczaj',
+# 't586'  => 'Ruczaj I', # nowa nazwa # 't585'  => 'Grota Roweckiego',
+  't1262' => 'Rzebika',
+  't611'  => 'Rzemieślnicza',
+  't311'  => 'Salwator',
+  't615'  => 'Sanktuarium Bożego Miłosierdzia',
+  't572'  => 'Smolki',
+  't746'  => 'Solvay',
+  't358'  => 'Starowiślna',
+# 't6985' => 'Starowiślna', # duplikat # 't358'  => 'Starowiślna',
+  't3032' => 'Stary Kleparz',
+  't112'  => 'Stella-Sawickiego',
+  't359'  => 'Stradom',
+  't423'  => 'Struga',
+  't2548' => 'Suche Stawy',
+  't3036' => 'Szpital Narutowicza',
+  't575'  => 'Szwedzka',
+  't577'  => 'Słomiana',
+  't2871' => 'TAURON Arena Kraków Al. Pokoju',
+  't3040' => 'TAURON Arena Kraków Wieczysta',
+  't77'   => 'Teatr Bagatela',
+  't420'  => 'Teatr Ludowy',
+  't3242' => 'Teatr Słowackiego',
+  't2859' => 'Teatr Variété',
+  't681'  => 'Teligi',
+  't127'  => 'Uniwersytet Ekonomiczny',
+  't321'  => 'Uniwersytet Jagielloński',
+  't88'   => 'Uniwersytet Pedagogiczny',
+  't83'   => 'Urzędnicza',
+  't463'  => 'Walcownia',
+  't325'  => 'Wawel',
+  't2543' => 'Wańkowicza',
+  't133'  => 'Wesele',
+  't434'  => 'Wiadukty',
+# 't114'  => 'Wieczysta', # nowa nazwa # 't3040' => 'TAURON Arena Kraków Wieczysta',
+  't718'  => 'Witosa',
+# 't7362' => 'Witosa', # duplikat # 't718'  => 'Witosa',
+  't634'  => 'Wlotowa',
+  't442'  => 'Wzgórza Krzesławickie',
+  't1154' => 'Zabłocie',
+  't465'  => 'Zajezdnia Nowa Huta',
+  't679'  => 'Ćwiklińskiej',
+  't922'  => 'Łagiewniki',
+# 't7584' => 'Łagiewniki', # duplikat # 't922'  => 'Łagiewniki',
+  't2821' => 'Łagiewniki ZUS',
+# 't324'  => 'Św. Gertrudy', # duplikat # 't2741' => 'Św.Gertrudy',
+# 't364'  => 'Św. Wawrzyńca', # duplikat # 't2742' => 'Św.Wawrzyńca',
+# 't8508' => 'Św. Wawrzyńca', # duplikat # 't364'  => 'Św. Wawrzyńca',
+  't2741' => 'Św.Gertrudy',
+  't2742' => 'Św.Wawrzyńca',
+
+  'b3111' => 'AGH / UR',
+  'b113'  => 'AWF',
+  'b1328' => 'Agatowa (nż)',
+  'b462'  => 'Agencja Kraków Wschód (nż)',
+  'b117'  => 'Akacjowa',
+  'b2573' => 'Albatrosów',
+  'b415'  => 'Aleja Przyjaźni',
+  'b416'  => 'Aleja Róż',
+  'b2625' => 'Aleja Waszyngtona (nż)',
+  'b235'  => 'Aleksandrowice',
+  'b236'  => 'Aleksandrowice Osiedle (nż)',
+  'b3150' => 'Aleksandrowicza (nż)',
+  'b1122' => 'Aleksandry',
+  'b437'  => 'Architektów',
+  'b403'  => 'Arka',
+  'b2533' => 'Armii Krajowej',
+  'b54'   => 'Azory',
+  'b145'  => 'Baba Jaga (nż)',
+  'b767'  => 'Babińskiego',
+  'b1083' => 'Baczyńskiego (nż)',
+  'b2565' => 'Bagienna',
+  'b2865' => 'Bagry',
+  'b221'  => 'Balice Autostrada (nż)',
+  'b2635' => 'Balice Grzybów (nż)',
+  'b226'  => 'Balice I (nż)',
+  'b223'  => 'Balice Instytut (nż)',
+  'b2636' => 'Balice Leśna (nż)',
+  'b3012' => 'Balice Medweckiego (nż)',
+  'b892'  => 'Balice OSP (nż)',
+  'b3013' => 'Balice Olszanica Bory',
+  'b222'  => 'Balice Szkoła',
+  'b2912' => 'Balice Winna Góra (nż)',
+  'b2796' => 'Banacha',
+  'b541'  => 'Bartnicza (nż)',
+  'b2551' => 'Barwna (nż)',
+  'b703'  => 'Barycz (nż)',
+  'b2528' => 'Batalionu \'Skała\' AK',
+  'b78'   => 'Batorego',
+  'b2962' => 'Batowice Dłubnia',
+  'b352'  => 'Batowice Kapliczka',
+  'b2959' => 'Batowice Spławy (nż)',
+  'b3121' => 'Bazarowa',
+  'b578'  => 'Bałuckiego (nż)',
+  'b2633' => 'Belwederczyków (nż)',
+  'b2518' => 'Benedyktowicza (nż)',
+  'b923'  => 'Beskidzka',
+  'b1271' => 'Białoprądnicka',
+  'b130'  => 'Białucha',
+  'b973'  => 'Biały Kościół (nż)',
+  'b330'  => 'Bibice (nż)',
+  'b2783' => 'Bibice Cmentarz (nż)',
+  'b2960' => 'Bibice Kościuszki',
+  'b2995' => 'Bibice Na Czekaj',
+  'b2961' => 'Bibice Rynek',
+  'b260'  => 'Bielany',
+  'b262'  => 'Bielany Klasztor (nż)',
+  'b3102' => 'Bielany Obwodnica (nż)',
+  'b261'  => 'Bielany Szkoła',
+  'b265'  => 'Bielańska (nż)',
+  'b272'  => 'Bielańskie Skały (nż)',
+  'b867'  => 'Bieńczycka',
+  'b630'  => 'Bieżanowska',
+  'b667'  => 'Bieżanów',
+  'b3183' => 'Bieżanów Drożdżownia SKA',
+  'b2725' => 'Bieżanów Granica Miasta',
+  'b672'  => 'Bieżanów Kaim',
+  'b665'  => 'Bieżanów Pomnik',
+  'b670'  => 'Bieżanów Potrzask',
+  'b663'  => 'Bieżanów Szkoła',
+  'b662'  => 'Bieżanów Trafo',
+  'b84'   => 'Biprostal',
+  'b122'  => 'Biskupa Prandoty',
+  'b3244' => 'Biskupia',
+  'b3220' => 'Biskupice I (nż)',
+  'b3221' => 'Biskupice II (nż)',
+  'b2574' => 'Biskupińska (nż)',
+  'b461'  => 'Blokowa (nż)',
+  'b2597' => 'Bochenka (nż)',
+  'b34'   => 'Bociana',
+  'b592'  => 'Bogucianka',
+  'b1258' => 'Bojki',
+  'b208'  => 'Bolechowice',
+  'b2917' => 'Bolechowice Drogi (nż)',
+  'b2916' => 'Bolechowice Krzewiny (nż)',
+  'b2915' => 'Bolechowice Zielona (nż)',
+  'b2920' => 'Bolechowice Zielona Mała (nż)',
+  'b2561' => 'Bolesława Śmiałego',
+  'b3210' => 'Boleń Pętla',
+  'b1255' => 'Bonarka',
+  'b810'  => 'Bora-Komorowskiego',
+  'b747'  => 'Borek Fałęcki',
+  'b1118' => 'Borek Szlachecki I (nż)',
+  'b1117' => 'Borek Szlachecki II (nż)',
+  'b753'  => 'Borkowska',
+  'b612'  => 'Borsucza',
+  'b2532' => 'Bosaków',
+  'b1071' => 'Bosutów Dziekanowice (nż)',
+  'b2769' => 'Bosutów Krakowska (nż)',
+  'b3211' => 'Bosutów Remiza',
+  'b453'  => 'Brama nr 5 (nż)',
+  'b530'  => 'Branice (nż)',
+  'b513'  => 'Branice Na Dole (nż)',
+  'b2652' => 'Branice Ośrodek Zdrowia (nż)',
+  'b512'  => 'Branice Pagórek (nż)',
+  'b531'  => 'Branice Szkoła',
+  'b61'   => 'Bratysławska',
+  'b1165' => 'Brodowicza',
+  'b123'  => 'Brogi',
+  'b89'   => 'Bronowice',
+  'b135'  => 'Bronowice Małe',
+  'b136'  => 'Bronowice Wiadukt',
+  'b19'   => 'Bronowice Wielkie',
+  'b638'  => 'Brzegi',
+  'b639'  => 'Brzegi I',
+  'b1294' => 'Brzegi III (nż)',
+  'b2648' => 'Brzeska (nż)',
+  'b1016' => 'Brzezie Działki (nż)',
+  'b3209' => 'Brzezie Kluczwody (nż)',
+  'b3049' => 'Brzezie Kościół (nż)',
+  'b1048' => 'Brzezie Kulka (nż)',
+  'b1021' => 'Brzezie Narodowe (nż)',
+  'b1028' => 'Brzezinka',
+  'b1029' => 'Brzezinka Skrzyżowanie',
+  'b1027' => 'Brzezinka Zarzecze (nż)',
+  'b1106' => 'Brzeźnica',
+  'b1109' => 'Brzeźnica Kuźnia (nż)',
+  'b1108' => 'Brzeźnica Pasieka (nż)',
+  'b2695' => 'Brzoskwinia Góra (nż)',
+  'b240'  => 'Brzoskwinia Kamyk (nż)',
+  'b238'  => 'Brzoskwinia Koziary (nż)',
+  'b3201' => 'Brzoskwinia Pętla',
+  'b239'  => 'Brzoskwinia Sklep',
+  'b3271' => 'Brzozówka Oskarówka',
+  'b3272' => 'Brzozówka Ośrodek',
+  'b2708' => 'Brzyczyna',
+  'b765'  => 'Brücknera',
+  'b2780' => 'Budzyń Plaża Główna (nż)',
+  'b2781' => 'Budzyń Zalew Budzyński (nż)',
+  'b2779' => 'Budzyń Zalew na Piaskach (nż)',
+  'b743'  => 'Bujaka',
+  'b881'  => 'Buków',
+  'b882'  => 'Buków Klin (nż)',
+  'b883'  => 'Buków Szkoła (nż)',
+  'b432'  => 'Bulwarowa (nż)',
+  'b2603' => 'Bulwarowa Ogródki Działkowe (nż)',
+  'b1346' => 'Bunscha (nż)',
+  'b2914' => 'Burów (nż)',
+  'b2913' => 'Burów Centrum',
+  'b2627' => 'Bystronia (nż)',
+  'b978'  => 'Bębło Lasek (nż)',
+  'b976'  => 'Bębło Stara Wieś (nż)',
+  'b977'  => 'Bębło Łabajowa (nż)',
+  'b982'  => 'Będkowice',
+  'b981'  => 'Będkowice Borynia (nż)',
+  'b3007' => 'Będkowice Cmentarz (nż)',
+  'b2869' => 'Będkowice Długa (nż)',
+  'b980'  => 'Będkowice Kawiory (nż)',
+  'b979'  => 'Będkowice Mosurowa (nż)',
+  'b2700' => 'Będkowice Pętla',
+  'b505'  => 'Błonia Kościelnickie (nż)',
+  'b2595' => 'Cechowa (nż)',
+  'b385'  => 'Cedyńska',
+  'b409'  => 'Centralna',
+  'b2453' => 'Centrum JP II',
+  'b3039' => 'Centrum Kongresowe ICE',
+  'b40'   => 'Chabrowa',
+  'b728'  => 'Chałubińskiego (nż)',
+  'b525'  => 'Chałupki',
+  'b2651' => 'Chałupki Górne (nż)',
+  'b151'  => 'Chełm',
+  'b3073' => 'Chełmońskiego Osiedle',
+  'b3072' => 'Chełmońskiego Pętla',
+  'b152'  => 'Chełmska (nż)',
+  'b2691' => 'Chmieleniec',
+  'b1274' => 'Chobot (nż)',
+  'b1288' => 'Chobot Leśniczówka',
+  'b254'  => 'Cholerzyn (nż)',
+  'b3056' => 'Cholerzyn Granica (nż)',
+  'b253'  => 'Cholerzyn Sklep (nż)',
+  'b252'  => 'Cholerzyn Skrzyżowanie (nż)',
+  'b3055' => 'Cholerzyn Zagórze (nż)',
+  'b2878' => 'Chopina',
+  'b886'  => 'Chorowice',
+  'b230'  => 'Chrosna Kapliczka (nż)',
+  'b2911' => 'Chrosna Pętla',
+  'b229'  => 'Chrosna Sklep (nż)',
+  'b228'  => 'Chrosna Studnia (nż)',
+  'b87'   => 'Cichy Kącik',
+  'b2653' => 'Ciekowiec (nż)',
+  'b3037' => 'Cienista',
+  'b36'   => 'Clepardia',
+  'b897'  => 'Cmentarz Batowice',
+  'b2699' => 'Cmentarz Batowice Wschód (nż)',
+  'b3137' => 'Cmentarz Bielany (nż)',
+  'b3126' => 'Cmentarz Bieżanów',
+  'b3139' => 'Cmentarz Borek Fałęcki (nż)',
+  'b3108' => 'Cmentarz Bronowice (nż)',
+  'b448'  => 'Cmentarz Grębałów',
+  'b2989' => 'Cmentarz Grębałów Południe (nż)',
+  'b3034' => 'Cmentarz Olszanica (nż)',
+  'b621'  => 'Cmentarz Podgórski',
+  'b2992' => 'Cmentarz Prokocim',
+  'b124'  => 'Cmentarz Rakowicki',
+  'b2531' => 'Cmentarz Rakowicki Zachód (nż)',
+  'b3120' => 'Cmentarz Ruszcza (nż)',
+  'b3133' => 'Cmentarz Wróblowice',
+  'b822'  => 'Conrada',
+  'b2500' => 'Cracovia Błonia',
+  'b2501' => 'Cracovia Stadion',
+  'b129'  => 'Cystersów',
+  'b975'  => 'Czajowice (nż)',
+  'b1159' => 'Czarnochowice I (nż)',
+  'b81'   => 'Czarnowiejska',
+  'b1226' => 'Czernichów Bór (nż)',
+  'b1204' => 'Czernichów GS (nż)',
+  'b3224' => 'Czernichów Pętla',
+  'b2892' => 'Czernichów Ratanice (nż)',
+  'b2891' => 'Czernichów Ratanice Most (nż)',
+  'b1203' => 'Czernichów Stacja Paliw (nż)',
+  'b2890' => 'Czernichów Zakamycze (nż)',
+  'b920'  => 'Czerwiakowskiego',
+  'b1063' => 'Czerwieńskiego',
+  'b3038' => 'Czerwone Maki P+R',
+  'b878'  => 'Czulice',
+  'b496'  => 'Czulice I (nż)',
+  'b2881' => 'Czułów (nż)',
+  'b2880' => 'Czułów Droga na Czułówek (nż)',
+  'b2879' => 'Czułów Szkoła',
+  'b1215' => 'Czułówek (nż)',
+  'b1365' => 'Czułówek Kapliczka',
+  'b407'  => 'Czyżyny',
+  'b965'  => 'Czyżyny Dworzec',
+  'b522'  => 'Cło',
+  'b392'  => 'DH Wanda',
+  'b3122' => 'Danalówka (nż)',
+  'b435'  => 'Darwina',
+  'b632'  => 'Dauna',
+  'b3113' => 'Dobrego Pasterza',
+  'b474'  => 'Dojazdów Działki (nż)',
+  'b475'  => 'Dojazdów PKS',
+  'b686'  => 'Dom Spokojnej Starości',
+  'b646'  => 'Domagały',
+  'b31'   => 'Dożynkowa',
+  'b216'  => 'Droga do Niegoszowic (nż)',
+  'b192'  => 'Droga do Rząski (nż)',
+  'b2614' => 'Drożdżowa',
+  'b518'  => 'Drożyska (nż)',
+  'b2590' => 'Drużbackiej',
+  'b2922' => 'Dubie Skrzyżowanie (nż)',
+  'b388'  => 'Dunikowskiego',
+  'b3125' => 'Duża Góra (nż)',
+  'b623'  => 'Dworcowa',
+  'b1060' => 'Dworzec Główny Wschód',
+  'b2608' => 'Dworzec Główny Zachód',
+  'b836'  => 'Dwór Czeczów',
+  'b2657' => 'Dymarek (nż)',
+  'b3193' => 'Dziekanowice Batowice SKA',
+  'b3165' => 'Dziekanowice Długa (nż)',
+  'b3166' => 'Dziekanowice Kapliczka',
+  'b3194' => 'Dziekanowicka (nż)',
+  'b370'  => 'Dąbie',
+  'b600'  => 'Dąbrowa',
+  'b1202' => 'Dąbrowa Szlachecka (nż)',
+  'b907'  => 'Dąbrowa Szlachecka Figurka (nż)',
+  'b1237' => 'Dąbrowa Szlachecka Krzemiennik (nż)',
+  'b910'  => 'Dąbrowa Szlachecka Krzyż (nż)',
+  'b3117' => 'Dąbrowskiej',
+  'b838'  => 'EC Łęg',
+  'b374'  => 'Elektrociepłownia Kraków',
+  'b464'  => 'Elektromontaż (nż)',
+  'b3116' => 'Fatimska (nż)',
+  'b322'  => 'Filharmonia',
+  'b1375' => 'Fiszera',
+  'b2566' => 'Fort Bodzów (nż)',
+  'b1051' => 'Fort Mogiła (nż)',
+  'b2587' => 'Fort Swoszowice (nż)',
+  'b1371' => 'Fort Winnica (nż)',
+  'b754'  => 'Forteczna',
+  'b367'  => 'Francesco Nullo',
+  'b617'  => 'Fredry',
+  'b2615' => 'Gaik (nż)',
+  'b2856' => 'Gaj Kwiatowa (nż)',
+  'b2857' => 'Gaj Rudawa (nż)',
+  'b790'  => 'Gaj Szkoła',
+  'b791'  => 'Gaj Zadziele',
+  'b2858' => 'Gaj Zgody (nż)',
+  'b174'  => 'Garlica Duchowna (nż)',
+  'b2957' => 'Garlica Duchowna Droga do Garliczki',
+  'b2628' => 'Garlica Duchowna Rozjazd',
+  'b175'  => 'Garlica Murowana',
+  'b2770' => 'Garlica Murowana Kasztany (nż)',
+  'b2958' => 'Garlica Murowana Podskale (nż)',
+  'b2629' => 'Garliczka Chochół (nż)',
+  'b2588' => 'Geologów (nż)',
+  'b1172' => 'Giebułtów',
+  'b1177' => 'Giebułtów Morgi',
+  'b1176' => 'Giebułtów Plac Zabaw (nż)',
+  'b2877' => 'Giebułtów Trojadyn (nż)',
+  'b2876' => 'Giebułtów Trojadyn Trafo (nż)',
+  'b1352' => 'Giebułtów Zbiornik (nż)',
+  'b3174' => 'Giedroycia (nż)',
+  'b3178' => 'Giedroycia ZTPO (nż)',
+  'b2766' => 'Giełda Balicka P+R (nż)',
+  'b276'  => 'Glinnik (nż)',
+  'b2751' => 'Glogera (nż)',
+  'b2752' => 'Glogera Granica Miasta (nż)',
+  'b2993' => 'Gnieźnieńska (nż)',
+  'b2909' => 'Godlewskiego',
+  'b3059' => 'Golkowice Kościół',
+  'b3146' => 'Golkowice Pętla',
+  'b3144' => 'Golkowice Sklep',
+  'b22'   => 'Gospodarska',
+  'b2760' => 'Goszcza',
+  'b2763' => 'Goszcza Cmentarz (nż)',
+  'b955'  => 'Goszyce (nż)',
+  'b954'  => 'Goszyce Remiza (nż)',
+  'b1090' => 'Gołuchowice',
+  'b1091' => 'Gołuchowice Jurczyce',
+  'b1092' => 'Gołuchowice Sklep (nż)',
+  'b2493' => 'Grabie',
+  'b1293' => 'Grabie Dom Kultury (nż)',
+  'b1295' => 'Grabie Kościół (nż)',
+  'b2492' => 'Grabie Kuźnia (nż)',
+  'b1094' => 'Grabie Polanka (nż)',
+  'b1292' => 'Grabie Szczurów (nż)',
+  'b3145' => 'Grabówki Pętla',
+  'b560'  => 'Gromadzka',
+  'b2687' => 'Grota-Roweckiego',
+  'b76'   => 'Grottgera',
+  'b3186' => 'Grzegorza z Sanoka (nż)',
+  'b443'  => 'Grębałów (nż)',
+  'b2974' => 'Grębynice (nż)',
+  'b1150' => 'Grębynice Mogiełki (nż)',
+  'b2973' => 'Grębynice OSP (nż)',
+  'b455'  => 'Gwarecka (nż)',
+  'b749'  => 'Góra Borkowska (nż)',
+  'b35'   => 'Górka Narodowa',
+  'b2797' => 'Górka Narodowa Wschód',
+  'b2567' => 'Górka Pychowicka (nż)',
+  'b170'  => 'Górna Wieś',
+  'b876'  => 'Głęboka',
+  'b2996' => 'Głęboka Kolonia (nż)',
+  'b3046' => 'Głęboka Zakręt (nż)',
+  'b552'  => 'Habina (nż)',
+  'b2991' => 'Hala Sportowa Piaski Wielkie (nż)',
+  'b363'  => 'Hala Targowa',
+  'b2583' => 'Hallera (nż)',
+  'b741'  => 'Halszki',
+  'b2642' => 'Hektary (nż)',
+  'b931'  => 'Herberta (nż)',
+  'b315'  => 'Hofmana (nż)',
+  'b3157' => 'Husarska (nż)',
+  'b510'  => 'Igołomska (nż)',
+  'b38'   => 'Imbramowska',
+  'b685'  => 'Instytut Pediatrii',
+  'b317'  => 'Instytut Reumatologii',
+  'b840'  => 'Isep (nż)',
+  'b933'  => 'Iwanowice',
+  'b3243' => 'Jadwigi z Łobzowa',
+  'b2626' => 'Jana Kazimierza',
+  'b1062' => 'Janasówka (nż)',
+  'b185'  => 'Januszowice',
+  'b506'  => 'Janówka (nż)',
+  'b668'  => 'Jasieńskiego (nż)',
+  'b832'  => 'Jasnogórska (nż)',
+  'b1110' => 'Jaśkowice (nż)',
+  'b1111' => 'Jaśkowice PKP (nż)',
+  'b2586' => 'Jerzmanowskiego',
+  'b3228' => 'Jeziorzany Górskie Domy (nż)',
+  'b2904' => 'Jeziorzany Pętla',
+  'b2903' => 'Jeziorzany Rondo (nż)',
+  'b655'  => 'Jeżowa',
+  'b2617' => 'Jordanowska (nż)',
+  'b319'  => 'Jubilat',
+  'b758'  => 'Judyma',
+  'b2792' => 'Judyma Szkoła',
+  'b742'  => 'Jugowicka',
+  'b3190' => 'Jurczaka (nż)',
+  'b2488' => 'Jurczyce Dom Ludowy',
+  'b2490' => 'Jurczyce Podole (nż)',
+  'b2489' => 'Jurczyce Szkoła (nż)',
+  'b3234' => 'Jędrzejczyka (nż)',
+  'b624'  => 'Kabel',
+  'b1222' => 'Kamień Dół (nż)',
+  'b3279' => 'Kamień Szkoła',
+  'b620'  => 'Kamieńskiego',
+  'b619'  => 'Kamieńskiego Wiadukt (nż)',
+  'b2690' => 'Kampus UJ',
+  'b445'  => 'Kantorowice',
+  'b576'  => 'Kapelanka',
+  'b3206' => 'Karniowice Górki (nż)',
+  'b3205' => 'Karniowice Pętla',
+  'b877'  => 'Karniów',
+  'b546'  => 'Karowa (nż)',
+  'b717'  => 'Karpińskiego',
+  'b147'  => 'Kasztanowa',
+  'b283'  => 'Kaszów',
+  'b282'  => 'Kaszów II (nż)',
+  'b284'  => 'Kaszów Tyrałówka (nż)',
+  'b2886' => 'Kaszów Wyźrał (nż)',
+  'b285'  => 'Kaszów Łysa Góra (nż)',
+  'b13'   => 'Katowicka',
+  'b82'   => 'Kawiory',
+  'b945'  => 'Kenara (nż)',
+  'b427'  => 'Klasztor Cystersów',
+  'b429'  => 'Klasztorna',
+  'b382'  => 'Kleeberga',
+  'b1054' => 'Kleszczów',
+  'b2864' => 'Kleszczów Pod Lipką (nż)',
+  'b946'  => 'Klimeckiego',
+  'b935'  => 'Kliny Zacisze',
+  'b768'  => 'Kobierzyn',
+  'b584'  => 'Kobierzyńska',
+  'b3207' => 'Kobylany Dworska (nż)',
+  'b3204' => 'Kobylany Kwiatowa',
+  'b1065' => 'Kobylany Remiza (nż)',
+  'b215'  => 'Kochanów',
+  'b214'  => 'Kochanów I (nż)',
+  'b3042' => 'Kocmyrzów',
+  'b3001' => 'Kocmyrzów Biblioteka',
+  'b1257' => 'Kocmyrzów Krzyżówka (nż)',
+  'b3000' => 'Kocmyrzów Rondo',
+  'b3005' => 'Kocmyrzów Sodfiny (nż)',
+  'b1158' => 'Kokotów I (nż)',
+  'b1162' => 'Kokotów II (nż)',
+  'b457'  => 'Koksochemia (nż)',
+  'b2563' => 'Kolna (nż)',
+  'b459'  => 'Kombinat',
+  'b313'  => 'Komorowskiego',
+  'b830'  => 'Komuny Paryskiej',
+  'b799'  => 'Konary',
+  'b3052' => 'Konary Pod Sosenką (nż)',
+  'b1347' => 'Konary Sęk (nż)',
+  'b805'  => 'Konary Włosań (nż)',
+  'b326'  => 'Konopnickiej',
+  'b148'  => 'Kopalina (nż)',
+  'b2932' => 'Kopanka Druga (nż)',
+  'b2484' => 'Kopanka Kapliczka (nż)',
+  'b2813' => 'Kopanka Kościół (nż)',
+  'b2931' => 'Kopanka Pętla',
+  'b2485' => 'Kopanka Szkoła',
+  'b242'  => 'Kopiec Kościuszki',
+  'b571'  => 'Korona',
+  'b2970' => 'Korzkiew Botoja (nż)',
+  'b2971' => 'Korzkiew Zamek (nż)',
+  'b156'  => 'Kosmowskiej (nż)',
+  'b706'  => 'Kosocice',
+  'b2585' => 'Kosocicka (nż)',
+  'b601'  => 'Kostrze',
+  'b597'  => 'Kostrze Kapliczka (nż)',
+  'b599'  => 'Kostrze OSP',
+  'b605'  => 'Kostrze Szkoła',
+  'b2559' => 'Koszykarska',
+  'b3063' => 'Kozienicka',
+  'b342'  => 'Kozierów Skrzyżowanie (nż)',
+  'b1139' => 'Kończyce',
+  'b2644' => 'Kościelniki',
+  'b2861' => 'Kraków Airport',
+  'b2975' => 'Krasieniec Pod Lipą',
+  'b346'  => 'Krasieniec Remiza (nż)',
+  'b345'  => 'Krasieniec Stary (nż)',
+  'b934'  => 'Krasieniec Zakupny',
+  'b998'  => 'Krasnowolskiego (nż)',
+  'b62'   => 'Krowoderskich Zuchów',
+  'b63'   => 'Krowodrza Górka',
+  'b2601' => 'Krowodrza Urzędy Skarbowe',
+  'b381'  => 'Kruszwicka',
+  'b258'  => 'Kryspinów',
+  'b257'  => 'Kryspinów Sanka (nż)',
+  'b2895' => 'Kryspinów Stopień Wodny (nż)',
+  'b702'  => 'Krzemieniecka (nż)',
+  'b3250' => 'Krzeszowice Dworzec Autobusowy',
+  'b2923' => 'Krzeszowice Krakowska Muzeum (nż)',
+  'b1044' => 'Krzeszowice Witaminka (nż)',
+  'b3134' => 'Krzesławice Młyn (nż)',
+  'b1192' => 'Krzyszkowice Kasztanowa I (nż)',
+  'b1193' => 'Krzyszkowice Kasztanowa II (nż)',
+  'b1191' => 'Krzyszkowice Kościół (nż)',
+  'b2817' => 'Krzyszkowice Krzyszkowicka',
+  'b1194' => 'Krzyszkowice Modrzewiowa (nż)',
+  'b2740' => 'Krzyszkowice Os.Szymanowskiego (nż)',
+  'b1195' => 'Krzyszkowice Różana (nż)',
+  'b1248' => 'Krzysztoforzyce Góra (nż)',
+  'b3230' => 'Krzysztoforzyce Pętla',
+  'b3043' => 'Krzysztoforzyce Sklep (nż)',
+  'b1256' => 'Krzysztoforzyce przy Dworze (nż)',
+  'b1169' => 'Krzęcin Cmentarz (nż)',
+  'b1357' => 'Krzęcin Częsna (nż)',
+  'b1098' => 'Krzęcin Kapliczka (nż)',
+  'b1096' => 'Krzęcin Kościół',
+  'b2928' => 'Krzęcin Pętla',
+  'b1095' => 'Krzęcin Sklep',
+  'b1099' => 'Krzęcin Szkoła',
+  'b150'  => 'Królowej Jadwigi',
+  'b2739' => 'Ks.Targosza (nż)',
+  'b675'  => 'Ks.Łaczka (nż)',
+  'b1140' => 'Książniczki Boisko (nż)',
+  'b1142' => 'Książniczki Centrum',
+  'b1143' => 'Książniczki Las (nż)',
+  'b544'  => 'Kujawy',
+  'b567'  => 'Kuklińskiego',
+  'b884'  => 'Kulerzów (nż)',
+  'b885'  => 'Kulerzów Wąwóz (nż)',
+  'b387'  => 'Kupały',
+  'b3176' => 'Kurdwanów P+R',
+  'b709'  => 'Kurdwanów Szkoła',
+  'b3136' => 'Kurzei',
+  'b98'   => 'Kuźnicy Kołłątajowskiej',
+  'b527'  => 'Kąkolowa (nż)',
+  'b759'  => 'Kąpielowa (nż)',
+  'b3180' => 'Kępa (nż)',
+  'b1220' => 'Kłokoczyn (nż)',
+  'b3074' => 'Kłuszyńska',
+  'b140'  => 'Lajkonika (nż)',
+  'b694'  => 'Landaua',
+  'b750'  => 'Las Borkowski (nż)',
+  'b2557' => 'Lasek Mogilski',
+  'b2790' => 'Lasek Łęgowski (nż)',
+  'b337'  => 'Laskowiec (nż)',
+  'b3217' => 'Lednica Górna (nż)',
+  'b3216' => 'Lednica Górna Chorągwica (nż)',
+  'b65'   => 'Lekarska',
+  'b554'  => 'Lesisko',
+  'b2619' => 'Leszka Białego',
+  'b157'  => 'Leśmiana (nż)',
+  'b3071' => 'Libertowska (nż)',
+  'b2706' => 'Libertów',
+  'b2638' => 'Libertów Dolny (nż)',
+  'b2925' => 'Libertów Droga do Sidziny (nż)',
+  'b2711' => 'Libertów Działy (nż)',
+  'b2710' => 'Libertów Krzyżówka',
+  'b2707' => 'Libertów Szkoła',
+  'b2772' => 'Libertów Zgodna (nż)',
+  'b2524' => 'Lindego (nż)',
+  'b2686' => 'Lipińskiego',
+  'b837'  => 'Lipowskiego (nż)',
+  'b561'  => 'Lipska',
+  'b289'  => 'Liszki I (nż)',
+  'b286'  => 'Liszki Krzyżówka',
+  'b2899' => 'Liszki Tyniecka (nż)',
+  'b287'  => 'Liszki UG',
+  'b2887' => 'Liszki Wołowska Droga (nż)',
+  'b126'  => 'Lubicz',
+  'b94'   => 'Lublańska',
+  'b468'  => 'Lubocza Bugaj (nż)',
+  'b467'  => 'Lubocza PKP (nż)',
+  'b469'  => 'Lubocza Przychodnia',
+  'b470'  => 'Lubocza Szkoła',
+  'b471'  => 'Lubocza Trafo (nż)',
+  'b472'  => 'Luborzyca',
+  'b3002' => 'Luborzyca Szkoła',
+  'b937'  => 'Lubostroń (nż)',
+  'b2808' => 'Ludwinów',
+  'b2905' => 'Lusina (nż)',
+  'b2936' => 'Lusina Dobrzyczany (nż)',
+  'b722'  => 'Lusina Dolna (nż)',
+  'b1003' => 'Lusina Dwór',
+  'b2637' => 'Lusina Granica',
+  'b801'  => 'Lusina Górka (nż)',
+  'b3184' => 'Lusina Krakówka (nż)',
+  'b2937' => 'Lusina Kraśnik (nż)',
+  'b1000' => 'Lusina Pętla',
+  'b1002' => 'Lusina Spacerowa',
+  'b1001' => 'Lusina Szkoła',
+  'b2938' => 'Lusina Zagrody (nż)',
+  'b2935' => 'Lusina Zielona',
+  'b1196' => 'Lusina Łany (nż)',
+  'b930'  => 'M1 Al. Pokoju',
+  'b2736' => 'M1 Nowohucka',
+  'b1269' => 'Maciejowice Góra (nż)',
+  'b3159' => 'Maciejowice Pętla',
+  'b3168' => 'Maciejowice Skrzyżowanie (nż)',
+  'b37'   => 'Mackiewicza',
+  'b3123' => 'Magazynowa (nż)',
+  'b96'   => 'Majora',
+  'b626'  => 'Makowa',
+  'b56'   => 'Makowskiego',
+  'b2542' => 'Makuszyńskiego (nż)',
+  'b625'  => 'Malborska',
+  'b880'  => 'Malborska Szkoła',
+  'b310'  => 'Malczewskiego (nż)',
+  'b2589' => 'Malinowskiego (nż)',
+  'b1130' => 'Marchołta',
+  'b3004' => 'Marszowice (nż)',
+  'b3003' => 'Marszowice Centrum (nż)',
+  'b1319' => 'Marszowice Góry (nż)',
+  'b2983' => 'Maszyce (nż)',
+  'b1174' => 'Maszyce Remiza (nż)',
+  'b1152' => 'Maszyce Skrzyżowanie (nż)',
+  'b2982' => 'Masłomiąca (nż)',
+  'b2981' => 'Masłomiąca Staw (nż)',
+  'b90'   => 'Mazowiecka',
+  'b941'  => 'Mała Góra (nż)',
+  'b2496' => 'Mała Wieś (nż)',
+  'b1263' => 'Mały Płaszów',
+  'b406'  => 'Medweckiego',
+  'b3109' => 'Mehoffera',
+  'b995'  => 'Meissnera',
+  'b3130' => 'Merkuriusza Polskiego',
+  'b85'   => 'Miasteczko Studenckie AGH',
+  'b331'  => 'Michałowice (nż)',
+  'b1058' => 'Michałowice Banasiówka (nż)',
+  'b2967' => 'Michałowice Brzozowa (nż)',
+  'b2963' => 'Michałowice Gościniec (nż)',
+  'b2964' => 'Michałowice Górna (nż)',
+  'b333'  => 'Michałowice I',
+  'b336'  => 'Michałowice II (nż)',
+  'b332'  => 'Michałowice Komora (nż)',
+  'b905'  => 'Michałowice Koźlica (nż)',
+  'b2506' => 'Michałowice Kwiaty Polne (nż)',
+  'b2507' => 'Michałowice Las Michałowski (nż)',
+  'b335'  => 'Michałowice Lecznica (nż)',
+  'b2965' => 'Michałowice Michałówka (nż)',
+  'b1145' => 'Michałowice Ogrodowa (nż)',
+  'b2729' => 'Michałowice Ośrodek Zdrowia',
+  'b1055' => 'Michałowice Ujęcie Wody (nż)',
+  'b104'  => 'Miechowity',
+  'b362'  => 'Miodowa',
+  'b375'  => 'Mistrzejowice',
+  'b2538' => 'Miśnieńska',
+  'b2882' => 'Mników Droga do Kaszowa (nż)',
+  'b3232' => 'Mników Granica (nż)',
+  'b2714' => 'Mników Pańska Góra (nż)',
+  'b2715' => 'Mników Skały (nż)',
+  'b248'  => 'Mników Sklep (nż)',
+  'b3104' => 'Mników Zarynnie (nż)',
+  'b2516' => 'Mobilis',
+  'b2694' => 'Mochnaniec (nż)',
+  'b986'  => 'Modlnica',
+  'b968'  => 'Modlnica I Kolonia (nż)',
+  'b969'  => 'Modlnica II (nż)',
+  'b985'  => 'Modlnica Skrzyżowanie (nż)',
+  'b2875' => 'Modlnica Trojadyn Szydło (nż)',
+  'b984'  => 'Modlniczka',
+  'b983'  => 'Modlniczka I (nż)',
+  'b3251' => 'Modlniczka Leroy Merlin (nż)',
+  'b197'  => 'Modlniczka Mała',
+  'b1353' => 'Modlniczka Poligon (nż)',
+  'b1046' => 'Modlniczka Trzcie (nż)',
+  'b2499' => 'Mogilany Cicha (nż)',
+  'b888'  => 'Mogilany Cmentarz (nż)',
+  'b2953' => 'Mogilany Kopce (nż)',
+  'b793'  => 'Mogilany Ośrodek Zdrowia (nż)',
+  'b792'  => 'Mogilany Rynek',
+  'b794'  => 'Mogilany Wiadukt (nż)',
+  'b806'  => 'Mogilany Włosań (nż)',
+  'b233'  => 'Morawica',
+  'b234'  => 'Morawica Cmentarz (nż)',
+  'b232'  => 'Morawica Krzyżówka',
+  'b231'  => 'Morawica Mostek (nż)',
+  'b3105' => 'Morawica Rudki (nż)',
+  'b3119' => 'Morcinka (nż)',
+  'b1239' => 'Most Kotlarski (nż)',
+  'b565'  => 'Motyla',
+  'b460'  => 'Mrozowa (nż)',
+  'b974'  => 'Murownia (nż)',
+  'b3060' => 'Murownia Pętla',
+  'b1015' => 'Muzeum Armii Krajowej (nż)',
+  'b3141' => 'Muzeum Narodowe',
+  'b8'    => 'Mydlniki',
+  'b2525' => 'Mydlniki Granica Miasta (nż)',
+  'b9'    => 'Mydlniki Stawy (nż)',
+  'b740'  => 'Myślenicka (nż)',
+  'b3262' => 'Młodej Polski (nż)',
+  'b1144' => 'Młodziejowice Młyn (nż)',
+  'b1141' => 'Młodziejowice Park',
+  'b636'  => 'Młodzieży (nż)',
+  'b1040' => 'Młynka (nż)',
+  'b218'  => 'Młynka I (nż)',
+  'b1'    => 'Młynka Pętla',
+  'b2908' => 'Młynówka SKA (nż)',
+  'b2616' => 'Na Budzyniu',
+  'b273'  => 'Na Krępaku (nż)',
+  'b550'  => 'Na Załęczu',
+  'b549'  => 'Na Załęczu Szkoła (nż)',
+  'b645'  => 'Nad Drwiną',
+  'b2541' => 'Nad Dłubnią',
+  'b2656' => 'Nadbrzezie (nż)',
+  'b2966' => 'Narama Remiza',
+  'b121'  => 'Narzymskiego',
+  'b2606' => 'Natansona',
+  'b1042' => 'Nawojowa Góra I (nż)',
+  'b1043' => 'Nawojowa Góra II (nż)',
+  'b2775' => 'Nałkowskiej',
+  'b2594' => 'Niebieska Autostrada (nż)',
+  'b3278' => 'Niebyła (nż)',
+  'b1327' => 'Niedźwiedź Felix (nż)',
+  'b1326' => 'Niedźwiedź PKP (nż)',
+  'b1187' => 'Nielepice',
+  'b1235' => 'Nielepice Stadnina (nż)',
+  'b1278' => 'Niepołomice Batorego (nż)',
+  'b1279' => 'Niepołomice Batorego II (nż)',
+  'b1306' => 'Niepołomice Boryczów (nż)',
+  'b1300' => 'Niepołomice Diesla (nż)',
+  'b1276' => 'Niepołomice Dworzec',
+  'b1289' => 'Niepołomice Jazy (nż)',
+  'b1290' => 'Niepołomice Jazy II (nż)',
+  'b964'  => 'Niepołomice Kolejowa (nż)',
+  'b1303' => 'Niepołomice Kościuszki (nż)',
+  'b1298' => 'Niepołomice Kątek (nż)',
+  'b1275' => 'Niepołomice Moczydło (nż)',
+  'b1297' => 'Niepołomice Pasternik (nż)',
+  'b1296' => 'Niepołomice Podgrabie (nż)',
+  'b1299' => 'Niepołomice Poręby (nż)',
+  'b1302' => 'Niepołomice Płaszowska I (nż)',
+  'b1277' => 'Niepołomice Rynek',
+  'b1307' => 'Niepołomice Wielicka (nż)',
+  'b1301' => 'Niepołomice Wodna (nż)',
+  'b2688' => 'Norymberska',
+  'b280'  => 'Nowa Wieś (nż)',
+  'b1197' => 'Nowa Wieś Jesionka (nż)',
+  'b281'  => 'Nowa Wieś Kapliczka (nż)',
+  'b279'  => 'Nowa Wieś Kościół (nż)',
+  'b278'  => 'Nowa Wieś Szlachecka',
+  'b395'  => 'Nowolipki (nż)',
+  'b715'  => 'Nowosądecka',
+  'b3175' => 'Nowy Bieżanów P+R (nż)',
+  'b2581' => 'Nowy Bieżanów Południe',
+  'b71'   => 'Nowy Kleparz',
+  'b2582' => 'Nowy Prokocim',
+  'b3068' => 'Obserwatorium (nż)',
+  'b1313' => 'Ochmanów Oknoplast (nż)',
+  'b2727' => 'Ochmanów Otaczarnia (nż)',
+  'b1171' => 'Ochodza',
+  'b1329' => 'Ochodza Dom Ludowy (nż)',
+  'b1331' => 'Ochodza Odwiśle',
+  'b1330' => 'Ochodza Staw (nż)',
+  'b2951' => 'Ochojno Dąbrówki',
+  'b863'  => 'Ochojno Kamieniec',
+  'b861'  => 'Ochojno Remiza',
+  'b860'  => 'Ochojno Skrzyżowanie (nż)',
+  'b2655' => 'Oczyszczalnia Ścieków \'Kujawy\' (nż)',
+  'b553'  => 'Odmętowa',
+  'b369'  => 'Ofiar Dąbia',
+  'b18'   => 'Ojcowska',
+  'b16'   => 'Ojcowska Dworek',
+  'b17'   => 'Ojcowska Wągroda',
+  'b103'  => 'Olsza II',
+  'b161'  => 'Olszanica Bory',
+  'b158'  => 'Olszanica Kapliczka (nż)',
+  'b2534' => 'Olszanica Ogródki Działkowe (nż)',
+  'b102'  => 'Olszecka',
+  'b761'  => 'Opatkowice',
+  'b760'  => 'Opatkowice Wiadukt (nż)',
+  'b2634' => 'Opatkowice Zadworze',
+  'b92'   => 'Opolska Estakada',
+  'b48'   => 'Opolska Kładka',
+  'b431'  => 'Orkana',
+  'b3064' => 'Orszy-Broniewskiego',
+  'b3187' => 'Orłowskiego (nż)',
+  'b3114' => 'Os.Akademickie PK',
+  'b111'  => 'Os.Dywizjonu 303',
+  'b421'  => 'Os.Górali',
+  'b402'  => 'Os.Jagiellońskie',
+  'b386'  => 'Os.Kalinowe',
+  'b756'  => 'Os.Kliny',
+  'b413'  => 'Os.Kolorowe',
+  'b404'  => 'Os.Kościuszkowskie',
+  'b710'  => 'Os.Kurdwanów',
+  'b28'   => 'Os.Marszowiec',
+  'b2737' => 'Os.Mistrzejowice Nowe',
+  'b391'  => 'Os.Na Lotnisku',
+  'b424'  => 'Os.Na Skarpie',
+  'b939'  => 'Os.Na Stoku',
+  'b436'  => 'Os.Na Stoku Szkoła',
+  'b108'  => 'Os.Oświecenia',
+  'b378'  => 'Os.Piastów',
+  'b2812' => 'Os.Podwawelskie',
+  'b582'  => 'Os.Robotnicze',
+  'b390'  => 'Os.Strusia',
+  'b428'  => 'Os.Wandy',
+  'b430'  => 'Os.Willowe',
+  'b418'  => 'Os.Zgody',
+  'b422'  => 'Os.Zielone',
+  'b377'  => 'Os.Złotego Wieku',
+  'b1243' => 'Os.Łokietka',
+  'b2643' => 'Ostafina',
+  'b2969' => 'Owczary (nż)',
+  'b2631' => 'Owczary Długa (nż)',
+  'b2632' => 'Owczary Gajowa (nż)',
+  'b2630' => 'Owczary Górna (nż)',
+  'b2968' => 'Owczary Pętla',
+  'b817'  => 'PB',
+  'b3135' => 'PCK',
+  'b819'  => 'PP',
+  'b818'  => 'PW',
+  'b2526' => 'Pachońskiego',
+  'b963'  => 'Panieńskich Skał (nż)',
+  'b2560' => 'Park \'Skały Twardowskiego\' (nż)',
+  'b143'  => 'Park Decjusza',
+  'b1004' => 'Park Wodny',
+  'b3149' => 'Park Zdrojowy',
+  'b15'   => 'Pasternik (nż)',
+  'b2776' => 'Petrażyckiego (nż)',
+  'b3070' => 'Petrażyckiego Osiedle (nż)',
+  'b3191' => 'Petőfiego (nż)',
+  'b716'  => 'Piaski Nowe',
+  'b687'  => 'Piaski Wielkie',
+  'b3177' => 'Piaskowa (nż)',
+  'b379'  => 'Piasta Kołodzieja',
+  'b2529' => 'Piaszczysta',
+  'b270'  => 'Piekary',
+  'b2898' => 'Piekary Borki (nż)',
+  'b2900' => 'Piekary Dół (nż)',
+  'b868'  => 'Piekary Górne',
+  'b2897' => 'Piekary Korea (nż)',
+  'b2896' => 'Piekary Na Brzegu (nż)',
+  'b1189' => 'Piekary Pałac (nż)',
+  'b269'  => 'Piekary Sklep (nż)',
+  'b2985' => 'Pielgrzymowice (nż)',
+  'b2986' => 'Pielgrzymowice Granica (nż)',
+  'b2984' => 'Pielgrzymowice Pętla',
+  'b3035' => 'Pielęgniarek',
+  'b119'  => 'Pilotów',
+  'b1036' => 'Pisary (nż)',
+  'b1236' => 'Pisary Dwór (nż)',
+  'b2860' => 'Pisary Kasztanowa (nż)',
+  'b1037' => 'Pisary Kiosk (nż)',
+  'b1038' => 'Pisary Mleczarnia (nż)',
+  'b1041' => 'Pisary Skrzyżowanie (nż)',
+  'b3263' => 'Plac Axentowicza',
+  'b570'  => 'Plac Bohaterów Getta',
+  'b2744' => 'Plac Centralny im. R.Reagana',
+  'b79'   => 'Plac Inwalidów',
+  'b360'  => 'Plac Wolnica',
+  'b1360' => 'Plac Wszystkich Świętych',
+  'b47'   => 'Pleszowska',
+  'b458'  => 'Pleszów',
+  'b357'  => 'Poczta Główna',
+  'b944'  => 'Pod Fortem',
+  'b1014' => 'Pod Lipą (nż)',
+  'b812'  => 'Podgaje',
+  'b603'  => 'Podgórki Tynieckie',
+  'b3158' => 'Podgórze SKA',
+  'b517'  => 'Podstawie (nż)',
+  'b644'  => 'Podwierzbie',
+  'b1311' => 'Podłęże Balachówka (nż)',
+  'b1309' => 'Podłęże Centrum (nż)',
+  'b2728' => 'Podłęże Przedszkole (nż)',
+  'b1310' => 'Podłęże Straż (nż)',
+  'b956'  => 'Polana Żywiecka (nż)',
+  'b1093' => 'Polanka Hallera Dwór',
+  'b1318' => 'Polanowice (nż)',
+  'b1323' => 'Polanowice Kolonia (nż)',
+  'b73'   => 'Politechnika',
+  'b380'  => 'Popielidów',
+  'b833'  => 'Poronińska (nż)',
+  'b97'   => 'Powstańców',
+  'b1155' => 'Powstańców Garaże',
+  'b3195' => 'Powstańców Magazyny',
+  'b2806' => 'Poziomkowa',
+  'b580'  => 'Praska (nż)',
+  'b3010' => 'Prawocheńskiego (nż)',
+  'b2746' => 'Prokocim Rynek',
+  'b682'  => 'Prokocim Szpital',
+  'b684'  => 'Prokocim UJ',
+  'b633'  => 'Prosta',
+  'b479'  => 'Prusy',
+  'b478'  => 'Prusy Szkoła (nż)',
+  'b477'  => 'Prusy WSR (nż)',
+  'b671'  => 'Pruszyńskiego',
+  'b3219' => 'Przebieczany',
+  'b1214' => 'Przeginia Duchowna (nż)',
+  'b1228' => 'Przeginia Duchowna Bar (nż)',
+  'b1199' => 'Przeginia Duchowna Centrum',
+  'b1198' => 'Przeginia Duchowna Szkoła (nż)',
+  'b1227' => 'Przeginia Narodowa (nż)',
+  'b2906' => 'Przeginia Narodowa Bonar (nż)',
+  'b316'  => 'Przegon',
+  'b275'  => 'Przegorzały',
+  'b3182' => 'Przegorzały Obwodnica (nż)',
+  'b641'  => 'Przewóz',
+  'b904'  => 'Przy Kuźni (nż)',
+  'b2530' => 'Przybyszewskiego',
+  'b190'  => 'Przybysławice I (nż)',
+  'b191'  => 'Przybysławice II',
+  'b1084' => 'Przybysławice III (nż)',
+  'b745'  => 'Przykopy (nż)',
+  'b532'  => 'Przylasek Rusiecki',
+  'b543'  => 'Przylasek Wyciąski (nż)',
+  'b2527' => 'Prądnik Biały',
+  'b870'  => 'Prądnik Biały Zachód',
+  'b100'  => 'Prądnik Czerwony',
+  'b1164' => 'Pszona',
+  'b1253' => 'Puszkarska',
+  'b2569' => 'Pychowice',
+  'b730'  => 'Pytlasińskiego',
+  'b3124' => 'Półłanki',
+  'b72'   => 'Pędzichów',
+  'b2703' => 'Pękowice',
+  'b2873' => 'Płaszowska',
+  'b564'  => 'Płaszów Szkoła',
+  'b660'  => 'Płk. Dąbka',
+  'b354'  => 'Raciborowice',
+  'b1138' => 'Raciborowice Centrum',
+  'b2988' => 'Raciborowice Granica (nż)',
+  'b154'  => 'Raczkiewicza (nż)',
+  'b1033' => 'Radwanowice I (nż)',
+  'b3208' => 'Radwanowice Krzeszowicka (nż)',
+  'b1032' => 'Radwanowice Pętla',
+  'b132'  => 'Radzikowskiego',
+  'b1376' => 'Radzikowskiego Osiedle',
+  'b788'  => 'Radziszów Centrum',
+  'b2774' => 'Radziszów Cmentarz (nż)',
+  'b789'  => 'Radziszów Kamionna (nż)',
+  'b1182' => 'Radziszów Kładka (nż)',
+  'b797'  => 'Radziszów Leśniczówka (nż)',
+  'b1186' => 'Radziszów PKP',
+  'b798'  => 'Radziszów Podlesie (nż)',
+  'b3233' => 'Radziszów Podlesie Las (nż)',
+  'b1184' => 'Radziszów Podwale (nż)',
+  'b2477' => 'Radziszów Stare Sanatorium (nż)',
+  'b3075' => 'Radziszów Szpital',
+  'b786'  => 'Radziszów Włosanka (nż)',
+  'b2491' => 'Radziszów Za Mogiłką (nż)',
+  'b1183' => 'Radziszów Zacisze (nż)',
+  'b787'  => 'Radziszów Zadworze (nż)',
+  'b1185' => 'Radziszów Zawodzie (nż)',
+  'b695'  => 'Rajsko',
+  'b1325' => 'Ratajów Skrzyżowanie (nż)',
+  'b3192' => 'Reduta (nż)',
+  'b502'  => 'Resztówka',
+  'b2568' => 'Rodzinna',
+  'b3041' => 'Rondo 308. Dywizjonu',
+  'b1066' => 'Rondo Barei',
+  'b408'  => 'Rondo Czyżyńskie',
+  'b365'  => 'Rondo Grzegórzeckie',
+  'b2539' => 'Rondo Hipokratesa',
+  'b2745' => 'Rondo Kocmyrzowskie im. Ks. Gorzelanego',
+  'b610'  => 'Rondo Matecznego',
+  'b125'  => 'Rondo Mogilskie',
+  'b118'  => 'Rondo Młyńskie',
+  'b12'   => 'Rondo Ofiar Katynia',
+  'b383'  => 'Rondo Piastowskie',
+  'b2689' => 'Rostworowskiego',
+  'b589'  => 'Ruczaj',
+  'b217'  => 'Rudawa (nż)',
+  'b1030' => 'Rudawa Bloki (nż)',
+  'b1031' => 'Rudawa Kościół',
+  'b1064' => 'Rudawa Młyn (nż)',
+  'b1059' => 'Rudawa PKP',
+  'b2924' => 'Rudawa Stadion (nż)',
+  'b1039' => 'Rudawa Szkoła',
+  'b2894' => 'Rusocice Droga do Kościoła (nż)',
+  'b1260' => 'Rusocice Jałowce (nż)',
+  'b1229' => 'Rusocice Skład (nż)',
+  'b2893' => 'Rusocice Stacja Benzynowa (nż)',
+  'b1230' => 'Rusocice Wieś',
+  'b1261' => 'Rusocice Załęg (nż)',
+  'b1225' => 'Rusocice Łęg (nż)',
+  'b520'  => 'Ruszcza',
+  'b653'  => 'Rybitwy Dom Kultury',
+  'b652'  => 'Rybitwy Rozjazd (nż)',
+  'b654'  => 'Rybitwy Sklep (nż)',
+  'b1209' => 'Rybna',
+  'b1367' => 'Rybna Dolna',
+  'b3103' => 'Rybna Droga do Sanki (nż)',
+  'b1213' => 'Rybna Dół (nż)',
+  'b1368' => 'Rybna Granica (nż)',
+  'b1208' => 'Rybna Nowy Świat',
+  'b2884' => 'Rybna Nowy Świat Góra (nż)',
+  'b1212' => 'Rybna Ośrodek Zdrowia (nż)',
+  'b2885' => 'Rybna Szkoła (nż)',
+  'b1341' => 'Rybna Zagórze (nż)',
+  'b579'  => 'Rynek Dębnicki',
+  'b616'  => 'Rynek Fałęcki',
+  'b1262' => 'Rzebika',
+  'b611'  => 'Rzemieślnicza',
+  'b3009' => 'Rzepakowa (nż)',
+  'b2654' => 'Rzepakowa Świetlica (nż)',
+  'b153'  => 'Rzepichy (nż)',
+  'b855'  => 'Rzeszotary',
+  'b859'  => 'Rzeszotary Górne (nż)',
+  'b2940' => 'Rzeszotary Panciawa (nż)',
+  'b2939' => 'Rzeszotary Panciawa Pętla',
+  'b2778' => 'Rzeszotary Pod Dębiną (nż)',
+  'b858'  => 'Rzeszotary Polanki (nż)',
+  'b857'  => 'Rzeszotary Szkoła (nż)',
+  'b2732' => 'Rzeszotary Tempo (nż)',
+  'b856'  => 'Rzeszotary Trafo (nż)',
+  'b842'  => 'Rzeszotary Zalesie (nż)',
+  'b1087' => 'Rzozów Baseny (nż)',
+  'b1088' => 'Rzozów I (nż)',
+  'b1180' => 'Rzozów PKP (nż)',
+  'b1179' => 'Rzozów Skotnica (nż)',
+  'b1089' => 'Rzozów Szkoła',
+  'b1181' => 'Rzozów Zagonnie (nż)',
+  'b196'  => 'Rząska Autostrada (nż)',
+  'b193'  => 'Rząska Jednostka Wojskowa (nż)',
+  'b3199' => 'Rząska Szkoła',
+  'b194'  => 'Rząska UR (nż)',
+  'b55'   => 'Różyckiego',
+  'b3061' => 'Rączna Bażanty (nż)',
+  'b2902' => 'Rączna Boisko (nż)',
+  'b1217' => 'Rączna Dzikowiec (nż)',
+  'b296'  => 'Rączna Kapliczka (nż)',
+  'b1370' => 'Rączna Kościół (nż)',
+  'b2901' => 'Rączna OSP (nż)',
+  'b306'  => 'Rączna Osiedle (nż)',
+  'b1216' => 'Rączna Podlas (nż)',
+  'b3044' => 'Rżąka',
+  'b2762' => 'Sadowie (nż)',
+  'b311'  => 'Salwator',
+  'b3152' => 'Sapalskiego (nż)',
+  'b559'  => 'Saska',
+  'b3128' => 'Sawiczewskich',
+  'b3261' => 'Sewera (nż)',
+  'b772'  => 'Sidzina',
+  'b943'  => 'Sieborowice (nż)',
+  'b542'  => 'Siejówka (nż)',
+  'b142'  => 'Sielanka',
+  'b2547' => 'Sieroszewskiego (nż)',
+  'b32'   => 'Siewna',
+  'b33'   => 'Siewna Wiadukt',
+  'b1166' => 'Sikorki',
+  'b2556' => 'Siwka (nż)',
+  'b264'  => 'Skalna (nż)',
+  'b2731' => 'Skarżyńskiego',
+  'b779'  => 'Skawina',
+  'b1133' => 'Skawina 29 Listopada',
+  'b2473' => 'Skawina Ajka',
+  'b2854' => 'Skawina Bukowska (nż)',
+  'b2863' => 'Skawina Centrum Sportowe',
+  'b2475' => 'Skawina Cmentarz',
+  'b1137' => 'Skawina Cmentarz Komunalny',
+  'b1104' => 'Skawina Elektrownia (nż)',
+  'b2487' => 'Skawina Energetyków (nż)',
+  'b3008' => 'Skawina Energetyków Przejazd PKP (nż)',
+  'b2853' => 'Skawina Graniczna (nż)',
+  'b1086' => 'Skawina Koncentraty',
+  'b2930' => 'Skawina Kopernika (nż)',
+  'b1101' => 'Skawina Korabnicka (nż)',
+  'b1102' => 'Skawina Korabnicka Szkoła (nż)',
+  'b2481' => 'Skawina Korabniki',
+  'b2494' => 'Skawina Nad Potokiem (nż)',
+  'b2868' => 'Skawina Ofiar Katynia',
+  'b2929' => 'Skawina Ogrody (nż)',
+  'b2471' => 'Skawina Os.Radziszowskie (nż)',
+  'b2867' => 'Skawina Pileckiego',
+  'b1103' => 'Skawina Piłsudskiego',
+  'b1107' => 'Skawina Podbory (nż)',
+  'b2927' => 'Skawina Podgórki Skawińskie',
+  'b2476' => 'Skawina Podlipki',
+  'b2474' => 'Skawina Popiełuszki',
+  'b2472' => 'Skawina Radziszowska (nż)',
+  'b2486' => 'Skawina Robotnicza (nż)',
+  'b781'  => 'Skawina Rynek',
+  'b785'  => 'Skawina Rzepnik',
+  'b2480' => 'Skawina Samborek Most',
+  'b1134' => 'Skawina Starostwo Powiatowe',
+  'b1007' => 'Skawina Szkoła',
+  'b1008' => 'Skawina Sąd',
+  'b2479' => 'Skawina Tyniecka',
+  'b2478' => 'Skawina Tyniecka Osiedle',
+  'b3173' => 'Skawina Tyniecka Rzepnik (nż)',
+  'b1011' => 'Skawina Wojska Polskiego',
+  'b1100' => 'Skawina Wyspiańskiego',
+  'b2820' => 'Skawina Wyspiańskiego Szkoła (nż)',
+  'b1105' => 'Skawina Zachodnia (nż)',
+  'b219'  => 'Skała Kmity (nż)',
+  'b766'  => 'Skotniki',
+  'b3181' => 'Skotniki Kościół',
+  'b604'  => 'Skotniki Szkoła',
+  'b752'  => 'Skośna',
+  'b42'   => 'Skrajna (nż)',
+  'b953'  => 'Skrzeszowice',
+  'b967'  => 'Skrzyżowanie do Podchruścia (nż)',
+  'b1153' => 'Smardzowice',
+  'b2972' => 'Smardzowice Wołówka (nż)',
+  'b816'  => 'Smoleńskiego',
+  'b572'  => 'Smolki',
+  'b699'  => 'Soboniowice',
+  'b746'  => 'Solvay',
+  'b2544' => 'Sołtysowska (nż)',
+  'b2546' => 'Sołtysowska Osiedle',
+  'b2545' => 'Sołtysowska Zakłady',
+  'b116'  => 'Spadochroniarzy',
+  'b3276' => 'Spławy',
+  'b57'   => 'Stachiewicza',
+  'b1308' => 'Staniątki Wiadukt (nż)',
+  'b144'  => 'Stara Wola',
+  'b2558' => 'Stare Wiślisko',
+  'b358'  => 'Starowiślna',
+  'b3032' => 'Stary Kleparz',
+  'b2791' => 'Stawowa',
+  'b112'  => 'Stella-Sawickiego',
+  'b558'  => 'Stoczniowców',
+  'b711'  => 'Stojałowskiego',
+  'b359'  => 'Stradom',
+  'b423'  => 'Struga',
+  'b2874' => 'Strycharska',
+  'b101'  => 'Strzelców',
+  'b141'  => 'Strzelnica',
+  'b618'  => 'Sucha',
+  'b666'  => 'Sucharskiego (nż)',
+  'b456'  => 'Suchy Jar (nż)',
+  'b2602' => 'Sudolska (nż)',
+  'b476'  => 'Sulechów (nż)',
+  'b2570' => 'Surzyckiego',
+  'b2571' => 'Sułkowskiego',
+  'b2497' => 'Sułków (nż)',
+  'b739'  => 'Swoszowice Autostrada (nż)',
+  'b732'  => 'Swoszowice Poczta',
+  'b3129' => 'Swoszowice Szkoła',
+  'b869'  => 'Szafrańska',
+  'b562'  => 'Szczecińska',
+  'b2593' => 'Szczegów',
+  'b220'  => 'Szczyglice',
+  'b3045' => 'Szczyglice Autostrada',
+  'b871'  => 'Szczyglice Dom Kultury',
+  'b224'  => 'Szczyglice Most (nż)',
+  'b2910' => 'Szczyglice Podkamycze',
+  'b651'  => 'Szparagowa',
+  'b3203' => 'Szpital Jana Pawła II',
+  'b3036' => 'Szpital Narutowicza',
+  'b2759' => 'Szpital Okulistyczny',
+  'b827'  => 'Szpital Rydygiera',
+  'b425'  => 'Szpital Żeromskiego',
+  'b575'  => 'Szwedzka',
+  'b971'  => 'Szyce I (nż)',
+  'b970'  => 'Szyce II (nż)',
+  'b2646' => 'Szymańskiego (nż)',
+  'b628'  => 'Sławka (nż)',
+  'b2607' => 'Słomczyńskiego',
+  'b577'  => 'Słomiana',
+  'b2733' => 'Słomniki Kościuszki',
+  'b1315' => 'Słomniki Osiedle',
+  'b1316' => 'Słomniki Rynek',
+  'b1317' => 'Słomniki Zagłoby (nż)',
+  'b2584' => 'Słona Woda',
+  'b3138' => 'Słoneckiego',
+  'b314'  => 'Słonecznikowa',
+  'b2872' => 'TAURON Arena Kraków',
+  'b2871' => 'TAURON Arena Kraków Al. Pokoju (nż)',
+  'b3040' => 'TAURON Arena Kraków Wieczysta',
+  'b2724' => 'TR',
+  'b3172' => 'Taklińskiego (nż)',
+  'b77'   => 'Teatr Bagatela',
+  'b420'  => 'Teatr Ludowy',
+  'b3242' => 'Teatr Słowackiego',
+  'b681'  => 'Teligi',
+  'b919'  => 'Tischnera',
+  'b3218' => 'Tomaszkowice',
+  'b989'  => 'Tomaszowice',
+  'b2697' => 'Tomaszowice Gliniki (nż)',
+  'b988'  => 'Tomaszowice I (nż)',
+  'b3167' => 'Tomaszowice Kolberga (nż)',
+  'b987'  => 'Tomaszowice Wedonka (nż)',
+  'b139'  => 'Tondosa (nż)',
+  'b21'   => 'Tonie',
+  'b990'  => 'Tonie Gliniki (nż)',
+  'b25'   => 'Tonie Kąty (nż)',
+  'b23'   => 'Tonie Skrzyżowanie',
+  'b966'  => 'Tor Kajakowy',
+  'b936'  => 'Torfowa',
+  'b994'  => 'Trojadyn Skrzyżowanie (nż)',
+  'b184'  => 'Trojanowice',
+  'b2977' => 'Trojanowice Krakowska (nż)',
+  'b178'  => 'Trojanowice Pętla',
+  'b183'  => 'Trojanowice Strugi (nż)',
+  'b2650' => 'Truskawkowa (nż)',
+  'b2720' => 'Trzecia Góra (nż)',
+  'b3222' => 'Trąbki I (nż)',
+  'b3223' => 'Trąbki OSP',
+  'b3245' => 'Trąbki P+R',
+  'b714'  => 'Tuchowska',
+  'b999'  => 'Turowicza (nż)',
+  'b593'  => 'Tyniec',
+  'b591'  => 'Tyniec Kamieniołom',
+  'b2562' => 'Tyniecka Autostrada (nż)',
+  'b3140' => 'UR Aleja 29 Listopada',
+  'b5'    => 'UR Balicka',
+  'b115'  => 'Ugorek',
+  'b1017' => 'Ujazd Pętla',
+  'b127'  => 'Uniwersytet Ekonomiczny',
+  'b321'  => 'Uniwersytet Jagielloński',
+  'b88'   => 'Uniwersytet Pedagogiczny',
+  'b67'   => 'Urząd Marszałkowski',
+  'b957'  => 'Urząd Skarbowy Nowa Huta',
+  'b83'   => 'Urzędnicza',
+  'b486'  => 'Wadowska (nż)',
+  'b485'  => 'Wadów',
+  'b492'  => 'Wadów Działki (nż)',
+  'b2554' => 'Wadów Glinik (nż)',
+  'b2738' => 'Wadów Os.Kolejowe',
+  'b483'  => 'Wadów Osiedle (nż)',
+  'b484'  => 'Wadów Szkoła',
+  'b463'  => 'Walcownia (nż)',
+  'b2599' => 'Warchałowskiego',
+  'b3264' => 'Warmijska',
+  'b3131' => 'Warszewicza (nż)',
+  'b338'  => 'Warszówka (nż)',
+  'b2564' => 'Wały Wiślane (nż)',
+  'b2543' => 'Wańkowicza',
+  'b2639' => 'Ważewskiego',
+  'b2578' => 'Weigla',
+  'b133'  => 'Wesele',
+  'b434'  => 'Wiadukty (nż)',
+  'b2722' => 'Wielicka Granica Miasta',
+  'b898'  => 'Wieliczka Cmentarz',
+  'b3246' => 'Wieliczka Gdowska',
+  'b2852' => 'Wieliczka Goliana',
+  'b2862' => 'Wieliczka Kampus',
+  'b2814' => 'Wieliczka Klaśnieńska (nż)',
+  'b1167' => 'Wieliczka Kopalnia Soli',
+  'b911'  => 'Wieliczka Kościół',
+  'b2730' => 'Wieliczka Niepołomska (nż)',
+  'b3006' => 'Wieliczka Os.Asnyka',
+  'b2503' => 'Wieliczka Park',
+  'b3247' => 'Wieliczka Polna (nż)',
+  'b1168' => 'Wieliczka Rynek',
+  'b2816' => 'Wieliczka Solne Miasto',
+  'b3235' => 'Wieliczka Stacja Paliw',
+  'b2815' => 'Wieliczka Sąd',
+  'b972'  => 'Wielka Wieś (nż)',
+  'b1364' => 'Wielkie Drogi (nż)',
+  'b1232' => 'Wielkie Drogi Ośrodek Zdrowia (nż)',
+  'b1113' => 'Wielkie Drogi PKP (nż)',
+  'b1233' => 'Wielkie Drogi Szkoła (nż)',
+  'b1112' => 'Wielkie Drogi Trzebol (nż)',
+  'b866'  => 'Wiklinowa (nż)',
+  'b1267' => 'Wiktorowice Centrum (nż)',
+  'b1264' => 'Wiktorowice Granica (nż)',
+  'b3189' => 'Wiktorowice Rozlewnia Wód (nż)',
+  'b1266' => 'Wiktorowice Skrzyżowanie (nż)',
+  'b2515' => 'Wileńska',
+  'b737'  => 'Wilga (nż)',
+  'b1372' => 'Winnicka (nż)',
+  'b29'   => 'Witkowice',
+  'b30'   => 'Witkowice Nowe',
+  'b718'  => 'Witosa',
+  'b1025' => 'Więckowice (nż)',
+  'b2921' => 'Więckowice Lipka (nż)',
+  'b348'  => 'Więcławice Stare (nż)',
+  'b2987' => 'Więcławice Stare Wysyłek (nż)',
+  'b110'  => 'Wiślicka',
+  'b634'  => 'Wlotowa',
+  'b263'  => 'Wodociągi (nż)',
+  'b3115' => 'Wodociągowa (nż)',
+  'b1284' => 'Wola Batorska Borek (nż)',
+  'b1283' => 'Wola Batorska Cmentarz (nż)',
+  'b1282' => 'Wola Batorska Kościół (nż)',
+  'b1285' => 'Wola Batorska Mikoniowiec (nż)',
+  'b1280' => 'Wola Batorska Ruskie (nż)',
+  'b1286' => 'Wola Batorska Zamoglice (nż)',
+  'b1281' => 'Wola Batorska Żwirownia (nż)',
+  'b629'  => 'Wola Duchacka',
+  'b949'  => 'Wola Luborzycka (nż)',
+  'b1332' => 'Wola Luborzycka Działki (nż)',
+  'b950'  => 'Wola Luborzycka Las (nż)',
+  'b1128' => 'Wola Radziszowska',
+  'b1127' => 'Wola Radziszowska Centrum',
+  'b1129' => 'Wola Radziszowska Chorzyny (nż)',
+  'b1126' => 'Wola Radziszowska Lipki (nż)',
+  'b1124' => 'Wola Radziszowska Mała Ostra Góra (nż)',
+  'b1125' => 'Wola Radziszowska Most (nż)',
+  'b1336' => 'Wola Radziszowska Podgaźle (nż)',
+  'b1337' => 'Wola Radziszowska Łęg (nż)',
+  'b1291' => 'Wola Zabierzowska (nż)',
+  'b172'  => 'Wola Zachariaszowska',
+  'b2702' => 'Wola Zachariaszowska Kresy',
+  'b2976' => 'Wola Zachariaszowska Zakońce',
+  'b539'  => 'Wolica (nż)',
+  'b538'  => 'Wolica Kościół (nż)',
+  'b537'  => 'Wolica Las',
+  'b536'  => 'Wolica Most',
+  'b540'  => 'Wolica Sklep (nż)',
+  'b894'  => 'Wołowice (nż)',
+  'b3231' => 'Wołowice Grotowa (nż)',
+  'b3227' => 'Wołowice Grotowa Skrzyżowanie (nż)',
+  'b909'  => 'Wołowice Kapliczka (nż)',
+  'b1207' => 'Wołowice Niwa (nż)',
+  'b2907' => 'Wołowice Pichonówka (nż)',
+  'b1205' => 'Wołowice Sklep (nż)',
+  'b893'  => 'Wołowice Szkoła',
+  'b3229' => 'Wołowice Zawierzbie (nż)',
+  'b643'  => 'Wrobela',
+  'b68'   => 'Wrocławska',
+  'b2598' => 'Wrony',
+  'b2948' => 'Wrząsowice (nż)',
+  'b2946' => 'Wrząsowice Centrum',
+  'b1234' => 'Wrząsowice Kowaleca (nż)',
+  'b2950' => 'Wrząsowice Nad Wilgą',
+  'b2947' => 'Wrząsowice Pileckiego (nż)',
+  'b2952' => 'Wrząsowice Pod Skałą (nż)',
+  'b3212' => 'Wrząsowice Rondo',
+  'b2945' => 'Wrząsowice Wrzosowa (nż)',
+  'b2944' => 'Wrząsowice Zielona (nż)',
+  'b3148' => 'Wróblowice',
+  'b729'  => 'Wróblowice Szkoła',
+  'b499'  => 'Wróżenice',
+  'b2641' => 'Wróżenice Górka (nż)',
+  'b2640' => 'Wróżenicka (nż)',
+  'b60'   => 'Wybickiego',
+  'b2647' => 'Wyciąska (nż)',
+  'b508'  => 'Wyciąże (nż)',
+  'b515'  => 'Wyciąże Sklep (nż)',
+  'b521'  => 'Wyciąże Wiadukt (nż)',
+  'b2645' => 'Wyciąże Zachód (nż)',
+  'b683'  => 'Wydział Farmaceutyczny UJ',
+  'b43'   => 'Wyki',
+  'b2998' => 'Wysiołek Luborzycki (nż)',
+  'b2999' => 'Wysiołek Luborzycki Kapkazy (nż)',
+  'b1320' => 'Wysiołek Luborzycki Radwany (nż)',
+  'b2997' => 'Wysiołek Luborzycki Skrzyżowanie (nż)',
+  'b1259' => 'Wysłouchów',
+  'b292'  => 'Wyźrał Szkoła (nż)',
+  'b293'  => 'Wyźrał Wielka Droga (nż)',
+  'b442'  => 'Wzgórza Krzesławickie',
+  'b328'  => 'Węgrzce',
+  'b2980' => 'Węgrzce Bosutów (nż)',
+  'b2979' => 'Węgrzce Bosutów Sudół (nż)',
+  'b1079' => 'Węgrzce Błonie',
+  'b165'  => 'Węgrzce Centrum',
+  'b1074' => 'Węgrzce Centrum Medyczne (nż)',
+  'b1073' => 'Węgrzce Magiczne Wzgórze (nż)',
+  'b1080' => 'Węgrzce Pętla',
+  'b327'  => 'Węgrzce Starostwo Powiatowe',
+  'b1163' => 'Węgrzce Wielkie II (nż)',
+  'b1161' => 'Węgrzce Wielkie III (nż)',
+  'b3270' => 'Węgrzce Wielkie Pętla',
+  'b487'  => 'Węgrzynowice',
+  'b488'  => 'Węgrzynowice Centrum (nż)',
+  'b2552' => 'Węgrzynowice Dół (nż)',
+  'b3277' => 'Węgrzynowicka (nż)',
+  'b3127' => 'Węzeł Wielicki (nż)',
+  'b3118' => 'Władysława Jagiełły',
+  'b3110' => 'Władysława Łokietka',
+  'b807'  => 'Włosań',
+  'b3053' => 'Włosań Dział Wschodni (nż)',
+  'b809'  => 'Włosań Kopań (nż)',
+  'b808'  => 'Włosań Krzyżówka (nż)',
+  'b146'  => 'ZOO',
+  'b2495' => 'Zabawa (nż)',
+  'b2510' => 'Zabawa I (nż)',
+  'b199'  => 'Zabierzów',
+  'b1287' => 'Zabierzów Bocheński Centrum (nż)',
+  'b198'  => 'Zabierzów Działki (nż)',
+  'b3248' => 'Zabierzów Eximius Park',
+  'b202'  => 'Zabierzów I',
+  'b961'  => 'Zabierzów Młyn',
+  'b213'  => 'Zabierzów Ośrodek Zdrowia',
+  'b204'  => 'Zabierzów PKP',
+  'b203'  => 'Zabierzów Piaski (nż)',
+  'b201'  => 'Zabierzów Piekarnia',
+  'b3249' => 'Zabierzów Rynek',
+  'b200'  => 'Zabierzów Sklep',
+  'b503'  => 'Zabłocie Kościelnickie (nż)',
+  'b590'  => 'Zachodnia',
+  'b2888' => 'Zagacie (nż)',
+  'b2889' => 'Zagacie Witkówki (nż)',
+  'b916'  => 'Zagórzyce Dworskie',
+  'b917'  => 'Zagórzyce Stare (nż)',
+  'b397'  => 'Zajezdnia Bieńczyce',
+  'b465'  => 'Zajezdnia Nowa Huta',
+  'b2576' => 'Zajezdnia Płaszów',
+  'b1254' => 'Zajezdnia Wola Duchacka',
+  'b155'  => 'Zakamycze',
+  'b3179' => 'Zakarnie (nż)',
+  'b7'    => 'Zakliki (nż)',
+  'b2789' => 'Zakole',
+  'b1305' => 'Zakrzów (nż)',
+  'b2649' => 'Zakępie (nż)',
+  'b511'  => 'Zakład Przeróbki (nż)',
+  'b137'  => 'Zarzecze',
+  'b274'  => 'Zaskale (nż)',
+  'b356'  => 'Zastów',
+  'b1265' => 'Zastów Działki (nż)',
+  'b839'  => 'Zatyka (nż)',
+  'b755'  => 'Zawiszy',
+  'b751'  => 'Zawiła (nż)',
+  'b721'  => 'Zbydniowice',
+  'b3147' => 'Zbydniowicka',
+  'b1116' => 'Zelczyna I (nż)',
+  'b1115' => 'Zelczyna Sklep',
+  'b1170' => 'Zelczyna Szkoła (nż)',
+  'b3200' => 'Zelków Kościuszki (nż)',
+  'b3198' => 'Zelków Pętla',
+  'b2918' => 'Zelków Spławy (nż)',
+  'b210'  => 'Zelków Staw',
+  'b209'  => 'Zelków Wola (nż)',
+  'b447'  => 'Zesławice',
+  'b2621' => 'Zesławice Ogródki Działkowe (nż)',
+  'b581'  => 'Zielińskiego (nż)',
+  'b2784' => 'Zielonki Galicyjska (nż)',
+  'b2978' => 'Zielonki Marszowiec Pętla',
+  'b177'  => 'Zielonki Rozjazd',
+  'b182'  => 'Zielonki Skrzyżowanie',
+  'b180'  => 'Zielonki Transformator (nż)',
+  'b181'  => 'Zielonki UG',
+  'b149'  => 'Zielony Dół',
+  'b2577' => 'Złocieniowa',
+  'b811'  => 'Złocień',
+  'b679'  => 'Ćwiklińskiej',
+  'b922'  => 'Łagiewniki',
+  'b563'  => 'Łanowa',
+  'b3069' => 'Łobzów SKA',
+  'b951'  => 'Łososkowice',
+  'b952'  => 'Łososkowice Szkoła (nż)',
+  'b480'  => 'Łuczanowice',
+  'b482'  => 'Łuczanowice Skrzyżowanie',
+  'b3066' => 'Łuczanowicka (nż)',
+  'b1121' => 'Łuczyce',
+  'b1120' => 'Łuczyce Las (nż)',
+  'b1231' => 'Łuczyce Zjawienie (nż)',
+  'b2761' => 'Łuczyce Zwierzyniec (nż)',
+  'b2604' => 'Łuczyńskiego (nż)',
+  'b120'  => 'Łukasiewicza',
+  'b640'  => 'Łutnia',
+  'b2596' => 'Łużycka (nż)',
+  'b384'  => 'Łęczycka',
+  'b301'  => 'Ściejowice Granica (nż)',
+  'b3226' => 'Ściejowice Kościel (nż)',
+  'b1246' => 'Ściejowice Na Bagnach (nż)',
+  'b3225' => 'Ściejowice Remiza (nż)',
+  'b2610' => 'Ślaskiego (nż)',
+  'b1374' => 'Śliwiaka (nż)',
+  'b2517' => 'Śliwiaka Zakłady',
+  'b903'  => 'Ślósarczyka',
+  'b2742' => 'Św.Wawrzyńca',
+  'b2605' => 'Świdzińskiego (nż)',
+  'b2942' => 'Świątniki Bielowicza Szkoła',
+  'b2949' => 'Świątniki Buk (nż)',
+  'b847'  => 'Świątniki Centrum',
+  'b3051' => 'Świątniki Górne Piasna Górka (nż)',
+  'b2768' => 'Świątniki Krakowska (nż)',
+  'b845'  => 'Świątniki Skrzyżowanie (nż)',
+  'b2943' => 'Świątniki Urząd Miasta i Gminy',
+  'b2592' => 'Żelazowskiego (nż)',
+  'b343'  => 'Żerkowice Kolonia (nż)',
+  'b344'  => 'Żerkowice Skrzyżowanie (nż)',
+  'b417'  => 'Żeromskiego',
+  'b534'  => 'Żwirownia',
+  'b748'  => 'Żywiecka',
+  'b834'  => 'Żyzna (nż)',
 );

--
Gitblit v1.9.1