| https://www.fatihyildirim.tr |
|
|
|
|
|
|
| |
TLC |
|
| |
TLS Nedir? |
|
|
|
|
|
|
|
| |
TLS'nin Kriptografik Amaçları: |
|
|
|
|
| |
TLS'de Kullanılan Temel Kriptografik Mekanizmalar: |
|
|
|
| |
TLS El Sıkışması (Handshake)
Kriptografik Adımlar: |
|
|
|
| |
TLS 1.3 ile Gelen Kriptografik
İyileştirmeler: |
|
|
|
| |
Kriptografik Güvenlik Konuları: |
|
|
|
| |
Forward Secrecy
(FS) |
|
|
|
|
|
| |
|
|
|
|
|
|
|
| |
|
|
|
|
|
Transport Layer Security |
|
| |
Son Güncelleme: 10.06.2026 r.01.01 |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| TLS
Nedir? |
|
|
|
|
|
|
|
|
|
|
| |
TLS, bir ağ
üzerinden iki uygulama (örneğin bir web tarayıcısı ile
bir sunucu) arasında iletişim yaparken gizlilik,
bütünlük ve kimlik doğrulama sağlayan
bir protokoldür. HTTPS'nin temelidir. |
|
| |
|
|
|
|
|
|
|
|
|
|
| TLS'nin
Kriptografik Amaçları: |
|
|
|
|
|
|
|
|
| |
1. Gizlilik
(Confidentiality) Verinin sadece alıcı
tarafından okunabilmesi |
|
|
|
| |
2. Bütünlük (Integrity) Verinin yolda değiştirilmediğinin
garantisi |
|
|
|
|
| |
3. Kimlik
Doğrulama (Authentication) Karşı
tarafın gerçekten kim olduğunu söylediği kişi
olduğunun teyidi |
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| TLS'de
Kullanılan Temel Kriptografik Mekanizmalar: |
|
|
|
|
|
|
|
|
| |
1. Asimetrik (Public
Key) Kriptografi |
|
|
|
|
|
|
|
|
| |
Amaç: Güvenli
anahtar değişimi ve kimlik doğrulama |
|
|
|
|
|
|
|
| |
Kullanılan
algoritmalar: RSA, ECDSA, Diffie-Hellman (DH),
ECDHE |
|
|
|
|
|
|
| |
TLS el
sırasında (handshake) sunucu sertifikası doğrulanır
ve bir "Pre-Master Secret" asimetrik olarak şifrelenip
gönderilir (veya DH ile türetilir) |
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
2. Simetrik
Kriptografi |
|
|
|
|
|
|
|
|
|
|
| |
Amaç: Gerçek
veri aktarımının hızlı ve güvenli şekilde
şifrelenmesi |
|
|
|
|
|
|
| |
Kullanılan
algoritmalar: AES, ChaCha20, 3DES (eski) |
|
|
|
|
|
|
|
| |
TLS oturum boyunca
anahtar (session key) ile veri şifrelenir |
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
3. Hash
Fonksiyonları ve HMAC |
|
|
|
|
|
|
|
|
|
| |
Amaç: Bütünlük
kontrolü ve mesaj doğrulama |
|
|
|
|
|
|
|
|
| |
Kullanılanlar: SHA-256, SHA-384 (SHA-1 güvensiz kabul edilir) |
SHA256 Generator |
|
|
|
|
| |
HMAC ile
verinin hem bütünlüğü hem de orijinalliği sağlanır |
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
📍 HMAC (Hash
Tabanlı Mesaj Doğrulama Kodu), verilerin
bütünlüğünü ve kimliğini doğrulamak için kullanılan,
gizli bir kriptografik anahtar ile bir hash (özet) fonksiyonunu
birleştiren güvenlik yöntemidir. Verinin iletim sırasında
değiştirilmediğini ve gerçekten yetkili bir gönderici
tarafından oluşturulduğunu kanıtlar. |
|
|
|
| |
[HMAC (Hash-Based Message Authentication Code)] |
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
4. Anahtar Türetme
Fonksiyonları (KDF) |
|
|
|
|
|
|
| |
Amaç: Tek
bir master secrettan birden çok oturum anahtarı üretmek |
|
|
|
|
| |
TLS 1.3te HKDF (HMAC-based KDF)
kullanılır |
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
📍 HKDF (HMAC
tabanlı Çıkarma ve Genişletme Anahtar Türetme Fonksiyonu) ,RFC 5869'da tanımlanan ve zayıf/kısa bir ana
materyalinden (master secret) birden fazla kriptografik olarak güçlü anahtar
türetmek için kullanılan standart bir kriptografik işlevdir. |
|
| |
[HKDF (HMAC-based Key
Derivation Function)] |
|
| |
|
|
|
|
|
|
|
|
|
|
| TLS El
Sıkışması (Handshake) Kriptografik Adımlar: |
|
|
|
|
|
|
|
| |
1. ClientHello /
ServerHello Kriptografik parametreler (cipher
suite) karşılıklı belirlenir |
|
|
| |
2. Sertifika Gönderimi Sunucu (ve isteğe bağlı olarak client)
dijital sertifikasını gönderir |
|
|
| |
3. Anahtar
Değişimi Örneğin ECDHE ile
ephemeral anahtarlar değiştirilir |
|
|
|
| |
4. Master Secret
Hesaplaması Her iki taraf
bağımsız olarak aynı master secretı türetir |
|
|
| |
5. Oturum
Anahtarlarının Türetilmesi Master
secrettan simetrik şifreleme, MAC, IV anahtarları türetilir |
|
| |
6. Finished
Mesajları Tüm el
sıkışmasının hashi HMAC ile doğrulanır |
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| TLS 1.3 ile
Gelen Kriptografik İyileştirmeler: |
|
|
|
|
|
|
|
| |
Artık RSA anahtar
değişimi yok (Forward secrecy zorunlu
hale geldi sadece ECDHE gibi ephemeral yöntemler) |
|
| |
Güvensiz algoritmalar
kaldırıldı: SHA-1, RC4, 3DES, CBC
modu |
|
|
|
|
| |
El sıkışma
sırasında daha az gidiş-geliş (0-RTT
özelliği ile) |
|
|
|
|
| |
Tüm el
sıkışma artık şifreleniyor (daha
az bilgi sızdırma) |
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| Kriptografik Güvenlik
Konuları: |
|
|
|
|
|
|
|
|
| |
Zayıf cipher
suiteler: NULL şifreleme, export-grade
anahtarlar, CBC + MAC kombinasyonları (BEAST, Lucky13
saldırıları) |
|
| |
Protokol düşürme
saldırıları TLS 1.0 veya SSL 3.0a
düşürmeye karşı koruma |
|
|
|
| |
Sertifika doğrulama
hataları PKI (Public Key Infrastructure)
zincirine güven |
|
|
|
| |
Forward secrecy Eğer yoksa, sunucunun özel anahtarı ele
geçirildiğinde tüm geçmiş oturumlar çözülebilir |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Özetle: |
|
|
|
|
|
|
|
|
|
| |
TLS, asimetrik
kriptografi ile kimlik doğrulama ve güvenli
anahtar değişimi, simetrik kriptografi
ile gizlilik,
hash ve HMAC ile bütünlük sağlayan karma bir kriptografik protokoldür.
Günümüzde TLS 1.3 en güncel ve güvenli sürümdür ve tüm kritik internet
iletişimini korur. |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| Forward Secrecy (FS) |
|
|
|
|
|
|
🔝 |
|
|
| |
Forward Secrecy
(İleri Güvenlik / Gelecek Sırrı), modern
kriptografinin en önemli kavramlarından biridir. Özellikle TLS 1.3 ile
zorunlu hale gelmiştir. |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Forward Secrecy (FS)
Nedir? |
|
|
|
|
|
|
|
| |
Tanım: Uzun vadeli bir anahtarın (örneğin sunucunun
özel anahtarı) ele geçirilmesi durumunda, geçmişteki oturumların
şifresinin çözülememesini garanti eden bir özelliktir. |
|
| |
Yani: "Bugün bir
sunucunun özel anahtarını ele geçirsem, dün veya geçen hafta o
sunucuyla yapılan kaydedilmiş tüm konuşmaları
çözemem." |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Neden Bu Kadar Önemli? |
|
|
|
|
|
|
|
| |
FS olmadan,
saldırgan şunları yapabilir: |
|
|
|
|
|
|
| |
1. Bugün tüm TLS trafiğini kaydeder (pasif
dinleme) |
|
|
|
|
|
| |
2. Gelecekte sunucunun özel anahtarını ele geçirir
(örneğin mahkeme kararı, hack, içeriden sızdırma) |
|
| |
3. Geçmişte
kaydettiği tüm trafiği şifresini
çözer |
|
|
|
|
|
| |
Bu, "şimdi
kaydet, sonra çöz" (store now, decrypt later) stratejisiyle devletler
veya büyük kurumlar tarafından uygulanabilir. |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Forward Secrecy
Nasıl Çalışır? |
|
|
|
|
|
|
|
| |
FS Olmayan Klasik Yöntem
(RSA anahtar değişimi - TLS 1.2 ve öncesi): |
|
|
|
|
| |
İstemci |
|
Sunucu |
|
|
|
|
|
|
| |
| |
|
| |
|
|
|
|
|
|
| |
|------ "Merhaba"
-----------------> |
| |
|
|
|
|
|
|
| |
|<--- Sertifika + RSA_PubKey ---- |
| |
📍 RSA, iki büyük asal
sayının çarpımının zorluğuna dayanan, dijital
verileri güvenle iletmek için kullanılan asimetrik bir şifreleme
algoritmasıdır. |
|
| |
| |
|
| |
|
| |
|
Pre-Master Secret üretir |
| |
|
| |
|
RSA_PubKey ile şifreler |
| |
|
| |
|------ Şifreli Pre-Master
--------> |
| |
|
|
|
|
|
|
| |
| |
|
|
RSA_PrivateKey ile çözer |
|
|
|
|
| |
| |
|
| Master
Secret türetilir |
|
|
|
|
| |
|<--- Oturum anahtarları
-------> |
| (simetrik) |
|
|
|
|
|
|
| |
Sorun: Eğer saldırgan sunucunun RSA özel anahtarını ele
geçirirse, kaydedilmiş oturumdaki Pre-Master Secret'ı çözebilir
→ tüm oturum anahtarları hesaplanabilir → geçmiş tüm trafik çözülür. |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
FS'li Yöntem
(Diffie-Hellman Ephemeral - DHE veya ECDHE): |
|
|
|
|
| |
İstemci |
|
|
Sunucu |
|
|
|
|
|
| |
| |
|
|
| |
|
|
|
|
|
| |
|--- "Merhaba + DH geçici açık
anahtarım" --> |
| |
📍
Diffie-Hellman Geçici (DHE)İki tarafın geçici,
tek kullanımlık anahtarlar kullanarak güvenli olmayan bir ağ
üzerinden ortak bir gizli anahtar oluşturmasına olanak tanıyan
bir anahtar anlaşma protokolü. |
|
| |
|<--- Sertifika + DH geçici açık
anahtarım --- |
| |
|
| |
| |
|
|
| |
|
| |
|
İkisi de aynı DH hesaplamasını yapar: |
| |
|
| |
| DH_Secret = (karşı
tarafın geçici açığı)^kendi geçici gizli anahtarı
mod p | |
|
|
|
| |
| |
|
|
| |
|
|
|
|
|
| |
|
Bu DH_Secret'ten Master Secret türetilir |
| |
|
|
|
|
|
| |
| |
|
|
| |
|
|
|
|
|
|
| |
| Sunucunun DH geçici anahtarı,
sunucu sertifikası ile imzalanır (kimlik) | |
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Neden FS var? |
|
|
|
|
|
|
|
|
| |
DH anahtar
değişimi için kullanılan ephemeral
(geçici) anahtar çifti oturum biter
bitmez sonsuza kadar silinir |
|
| |
Sunucunun uzun vadeli
özel anahtarı sadece imzalama için kullanılır, şifreleme için
değil |
|
|
| |
Saldırgan
sunucunun kalıcı özel anahtarını ele geçirse bile, DH'nin geçici gizli anahtarlarını bulamaz → oturum anahtarını hesaplayamaz |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Detaylı Kriptografik
Çalışma Prensibi (ECDHE örneği) |
|
|
|
|
|
| |
1. İstemci: Geçici bir anahtar çifti üretir (c_priv, c_pub) |
|
|
|
|
|
| |
2. Sunucu: Geçici bir anahtar çifti üretir (s_priv, s_pub) |
|
|
|
|
|
| |
3.
İstemci c_pub'u, sunucu s_pub'u karşılıklı
gönderir |
|
|
|
|
|
| |
4. Her iki taraf: |
|
|
|
|
|
|
|
|
| |
DH_secret = ECDH(c_priv,
s_pub) = ECDH(s_priv, c_pub) |
|
|
|
|
|
| |
5. DH_secret →
KDF → Master Secret → Oturum anahtarları |
|
|
|
|
| |
Kritik nokta: c_priv ve s_priv sadece RAM'de bulunur ve
oturum bittiğinde kesinlikle silinir. Disk'e asla yazılmaz. |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Gerçek Dünya Örneği |
|
|
|
|
|
|
|
|
| |
FS yok (RSA): |
|
|
|
|
|
|
|
|
| |
Bugün Amazon ile
alışveriş yaptınız. Gelecek yıl Amazon'un özel
anahtarı çalındı. Hacker geçen yılki kaydettiği
trafiğinizle kredi kartı bilgilerinizi çözebilir. |
|
| |
FS var (ECDHE): |
|
|
|
|
|
|
|
|
| |
Aynı senaryoda,
Amazon'un özel anahtarı çalınsa bile, geçmiş
alışverişinizin şifresi çözülemez çünkü her oturuma özel geçici anahtarlar artık
yoktur. |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
📍 ECDHE'nin
açılımı şudur:Eliptik
Eğri Diffie-Hellman GeçiciBu, güvenli
bağlantılarda (TLS/SSL gibi) kullanılan, iki tarafın
güvenli olmayan bir kanal üzerinden ortak bir gizli anahtar
oluşturmasına olanak tanıyan ve uzun vadeli anahtarların
ele geçirilmesi durumunda bile geçmiş iletişimlerin güvenli
kalmasını sağlayan bir kriptografik anahtar değişim
protokolüdür |
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
TLS Sürümlerinde FS
Durumu |
|
|
|
|
|
|
|
| |
|
|
FS Zorunlu mu? |
Varsayılan Cipher
Suite |
|
|
|
|
| |
SSL 3.0 / TLS 1.0 |
Hayır |
|
RSA (FS yok) |
|
|
|
|
| |
TLS 1.1 |
|
Hayır |
|
RSA |
|
|
|
|
|
| |
TLS 1.2 |
|
Hayır (opsiyonel) |
Genellikle ECDHE (tavsiye
edilir) |
|
|
|
| |
TLS 1.3 |
|
Evet |
|
Sadece ECDHE veya DHE (RSA anahtar değişimi yasak) |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
FS Sağlayan
Algoritmalar |
|
|
|
|
|
|
|
| |
DHE (Diffie-Hellman
Ephemeral) klasik, yavaş |
|
|
|
|
|
|
| |
ECDHE (Elliptic
Curve DHE) modern, hızlı, TLS 1.3'ün tercihi |
|
|
|
|
| |
PSK with ECDHE IoT ve kısıtlı ortamlar için |
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Önemli Uyarı |
|
|
|
|
|
|
|
|
| |
Forward Secrecy,
sadece anahtar değişimi için geçerlidir. Eğer
bir oturumun oturum anahtarları (simetrik anahtarlar) o an RAM'den okunursa, o anki
oturum çözülebilir. FS, geçmiş oturumları gelecekteki anahtar
sızıntılarına karşı korur, aktif bir
saldırıya karşı değil. |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Peki Herkes Neden Hemen
FS'ye Geçmedi? |
|
|
|
|
|
|
| |
Hesaplama maliyeti: Her oturum için yeni anahtar çifti üretmek (özellikle
DHE) RSA'dan daha pahalı |
|
| |
Gecikme: Ekstra hesaplama ve mesajlaşma gecikmeyi
artırır (ama modern CPU'lar için neredeyse ihmal edilebilir) |
|
| |
Uyumluluk: Eski istemci/sunucu yazılımları ECDHE
desteklemez |
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Bugün FS artık standarttır.
Hiçbir ciddi sistem RSA anahtar değişimini
kullanmamalıdır. Tarayıcılar, e-posta sunucuları,
VPN'ler, anlık mesajlaşma uygulamaları (Signal, WhatsApp)
Forward Secrecy kullanır. |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|