Bezplatné kredity AWS pro startupy 2026: Až 300 000 $

AWS nabízí startupům 1 000 až 300 000 USD v podobě bezplatných kreditů v rámci několika programů. Využijte je pro Bedrock, Claude a zátěže spojené s AI. Začněte s AI Perks.

Author Avatar
Andrew
AI Perks Team
13,228
AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

Kolik bezplatných kreditů AWS mohou startupy získat v roce 2026?

AWS nabízí startupům 1 000 až 300 000 $ v podobě bezplatných kreditů v závislosti na vaší fázi, afiliacích a programech, na které máte nárok. Tyto kredity fungují napříč všemi službami AWS – včetně Amazon Bedrock, který umožňuje spouštět Claude, Mistral, Llama a další modely umělé inteligence prostřednictvím jediného API.

Pro startupy v oblasti umělé inteligence jsou kredity AWS největším programem cloudových kreditů dostupným v roce 2026, který výrazně převyšuje to, co nabízejí Azure nebo Google Cloud prostřednictvím srovnatelných programů. Pokrývají nejen výpočetní výkon a úložiště, ale také inferenci základních modelů prostřednictvím Bedrock. AI Perks poskytuje průvodce pro každý program kreditů AWS a ukazuje, jak je můžete kombinovat s kredity od jiných poskytovatelů.


AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

Jak fungují programy kreditů pro startupy AWS?

AWS provozuje více programů kreditů pro startupy v různých fázích. Rozsah kreditů se značně liší v závislosti na profilu vašeho startupu a většina startupů má nárok na více, než si uvědomuje.

Fáze vašeho startupuRozsah kreditůKlíčový faktor
Právě začínámeAž 1 000 $Základní žádost
Akcelerátor nebo podpora VC25 000 $ - 100 000 $Afiliace s partnerem
Společnost nativní pro AI100 000 $ - 300 000 $Zaměření na technologii

Úroveň pro začátečníky je k dispozici prakticky jakémukoli startupu bez zvláštních požadavků. Poskytuje vám dostatek kreditů pro prototypování a spuštění základního produktu AI na AWS. Vyšší úrovně poskytují dramaticky více kreditů pro startupy s kvalifikovanými afiliacemi nebo se specifickým zaměřením na technologie AI.

Rozdíly mezi úrovněmi jdou nad rámec pouhého množství kreditů. Vyšší úrovně zahrnují další výhody, jako jsou hodiny dedikované technické podpory, revize architektury, školicí zdroje a pomoc při vstupu na trh. Klíčem k maximalizaci vašich kreditů je pochopení, která úroveň odpovídá vašemu profilu a jak svou žádost prezentovat.

Strategie podávání žádostí, kvalifikované organizace a podrobnosti specifické pro jednotlivé úrovně jsou k dispozici prostřednictvím AI Perks.


AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

Můžete použít kredity AWS pro modely AI na Bedrock?

Ano, kredity pro startupy AWS pokrývají modely třetích stran na Amazon Bedrock. To je významná výhoda – váš jediný kreditní fond pokrývá jak infrastrukturu, tak inferenci modelů AI.

Bedrock vám poskytuje přístup k základním modelům od více poskytovatelů prostřednictvím jediného API:

Model na BedrockVstup (na 1 milion tokenů)Výstup (na 1 milion tokenů)
Claude Sonnet 4.53,00 $15,00 $
Claude Haiku 3.50,80 $4,00 $
Claude Opus 4.615,00 $75,00 $
Mistral Large2,00 $6,00 $
Llama 3.1 70B0,72 $0,72 $
Amazon Titan Text0,15 $0,20 $

Se 100 000 $ v kreditech AWS byste mohli provozovat Claude Sonnet 4.5 pro zhruba 6 milionů požadavků při běžném využití tokenů. To jsou roky produkčního provozu AI bez nákladů.

Provozování Claude přes Bedrock místo přímo přes Anthropic znamená, že jediný kreditní fond pokrývá vše – vaše výpočetní prostředky, úložiště, databáze a inferenci modelů AI. Žádné samostatné fakturace, žádné samostatné žádosti o kredity. Pro týmy, které již staví na AWS, to výrazně zjednodušuje provoz.


AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

Proč jsou kredity AWS cenné pro startupy v oblasti umělé inteligence?

**Kredity AWS pokrývají celou vaši infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra infra * The 2026 edition of the AI Perks report on AWS credits indicates a significant increase in potential free cloud credits for startups. In 2026, startups can expect to receive between $1,000 and $300,000 in free AWS credits. This range is determined by several factors, including the startup's developmental stage, its affiliations with accelerators, venture capital firms, or other partner organizations, and its eligibility for specific AWS programs.

These credits are versatile and can be applied to a wide array of AWS services. Notably, they can be used for Amazon Bedrock, a service that simplifies the deployment and management of various AI models such as Claude, Mistral, and Llama, all through a unified API.

For startups focused on artificial intelligence, AWS credits represent the most substantial cloud credit offering available in 2026, significantly surpassing what is provided by comparable programs from Azure and Google Cloud. These credits not only cover traditional infrastructure costs like compute and storage but also extend to the inference of foundation models through Bedrock. The AI Perks platform offers comprehensive guides to all AWS credit programs and provides insights on how to leverage credits from multiple providers simultaneously.

AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

Understanding AWS Startup Credit Programs

AWS has established a variety of credit programs tailored to support startups at different phases of their growth. The awarded credit amounts can vary considerably based on the specific profile of each startup, and many startups may qualify for more credits than they initially anticipate.

The table below outlines the general credit ranges and key determining factors for different startup stages:

Startup StageCredit RangeKey Factor
Just starting outUp to $1,000Basic application
Accelerator/VC-backed$25,000 - $100,000Partner affiliation
AI-native company$100,000 - $300,000Technology focus

The entry-level credit tier is accessible to nearly all startups without imposing stringent prerequisites. It provides sufficient credits to enable startups to develop prototypes and launch rudimentary AI products on the AWS platform. Higher tiers are designed to offer substantially greater credit allocations for startups that possess qualifying affiliations or demonstrate a distinct focus on AI technologies.

The advantages of higher tiers extend beyond mere credit amounts. These elevated tiers typically include additional benefits, such as dedicated technical support hours, expert architecture reviews, access to comprehensive training resources, and strategic assistance for go-to-market initiatives. Effectively identifying the tier that best matches your startup's profile and strategically presenting your application are crucial steps toward maximizing the value of your AWS credits.

Detailed information regarding application strategies, the list of qualifying organizations, and specific benefits for each tier can be found on the AI Perks website.

AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

Utilizing AWS Credits for AI Models on Bedrock

Indeed, AWS startup credits are applicable to third-party models available on Amazon Bedrock. This offers a substantial advantage, consolidating your entire credit pool for both infrastructure and AI model inference needs.

Amazon Bedrock provides a unified API for accessing a diverse range of foundation models from multiple providers:

Model on BedrockInput (per 1M tokens)Output (per 1M tokens)
Claude Sonnet 4.5$3.00$15.00
Claude Haiku 3.5$0.80$4.00
Claude Opus 4.6$15.00$75.00
Mistral Large$2.00$6.00
Llama 3.1 70B$0.72$0.72
Amazon Titan Text$0.15$0.20

With an allocation of $100,000 in AWS credits, you could support Claude Sonnet 4.5 for approximately 6 million requests, assuming typical token usage. This effectively translates to several years of production AI workloads at no direct cost.

Opting to run Claude via Bedrock instead of directly through Anthropic ensures that a single credit pool covers all associated costs—compute, storage, databases, and AI model inference. This eliminates the need for separate billing arrangements or multiple credit applications, significantly streamlining operations for teams already integrated with AWS.

AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

The Value of AWS Credits for AI Startups

A key distinction of AWS credits is their comprehensive coverage of your entire infrastructure stack, not limited to AI models alone. This is where they fundamentally differ from direct provider credits offered by companies like OpenAI or Anthropic.

Consider a typical AI SaaS product: it necessitates a backend server, a database, object storage for user files, a Content Delivery Network (CDN) for efficient content delivery, and API access to models like Claude for its AI functionalities. Direct provider credits would only subsidize the Claude API usage. However, AWS credits, when utilized through Bedrock, provide a consolidated credit pool that covers all these components.

Here's a breakdown of what AWS credits typically cover for an AI startup:

  • Amazon Bedrock: Inference for foundation models (including Claude, Mistral, Llama, and Titan).
  • EC2 / ECS: Compute resources for your application's backend.
  • S3: Storage for training data, user uploads, and log files.
  • RDS / DynamoDB: Databases to support your application.
  • Lambda: Serverless functions for managing API endpoints.
  • CloudFront: CDN for global content delivery.
  • SageMaker: Tools for custom model training and fine-tuning.

Most AI startups allocate between 60-70% of their infrastructure budget towards compute and AI inference. By utilizing AWS credits, you effectively eliminate both these significant costs simultaneously. A startup running Claude on Bedrock alongside standard web infrastructure can potentially operate for 1-3 years on higher-tier credits.

This extended runway is invaluable for finding product-market fit without depleting investor capital on infrastructure expenses.

AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

AWS Credits vs. Direct Provider Credits

AWS credits and direct provider credits serve distinct yet complementary purposes. Direct credits from providers like Anthropic or OpenAI are solely applicable to their specific API usage. In contrast, AWS credits offer broad coverage across your entire technology stack.

FactorAWS CreditsDirect Provider Credits
CoverageAll AWS services + Bedrock AISingle provider API only
Credit range$1,000 - $300,000$5 - $150,000
AI modelsClaude, Mistral, Llama, TitanProvider's models only
InfrastructureCompute, storage, databases, CDNNone
BillingSingle AWS billSeparate per provider

The most advantageous strategy involves leveraging both. Utilize AWS credits for your core infrastructure and AI workloads managed through Bedrock. Reserve direct provider credits for provider-specific features or situations where their direct API pricing proves more economical than Bedrock's.

This dual-source approach is characteristic of highly efficient startups. By simultaneously drawing from both credit pools, they maximize their total operational runway and eliminate out-of-pocket expenses for both AI and infrastructure costs.

AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

Stacking AWS Credits with Other AI Credit Programs

AWS credits and direct provider credits function as independent, concurrent resources. This means you can run Claude through Bedrock using AWS credits and simultaneously utilize the Anthropic API with Anthropic credits without any conflict.

Your ProfileAWS CreditsDirect Provider CreditsTotal Potential
Solo developer$1,000$1,000-$5,000$2,000-$6,000
Early startup$25,000-$100,000$5,000-$25,000$30,000-$125,000
AI startup$100,000-$300,000$10,000-$50,000$110,000-$350,000

"Stacking" credits is the most effective method for extending your overall operational runway. Apply to AWS programs and direct provider programs independently; they do not affect each other. Specific guidance on combinations, application order, and timing strategies is detailed on the AI Perks platform.

Subscribe at getaiperks.com →

AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

Getting Started with Free AWS Credits

Step 1: Obtain Your Credit Guide

Subscribe to AI Perks to access step-by-step application guides for every AWS credit tier. The founding team, with experience from Y Combinator, Techstars, and Antler, has successfully applied to these programs numerous times.

Step 2: Determine Your Eligibility Tier

Identify the credit tier that aligns with your startup's current stage. Solo founders, teams supported by accelerators, and companies specializing in AI are eligible for varying credit amounts, ranging from $1,000 to $300,000.

Step 3: Submit Your Application

Proceed with submitting your application through the relevant AWS program corresponding to your tier. Entry-level credits are available through a straightforward, self-service process. Higher tiers involve a review process where strategic positioning of your application is key.

Step 4: Activate Bedrock Access

Once your credits are active, enable Amazon Bedrock within your AWS console. This will grant you access to foundation models such as Claude, Mistral, and Llama. All inference costs for Bedrock will be automatically covered by your AWS credits.

Step 5: Integrate with Other Providers

Simultaneously apply for direct credits from Anthropic, OpenAI, and other providers. These programs are separate and can be combined with your AWS credits to maximize your total operational runway.

AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

Frequently Asked Questions

How much free AWS credit can startups receive?

AWS provides $1,000 to $300,000 in free credits, with the amount dependent on your startup's stage and program eligibility. Various tiers are available to accommodate different company profiles, from solo entrepreneurs to advanced AI technology developers. AI Perks offers detailed application guides for all tiers.

Can I use AWS credits for Claude and other AI models?

Yes, AWS credits can be used for third-party models on Amazon Bedrock, including Claude from Anthropic, Mistral, Llama from Meta, and Amazon Titan. This consolidation allows your single AWS credit pool to cover both your complete infrastructure and AI model inference without requiring separate billing or credit applications.

Is VC funding a prerequisite for obtaining AWS credits?

AWS offers credit programs designed for startups at all stages, from bootstrapped solo founders to venture-backed entities. The credit amount you qualify for is based on your specific profile and affiliations. AI Perks provides comprehensive details on the requirements and application strategies for each AWS credit tier.

What is the duration of AWS startup credits?

AWS startup credits are issued with extended validity periods, providing startups with ample time to develop, refine their offerings, and achieve product-market fit before the credits expire. A critical strategy involves carefully timing your applications to maximize overlap with credits from other providers, which can significantly extend your effective runway beyond any single program.

What is Amazon Bedrock and why is it important?

Amazon Bedrock is AWS's managed service that offers access to foundation models from providers like Anthropic, Mistral, and Meta through a single, unified API. Its importance lies in the fact that your AWS credits cover Bedrock usage, allowing you to deploy advanced AI models such as Claude without incurring separate billing or requiring individual credit applications from each model provider.

Is it possible to stack AWS credits with Anthropic or OpenAI credits?

Absolutely. AWS credits and direct provider credits are entirely separate and operate concurrently. You can utilize Claude through Bedrock with AWS credits while simultaneously accessing it via Anthropic's API using Anthropic credits, effectively doubling your coverage for the same AI models.

AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

Your Infrastructure Costs Should Be Eliminated During the Build Phase

AWS credits cover all essential needs for an AI startup, including compute, storage, databases, and AI model inference. By combining these with credits from other providers, you can sustain operations for years without incurring infrastructure expenses.

With AI Perks, you gain access to:

  • Up to $5,000-$175,000+ in free AI API credits across a range of providers.
  • Detailed, step-by-step application guides for every AWS credit tier.
  • Strategic advice on combining AWS credits with those from Anthropic, OpenAI, and other platforms.
  • Over 200 additional startup perks beyond AI credits.

Cease paying for infrastructure before generating revenue.

Subscribe at getaiperks.com →


Up to $300,000 in free AWS credits for AI startups. Access your application guide at getaiperks.com.

AI Perks

AI Perks poskytuje přístup k exkluzivním slevám, kreditům a nabídkám na AI nástroje, cloudové služby a API, aby pomohl startupům a vývojářům ušetřit peníze.

AI Perks Cards

This content is for informational purposes only and may contain inaccuracies. Credit programs, amounts, and eligibility requirements change frequently. Always verify details directly with the provider.